خوارزمية ستراسن

في الجبر الخطي ، تُعد خوارزمية ستراسن ، التي سُميت نسبةً إلى فولكر ستراسن ، خوارزمية لضرب المصفوفات . وهي أسرع من خوارزمية ضرب المصفوفات القياسية للمصفوفات الكبيرة، مع تعقيد تقاربي أفضل .يا(نسجل27){\displaystyle O(n^{\log _{2}7})}عكسيا(ن3){\displaystyle O(n^{3})}على الرغم من أن الخوارزمية البسيطة غالبًا ما تكون أفضل للمصفوفات الصغيرة، إلا أن خوارزمية ستراسن أبطأ من أسرع الخوارزميات المعروفة للمصفوفات الكبيرة جدًا، ولكن هذه الخوارزميات الضخمة غير مجدية عمليًا، لأنها أبطأ بكثير للمصفوفات ذات الحجم العملي. أما بالنسبة للمصفوفات الصغيرة، فتوجد خوارزميات أسرع.

تعمل خوارزمية ستراسن مع أي حلقة ، مثل الجمع/الضرب، ولكن ليس مع جميع الحلقات شبه الحلقية ، مثل الجمع الأدنى أو الجبر البولياني ، حيث لا تزال الخوارزمية البسيطة تعمل، وما يسمى بضرب المصفوفات التوافقي .

تاريخ

نشر فولكر ستراسن هذه الخوارزمية لأول مرة عام 1969، وبذلك أثبت أنن3{\displaystyle n^{3}}لم تكن خوارزمية ضرب المصفوفات العامة مثالية. [ 1 ] أدى نشر خوارزمية ستراسن إلى مزيد من الأبحاث حول ضرب المصفوفات، مما أدى إلى تحديد حدود دنيا تقاربية وتحسين الحدود العليا الحسابية.

الخوارزمية

يُظهر العمود الأيسر العمليات الحسابية اللازمة لتحديد نتيجة ضرب مصفوفة من الرتبة 2×2 . يتطلب ضرب المصفوفات البسيط عملية ضرب واحدة لكل قيمة "1" في العمود الأيسر. يُمثل كل عمود من الأعمدة الأخرى (M1-M7) عملية ضرب واحدة من عمليات الضرب السبع في خوارزمية ستراسن. مجموع الأعمدة من M1 إلى M7 يُعطي نفس نتيجة ضرب المصفوفات الكامل في العمود الأيسر.

يتركأ{\displaystyle A}،ب{\displaystyle B}ليكن مصفوفتين مربعتين فوق حلقةR{\displaystyle {\mathcal {R}}}على سبيل المثال، المصفوفات التي تكون عناصرها أعدادًا صحيحة أو أعدادًا حقيقية. الهدف من ضرب المصفوفات هو حساب حاصل ضرب المصفوفات.ج=أب{\displaystyle C=AB}يفترض الشرح التالي للخوارزمية أن جميع هذه المصفوفات لها أحجام من قوى العدد اثنين (أي،أ،ب،جماتر2ن×2ن(R){\displaystyle A,\,B,\,C\in \operatorname {Matr} _{2^{n}\times 2^{n}}({\mathcal {R}})})، لكن هذا ضروري من الناحية النظرية فقط - إذا كانت المصفوفاتأ{\displaystyle A}،ب{\displaystyle B}ليست من النوع2ن×2ن{\displaystyle 2^{n}\times 2^{n}}، ويمكن ملء الصفوف والأعمدة "المفقودة" بالأصفار للحصول على مصفوفات بأحجام قوى العدد اثنين - على الرغم من أن التطبيقات الحقيقية للخوارزمية لا تفعل ذلك عمليًا.

أقسام خوارزمية Strassenأ{\displaystyle A}،ب{\displaystyle B}وج{\displaystyle C}إلى مصفوفات كتل متساوية الحجم

أ=[أ11أ12أ21أ22]،ب=[ب11ب12ب21ب22]،ج=[ج11ج12ج21ج22]،{\displaystyle A={\begin{bmatrix}A_{11}&A_{12}\\A_{21}&A_{22}\end{bmatrix}},\quad B={\begin{bmatrix}B_{11}&B_{12}\\B_{21}&B_{22}\end{bmatrix}},\quad C={\begin{bmatrix}C_{11}&C_{12}\\C_{21}&C_{22}\end{bmatrix}},\quad }

معأأناج،بأناج،جأناجحصيرة2ن-1×2ن-1(R){\displaystyle A_{ij},B_{ij},C_{ij}\in \operatorname {Mat} _{2^{n-1}\times 2^{n-1}}({\mathcal {R}})}ستكون الخوارزمية البسيطة كالتالي:

