ผลต่างระหว่างรุ่นของ "ขั้นตอนวิธีของคาราซูบา"
เนื้อหาที่ลบ เนื้อหาที่เพิ่ม
Nullzerobot (คุย | ส่วนร่วม) ล เก็บกวาด |
ล ย้อนการแก้ไขที่ 4605650 สร้างโดย Nullzerobot (พูดคุย) |
||
บรรทัด 4:
== กระบวนการของขั้นตอนวิธีของคาราซูบาและการวิเคราะห์ประสิทธิภาพเชิงเวลา<ref>http://saahiihii.com/images/story/ENUBusiness1354DOCUMENT2.pdf</ref> ==
การคูณ เลข 2 จำนวน x, y ที่มีขนาด n หลัก เราสามารถเขียน x, y ใหม่ โดยใช้ จำนวน m โดยที่ m<n โดยที่เราจะเลือก m = n/2
:::::
:::::
ดังนั้น x คูณ y จะได้เป็น
:::::
:::::
กำหนดให้
:::::
:::::
:::::
จะได้
:::::
:
:
::::
:
:
== รหัสเทียม ==
<source lang="text">
1: //input x, y (n digit integers)
2: //output x*y
3:
4: int karatsuba(int x, int y) {
5: if(n=1)
6: return x*y
7: else
8: //แบ่ง x, y เป็นครึ่งๆ
9: x = x1*10^(n/2) + x0
10: y = y1*10^(n/2) + y0
11: A = karatsuba(x1,y1)
12: B = karatsuba(x0,y0)
13: C = karatsuba(x1 + x0, y1 + y0)
14: D = C - A - B
15: return A*10^n + D*10^(n/2) + B
16: }
</source>
บรรทัด 53:
== ตัวอย่าง ==
การคูณเลข 2 จำนวน 5678×8765
::::
::::
::::
::::::: = (56×87) 10<sup>4</sup> + ((56+78)(87+65) − (56×87) − (78×65)) 10<sup>2</sup> + (78×65)
::::::: = 4872×10<sup>4</sup> + 10426×10<sup>2</sup> + 5070
::::::: = 49767670
:
::::
::::::: = ac + (ad+bc)x + bdx<sup>2</sup>
== อ้างอิง ==
|