先来看看网上对“算法”的定义。
(1)百度百科:解题方案的准确而完整的描述。
老金疑问:把大象装冰箱的解题方案描述是算法吗?如果它是算法,那么宋老师当时一定是在进行算法表演了?
(2)百度AI:为解决某一特定问题而规定的、有限长的操作序列。
老金疑问:按照这个定义,世上所有的标准、流程、规范都可纳入算法的范畴。
网上说算法有三个核心要素,五个特征。
三个核心要素:
①特定问题:算法是针对某一具体问题设计的。
②有限长的操作序列:算法是一系列步骤或操作的集合,这些步骤或操作的数量是有限的,即算法不能是无限循环的。
③规定性:算法的每一个步骤或操作都必须是明确、无歧义的,以便计算机或其他执行者能够准确执行。
五个特征:
①有穷性(Finiteness):算法的步骤是有限的;
②确切性(Definiteness):算法的每一步必须明确;
③输入项(Input):有0个或多个输入(0个输入是指算法本身定出了初始条件);
④输出项(Output):有一个或多个输出。没有输出的算法是毫无意义的;
⑤可行性(Effectiveness):算法中的任何计算步骤都是可以被分解为基本的可执行的操作步骤,即每个计算步骤都可以在有限时间内完成(也称之为有效性)。
但以上说的都不是算法的本质特征,在老金看来这些表述几近于严谨的废话。
算法区别于其他东东的独特性在哪里呢?
老金解释问题喜欢从文字的本源出发。算就是计算,法就是方法,所以算法就是计算的方法。计算就是算术、就是数学,所以老金认为算法的本质就是:用数学解决问题的方法。
“算法”的中文名称出自《周髀算经》,英文名称Algorithm 源自于9世纪波斯数学家al-Khwarizmi,是他在数学上提出了算法这个概念。“算法”原为"algorism",意思是阿拉伯数字的运算法则,在18世纪演变为"algorithm"。
所以,无论从字面意思还是从历史渊源,算法都离不开数学。
算法的本质是数学。
宋老师的装大象三步曲只是一种纯语文描述,因而不能视为算法,除非它具有数学特征(有数据、有运算),才能视为算法。
装大象问题真要进行算法描述,可能会是这样:
1.大象数据获取
(1)大象的三维尺寸数据。
(2)大象的体重范围。
(3)大象的攻击强度。
2.确定冰箱参数
(1)按大象的尺寸确定冰箱的长宽高。
(2)根据大象的最大体重及破坏力确定冰箱的材质、结构。
(3)冰箱门从内部开启力需小于大象的最大输出力。
(4)设定冰箱的适宜温度。
(5)设定冰箱的氧气供应量。
3.打造冰箱
(1)对所有参数进行运算,确定冰箱打造可行性。
(2)发出冰箱制造指令。
4.将大象放入冰箱
(1)检查大象的位置和状态。
(2)移动冰箱到装大象的合适位置。
(3)打开冰箱。
(4)用食物引诱大象进入冰箱,如果30分钟内它不自行进入召唤擎天柱采取强硬措施。
5.关闭冰箱
(1)确定大象身体完全进入冰箱。
(2)关闭冰箱门,并确认冰箱完全关闭、锁止,以确保大象不会逃出。
当然,这个算法描述也只是个大框,缺少细节,而且可能也不完整。但它是包含了数学特征的,所以是可以视为算法的。