[英]how can i prove the following algorithm?
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
一個簡單的方法是使用強歸納法。
首先,證明Exp(0)
終止並返回2^0
。
設 N 是某個任意的偶數非負數。
假設函數Exp
正確計算並為 [0, N] 中的每個n
返回2^n
。
在此假設下,證明Exp(N+1)
和Exp(N+2)
都終止並正確返回2^(N+1)
和2^(N+2)
。
你完成了! 通過歸納,對於任何非負N
, Exp(N)
正確返回2^N
。
PS:請注意,在這篇文章中, 2^N
表示“2 的 N 次方”,而不是“2 和 N 的二進制表示的按位異或”。
該程序完全適用以下重復:
P[0] = 1
n even -> P[n] -> P[n/2]²
n odd -> P[n] -> P[(n-1)/2]².2
n>0
, n/2
和(n-1)/2 < n
並且遞歸調用的參數總是減少。P[n] = 2^n
是遞歸的解。 的確,n = 0 -> 2^0 = 1
n = 2m -> 2^n = (2^m)²
n = 2m+1 -> 2^n = 2.(2^n)²
這涵蓋了所有情況。
由於每次調用都會將n
的有效位數減一並執行一兩次乘法,因此總數不會超過有效位數的兩倍。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.