【发布时间】:2013-11-24 23:59:37
【问题描述】:
我有一个小程序,它实现了三种排序算法,并对每种算法的执行时间进行时间分析(使用 C 时间库并调用 clock())。该程序在对数组进行排序之前读取 9999、19999 和 29999 个整数。完成后,发现新排序数据的中位数作为数据正确排序的证明。
问题是,在我的个人 Windows 7 机器上,尽管有正确排序的集合,但我无法找到通过快速排序算法排序的数据的中位数。然而,当在 Linux 机器上运行时,一切正常但是时间运行与预期不符。
快速排序算法是nlog(n) 平均情况。因此,我们预计执行时间会随着更大的数据集而增加(在我的个人机器上就是这样)。但是,当在 linux 机器上运行时,最小数据集的执行时间为 0,而以下两个数据的执行时间相同。
我可以理解与执行时间相关的计算结果为 0(由于整数运算的截断),但我的个人机器在所有其他算法上运行得更快。为这个特定实例指出的滞后促使我询问差异。
如果您认为差异背后的原因可能与我阅读/排序方式的实施有关,那么请发表评论。但是,我对两个系统之间处理系统时间的方式之间的差异以及可能是罪魁祸首的各种其他事情之间的差异更感兴趣。
而且,有时当程序在 linux 机器上运行时,输出的执行时间实际上会类似于10 0 10,所以我自然对此很感兴趣。
【问题讨论】:
-
您可能会通过此查看是否存在精度差异问题:stackoverflow.com/questions/8594277/clock-precision-in-time-h
-
你没有说任何关于机器的架构,或者你是使用 32 位还是 64 位实现,或者当你运行这些测试时机器可能在做什么.简而言之,您的数据毫无意义。
-
我在问一个一般性问题。我没有考虑这个输出在不同架构中可能不同的依赖关系。我想知道是否有立即明显的区别。我并不是要求对正在发生的事情进行非常精确的定义。