나는 최근에 Karatsuba 곱셈을 배웠습니다. 이 개념을 완전히 이해하기 위해 Python으로 코드를 작성하고 실행 시간을 고전적인 곱셈과 비교했습니다. 결과는 같지만 재귀 호출을 사용하고 있지만 karatsuba의 실행 시간은 여전히 가장 낮습니다. 내 접근 방식에 문제가 있습니까? 알고리즘 설계에 대해 더 많은 것을 이해할 수있는 도움을 주기도합니다.Python에서 Karatsuba 곱셈 : 실행 시간
최저
JP (가) < 10 경우
print('Karatsuba multiplication in Python')
x=raw_input("first_number=")
y=raw_input("second_number=")
print('------------------------')
x=int(x)
y=int(y)
import math
import time
def karatsuba(x,y):
x=str(x)
y=str(y)
len_x=len(x)
len_y=len(y)
if(int(len_x)==1 or int(len_y)==1):
return int(x)*int(y)
else:
B=10
exp1=int(math.ceil(len_x/2.0))
exp2=int(math.ceil(len_y/2.0))
if(exp1<exp2):
exp=exp1
else:
exp=exp2
m1=len_x-exp
m2=len_y-exp
a=karatsuba(int(x[0:m1]),int(y[0:m2]))
c=karatsuba(int(x[m1:len_x]),int(y[m2:len_y]))
b=karatsuba(int(x[0:m1])+int(x[m1:len_x]),int(y[0:m2])+int(y[m2:len_y]))-a-c
results=a*math.pow(10,2*exp) + b*math.pow(10,exp) + c
return int(results)
start_time=time.time()
ctrl = x*y
tpt=time.time() - start_time
print x,'*',y,'=',ctrl
print("--- %s seconds ---" % tpt)
start_time=time.time()
output=karatsuba(x,y)
tpt=time.time() - start_time
print 'karatsuba(',x,',',y,')=',output
print("--- %s seconds ---" % tpt)
사용한 입력과 결과는 무엇인가? 그것들을 게시 할 수 있습니까? –
무엇을 비교하고 있습니까? –