ضرب توم-كوك

خوارزمية Toom-Cook ، والمعروفة أحيانًا باسم Toom-3 ، سميت على اسم Andrei Toom ، الذي قدم الخوارزمية الجديدة ذات التعقيد المنخفض، و Stephen Cook ، الذي قام بتنظيف وصفها، هي خوارزمية ضرب للأعداد الصحيحة الكبيرة.

بفرض وجود عددين صحيحين كبيرين، a و b ، تقوم خوارزمية توم-كوك بتقسيم a و b إلى k أجزاء أصغر، طول كل منها l ، ثم تُجري عمليات حسابية على هذه الأجزاء. مع ازدياد قيمة k ، يمكن دمج العديد من عمليات الضرب الفرعية، مما يقلل من التعقيد الحسابي الإجمالي للخوارزمية. بعد ذلك، يمكن حساب عمليات الضرب الفرعية بشكل متكرر باستخدام ضرب توم-كوك مرة أخرى، وهكذا. على الرغم من أن مصطلحي "توم-3" و"توم-كوك" يُستخدمان أحيانًا بشكل خاطئ كمرادفين، إلا أن "توم-3" هو مجرد حالة واحدة من خوارزمية توم-كوك، حيث k = 3.

يُقلل برنامج Toom-3 عمليات الضرب من تسع إلى خمس، ويعمل فيΘ(نسجل(5)/سجل(3))Θ(ن1.46){\displaystyle \Theta (n^{\log(5)/\log(3)})\approx \Theta (n^{1.46})}بشكل عام، توم-ك{\displaystyle k}يركض فيΘ(ج(ك)نهـ){\displaystyle \Theta (c(k)n^{e})}، أينهـ=سجل(2ك-1)/سجل(ك){\displaystyle e=\log(2k-1)/\log(k)}،نهـ{\displaystyle n^{e}}هو الوقت الذي يقضيه في عمليات الضرب الجزئي، وج{\displaystyle c}هو الوقت المستغرق في عمليات الجمع والضرب بثوابت صغيرة (كنوث، ص  296). خوارزمية كاراتسوبا مكافئة لخوارزمية توم-2، حيث يُقسّم العدد إلى عددين أصغر. تُقلّل هذه الخوارزمية أربع عمليات ضرب إلى ثلاث، وبالتالي تعمل عندΘ(نسجل(3)/سجل(2))Θ(ن1.58){\displaystyle \Theta (n^{\log(3)/\log(2)})\approx \Theta (n^{1.58})}.

على الرغم من أن الأسهـ{\displaystyle e}يمكن ضبطها بشكل تعسفي بالقرب من 1 عن طريق زيادةك{\displaystyle k}ينمو الحد الثابت في الدالة بسرعة كبيرة. [ 1 ] [ 2 ] كان معدل نمو مخططات توم-كوك ذات المستويات المختلطة لا يزال مشكلة بحثية مفتوحة في عام 2005. [ 3 ] يحقق تطبيق وصفه دونالد كنوث التعقيد الزمني التاليΘ(ن22سجلنسجلن){\displaystyle \Theta (n\,2^{\sqrt {2\log n}}\log n)}[ 4 ]

بسبب تكلفتها الإضافية، فإن خوارزمية توم-كوك أبطأ من الضرب الطويل مع الأعداد الصغيرة، ولذلك تُستخدم عادةً لعمليات الضرب متوسطة الحجم، قبل خوارزمية شونهاج-ستراسن الأسرع تقاربياً (ذات التعقيد الزمني).Θ(نسجلنسجلسجلن){\displaystyle \Theta (n\log n\log \log n)}يصبح ذلك عملياً.

وصف توم هذه الخوارزمية لأول مرة في عام 1963، ونشر كوك خوارزمية محسنة (مكافئة تقاربياً) في أطروحته للدكتوراه في عام 1966. [ 5 ]

تفاصيل

يناقش هذا القسم بالتفصيل كيفية إجراء عملية ضرب كثيرات الحدود Toom- k لأي قيمة معطاة لـ k ، وهو تبسيط لوصف عملية ضرب كثيرات الحدود Toom-Cook الذي وصفه ماركو بودراتو. [ 6 ] تتكون الخوارزمية من خمس خطوات رئيسية:

  1. الانقسام
  2. تقييم
  3. الضرب النقطي
  4. الاستيفاء
  5. إعادة التركيب

