数据结构(二):算法及其描述.docx
- 文档编号:5901275
- 上传时间:2023-01-02
- 格式:DOCX
- 页数:3
- 大小:17.66KB
数据结构(二):算法及其描述.docx
《数据结构(二):算法及其描述.docx》由会员分享,可在线阅读,更多相关《数据结构(二):算法及其描述.docx(3页珍藏版)》请在冰豆网上搜索。
数据结构(⼆):
算法及其描述
⼀、算法及其描述
1、什么是算法
数据元素之间的关系有逻辑关系和物理关系,对应的操作有逻辑结构上的操作功能和具体存储结构上的操作实现。
把具体存储结构上的操作实现⽅法称为算法。
确切地说,算法是对特定问题求解步骤的⼀种描述,它是指令的有限序列,其中每⼀条指令包含⼀个或多个计算机操作。
⼀个算法具有如下特性:
有穷性:
⼀个算法必须总是(对任何合法的输⼊值)在执⾏有穷步后结束,⽽且每⼀步都要在有穷的时间内完成。
也就是说,⼀个算法对任意⼀组合法的输⼊值,在执⾏有穷步骤后⼀定能结束。
确定性:
对于每种情况下算法应该执⾏的操作,在算法中都应该有明确的规定,使算法的执⾏者或阅读者能够明确其含义及如何执⾏。
并且在任何条件下,算法只能由⼀条执⾏路径。
也就是说,对于任意⼀组给定的合法输⼊值,算法要执⾏的操作是确定的。
可⾏性:
算法中的所有操作都必须⾜够基本,都可以通过已经实现的基本操作运算有限次实现。
有输⼊:
作为算法加⼯对象的量值,通常体现为算法中的⼀组变量。
有些输⼊需要在算法执⾏中给出,⽽有些算法看似没有输⼊,实际上已经内嵌在代码中。
有输出:
输出是与输⼊由确定关系的⼀组量值,是算法进⾏信息加⼯后的到的结果,这种确定关系就是算法的功能。
2、算法描述
我们有许多⽅法来描述⼀个算法,如:
设计⼀个算法:
求解⼀元⼆次⽅程组
我们分别⽤⽂字描述和C/C++语⾔来描述设计的算法:
语⾔描述:
1.计算d=b*b-4*a*c
2.如果d>0,则转第5步
3.如果d=0,则转第9步
4.如果d<0,则转第12步
5.计算x1=(-b+sqrt(d))/(2*a)
6.计算x2=(-b-sqrt(d))/(2*a)
7.显⽰x1和x2的值
8.转第13步
9.计算x=(-b)/(2*a)
10.显⽰x的值
11.转第13步
12.显⽰没有实根
13.算法结束
C/C++语⾔描述
voidsolution(floata,floatb,floatc){floatd,x1,x2,x;
d=b*b-4*a*c;if(d>0){
x1=(-b+sqrt(d))/(2*a);
x2=(-b-sqrt(d))/(2*a);
pr两int个f("实根是:
x1=%f,x2=%f\n",x1,x2);
}
elseif(d==0){
x=(-b)/(2*a);
pr⼀int个f("实根是:
x=%f\n",x);
}
else{
pr不int存f("在实根\n");
}
}
从上⾯的两个例⼦我们可以看出⽤C/C++来描述的算法结构更清晰(编写的程序结构化更⾼,对d的三种不同情况的处理⼀⽬了然)。
3、算法分析
在⼀个算法设计好后,还需要对其进⾏分析来确定⼀个算法的好坏。
算法设计的⽬标
1.正确性:
要求算法能够正确地预先规定的功能和性能要求。
这是最重要也是最基本的标准。
2.可使⽤性:
要求算法能够⽅便地使⽤,对⽤户要友好。
3.可读性:
算法应该易于⼈地理解。
为了达到这个要求,算法的逻辑必须是清晰的、简单的,代码应该是结构化的。
4.健壮性:
算法应该具有很好的容错性,能够对不合理的数据进⾏检查,不经常出现异常中断或者死机的现象。
5.⾼效率和低存储量
算法效率分析
通常由两种衡量算法效率的⽅法:
事后统计法和事前分析估算法。
事后分析法存在以下缺点:
1.必须执⾏程序
2.存在其他因素掩盖算法本质所以我们⼀般采⽤事前分析法。
⼀般来说,⼀个程序的运⾏速度不仅和算法有关,还和运⾏程序的计算机和所处计算机环境有关。
所以我们需要撇开这些计算机软件、硬件有关的
因素,仅考虑算法本⾝的效率⾼低。
⼀个算法是由控制结构(顺序、分⽀和循环)和原操作(固有的数据类型的操作,或者可以理解为分⽀和循环⾥要执⾏的操作)构成的。
为了⽐较同⼀问题的不同算法,通常从算法中选取⼀种对所研究的问题来说是基本运算的原操作,算法执⾏的时间⼤致为原操作的执⾏时间和被执
⾏的次数的乘积。
显然,在⼀个算法中,执⾏原操作的次数越少,其运⾏时间也就相对地越少;执⾏的原操作次数越多,其运⾏时间也就相对地越多。
所以通常把算法中执⾏原操作地次数称为算法地时间复杂度,也就是说,⼀个算法地时间复杂度就是指其原操作在算法中反复执⾏的次数。
算法中基本运算次数(原操作)T(n)是问题规模n的某个函数,记作:
"O"的定义为:
若f(n)是正整数n的⼀个函数,则T(n)=O(f(n))表⽰存在⼀个正整数M,使得当n>=n0时都满⾜
也就是说,我们只需要求出f(n)的最⾼阶,⽽忽略其低阶项和常系数,例如:
算法存储空间分析
⼀个算法的存储量包括输⼊数据所占空间、程序本⾝所占空间和辅助变量所占空间。
在对算法进⾏存储空间分析时,只考虑辅助变量所占空间。
所以,空间复杂度是对⼀个算法在运⾏过程中临时占⽤的存储空间⼤⼩的量度。
与时间复杂度类似,空间复杂度也是问题规模n的函数,也以数量级的形式给出,记作:
若所需额外空间相对于输⼊数据量来说是常数,则称此算法为原地⼯作或就地⼯作。
若所需存储量依赖于输⼊,则通常按最坏的情况考虑。
转载⾃:
数据结构教程(第⼆版)李春葆等编著
清华⼤学出版社
ISBN:
978-7-302-14229-4
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 数据结构 算法 及其 描述