数据结构知识整理3算法基本概念、数据结构+算法=程序

算法

算法是在具体存储结构上实现某个抽象运算。确切地说,算法是对特定的求解步骤的一种描述,它是指令地有限序列,其中每一条指令表示计算机的一个或多个操作。

算法五个重要的特性:1.有穷性2.确定性3.可行性4.有输入5.有输出

程序可不满足有穷性。

算法描述:文字描述,语言方式,图形方式,表格方式。

算法设计目标:1.正确性2.可使用性3.可读性4.健壮性5.高效率与低存储量需求。

 

衡量算法效率方法

  1. 事后统计法:缺点必须执行程序;存在其他因素掩盖算法本质。
  2. 事前分析估算法:

耗时因素:计算机运行效率、采用语言、编译产生机器语言代码质量、问题规模等。

只考虑算法本身的效率高低,可认为一个特定算法的“运行工作量”的大小,只依赖于问题的规模(通常用整数n表示),或者说,它是问题规模的函数。

 

一个算法是由控制结构(顺序、分支、循环)和原操作(指对固有数据类型的操作)构成。算法的运行时间取决于两者的综合效果。

为了便于比较同一问题的不同算法,通常从算法中选取一种对于所研究问题来说是基本运算的原操作(以下将基本运算的原操作简称为基本运算),算法执行时间大致为基本运算所需的时间与其运算次数(一条语句的运行次数称为语句频度)的乘积。被视为算法基本运算的一般是最深层循环内的语句。一个算法的执行时间可用由其中基本运算的执行次数来计量。

算法中基本运算执行次数T(n)是问题规模n的某个函数f(n),记作

                  Tn=Ofn))

记号“O”读作“大O”(Order简写,意指数量级),它表示随问题规模n的增大,算法执行时间的增长率和f(n)的增长率相同。

“O”的形式定义为:若f(n)是正整数n的一个函数,则T(n)=O(f(n))表示存在一个正的常数c和n0,使得当nn0时都满足T(n)cf(n)。也就是只求出T(n)的最高阶项,忽略其低阶项和常系数,这样即可简化T(n)的计算,又能较客观反映出当n很大时算法的时间性能。

一个没有循环的算法中基本运算次数与问题规模n无关,记作O(1),也称作常数阶。一个只有一重循环的算法中基本运算次数与问题规模n呈线性关系,记作O(n),也称线性阶。

各种不同数量级对应的值存在着如下关系:

O1log2nnnlog2nn2n32nn!)

算法的时间复杂度f(n)采用数量级形式表示后,只需分析算法中影响算法执行时间的主要部分即可,不必对每一步都进行详细的分析。

最坏情况下时间复杂度或期望或平均时间复杂度。

可行方法计算算法的平均运算次数。

设算法的输入规模为n,Dn是所有输入的集合,任一输入I∈Dn,P(I)是I出现的频率,有I∈DnPI=1 ,T(I)是算法在输入I下所执行的基本运算次数,则该算法的期望时间复杂度为    En=I∈DnPI*TI   该算法最坏的时间复杂度为:Wn=maxI∈Dn{TI}

 

算法存储空间:算法存储量包括输入数据所占空间、程序本身所占空间和辅助变量所占空间。在对算法进行存储空间分析时,只考查辅助变量所占空间。所以,空间复杂度是对一个算法在运行过程中临时占用的存储空间大小的度量,一般也作为问题规模n的函数,以数量级形式给出,记作: Sn=Ogn))

若所需额外空间相对于输入数据量来说是常数,则称此算法为原地工作或就地工作。若所需存储量依赖于特定的输入,则通常按最坏情况考虑。

对于递归算法,为了实现递归过程用到一个递归栈,所以需要根据递归深度得到算法的空间复杂度。

数据结构+算法=程序

计算机软件的最终成果都是以程序的形式表现的,而数据结构和算法分析的目的是设计好的程序。程序是由数据结构和算法组成的,程序设计的本质是对要处理的问题选择好的数据结构,同时在此结构上施加一种好的算法

数据结构:对于程序来说,数据是原料。将松散无组织的数据按照某种要求组成一种数据结构,对于设计一个简明、高效、可靠的程序十分有益。程序是数据在某些特定的表示方法和结构的基础上,对抽象算法的具体表述,因此程序离不开数据结构

程序是通过某种程序设计语言描述的,程序设计语言有实现数据结构和算法的机制,类型定义与对象说明(实现数据结构)和语句(实现算法)是其主要部分。

算法:由程序设计语言描述的算法就是计算机程序。算法通常是决定程序效率的关键。但一切算法最终都要在相应的数据结构上实现,许多算法的精髓就在于选择了合适的数据结构作为基础。

存储结构对算法的影响:1.存储结构的存储能力(能力强,算法好设计)

2.存储结构应与所选择的算法相适应

 

 

你可能感兴趣的:(数据结构)