나누기 및 정복 기법을 사용하여 숫자에 전원을 공급하는 프로그램을 구현했습니다 (^ n).숫자에 전원을 공급하기위한 측정 복잡성
버전 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()
,536,913 난 같은 문제의 두 버전을 구현
Q1 : 위 버전 중 어느 것이 복잡합니까? θ(lg n)
?
질문 2 : 버전 2의 복잡도가 θ(lg n)
인 경우 왜 그럴까요? 버전 2의 문제 크기가 2로 나뉘어지기는하지만 하위 문제의 수가 2이기 때문에 버전 2는 θ(nlg n)
순으로 늘어날 것입니다.
나는 내 결론을 확신하지 못합니다. 사용자가 정의한 적이 pow
라는 함수를 사용할 때 하나는 정말 복잡성이 무엇인지 말할 수
감사 버전 1에서
버전 3에 함수 square가 추가되었습니다. 중복 계산이란 무엇입니까? 고마워요 – ajmartin
우리는 버전 3에 대해 말할 수 있습니다 : T (n) = T (n/2) + θ (1), 이것은 θ (lg n)와 같습니다. (* 비용 θ (1) 가정) – ajmartin
중복 계산은 동일한 인수를 사용하여 'power'를 여러 번 호출하는 것입니다. 함수 호출의 기본 구현에 따라 메모가 찍히고 실제로 한 번만 호출되거나 여러 번 호출 될 수 있습니다 –