@lwxyfer
2017-07-16T14:32:50.000000Z
字数 2991
阅读 1128
TODO
基础&算法&数据结构
数据结构和算法虽然对于目前的工作貌似没有太大作用,但是自己对这一快不清除,就如一块石头压在心上,所以也必须要解决,虽然很难,但是慢慢攻克吧。
网上一搜算法,绝对是各种文章,视频,还有什么教程培训之类的,暂不谈质量如何,首先对于我这种,时间是有限的,所以只能选择一个,最合适的一个,有些虽然好但是难,因为我也不是要一定深入到什么程度。能写基本的算法,有数据结构有一定认识就好了。
https://github.com/thejameskyle/itsy-bitsy-data-structures 从这开始吧,算是入门启蒙吧。
Algorithm为一个计算的具体步骤,常用于计算、数据处理和自动推理。精确而言,算法是一个表示为有限长列表的有效方法。算法应包含清晰定义的指令用于计算函数。
算法中的指令描述的是一个计算,当其运行时能从一个初始状态和初始输入(可能为空)开始,经过一系列有限而清晰定义的状态最终产生输出并停止于一个终态。一个状态到另一个状态的转移不一定是确定的。随机化算法在内的一些算法,包含了一些随机输入。
https://zh.wikipedia.org/wiki/%E7%AE%97%E6%B3%95 WIKI 讲的很清楚
https://zh.wikipedia.org/wiki/%E5%9B%BE%E7%81%B5%E6%9C%BA 图灵机的WIKI
数据是信息的载体,是描述客观事物的数、字符、以及所有能输入到计算机中,被计算机程序识别和处理的符号的集合。数据的本质是差异,每一种差异是一个值。数据的意义是用来对比。包含:数值性数据
和 非数值性数据
数据结构
是计算机科学与技术领域常用的术语。它用来反映一个数据的内部构成,即一个数据由哪些成分数据构成,以什么方式构成,呈什么结构。逻辑上的数据结构反映成分数据之间的逻辑关系,物理上的数据结构反映成分数据在计算机内的存储安排。数据结构是数据存在的形式。
数据类型
数据是按照数据结构分类的,具有相同数据结构的数据属同一类。同一类数据的全体称为数据类型。在程序设计高级语言中,数据类型用来说明一个数据在数据分类中的归属。它是数据的一种属性。这个属性限定了该数据的变化范围。为了解题的需要,根据数据结构的种类,高级语言定义了一系列的数据类型。不同的高级语言所定义的数据类型不尽相同。
抽象数据类型
抽象数据类型的含义可理解为数据类型的进一步抽象。即把数据类型和数据类型上的运算捆在一起,进行封装。引入抽象数据类型的目的是把数据类型的表示和数据类型上运算的实现与这些数据类型和运算在程序中的引用隔开,使它们相互独立。对于抽象数据类型的描述,除了必须描述它的数据结构外,还必须描述定义在它上面的运算(过程或函数)。抽象数据类型上定义的过程和函数以该抽象数据类型的数据所应具有的数据结构为基础。
以上:http://blog.lwxyfer.com/data-struture-type/
特征:
设计模式:
完全遍历 -- 不完全遍历
实现:
算法执行时间的增长率与f(n) 的增长率正相关,称作渐近时间复杂度(Asymptotic Time Complexity),简称时间复杂度。
常见的时间复杂度有:常数阶O(1),对数阶O(log2n),线性阶O(n), 线性对数阶O(nlog2n),平方阶O(n2),立方阶O(n3),..., k次方阶O(nk),指数阶O(2n)。随着问题规模n的不断增大,上述时间复杂度不断增大,算法的执行效率越低。
思考这些的时候,其实数据是对应在内存中的位置的。
访问accessing
查询searching
插入insert
删除delete
不同的数据结构对应不同的操作有不同的效率。即时间复杂度和空间复杂度是不同的,需要根据自己的应用情况,选择不同的数据结构。
外在的即写出来的表现形式,与内在的数据结构形式与实现。 注意分开理解。
具体实现时,需要确认 API 的规范性: 比如 增加一项,是 add
还是 push
;
https://zh.wikipedia.org/wiki/%E9%93%BE%E8%A1%A8
在结构化存储数据集时,链表时数组的一种重要的替代方式。
静态查找
动态查找
从定义上是可以理解的,但是对应到具体的语言里面去就蒙蔽了。