【发布时间】:2012-11-25 17:30:55
【问题描述】:
我想根据 n 和 x 计算给定算法的运行时间 O(n, x) = Theta(n, x) 大量(> 100)个示例(算法需要多长时间n 和 x)。 真的有办法做到这一点吗?
我知道运行时间会随着 n 和 x (!) 的增加而增加,但我认为连贯性太复杂而无法通过“手动”计算出 O(n, x),因为 n 或 x mac 会像 n 一样增加 ^ x,甚至更糟。
顺便说一句。我最喜欢解决这个问题的语言是 Python 或 PHP。
【问题讨论】:
-
我认为通过经验而不是分析来做这件事的希望不大。
-
Big-O 符号不一定与实际运行时间相关。并且运行时间不一定随着 n 增加。您应该能够通过分析来确定算法的 Big-O 效率;你不应该尝试根据实际的数值数据来计算它。
-
与您通过实验确定任何事物的方式相同——在许多不同的
n处测量常数 x(或少数几个)的时间。查看图表并将其拟合为合理的值,看看它是否增加为n或n**2等。对x执行相同的操作。希望你做对了。必要时重新评估。当然,你也没有排除交叉项的可能性(O(n*x))。对此你无能为力... -
什么是
O(n, x)?我熟悉 Big-Oh 的常见定义,但我以前从未见过这种表示法。 -
@phant0m -- 我认为这只是 Big-Oh,但在功能依赖性未知的 2 个变量中。例如
O(n*m)=>Theta(n,m)...(但我只是在这里猜测)
标签: python algorithm computer-science asymptotic-complexity