一、算法中的基本概念
1.算法的概述
2.算法的特性
3.算法设计的要求
4.算法和数据结构的关系和区别
5.算法的效率复杂度,也称为算法的时间复杂度
6.常见的算法举例
一、算法中的基本概念
1、算法的概述
算法(Algorithm)是一个有穷规则(或语句、指令)的有序集合。它确定了解决某一问题的一个运算序列。对于问题的初始输入,通过算法有限步的运行,产生一个或多个输出。
解释:是对特定问题求解步骤的一种描述,在计算机中表示为指令的有限序列,并且每一条指令表示一个或多个操作。(算法是描述解决问题的方法)
2、算法的特性
(1)输入:0或者多个外部输入
(2)输出:至少一个外部输出,或者有多个输出
(3)有穷性:在执行有限的步骤之后会自动结束而不会无限循环,可以理解为有限的步骤完成
解释:一个算法总是(对于任何合法的输入值)在执行有穷步之后结束,且每一步都可在有穷时间内完成。(有穷性指合理的、可接受的)
(4)确定性:每一步都有确定的含义,不会产生歧义的语法
解释:算法中每一条指令必须有确切的含义,读者理解时不会产生二义性。并且,在任何条件下,算法只有唯一的一条执行路径,即对相同的输入只能得到相同的输出。
(5)可行性:每一步都是可行的、能够在有限的时间内完成
解释:一个算法能行的,即算法中描述的操作都是可以通过已经实现的基本运算执行有限次来实现的。
3、算法设计的要求
(1)正确性:算法需要满足具体问题的需求,并且对于精心选择的典型的,苛刻的机组输入数据能够得出满足规格说明的结果
解释:正确”大体可分为四个层次:a.程序不含语法错误;b.程序对于几组输入数据能够得出满足规格说明要求的结果;c.程序对于精心选择的典型、苛刻而带有刁难性的几组输入数据能够得出满足规格说明要求的结果;d.程序对于一切合法的输入数据都能产生满足规格说明要求的结果。(通常c层意义的正确性作为衡量一个程序是否合格的标准)。
(2)可读性:不同人员能够阅读、正确理解、交流
(3)健壮性:对于各种合法或者不合法的输入,能够合法、适当地做出反应或者进行处理
(4)效率和低存储量需求:执行需要的时间、需要的最大的存储空间。
4、算法和数据结构的关系和区别
① 关系
算法设计:取决于选定的逻辑结构
算法实现:依赖于采用的存储结构
② 区别
数据结构只是静态的描述了数据元素之间的关系,高效的程序需要在数据结构的基础上设计和选择算法--程序=算法+数据结构
所以总结如下:算法是为了解决实际问题而设计的;数据结构是算凡需要处理的问题载体
数据结构与算法是相辅相成的
5.算法的时间复杂度
(1)算法的时间复杂度
总结:算法的时间复杂度是程序运行从开始到结束所需的时间
6.下面是常见的时间算法举例
案例1:常数阶O(1)
第一个语句只有两句语句,所以花费的时间是:1,
第二个语句有一个for循环,但是循环次数是固定的,10次,所以T(n)=10;则T(n)=11
案例2:线性阶O(n)
显而易见,只有一个循环,循环条件是从1到n,所以T(n)=O(n)
例3平方阶O(n^2)
第一句和第二句时间都是1,第三句和第四句是n,第五句是n,第六句是n*n,第七句是n*n则所有的时间总和是:O(T)=1+1+n+n+n^2+n^2=2+2n+2n^2=n^2
直接找最复杂的语句块,一看就是循环的嵌套,循环的条件都是从1到n,所以可得:T(n)=O(N^2)。
例4对数阶O(log2n)
循环的条件是从1到n,但是每次循环i*=2,所以T(n)=O(log2n)。
总结:程序运行所用的时间是所有的程序运行完毕所有时间之和,当N趋向于无穷大的时候,则对算式进行简化,简化的规则如下:
推导大O阶:
用常数1取代运行时间中的所有加法常数。
在修改后的运行次数函数中,只保留最高阶项。
如果最高阶项存在且不是1,则去除与这个项相乘的常数。得到的结果就是大O阶。
本文由作者在总结数据结构学习的基础上的来的,如果有好的建议,请留言。