建材秒知道
登录
建材号 > 设计 > 正文

如何才能设计出优秀的算法

专一的铅笔
还单身的乌冬面
2022-12-29 18:22:54

如何才能设计出优秀的算法

最佳答案
舒心的八宝粥
干净的月饼
2026-04-23 11:19:16

数据结构中评价一个好的算法,应该从四个方面来考虑,分别是:

一、算法的正确性。

二、算法的易读性。

三、是算法的健壮性。

四、是算法的时空效率(运行)。

算法的设计取决于数据(逻辑)结构,算法的实现取决于所采用的存储结构。数据的存储结构本质上是其逻辑结构在计算机存储器中的实现。为了充分反映数据的逻辑结构,它在内存中的映像包括两个方面,即数据元素之间的信息和数据元素之间的关系。

不同的数据结构有相应的操作。数据操作是定义在数据逻辑结构上的操作算法,如检索、插入、删除、更新和排序。

扩展资料

该算法的一般性质包括:

1、对于任何符合输入类型的输入数据,都可以根据算法来解决问题,软件包保证了计算结构的正确性。

2、算法中的每一条指令都必须能够被人或机器执行。

3、确定性算法应该在每一步之后都有明确的下一步指示。也就是说,确保每个步骤都有下一步行动的指示,并且不缺乏或只有模糊的下一步行动指示。

4、有限算法的执行必须以有限的步数结束。

参考资料来源:百度百科-数据结构 (计算机存储、组织数据方式)

最新回答
伶俐的大碗
超级的绿茶
2026-04-23 11:19:16

分析:根据加法消元法,求出二元一次方程组(a1b2-a2b1≠0)的解,根据求解过程,可得所求框图。

(一)算法步骤:

(1)输入a1,b2,a2,b1,c1,c2.

(2)计算x的值为:

(3)计算y的值为:

(4)输出x,y的值即可。

(二)程序框图:如下

扩展资料:

程序流程图的规范表示:

①使用标准的框图符号。

②框图一般按从上到下、从左到右的方向画,流程线要规范。

③除判断框外,大多数框图符号只有一个进入点和一个退出点。

④在图形符号内描述的语言要非常简练、清楚。

在学习程序框图时要掌握各程序框的作用,准确应用三种基本逻辑结构,即顺序结构、条件分支结构、循环结构来画程序框图准确表达算法。画程序框图是用基本语句来编程的前提。

算法的三种基本逻辑结构:

①顺序结构:顺序结构描述的是是最简单的算法结构,语句与语句之间,框与框之间是按从上到下的顺序进行的。

②条件结构:根据条件选择执行不同指令的控制结构。

③循环结构:在一些算法中,经常会出现从某处开始,按照一定条件,反复执行某一处理步骤的情况

参考资料来源:百度百科--算法流程图

刻苦的草莓
雪白的钢笔
2026-04-23 11:19:16
第一步,输入三个数a

b

c

第二部,设置一个数,记作min,用来保存三个数中最小的数。

第三部,比较输入的第一个数和第二个数,将小的那个数赋值给min,再比较min和第三个数,将较小的数赋值给min。

第四部,输出min。

这是比较常规的方法。