في نظام تمثيل الأعداد الصحيحة الكبيرة، يُمثَّل كل عدد صحيح بسلسلة من الأرقام في الترميز الموضعي ، حيث يُحدد الأساس أو الجذر بقيمة (كبيرة عادةً) b ؛ في هذا المثال، نستخدم b  =  10000، بحيث يُقابل كل رقم مجموعة من أربعة أرقام عشرية (في نظام حاسوبي، يكون b عادةً قوة للعدد 2). لنفترض أن العددين الصحيحين المراد ضربهما هما:

م=1234567890123456789012
ن=987654321987654321098.

هذه أصغر بكثير مما تتم معالجته عادةً باستخدام Toom-Cook (عملية الضرب في المدرسة الابتدائية ستكون أسرع) ولكنها ستخدم لتوضيح الخوارزمية.

الانقسام

في Toom- k ، نريد تقسيم العوامل إلى k أجزاء.

تتمثل الخطوة الأولى في اختيار الأساس B  = b i ، بحيث يكون عدد أرقام كل من m و n في الأساس B على الأكثر k (مثلاً، 3 في العدد 3). ويُعطى اختيار نموذجي لـ i بالصيغة التالية: 

أنا=الأعلى{سجلبمك،سجلبنك}+1.{\displaystyle i=\max \left\{\left\lfloor {\frac {\left\lfloor \log _{b}m\right\rfloor }{k}}\right\rfloor ,\left\lfloor {\frac {\left\lfloor \log _{b}n\right\rfloor }{k}}\right\rfloor \right\}+1.}

في مثالنا ، سنقوم بحساب العدد 3، لذا نختار B = = 10⁸ . ثم نفصل m و n إلى أرقامهما الأساسية B : mᵢ و nᵢ .

م2=123456م1=78901234م0=56789012ن2=98765ن1=43219876ن0=54321098{\displaystyle {\begin{aligned}m_{2}&{}=123456\\m_{1}&{}=78901234\\m_{0}&{}=56789012\\n_{2}&{}=98765\\n_{1}&{}=43219876\\n_{0}&{}=54321098\end{aligned}}}

ثم نستخدم هذه الأرقام كمعاملات في كثيرات الحدود من الدرجة ( k - 1) p و q ، مع الخاصية التي تكون فيها p ( B )  = m و q ( B ) = n :   

ص(x)=م2x2+م1x+م0=123456x2+78901234x+56789012{\displaystyle p(x)=m_{2}x^{2}+m_{1}x+m_{0}=123456x^{2}+78901234x+56789012\,}
q(x)=ن2x2+ن1x+ن0=98765x2+43219876x+54321098{\displaystyle q(x)=n_{2}x^{2}+n_{1}x+n_{0}=98765x^{2}+43219876x+54321098\,}

إن الغرض من تعريف هذه كثيرات الحدود هو أنه إذا استطعنا حساب حاصل ضربها r ( x ) = p ( x ) q ( x ) ، فإن إجابتنا ستكون r ( B ) = m × n .

في حالة كون الأعداد المراد ضربها ذات أحجام مختلفة، من المفيد استخدام قيم مختلفة لـ k لكل من m و n ، والتي سنرمز لها بـ k<sub> m</sub> و k<sub> n</sub> . على سبيل المثال، تشير الخوارزمية "Toom-2.5" إلى خوارزمية Toom-Cook حيث k<sub> m</sub>  =  3 و k <sub>n</sub>  =  2. في هذه الحالة، يتم اختيار i في B  = b <sub> i </sub> عادةً كما يلي: 

أنا=الأعلى{سجلبمكم،سجلبنكن}.{\displaystyle i=\max \left\{\left\lfloor {\frac {\left\lceil \log _{b}m\right\rceil }{k_{m}}}\right\rfloor ,\left\lfloor {\frac {\left\lceil \log _{b}n\right\rceil }{k_{n}}}\right\rfloor \right\}.}

تقييم

