簡體   English   中英

我如何證明以下算法?

[英]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)

你完成了! 通過歸納,對於任何非負NExp(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
  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的有效位數減一並執行一兩次乘法,因此總數不會超過有效位數的兩倍。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM