【发布时间】:2015-11-15 17:08:24
【问题描述】:
通常以 O() 数量级给出性能:O(Magnitude)+K 其中K 通常被忽略,因为它主要适用于较小的Ns。
但是我越来越多地看到底层数据大小主导了性能,但这不是算法复杂性的一部分
假设algorithm A 是O(logN) 但使用O(N) 空间,algorithm B 是O(N) 但使用O(logN) 过去的情况是algorithm A 更快。现在,由于多层缓存中的缓存未命中,algorithm B 可能会更快地处理大数字,如果它有较小的 K,则可能是小数字
问题是你如何表示这个?
【问题讨论】:
-
我想如果我刚从计算机科学课上出来,我的脑海里会充满 big-O 和缓存未命中,但那是因为很难找到一个不得不工作的计算机科学老师大量软件的性能。这是a counterexample,正如@amit 所说,根据经验处理它。
-
如果您想要一个良好的性能评估,您需要在您想要评估的特定硬件上运行您的算法。您的帖子泛泛而谈,您认为 O(logN) 实现比 O(N) 实现更糟糕的是什么算法?数据集的大小以及您在什么硬件上运行。如果不指定处理器/内存/架构,则无法解释缓存未命中。
标签: algorithm performance caching