有哪些算法运行时间模型?
我们都期望归并排序比冒泡排序快,注意到归并排序进行O(n log n)次比较,而冒泡排序需要O(n2)次。
对于其他算法,您需要计算其他操作(而不是比较和交换),例如指针引用、数组查找、固定大小整数的算术运算等。
还有哪些建模执行时间的方式?
我知道的另一种是计算从磁盘读取和写入的块数;请参阅我在When does Big-O notation fail?中的答案,其中有详细的描述。
另一个是计算缓存未命中的次数。这扩展了I/O模型,考虑所有内存层次。
第三个是针对分布式算法(例如安全多方计算)的,它计算通过网络传输的数据量(通常以通信轮次或消息数量来衡量)。
还有哪些有趣的事情可以计数(和不计数!)以预测算法的性能?
这些模型有多好?据我所知,在磁盘上的数据上,缓存无关算法与I/O有效算法相当;但对于内存中的算法,则不然。
特别地:这些模型在哪些具体情况下会错误地预测相对性能?根据我的实验,当数据足够小以适合内存时,斐波那契堆不会加速Dijstra的最短路径(相对于二叉堆)。