我会说对于这类问题,您需要的不仅仅是三个数据点,因为系统的复杂性而不仅仅是算法。
我要做的是比较迭代和经过的时间,看看是否能找到与标准时间复杂度之一匹配的模式:
- 常数:O(c),其中 c 是常数。
- 线性:O(n)
- 多项式:O(n^c) 其中 c 是一个常数(或者甚至像 O(n^2 + n^6) 这样复杂的东西)
- 指数:O(c^n) 其中 c 是一个常数。
- 对数:O(log|n|)
- 不管这叫什么:O(n log|n|)
让我们来看看你的问题:
n | time
4096 | 512 ms
16384 | 1024 ms
36864 | 1536 ms
当 n 增加 4 倍(从 4096 到 16384)时,时间增加 2 倍(从 512 到 1024 毫秒)。
当 n 增加 9 倍(从 4096 到 36864)时,时间增加 3 倍(从 512 到 1536 毫秒)。
与此匹配的函数是 f(n) = n^(1/2)。当 n 上升 4 倍时,f(n) 上升 sqrt(4) 倍,等等......
所以这是 O(n^.5) 阶,它是多项式
TLDR:将其绘制成图表并将其与时间复杂度的常用函数相匹配。在现实世界中,您可能需要三个以上的数据点。
编辑:我想补充一点,这应该更复杂。每种时间复杂度都可能有一个常数项。即 O(n^c) 更可能是 O(n^c + K),其中 K 是常数。写出来时,为了简单起见,我们忽略了常数,但它会显示在您的图表中。