fbpx
วิกิพีเดีย

ขั้นตอนวิธีของคาราซูบา

ขั้นตอนวิธีของคาราซูบา (อังกฤษ: Karatsuba algorithm) เป็น ขั้นตอนวิธี ที่ค้นพบโดย Anatolii Alexeevitch Karatsuba ในปี ค.ศ. 1960 และตีพิมพ์ในปี ค.ศ. 1962 เป็นขั้นตอนวิธีสำหรับการคูณเลข 2 จำนวนที่มีค่ามากๆ หรือการคูณกันของพหุนามโดยใช้ขั้นตอนวิธีแบ่งแยกและเอาชนะ (Divide and conquer algorithm)

ขั้นตอนวิธีของคาราซูบาเป็นการคูณแบบเร็วโดยที่มีประสิทธิภาพเชิงเวลา (time complexity) เป็นสัญกรณ์โอใหญ่คือ O(n1.58) มีความเร็วกว่าขั้นตอนวิธีการคูณแบบธรรมดา (grade-school multiplication) ซึ่งมีประสิทธิภาพเชิงเวลาเป็น O(n2)

กระบวนการของขั้นตอนวิธีของคาราซูบาและการวิเคราะห์ประสิทธิภาพเชิงเวลา

การคูณ เลข 2 จำนวน x, y ที่มีขนาด n หลัก เราสามารถเขียน x, y ใหม่ โดยใช้ จำนวน m โดยที่ m<n โดยที่เราจะเลือก m = n/2

x = x110m+x0
y = y110m+y0

ดังนั้น x คูณ y จะได้เป็น

xy = ( x110m+x0) (y110m+y0)
xy = x1 y1102m+ (x1 y0+ x0 y1)10m+ x0 y0

กำหนดให้

A = x1y1
B = x0y0
C = (x1+x0)(y1+y0)

จะได้

xy = A102m+(C-A-B) 10m+B
ซึ่งจะเห็นได้ว่าเกิดการคูณกันแค่ 3 ครั้ง คือ A, B, C เกิดการบวกกัน 4 ครั้ง ลบกัน 2 ครั้ง โดยที่การบวก และการลบใช้เวลาคงตัวโดยใช้เวลาเป็นเชิงเส้น
ดังนั้น ประสิทธิภาพเชิงเวลา ของขั้นตอนวิธีของคาราซูบา โดยที่ n เป็นจำนวนหลักคือ
T (n) = 3T (n/2) +O (n)
โดยที่ 3T (n/2) มาจาก 3 คือการที่เราแบ่งแล้วเกิดการคูณกัน 3 ที n/2 มาจากที่เราแบ่งจำนวนหลักของข้อมูลเป็นครึ่งหนึ่ง
จาก T (n) = 3T (n/2) +O (n) เราสามารถใช้ master theorem ลดรูปจนได้ T (n) = O (nlog 3/log 2) ≈ O (n1.58)

รหัสเทียม

//input x, y (n digit integers) //output x*y  def karatsuba(x, y) {  if(n = 1)  return x * y  else  //แบ่ง x, y เป็นครึ่งๆ  x = x1 * 10^(n/2) + x0  y = y1 * 10^(n/2) + y0  A = karatsuba(x1,y1)  B = karatsuba(x0,y0)  C = karatsuba(x1 + x0, y1 + y0)  D = C - A - B  return A * 10^n + D * 10^(n/2) + B } 

กราฟเปรียบเทียบระหว่างการคูณธรรมดาและขั้นตอนวิธีการคูณแบบคาราซูบา

ตัวอย่าง

การคูณเลข 2 จำนวน 5678×8765

5678 = 56×102 + 78
8765 = 87×102 + 65
5678×8765 = (56×102 + 78)(87×102 + 65)
= (56×87) 104 + ((56+78)(87+65) − (56×87) − (78×65)) 102 + (78×65)
= 4872×104 + 10426×102 + 5070
= 49767670
การคูณของพหุนาม 2 จำนวน (a + bx) (c + dx)
(a + bx)(c + dx) = ac + ((a+b)(c+d) − ac − bd)x + bdx2
= ac + (ad+bc)x + bdx2

อ้างอิง

  1. http://www.mi.ras.ru/~karatsuba/index_e.html
  2. A. Karatsuba and Yu. Ofman (1962). "Multiplication of Many-Digital Numbers by Automatic Computers". Proceedings of the USSR Academy of Sciences 145: 293–294
  3. http://www.ccas.ru/personal/karatsuba/divcen.htm

แหล่งข้อมูลอื่น

  • ทดลองขั้นตอนวิธีของคาราซูบา