[ج11ج12ج21ج22]=[أ11×ب11+أ12×ب21أ11×ب12+أ12×ب22أ21×ب11+أ22×ب21أ21×ب12+أ22×ب22].{\displaystyle {\begin{bmatrix}C_{11}&C_{12}\\C_{21}&C_{22}\end{bmatrix}}={\begin{bmatrix}A_{11}{\color {red}\times }B_{11}+A_{12}{\color {red}\times }B_{21}\quad &A_{11}{\color {red}\times }B_{12}+A_{12}{\color {red}\times }B_{22}\\A_{21}{\color {red}\times }B_{11}+A_{22}{\color {red}\times }B_{21}\quad &A_{21}{\color {red}\times }B_{12}+A_{22}{\color {red}\times }B_{22}\end{bmatrix}}.}

لا يقلل هذا التركيب من عدد عمليات الضرب: لا تزال هناك حاجة إلى 8 عمليات ضرب لكتل ​​المصفوفة لحسابجأناج{\displaystyle C_{ij}}المصفوفات، نفس عدد عمليات الضرب المطلوبة عند استخدام ضرب المصفوفات القياسي.

تحدد خوارزمية ستراسن قيمًا جديدة بدلاً من ذلك:

م1=(أ11+أ22)×(ب11+ب22)؛م2=(أ21+أ22)×ب11؛م3=أ11×(ب12-ب22)؛م4=أ22×(ب21-ب11)؛م5=(أ11+أ12)×ب22؛م6=(أ21-أ11)×(ب11+ب12)؛م7=(أ12-أ22)×(ب21+ب22)،{\displaystyle {\begin{aligned}M_{1}&=(A_{11}+A_{22}){\color {red}\times }(B_{11}+B_{22});\\M_{2}&=(A_{21}+A_{22}){\color {red}\times }B_{11};\\M_{3}&=A_{11}{\color {red}\times }(B_{12}-B_{22});\\M_{4}&=A_{22}{\color {red}\times }(B_{21}-B_{11});\\M_{5}&=(A_{11}+A_{12}){\color {red}\times }B_{22};\\M_{6}&=(A_{21}-A_{11}){\color {red}\times }(B_{11}+B_{12});\\M_{7}&=(A_{12}-A_{22}){\color {red}\times }(B_{21}+B_{22}),\\\end{aligned}}}

باستخدام 7 عمليات ضرب فقط (واحدة لكلمك{\displaystyle M_{k}}) بدلاً من 8. يمكننا الآن التعبير عنجأناج{\displaystyle C_{ij}}من ناحيةمك{\displaystyle M_{k}}:

[ج11ج12ج21ج22]=[م1+م4-م5+م7م3+م5م2+م4م1-م2+م3+م6].{\displaystyle {\begin{bmatrix}C_{11}&C_{12}\\C_{21}&C_{22}\end{bmatrix}}={\begin{bmatrix}M_{1}+M_{4}-M_{5}+M_{7}\quad &M_{3}+M_{5}\\M_{2}+M_{4}\quad &M_{1}-M_{2}+M_{3}+M_{6}\end{bmatrix}}.}

نكرر عملية القسمة هذه بشكل متكرر حتى تتحول المصفوفات الفرعية إلى أعداد (عناصر الحلقة).R{\displaystyle {\mathcal {R}}}إذا كان حجم المصفوفة الأصلية، كما ذُكر أعلاه، ليس قوةً للعدد 2، فإن الناتج سيكون له صفوف وأعمدة صفرية تمامًا مثلأ{\displaystyle A}وب{\displaystyle B}ثم يتم تجريد هذه العناصر عند هذه النقطة للحصول على المصفوفة (الأصغر).ج{\displaystyle C}كنا نرغب بذلك حقاً.

تتحول التطبيقات العملية لخوارزمية ستراسن إلى طرق ضرب المصفوفات القياسية للمصفوفات الفرعية الصغيرة بما يكفي، حيث تكون هذه الخوارزميات أكثر كفاءة. وتعتمد نقطة التحول التي تكون عندها خوارزمية ستراسن أكثر كفاءة على التطبيق المحدد والأجهزة. وقد قدّر باحثون سابقون أن خوارزمية ستراسن أسرع للمصفوفات التي يتراوح عرضها بين 32 و128 في التطبيقات المُحسّنة. [ 2 ] ومع ذلك، لوحظ أن نقطة التحول هذه تتزايد في السنوات الأخيرة، ووجدت دراسة أجريت عام 2010 أن خطوة واحدة من خوارزمية ستراسن غالبًا ما تكون غير مفيدة على البنى الحالية، مقارنةً بالضرب التقليدي المُحسّن للغاية، إلى أن يتجاوز حجم المصفوفة 1000 أو أكثر، وحتى بالنسبة لأحجام المصفوفات التي تبلغ عدة آلاف، تكون الفائدة هامشية في أحسن الأحوال (حوالي 10% أو أقل). [ 3 ] ولاحظت دراسة أحدث (2016) فوائد للمصفوفات الصغيرة التي يصل حجمها إلى 512، وفائدة تقارب 20%. [ 4 ]

