การคูณของทูม-คุก

การคูณของทูม-คุก (อังกฤษ: Toom–Cook multiplication) ตั้งชื่อตามผู้คิดค้นคือ อังเดร ทูม และ สตีเฟน คุก บางครั้งอัลกอลิทึมนี้จะถูกเรียกว่า ทูม - 3 ซึ่งเป็นวิธีการ คูณเลขจำนวนเต็มขนาดใหญ่ 2 จำนวนถ้าเรามีเลขจำนวนเต็ม 2 จำนวนขนาดใหญ่ให้ชื่อว่า a {\displaystyle a} กับ b {\displaystyle b} และทั้งสองค่านี้จะถูกแบ่งเป็นส่วนย่อยๆจำนวน k {\displaystyle k} ส่วน และความยาว l {\displaystyle l} โดยอัลกอลิทึมของ ทูม - 3 เสนอว่าให้แบ่งจำนวนเหล่านี้เป็นส่วนย่อยจำนวน 3 ส่วน ( k = 3 ) {\displaystyle (k=3)} เพื่อให้ความซับซ้อนของวิธีนี้ลดลง แต่ในความจริงแล้วเราสามารถที่จะแบ่งจำนวนนี้ได้มากกว่า 3 ส่วน แต่ความซับซ้อนของอัลกอลิทึมก็จะเพิ่มขึ้นเช่นกันอัลกอลิทึมทูม - 3 นี้ จะช่วยลดการคูณเลขจากการคูณเลขแบบปกติจำนวน 9 ครั้งเหลือเพียง 5 ครั้งเท่านั้น ทำให้เวลาลดลงจาก Θ ( n log ⁡ ( 9 ) log ⁡ ( 3 ) ) {\displaystyle \Theta (n^{\frac {\log(9)}{\log(3)}})} มีค่าประมาณ Θ ( n 2 ) {\displaystyle \Theta (n^{2})} เหลือเพียง Θ ( n log ⁡ ( 5 ) log ⁡ ( 3 ) ) {\displaystyle \Theta (n^{\frac {\log(5)}{\log(3)}})} มีค่าประมาณ Θ ( n 1.465 ) {\displaystyle \Theta (n^{1.465})} ซึ่งกระบวนการนี้หาได้จากวิธีการคำนวณ ทูม - k คือ Θ ( c ( k ) n e ) {\displaystyle \Theta (c(k)n^{e})} เมื่อ e = log ⁡ ( 2 k − 1 ) log ⁡ ( k ) {\displaystyle e={\frac {\log(2k-1)}{\log(k)}}} โดยส่วนของ n e {\displaystyle n^{e}} คือเวลาของการคูณส่วนย่อยหรือส่วนของอัลกอลิทึมของทูม และ c ( k ) {\displaystyle c(k)} คือเวลาที่ใช้ไปกับการคูณจำนวนขนาดเล็กย่อยๆซึ่งเป็นกระบวนการในการทำอัลกอลิทึมนี้นั่นเอง ซึ่งหากเราใช้ ทูม - 3 แล้วจะได้ e = log ⁡ ( 2 × 3 − 1 ) log ⁡ ( 3 ) {\displaystyle e={\frac {\log(2\times 3-1)}{\log(3)}}} และ c ( 3 ) = 1 {\displaystyle c(3)=1} นั่นก็คือ Θ ( n log ⁡ ( 5 ) log ⁡ ( 3 ) ) {\displaystyle \Theta (n^{\frac {\log(5)}{\log(3)}})} หากเราสนใจอัลกอลิทึมของ คารัทซูบา คือกรณีพิเศษของทูมอัลกอลิทึม ที่แบ่งจำนวนเป็น 2 ส่วน ( k = 2 ) {\displaystyle (k=2)} นั่นเอง จะทำให้ใช้เวลาเท่ากับ Θ ( n log ⁡ ( 3 ) log ⁡ ( 2 ) ) {\displaystyle \Theta (n^{\frac {\log(3)}{\log(2)}})} ซึ่งมีค่าประมาณ Θ ( n 1.585 ) {\displaystyle \Theta (n1.585)} และถ้าเราสนใจการคูณแบบปกติทั่วไป คือกรณีของ ทูม - 1 โดยเสียเวลาเท่ากับ Θ ( n 2 ) {\displaystyle \Theta (n2)} จะสังเกตได้ว่าถ้าเราเพิ่ม k {\displaystyle k} ไปเรื่อยๆจะสามารถทำให้ค่า e {\displaystyle e} เข้าใกล้ 1 ได้ซึ่งจะเป็นเวลาในอุดมคติมาก คือ Θ ( n ) {\displaystyle \Theta (n)} แต่ในความจริงแล้วมันจะทำให้ส่วนของค่า c ( k ) {\displaystyle c(k)} เพิ่มขึ้นจากที่เดิมเป็น 1 นั่นเอง จากข้อจำกัดนี้ทำให้ เราแบ่งเลขได้เพียงไม่กี่ส่วนเท่านั้นการนำอัลกอลิทึมนี้ถูกจำกัดให้ใช้กับเลขนาดกลาง -ใหญ่เพราะถ้าเราไปใช้กับเลขนาดเล็กจะใช้เวลามากกว่าการคูณแบบปกติ และอัลกอลิทึมนี้ถูกแทนที่ด้วยอัลกอลิทึมที่เร็วกว่านั่นคือ สตราเซน อัลกอลิทึม นั่นเองอังเดร ทูมได้เผยแพร่อัลกอลิทึมนี้ในปี 1963 หลังจากนั้น สตีเฟน คุก ได้มาปรับปรุงเพิ่มเติมในปี 1966[1]

ใกล้เคียง