一,数据结构

代码质量衡量标准众多,除了代码的可维护性,代码的效率也是衡量代码质量的重要标准。写出快速代码的第一步,就是要理解数据结构,从而清楚不同数据结构对代码速度的影响,从而能够在开发过程中基于需求选择合适的数据结构。

数据结构的定义和重要性

数据可以指代所有类型的信息,最基本的数据就是数和字符串。而数据结构就是数据的组合方式,不仅如此数据结构还会极大影响代码运行速度。只有深刻理解数据结构对软件性能可能造成的影响,才能写出快速而优雅的代码。

两种基本数据结构

数组和集合是两种基本的数据结构,要理解数据结构的性能,需要分析代码操作数据结构的常用方式,包含四种操作:读取、查找、插入、删除,下面分别说明这两种基本数据结构对应操作所要消耗的步骤数。

衡量一个操作的速度,不采用纯粹的时间长短,而是采用步骤数来衡量,因为纯粹的时间长短依赖于具体的计算机架构、机型的新旧等等因素,不确定性很大,也不可靠。衡量操作的速度也就是日常计算机教材中所说的时间复杂度,用大O表示法。

数组

数组算是最基本的数据结构,它是一系列数据元素。

数组元素的读取

时间复杂度为O(1)。程序声明数组的时候,会分配一段连续的内存单元供其使用,而计算机可以一步跳转到任意的内存地址,同时计算机将内存分配给数组时,会记录数组起始内存地址。因此,计算机只需1步即可读取到指定索引的数组值。

数组元素的查找

时间复杂度为O(N)。计算机要查找数组中指定的数值,只能从起始地址一个一个数据元素类型单元去寻找,最多需要N步(N代表数组元素的数量)。

数组元素的插入

分情况,如果在数组末尾插入,那么时间复杂度为O(1),如果在中间或者开头插入数据,则需要更多的步数,最坏情况,在数组头部插入数据,则需要N+1步,移动N个数据,插入1个数据。

数组元素的删除

分情况,如果在数组末尾删除,那么时间复杂度为O(1),如果在中间或者开头删除数据,则需要更多的步数,最坏情况,在数组头部删除数据,则需要N步,删除1个数据,移动N-1个数据。

集合

集合和数组很相似,区别在于集合中不能插入重复值(现在有些语言也支持Multi-Set,这又是另一说)。

集合元素的读取

时间复杂度为O(1),同数组元素读取的时间复杂度。

集合元素的查找

时间复杂度为O(N),同数组元素查找的时间复杂度。

集合元素的插入

和数组元素插入的区别是,集合在插入前需要先查找是否是重复的值。因此最坏情况集合元素的插入比数组元素的插入多N步操作。

集合元素的删除

和数组元素的删除时间复杂度相同。

以上内容均是学习《秒懂算法》这本书的课后回忆,用来帮助检验学习效果,查漏补缺。有兴趣的朋友可以直接阅读该书。

你可能感兴趣的:(算法,数据结构)