تحسينات على خوارزمية ستراسن

من الممكن تقليل عدد عمليات جمع المصفوفات باستخدام الشكل التالي الذي اكتشفه وينوغراد في عام 1971: [ 5 ]

[أبجد][أجبد]=[ت+ب×بw+v+(أ+ب-ج-د)×دw+u+د×(ب+ج-أ-د)w+u+v]{\displaystyle {\begin{bmatrix}a&b\\c&d\end{bmatrix}}{\begin{bmatrix}A&C\\B&D\end{bmatrix}}={\begin{bmatrix}t+b{\color {red}\times }B&w+v+(a+bcd){\color {red}\times }D\\w+u+d{\color {red}\times }(B+CAD)&w+u+v\end{bmatrix}}}

أينت=أ×أ،u=(ج-أ)×(ج-د)،v=(ج+د)×(ج-أ)،w=ت+(ج+د-أ)×(أ+د-ج){\displaystyle t=a{\color {red}\times }A,\;u=(ca){\color {red}\times }(CD),\;v=(c+d){\color {red}\times }(CA),\;w=t+(c+da){\color {red}\times }(A+DC)}.

يؤدي هذا إلى تقليل عدد عمليات جمع وطرح المصفوفات من 18 إلى 15. ويبقى عدد عمليات ضرب المصفوفات 7، ويبقى التعقيد التقاربي كما هو. [ 6 ]

تم تحسين الخوارزمية بشكل أكبر في عام 2017 باستخدام أساس بديل، [ 7 ] مما أدى إلى تقليل عدد عمليات جمع المصفوفات لكل خطوة ثنائية الخطية إلى 12 مع الحفاظ على عدد عمليات ضرب المصفوفات، ومرة ​​أخرى في عام 2023: [ 8 ]

أ22=أ12-أ21+أ22؛ب22=ب12-ب21+ب22،{\displaystyle {\begin{aligned}A_{22}&=A_{12}-A_{21}+A_{22};\\B_{22}&=B_{12}-B_{21}+B_{22},\end{aligned}}}

ج12=ج12-ج22؛ج21=ج22-ج21،{\displaystyle {\begin{aligned}C_{12}&=C_{12}-C_{22};\\C_{21}&=C_{22}-C_{21},\end{aligned}}}

التعقيد التقاربي

أظهرت الخطوط العريضة للخوارزمية أعلاه أنه يمكن الاكتفاء بسبع عمليات ضرب مصفوفات فقط، بدلاً من ثماني عمليات كما هو معتاد، للكتل الفرعية للمصفوفة. من ناحية أخرى، يجب إجراء عمليات جمع وطرح للكتل، مع أن هذا لا يؤثر على التعقيد الكلي: جمع مصفوفات بحجمشمال/2{\displaystyle N/2}لا يتطلب الأمر سوى(شمال/2)2{\displaystyle (N/2)^{2}}العمليات الحسابية، بينما عملية الضرب أكثر تكلفة بكثير (تقليديًا)2(شمال/2)3{\displaystyle 2(N/2)^{3}}عمليات الجمع أو الضرب).

السؤال إذن هو: ما عدد العمليات التي يحتاجها المرء بالضبط لخوارزميات ستراسن، وكيف يقارن ذلك بضرب المصفوفات القياسي الذي يستغرق تقريبًا2شمال3{\displaystyle 2N^{3}}(أينشمال=2ن{\displaystyle N=2^{n}}) العمليات الحسابية، أي التعقيد التقاربيΘ(شمال3){\displaystyle \Theta (N^{3})}.

