微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

递归算法时间复杂度最大独立集

如何解决递归算法时间复杂度最大独立集

我有一个任务来分析和实现一个算法来找到一个图的最大独立集,我已经谈到了该算法的时间复杂度部分。我推断如下:

T(n) = T(n-1) + T(n-3) + O(n^3) + O(n^2)

我之前已经想出了一些其他类似的递归算法,但我在这个算法上遇到了好几次。我认为结果应该是 ~O(2^n)。

有人可以帮我找到解决方案吗?

编辑:我只是仔细检查了一下,解决方案应该是 O(1.8^n)。有什么办法可以解决这个问题吗?

解决方法

因为 O(n³) + O(n²) = O(n³) = O(f(n)) 其中 f(n) = n³ − 12n² + 30n − 28, 存在一些常数 γ > 0 使得我们可以高估 原始递归 T 作为具体的线性非齐次递归 T':

T'(n) = T'(n−1) + T'(n−3) + γf(n).

我们遵循通常的剧本,首先关注同质部分 (相同的循环但没有 γn³)。特征多项式是 x³ - x² − 1. 令 α 为该多项式的任意零,函数 αn 满足

αn = αn−1 + αn−3,

假设基本情况值为正, 同质部分将是 Θ(αn) 其中 α = 1.46557... 是零 最大参数。

我们还必须处理非同质部分,但事实证明并非如此 渐近地重要。根据设计,我们有 f(n) = (n−1)³ + (n−3)³ − n³, 所以让 U(n) = βαn − γn3,我们可以验证

U(n−1) + U(n−3) + γn³ = β(αn−1 + αn−3) − γ((n−1)³ + (n−3)³ − f(n)) = βαn − γn³ = U(n)

是 T′ 的解,使我们保持在同一个渐近类中。

,

如果我们绘制递归树,它将看起来像这样,为简单起见,让每个节点有 2 个子节点,这棵树的高度为 n 直到它达到了基本情况。由于它是一棵二叉树,因此节点数将为 (2^n)-1。 所以T(n) = T(n-1) + T(n-3)的复杂度是O(2^n)

enter image description here

现在整体复杂度是O(2^N) + O(n^3) + O(n^2) = O(2^N)

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。