导航:首页 > 源码编译 > 谁总结出什么叫算法

谁总结出什么叫算法

发布时间:2023-12-01 01:33:40

⑴ 什么是算法与数据结构

算法(Algorithm)是一系列解决问题的清晰指令,也就是说,能够对一定规范的输入,在有限时间内获得所要求的输出。如果一个算法有缺陷,或不适合于某个问题,执行这个算法将不会解决这个问题。不同的算法可能用不同的时间、空间或效率来完成同样的任务。一个算法的优劣可以用空间复杂度与时间复杂度来衡量。
算法可以理解为有基本运算及规定的运算顺序所构成的完整的解题步骤。或者看成按照要求设计好的有限的确切的计算序列,并且这样的步骤和序列可以解决一类问题。
一个算法应该具有以下五个重要的特征:
1、有穷性: 一个算法必须保证执行有限步之后结束;
2、确切性: 算法的每一步骤必须有确切的定义;
3、输入:一个算法有0个或多个输入,以刻画运算对象的初始情况,所谓0个输入是指算法本身定除了初始条件;
4、输出:一个算法有一个或多个输出,以反映对输入数据加工后的结果。没有输出的算法是毫无意义的;
5、可行性: 算法原则上能够精确地运行,而且人们用笔和纸做有限次运算后即可完成。
计算机科学家尼克劳斯-沃思曾着过一本着名的书《数据结构十算法= 程序》,可见算法在计算机科学界与计算机应用界的地位。

