根据步骤数确定时间复杂度

时间:2015-10-08 04:38:38

标签: java algorithm big-o time-complexity big-theta

类文件中有四种不同的算法,它们具有一定的时间复杂度。下面的输出是给定随机数据的数组大小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 
> 

2 个答案:

答案 0 :(得分:3)

标准技巧是在日志对数图上绘制值。

如果您有y=A n^k然后log(y) = log(A) + k log(n)的关系,您可以看到订单只是该行的斜率。

例如,这是第一组数据的log(n) log(v)图:

enter image description here

表示值为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)

您可以采取两项措施来简化问题。

  1. 仅考虑最小尺寸2倍的尺寸。在此示例中,最小尺寸为100,因此唯一值得考虑的尺寸为100,200,400和800.
  2. 相对于最小样本的时间标准化所有时间。例如,排序1大小100 的时间是2543,因此将排序1的所有时间除以2543.
  3. 当你这样做时,表格会缩小为

         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具有相同的时间复杂度。其余部分留给读者练习。