比较运行时 - 理论与实际

时间:2014-08-06 01:59:40

标签: comparison big-o analysis mergesort radix-sort

首先,对于长篇文章感到抱歉,但我必须在此解释详细信息。所以这就是我所拥有的。我有代码测量mergesort和radix排序算法的运行时间,用于四种不同大小的数据。

Mergesort runtimes:
N = 10;    runtime = 3499 nanoseconds
N = 100;   runtime = 39600 nanoseconds
N = 1000;  runtime = 470199 nanoseconds
N = 10000; runtime = 6227399 nanoseconds

Radixsort runtimes:
N = 10;    runtime = 19200 nanoseconds
N = 100;   runtime = 135099 nanoseconds
N = 1000;  runtime = 1317799 nanoseconds
N = 10000; runtime = 14208600 nanoseconds

我还在这台机器上测量了单个操作的运行时间大约为1000纳秒。这是教授推荐的一种手段,可帮助将理论运行时转换为可与实际运行时间进行比较的内容。对于mergesort,我有O(n log(n))作为运行时,而对于radixsort,我有O(nk),虽然我不完全确定k代表什么。他建议我们进行以下转换,所以我已经为每个合并进行了转换。我不知道如何为radixsort做这个,因为我不知道如何考虑'k'。我的理解是'k'基本上是指数字的位数,但你基本上可以坚持使用更大的数字(N或k),所以因为在我正在使用的情况下我的N总是大于k,所以我我只是将Radix视为O(N)。 K最多限制为六位数,其中N从最低值10开始。

1000ns * theoreticalruntime
For example, 1000ns * 10 log2(10)

Mergesort: 
N = 10;    33219.3 nanoseconds
N = 100;   664385.6 nanoseconds
N = 1000;  9.96578428 * 10^6 nanoseconds
N = 10000; 1.3287712379549449 * 10^8 nanoseconds

Radixsort: (1000ns per operation * N)

N = 10;    10000
N = 100;   100000
N = 1000;  1000000
N = 10000; 10000000

所以这就是我的问题所在。一,我不知道如何对radixsort理论运行时进行此计算。二,我不知道如何使用图表(要求)比较这些值。

在课堂上,他正在讨论使用日志来“规范化”数据。 Y轴是N,X轴是时间,但他说的是能够使用日志将N值从10,100,1000和10000更改为它们将显示为N = 1的位置,2,3,4。我不知道怎么做,而且我真的不知道我在图上绘制的是什么。如果有一个更好的地方我可以问这个,请指出我的方向。时间不多了。

0 个答案:

没有答案