java - 根据步数确定时间复杂度

标签 java algorithm time-complexity big-o

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

最佳答案

这方面的标准技巧是在对数对数图上绘制值。

如果你有关系 y=A n^k 那么 log(y) = log(A) + k log(n) 你可以看到顺序只是直线的斜率。

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

enter image description here

这表明 k=2 的值 - 所以您的数据可能是 O(n^2)

图片是用octave生成的

> 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

值得注意的是,这只会让你得到 O(n^p log^q n) 类型行为中的 p 项,并且曲线会在顶部弯曲在那些情况下。

关于java - 根据步数确定时间复杂度,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33006742/

相关文章:

时间复杂度为 O(log N^3/M) 的算法

python - 为什么这个循环会随着时间的二次方缩放

java - 预期条件失败 : waiting for element to be clickable in Selenium

java - 内存棒切割算法

c# - 将 int 转换为 6 个字符的字母数字字符串的算法

python - 在二进制数组中查找直角三角形坐标

algorithm - 整数转罗马算法时间复杂度

java - 如果修改重复列表,则初始列表 gettign 被修改

java - 在 TextView 中的两个可绘制对象之间绘制线条

java - 如何为 Java/Scala 后端编写 Python 中间件?如何连接Java和Python?