算法的窥探

计算机语言能对计算的控制是有限的, 最大程度的交互就是游戏, 而计算机对问题的求解是无限度的.本篇是对计算机数据结构以及算法的使用做一些探索.

本篇探讨的是:

  1. 什么是数据结构? 为什么需要数据结构 ?
  2. 为什么使用算法?
  3. 怎样掌握他们?

在探索之前, 先要提到的是数学建模.

一个苹果从空中落下来, 它的运动情况是符合这个公式的.

H= 1/2g t^2 

你可以依据这个模型, 知道不同T情况下的H , 对这个现实问题的情况进行更好的预测和处理.

这个过程, 就是对现实问题的求解, 是数学建模. 编程也是对现实问题的求解. 而数据结构与算法是在计算机领域的建模.

程序建模一般符合这样的三个过程.

1. 数据结构

最基本的数据结构, 其实是变量, 我们通常编程用到的最简单的数据结构, 基于变量之上的编程, 是最初级的编程. 使用了复杂一点数据结构, 并在其上编程, 取决于面对的问题. 通常情况下 , 使用的数据结构越复杂, 其编程能力越强, 对去现实问题的求解越强

选择合适的数据结构, 应当考虑所选择结构的排列规则, 以及利用该的运算特性

2. 算法

算法是问题求解的一个子模块, 又是一个庞大的体系, 初学使用, 应每一个数据结构下着重掌握其中一个算法, (例如线性结构, 就掌握快速排序; 图形结构, 掌握最短路径)

将精力集中于, 使用而不是在算法的理论的掌握上, 理论的掌握需要日积月.

算法的分类

算法的性能:

算法的评价标准是以 时间和空间复杂度作为, 分析的依据, 这是重中之重.

大O表示法 : 一般情况下, 我们只考虑算法的时间方面的性能,忽略空间上的性能.

3. 怎样与掌握

从上面来看, 可以将算法学习分为两个部分,

  1. 运用层次上: 建模, 抽象问题的分析
  2. 理论部分 从数据结构方面, 算法求解方面.

相关资源

  1. 理论学习参考书籍: 算法图解, 大话数据结构

  2. 实战网址: leetcode 英文版, 中文版是高级篇

例1:(变量型结构的求解)

求苹果下落的时间

问题抽象: 时间, 位移

数据结构: 变量时间T 位移H

算法: H= 1/2 g * t*t

例2:(线性结构的求解)

给定一堆数据和一个目标值,请你在该数中找出和为目标值的那 两个 整数,并返回他们。

问题抽象: 数组 nums ; 一个目标值 target.

数据结构: 数组+ 变量

示例:

给定 nums = [2, 7, 11, 15], target = 9

因为 nums[0] + nums[1] = 2 + 7 = 9
所以返回 [0, 1]

算法: 暴力求解: target - nums[i]=nums[!i]

例3:(非线性结构的求解)

小偷又一次发现了新地方。该区域只有一个入口。除入口外,每所房子都有一间,只有一间父母的房子。游览后,聪明的小偷意识到。如果在同一晚闯入两栋直接相连的房屋,它将自动与警方联系。

确定窃贼今晚可以在不通知警察的情况下抢走的最大金额

输入: [3,2,3,null,3,null,1]

      3
    /   \
   2     3
    \   /  
     3 1
 
输出: 7 
 说明:  小偷可以窃取的最大金额= 3 + 3 + 1 = 7 。

抽象: 房子排列规则

数据结构 二叉树, 队列

算法: 二叉树遍历, 奇数层一个队列, 偶数层一个队列. 队列大合大者, 为最大金额

相关资源

官网

猜你喜欢

转载自www.cnblogs.com/rainbowbridge/p/12387821.html