نهج توم-كوك لحساب حاصل ضرب كثير الحدودص(x)q(x){\displaystyle p(x)q(x)}وهي من الأنواع الشائعة الاستخدام. لاحظ أن كثيرة الحدود من الدرجةد{\displaystyle d}يتم تحديده بشكل فريد بواسطةد+1{\displaystyle d+1}النقاط (على سبيل المثال، خط مستقيم - يتم تحديد متعددة الحدود من الدرجة الأولى بنقطتين). الفكرة هي التقييمص(){\displaystyle p(\cdot )}وq(){\displaystyle q(\cdot )}عند نقاط مختلفة. ثم اضرب قيمها عند هذه النقاط للحصول على نقاط على متعددة الحدود الناتجة. وأخيرًا، قم بالاستيفاء لإيجاد معاملاتها.

منذدرجة(صq)=درجة(ص)+درجة(q){\displaystyle \deg(pq)=\deg(p)+\deg(q)}سنحتاجدرجة(ص)+درجة(q)+1=كم+كن-1{\displaystyle \deg(p)+\deg(q)+1=k_{m}+k_{n}-1}نقاط لتحديد النتيجة النهائية. لنسمي هذاد{\displaystyle d}في حالة توم-3،د=5{\displaystyle d=5}ستعمل الخوارزمية بغض النظر عن النقاط المختارة (مع بعض الاستثناءات الصغيرة، انظر شرط قابلية عكس المصفوفة في الاستيفاء )، ولكن من أجل تبسيط الخوارزمية، من الأفضل اختيار قيم عددية صغيرة مثل 0 و1 و-1 و-2.

إحدى القيم النقطية غير المألوفة التي تُستخدم بكثرة هي اللانهاية، وتُكتب{\displaystyle \infty }أو1/0{\displaystyle 1/0}لتقييم متعدد الحدودص{\displaystyle p}في الواقع، تعني كلمة "عند اللانهاية" أخذ نهايةص(x)/xدرجةص{\displaystyle p(x)/x^{\deg p}}مثلx{\displaystyle x}يؤول إلى ما لا نهاية. وبالتالي،ص(){\displaystyle p(\infty )}دائمًا ما تكون قيمة معاملها ذي الدرجة الأعلى (في المثال أعلاه المعاملم2{\displaystyle m_{2}}).

في مثالنا Toom-3، سنستخدم النقاط0{\displaystyle 0}،1{\displaystyle 1}،-1{\displaystyle -1}،-2{\displaystyle -2}، و{\displaystyle \infty }تُسهّل هذه الخيارات عملية التقييم، مما ينتج عنه الصيغ التالية:

ص(0)=م0+م1(0)+م2(0)2=م0ص(1)=م0+م1(1)+م2(1)2=م0+م1+م2ص(-1)=م0+م1(-1)+م2(-1)2=م0-م1+م2ص(-2)=م0+م1(-2)+م2(-2)2=م0-2م1+4م2ص()=م2{\displaystyle {\begin{array}{lrlrlr}p(0)&=&m_{0}+m_{1}(0)+m_{2}(0)^{2}&=&m_{0}\\p(1)&=&m_{0}+m_{1}(1)+m_{2}(1)^{2}&=&m_{0}+m_{1}+m_{2}\\p(-1)&=&m_{0}+m_{1}(-1)+m_{2}(-1)^{2}&=&m_{0}-m_{1}+m_{2}\\p(-2)&=&m_{0}+m_{1}(-2)+m_{2}(-2)^{2}&=&m_{0}-2m_{1}+4m_{2}\\p(\infty )&=&m_{2}&&\end{array}}}

وبالمثل بالنسبة لـq{\displaystyle q}في مثالنا، القيم التي نحصل عليها هي:

