存在哪些算法运行时间模型?
我们都期望归并排序比冒泡排序更快,并注意归并排序使得 O(n log n) 与 O(n 2 ) 的冒泡排序进行比较。
对于其他算法,您可以计算其他操作(比较和交换除外),例如指针取消引用、数组查找、固定大小整数的算术等。
还有哪些其他方法来模拟执行时间?
我自己知道的一个是计算从磁盘读取和写入磁盘的块数;请参阅我对 Big-O 表示法何时失败的回答?冗长的描述。
另一个是计算缓存未命中的数量。这通过查看内存层次结构的所有级别来扩展 I/O 模型。
第三,对于分布式算法(例如在安全多方计算中),是计算通过网络传输的数据量(通常以通信轮数或消息数来衡量)。
为了预测算法的性能,还有哪些其他有趣的事情可以计算(而不是计算!)?
另外,这些模型有多好? 据我所知,缓存遗忘算法与磁盘数据的 I/O 效率算法相比具有竞争力,但对于内存算法则不然。
特别是:这些模型在哪些特定情况下错误地预测了相对性能?根据我自己的实验,当数据小到足以放入内存时,斐波那契堆不会加速 Dijstra 的最短路径(相对于二进制堆)。