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

我如何证明以下算法?

如何解决我如何证明以下算法?

Exp(n)
  If n = 0
    Return 1
  End If
  
  If n%2==0
    temp = Exp(n/2)
    Return temp × temp
  Else //n is odd
    temp = Exp((n−1)/2)
    Return temp × temp × 2
  End if

我如何通过n的强归纳证明,对于所有n≥1,乘以 Exp(n)≤2 log2 n。

ps:Exp(n)= 2 ^ n

解决方法

一种简单的方法是使用strong induction

  • 首先,证明Exp(0)终止并返回2^0

  • 让N为任意甚至非负的数字。

  • 假定函数Exp正确计算并为[0,N]中的每个2^n返回n

  • 在此假设下,证明Exp(N+1)Exp(N+2)都终止并正确返回2^(N+1)2^(N+2)

您完成了!通过归纳法得出,对于任何个非负NExp(N)正确返回2^N

PS:请注意,在本文中,2^N的意思是“ N的幂的二”而不是“ 2和N的二进制表示的按位异或”。

,

该程序将完全执行以下重复操作:

P[0] = 1
n even -> P[n] -> P[n/2]²
n odd  -> P[n] -> P[(n-1)/2]².2
  1. 程序总是终止,因为对于n>0n/2(n-1)/2 < n,递归调用的参数总是减少。
  1. P[n] = 2^n是重复发生的解决方案。确实,
  • n = 0 -> 2^0 = 1
  • n = 2m -> 2^n = (2^m)²
  • n = 2m+1 -> 2^n = 2.(2^n)²

这涵盖了所有情况。

随着每次调用将n的有效位数减少1并执行一两次乘法,总数不超过有效位数的两倍。

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