ص(0)=م0=56789012=56789012ص(1)=م0+م1+م2=56789012+78901234+123456=135813702ص(-1)=م0-م1+م2=56789012-78901234+123456=-21988766ص(-2)=م0-2م1+4م2=56789012-2×78901234+4×123456=-100519632ص()=م2=123456=123456q(0)=ن0=54321098=54321098q(1)=ن0+ن1+ن2=54321098+43219876+98765=97639739q(-1)=ن0-ن1+ن2=54321098-43219876+98765=11199987q(-2)=ن0-2ن1+4ن2=54321098-2×43219876+4×98765=-31723594q()=ن2=98765=98765{\displaystyle {\begin{array}{lrlrlr}p(0)&=&m_{0}&=&56789012&=&56789012\\p(1)&=&m_{0}+m_{1}+m_{2}&=&56789012+78901234+123456&=&135813702\\p(-1)&=&m_{0}-m_{1}+m_{2}&=&56789012-78901234+123456&=&-21988766\\p(-2)&=&m_{0}-2m_{1}+4m_{2}&=&56789012-2\times 78901234+4\times 123456&=&-100519632\\p(\infty )&=&m_{2}&=&123456&=&123456\\[4pt]q(0)&=&n_{0}&=&54321098&=&54321098\\q(1)&=&n_{0}+n_{1}+n_{2}&=&54321098+43219876+98765&=&97639739\\q(-1)&=&n_{0}-n_{1}+n_{2}&=&54321098-43219876+98765&=&11199987\\q(-2)&=&n_{0}-2n_{1}+4n_{2}&=&54321098-2\times 43219876+4\times 98765&=&-31723594\\q(\infty )&=&n_{2}&=&98765&=&98765\end{array}}}

كما هو موضح، قد تكون هذه القيم سالبة.

لغرض التوضيح لاحقاً، سيكون من المفيد النظر إلى عملية التقييم هذه على أنها عملية ضرب مصفوفة في متجه، حيث يحتوي كل صف من المصفوفة على قوى إحدى نقاط التقييم، ويحتوي المتجه على معاملات متعددة الحدود:

(ص(0)ص(1)ص(-1)ص(-2)ص())=(000102101112(-1)0(-1)1(-1)2(-2)0(-2)1(-2)2001)(م0م1م2)=(1001111-111-24001)(م0م1م2).{\displaystyle \left({\begin{matrix}p(0)\\p(1)\\p(-1)\\p(-2)\\p(\infty )\end{matrix}}\right)=\left({\begin{matrix}0^{0}&0^{1}&0^{2}\\1^{0}&1^{1}&1^{2}\\(-1)^{0}&(-1)^{1}&(-1)^{2}\\(-2)^{0}&(-2)^{1}&(-2)^{2}\\0&0&1\end{matrix}}\right)\left({\begin{matrix}m_{0}\\m_{1}\\m_{2}\end{matrix}}\right)=\left({\begin{matrix}1&0&0\\1&1&1\\1&-1&1\\1&-2&4\\0&0&1\end{matrix}}\right)\left({\begin{matrix}m_{0}\\m_{1}\\m_{2}\end{matrix}}\right).}

أبعاد المصفوفة هي d × k × m لـ p و d × k × n لـ q . صف اللانهاية يكون دائمًا أصفارًا باستثناء 1 في العمود الأخير.

تقييم أسرع

يمكن الحصول على التقييم متعدد النقاط بشكل أسرع من الصيغ المذكورة أعلاه. ويمكن تقليل عدد العمليات الأساسية (الجمع/الطرح). التسلسل الذي قدمه بودراتو [ 6 ] لـ Toom-3، والذي تم تنفيذه هنا على المعامل الأول (كثير الحدود p ) للمثال قيد التشغيل، هو التالي:

ص0م0+م2=56789012+123456=56912468ص(0)=م0=56789012=56789012ص(1)=ص0+م1=56912468+78901234=135813702ص(-1)=ص0-م1=56912468-78901234=-21988766ص(-2)=(ص(-1)+م2)×2-م0=(-21988766+123456)×2-56789012=-100519632ص()=م2=123456=123456.{\displaystyle {\begin{array}{l c l c l c r}p_{0}&\leftarrow &m_{0}+m_{2}&=&56789012+123456&=&56912468\\p(0)&=&m_{0}&=&56789012&=&56789012\\p(1)&=&p_{0}+m_{1}&=&56912468+78901234&=&135813702\\p(-1)&=&p_{0}-m_{1}&=&56912468-78901234&=&-21988766\\p(-2)&=&(p(-1)+m_{2})\times 2-m_{0}&=&(-21988766+123456)\times 2-56789012&=&-100519632\\p(\infty )&=&m_{2}&=&123456&=&123456.\end{array}}}

تتطلب هذه المتتالية خمس عمليات جمع/طرح، أي أقل بواحدة من التقييم المباشر. علاوة على ذلك، فإن الضرب في4{\displaystyle 4}في حسابص(-2){\displaystyle p(-2)}تم إنقاذه.

