时间:2014-03-14 21:52:23

标签: php infinity big-theta big-o

给出PHP中的两个函数,比如说

function f($n) {
    return $n;
}

function g($n) {
    return pow($n, (2/3));
}

如何在PHP中检查函数f(n)是否为Ω(g(n)),Θ(g(n))或O(g(n))?

到目前为止我尝试了什么:

$n = INF;

$A = f($n) / g($n);

if ($A == 0) {
    echo "f(n) = O(g(n))";
} elseif (is_infinite($A)) {
    echo "f(n) = Ω(g(n))";
} elseif ($A != 0) {
    echo "f(n) = Θ(g(n))";
}

不应该这样吗?

2 个答案:

答案 0 :(得分:1)

你的基本想法是正确的:当n无限制地增长时,你必须找到f(n)/ g(n)的极限。遗憾的是,没有简单的方法来计算PHP中的确切限制,因为这需要符号计算,最好留给计算机代数系统,如Mathematica或Maxima。

您可以通过计算f(n)/ g(n)来增加n的值,并查看是否得到接近固定值的序列来近似限制。例如:

$n=1;
while ($n < 1e300) {
    $A = f($n)/g($n);
    echo $A, "\n";
    $n *= 1e12;
}

在这种特殊情况下,f(n)/ g(n)的序列似乎无限制地增长,因此数值证据表明f(n)为Ω(g(n))。这不是证明;需要有象征性的方法。

答案 1 :(得分:-1)