明确步骤与输入
算法把一种求解方法写成能够依次执行的规则,而不只是提出目标。例如“找到最小值”是任务,“保留当前最小值并逐项比较”才开始说明方法。输入属于什么范围、结果应满足什么条件,也需要一起定义,否则同样一段步骤可能在不同理解下产生不同结论。
参考:[1]
方法不同于一份代码
同一种算法可以由不同语言实现,也可以在不同硬件上执行。具体代码决定数据表示、错误处理和调用接口,而算法描述关注产生结果的规则。反过来,一段程序也可能同时使用排序、查找和编码等多种算法;程序的功能名称并不能替代对内部方法的说明。
参考:[2]
正确性需要覆盖情况
检查几个例子有助于发现错误,却不能替代对全部允许输入的论证。人们可以建立循环不变量、分析递归步骤,或证明结果满足给定条件。有些方法带随机选择,需要说明成功概率和误差;依赖近似结果的方法,也应明确误差界限,不能把每次看起来合理当作严格正确。
参考:[1]
规模决定资源要求
算法分析研究输入规模增加时,时间、内存或其他资源怎样变化。机器更快可以缩短某次运行,却不会消除重复处理所有成对组合等结构性增长。选择方法时,要结合数据分布、访问方式和允许成本;一个适合小数据的直接办法,未必适合规模扩大后的同类任务。
参考:[2]