如何才能设计出优秀的算法
数据结构中评价一个好的算法,应该从四个方面来考虑,分别是:
一、算法的正确性。
二、算法的易读性。
三、是算法的健壮性。
四、是算法的时空效率(运行)。
算法的设计取决于数据(逻辑)结构,算法的实现取决于所采用的存储结构。数据的存储结构本质上是其逻辑结构在计算机存储器中的实现。为了充分反映数据的逻辑结构,它在内存中的映像包括两个方面,即数据元素之间的信息和数据元素之间的关系。不同的数据结构有相应的操作。数据操作是定义在数据逻辑结构上的操作算法,如检索、插入、删除、更新和排序。
扩展资料
该算法的一般性质包括:
1、对于任何符合输入类型的输入数据,都可以根据算法来解决问题,软件包保证了计算结构的正确性。
2、算法中的每一条指令都必须能够被人或机器执行。
3、确定性算法应该在每一步之后都有明确的下一步指示。也就是说,确保每个步骤都有下一步行动的指示,并且不缺乏或只有模糊的下一步行动指示。
4、有限算法的执行必须以有限的步数结束。
参考资料来源:百度百科-数据结构 (计算机存储、组织数据方式)
分析:根据加法消元法,求出二元一次方程组(a1b2-a2b1≠0)的解,根据求解过程,可得所求框图。
(一)算法步骤:
(1)输入a1,b2,a2,b1,c1,c2.
(2)计算x的值为:
(3)计算y的值为:
(4)输出x,y的值即可。
(二)程序框图:如下
扩展资料:
程序流程图的规范表示:
①使用标准的框图符号。
②框图一般按从上到下、从左到右的方向画,流程线要规范。
③除判断框外,大多数框图符号只有一个进入点和一个退出点。
④在图形符号内描述的语言要非常简练、清楚。
在学习程序框图时要掌握各程序框的作用,准确应用三种基本逻辑结构,即顺序结构、条件分支结构、循环结构来画程序框图准确表达算法。画程序框图是用基本语句来编程的前提。
算法的三种基本逻辑结构:
①顺序结构:顺序结构描述的是是最简单的算法结构,语句与语句之间,框与框之间是按从上到下的顺序进行的。
②条件结构:根据条件选择执行不同指令的控制结构。
③循环结构:在一些算法中,经常会出现从某处开始,按照一定条件,反复执行某一处理步骤的情况
参考资料来源:百度百科--算法流程图
b
c
。
第二部,设置一个数,记作min,用来保存三个数中最小的数。
第三部,比较输入的第一个数和第二个数,将小的那个数赋值给min,再比较min和第三个数,将较小的数赋值给min。
第四部,输出min。
这是比较常规的方法。
Rem 语言:Visual Basic 6.0
Sub Main() '开始
i = 1
Do While i <= 1000
If i mod 7 = 0 Then
MsgBox i, vbInformation, "输出"
End If
i = i + 1
Loop
End Sub '结束
设计算法的原则:
1、正确性:算法的正确性是指算法至少应该具有输入、输出和加工处理无歧义性、能正确反映问题的需要、能够得到问题的正确答案。
2、可读性:设计算法的目的,一方面是为了让计算机执行,但还有一个重要的目的就是为了便于他人的阅读,让人理解和交流,自己将来也可阅读。如果可读性不好,时间长了自己都不知道写了什么,可读性是评判算法(也包括实现它的程序代码)好坏很重要的标志。
3、健壮性:当输入的数据非法时,算法应当恰当地做出反应或进行相应处理,而不是莫名其妙的输出结果。并且处理出错的方法不应是中断程序的执行,而应是返回一个表示错误或错误性质的值,以便于在更高的抽象层次上进行处理。
4、高效率与低存储量:通常,算法的效率指的是算法的执行时间;算法的存储量指的是算法执行过程中所需要的最大存储空间,两者的复杂度都与问题的规模有关。算法分析的任务是对设计的每一个具体的算法,利用数学工具,讨论其复杂度,探讨具体算法对问题的适应性。
扩展资料:
算法的“正确”通常在用法上有很大的差别,大体分为以下4个层次:
1、算法程序没有语法错误;
2、算法程序能够根据正确的输入的值得到满足要求的输出结果;
3、算法程序能够根据错误的输出的值满足规格说明的输出结果;
4、算法程序对于精心设计、极其刁难的测试数据都能满足要求的输出结果。
对于这4层含义,层次要求最低,因为仅仅没有语法错误实在谈不上是好的算法。而层次(4)是最困难的,人们几乎不可能逐一验证所有的输入都得到正确的结果。因此,算法的正确性在大部分情况下都不可能用程序来证明,而是用数学方法证明的。
另外搞三个数组或者链表,把除三余0,1,2的数分别放到那三个数组中,再填回原来的数组
方法二:
我讲不清楚,直接写代码了:
int k,i=1,j=n
for(k=ik<=jk++)
if(A[k]%3==0)
swap(A[k],A[i++])
else if(A[k]%3==2)
swap(A[k],A[j--])
2.count为奇数,pCurr指向的节点保持在A中,否则将pCurr指向的节点放到B中。
3.让pCurr指向下一个节点, count++。
4.如果pCurr的值不为NULL(即已没到A的末尾),则跳到第2步重复执行,否则退出。