يمكن حساب عدد عمليات الجمع والضرب المطلوبة في خوارزمية ستراسن على النحو التالي: ليكنو(ن){\displaystyle f(n)}ليكن عدد العمليات لـ2ن×2ن{\displaystyle 2^{n}\times 2^{n}}المصفوفة. ثم بتطبيق خوارزمية ستراسن بشكل متكرر، نرى أنو(ن)=7و(ن-1)+ل4ن{\displaystyle f(n)=7f(n-1)+l4^{n}}، لبعض الثوابتل{\displaystyle l}يعتمد ذلك على عدد عمليات الجمع التي تُجرى في كل تطبيق للخوارزمية.و(ن)=(7+o(1))ن{\displaystyle f(n)=(7+o(1))^{n}}أي، التعقيد التقاربي لضرب المصفوفات ذات الحجمشمال=2ن{\displaystyle N=2^{n}}استخدام خوارزمية ستراسن هو يا([7+o(1)]ن)=يا(شمالسجل27+o(1))يا(شمال2.8074){\displaystyle O([7+o(1)]^{n})=O(N^{\log _{2}7+o(1)})\approx O(N^{2.8074})}مع ذلك، يأتي انخفاض عدد العمليات الحسابية على حساب انخفاض طفيف في الاستقرار العددي [ 9 ] ، كما تتطلب الخوارزمية ذاكرة أكبر بكثير مقارنةً بالخوارزمية البسيطة. يجب توسيع أبعاد المصفوفتين الأوليتين إلى أقرب قوة للعدد 2، مما يؤدي إلى تخزين ما يصل إلى أربعة أضعاف عدد العناصر، وتحتوي كل مصفوفة من المصفوفات المساعدة السبع على ربع عدد العناصر في المصفوفات الموسعة.

يجب مقارنة خوارزمية ستراسن بالطريقة "البسيطة" لضرب المصفوفات، والتي تتطلب 8 عمليات ضرب للكتل الفرعية بدلاً من 7. وهذا من شأنه أن يُنتج التعقيد المتوقع من الطريقة القياسية.يا(8ن)=يا(شمالسجل28)=يا(شمال3){\displaystyle O(8^{n})=O(N^{\log _{2}8})=O(N^{3})}تُظهر مقارنة هاتين الخوارزميتين أن خوارزمية ستراسن أسرع تقاربياً : يوجد حجمشمالعتبة{\displaystyle N_{\text{threshold}}}لذا، فإن ضرب المصفوفات الأكبر حجمًا باستخدام خوارزمية ستراسن يكون أكثر كفاءة من الطريقة "التقليدية". مع ذلك، لا يعني هذا بالضرورة أن خوارزمية ستراسن أسرع دائمًا حتى مع المصفوفات الصغيرة، وفي الواقع العملي، هذا ليس هو الحال: فبالنسبة للمصفوفات الصغيرة، تفوق تكلفة عمليات الجمع الإضافية لكتل ​​المصفوفة التوفير في عدد عمليات الضرب. هناك أيضًا عوامل أخرى لم يشملها التحليل أعلاه، مثل الفرق في التكلفة على الأجهزة الحالية بين تحميل البيانات من الذاكرة إلى المعالجات مقابل تكلفة إجراء العمليات الفعلية على هذه البيانات. نتيجةً لهذه الاعتبارات، تُستخدم خوارزمية ستراسن عادةً مع المصفوفات "الكبيرة" فقط. هذا التأثير أكثر وضوحًا مع الخوارزميات البديلة مثل خوارزمية كوبرسميث ووينوغراد : فبينما تكون أسرع تقاربًا ، إلا أن نقطة التحولشمالعتبة{\displaystyle N_{\text{threshold}}}إنها كبيرة جدًا لدرجة أن الخوارزمية لا تُستخدم بشكل عام على المصفوفات التي يصادفها المرء في الممارسة العملية.

الرتبة أو التعقيد الثنائي الخطي

يُعدّ التعقيد الثنائي الخطي أو رتبة التحويل الثنائي الخطي مفهومًا مهمًا في التعقيد التقاربي لضرب المصفوفات. رتبة التحويل الثنائي الخطيϕ:أ×بج{\displaystyle \phi :\mathbf {A} \times \mathbf {B} \rightarrow \mathbf {C} } فوق الحقل F يتم تعريفه على أنه (إلى حد ما إساءة استخدام التدوين )

R(ϕ/F)=مين{ر|وأناأ*،زأناب*،wأناج،أأ،بب،ϕ(أ،ب)=أنا=1روأنا(أ)زأنا(ب)wأنا}{\displaystyle R(\phi /\mathbf {F} )=\min \left\{r\left|\exists f_{i}\in \mathbf {A} ^{*},g_{i}\in \mathbf {B} ^{*},w_{i}\in \mathbf {C} ,\forall \mathbf {a} \in \mathbf {A} ,\mathbf {b} \in \mathbf {B} ,\phi (\mathbf {a} ,\mathbf {b} )=\sum _{i=1}^{r}f_{i}(\mathbf {a} )g_{i}(\mathbf {b} )w_{i}\right.\right\}}

