类文件中有四种不同的算法,它们具有一定的时间复杂度。下面的输出是给定随机数据的数组大小n的每种排序所采取的步骤数。我可以获得一些关于如何确定时间复杂性的帮助吗?如果其中一种具有n ^ 2的时间复杂度,我很确定我必须采用步数并除以n ^ 2并查看它接近的数字,但我不知道该怎么做之后。希望我的问题不是太宽泛。
谢谢!
The array size is 100
Number of steps for Sort 1: 2543
Number of steps for Sort 2: 813
Number of steps for Sort 3: 495100
Number of steps for Sort 4: 776
The array size is 200
Number of steps for Sort 1: 10381
Number of steps for Sort 2: 1870
Number of steps for Sort 3: 3980200
Number of steps for Sort 4: 1764
The array size is 300
Number of steps for Sort 1: 20755
Number of steps for Sort 2: 2999
Number of steps for Sort 3: 13455300
Number of steps for Sort 4: 2826
The array size is 400
Number of steps for Sort 1: 40298
Number of steps for Sort 2: 4244
Number of steps for Sort 3: 31920400
Number of steps for Sort 4: 3933
The array size is 500
Number of steps for Sort 1: 65165
Number of steps for Sort 2: 5448
Number of steps for Sort 3: 62375500
Number of steps for Sort 4: 5028
The array size is 600
Number of steps for Sort 1: 90241
Number of steps for Sort 2: 6697
Number of steps for Sort 3: 107820600
Number of steps for Sort 4: 6178
The array size is 700
Number of steps for Sort 1: 122291
Number of steps for Sort 2: 8030
Number of steps for Sort 3: 171255700
Number of steps for Sort 4: 7416
The array size is 800
Number of steps for Sort 1: 157374
Number of steps for Sort 2: 9053
Number of steps for Sort 3: 255680800
Number of steps for Sort 4: 8627
The array size is 900
Number of steps for Sort 1: 202401
Number of steps for Sort 2: 10674
Number of steps for Sort 3: 364095900
Number of steps for Sort 4: 9842
The array size is 1000
Number of steps for Sort 1: 243032
Number of steps for Sort 2: 12047
Number of steps for Sort 3: 499501000
Number of steps for Sort 4: 11101
>
答案 0 :(得分:3)
标准技巧是在日志对数图上绘制值。
如果您有y=A n^k
然后log(y) = log(A) + k log(n)
的关系,您可以看到订单只是该行的斜率。
例如,这是第一组数据的log(n) log(v)
图:
表示值为k=2
- 因此您的数据可能为O(n^2)
。
使用八度音阶和
生成图像> n= [ 100, 200, 300, 400, 500, 600, 700, 800, 900, 1000 ]
> v = [2543, 10381, 20755, 40298, 65165, 90241, 122291, 157374, 202401, 243032]
> plot(log(n), log(v))
可以使用适当的线性拟合进行更好的估计。
使用
可以获得更高的订单准确度估算值> polyfit(log(n), log(v), 1)
ans =
1.9892 -1.3227
由于v = 0.27 n^2
大概为exp(-1.3)
,因此显示曲线约为0.27
。
值得注意的是,这只能获得p
类型行为中的O(n^p log^q n)
字词,并且曲线会在这些情况下弯曲到顶部。
答案 1 :(得分:2)
您可以采取两项措施来简化问题。
当你这样做时,表格会缩小为
s1 s2 s3 s4
100 1 1.0 1 1.0
200 4 2.3 8 2.3
400 16 5.2 64 5.1
800 62 11.1 516 11.1
从这张表中可以很容易地看出,当你将尺寸加倍时,sort1所花费的时间增加了4倍,而sort3所花费的时间增加了8倍。而且,很明显sort2和sort4具有相同的时间复杂度。其余部分留给读者练习。