我使用time实用程序来计算输入为10000,20000,...,60000字的快速排序算法的用户时间,这是我的结果
n( in thousands) T(n)
1 1.740
2 3.7
3 5.83
4 7.93
5 10.18
6 12.41
我想知道的是f(n)使得T(n)= theta(f(n)),即我需要猜测f(n)使得T(n)/ f(n)接近一个非零常数。 我尝试了以下f(n)函数,但似乎没有生成常量
f(n) =n
f(n) = nlogn
f(n) = n+sqrt(n)
f(n) = n^2
f(n)=n + logn
f(n)=1/n
根据我的推断,T(n)的n为下界,n log n为上界。所以我需要这两个值之间的函数。请帮忙。
答案 0 :(得分:0)
你有很多可能的选择。我首先将您的数据拟合到六个方程中的每一个,然后看看拟合的效果如何。例如,如果您尝试绘制结果,您会立即看到它们几乎是直线。使用任何图形软件都可以帮助您看到这一点。在科学和数学方面,这总是一个好主意:绘制你的结果!
我很懒,所以我使用Excel为你的数据拟合直线,我找到了等式:
T(n) = 2.1379n - 0.524
R 2 为0.9995。甚至Excel也会给你这些R 2 值,告诉你数据的拟合程度(你希望R 2 尽可能接近1)。现在,这个结果非常好,你可以在那里停下来,但我想我会尝试将你的数据与其他方程拟合,看看我得到了什么。我发现最适合你的六个职能是:
T(n) = 0.0327n<sup>2</sup> + 1.911n + 0.219
R 2 优于0.999!现在这非常合适。当然,如果你想要更准确,你应该在Igor(免费)而不是Excel中尝试这个。特别是因为已知Excel给出负R 2 值。
带回家的消息,我认为你应该总是尝试绘制你的结果。这些天很容易。在那之后,我认为你太担心重新发明轮子并自己推导出这些轮廓。有很多软件可以帮到你。