算法设计的要求
1. 数据结构分析
摘要 数据结构就是研究数据的逻辑结构和物理结构以及它们之间相互关系,并对这种结构定义相应的运算,而且确保经过这些运算后所得到的新结构仍然是原来的结构类型。
2. 算法的设计原则是什么
1.穷举算法思想
穷举算法思想就是从所有的可能结果中一个一个的试验,知道试出正确的结果。具体的操作步骤如下:
1)对每一种可能的结果,计算其结果;
2)判断结果是否符合题目要求,如果符合则该结果正确,如果不符合则继续进行第1)步骤。
穷举算法思想的经典例子为鸡兔同笼为题(又称龟鹤同笼问题),题目为“一个笼子里有鸡兔,共15个头、46条腿,问鸡兔各有多少只?”。代码如下:
public static void main(String[] args) {
int head = 0;
int leg = 0;
System.out.println( "输入鸡兔头数:");
Scanner input=new Scanner(System.in);
head = input.nextInt();
System.out.println( "输入鸡兔腿数:");
Scanner input1=new Scanner(System.in);
leg = input1.nextInt();
boolean existence = false;
for( int i = 0; i <= head; i++){
if( 2 * i + 4 * ( head - i) == leg){
System.out.println( "鸡的个数 :" + i);
System.out.println( "兔的个数 :" + ( head - i));
existence = true;
}
}
if( !existence){
System.out.println( "你输入的数据不正确");
}
}
2.递推算法思想
递推算法算法就是根据已知条件,利用特定关系推导出中间推论,直到得到结果的算法。
递推算法思想最经典的例子是斐波那契数列 : 1,1,2,3,5,8,13......
上面的数列符合F(n) = F(n-1) + F(n-2).代码如下:
public static void main(String[] args) {
Scanner input=new Scanner(System.in);
int n = input.nextInt();
System.out.println( fibonacci( n));
}
public static int fibonacci( int n){
if( n == 1){
return 1;
}else if( n == 2){
return 1;
}else{
return fibonacci( n - 1) + fibonacci( n - 2);
}
}
3.递归算法思想
递归算法思想是把大问题转换成同类问题的子问题,然后递归调用函数表示问题的解。
在使用递归的时候一定要注意调回递归函数的终止条件。
递归算法比较经典的例子是求阶乘。代码如下:
public static void main(String[] args) {
System.out.println( "输入一个大于零的数:");
Scanner input=new Scanner(System.in);
int n = input.nextInt();
System.out.println( factorial( n));
}
public static int factorial( int n){
if( n == 0){
return 1;
}else if( n == 1){
return 1;
}else{
3. 算法的要素是什么算法的特征是什么
一、算法的要素包括:
1、数据对象的操作和操作:计算机可以执行的基本操作以指令的形式描述。
2、算法的控制结构:算法的功能结构不仅取决于所选的操作,还取决于操作之间的执行顺序。
二、算法的特征如下:
1、有穷性:算法的有穷性意味着算法在执行有限的步骤之后必须能够终止。
2、确切性:算法的每一步都必须确切定义。
3、输入项:一个算法有0个或多个输入来描述操作对象的初始条件。所谓的零输入是指由算法本身决定的初始条件。
4、输出项:一个算法有一个或多个输出来反映处理输入数据的结果。没有输出的算法毫无意义。
5、可行性:算法中执行的任何计算步骤都可以分解为基本的可执行操作步骤,即每个计算步骤都可以在有限的时间内完成。
(3)算法设计的要求扩展阅读:
算法可大致分为基本算法、数据结构的算法、数论与代数算法、计算几何的算法、图论的算法、动态规划以及数值分析、加密算法、排序算法、检索算法、随机化算法、并行算法,厄米变形模型,随机森林算法。
描述算法的方法有多种,常用的有自然语言、结构化流程图、伪代码和PAD图等,其中最普遍的是流程图。
随着计算机的发展,算法在计算机方面已有广泛的发展及应用,如用随机森林算法,来进行头部姿势的估计,用遗传算法来解决弹药装载问题,信息加密算法在网络传输中的应用,并行算法在数据挖掘中的应用等。
4. 算法设计原则是什么
原则:首先说设计的算法必须是"正确的",其次应有很好的"可读性",还必须具有"健壮性",最后应考虑所设计的算法具有"高效率与低存储量"。
所谓算法是正确的,除了应该满足算法说明中写明的"功能"之外,应对各组典型的带有苛刻条件的输入数据得出正确的结果。
在算法是正确的前提下,算法的可读性是摆在第一位的,这在当今大型软件需要多人合作完成的环境下是换重要的,另一方面,晦涩难读的程序易于隐藏错误而难以调试。算法的效率指的是算法的执行时间,算法的存储量指的是算法执行过程中所需最大存储空间。
算法是程序设计的另一个不可缺的要素,因此在讨论数据结构的同时免不了要讨论相应的算法。这里有两重意思,即算法中的操作步骤为有限个,且每个步骤都能在有限时间内完成。
确定性表现在对算法中每一步的描述都没有二义性,只要输入相同,初始状态相同,则无论执行多少遍,所得结果都应该相同。
可行性指的是,序列中的每个操作都是可以简单完成的,其本身不存在算法问题,例如,"求x和y的公因子"就不够基本。
输入值即为算法的操作对象,但操作的对象也可以由算法自身生成,如"求100以内的素数",操作对象是自然数列,可以由变量逐个增1生成。
算法的健壮性指的是,算法应对非法输入的数据作出恰当反映或进行相应处理,一般情况下,应向调用它的函数返回一个表示错误或错误性质的值。
5. 解决什么是程序的灵魂
解决算法是程序的灵魂,因为当您解决了算法,就能使程序正确的、确定性、有穷性的运行下去。
因为软件开发工作不是按部就班,而是选择一种最合理的算法去实现项目功能。算法能够引导开发者在面对一个项目功能使用什么思路去实现,有了这个思路后,编程工作只需要遵循这个思路去实现即可。
算法是一系列解决问题的清晰指令,算法代表着用系统的方法描述解决问题的策略机制。也就是说,能够对符合一定规范的输入,在有限时间内获得所要求的输出。
如果一个算法有缺陷,或不适合于某个问题,执行这个算法将不会解决这个问题。不同的算法可能用不同的时间、空间或效率来完成同样的任务。
算法设计的要求
正确性: 算法至少应该具有输入、输出和加工处理无歧义性、能反映问题的需求、能够得到问题的正确答案。
可读性: 算法设计的另一目的是为了便于阅读、理解和交流。
健壮性: 当输入数据不合法时,算法也能做出相关处理,而不是产生异常或莫名其妙的结果。
时间效率高和存储量低:
6. 算法及其特性有哪些
1.算法的重要特性(1)有穷性:一个算法必须在执行有穷步骤之后正常结束,而不能形成无穷循环。
(2)确定性:算法中的每一条指令必须有确切的含义,不能产生多义性。
(2)可行性:算法中的每一条指令必须是切实可执行的,即原则上可以通过已经实现的基本运算执行有限次来实现。
(4)输入:一个算法应该有零个或多个输入。
(5)输出:一个算法应该有一个或多个输出,这些输出是同输入有特定关系的量。
2.算法描述的方法(1)框图描述:该方法使用流程图或N-S图来描述算法。
(2)自然语言描述:该方法采用自然语言,同时添加高级程序设计语言如while、for和if等基本控制语句来描述算法。这类描述方法自然、简洁,但缺乏严谨性和结构性。
(2)类语言描述:这是介于程序设计语言和自然语言之间算法描述形式,其特征是突出算法设计的主体部分而有意忽略某些过于严格的语法细节,如类C或C++的伪语言。这种算法不能直接在计算机上运行,但专业设计人员经常使用它来描述算法,它具有容易编写、阅读和格式统一的特点。
(4)程序设计语言描述:采用某种高级程序设计语言(如C或C++)来描述。这是可以在计算机上运行并获得结果的算法描述。
本课程将采用伪C语言进行算法描述。
2.算法与程序的关系算法的含义与程序十分相似,但二者是有区别的。算法和程序都是用来表达解决问题的逻辑步骤;算法是对解决问题方法的具体描述,程序是算法在计算机中的具体实现;一个程序不一定满足有穷性(死循环),而算法一定满足有穷性;程序中的指令必须是机器可执行的,而算法中的指令则无此限制;一个算法若用计算机语言来书写,则它就可以是一个程序。因此,程序是算法,但算法不一定是程序。4.算法设计要求在算法设计中,对同一个问题可以设计出不同的求解算法。如何评价这些算法的优劣,从而为算法设计和选择提供可靠的依据?通常可从以下四个方面评价算法的质量:
(1)正确性:算法应该能够正确地执行预先规定的功能,并达到所期望的性能要求。
(2)可读性:算法应该好读,以有利于读者对程序的理解,便于调试和修改。
(2)健壮性:算法应具有容错处理。当输入非法数据时,算法应对其作出反应,而不是产生莫名其妙的输出结果。
(4)效率与低存储量需求:效率指的是算法执行的时间。对于同一个问题,如果有多种算法可以求解,执行时间短的算法效率高。算法存储量指的是算法执行过程中所需要的最大存储空间。高效率和低存储量这两者与问题的规模有关。
7. 如何理解算法的有穷性
算法的有穷性是指算法程序的运行时间是有限的。一个算法必须总是(对任何合法的输入值)在执行有穷步之后结束,且每一步都可在有穷时间内完成。
像平时写了一个死循环,这就不满足算法要求。还有这个有穷性不一定是理论的有穷,假如一个算法执行10年才会结束,那么在大多数情况下这个算法的意义也不大。
(7)算法设计的要求扩展阅读:
算法设计的要求
1、正确性:算法的正确性是指算法至少应该具有输入,输出和加工处理无歧义性,能正确反映问题的需求,能够得道为题的正确答案。
2、可读性:算法设计的另一目的是为了便于阅读,理解和交流。
3、健壮性:当输入数据不合法时,算法也能做出相关处理,而不是产生异常或莫名其妙的结果。
4、时间效率高和存储量低:也就是我们平时说的时间复杂度和空间复杂度。
8. 设计算法的原则
设计算法的原则:
1、正确性:算法的正确性是指算法至少应该具有输入、输出和加工处理无歧义性、能正确反映问题的需要、能够得到问题的正确答案。
2、可读性:设计算法的目的,一方面是为了让计算机执行,但还有一个重要的目的就是为了便于他人的阅读,让人理解和交流,自己将来也可阅读。如果可读性不好,时间长了自己都不知道写了什么,可读性是评判算法(也包括实现它的程序代码)好坏很重要的标志。
3、健壮性:当输入的数据非法时,算法应当恰当地做出反应或进行相应处理,而不是莫名其妙的输出结果。并且处理出错的方法不应是中断程序的执行,而应是返回一个表示错误或错误性质的值,以便于在更高的抽象层次上进行处理。
4、高效率与低存储量:通常,算法的效率指的是算法的执行时间;算法的存储量指的是算法执行过程中所需要的最大存储空间,两者的复杂度都与问题的规模有关。算法分析的任务是对设计的每一个具体的算法,利用数学工具,讨论其复杂度,探讨具体算法对问题的适应性。
(8)算法设计的要求扩展阅读:
算法的“正确”通常在用法上有很大的差别,大体分为以下4个层次:
1、算法程序没有语法错误;
2、算法程序能够根据正确的输入的值得到满足要求的输出结果;
3、算法程序能够根据错误的输出的值满足规格说明的输出结果;
4、算法程序对于精心设计、极其刁难的测试数据都能满足要求的输出结果。
对于这4层含义,层次要求最低,因为仅仅没有语法错误实在谈不上是好的算法。而层次(4)是最困难的,人们几乎不可能逐一验证所有的输入都得到正确的结果。因此,算法的正确性在大部分情况下都不可能用程序来证明,而是用数学方法证明的。
9. 数据结构设计一个好的算法应该达到什么目标
1、正确性,首先保证能够解决问题。
2、高效性,这样能够保证时间上的优势。
3、容错性、程序能妥善处理错误细节。
4、可读性、便于交流嘛
5、简洁行、尽量不要把问题复杂化。
10. 计算机算法是什么
计算机算法是以一步接一步的方式来详细描述计算机如何将输入转化为所要求的输出的过程,或者说,算法是对计算机上执行的计算过程的具体描述。