简单来说,程序算法就是:为了完成一个特定任务而设计的一系列清晰、有限的步骤。
你可以把它想象成一份菜谱。比如要做番茄炒蛋,菜谱会写明:
-
准备食材
-
切番茄
-
打蛋
-
下锅炒
-
...直到出锅
算法也是这样,它告诉计算机先做什么、后做什么、在什么条件下做什么。程序就是用计算机能懂的语言(如Python、Java)把算法写出来。
算法的几个关键特点:
-
有穷性:必须在有限的步骤内结束,不能无限循环。
-
确定性:每一步指令必须明确、无歧义。比如“放一点盐”就不明确,应该说“放2克盐”。
-
输入和输出:通常有输入(初始数据),并能产生一个或多个输出(结果)。
-
可行性:每一步都应该是可以实际执行的。
举个例子:查找数字
问题是:在一个有序列表 [2, 5, 8, 12, 19, 23] 中,找到数字 19 的位置。
-
简单算法(依次查找):从第一个开始,一个一个往后找,直到找到19。如果列表很大,效率就比较低。
-
高效算法(二分查找):
-
找到列表中间的数字
12。 -
因为
19 > 12,所以肯定在后半段[19, 23]里。 -
再找后半段的中间数字
19,就找到了。
这种方法即使列表里有10亿个数字,也最多只需30次就能找到。
-
算法与程序的关系:
-
算法:是解决问题的思想和方法,是抽象的,可以用文字、流程图表示。好比一份用中文写的菜谱思路。
-
程序:是把算法用计算机语言具体实现的代码。好比把中文菜谱“翻译”成计算机能懂的机器指令。
总的来说,算法是程序的灵魂。同一个问题,用不同算法效率可能天差地别。设计出好的算法,是写出优秀程序的核心。