【问题标题】:Exponential Time Complexity Example (n^n)指数时间复杂度示例 (n^n)
【发布时间】:2016-01-06 05:35:23
【问题描述】:

我无法找到真正的计算需要 n^n 次计算的算法(编程或现实世界)示例。我见过旅行推销员问题,但那真的很糟糕!略小于 n^n。我还看到了电话簿示例here。这个电话簿问题并不是真正的 n^n,因为每个加载的原始电话簿总共需要 n 并且为每个原始电话簿制作 n 份副本。现在最多 n + n^2。然后机器人需要加载每个额外的副本,这也是 n^2。把所有这些加起来,你得到 n + 2n^2。其中,因为我们看的是最大的指数,所以只有 x^2。

谁能给我一个真正需要 n^n 的例子吗?

【问题讨论】:

  • 那个电话簿示例的复杂度为 n*n 而不是 n^n...可能你读错了。正如我刚才所做的那样(是的!我读错了你的问题)。
  • stackoverflow.com/questions/6156224/… -> 也许你可以从这个链接获得一些帮助。
  • 用原始算法计算n 值的所有排列的乘积是指数的。顺便说一句:TSP 不是O(n!),而是它的蛮力算法。 TSP 的其他算法具有其他复杂性。
  • 您是专门寻找 n^n,还是 Omega(2^(n log n)) 中的任何东西都可以?
  • @G。巴赫 - 我专门寻找 n^n 复杂性。

标签: algorithm time-complexity


【解决方案1】:

计数到 nn

的递归 O(nn) 函数示例
long long pownn(int n, int depth) {
    if ( ! depth) return 1;
    long long ll = 0;
    int i = n;
    while (i--) ll += pownn(n, depth-1);
    return ll;
}

打电话给long long result = pownn(n, n);

这种算法就像在某些游戏中可以找到的那样,理论上每个可搜索位置都会给自己 n 个其他可搜索位置,搜索深度设置为 n。实际上,可以优化游戏(如国际象棋)(minimax / alpha-beta / memoization-like: 存储数百万个位置 / 位置分析...),之后搜索可能会比深度更远n消除“无用”的中间位置。因此“只”分析了几百万个位置。

【讨论】:

  • 你能解释一下为什么对所有可能的国际象棋移动的未优化搜索是 n^n 吗?
  • 这是一种理论上的情况,因为国际象棋在移动完成后将有更多或更少的位置。无论如何,假设一个给定的位置有 10 个潜在的移动,每个移动都给对手 10 个潜在的移动等等......第一级有 10 个分支,每个分支都有 10 个分支等等......在深度 10,要分析的位置是 10 x 10 x ... x 10(10 次),即 10^10。将 10 替换为 n...
  • 这对我来说真的很有意义。谢谢。
猜你喜欢
  • 1970-01-01
  • 2011-07-09
  • 2015-06-12
  • 1970-01-01
  • 1970-01-01
  • 2015-05-25
  • 1970-01-01
  • 1970-01-01
  • 2020-02-02
相关资源
最近更新 更多