程序设计 = 数据结构 + 算法。
谈算法就不能不先聊聊数据结构了
数据结构
数据结构的数据单位
如图,举个例子,我们要处理全校学生的数据,每个班级就是数据对象(性质相同的数据元素的集合);每个学生就是一个数据元素;每个学生的年龄、性别、身高就是数据项。而数据结构是是一门学科,它教会我们“如何存储具有复杂关系的数据更有助于后期对数据的再利用”。
逻辑结构与物理结构
逻辑结构: 指的是数据对象中的数据元素之间的相互关系. 逻辑结构分为四种: 集合结构,线性结构,树形结构,图形结构.
物理结构:数据的逻辑结构在计算机的存储形式。物理结构分为两种:顺序存储和链式存储。
算法
什么是算法? 算法就是解决特定问题求解步骤的描述,在计算机中表现为指令的有限序列, 并且每个指令表示一个或多个操作.
算法特性
输⼊和输出
有穷性
确定性
可行性
算法设计要求
对于一个问题的算法来说,之所以称之为算法,首先它必须能够解决这个问题(称为准确性)。其次,通过这个算法编写的程序要求在任何情况下不能崩溃(称为健壮性)。
如果准确性和健壮性都满足,接下来,就要考虑最重要的一点:通过算法编写的程序,运行的效率怎么样。
运行效率体现在两方面:
算法的运行时间。(称为“时间复杂度”)
运行算法所需的内存空间大小。(称为“空间复杂度”)
当然,算法是写给人看的,不是写给机器看的,所以也要具备可读性。
常⻅的算法时间复杂度
效率直观图:
最好和最坏情况
最坏的情况运行时间是一种保证, 那就是运行时间将不会比这更坏了.
在应用中,这是一种最重要的需求,通常除非特别指定,我们提到的运行时间都是最坏情况下的运行时间.如果最坏情况下的运行时间一样,我们就需要比较平均运行时间。
算法空间复杂度
算法的空间复杂度通过计算算法所需的存储空间实现,算法空间复杂度的计算公式记做: S(n) = n(f(n)),其中,n为问题的规模,f(n)为语句关于n所占存储空间的函数.
一般情况下, 一个程序在机器上执行时,除了需要寄存本身所用的指令,常数,变量和输入数据外,还需要一些对数据进行操作的辅助存储空间.
常用的空间复杂度有O(1)和O(n)。