笔记——数据结构入门(二)

所用教材为:数据结构教程第4版  李春葆 主编

算法

算法及其描述

什么是算法

(1)数据元素之间的关系有逻辑关系和物理关系,对应的运算有逻辑结构上的运算(抽象运算)和具体存储结构上的运算(运算实现)。
          算法是具体存储结构上实现某个抽象运算
(2)确切地说,算法是对特定问题的求解步骤的一种描述,它是指令的有限序列,其中每一条指令表示计算机的一个或多个操作。
(3)一个算法具有以下五个重要的属性:
有穷性:程序可以无限循环,不一定满足有穷性,但算法必须满足有穷性
确定性
可行性
有输入
有输出

算法描述

 1)描述方式:语言方式、文字描述方式、图形方式和表格方式等。
 2)常用语描述算法的C/C++语言基本语句:
(1)输入语句
scanf(格式控制字符串,输入项表);
(2)输出语句
printf(格式控制字符串,输出项表);
(3)赋值语句
变量名 = 表达式;
(4)条件语句
if(条件)语句;
或者
if(条件)语句1 else 语句2;
(5)循环语句
while(表达式)循环体语句;
        do
循环体语句;
while 表达式;
(6)返回语句
return(返回表达式);
(7)定义函数语句
函数返回至类型 函数名(类型名   形参1,类型名  形参2,......)
{
说明部分;
函数语句部分;
}
(8)调用函数语句
函数名(实参1,实参2,.......)

算法分析

算法设计的目标

正确性、可使用性、可读性、健壮性、高效率与低存储量需求

算法效率分析

(1)事后统计法和事前分析估算法,大部分采用后者
(2)撇开与计算机硬软件相关的因素,仅考虑算法本身的效率高低,可认为一个特定算法的“运行工作量”的大小,只依赖于问题的规模(通常用整数n表示)
  一个算法是由控制结构(顺序、分支和循环三种结构)和原操作(指对固有数据类型的操作)构成的。
 算法执行时间大致为基本运算所需的时间与其运算次数(一条语句的运行次数称为语句频度)的乘积
         被视为算法基本运算的一般是最深层循环内的语句。
(3)算法中基本运算执行次数T(n)是问题规模n的某个函数f(n),记作:
T(n) = O(f(n))
          O表示随问题规模n的增大,算法执行时间的增长率和f(n)的增长率相同
         “O”的形式定义:若f(n)是正整数n的一个函数,则T(n)=O(f(n))表示存在一个正的常数c和n0,使得当n>=n0时都满足T(n)<=cf(n),也就是只求出T(n)的最高阶项,忽略其低阶项和常系数。
(4)各种不同数量级对应的值存在着如下关系:
        O(1)<O(log2n)<O(n)<O(nlog2为底n)<O(n的2次方)<O(n的3次方)<O(2的n次方)<O(n!)
(5)一般情况下,计算一个算法的基本运算次数是相当困难的,甚至是不可能的(因为一个算法的不同输入往往产生不同的运算次数,而一个算法的所有不同输入的数目可能十分庞大)。一种可行的方法是计算算法的平均运算次数。

算法存储空间分析

(1)一个算法的存储量包括输入数据所占空间、程序本身所占空间和辅助变量所占空间。
         在对算法进行存储空间分析时,只考查辅助变量所占空间。
(2)空间复杂度是对一个算法在运行过程中临时占用的存储空间大小的量度,一般也作为问题规模n的函数,以数量级形式给出,记作:
S(n)=O(g(n))
         若所需额外空间相对于输入数据来说是常数,则称此算法为原地工作或就地工作。
若所需存储量依赖于特定的输入,则通常按最坏情况来考虑。
(3)对于递归算法,为了实现递归过程用到一个递归栈,所以需要根据递归深度得到算法的空间复杂度。

数据结构+算法=程序

著名的计算机科学家沃思(N.Wirth)在《数据结构+算法=程序》中指出,程序是由数据结构和算法组成的,程序设计的本质是对要处理的问题选择好的数据结构,同时在此结构上施加一种好的算法

程序和数据结构

沃思指出,程序就是在数据的某些特定的表示方式和结构的基础上,对抽象算法的具体表述,所以说程序离不开数据结构。

算法和程序

由程序设计语言描述的算法就是计算机程序。对求解一个问题而言,算法就是解题的方法,没有算法,程序就成了无本之木,无源之水,而有了算法,再将它表示成程序是不难的。

算法和数据结构

数据存储结构对算法的影响主要在两方面:
(1)存储结构的存储能力
(2)存储结构应与所选择算法相适应。
存储结构是实现算法的基础,其选择要充分考虑算法的各种操作,与算法的操作相适应。

猜你喜欢

转载自blog.csdn.net/Try_my_best51540/article/details/61617334