Algorithm 如何求解该乘法算法的递推关系

Algorithm 如何求解该乘法算法的递推关系,algorithm,recursion,time-complexity,multiplication,recurrence,Algorithm,Recursion,Time Complexity,Multiplication,Recurrence,如何为函数调用自身的次数建立一个big-O上限,作为b的函数,用于以下情况: function multiply(a,b) if b = 0 then return 0 else if b is even then t := multiply(a, b/2); return t+t; else if b is odd then t := multiply(a, b-1); return a+t; 这是一个

如何为函数调用自身的次数建立一个big-O上限,作为b的函数,用于以下情况:

  function multiply(a,b)
     if b = 0 then return 0
     else if b is even then
       t := multiply(a, b/2);
       return t+t;
     else if b is odd then
       t := multiply(a, b-1);
       return a+t;

这是一个将两个整数相乘的函数。我不知道如何处理递归关系的if-else条件。我想答案是T(n)=T(n/2)+T(n-1)。对吗?

请欣赏以下两点:

  • 使用奇数输入调用
    乘法
    ,将触发对相同输入的调用减去1,即偶数。这将需要一个额外的呼叫才能达到偶数
  • 使用偶数输入调用
    multiply
    ,将触发另一个将输入减半的调用。得出的数字将是偶数或奇数,即上述点的q.v

在最坏的情况下,从一个偶数输入开始,需要两个调用才能将传递给
multiply
的输入减半。此行为与
2*O(lgN)
运行时间一致(其中
lg
是日志基数2)。这与刚才的
O(lgN)
相同,请注意以下两点:

  • 使用奇数输入调用
    乘法
    ,将触发对相同输入的调用减去1,即偶数。这将需要一个额外的呼叫才能达到偶数
  • 使用偶数输入调用
    multiply
    ,将触发另一个将输入减半的调用。得出的数字将是偶数或奇数,即上述点的q.v
在最坏的情况下,从一个偶数输入开始,需要两个调用才能将传递给
multiply
的输入减半。此行为与
2*O(lgN)
运行时间一致(其中
lg
是日志基数2)。这与刚才的
O(lgN)
相同

因此:

F(0) = 0
If Even: F(N) = F(N/2) + 1 
If Odd-Even: F(N) = F(N-1) + 1 = F((N-1)/2) + 2 <-next number is definitely even
另一种思考问题的方式是,我们知道奇偶情况的深度最多是偶偶情况的两倍。只有偶数的情况具有
LogN
深度,因此奇偶奇偶情况最多具有
2*LogN
深度

因此:

F(0) = 0
If Even: F(N) = F(N/2) + 1 
If Odd-Even: F(N) = F(N-1) + 1 = F((N-1)/2) + 2 <-next number is definitely even

另一种思考问题的方式是,我们知道奇偶情况的深度最多是偶偶情况的两倍。只有偶数的情况下有
LogN
深度,因此奇偶奇偶情况下最多有
2*LogN

深度。

但是如果b=7,它将调用乘法(a,6),然后调用乘法(a,3),然后调用乘法(a,2)。因此,调用偶数函数并不一定意味着“使用偶数输入调用将再次触发使用偶数输入的调用”statement@Ana你是对的,我改变了我的答案,但是得出了相同的结论。但是如果b=7,它将调用乘法(a,6),然后调用乘法(a,3),然后调用乘法(a,2)。因此,调用偶数函数并不一定意味着“使用偶数输入调用将再次触发使用偶数输入的调用”statement@Ana你是对的,我改变了我的答案,但得出了相同的结论+2@Ana 6不是一个奇数,当用N分析更坏的情况时,我们知道奇偶序列更坏,因此解决它是有意义的如果我们取7,那么我们得到6,然后3,然后2,然后1。所以它更像和nlogntime@Ana现在是登录时间(每2个func调用将其减半一次,假设当数字始终为偶数时有logN调用,那么我们就知道奇偶奇偶有2logN深度)。NlogN不起作用sense@Ana这是
logN
行为,因为它最多需要两个步骤才能达到另一个偶数,这将导致输入再次减半((N-1)/2)+2@Ana 6不是一个奇数,当用N来分析更坏的情况时,我们知道奇偶序列更坏,因此解决它是有意义的,如果我们取7,那么我们得到6,然后3,然后2,然后1。所以它更像和nlogntime@Ana现在是登录时间(每2个func调用将其减半一次,假设当数字始终为偶数时有logN调用,我们就知道奇偶有2logN深度).NlogN不代表sense@Ana这是
logN
行为,因为它最多需要两个步骤才能达到另一个偶数,这将导致输入再次减半。b每1次(如果b是偶数)或2次(奇数)迭代就会减半。因此,此函数最多可以执行2*log(b)。因此,log(b)是所需的上限。还请注意,此函数与非常类似。b每1次(如果b为偶数)或2次(奇数)迭代就会减半。因此,此函数最多可以执行2*log(b)。因此,log(b)是所需的上限。还请注意,此函数与。
F(N) = F((N-1)/2) + 2 = O(LogN)