[大话数据结构]算法


算法相关:


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

我们不可能把所有的算法都实现,也更不可能用所有的输入逐一的验证算法,所以算法的正确性在大部分情况下都不能用程序来证明,而是用数学方法证明。

好的算法,应该具有正确性、可读性、健壮性、高效率和低存储量的特征,但是对于算法有意义的研究就是算法的效率性了。

算法效率的度量方法:

事后统计方法:这种方法主要是通过设计好的测试程序和数据,利用计算机计时器对不同算法编制的程序进行运行时间的比较,从而确定算法的执行效率。但是这种方法的缺点很明显,主要是必须依照算法事先编好程序实现,时间的统计依赖计算机硬件和软件的环境,算法的测试数据设计困难。

事前分析估算方法:

这种方法把一个程序的运行时间,看做依赖于算法的好坏问题的输入规模这两个方面。那么问题来了,什么是问题的输入规模?输入规模又是怎么度量的?

首先指出一个显而易见的事实:几乎所有的算法,对于规模更大的输入都需要运行更长的时间。所以研究算法效率时,把算法效率T作为一个以算法输入规模n为参数的函数是非常合乎逻辑的。

其实,测定运行时间最可靠的方法就是计算对运行时间有消耗的基本操作的执行次数。把基本操作的数量与输入规模关联起来,也就是基本操作的数量必须表示成输入规模的函数。

image_thumb1_thumb

表中算法的实际操作数量就是算法的基本操作的数量

算法的时间复杂度:

在进行算法分析时,语句(基本操作)总的执行次数T(n)是关于问题规模n的函数,进而分析T(n)随n的变化情况并确定T(n)的数量级。

常用的时间复杂度所消耗的时间从小到大依次是:

image

算法运行时间的最坏情况是运行时间的一种保证,那就是运行时间将不会再坏了。在应用中,这是一种最重要的需求,通常,除非特别指定,我们提到的运行时间都是最坏情况的运行时间。

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


总结:


作为数据结构的笔记,对算法的讨论先说这些。下面马上进入数据结构的真正的学习。

原文地址:https://www.cnblogs.com/stemon/p/4268253.html