นตอนว, ของคาราซ, บา, งกฤษ, karatsuba, algorithm, เป, นตอนว, นพบโดย, anatolii, alexeevitch, karatsuba, ในป, 1960, และต, มพ, ในป, 1962, เป, นข, นตอนว, สำหร, บการค, ณเลข, จำนวนท, ามากๆ, หร, อการค, ณก, นของพห, นามโดยใช, นตอนว, แบ, งแยกและเอาชนะ, divide, conquer, a. khntxnwithikhxngkharasuba xngkvs Karatsuba algorithm epn khntxnwithi thikhnphbody Anatolii Alexeevitch Karatsuba 1 inpi kh s 1960 aelatiphimphinpi kh s 1962 2 epnkhntxnwithisahrbkarkhunelkh 2 canwnthimikhamak hruxkarkhunknkhxngphhunamodyichkhntxnwithiaebngaeykaelaexachna Divide and conquer algorithm khntxnwithikhxngkharasubaepnkarkhunaebberwodythimiprasiththiphaphechingewla time complexity epnsykrnoxihykhux O n1 58 mikhwamerwkwakhntxnwithikarkhunaebbthrrmda grade school multiplication sungmiprasiththiphaphechingewlaepn O n2 enuxha 1 krabwnkarkhxngkhntxnwithikhxngkharasubaaelakarwiekhraahprasiththiphaphechingewla 2 rhsethiym 3 krafepriybethiybrahwangkarkhunthrrmdaaelakhntxnwithikarkhunaebbkharasuba 4 twxyang 5 xangxing 6 aehlngkhxmulxunkrabwnkarkhxngkhntxnwithikhxngkharasubaaelakarwiekhraahprasiththiphaphechingewla aekikhkarkhun elkh 2 canwn x y thimikhnad n hlk erasamarthekhiyn x y ihm odyich canwn m odythi m lt n odythieracaeluxk m n 2 x x110m x0 dd dd dd dd y y110m y0 dd dd dd dd dngnn x khun y caidepn xy x110m x0 y110m y0 xy x1 y1102m x1 y0 x0 y1 10m x0 y0 dd dd dd dd kahndih A x1y1 B x0y0 C x1 x0 y1 y0 dd dd dd dd caid xy A102m C A B 10m B dd dd dd dd sungcaehnidwaekidkarkhunknaekh 3 khrng khux A B C ekidkarbwkkn 4 khrng lbkn 2 khrng odythikarbwk aelakarlbichewlakhngtwodyichewlaepnechingesndngnn prasiththiphaphechingewla khxngkhntxnwithikhxngkharasuba odythi n epncanwnhlkkhuxT n 3T n 2 O n dd dd dd odythi 3T n 2 macak 3 khuxkarthieraaebngaelwekidkarkhunkn 3 thi n 2 macakthieraaebngcanwnhlkkhxngkhxmulepnkhrunghnungcak T n 3T n 2 O n erasamarthich master theorem ldrupcnid T n O nlog 3 log 2 O n1 58 rhsethiym aekikh input x y n digit integers output x y def karatsuba x y if n 1 return x y else aebng x y epnkhrung x x1 10 n 2 x0 y y1 10 n 2 y0 A karatsuba x1 y1 B karatsuba x0 y0 C karatsuba x1 x0 y1 y0 D C A B return A 10 n D 10 n 2 B krafepriybethiybrahwangkarkhunthrrmdaaelakhntxnwithikarkhunaebbkharasuba aekikh twxyang aekikhkarkhunelkh 2 canwn 5678 8765 5678 56 102 78 8765 87 102 65 5678 8765 56 102 78 87 102 65 56 87 104 56 78 87 65 56 87 78 65 102 78 65 4872 104 10426 102 5070 49767670 dd dd dd dd dd dd karkhunkhxngphhunam 2 canwn 3 a bx c dx a bx c dx ac a b c d ac bd x bdx2 ac ad bc x bdx2 dd dd dd dd dd dd xangxing aekikh http www mi ras ru karatsuba index e html A Karatsuba and Yu Ofman 1962 Multiplication of Many Digital Numbers by Automatic Computers Proceedings of the USSR Academy of Sciences 145 293 294 http www ccas ru personal karatsuba divcen htm http saahiihii com images story ENUBusiness1354DOCUMENT2 pdf http ozark hendrix edu burch proj karat results htmlaehlngkhxmulxun aekikhthdlxngkhntxnwithikhxngkharasubaekhathungcak https th wikipedia org w index php title khntxnwithikhxngkharasuba amp oldid 4860753, wikipedia, วิกิ หนังสือ, หนังสือ, ห้องสมุด,

บทความ

, อ่าน, ดาวน์โหลด, ฟรี, ดาวน์โหลดฟรี, mp3, วิดีโอ, mp4, 3gp, jpg, jpeg, gif, png, รูปภาพ, เพลง, เพลง, หนัง, หนังสือ, เกม, เกม