بمعنى آخر، رتبة الخريطة الثنائية الخطية هي طول أقصر عملية حسابية ثنائية خطية لها. [ 10 ] يُظهر وجود خوارزمية ستراسن أن رتبة2×2{\displaystyle 2\times 2}لا تتجاوز عملية ضرب المصفوفات سبعة. ولتوضيح ذلك، دعونا نعبر عن هذه الخوارزمية (إلى جانب الخوارزمية القياسية) كعملية حسابية ثنائية الخطية. في حالة المصفوفات، تتكون الفضاءات الثنائية A * و B * من دوال في الحقل F ناتجة عن ضرب نقطي مزدوج قياسي (أي في هذه الحالة مجموع جميع عناصر ضرب هادامارد ).

الخوارزمية القياسيةخوارزمية ستراسن
أنا{\displaystyle i}وأنا(أ){\displaystyle f_{i}(\mathbf {a} )}زأنا(ب){\displaystyle g_{i}(\mathbf {b} )}wأنا{\displaystyle w_{i}}وأنا(أ){\displaystyle f_{i}(\mathbf {a} )}زأنا(ب){\displaystyle g_{i}(\mathbf {b} )}wأنا{\displaystyle w_{i}}
1[1000]:أ{\displaystyle {\begin{bmatrix}1&0\\0&0\end{bmatrix}}:\mathbf {a} }[1000]:ب{\displaystyle {\begin{bmatrix}1&0\\0&0\end{bmatrix}}:\mathbf {b} }[1000]{\displaystyle {\begin{bmatrix}1&0\\0&0\end{bmatrix}}}[1001]:أ{\displaystyle {\begin{bmatrix}1&0\\0&1\end{bmatrix}}:\mathbf {a} }[1001]:ب{\displaystyle {\begin{bmatrix}1&0\\0&1\end{bmatrix}}:\mathbf {b} }[1001]{\displaystyle {\begin{bmatrix}1&0\\0&1\end{bmatrix}}}
2[0100]:أ{\displaystyle {\begin{bmatrix}0&1\\0&0\end{bmatrix}}:\mathbf {a} }[0010]:ب{\displaystyle {\begin{bmatrix}0&0\\1&0\end{bmatrix}}:\mathbf {b} }[1000]{\displaystyle {\begin{bmatrix}1&0\\0&0\end{bmatrix}}}[0011]:أ{\displaystyle {\begin{bmatrix}0&0\\1&1\end{bmatrix}}:\mathbf {a} }[1000]:ب{\displaystyle {\begin{bmatrix}1&0\\0&0\end{bmatrix}}:\mathbf {b} }[001-1]{\displaystyle {\begin{bmatrix}0&0\\1&-1\end{bmatrix}}}
3[1000]:أ{\displaystyle {\begin{bmatrix}1&0\\0&0\end{bmatrix}}:\mathbf {a} }[0100]:ب{\displaystyle {\begin{bmatrix}0&1\\0&0\end{bmatrix}}:\mathbf {b} }[0100]{\displaystyle {\begin{bmatrix}0&1\\0&0\end{bmatrix}}}[1000]:أ{\displaystyle {\begin{bmatrix}1&0\\0&0\end{bmatrix}}:\mathbf {a} }[010-1]:ب{\displaystyle {\begin{bmatrix}0&1\\0&-1\end{bmatrix}}:\mathbf {b} }[0101]{\displaystyle {\begin{bmatrix}0&1\\0&1\end{bmatrix}}}
4[0100]:أ{\displaystyle {\begin{bmatrix}0&1\\0&0\end{bmatrix}}:\mathbf {a} }[0001]:ب{\displaystyle {\begin{bmatrix}0&0\\0&1\end{bmatrix}}:\mathbf {b} }[0100]{\displaystyle {\begin{bmatrix}0&1\\0&0\end{bmatrix}}}[0001]:أ{\displaystyle {\begin{bmatrix}0&0\\0&1\end{bmatrix}}:\mathbf {a} }[-1010]:ب{\displaystyle {\begin{bmatrix}-1&0\\1&0\end{bmatrix}}:\mathbf {b} }[1010]{\displaystyle {\begin{bmatrix}1&0\\1&0\end{bmatrix}}}
5[0010]:أ{\displaystyle {\begin{bmatrix}0&0\\1&0\end{bmatrix}}:\mathbf {a} }[1000]:ب{\displaystyle {\begin{bmatrix}1&0\\0&0\end{bmatrix}}:\mathbf {b} }[0010]{\displaystyle {\begin{bmatrix}0&0\\1&0\end{bmatrix}}}[1100]:أ{\displaystyle {\begin{bmatrix}1&1\\0&0\end{bmatrix}}:\mathbf {a} }[0001]:ب{\displaystyle {\begin{bmatrix}0&0\\0&1\end{bmatrix}}:\mathbf {b} }[-1100]{\displaystyle {\begin{bmatrix}-1&1\\0&0\end{bmatrix}}}
6[0001]:أ{\displaystyle {\begin{bmatrix}0&0\\0&1\end{bmatrix}}:\mathbf {a} }[0010]:ب{\displaystyle {\begin{bmatrix}0&0\\1&0\end{bmatrix}}:\mathbf {b} }[0010]{\displaystyle {\begin{bmatrix}0&0\\1&0\end{bmatrix}}}[-1010]:أ{\displaystyle {\begin{bmatrix}-1&0\\1&0\end{bmatrix}}:\mathbf {a} }[1100]:ب{\displaystyle {\begin{bmatrix}1&1\\0&0\end{bmatrix}}:\mathbf {b} }[0001]{\displaystyle {\begin{bmatrix}0&0\\0&1\end{bmatrix}}}
7[0010]:أ{\displaystyle {\begin{bmatrix}0&0\\1&0\end{bmatrix}}:\mathbf {a} }[0100]:ب{\displaystyle {\begin{bmatrix}0&1\\0&0\end{bmatrix}}:\mathbf {b} }[0001]{\displaystyle {\begin{bmatrix}0&0\\0&1\end{bmatrix}}}[010-1]:أ{\displaystyle {\begin{bmatrix}0&1\\0&-1\end{bmatrix}}:\mathbf {a} }[0011]:ب{\displaystyle {\begin{bmatrix}0&0\\1&1\end{bmatrix}}:\mathbf {b} }[1000]{\displaystyle {\begin{bmatrix}1&0\\0&0\end{bmatrix}}}
8[0001]:أ{\displaystyle {\begin{bmatrix}0&0\\0&1\end{bmatrix}}:\mathbf {a} }[0001]:ب{\displaystyle {\begin{bmatrix}0&0\\0&1\end{bmatrix}}:\mathbf {b} }[0001]{\displaystyle {\begin{bmatrix}0&0\\0&1\end{bmatrix}}}
أب=أنا=18وأنا(أ)زأنا(ب)wأنا{\displaystyle \mathbf {a} \mathbf {b} =\sum _{i=1}^{8}f_{i}(\mathbf {a} )g_{i}(\mathbf {b} )w_{i}}أب=أنا=17وأنا(أ)زأنا(ب)wأنا{\displaystyle \mathbf {a} \mathbf {b} =\sum _{i=1}^{7}f_{i}(\mathbf {a} )g_{i}(\mathbf {b} )w_{i}}

