分割統治法を使用して数値 (a^n) を累乗するプログラムを実装しました。私は同じ問題の2つのバージョンを実装しました:
バージョン 1:
def input_params():
a=input('Input \'a\' & \'n\' for a^n:')
n=input('')
result=power(a,n)
print (result)
def power(a,n):
if n<=1:
return a
elif n%2==0:
return pow(power(a,n/2),2)
else:
return pow(power(a,(n-1)/2),2)*a
if __name__ == "__main__":
input_params()
バージョン 2:
def input_params():
a=input('Input \'a\' & \'n\' for a^n:')
n=input('')
result=power(a,n)
print (result)
def power(a,n):
if n<=1:
return a
elif n%2==0:
return power(a,n/2)*power(a,n/2)
else:
return power(a,(n-1)/2)*power(a,(n-1)/2)*a
if __name__ == "__main__":
input_params()
バージョン 3:
def input_params():
a=input('Input \'a\' & \'n\' for a^n:')
n=input('')
result=power(a,n)
print (result)
def power(a,n):
if n<=1:
return a
elif n%2==0:
return square(power(a,n/2))
else:
return square(power(a,(n-1)/2))*a
def square(num):
return num*num
if __name__ == "__main__":
input_params()
Q1: 上記のバージョンのどれが の複雑さを持っていθ(lg n)
ますか?
Q2: バージョン 2 の複雑さが の場合θ(lg n)
、なぜですか? バージョン2の問題サイズが2分割されていますが、サブ問題の数も2なので、バージョン2は の順で大きくなる気がしθ(nlg n)
ます。
私の結論についてはよくわかりません。
ありがとう