الضرب النقطي

بخلاف ضرب كثيرات الحدودص(){\displaystyle p(\cdot )}وq(){\displaystyle q(\cdot )}، بضرب القيم المقدرةص(أ){\displaystyle p(a)}وq(أ){\displaystyle q(a)}تتضمن هذه العملية ضرب الأعداد الصحيحة فقط ، وهي حالة مصغرة من المسألة الأصلية. نستدعي إجراء الضرب بشكل متكرر لضرب كل زوج من النقاط المحسوبة. في التطبيقات العملية، عندما تصبح المعاملات أصغر، ستتحول الخوارزمية إلى الضرب الطويل التقليدي . إذا كان r هو متعدد الحدود الناتج، ففي مثالنا لدينا:

ر(0)=ص(0)q(0)=56789012×54321098=3084841486175176ر(1)=ص(1)q(1)=135813702×97639739=13260814415903778ر(-1)=ص(-1)q(-1)=-21988766×11199987=-246273893346042ر(-2)=ص(-2)q(-2)=-100519632×-31723594=3188843994597408ر()=ص()q()=123456×98765=12193131840.{\displaystyle {\begin{array}{l c l c l c r}r(0)&=&p(0)\,q(0)&=&56789012\times 54321098&=&3084841486175176\\r(1)&=&p(1)\,q(1)&=&135813702\times 97639739&=&13260814415903778\\r(-1)&=&p(-1)\,q(-1)&=&-21988766\times 11199987&=&-246273893346042\\r(-2)&=&p(-2)\,q(-2)&=&-100519632\times -31723594&=&3188843994597408\\r(\infty )&=&p(\infty )\,q(\infty )&=&123456\times 98765&=&12193131840.\end{array}}}

كما هو موضح، يمكن أن تكون هذه القيم سالبة أيضًا. بالنسبة للأعداد الكبيرة بما يكفي، تُعد هذه الخطوة الأكثر تكلفة، وهي الخطوة الوحيدة التي لا تتناسب خطيًا مع أحجامم{\displaystyle m}ون{\displaystyle n}.

الاستيفاء

هذه هي الخطوة الأكثر تعقيدًا، وهي عكس خطوة التقييم: بالنظر إلىد{\displaystyle d}نقاط على متعددة الحدود المنتجةر(){\displaystyle r(\cdot )}، نحتاج إلى تحديد معاملاتها. بعبارة أخرى، نريد حل معادلة المصفوفة هذه لإيجاد المتجه الموجود على الجانب الأيمن:

(ر(0)ر(1)ر(-1)ر(-2)ر())=(00010203041011121314(-1)0(-1)1(-1)2(-1)3(-1)4(-2)0(-2)1(-2)2(-2)3(-2)400001)(ر0ر1ر2ر3ر4)=(10000111111-11-111-24-81600001)(ر0ر1ر2ر3ر4).{\displaystyle {\begin{aligned}\left({\begin{matrix}r(0)\\r(1)\\r(-1)\\r(-2)\\r(\infty )\end{matrix}}\right)&{}=\left({\begin{matrix}0^{0}&0^{1}&0^{2}&0^{3}&0^{4}\\1^{0}&1^{1}&1^{2}&1^{3}&1^{4}\\(-1)^{0}&(-1)^{1}&(-1)^{2}&(-1)^{3}&(-1)^{4}\\(-2)^{0}&(-2)^{1}&(-2)^{2}&(-2)^{3}&(-2)^{4}\\0&0&0&0&1\end{matrix}}\right)\left({\begin{matrix}r_{0}\\r_{1}\\r_{2}\\r_{3}\\r_{4}\end{matrix}}\right)\\&{}=\left({\begin{matrix}1&0&0&0&0\\1&1&1&1&1\\1&-1&1&-1&1\\1&-2&4&-8&16\\0&0&0&0&1\end{matrix}}\right)\left({\begin{matrix}r_{0}\\r_{1}\\r_{2}\\r_{3}\\r_{4}\end{matrix}}\right).\end{aligned}}}