يمكن إثبات أن العدد الإجمالي لعمليات الضرب الأوليةل{\displaystyle L}إن المطلوب لضرب المصفوفات مرتبط ارتباطًا وثيقًا بالرتبة تقاربًاR{\displaystyle R}، أيل=Θ(R){\displaystyle L=\Theta (R)}أو بتعبير أدق، بما أن الثوابت معروفة،R/2لR{\displaystyle R/2\leq L\leq R}إحدى الخصائص المفيدة للرتبة هي أنها شبه ضربية بالنسبة لحاصل ضرب الموترات ، وهذا يمكّن المرء من إثبات أن2ن×2ن×2ن{\displaystyle 2^{n}\times 2^{n}\times 2^{n}}يمكن إنجاز عملية ضرب المصفوفات بما لا يزيد عن7ن{\displaystyle 7^{n}}عمليات الضرب الأساسية لأين{\displaystyle n}. (هذان{\displaystyle n}حاصل ضرب الموتر ذي الرتبة n2×2×2{\displaystyle 2\times 2\times 2}عملية ضرب المصفوفات مع نفسها ن{\displaystyle n}يتم تحقيق قوة الموتر رقم -th من خلال الخطوة التكرارية في الخوارزمية الموضحة.)

سلوك ذاكرة التخزين المؤقت

خوارزمية ستراسن لا تعتمد على ذاكرة التخزين المؤقت . وقد أظهر تحليل سلوكها في ذاكرة التخزين المؤقت أنها تتسبب في مشاكل.

Θ(1+ن2ب+نسجل27بم){\displaystyle \Theta \left(1+{\frac {n^{2}}{b}}+{\frac {n^{\log _{2}7}}{b{\sqrt {M}}}}\right)}

أخطاء التخزين المؤقت أثناء التنفيذ، بافتراض حجم تخزين مؤقت مثاليم{\displaystyle M}(أي معم/ب{\displaystyle M/b}خطوط طويلةب{\displaystyle b}). [ 11 ] : 13

