衡量算法好坏的一般标准是渐进表示的时间复杂度。

在n极大的情况下O(n)的算法就没有O(lgn)的算法好。

因为n不一定会是非常大,因此常数项可能也会非常重要。这些都是非常明显的道理。

但是,实际上还有另外一个非常重要的容易忽视的因素。

举个排序的例子。

我们都知道插入排序算法的复杂度是O(n^2)的,不如很多O(nlgn)的算法快。但是为什么我们在码牌的时候直觉上一定会选择插入排序算法呢?仅仅是因为牌的数量少的原因么?

显然不是这样的。

问题的本质在于对计算机来说,比较两个元素和交换两个元素的时间是差不多的。但是对于人工来说,比较两张牌只需要扫一眼。而交换2张牌则需要动手,这是非常消耗时间的操作。而插入排序虽然需要比较很多次,但是真正需要操作牌的次数只需要n-1次。

迷恋算法的误区在于虽然算法的模板是相同的,但是具体操作的性质可能会随着事实情况的不同而千差万别。在一个模型下的分析可能不能适合于另一个模型。

这个还是需要额外注意一下的