【发布时间】:2010-10-31 03:46:25
【问题描述】:
存在哪些算法运行时间模型?
我们都希望归并排序比冒泡排序更快,并注意归并排序的比较时间为 O(n log n),而冒泡排序的时间为 O(n2)。
对于其他算法,您可以计算其他操作(比较和交换除外),例如指针取消引用、数组查找、固定大小整数的算术等。
还有哪些其他方法可以模拟执行时间?
我自己知道的一个是计算从磁盘读取和写入磁盘的块数;请参阅我对When does Big-O notation fail? 的回答以获得详细说明。
另一个是计算缓存未命中的数量。这通过查看内存层次结构的所有级别来扩展 I/O 模型。
第三,对于分布式算法(例如在安全的多方计算中)是计算通过网络传输的数据量(通常以通信轮数或消息数来衡量)。
为了预测算法的性能,还有哪些有趣的事情可以计算(而不是计算!)?
另外,这些模型有多好?据我所知,缓存无意识算法与磁盘数据的 I/O 效率算法相比具有竞争力,但对于内存算法则不然.
特别是:这些模型在哪些特定情况下错误地预测了相对性能?根据我自己的实验,当数据小到足以放入内存时,斐波那契堆不会加速 Dijstra 的最短路径(相对于二进制堆)。
【问题讨论】:
-
“还有哪些有趣的事情可以计算......”这不是真正的问题吗?也许调整标题?
-
有趣的话题,但不是重点。
-
请注意,+1 用于正确格式化 O(n2) 上的正方形:P
标签: algorithm language-agnostic model big-o performance