数据结构是计算机存储、组织数据的方式。数据结构是指相互之间存在一种或多种特定关系的数据元素的集合。通常情况下,精心选择的数据结构可以带来更高的运行或者存储效率。数据结构往往同高效的检索算法和索引技术有关。
一般认为,一个数据结构是由数据元素依据某种逻辑联系组织起来的。对数据元素间逻辑关系的描述称为数据的逻辑结构;数据必须在计算机内存储,数据的存储结构是数据结构的实现形式,是其在计算机内的表示;此外讨论一个数据结构必须同时讨论在该类数据上执行的运算才有意义。
在许多类型的程序的设计中,数据结构的选择是一个基本的设计考虑因素。许多大型系统的构造经验表明,系统实现的困难程度和系统构造的质量都严重的依赖于是否选择了最优的数据结构。许多时候,确定了数据结构后,算法就容易得到了。有些时候事情也会反过来,我们根据特定算法来选择数据结构与之适应。不论哪种情况,选择合适的数据结构都是非常重要的。
选择了数据结构,算法也随之确定,是数据而不是算法是系统构造的关键因素。这种洞见导致了许多种软件设计方法和程序设计语言的出现,面向对象的程序设计语言就是其中之一。
在计算机科学中,数据结构是一门研究非数值计算的程序设计问题中计算机的操作对象(数据元素)以及它们之间的关系和运算等的学科,而且确保经过这些运算后所得到的新结构仍然是原来的结构类型。
“数据结构”作为一门独立的课程在国外是从1968年才开始设立的。 1968年美国唐·欧·克努特教授开创了数据结构的最初体系,他所着的《计算机程序设计技巧》第一卷《基本算法》是第一本较系统地阐述数据的逻辑结构和存储结构及其操作的着作。“数据结构”在计算机科学中是一门综合性的专业基础课。数据结构是介于数学、计算机硬件和计算机软件三者之间的一门核心课程。数据结构这一门课的内容不仅是一般程序设计(特别是非数值性程序设计)的基础,而且是设计和实现编译程序、操作系统、数据库系统及其他系统程序的重要基础。
计算机是一门研究用计算机进行信息表示和处理的科学。这里面涉及到两个问题:
信息的表示
信息的处理
而信息的表示和组又直接关系到处理信息的程序的效率。随着计算机的普及,信息量的增加,信息范围的拓宽,使许多系统程序和应用程序的规模很大,结构又相当复杂。因此,为了编写出一个“好”的程序,必须分析待处理的对象的特征及各对象之间存在的关系,这就是数据结构这门课所要研究的问题。众所周知,计算机的程序是对信息进行加工处理。在大多数情况下,这些信息并不是没有组织,信息(数据)之间往往具有重要的结构关系,这就是数据结构的内容。数据的结构,直接影响算法的选择和效率。
计算机解决一个具体问题时,大致需要经过下列几个步骤:首先要从具体问题中抽象出一个适当的数学模型,然后设计一个解此数学模型的算法(Algorithm),最后编出程序、进行测试、调整直至得到最终解答。寻求数学模型的实质是分析问题,从中提取操作的对象,并找出这些操作对象之间含有的关系,然后用数学的语言加以描述。计算机算法与数据的结构密切相关,算法无不依附于具体的数据结构,数据结构直接关系到算法的选择和效率。运算是由计算机来完成,这就要设计相应的插入、删除和修改的算法 。也就是说,数据结构还需要给出每种结构类型所定义的各种运算的算法。
数据是对客观事物的符号表示,在计算机科学中是指所有能输入到计算机中并由计算机程序处理的符号的总称。
数据元素是数据的基本单位,在计算机程序中通常作为一个整体考虑。一个数据元素由若干个数据项组成。数据项是数据的不可分割的最小单位。有两类数据元素:一类是不可分割的原子型数据元素,如:整数"5",字符 "N" 等;另一类是由多个款项构成的数据元素,其中每个款项被称为一个数据项。例如描述一个学生的信息的数据元素可由下列6个数据项组成。其中的出身日期又可以由三个数据项:"年"、"月"和"日"组成,则称"出身日期"为组合项,而其它不可分割的数据项为原子项。
关键字指的是能识别一个或多个数据元素的数据项。若能起唯一识别作用,则称之为 "主" 关键字,否则称之为 "次" 关键字。
数据对象是性质相同的数据元素的集合,是数据的一个子集。数据对象可以是有限的,也可以是无限的。
数据处理是指对数据进行查找、插入、删除、合并、排序、统计以及简单计算等的操作过程。在早期,计算机主要用于科学和工程计算,进入八十年代以后,计算机主要用于数据处理。据有关统计资料表明,现在计算机用于数据处理的时间比例达到80%以上,随着时间的推移和计算机应用的进一步普及,计算机用于数据处理的时间比例必将进一步增大。
数据结构是指同一数据元素类中各数据元素之间存在的关系。数据结构分别为逻辑结构、存储结构(物理结构)和数据的运算。数据的逻辑结构是对数据之间关系的描述,有时就把逻辑结构简称为数据结构。逻辑结构形式地定义为(K,R)(或(D,S)),其中,K是数据元素的有限集,R是K上的关系的有限集。
数据元素相互之间的关系称为结构。有四类基本结构:集合、线性结构、树形结构、图状结构(网状结构)。树形结构和图形结构全称为非线性结构。集合结构中的数据元素除了同属于一种类型外,别无其它关系。线性结构中元素之间存在一对一关系,树形结构中元素之间存在一对多关系,图形结构中元素之间存在多对多关系。在图形结构中每个结点的前驱结点数和后续结点数可以任意多个。
数据结构在计算机中的表示(映像)称为数据的物理(存储)结构。它包括数据元素的表示和关系的表示。数据元素之间的关系有两种不同的表示方法:顺序映象和非顺序映象,并由此得到两种不同的存储结构:顺序存储结构和链式存储结构。顺序存储方法:它是把逻辑上相邻的结点存储在物理位置相邻的存储单元里,结点间的逻辑关系由存储单元的邻接关系来体现,由此得到的存储表示称为顺序存储结构。顺序存储结构是一种最基本的存储表示方法,通常借助于程序设计语言中的数组来实现。链接存储方法:它不要求逻辑上相邻的结点在物理位置上亦相邻,结点间的逻辑关系是由附加的指针字段表示的。由此得到的存储表示称为链式存储结构,链式存储结构通常借助于程序设计语言中的指针类型来实现。索引存储方法:除建立存储结点信息外,还建立附加的索引表来标识结点的地址。散列存储方法:就是根据结点的关键字直接计算出该结点的存储地址。
数据结构中,逻辑上(逻辑结构:数据元素之间的逻辑关系)可以把数据结构分成线性结构和非线性结构。线性结构的顺序存储结构是一种随机存取的存储结构,线性表的链式存储结构是一种顺序存取的存储结构。线性表若采用链式存储表示时所有结点之间的存储单元地址可连续可不连续。逻辑结构与数据元素本身的形式、内容、相对位置、所含结点个数都无关。
算法的设计取决于数据(逻辑)结构,而算法的实现依赖于采用的存储结构。数据的运算是在数据的逻辑结构上定义的操作算法,如检索、插入、删除、更新的排序等。

