数据结构与算法的关系
两者密不可分,相辅相成,可以说是黄金搭档,虽然分开来看好像也行,但是那样就失去了灵魂。如果说分开时是1+1=2的效果,那么合起来能起到1+1>>10的效果。
数据结构基本概念和术语
数据
可输入进计算机且能被计算机程序处理的符号及其集合。
如:文本,数字,音频,视频,图像等。
可分为数值型和非数值型:
数值型:整型,实型等。
非数值型:音频,视频,图像等。
数据对象
具有相同性质和数量的数据项的数据元素的集合,实际应用中通常简称为数据。
数据元素
组成数据且有一定意义的基本单位,通常看作整体。也叫做记录或结点。
如:人类中的人;动物中的鸡,狗,猪等。
数据项
组成数据元素的基本单位,也是数据不可分割的最小单位。
如:人的口,耳,鼻,姓名,身份证号等。
数据结构
相互之间存在一种或多种特定关系的数据元素的集合
可分为逻辑结构和物理结构(存储结构)。
逻辑结构:(可以用人类社会中的关系来看)
(1)集合结构:(500年前是一家的陌生人)
(2)线性结构:(九代单传)
(一对一)
(3)树形结构:(同一个祖宗的大家族)
(一对多)
(4)图形结构:(社会中的人际关系)
(多对多)
物理结构:
(1)顺序存储结构:存储单元(地址)连续,逻辑结构与物理结构一致。(可参考数组的空间分配)(数据不能随意改变)
(2)链式存储结构:仅用地址关联,一个联一个,地址之间不一定连续,数据可随意处理。(可参考门牌号,看号不看人)
抽象
抽取出事物所具有的普遍性的本质,忽略繁杂的细节,直指核心。(有点像通解)(或许也可以称之为“道”)
抽象类型
数学模型
算法
解决特定问题求解步骤的描述,在计算机中为指令的有限序列,并且每条指令表示一个或多个操作
特性(可参考降龙十八掌)
(1)输入:有零个或多个。(自练内力或醍醐灌顶)
(2)确定性:每个步骤都有确定含义,不二义。
(内力的运行路线仅一条,节点一对一)
(3)可行性:每一步都是可行的。(每个节点内力都能通过)
(4)有穷性:在可接受时间内执行完。(内力运行时间有限)
(5)输出:一个或多个。(放出一条或多条神龙)
算法设计要求(注意与特性区分)
(1)正确性:
算法至少应该具有输入、输出和加工处理无歧义性、能正确放映问题的需求、能够得到问题的正确答案
有四个层次:
1.算法程序没有语法错误。
2.对合法的输入数据能够产生满足要求的输出结果。
3.对非法的输入数据能够得出满足规格说明的结果。
4.对于精心选择的,甚至刁难的测试数据都有满足要求的输出结果。
算法的正确性大部分情况下都不能用程序来证明,而是用数学方法证明的。通常把层次3作为一个算法是否正确的标准。
(2)可读性:
算法设计的另一目的是为了方便阅读、理解和交流。
可读性是算法(也包括实现它的代码)好坏很重要的标志
(3)健壮性:
当输入数据不合法时,算法也能做出相关处理,而不是产生异常或莫名其妙的结果
(4)时间效率高和存储量低:
算法的执行时间少,算法程序运行时所占用的存储空间少。与
时间复杂度和空间复杂度有关。