اعتبارات التنفيذ

يذكر الوصف أعلاه أن المصفوفات مربعة، وأن حجمها قوة من قوى العدد اثنين ، وأنه ينبغي استخدام الحشو عند الحاجة. يسمح هذا القيد بتقسيم المصفوفات إلى نصفين، بشكل متكرر، حتى الوصول إلى حد الضرب القياسي . يُبسط هذا القيد الشرح وتحليل التعقيد، ولكنه ليس ضروريًا في الواقع؛ [ 12 ] وفي الحقيقة، سيؤدي حشو المصفوفة كما هو موضح إلى زيادة وقت الحساب، وقد يُلغي بسهولة التوفير الطفيف في الوقت الذي تم الحصول عليه باستخدام الطريقة في المقام الأول.

سيراعي التنفيذ الجيد ما يلي:

  • ليس من الضروري ولا من المستحسن استخدام خوارزمية ستراسن حتى في حالة الأعداد القياسية. بالمقارنة مع ضرب المصفوفات التقليدي، تضيف الخوارزمية قيمة كبيرةيا(ن2){\displaystyle O(n^{2})}عبء العمل في عمليات الجمع والطرح؛ لذا، عند التعامل مع أعداد أقل من حجم معين، يُفضّل استخدام الضرب التقليدي. على سبيل المثال،1600×1600{\displaystyle 1600\times 1600}لا حاجة إلى إضافة حشو إلى2048×2048{\displaystyle 2048\times 2048}لأنه يمكن تقسيمه إلى25×25{\displaystyle 25\times 25}يمكن بعد ذلك استخدام المصفوفات والضرب التقليدي على هذا المستوى.
  • يمكن تطبيق هذه الطريقة على المصفوفات المربعة ذات أي بُعد. [ 3 ] إذا كان البُعد زوجيًا، تُقسّم المصفوفة إلى نصفين كما هو موضح. أما إذا كان البُعد فرديًا، فيُضاف صف وعمود واحد من الأصفار أولًا. يمكن تطبيق هذه الأصفار أثناء المعالجة أو عند الحاجة، ثم تُحذف الصفوف والأعمدة الزائدة عند تكوين النتيجة. على سبيل المثال، لنفترض أن المصفوفات هي199×199{\displaystyle 199\times 199}يمكن تقسيمها بحيث يكون الجزء العلوي الأيسر100×100{\displaystyle 100\times 100}والجزء السفلي الأيمن هو99×99{\displaystyle 99\times 99}أينما تتطلب العمليات ذلك، أبعاد99{\displaystyle 99}يتم إضافة أصفار إلى100{\displaystyle 100}أولاً. لاحظ، على سبيل المثال، أن المنتجم2{\displaystyle M_{2}}يُستخدم فقط في الصف السفلي من المخرجات، لذا فهو مطلوب فقط أن يكون99{\displaystyle 99}صفوف عالية؛ وبالتالي العامل الأيسرأ21+أ22{\displaystyle A_{21}+A_{22}}لا يلزم استخدام ما يلي لتوليده99{\displaystyle 99}صفوف عالية؛ وبالتالي، لا حاجة لزيادة هذا المجموع إلى100{\displaystyle 100}صفوف؛ من الضروري فقط إضافة حشو.أ22{\displaystyle A_{22}}ل100{\displaystyle 100}أعمدة للمطابقةأ21{\displaystyle A_{21}}.

علاوة على ذلك، ليس من الضروري أن تكون المصفوفات مربعة. يمكن تقسيم المصفوفات غير المربعة إلى نصفين باستخدام نفس الطرق، مما ينتج عنه مصفوفات غير مربعة أصغر. إذا كانت المصفوفات غير مربعة بدرجة كافية، فسيكون من المفيد تقليل العملية الأولية إلى عمليات ضرب أكثر مربعة، باستخدام طرق بسيطة هي في الأساس يا(ن2){\displaystyle O(n^{2})}، على سبيل المثال:

  • منتج ذو حجم[2شمال×شمال]*[شمال×10شمال]{\displaystyle [2N\times N]\ast [N\times 10N]}يمكن القيام بذلك على شكل 20 عملية منفصلة[شمال×شمال]*[شمال×شمال]{\displaystyle [N\times N]\ast [N\times N]}العمليات، المرتبة لتشكيل النتيجة؛
  • منتج ذو حجم[شمال×10شمال]*[10شمال×شمال]{\displaystyle [N\times 10N]\ast [10N\times N]}يمكن القيام بذلك على شكل 10 أجزاء منفصلة[شمال×شمال]*[شمال×شمال]{\displaystyle [N\times N]\ast [N\times N]}العمليات، التي يتم جمعها لتشكيل النتيجة.