⑵ 请问有谁有计算机各种经典算法的总结性介绍有源代码最好

http://blog.csdn.net/ctu_85/archive/2008/05/11/2432736.aspx
上面的内容应有尽有,连代码都给出了:
经典算法设计方法大杂烩

经典算法设计方法

一、什么是算法

算法是一系列解决问题的清晰指令,也就是说,能够对一定规范的输入,在有限时间内获得所要求的输出。算法常常含有重复的步骤和一些比较或逻辑判断。如果一个算法有缺陷,或不适合于某个问题,执行这个算法将不会解决这个问题。不同的算法可能用不同的时间、空间或效率来完成同样的任务。一个算法的优劣可以用空间复杂度与时间复杂度来衡量。

算法的时间复杂度是指算法需要消耗的时间资源。一般来说,计算机算法是问题规模n 的函数f(n),算法执行的时间的增长率与f(n) 的增长率正相关,称作渐进时间复杂度(Asymptotic Time Complexity)。时间复杂度用“O(数量级)”来表示,称为“阶”。常见的时间复杂度有: O(1)常数阶;O(log2n)对数阶;O(n)线性阶;O(n2)平方阶。

算法的空间复杂度是指算法需要消耗的空间资源。其计算和表示方法与时间复杂度类似,一般都用复杂度的渐近性来表示。同时间复杂度相比,空间复杂度的分析要简单得多。

二、算法设计的方法

1.递推法

递推法是利用问题本身所具有的一种递推关系求问题解的一种方法。设要求问题规模为N的解,当N=1时,解或为已知,或能非常方便地得到解。能采用递推法构造算法的问题有重要的递推性质,即当得到问题规模为i-1的解后,由问题的递推性质,能从已求得的规模为1,2,…,i-1的一系列解,构造出问题规模为I的解。这样,程序可从i=0或i=1出发,重复地,由已知至i-1规模的解,通过递推,获得规模为i的解,直至得到规模为N的解。

【问题】 阶乘计算

问题描述:编写程序,对给定的n(n≤100),计算并输出k的阶乘k!(k=1,2,…,n)的全部有效数字。

由于要求的整数可能大大超出一般整数的位数,程序用一维数组存储长整数,存储长整数数组的每个元素只存储长整数的一位数字。如有m位成整数N用数组a[ ]存储:

N=a[m]×10m-1+a[m-1]×10m-2+ … +a[2]×101+a[1]×100

并用a[0]存储长整数N的位数m,即a[0]=m。按上述约定,数组的每个元素存储k的阶乘k!的一位数字,并从低位到高位依次存于数组的第二个元素、第三个元素……。例如,5!=120,在数组中的存储形式为:

3 0 2 1 ……

首元素3表示长整数是一个3位数,接着是低位到高位依次是0、2、1,表示成整数120。

计算阶乘k!可采用对已求得的阶乘(k-1)!连续累加k-1次后求得。例如,已知4!=24,计算5!,可对原来的24累加4次24后得到120。细节见以下程序代码。

# include <stdio.h>

# include <malloc.h>

# define MAXN 1000

void pnext(int a[ ],int k)

