数据结构论坛

首页 » 分类 » 定义 » 数据结构学习笔记算法基础概念
TUhjnbcbe - 2020/11/11 6:28:00
北京哪家医院能治好白癜风 http://www.baidianfeng51.cn/baidianfengzixun/wuliliaofa/294.html

读《大话数据结构》学习笔记

算法的定义

算法是解决特定问题求解步骤的描述,在计算机中表现为指令的有序序列,并且每条指令标识一个或多个操作。

算法的特征

1.输入输出:算法具有零个或者多个输入。至少有一个或多个输出,因为不需要输出的算法是没有意义的。

2.有穷性:指算法在执行有限的步骤之后,自动结束而不会出现无限循环,并且每一个步骤在可接受的时间内完成。例如死循环就不满足有穷性。例如你写一个算法计算机需要计算二十几年就不满足在可接受时间内,所以也没多大意义。

3.确定性:算法的每一步骤都具有确定的含义,不会出现二义性。也就是说相同的输入只有相同的输出。

4.可行性:算法的每一步都必须是可行的,也就是说,每一步都能够通过执行有限的次数完成。

算法设计的要求

1.正确性:算法的正确性是指算法至少应该具有输入、输出和加工处理无歧义性、能正确反映问题的需求、能够得到问题的正确答案。算法程序需要达到标准为对于非法的输入数据能够满足规格说明的结果。

2.可读性:算法设计的另一个目的是为了方便于阅读、理解和交流。

3.健壮性:当输入税局不合法时,算法也能做出相关处理,而不是产生异常或者莫名其妙的结果。

4.时间效率高和存储量低:算法应该尽量满足时间效率高和存储量低的需求。就像你想花最少的钱得到最好的服务。

算法效率的度量方法

1.事后统计方法:这种方法主要是通过设计好的测试程序和数据,利用计算机计时器对不同算法编制的程序运行时间进行比较,从而确定算法效率的高低。这种方法有很大缺陷的:必须依据算法实现编制好的程序,这通常需要花费大量的时间和精力;不同的电脑运行的结果不一致,就算同一台电脑也有可能得出不同的结果;测试数据的设计比较困难,不能保证覆盖所有的使用场景。故而这种方法不予使用。

2.事前分析估算方法:在计算机程序编制前,依据统计方法对算法进行估算。

初步领略算法之美

现在我们有这样一个需求,需要计算1到的整数累加之和。一般人会这样处理,写个循环,代码如下:

constn=letresult=0letstartTime=newDate().getTime()for(leti=1;i=n;i++){result+=i}console.log(`for循环运算时间为${newDate().getTime()-startTime},运算结果为${result}`)//输出为for循环运算时间为,运算结果为

可以看见耗费的时间为毫秒,很简单的可以推理出当N的值越大,所耗费的时间越大。

接下来,让我们来看看使用高斯算法之后所耗费的时间

constn=letresult=0letstartTime=newDate().getTime()result=(1+n)*n/2console.log(`使用高斯算法运算时间为${newDate().getTime()-startTime},运算结果为${result}`)//输出为使用高斯算法运算时间为0,运算结果为

可以看见进行同样的运算,所耗费的时间几乎可以忽略不计,且N的值无论多大都不会增加运行所需要的时间。这将大大的提升程序的运行效率,也就是能让我们花最少的资源和时间得到相同的结果。

算法时间复杂度

算法的时间复杂度,也就是算法的时间量度。记作:T(n)=O(f(n))。它表示随问题规模n的增大,算法执行时间的增长率和f(n)的增长率相同,称作算法的渐进时间复杂度,简称为时间复杂度。其中f(n)是问题规模n的某个函数。

推导大O阶方法如下:

1.用常数1取代运行时间中的所有加法常数。

2.在修改后的运行次数函数中,只保留最高阶项。

3.如果最高阶项存在且不是1,则去除与这个项目相乘的常数。

得到的结果就是大O阶。

有了这些概念以后就知道之前的两个例子中,第一种方法的时间复杂度为O(n),第二种方法的时间复杂度为O(1)。

常见的时间复杂度

1.常数阶:O(1),也就是刚才我们的第二种算法(高斯算法),其常数值无论是多少都记为O(1)而不能是O(2)、O(10)等。

2.线性阶:O(n),也就是刚才我们的第一种算法,只有一重循环。

3.其他还有:平方阶O(n2)、立方阶O(n3)、对数阶O(logn)、指数阶O(2^n)、nlogn阶O(nlogn)等

他们之间从时间复杂度所耗费的时间从小到大依次是:

O(1)O(logn)O(n)O(nlogn)O(n2)O(n3)O(2^n)O(n!)O(n^n)

最坏情况与平均情况

最坏情况:最坏情况就是运行时间将不会再坏了。也就是说该算法得出结果所需要的最长时间。通常我们所说的运算时间指的就是最坏情况的运行时间。

平均情况:平均运行时间是所有情况中最有意义的,因为它是期望的运行时间。

空间复杂度

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

结语

基础概念基本了解完成,接下来就是开始战斗的时间了,加油~

预览时标签不可点收录于话题#个上一篇下一篇
1
查看完整版本: 数据结构学习笔记算法基础概念