算法设计原则是什么?

算法设计原则是什么?,第1张

原则:首先说设计的算法必须是"正确的",其次应有很好的"可读性",还必须具有"健壮性",最后应考虑所设计的算法具有"高效率与低存储量"。

所谓算法是正确的,除了应该满足算法说明中写明的"功能"之外,应对各组典型的带有苛刻条件的输入数据得出正确的结果。

在算法是正确的前提下,算法的可读性是摆在第一位的,这在当今大型软件需要多人合作完成的环境下是换重要的,另一方面,晦涩难读的程序易于隐藏错误而难以调试。算法的效率指的是算法的执行时间,算法的存储量指的是算法执行过程中所需最大存储空间。

算法是程序设计的另一个不可缺的要素,因此在讨论数据结构的同时免不了要讨论相应的算法。这里有两重意思,即算法中的 *** 作步骤为有限个,且每个步骤都能在有限时间内完成。

确定性表现在对算法中每一步的描述都没有二义性,只要输入相同,初始状态相同,则无论执行多少遍,所得结果都应该相同。

可行性指的是,序列中的每个 *** 作都是可以简单完成的,其本身不存在算法问题,例如,"求x和y的公因子"就不够基本。

输入值即为算法的 *** 作对象,但 *** 作的对象也可以由算法自身生成,如"求100以内的素数", *** 作对象是自然数列,可以由变量逐个增1生成。

算法的健壮性指的是,算法应对非法输入的数据作出恰当反映或进行相应处理,一般情况下,应向调用它的函数返回一个表示错误或错误性质的值。

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 = 0i <= headi++){

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{

结构化程序设计原则主要有四个原则:

1.自顶向下:程序设计时,应先考虑总体,后考虑细节;先考虑全局目标,后考虑局部目标。不要一开始就过多追求众多的细节,先从最上层总目标开始设计,逐步使问题具体化。

2.逐步求精:对复杂问题,应设计一些子目标作为过渡,逐步细化。

3.模块化:一个复杂问题,肯定是由若干稍简单的问题构成。模块化是把程序要解决的总目标分解为子目标,再进一步分解为具体的小目标,把每一个小目标称为一个模块。

4.限制使用goto语句

结构化程序设计方法的起源来自对GOTO语句的认识和争论。肯定的结论是:在块和进程的非正常出口处往往需要用GOTO语句,使用GOTO语句会使程序执行效率较高;在合成程序目标时,GOTO语句往往是有用的,如返回语句用GOTO。

否定的结论是:GOTO语句是有害的,是造成程序混乱的祸根,程序的质量与GOTO语句的数量呈反比,应该在所有高级程序设计语言中取消GOTO语句。取消GOTO语句后,程序易于理解、易于排错、容易维护,容易进行正确性证明。作为争论的结论,1974年Knuth发表了令人信服的总结,并取消了GOTO语句。

扩展资料:

结构化程序,是以模块化设计为中心,将待开发的软件系统划分为若干个相互独立的模块。

结构化程序设计由迪克斯特拉(E.W.dijkstra)在1969年提出,是以模块化设计为中心,将待开发的软件系统划分为若干个相互独立的模块,这样使完成每一个模块的工作变单纯而明确,为设计一些较大的软件打下了良好的基础。

由于模块相互独立,因此在设计其中一个模块时,不会受到其它模块的牵连,因而可将原来较为复杂的问题化简为一系列简单模块的设计。模块的独立性还为扩充已有的系统、建立新系统带来了不少的方便,因为我们可以充分利用现有的模块作积木式的扩展。

参考资料:百度百科-结构化程序


欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/yw/8074465.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-13
下一篇 2023-04-13

发表评论

登录后才能评论

评论列表(0条)

保存