{ int *b,m=a[0],i,j,r,carry;

b=(int * ) malloc(sizeof(int)* (m+1));

for ( i=1;i<=m;i++) b[i]=a[i];

for ( j=1;j<=k;j++)

{ for ( carry=0,i=1;i<=m;i++)

{ r=(i<a[0]?a[i]+b[i]:a[i])+carry;

a[i]=r%10;

carry=r/10;

}

if (carry) a[++m]=carry;

......

⑶ 数学中都有什么算法啊

定义法、配方法、待定系数法、换元法、反证法、数学归纳法、导数法、赋值法、消去法、定比分离法、比较法、分析法、综合法 ,还有很多桑
介里有几个比较详细的哈.
一、换元法
“换元”的思想和方法,在数学中有着广泛的应用,灵活运用换元法解题,有助于数量关系明朗化,变繁为简,化难为易,给出简便、巧妙的解答.
在解题过程中,把题中某一式子如f(x),作为新的变量y或者把题中某一变量如x,用新变量t的式子如g(t)替换,即通过令f(x)=y或x=g(t)进行变量代换,得到结构简单便于求解的新解题方法,通常称为换元法或变量代换法.
用换元法解题,关键在于根据问题的结构特征,选择能以简驭繁,化难为易的代换f(x)=y或x=g(t).就换元的具体形式而论,是多种多样的,常用的有有理式代换,根式代换,指数式代换,对数式代换,三角式代换,反三角式代换,复变量代换等,宜在解题实践中不断总结经验,掌握有关的技巧.
例如,用于求解代数问题的三角代换,在具体设计时,宜遵循以下原则:(1)全面考虑三角函数的定义域、值域和有关的公式、性质;(2)力求减少变量的个数,使问题结构简单化;(3)便于借助已知三角公式,建立变量间的内在联系.只有全面考虑以上原则,才能谋取恰当的三角代换.
换元法是一种重要的数学方法,在多项式的因式分解,代数式的化简计算,恒等式、条件等式或不等式的证明,方程、方程组、不等式、不等式组或混合组的求解,函数表达式、定义域、值域或最值的推求,以及解析几何中的坐标替换,普通方程与参数方程、极坐标方程的互化等问题中,都有着广泛的应用.
二、消元法
对于含有多个变数的问题,有时可以利用题设条件和某些已知恒等式(代数恒等式或三角恒等式),通过适当的变形,消去一部分变数,使问题得以解决,这种解题方法,通常称为消元法,又称消去法.
消元法是解方程组的基本方法,在推证条件等式和把参数方程化成普通方程等问题中,也有着重要的应用.
用消元法解题,具有较强的技巧性,常常需要根据题目的特点,灵活选择合适的消元方法
三、待定系数法
按照一定规律,先写出问题的解的形式(一般是指一个算式、表达式或方程),其中含有若干尚待确定的未知系数的值,从而得到问题的解.这种解题方法,通常称为待定系数法;其中尚待确定的未知系数,称为待定系数.
确定待定系数的值,有两种常用方法:比较系数法和特殊值法.
四、判别式法
实系数一元二次方程
ax2+bx+c=0 (a≠0) ①
的判别式△=b2-4ac具有以下性质:
>0,当且仅当方程①有两个不相等的实数根
△ =0,当且仅当方程①有两个相等的实数根;
<0,当且仅当方程②没有实数根.
对于二次函数
y=ax2+bx+c (a≠0)②
它的判别式△=b2-4ac具有以下性质:
>0,当且仅当抛物线②与x轴有两个公共点;
△ =0,当且仅当抛物线②与x轴有一个公共点;
<0,当且仅当抛物线②与x轴没有公共点.
五、 分析法与综合法
分析法和综合法源于分析和综合,是思维方向相反的两种思考方法,在解题过程中具有十分重要的作用.
在数学中,又把分析看作从结果追溯到产生这一结果的原因的一种思维方法,而综合被看成是从原因推导到由原因产生的结果的另一种思维方法.通常把前者称为分析法,后者称为综合法.
六、 数学模型法
例(哥尼斯堡七桥问题)18世纪东普鲁士哥尼斯堡有条普莱格河,这条河有两个支流,在城中心汇合后流入波罗的海.市内办有七座各具特色的大桥,连接岛区和两岸.每到傍晚或节假日,许多居民来这里散步,观赏美丽的风光.年长日久,有人提出这样的问题:能否从某地出发,经过每一座桥一次且仅一次,然后返回出发地?
数学模型法,是指把所考察的实际问题,进行数学抽象,构造相应的数学模型,通过对数学模型的研究,使实际问题得以解决的一种数学方法.
七、配方法
所谓配方,就是把一个解析式利用恒等变形的方法,把其中的某些项配成一个或几个多项式正整数次幂的和形式.通过配方解决数学问题的方法叫配方法.其中,用的最多的是配成完全平方式.配方法是数学中一种重要的恒等变形的方法,它的应用十分非常广泛,在因式分解、化简根式、解方程、证明等式和不等式、求函数的极值和解析式等方面都经常用到它.
八、因式分解法
因式分解,就是把一个多项式化成几个整式乘积的形式.因式分解是恒等变形的基础,它作为数学的一个有力工具、一种数学方法在代数、几何、三角等的解题中起着重要的作用.因式分解的方法有许多,除中学课本上介绍的提取公因式法、公式法、分组分解法、十字相乘法等外,还有如利用拆项添项、求根分解、换元、待定系数等等.
九、换元法
换元法是数学中一个非常重要而且应用十分广泛的解题方法.我们通常把未知数或变数称为元,所谓换元法,就是在一个比较复杂的数学式子中,用新的变元去代替原式的一个部分或改造原来的式子,使它简化,使问题易于解决.
介里LL没有说很详细桑,内啥简便算法我也一起说了桑丶
乘法交换律,乘法分配律,加法交换律,加法结合律,乘法分配律,

⑷ 排序算法总结

排序算法是什么?有多少种?排序算法总结又是怎样?以下是为您整理的排序算法总结,供您参考!

【排序算法总结】

排序算法:一种能将一串数据依照特定的排序方式进行排列的一种算法。

排序算法性能:取决于时间和空间复杂度,其次还得考虑稳定性,及其适应的场景。

稳定性:让原本有相等键值的记录维持相对次序。也就是若一个排序算法是稳定的,当有俩个相等键值的记录R和S,且原本的序列中R在S前,那么排序后的列表中R应该也在S之前。

以下来总结常用的排序算法,加深对排序的理解。

冒泡排序

原理

俩俩比较相邻记录的排序码,若发生逆序,则交旅派配换;有俩种方式进行冒泡,一种是先把小的冒泡到前边去,另一种是把大的元素冒泡到后边。

性能

时间复杂度为O(N^2),空间复杂度为O(1)。排序是稳定的,排序比较次数与初始序列无关,但交换次数与初始序列有关。

优化

若初始序列就是排序好的,对于冒泡排序仍然还要比较O(N^2)次,但无交换次数。可根据这个进行优化,设置一个flag,当在一趟序列中没有发生交换,则该序列已排序好,但优化后排序的时间复杂度没有发生量级的改变。

代码

插入排序

原理

依次选择一个待排序的数据,插入到前边已排好序的序列中。

性能

时间复杂度为O(N^2),空间复杂度为O(1)。算法是稳定的,比较次数和交换次数都与初始序列有关。

优化

直接插入排序每次往前插入时,是按顺序依次往前找,可在这里进行优化,往前找合适的插入位置时采用二分查找的方式,即折半插入。

折半插入排序相对直接插入排序而言:平均性能更快,时间复杂度降至O(NlogN),排序是稳定的,但排序的比较次数与初始序列无关,总是需要foor(log(i))+1次排序比较。

使用场景

当数据基本有序时,采用插入排序可以明显减少数据交换和数据移动次数,进而提升排序效率。

代码

希尔排拆指序

原理

插入排序的改进版,是基于插入排序的以下俩点性质而提出的改进方法:

插入排序对几乎已排好序的数据操作时,效率很高,可以达到线性排序的效率。

但插入排序在每次往前插入时只能将数据移动一位,效率比较低。

所以希尔排序的思想是:

先是取一个合适的gap

缩小间隔gap,例如去gap=ceil(gap/2),重复上述子序列划分和排序

直到,最后gap=1时,将所有元素放在同一个序列中进行插入排序为止。

性能

开始时,gap取值较大,子序列中的元素较少,排序速度快,克服了直接插入排序的缺点;其次,gap值逐渐变小后,虽然子序列的元素逐渐变多,但大多元素已基本有序,所以继承了直接插入排序的优点,能以近线性的速度排好序。

代码

选择排序

原理

每次从未排序的序列中找到最小值,记录并最后存放到已排序序羡碰列的末尾

性能

时间复杂度为O(N^2),空间复杂度为O(1),排序是不稳定的(把最小值交换到已排序的末尾导致的),每次都能确定一个元素所在的最终位置,比较次数与初始序列无关。

代码

快速排序

原理

分而治之思想:

Divide:找到基准元素pivot,将数组A[p..r]划分为A[p..pivotpos-1]和A[pivotpos+1…q],左边的元素都比基准小,右边的元素都比基准大;

Conquer:对俩个划分的数组进行递归排序;

Combine:因为基准的作用,使得俩个子数组就地有序,无需合并操作。

性能

快排的平均时间复杂度为O(NlogN),空间复杂度为O(logN),但最坏情况下,时间复杂度为O(N^2),空间复杂度为O(N);且排序是不稳定的,但每次都能确定一个元素所在序列中的最终位置,复杂度与初始序列有关。

优化

当初始序列是非递减序列时,快排性能下降到最坏情况,主要因为基准每次都是从最左边取得,这时每次只能排好一个元素。

所以快排的优化思路如下:

优化基准,不每次都从左边取,可以进行三路划分,分别取最左边,中间和最右边的中间值,再交换到最左边进行排序;或者进行随机取得待排序数组中的某一个元素,再交换到最左边,进行排序。

在规模较小情况下,采用直接插入排序

代码

归并排序

原理

分而治之思想:

Divide:将n个元素平均划分为各含n/2个元素的子序列;

Conquer:递归的解决俩个规模为n/2的子问题;

Combine:合并俩个已排序的子序列。

性能

时间复杂度总是为O(NlogN),空间复杂度也总为为O(N),算法与初始序列无关,排序是稳定的。

优化

优化思路:

在规模较小时,合并排序可采用直接插入;

在写法上,可以在生成辅助数组时,俩头小,中间大,这时不需要再在后边加俩个while循环进行判断,只需一次比完。

代码

堆排序

原理

堆的性质:

是一棵完全二叉树

每个节点的值都大于或等于其子节点的值,为最大堆;反之为最小堆。

堆排序思想:

将待排序的序列构造成一个最大堆,此时序列的最大值为根节点

依次将根节点与待排序序列的最后一个元素交换

再维护从根节点到该元素的前一个节点为最大堆,如此往复,最终得到一个递增序列

性能

时间复杂度为O(NlogN),空间复杂度为O(1),因为利用的排序空间仍然是初始的序列,并未开辟新空间。算法是不稳定的,与初始序列无关。

使用场景

想知道最大值或最小值时,比如优先级队列,作业调度等场景。

代码

计数排序

原理

先把每个元素的出现次数算出来,然后算出该元素所在最终排好序列中的绝对位置(最终位置),再依次把初始序列中的元素,根据该元素所在最终的绝对位置移到排序数组中。

性能

时间复杂度为O(N+K),空间复杂度为O(N+K),算法是稳定的,与初始序列无关,不需要进行比较就能排好序的算法。

使用场景

算法只能使用在已知序列中的元素在0-k之间,且要求排序的复杂度在线性效率上。

代码

桶排序

原理

根据待排序列元素的大小范围,均匀独立的划分M个桶

将N个输入元素分布到各个桶中去

再对各个桶中的元素进行排序

此时再按次序把各桶中的元素列出来即是已排序好的。

性能

时间复杂度为O(N+C),O(C)=O(M(N/M)log(N/M))=O(NlogN-NlogM),空间复杂度为O(N+M),算法是稳定的,且与初始序列无关。

使用场景

算法思想和散列中的开散列法差不多,当冲突时放入同一个桶中;可应用于数据量分布比较均匀,或比较侧重于区间数量时。

基数排序

原理

对于有d个关键字时,可以分别按关键字进行排序。有俩种方法:

MSD:先从高位开始进行排序,在每个关键字上,可采用计数排序

LSD:先从低位开始进行排序,在每个关键字上,可采用桶排序

性能

时间复杂度为O(d*(N+K)),空间复杂度为O(N+K)。

总结

以上排序算法的时间、空间与稳定性的总结如下:

⑸ 算法的本质是什么

  1. 算法的本质是解决问题的方法,是思想

在早期的时候,人们遇到新问题,必须要去解决它,经过“冥思苦想”,“反复探索尝试”, 最后总结归纳。这才形成了今天我们学习的各种算法。如果无法领会到解决问题的思想,无法总结归纳,此衫就会有:“学算法有什么用?”。不知道为什么学,自然会认为学了没意义,没有用处。

2.一个算法应该具有以下五个重要的特征:

①有穷性: 算法的有穷性是指算法必须能在执行有限个步骤之后终止,换句话说就是一个算法必须总是在执行有穷步之后结束,且每一步都可在有穷时间内完成。
②确定性:算法中的每条指令必须有确切的定义,不会产生二义性,并且对于相同的输入只能得出相同的输出。
③可行性:算法中执行的任何计算步骤都是可以被分解为基本的可执行的操作步,即每个计算步都可以在有限时间内完成(也称之为有效性)。
④输入: 一个算森亩腔法有0个或多个输入,以刻画运算对象的初始情况,所谓0个输入是指算法本身定出了初始条件,这些输入取自于某个特定的对象集合。

⑤输出:一个算法有一个或多个的输出,这些输出是同输入有着特定关系的量,没有输出的算法是毫无意义的。

算法总是要解决特定的问题,问题来源就是算法的输入,期望的结果就是算法的输出,没有输入输出的算法是无意义的。
3.算法设计的5个要求:
①正确性:最基本要求,算法必须能解决某个问题的需求。
②可读性:算法的可读性有助于人的阅读与交流,容易调试和修改。
③健壮性:当输入的数据非法时,算法能适当做出反应或进行处理,而不会产生莫名其妙的输出结果。
④效率性:算法是为了解决大规模问题,因此需要运行效率足够快。
⑤存储性:算法在执行过程中,所需要的最大存储空间,应该尽可能的占用小。
效率性与存储性都与问题规模有关,求100人的耐携平均分与求1000人的平均分,同一个算法的所花费的执行时间与存储空间显然是不一样的。

正确性,可读性,健壮性不仅仅是算法设计的要求,而是贯穿整个软件设计层次。单对于算法本身来说,我们最关注的层面是效率性。千万不能死板的认为,算法就是计算机程序。算法是一切解决问题的思想,语言描述,伪代码,流程图,各种符号或者控制表格同样是算法。

阅读全文

与谁总结出什么叫算法相关的资料

热点内容
不许宣读命令 浏览:698
寻找信号源源码 浏览:81
打电话老服务器错误是什么原因 浏览:491
三维溯源码 浏览:716
android录音开源 浏览:459
弗洛伊德算法c 浏览:12
udp命令字 浏览:661
app服务端java源码 浏览:798
电脑用文件夹玩大型游戏 浏览:254
安卓耳塞失灵怎么办 浏览:765
华三交换机保存命令 浏览:605
命令方块怎么调键盘 浏览:841
不把密码存在服务器上怎么办 浏览:398
怎么让指令方块的命令消失 浏览:543
用单片机做plc 浏览:404
云服务器进入子目录命令 浏览:795
服务器机柜如何配电 浏览:578
怎么删除iphone资源库里的app 浏览:940
pdf鱼 浏览:648
单片机pcf8591什么作用 浏览:805