【问题标题】:This algorithm's complexity is correct?这个算法的复杂度是否正确?
【发布时间】:2018-06-14 09:29:20
【问题描述】:

我不明白的算法是:

alg(m, n)
1. if m>n then
2.     return alg(m-n, n)
3. else
4.     if n>m then
5.          return alg(n, m)
6.     else
7.          return n

我认为递归公式是T(m) = T(m-n) + a,其中a是一个常数。我试着做一个替换:

T(m) = T(m-k) + a*n

假设

k=m => T(m) = T(0) + a*n => T(m) = n*a + 1 => The complexity is O(n)

如果我错了,请告诉我。谢谢!

【问题讨论】:

  • 这个算法计算两个整数的最大除数。例如,如果我考虑 m = 120 和 n = 75,则算法返回 15。m 是第一个整数,n 是第二个整数。
  • 如果 m = -1, n = 1 则递归永远不会结束。我猜你的数字是正整数,对吧?
  • 是的,我忘了说

标签: big-o asymptotic-complexity


【解决方案1】:

我在网上搜了一下,这个算法的复杂度是O(n+m)。我发布这个是为了帮助其他人。链接为:https://codility.com/media/train/10-Gcd.pdf

【讨论】:

    猜你喜欢
    • 2021-08-25
    • 1970-01-01
    • 2023-03-07
    • 1970-01-01
    • 1970-01-01
    • 2021-04-08
    • 2019-10-08
    • 2015-06-12
    相关资源
    最近更新 更多