두 정수를 곱하기위한 Karatsuba 알고리즘

곱셈을위한 분할 및 정복 접근법

Unsplash에 Antoine Dautry의 사진

우리 모두는 어렸을 때 두 숫자를 곱하는 방법을 배웠습니다. (😄)를 잊은 경우에는 두 숫자 19와 95를 곱하는 방법을 살펴 보겠습니다.

19와 95를 곱하려면 위에 표시된대로 4 (2²) 기본 연산이 필요합니다. 마찬가지로 123과 456을 곱하려면 9 (3²) 기본 연산이 필요합니다. 따라서 두 개의 n 자리 숫자가 주어지면 일반화하면이 전통적인 접근 방식에는 n² 기본 곱셈 연산이 필요합니다. 따라서이 순진한 접근 방식의 시간 복잡도는 O (n²)입니다.

이것이 두 숫자를 곱하는 유일한 방법입니까? 🤔

1960 년에 Anatoly Alexeyevich Karatsuba라는 러시아 수학자는 두 숫자를 곱하는 새로운 알고리즘을 발견했습니다. 이 알고리즘이 어떻게 작동하는지 살펴 보겠습니다.

Karatsuba 알고리즘

x = 1234 및 y = 5678 인 두 개의 4 자리 숫자 x와 y를 고려해 보겠습니다. 먼저 아래 그림과 같이 n 자리 숫자를 n / 2 자리 숫자로 나누어야합니다.

a와 c는 x와 y의 처음 n / 2 자리를 나타냅니다 . 마찬가지로 b와 d는 x와 y의 마지막 n / 2 자리를 나타냅니다.

Karatsuba 알고리즘은 4 가지 주요 단계로 구성됩니다.

마지막으로 1 단계의 출력에 10ⁿ, 4 단계의 출력에 10 ^ (n / 2)를 곱한 다음 2 단계의 출력에 둘 다 더합니다 (아래 그림 참조).

1234와 5678을 곱하면 7006652가됩니다.

그러나 이것은 어떻게 작동합니까? 🤔

이것을 분해합시다. 위에서 언급했듯이 x = 1234 및 y = 5678로 설정합니다. 또한 a = 12, b = 34, c = 56 및 d = 78을 정의했습니다.

a, b, c, d로 x와 y를 쓰면 :

이제 x와 y를 곱하면 :

1 단계에서 ac를 계산하고 2 단계에서 bd를 계산했습니다. 3 단계에서는 (a + b). (c + d) = ac + ad + bc + bd를 계산했습니다. (ad + bc)를 얻으려면 ac와 bd를 빼야합니다. 이것이 4 단계에서하는 일입니다. 요약하면

이제 이전에 수행 한 4 단계가 모두 의미가 있습니다.

Karatsuba 알고리즘의 Python 구현

#acknowledgement: https://brilliant.org/wiki/karatsuba-algorithm/
from math import ceil, floor
#math.ceil(x) Return the ceiling of x as a float, the smallest integer value greater than or equal to x.
#math.floor(x) Return the floor of x as a float, the largest integer value less than or equal to x.
def karatsuba(x,y):
#base case
if x < 10 and y < 10: # in other words, if x and y are single digits
return x*y
n = max(len(str(x)), len(str(y)))
m = ceil(n/2) #Cast n into a float because n might lie outside the representable range of integers.
x_H = floor(x / 10**m)
x_L = x % (10**m)
y_H = floor(y / 10**m)
y_L = y % (10**m)
#recursive steps
a = karatsuba(x_H,y_H)
d = karatsuba(x_L,y_L)
e = karatsuba(x_H + x_L, y_H + y_L) - a - d
return int(a*(10**(m*2)) + e*(10**m) + d)
view raw karatsuba.py hosted with ❤ by GitHub

이 구현은 재귀를 사용합니다. 1, 2, 3 단계는 21, 22, 23 행에서 수행됩니다. 마지막으로 4 단계의 출력은 25 행에서 반환됩니다. 재귀 호출에는 종료 조건이 있어야합니다. 여기서 a, b, c, d의 값이 한 자리 (0–9)가되면 재귀가 종료됩니다 (8 행과 9 행).

이 시점에서 한 가지 흥미로운 질문은 다음과 같습니다.