يتم إنشاء هذه المصفوفة بنفس طريقة إنشاء المصفوفة في خطوة التقييم، باستثناء أنهاد×د{\displaystyle d\times d}يمكننا حل هذه المعادلة باستخدام تقنية مثل طريقة الحذف الغاوسي ، لكنها مكلفة للغاية. بدلاً من ذلك، نستفيد من حقيقة أن هذه المصفوفة قابلة للعكس، شريطة اختيار نقاط التقييم بشكل مناسب (انظر أيضًا مصفوفة فاندرموند )، وبالتالي:

(ر0ر1ر2ر3ر4)=(10000111111-11-111-24-81600001)-1(ر(0)ر(1)ر(-1)ر(-2)ر())=(100001213-116-2-112120-1-121612-16200001)(ر(0)ر(1)ر(-1)ر(-2)ر()).{\displaystyle {\begin{aligned}\left({\begin{matrix}r_{0}\\r_{1}\\r_{2}\\r_{3}\\r_{4}\end{matrix}}\right)&{}=\left({\begin{matrix}1&0&0&0&0\\1&1&1&1&1\\1&-1&1&-1&1\\1&-2&4&-8&16\\0&0&0&0&1\end{matrix}}\right)^{-1}\left({\begin{matrix}r(0)\\r(1)\\r(-1)\\r(-2)\\r(\infty )\end{matrix}}\right)\\&{}=\left({\begin{matrix}1&0&0&0&0\\{\tfrac {1}{2}}&{\tfrac {1}{3}}&-1&{\tfrac {1}{6}}&-2\\-1&{\tfrac {1}{2}}&{\tfrac {1}{2}}&0&-1\\-{\tfrac {1}{2}}&{\tfrac {1}{6}}&{\tfrac {1}{2}}&-{\tfrac {1}{6}}&2\\0&0&0&0&1\end{matrix}}\right)\left({\begin{matrix}r(0)\\r(1)\\r(-1)\\r(-2)\\r(\infty )\end{matrix}}\right).\end{aligned}}}

كل ما تبقى هو حساب حاصل ضرب المصفوفة في المتجه. على الرغم من أن المصفوفة تحتوي على كسور، فإن المعاملات الناتجة ستكون أعدادًا صحيحة ، لذا يمكن إجراء كل ذلك باستخدام العمليات الحسابية للأعداد الصحيحة، أي الجمع والطرح والضرب/القسمة على ثوابت صغيرة. يتمثل أحد تحديات التصميم الصعبة في Toom-Cook في إيجاد تسلسل فعال للعمليات لحساب هذا الناتج؛ أحد التسلسلات التي قدمها بودراتو [ 6 ] لـ Toom-3 هو التالي، والذي تم تنفيذه هنا على المثال قيد التشغيل:

ر0ر(0)=3084841486175176ر4ر()=12193131840ر3(ر(-2)-ر(1))/3=(3188843994597408-13260814415903778)/3=-3357323473768790ر1(ر(1)-ر(-1))/2=(13260814415903778-(-246273893346042))/2=6753544154624910ر2ر(-1)-ر(0)=-246273893346042-3084841486175176=-3331115379521218ر3(ر2-ر3)/2+2ر()=(-3331115379521218-(-3357323473768790))/2+2×12193131840=13128433387466ر2ر2+ر1-ر4=-3331115379521218+6753544154624910-12193131840=3422416581971852ر1ر1-ر3=6753544154624910-13128433387466=6740415721237444{\displaystyle {\begin{array}{l c l c r}r_{0}&\leftarrow &r(0)&=&3084841486175176\\r_{4}&\leftarrow &r(\infty )&=&12193131840\\r_{3}&\leftarrow &(r(-2)-r(1))/3&=&(3188843994597408-13260814415903778)/3\\&&&=&-3357323473768790\\r_{1}&\leftarrow &(r(1)-r(-1))/2&=&(13260814415903778-(-246273893346042))/2\\&&&=&6753544154624910\\r_{2}&\leftarrow &r(-1)-r(0)&=&-246273893346042-3084841486175176\\&&&=&-3331115379521218\\r_{3}&\leftarrow &(r_{2}-r_{3})/2+2r(\infty )&=&(-3331115379521218-(-3357323473768790))/2+2\times 12193131840\\&&&=&13128433387466\\r_{2}&\leftarrow &r_{2}+r_{1}-r_{4}&=&-3331115379521218+6753544154624910-12193131840\\&&&=&3422416581971852\\r_{1}&\leftarrow &r_{1}-r_{3}&=&6753544154624910-13128433387466\\&&&=&6740415721237444\end{array}}}

