【问题标题】:What is the asymptotic running time of a combination?组合的渐近运行时间是多少?
【发布时间】:2015-10-25 17:13:47
【问题描述】:

我有递归关系 T(n, k) = T(n - 1, k - 1) + T(n - 2, k - 1) + ... + T(k + 1, k - 1 )。这是从 i = 1 到 i = n - k + 1 的 T(n - i, k - 1) 的总和。手动计算结果,我注意到这形成了帕斯卡三角形 - T(n, k)然后是 (n - 1) 选择 (k - 1)。

我如何用大 O 表示法将其表示为渐近运行时间?我可以证明 T(n, k) 是 O(n!),但这并不能真正显示整个画面——如果 n 很大,但 k 也一样大怎么办?如果n = k,那么运行时间就是1。

【问题讨论】:

  • 在大 O 表示法中,(n,k) 的一个变量趋于无穷大,另一个是固定的。哪个是哪个?
  • @n.m.从技术上讲,两者都是,因为 n 和 k 都是算法的参数。 k 以 n 为界(k 不能大于 n),但随着 n 变大,k 也会变大。
  • 大 O 表示法是为一个变量的函数定义的,因为该变量趋于无穷大。您可以开发自己的 Big O 品牌,但您需要明确定义 O(f(x,y)) 等符号的含义。
  • @n.m.我发现了这个 - stackoverflow.com/questions/24643367/… - 从技术上讲,这使得这个问题重复了 - 但正如你所说,那里的答案使用 O(f(x, y))。
  • 对于多个变量,大 O 表示法有不止一种可能的概括。没有一个是普遍接受的。 One is described here。更多的是here。上一篇文章说,只有当 big-O 下的函数严格不递减时,为多个变量定义 big-O 才有意义,而choose(n,k) 不是,即使这样也需要使用一些非递减函数。使大 O 的概念保持一致的琐碎定义。

标签: algorithm big-o


【解决方案1】:

如果您将帕斯卡的三角形视为一个矩阵,并且您想找出构建该矩阵的复杂性,该矩阵的大小为n x k,那么其中的大值将是O(n*k)。显然你不能比这更好,因为这就是矩阵的大小。

我们如何得到它?对组合使用以下简化的重复:

C(n, k) = C(n - 1, k) + C(n - 1, k - 1)

仅计算单个组合具有相同的复杂性(如果使用记忆化)。

【讨论】:

  • 明确地说,我不是在生成三角形 - 我是说 T(n, k) 等于三角形上的条目。
  • @NmdMystery 那么T(n, k) 的值就是O((n - 1) choose (k - 1))
  • 好吧,我对使用多个变量感到很困惑。谢谢!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-01-28
  • 1970-01-01
相关资源
最近更新 更多