ac, ad, bc, bd를 계산해야합니다. ac 및 bd는 1 단계와 2 단계에서 계산됩니다. 두 개의 추가 단계에서도 ad 및 bc를 계산할 수 있습니다. 그러나 대신 (a + b). (c + d)를 곱한 다음 ac와 bd를 뺍니다. 왜? 🤔

그 이유는 재귀 호출 수를 줄이기 위해서입니다. 현재 구현에는 3 개의 재귀 호출 만 필요합니다. ad와 bc를 따로 계산하면 재귀 수는 4가됩니다. 재귀 호출 수를 최소한으로 유지하면 더 나은 성능을 얻을 수 있습니다.

Karatsuba 알고리즘이 기존 방식보다 어떻게 더 나은가요?

앞서 전통적인 접근 방식이 O (n²) 의 복잡성을 가짐을 확인했습니다. 이제 Karatsuba 알고리즘의 시간 복잡도를 파악해 보겠습니다.

n 자리 숫자 2 개가 주어지면 알고리즘은 n / 2 자리 숫자에서 세 번 반복됩니다. 따라서 복잡성은 다음과 같이 표현할 수 있습니다.

이 문제를 해결하면 시간 복잡성은 다음과 같습니다.

log₂³는 대략 1.585 <2와 같습니다. 따라서 충분히 큰 n의 경우 Karatsuba 알고리즘은 기존의 순진한 접근 방식에 비해 더 나은 성능을 발휘합니다 (실행 시간이 짧음).

기사를 즐겼기를 바랍니다 !!!

참고: https://www.youtube.com/watch?v=JCbZayFr9RE

You may like

Suggested posts

상호 운용성 데이터 -IoT : R에서 데이터를 송수신하고 Arduino를 제어하는 ​​방법

R과 Arduino (데이터 및 IoT) 간의 데이터 흐름을 통해 상호 운용성을 설정하는 방법

상호 운용성 데이터 -IoT : R에서 데이터를 송수신하고 Arduino를 제어하는 ​​방법

R과 Arduino에 대해 이야기 할 때 둘 다 문자 R을 공유한다는 것 외에 다른 공통점에 대해 이야기 할 수 있습니까? 처음부터 시작하겠습니다. 익숙하지 않은 경우 Arduino는 사용하기 쉬운 하드웨어 (Arduino 보드)와 소프트웨어 (Arduino IDE)를 기반으로하는 오픈 소스 전자 플랫폼입니다. 올바른 유형의 데이터와 데이터를 처리하고 후속 작업을 수행하기위한 일련의 지침이있는 경우이 인기있는 카드에 수행 할 작업을 지정할 수 있습니다.

JavaScript 지식 수준을 높이십시오.

JavaScript 지식 수준을 높이십시오.

실제로 JavaScript는 어떻게 작동합니까? 예, 우리가 JavaScript를 배우기 시작했을 때, 모든 호기심 많은 개발자는 잠시 후에 이것을 알고 싶어합니다. 따라서 JavaScript 이벤트 루프에는 코드 실행, 이벤트 수집 및 처리, 대기중인 하위 작업 실행을 담당하는 동시성 모델이 있습니다.

Interesting For You

Related posts

새로운 PRNG 설계

새로운 PRNG 설계

Rust는 랜드 크레이트를 위해 더 나은 비 암호화 프로그램이 필요합니다. 이것은 내가 어떻게 하나를 디자인했는지에 대한 설명입니다.

Epsilon-Delta를 사용하여 수학에서 추상적 사고 구축

Epsilon-Delta를 사용하여 수학에서 추상적 사고 구축

눈을 감고 시간을 거슬러 올라가면, 교수가 칠판 옆에 서서 분필로 수학적 정의를 쓰는 동안 뒷줄에 앉아 슬퍼하는 대학생을 봅니다. 클릭, 클릭, 클릭 소리는 교수가 칠판에 글을 쓸 때마다 여전히 분명했습니다.

수학 방정식 및 연산 시각화

수학 그래프를 사용하여 방정식의 본질을 포착하고 시각적으로 풀기

수학 방정식 및 연산 시각화

방정식의 본질에 대한 시각적 인 조사를 시작하기 전에 방정식은 관계이며 그 관계는 여러 가지 방법으로 기록 될 수 있음을 기억해야합니다. 이 기사 전체에서, 이것은 완전히 새로운 (적어도 나에게는) 사고 방식이기 때문에 오래 전에 배운 오래된 관습을 잊어 버리는 것이 중요합니다.

