导论
数据结构
- 数据的逻辑结构(例如:增、删、查、改)
- 数据的存储结构(例如:List中ArrayList、LinkedList)
- 数据的运算
数据结构分类
- 线性结构
- 树型结构
- 图结构
4种基本存储映射
- 顺序
- 链接
- 索引
- 散列
数据结构 | 优点 | 缺点 |
数组 | 插入快、如果知道下标可以非常快存取 | 查找慢、删除慢、大小固定 |
有序数组 | 比无序数组查找更快 | 插入慢、删除慢、大小固定 |
栈 | 提供后进先出方式存取 | 存取其它项很慢 |
队列 | 提供先进先出方式存取 | 存取其它项很慢 |
链表 | 插入快、删除快 | 查找慢 |
二叉树 | 插入、查找、删除很快(如果树平衡的话) | 删除算法复杂 |
红-黑树 | 插入、查找、删除很快,树总是平衡的 | 算法复杂 |
2-3-4树 | 插入、查找、删除很快,树总是平衡的,类似的树磁盘存储有用 | 算法复杂 |
哈希表 | 如果关键字已知则存取极快、插入快 | 删除慢、如果不知道关键字则存取很慢,对存储空间使用不充分。 |
堆 | 插入、删除快,对最大数据项存取很快 | 对其它数据项存取慢 |
图 | 对现实世界建模 | 有些算法慢且复杂 |
数据库:如果使用索引卡作为一本地址簿,其中所有的卡片就是一个数据库。
记录:数据库中划分的单元,为存储信息提供一种结构格式。以上例子中,一张卡就代表一条记录。
字段:一条记录可以划为为几个字段,一个字段保存着一种特定的数据。比如一个人的名字、电话、地址。
关键字:在数据库中查找一条记录,需要记录中某个字段作为关键字。比如在记录字段的姓名中查找关键字 Brown 。
不变性:在很多算法中,有些条件在算法执行时是不变的,这些条件被称为不变性。
解决同一个问题总是存在着多种算法,而算法设计者在所花费的时间和所花费的空间资源往往要在两者之间采取折中,采用某种以空间资源换取时间资源的策略。
大O表示法
一种快捷的方法来评价计算机算法的效率,这种粗略的度量方法叫 大O表示法 。可以描述算法的速度是如何和数据项的个数相联系的比较。
大Θ(希塔)表示法
是算法分析的一种渐进估计,它是大O表示的扩展。
动态规划、分治法和贪心法都是利用求解子问题,而后利用子问题求解更上层问题,最终获得全局解决方案的方法。
但是三者的应用场景和性质却存在着极大的不同:
1.分治法
很容易与动态规划问题混淆,但两者却有着本质上的差异。
分治法采用的是递归的思想来求解问题,两个分解的子问题独立求解,其之间无任何的重叠。而上一层问题只需要对两个子问题进行一定的merge即可得到答案。即s(t)= s(sub1)+s(sub2),但是s(sub1)和s(sub2)之间(看子问题)无任何重叠。
典型应用:
a. 并规排序。
b. 芯片诊断。(前提是对的芯片>错误的芯片)
2. 贪心法
可以定义为 s(t)= s(t-1) + selection acoording to certain criteria。
同样其使用了类似迭代子问题的求解方式,逐步求得全局的最优答案。而其只有一个s(t-1),故不存在重叠求解子问题的情况。
3. 动态规划方法
该种方法较为复杂,但十分有用和高效,其核心性质是当前当前问题的答案s(t),并不能单独由s(t-1)求得。还有可能需要使用到s(1)...s(t-1)。具体需要使用到那些,是由问题本身的性质所决定的(常常是一个约束,或变相的约束)。
详细:http://blog.sina.com.cn/s/blog_928574110101i657.html
http://blog.csdn.net/htyurencaotang/article/details/9258557
http://jarg.iteye.com/blog/865117
http://blog.csdn.net/leo115/article/details/8076596