一个好的算法应该如何评测(数据结构学习1)

程序设计 = 数据结构 + 算法。

一个好的算法应该如何评测(数据结构学习1)_第1张图片
程序设计.png

谈算法就不能不先聊聊数据结构了

数据结构

数据结构的数据单位

如图,举个例子,我们要处理全校学生的数据,每个班级就是数据对象(性质相同的数据元素的集合);每个学生就是一个数据元素;每个学生的年龄、性别、身高就是数据项。而数据结构是是一门学科,它教会我们“如何存储具有复杂关系的数据更有助于后期对数据的再利用”。


一个好的算法应该如何评测(数据结构学习1)_第2张图片
image.png

逻辑结构与物理结构

逻辑结构: 指的是数据对象中的数据元素之间的相互关系. 逻辑结构分为四种: 集合结构,线性结构,树形结构,图形结构.


一个好的算法应该如何评测(数据结构学习1)_第3张图片
数据结构分类.png

一个好的算法应该如何评测(数据结构学习1)_第4张图片
集合机构.png

一个好的算法应该如何评测(数据结构学习1)_第5张图片
线性机构.png

一个好的算法应该如何评测(数据结构学习1)_第6张图片
树形结构.png

一个好的算法应该如何评测(数据结构学习1)_第7张图片
图形结构.png

物理结构:数据的逻辑结构在计算机的存储形式。物理结构分为两种:顺序存储和链式存储。


一个好的算法应该如何评测(数据结构学习1)_第8张图片
顺序存储结构.png

一个好的算法应该如何评测(数据结构学习1)_第9张图片
链式存储结构.png

算法

什么是算法? 算法就是解决特定问题求解步骤的描述,在计算机中表现为指令的有限序列, 并且每个指令表示一个或多个操作.

一个好的算法应该如何评测(数据结构学习1)_第10张图片
算法.png

算法特性

输⼊和输出

有穷性

确定性

可行性

算法设计要求

对于一个问题的算法来说,之所以称之为算法,首先它必须能够解决这个问题(称为准确性)。其次,通过这个算法编写的程序要求在任何情况下不能崩溃(称为健壮性)。

如果准确性和健壮性都满足,接下来,就要考虑最重要的一点:通过算法编写的程序,运行的效率怎么样。

运行效率体现在两方面:
算法的运行时间。(称为“时间复杂度”)
运行算法所需的内存空间大小。(称为“空间复杂度”)

当然,算法是写给人看的,不是写给机器看的,所以也要具备可读性。

常⻅的算法时间复杂度

一个好的算法应该如何评测(数据结构学习1)_第11张图片
算法时间复杂度.png

效率直观图:


一个好的算法应该如何评测(数据结构学习1)_第12张图片
效率直观图.png

最好和最坏情况

最坏的情况运行时间是一种保证, 那就是运行时间将不会比这更坏了.

在应用中,这是一种最重要的需求,通常除非特别指定,我们提到的运行时间都是最坏情况下的运行时间.如果最坏情况下的运行时间一样,我们就需要比较平均运行时间。

算法空间复杂度

算法的空间复杂度通过计算算法所需的存储空间实现,算法空间复杂度的计算公式记做: S(n) = n(f(n)),其中,n为问题的规模,f(n)为语句关于n所占存储空间的函数.

一般情况下, 一个程序在机器上执行时,除了需要寄存本身所用的指令,常数,变量和输入数据外,还需要一些对数据进行操作的辅助存储空间.
常用的空间复杂度有O(1)和O(n)。

你可能感兴趣的:(一个好的算法应该如何评测(数据结构学习1))