허구로서의 수학 : 상식적인 접근

허구로서의 수학 : 상식적인 접근

다음 에세이는 제가 플로리다 대학교에서 학부생이었을 때 2014 년에 작성되었습니다. 그것은 수학의 역사 및 / 또는 철학에 대한 저술로 수학과의 Robert Long Prize를 수상했습니다. 그 사이에 수학적 대상의 존재 론적 / 주상 론적 상태에 대한 나의 견해는 다소 진화했습니다.

MORE COOL STUFF

마블의 'Loki' 'Lends Itself'는 여러 시즌을 보내고, 프로덕션 부사장은 말합니다.

마블의 'Loki' 'Lends Itself'는 여러 시즌을 보내고, 프로덕션 부사장은 말합니다.

많은 Marvel 팬들이 'Loki'가 여러 시즌을 가질 지 궁금해하고 있으며 Marvel의 프로덕션 VP는 가능하다고 말합니다.

방탄 소년단 : 정국, RM, '버터'새 티저 사진 공개

방탄 소년단 : 정국, RM, '버터'새 티저 사진 공개

빅 히트 뮤직은 지난 5 월 11 일 RM과 방탄 소년단 정국의 개인 티저 이미지를 공유해 다가오는 싱글 '버터'를 홍보했다.

'RHOA': Wendy Williams, Bravo Take Porsha Williams의 복숭아를 Falynn Guobadia에게 줄 것을 제안

'RHOA': Wendy Williams, Bravo Take Porsha Williams의 복숭아를 Falynn Guobadia에게 줄 것을 제안

Wendy Williams는 Porsha Williams의 'RHOA'복숭아를 빼앗아 다음 시즌에 Falynn Guobadia에게 줄 것을 제안합니다.

Mike Tyson은 그의 상대 중 누구가 녹아웃하기 가장 어려웠는지 밝힙니다 — '그는 빌어 먹을 괴물'

Mike Tyson은 그의 상대 중 누구가 녹아웃하기 가장 어려웠는지 밝힙니다 — '그는 빌어 먹을 괴물'

마이크 타이슨은 그의 커리어 동안 수많은 남자들을 쓰러 뜨 렸지만 그가 그냥 내려 놓을 수 없었던 한 남자가있었습니다.

COVID-19 여부에 관계없이 많은 항구 도시에서 유람선 금지를 원합니다

COVID-19 여부에 관계없이 많은 항구 도시에서 유람선 금지를 원합니다

전 세계의 도시들은 유람선 교통을 금지하거나 제한하고 있으며 비평가들은 그로 인한 수익 손실에 도전하고 있습니다. 왜 도시는 그들이 사라지기를 원하고 모두를 행복하게 할 방법이 있습니까?

국가 염소 부족은 미국 여름을 망칠 수 있습니다

국가 염소 부족은 미국 여름을 망칠 수 있습니다

한 풀 업계 전문가가 "풀마 겟돈"이라고 부르는 것을 만들기 위해 완벽한 환경 폭풍이 결합되었습니다. 왜? 현재 미국에는 염소가 많이 부족하기 때문입니다. 수영장 시즌에 어떤 영향을 미칠까요?

메탄 배출량은 2030 년까지 절반으로 줄여야한다고 유엔 보고서는 경고했다

메탄 배출량은 2030 년까지 절반으로 줄여야한다고 유엔 보고서는 경고했다

메탄 배출량은 수년 동안 급증했습니다. 유엔이 방금 발표 한 보고서에 따르면 이는 매우 안 좋은 소식이며 기후 변화를 늦추기 위해 전체 메탄 배출량을 줄이는 것이 중요합니다.

Biden은 철도 서비스를 위해 800 억 달러를 원하지만 그만한 가치가 있습니까?

Biden은 철도 서비스를 위해 800 억 달러를 원하지만 그만한 가치가 있습니까?

Joe Biden 대통령은 미국 철도 시스템 인 Amtrak에 800 억 달러의 인프라 계획을 배정했습니다. 그러나 가장 큰 장애물은 의회와 승객을 탑승시키는 것입니다.

캐나다 달러 22,900 달러에 2001 년형 포르쉐 박스터 S에서 'RUF-It'을 선택 하시겠습니까?

