计算机语言能对计算的控制是有限的, 最大程度的交互就是游戏, 而计算机对问题的求解是无限度的.本篇是对计算机数据结构以及算法的使用做一些探索.
本篇探讨的是:
- 什么是数据结构? 为什么需要数据结构 ?
- 为什么使用算法?
- 怎样掌握他们?
在探索之前, 先要提到的是数学建模.
一个苹果从空中落下来, 它的运动情况是符合这个公式的.
H= 1/2g t^2
你可以依据这个模型, 知道不同T情况下的H , 对这个现实问题的情况进行更好的预测和处理.
这个过程, 就是对现实问题的求解, 是数学建模. 编程也是对现实问题的求解. 而数据结构与算法是在计算机领域的建模.
程序建模一般符合这样的三个过程.
1. 数据结构
最基本的数据结构, 其实是变量, 我们通常编程用到的最简单的数据结构, 基于变量之上的编程, 是最初级的编程. 使用了复杂一点数据结构, 并在其上编程, 取决于面对的问题. 通常情况下 , 使用的数据结构越复杂, 其编程能力越强, 对去现实问题的求解越强
选择合适的数据结构, 应当考虑所选择结构的排列规则, 以及利用该的运算特性
2. 算法
算法是问题求解的一个子模块, 又是一个庞大的体系, 初学使用, 应每一个数据结构下着重掌握其中一个算法, (例如线性结构, 就掌握快速排序; 图形结构, 掌握最短路径)
将精力集中于, 使用而不是在算法的理论的掌握上, 理论的掌握需要日积月.
算法的分类
算法的性能:
算法的评价标准是以 时间和空间复杂度作为, 分析的依据, 这是重中之重.
大O表示法 : 一般情况下, 我们只考虑算法的时间方面的性能,忽略空间上的性能.
3. 怎样与掌握
从上面来看, 可以将算法学习分为两个部分,
- 运用层次上: 建模, 抽象问题的分析
- 理论部分 从数据结构方面, 算法求解方面.
相关资源
理论学习参考书籍: 算法图解, 大话数据结构
实战网址: 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 。
抽象: 房子排列规则
数据结构 二叉树, 队列
算法: 二叉树遍历, 奇数层一个队列, 偶数层一个队列. 队列大合大者, 为最大金额
相关资源
来源:https://www.cnblogs.com/rainbowbridge/p/12387821.html