نعرف الآن متعددة الحدود الخاصة بالمنتجر{\displaystyle r}:

ر(x)=3084841486175176+6740415721237444x+3422416581971852x2+13128433387466x3+12193131840x4{\displaystyle {\begin{array}{rrrl}r(x)=&&3084841486175176&\\&+&6740415721237444&\!\!\!\!x\\&+&3422416581971852&\!\!\!\!x^{2}\\&+&13128433387466&\!\!\!\!x^{3}\\&+&12193131840&\!\!\!\!x^{4}\end{array}}}

لو كنا نستخدم مختلفًاكم،كن{\displaystyle k_{m},k_{n}}، أو نقاط التقييم، ستتغير المصفوفة وبالتالي استراتيجية الاستيفاء لدينا؛ لكنها لا تعتمد على المدخلات وبالتالي يمكن ترميزها بشكل ثابت لأي مجموعة معينة من المعلمات.

إعادة التركيب

أخيرًا، نقوم بحساب قيمة r(B) للحصول على الإجابة النهائية. هذا أمرٌ بسيط لأن B هي قوة من قوى وبالتالي فإن عمليات الضرب في قوى B هي جميعها إزاحات بعدد صحيح من الأرقام في النظام العددي ذي الأساس b . في المثال المذكور، b = 10⁴ و B = = 10⁸ .

3084841486175176
6740415721237444
3422416581971852
13128433387466
+12193131840

1219326312467611632493760095208585886175176

وهذا في الواقع ناتج ضرب 1234567890123456789012 و 987654321987654321098.

الانقسام غير المتماثل

تعتمد خطوة الاستيفاء على درجة متعددة الحدود الناتجة، وهي مجموع درجات متعددات حدود العوامل، وليس على الدرجات الفردية. بينما يقسم برنامج Toom-3 الأساسي كل عامل إلى 3 أجزاء ( متعددات حدود تربيعية )، إذا اختلفت العوامل في الحجم، فقد يكون من المفيد تقسيم أحدها إلى جزأين ( متعددة حدود خطية ) والآخر إلى 4 أجزاء ( متعددة حدود تكعيبية ) بمعاملات ذات أحجام أكثر توازنًا. عندئذٍ، يمكن لخطوة الاستيفاء نفسها أن تُنتج متعددة حدود ناتجة من الدرجة الرابعة.

بالنسبة لـ Toom-3، هذا هو التقسيم البديل الوحيد المثير للاهتمام ( الحالة المنحطة المتمثلة في تقسيم أي من العاملين إلى جزء واحد فقط لا توفر أي توفير في الوقت)، ولكن Toom-Cook ذو الدرجة الأعلى يسمح بإمكانيات إضافية.

إضافةً إلى حالات التقسيم المتساوي، توجد حالات أنصاف أعداد صحيحة ، وهي حالات غير متناظرة دائمًا؛ حيث يكون العدد الإجمالي للأجزاء فرديًا، ودرجة متعددة الحدود الناتجة زوجية. على سبيل المثال، يقسم برنامج Toom-2.5 أحد العوامل إلى جزأين والآخر إلى ثلاثة أجزاء، بينما يستطيع برنامج Toom-3.5 تقسيم العوامل إلى 2+5 أو 3+4.

مصفوفات الاستيفاء لمختلف قيم k

نقدم هنا مصفوفات الاستيفاء الشائعة لبعض القيم الصغيرة الشائعة المختلفة لـ k m و k n .

توم-1

بتطبيق التعريف رسميًا، يمكننا اعتبار Toom-1 ( k<sub> m</sub> = k <sub>n</sub> = 1). لا ينتج عن هذا خوارزمية ضرب، بل خوارزمية تكرارية لا تتوقف أبدًا، إذ تُختزل كل حالة إدخال إلى استدعاء تكراري لنفس الحالة. تتطلب الخوارزمية نقطة تقييم واحدة، قيمتها غير مهمة، لأنها تُستخدم فقط لتقييم كثيرات الحدود الثابتة. بالتالي، فإن مصفوفة الاستيفاء هي مصفوفة الوحدة.

