如果我知道算法的复杂性,我可以预测它在现实生活中的计算时间吗?
更多背景信息:
我一直在努力解决大学任务,必须在给定位置的游戏中找到最好的结果。我写了一个算法,但它很有效。复杂性为O(n)=5^n
。对于24个元素,它计算几分钟。我不确定是不是因为我的实现是错误的,或者这个算法非常慢。有没有办法让我估算出任何算法应该花多少时间?
答案 0 :(得分:3)
最糟糕的情况是,您可以根据外推法进行推断。因此,在N = 1,2,3,4元素上有时间(越多越好)和算法复杂度的O符号估计,您可以估计任何有限数的时间。另一个问题是,随着N的增加,估计精度越来越低。
你可以用它做什么?搜索此类方法的错误估计算法。在实践中,它通常会给出足够好的结果。
另外请不要忘记模型充分性检查。因此,如果得到N = 1..10和O符号复杂度的结果,则应检查结果与O模型的“有多好”(如果可以选择满足结果的O符号公式的数字)。如果你不能得到数字,你需要更多的数字来获得更广泛的图片或者......好的,你可能有错误的复杂性估计: - )。
有用的链接:
答案 1 :(得分:2)
您无法仅根据时间复杂度预测运行时间。涉及的因素很多:硬件速度,编程语言,实现细节等。使用复杂性可以预测的唯一事情是,当输入的大小增加时,预计时间会增加。
例如,就个人而言,我已经看到O(N ^ 2)算法花费的时间比O(N ^ 3)长,特别是在N的小值上,例如在你的情况下。顺便说一句,5 ^ 24是一个巨大的数字(5.9e16)。如果在超级计算机上花费几个小时,我不会感到惊讶,更不用说我们大多数人正在使用的中档个人电脑了。