캐나다 달러 22,900 달러에 2001 년형 포르쉐 박스터 S에서 'RUF-It'을 선택 하시겠습니까?

독일의 RUF는 잘 알려진 포르쉐 튜너 / 자동차 제조업체이지만 오늘날의 Nice Price 또는 No Dice Boxster S와 같은 자동차에 대한 단편적인 작업으로는 잘 알려져 있지 않습니다. 그 모호함으로 인해이 캐나다 RUF가 매끄럽게 거래 될 수 있을까요? 어제 횃불이 켜져있는 동안 갈퀴가 날카 로워지고 폭도들이 형성되었습니다.

스타 벅스의 딸기 깔때기 케이크 프라푸치노는 내가 예전에 싫어했던 모든 영광스러운 것들을 떠올리게합니다.

스타 벅스의 딸기 깔때기 케이크 프라푸치노는 내가 예전에 싫어했던 모든 영광스러운 것들을 떠올리게합니다.

나는 우리 모두가 적어도 한 번은 우리 삶에서 액화 깔때기 케이크를 마시는 것이 어떤 것인지 궁금해 한 것 같습니다. 솔직히, 때로는 내가 개인적으로 끔찍한 단단한 깔때기 케이크를 먹는 것보다 훨씬 더 매력적으로 보입니다.

건담의 자쿠는 꽤 좋은 일본 주전자를 만듭니다

건담의 자쿠는 꽤 좋은 일본 주전자를 만듭니다

빨리! 건담 메카 중에서 일본 찻 주전자를 만들기 위해 하나를 고르면 어떤 것을 고르겠습니까? Get News 보도에서 반다이는 Zaku를 선택했습니다. 이번 달부터 녹색 버전 자쿠 주전자의 선주문이 시작됩니다.

Sunkist Fruit Gems를 얼굴에 던지지 않았다면 bar mitzvah도 있었습니까?

Sunkist Fruit Gems를 얼굴에 던지지 않았다면 bar mitzvah도 있었습니까?

모든 유태인 어린이의 삶, 또는 적어도 부모가 술집이나 박쥐 미츠 바가 될 것이라고 선언 한 어린이의 삶에는 공동체 앞에 서서 외국어로 된 고대 텍스트를 읽고 삼가야하는 순간이 있습니다. 유태인은 의심하지 않는 사람들에게 원치 않는 음식을 강요하는 것으로 유명하기 때문에 유태인 문화의 많은 순간이 식용 발사체를 가진 축하 자들에 대한 공격으로 인해 찌르는 것은 불가피합니다.

Grimes는 SNL 출연 후 '공황 발작'으로 입원했다고 밝힙니다. '매우 무서운'

Grimes는 SNL 출연 후 '공황 발작'으로 입원했다고 밝힙니다. '매우 무서운'

Grimes는 남자 친구 Elon Musk의 Saturday Night Light 에피소드에서 카메오로 공황 발작으로 입원했다고 밝혔습니다.

안젤리나 졸리는 그녀가 관계 거래 중단 자의 '긴 목록'을 가지고 있다고 농담합니다 : '너무 오래 혼자 있었어요'

안젤리나 졸리는 그녀가 관계 거래 중단 자의 '긴 목록'을 가지고 있다고 농담합니다 : '너무 오래 혼자 있었어요'

안젤리나 졸리와 E! News '데일리 팝, 그녀의 새 영화'나를 소원하는 사람들 ', 싱글 인 것과 6 명의 아이들이'나를 정말 잘 돌 봐줘 '

메이크업 아티스트 다니엘 마틴, 뷰티 업계에서 더 많은 아시아 대표를보고 싶어

메이크업 아티스트 다니엘 마틴, 뷰티 업계에서 더 많은 아시아 대표를보고 싶어

메건 마클, 제시카 비엘, 미셸여와 함께 일한 다니엘 마틴이 PEOPLE과 함께 AAPI (Asian American and Pacific Islander) 유산의 달을 축하합니다.

안나 마리 텐 들러와 이혼 한 John Mulaney : 그가 수년 동안 그들의 관계에 대해 말한 것

안나 마리 텐 들러와 이혼 한 John Mulaney : 그가 수년 동안 그들의 관계에 대해 말한 것

사람들은 John Mulaney와 Anna Marie Tendler가 결혼 6 년 만에 헤어 졌다고 확인했습니다.

Languages