ستجعل هذه التقنيات التنفيذ أكثر تعقيدًا، مقارنةً بمجرد إضافة الحشو إلى مربع قوة اثنين؛ ومع ذلك، من المعقول افتراض أن أي شخص يقوم بتنفيذ Strassen، بدلاً من الضرب التقليدي، سيضع أولوية أعلى على الكفاءة الحسابية من بساطة التنفيذ.

عمليًا، يمكن تطبيق خوارزمية ستراسن لتحقيق أداء أفضل من الضرب التقليدي حتى بالنسبة للمصفوفات الصغيرة جدًا500×500{\displaystyle 500\times 500}[ 4 ] بالنسبة للمصفوفات غير المربعة على الإطلاق، ودون الحاجة إلى مساحة عمل تتجاوز المخازن المؤقتة اللازمة بالفعل لعملية الضرب التقليدية عالية الأداء.

انظر أيضاً

مراجع

  1. ستراسن، فولكر (1969). "الحذف الغاوسي ليس الأمثل". الرياضيات العددية 13 (4): 354-356 . doi : 10.1007/BF02165411 . S2CID 121656251 . 
  2. سكينا، ستيفن س. (1998)، "القسم 8.2.3 ضرب المصفوفات"، دليل تصميم الخوارزميات ، برلين، نيويورك: سبرينغر-فيرلاغ ، ISBN 978-0-387-94860-7.
  3. 1 2 دالبرتو، باولو؛ نيكولاو، ألكساندرو (2005). استخدام التكرار لتعزيز أداء أطلس (ملف PDF) . المؤتمر الدولي السادس للحوسبة عالية الأداء.
  4. ١ ٢ هوانغ، جيانيو؛ سميث، تايلر م.؛ هنري، جريج م.؛ فان دي جين، روبرت أ. (١٣ نوفمبر ٢٠١٦). خوارزمية ستراسن المُعاد تحميلها . SC16: المؤتمر الدولي للحوسبة عالية الأداء والشبكات والتخزين والتحليل . مطبعة IEEE. الصفحات ٦٩٠-٧٠١ . doi : 10.1109/SC.2016.58 . ISBN  9781467388153تم الاطلاع عليه بتاريخ 1 نوفمبر 2022 .
  5. وينوغراد، س. (أكتوبر 1971). "حول ضرب المصفوفات من الرتبة 2 × 2" . الجبر الخطي وتطبيقاته . 4 (4): 381-388 . doi : 10.1016/0024-3795(71)90009-7 .
  6. كنوت (1997) ، ص 500.
  7. كارشتات، إيلاي؛ شوارتز، أوديد (24 يوليو 2017). "ضرب المصفوفات، أسرع قليلاً" . وقائع الندوة التاسعة والعشرين لجمعية الحوسبة الآلية (ACM) حول التوازي في الخوارزميات والهياكل . جمعية الحوسبة الآلية (ACM). الصفحات 101-110 . doi : 10.1145/3087556.3087579 . ISBN  978-1-4503-4593-4.
  8. شوارتز، عوديد؛ فاكنين، نوا (31-12-2023). "لعبة الحصى وأساس بديل لضرب المصفوفات عالي الأداء" . مجلة SIAM للحوسبة العلمية . 45 (6): C277– C303. Bibcode : 2023SJSC...45C.277S . doi : 10.1137/22M1502719 . ISSN 1064-8275 . 
  9. ويب، ميلر (1975). "التعقيد الحسابي والاستقرار العددي". مجلة SIAM للحوسبة 4 ( 2): 97-107 . doi : 10.1137/0204009 .
  10. ^ بورجيسر. كلاوسن؛ شكراللهي (1997). نظرية التعقيد الجبرية . سبرينغر-فيرلاغ. رقم ISBN 3-540-60582-7.
  11. فريجو، م.؛ ليسرسون، سي إي ؛ بروكوب، هـ .؛ راماتشاندران، س. (1999). خوارزميات غير حساسة لذاكرة التخزين المؤقت (ملف PDF) . وقائع ندوة IEEE حول أسس علوم الحاسوب (FOCS). الصفحات 285-297 . 
  12. هايام، نيكولاس ج. (1990). "استغلال الضرب السريع للمصفوفات ضمن مكتبة BLAS من المستوى 3" (ملف PDF) . معاملات ACM في البرمجيات الرياضية . 16 (4): 352-368 . doi : 10.1145/98267.98290 . hdl : 1813/6900 . S2CID 5715053 .