首先,对于长篇文章感到抱歉,但我必须在此解释详细信息。所以这就是我所拥有的。我有代码测量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。我不知道怎么做,而且我真的不知道我在图上绘制的是什么。如果有一个更好的地方我可以问这个,请指出我的方向。时间不多了。