落后的月光
聪慧的大侠
2026-04-23 11:19:16
算法是在有限步骤内求解某一问题所使用的一组定义明确的规则。通俗点说,就是计算机解题的过程。在这个过程中,无论是形成解题思路还是编写程序,都是在实施某种算法。前者是推理实现的算法,后者是操作实现的算法。一个算法应该具有以下五个重要的特征:1、有穷性: 一个算法必须保证执行有限步之后结束;2、确切性: 算法的每一步骤必须有确切的定义;3、输入:一个算法有0个或多个输入,以刻画运算对象的初始情况,所谓0个输入是指算法本身定除了初始条件;4、输出:一个算法有一个或多个输出,以反映对输入数据加工后的结果。没有输出的算法是毫无意义的;5、可行性: 算法原则上能够精确地运行,而且人们用笔和纸做有限次运算后即可完成。当遇到一个算法问题时,首先要知道自己以前有没有处理过这种问题.如果见过,那么你一般会顺利地做出来如果没见过,那么考虑以下问题:当遇到一个算法问题时,首先要知道自己以前有没有处理过这种问题.如果见过,那么你一般会顺利地做出来如果没见过,那么考虑以下问题:1. 问题是否是建立在某种已知的熟悉的数据结构(例如,二*树)上?如果不是,则要自己设计数据结构。2. 问题所要求编写的算法属于以下哪种类型?(建立数据结构,修改数据结构,遍历,查找,排序...)3.分析问题所要求编写的算法的数学性质.是否具备递归特征?(对于递归程序设计,只要设计出合理的参数表以及递归结束的条件,则基本上大功告成.)4.继续分析问题的数学本质.根据你以前的编程经验,设想一种可能是可行的解决办法,并证明这种解决办法的正确性.如果题目对算法有时空方面的要求,证明你的设想满足其要求.一般的,时间效率和空间效率难以兼得.有时必须通过建立辅助存储的方法来节省时间.5.通过一段时间的分析,你对解决这个问题已经有了自己的一些思路.或者说,你已经可以用自然语言把你的算法简单描述出来.继续验证其正确性,努力发现其中的错误并找出解决办法.在必要的时候(发现了无法解决的矛盾),推翻自己的思路,从头开始构思.6.确认你的思路可行以后,开始编写程序.在编写代码的过程中,尽可能把各种问题考虑得详细,周密.程序应该具有良好的结构,并且在关键的地方配有注释.7.举一个例子,然后在纸上用笔执行你的程序,进一步验证其正确性.当遇到与你的设想不符的情况时,分析问题产生的原因是编程方面的问题还是算法思想本身有问题.8. 如果程序通过了上述正确性验证,那么在将其进一步优化或简化。9. 撰写思路分析,注释.----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------看不懂,还是不明白,有谁清楚告诉我啊,

体贴的西牛
生动的大门
2026-04-23 11:19:16

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  '结束

羞涩的跳跳糖
强健的犀牛
2026-04-23 11:19:16

设计算法的原则:

1、正确性:算法的正确性是指算法至少应该具有输入、输出和加工处理无歧义性、能正确反映问题的需要、能够得到问题的正确答案。

2、可读性:设计算法的目的,一方面是为了让计算机执行,但还有一个重要的目的就是为了便于他人的阅读,让人理解和交流,自己将来也可阅读。如果可读性不好,时间长了自己都不知道写了什么,可读性是评判算法(也包括实现它的程序代码)好坏很重要的标志。

3、健壮性:当输入的数据非法时,算法应当恰当地做出反应或进行相应处理,而不是莫名其妙的输出结果。并且处理出错的方法不应是中断程序的执行,而应是返回一个表示错误或错误性质的值,以便于在更高的抽象层次上进行处理。

4、高效率与低存储量:通常,算法的效率指的是算法的执行时间;算法的存储量指的是算法执行过程中所需要的最大存储空间,两者的复杂度都与问题的规模有关。算法分析的任务是对设计的每一个具体的算法,利用数学工具,讨论其复杂度,探讨具体算法对问题的适应性。

扩展资料:

算法的“正确”通常在用法上有很大的差别,大体分为以下4个层次:

1、算法程序没有语法错误;

2、算法程序能够根据正确的输入的值得到满足要求的输出结果;

3、算法程序能够根据错误的输出的值满足规格说明的输出结果;

4、算法程序对于精心设计、极其刁难的测试数据都能满足要求的输出结果。

对于这4层含义,层次要求最低,因为仅仅没有语法错误实在谈不上是好的算法。而层次(4)是最困难的,人们几乎不可能逐一验证所有的输入都得到正确的结果。因此,算法的正确性在大部分情况下都不可能用程序来证明,而是用数学方法证明的。

坚定的仙人掌
轻松的大侠
2026-04-23 11:19:16
方法一:

另外搞三个数组或者链表,把除三余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--])

有魅力的长颈鹿
舒适的朋友
2026-04-23 11:19:16
设计一个算法,求1+2+4+...+2的49次方的值,要实现这个算法,如果不规定具体计算方法的话,可以采用等比数列求和的公式。直接利用公式计算2的50次方减1就可以了。使用一个循环进行累乘,再做一次减法,就可以得到答案了。

听话的项链
暴躁的毛衣
2026-04-23 11:19:16
1.节点计数器 count=1, 当前节点指针 *pCurr=第1个节点。

2.count为奇数,pCurr指向的节点保持在A中,否则将pCurr指向的节点放到B中。

3.让pCurr指向下一个节点, count++。

4.如果pCurr的值不为NULL(即已没到A的末尾),则跳到第2步重复执行,否则退出。