(1)-1=(1).{\displaystyle \left({\begin{matrix}1\end{matrix}}\right)^{-1}=\left({\begin{matrix}1\end{matrix}}\right).}

Toom-1.5

لا تزال خوارزمية Toom-1.5 ( حيث k <sub>m</sub> = 2 و k <sub>n</sub> = 1) خوارزميةً مُنحلة: فهي تُقلل أحد المدخلات بشكل متكرر عن طريق خفض حجمه إلى النصف، بينما تُبقي المدخل الآخر دون تغيير، وبالتالي لا يُمكننا تحويلها إلى خوارزمية ضرب إلا إذا وفرنا خوارزمية ضرب 1 × n كحالة أساسية (بينما تُختزل خوارزمية Toom-Cook الحقيقية إلى حالات أساسية ذات حجم ثابت). تتطلب هذه الخوارزمية نقطتي تقييم، تم اختيارهما هنا 0 و ∞. مصفوفة الاستيفاء الخاصة بها هي مصفوفة الوحدة.

(1001)-1=(1001).{\displaystyle \left({\begin{matrix}1&0\\0&1\end{matrix}}\right)^{-1}=\left({\begin{matrix}1&0\\0&1\end{matrix}}\right).}

تُعتبر الخوارزمية مكافئة بشكل أساسي لشكل من أشكال الضرب الطويل: حيث يتم ضرب كلا معاملي أحد العوامل في المعامل الوحيد للعامل الآخر.

توم-2

تتطلب عملية Toom-2 ( حيث k <sub>m</sub> = 2 و k<sub> n</sub> = 2) ثلاث نقاط تقييم، تم اختيارها هنا لتكون 0 و 1 و ∞. وهي مماثلة لعملية ضرب كاراتسوبا ، مع مصفوفة استيفاء كالتالي:

(100111001)-1=(100-11-1001).{\displaystyle \left({\begin{matrix}1&0&0\\1&1&1\\0&0&1\end{matrix}}\right)^{-1}=\left({\begin{matrix}1&0&0\\-1&1&-1\\0&0&1\end{matrix}}\right).}

توم-2.5

تتطلب المعادلة Toom-2.5 ( حيث k<sub> m</sub> = 3 و k<sub> n</sub> = 2) أربع نقاط تقييم، تم اختيارها هنا لتكون 0 و 1 و -1 و ∞. وبالتالي، فإن مصفوفة الاستيفاء الخاصة بها هي:

(100011111-11-10001)-1=(1000012-12-1-1121200001).{\displaystyle \left({\begin{matrix}1&0&0&0\\1&1&1&1\\1&-1&1&-1\\0&0&0&1\end{matrix}}\right)^{-1}=\left({\begin{matrix}1&0&0&0\\0&{\tfrac {1}{2}}&-{\tfrac {1}{2}}&-1\\-1&{\tfrac {1}{2}}&{\tfrac {1}{2}}&0\\0&0&0&1\end{matrix}}\right).}

ملحوظات

  1. كنوت، ص 296
  2. كراندال وبوميرانس، ص 474
  3. كراندال وبوميرانس، ص 536
  4. كنوت، ص 302
  5. النتائج الإيجابية ، الفصل الثالث من كتاب ستيفن أ. كوك: حول الحد الأدنى لوقت حساب الدوال .
  6. 1 2 3 ماركو بودراتو. نحو الضرب الأمثل لتوم-كوك لكثيرات الحدود أحادية ومتعددة المتغيرات في الخاصيتين 2 و0. في وقائع مؤتمر WAIFI'07 ، المجلد 4547 من سلسلة محاضرات علوم الحاسوب، الصفحات 116-133. 21-22 يونيو 2007. موقع المؤلف الإلكتروني

مراجع

  • عملية الضرب الثلاثي باستخدام خوارزمية توم-كوك، من وثائق مكتبة GMP: "عملية الضرب الثلاثي باستخدام خوارزمية توم" . دليل مكتبة GNU MP للحساب متعدد الدقة (الإصدار 6.3.0) . مؤسسة البرمجيات الحرة، 30 يوليو 2023 [حقوق النشر 1991، 1993-2016، 2018-2020].