정수의 곱셈을 빨리하기 위한 방법 중의 하나로

기수법으로 표현된 정수를 여러 조각으로 분할하여

덧셈이나 뺄셈 회수는 몇회 증가하는 대신, 곱셈 횟수를 몇회 감소하는

방법입니다. 곱셈이 덧셈이나 뺄셈 보다는 시간이 많이 걸린다는

전제 하에 카라츄바 곱셈(Karatsuba multiplication)을 적용하면

시간복잡도 O(N**2) 의 계산 과정을 을 약 시간복잡도 O(N*&1.5)의 계산 과정으로

줄일 수 있습니다.  (여기서 N은 기수법으로 표현된 정수의 분할 개수입니다.)

예를 들어  두 자리 십진법 수 23과 45의 곱셈 23*45을 생각해 봅니다.

(이 경우 N = 2 입니다.)

 

                  2  3
          x )     4  5
            -----------
                  1  5
               1  0
               1  2
               8
            -----------
            1  0  3  5

 

위의 곱셈표에서 보듯이,

   곱셈은 3*5 = 15, 2*5 = 10, 3*4 = 12, 2*4 = 8 로 모두 4회입니다.

   덧셈은 15 + 10 + 12 + 8 로 모두 3회입니다.

그러므로.   곱셈 회수 + 덧셈 회수 = 4(회) + 3(회) = 7(회) 입니다.

 

덧셈이나 뺄셈을 한 후에 곱셈을 할 때는 분배법칙(혹은 배분법칙)

    (a + b)*(c + d) = a*c + b*d + a*d + b*c = (a*c + b*d) + (a*d + b*c)

이 성립하므로 a 에는 2를, b 에는 3을, c에는 4를, d에는 5를 각각 대입하면 

    (2 + 3)*(4 + 5) = 2*4 + 3*5 + 2*5 + 3*4 = (2*4 + 3*5) + (2*5 + 3*4)

 

앞에서 했던 계산 중에 2*5 = 10, 3*4 = 12 은 곱셈이 2회인데,

이 계산을 (2 + 3)*(4 + 5) = (2*4 + 3*5) + (2*5 + 3*4)

즉, 2*5 + 3*4  = (2 + 3)*(4 + 5) - (2*4 + 3*5)  임을 이용하면 곱셈을 1회 줄일 수 있습니다. (덧셈과 뺄셈 회수는 조금 불어닙니다.)

왜냐 하면 2*4 = 8 (10의 자리수 곱셈)과 3*5 = 15 (1의 자리수 곱셈)은 미리 했으므로

(2 + 3)*(4 + 5) 만 계산하고 여기에 미리 계산된 (2*5 + 3*4) 을 뺄셈하면 2*5 + 3*4 을

구 할 수 있습니다.

(2 + 3)*(4 + 5) -  (2*4 + 3*5) = 5*9 - (8 + 15) = 45 - 23 = 22

이 계산에는 덧셈 1회, 뺄셈 1회, 곱셈 1회입니다.

 

                  2  3
          x )     4  5
            -----------
               8  1  5
               2  2          = (2 + 3)*(4 + 5) - (8 + 15) = 45 - 23 = 22
            -----------
            1  0  3  5

 

위의 곱셈표에서 보듯이,

   곱셈은 2*4 = 8, 3*5 = 15, (2 + 3)*(4 + 5) = 45 로 모두 3회입니다.

   덧셈은 2 + 3 = 5, 4 + 5 = 9, 8 + 15 = 23 으로 모두 3회입니다.

   뺄셈은 45 - (8 + 15) 로 1회,

  그리고  815 + 220 에 덧셈 1회 입니다.

  그러므로 덧셈과 뺄셈은 총 5회, 곱셈은 3회가 됩니다.

그러므로.   곱셈 회수 + 덧셈과 뺄셈 회수 = 3(회) + 5(회) = 8(회) 입니다.

 

위의 예에서는 두 자리 십진법 수의 곱셈을 보여주었는데,

이 카라츄바 곱셈 방법은 N자리 r진법  수의 곱셈에도 적용할 수 있습니다.

 예를 들어, 4자리 16진법수 곱셈  0xCAFE * 0xABBA 에도 적용할 수 있습니다.

 

                  C  A  F  E
          x )     A  B  B  A
            ----------------

 

Posted by Scripter
,

Small BASIC은 Microsoft에서 제작 배포하는 BASIC 언어 인터프리터로서

편집기가 내장되어 있으며, 그래픽 기능도 있으며,  Dot NET 4.5 환경에서 동작합니다.

Small BASIC 홈페이지에서 다운로드하여 설치할 수 있으며, 풍부한 튜토리얼도 있습니다.

 

Small BASIC을 설치하고, 처음 실행한 화면입니다.

 

다음의 딱 한줄 을 편집기에 쓰고

TextWindow.WriteLine("Hello World!")

파일 저장하고(파일 확장자가 sb로 저장됨),  실행 버튼 누르면 

Hello World! 가 출력된 컨솔창이 뜹니다.

아래의 몇 줄을 입력하고

Turtle.Show()
For i = 1 To 45
  Turtle.Turn(8)
  Turtle.Move(10)
EndFor

저장 버튼 누르고, 실행 버튼 누르면 아래 처럼 그래픽이 그려집니다.

 

 

Posted by Scripter
,

2차방정식  $$ ax^2 + bx + c = 0 $$

(단, $a != 0$)의 근을 구하는 공식

$$ x = \dfrac{-b \pm \sqrt{b^2 - 4ac}}{2a} $$

 

황금율(golden ratio)을 구하는 2차방정식  $$ x^2 - x - 1  = 0 $$

의 두 근은 

$$ x = \dfrac{1 \pm \sqrt{5}}{2} $$

이고 이 중에 큰 근 $$ x = \dfrac{1 + \sqrt{5}}{2} = 1.618033988749895... $$

이 황금율이다.

 

 

Posted by Scripter
,