371 likes | 1.42k Views
אלגוריתם שטראסן. רוני גליקמן 65740334. וולקר שטראסן פרסם את אלגוריתם שטראסן בשנת 1969. האלגוריתם נועד לכפול מטריצות והוא משפר את זמן ריצתו של האלגוריתם הסטנדרטי שהיה עד ל 1969 ל
E N D
אלגוריתם שטראסן רוני גליקמן 65740334
וולקר שטראסן פרסם את אלגוריתם שטראסן בשנת 1969. האלגוריתם נועד לכפול מטריצות והוא משפר את זמן ריצתו של האלגוריתם הסטנדרטי שהיה עד ל 1969 ל אף על פי שהאלגוריתם שלו משפר במעט את האלגוריתם הסטנדרטי של כפל מטריצות, הוא היה הראשון לציין כי הגישה המקובלת היא לא אופטימאלית. המאמר התחיל את החיפוש של אלגוריתמים מהירים יותר, כגון אלגוריתם קופרסמית - וינוגרד המורכב יותר שפורסם בשנת 1987. אלגוריתם שטראסן
הכפלה בסיסית של מטריצות נניח שברצוננו לכפול שתי מטריצות בגודל N x N : . . . . . a1,1 a1,2 b1,1 b1,2 . . c1,1 c1,2 c1,n a1,n b1,n a2,1 a2,2 b2,1 c2,1 b2,2 c2,2 : . : . . : : . : . . : an,1 bn,n cn,1 cn,n an,n bn,1 c1,1 = ( a1,1 x b1,1 ) + ( a1,2 x b2,1 ) + . . . + ( a1,n x bn,1 ) c1,2 = ( a1,1 x b1,2 ) + ( a1,2 x b2,2 ) + . . . + ( a1,n x bn,2 ) : : cn,n = ( an,1 x b1,n ) + ( an,2 x b2,n ) + . . . + ( an,n x bn,n ) אלגוריתם שטראסן
הכפלה בסיסית של מטריצות נניח שברצוננו לכפול שתי מטריצות בגודל N x N : . . . . . a1,1 a1,2 b1,1 b1,2 . . c1,1 c1,2 c1,n a1,n b1,n a2,1 a2,2 b2,1 c2,1 b2,2 c2,2 : . : . . : : . : . . : an,1 bn,n cn,1 cn,n an,n bn,1 נוסחא לחישוב: זמן ריצה: אלגוריתם שטראסן
הכפלת מטריצות (הפרד ומשול) A0 A1 B0 B1 (A0xB0)+(A1xB2) (A0xB1)+(A1xB3) A3 B3 A2 B2 (A2xB0)+(A3xB2) (A2xB1)+(A3xB3) - נפריד את המטריצות שנרצה לכפול לתתי מטריצות : A0 , A1 , A2 . . . . - נשתמש במשוואות החישוב של הכפלת המטריצות - נכפול רקורסיבית את תתי המטריצות כשתנאי העצירה הוא n=1 . B0 A0 C0 a0 b0 a0 x b0 אלגוריתם שטראסן
הכפלת מטריצות (הפרד ומשול) A0 A1 B0 B1 (A0xB0)+(A1xB2) (A0xB1)+(A1xB3) A3 B3 A2 B2 (A2xB0)+(A3xB2) (A2xB1)+(A3xB3) זמן ריצה: 8 לפי משפט אב התנאי 22 < 8 מתקיים ולכן: אלגוריתם שטראסן
ואז הגיע וולקר שטראסן את האלגוריתם ניתן לראות כיישום של שיטת התכנון "הפרד ומשול" . שטראסן גילה גישה רקורסיבית שונה שבה דרושות רק 7 פעולות כפל רקורסיביות במקום 8 כפי שראינו מקודם, דבר הגורם לזמן ריצה קצר יותר. האלגוריתם אינו מעשי אלא אם כן מדובר במטריצות גדולות ( n בגודל 45 לפחות ) וצפופות ( מעט איברים השווים ל 0 ). -עבור מטריצות קטנות נשתמש בשיטה הישירה. -עבור מטריצות גדולות ודלילות קיימים אלגוריתמים מיוחדים שביצועיהם טובים יותר. לכן העניין באלגוריתם שטראסן הוא תיאורטי בעיקרו. אלגוריתם שטראסן
שלב 1 מתוך 4 : חלק את מטריצות הקלט לתת מטריצות בגודל N/2 a1,1 a1,2 b1,1 a1,4 b1,4 a1,3 b1,3 b1,2 B0 B1 A1 A0 b2,1 b2,2 a2,1 a2,2 a2,3 a2,4 b2,3 b2,4 a3,1 a3,2 a3,4 a3,3 b3,1 b3,2 b3,4 b3,3 A2 B2 B3 A3 a4,1 b4,1 a4,2 a4,3 a4,4 b4,2 b4,3 b4,4 אלגוריתם שטראסן
שלב 2 מתוך 4 : פעולות חיבור וחיסור, חשב 14 מטריצות בגודל באמצעות n/2 x n/2 A0 A1 B0 B1 A2 A3 B2 B3 S1 = A0 T1 = B1 - B3 S2 = A0 + A1 T2 = B3 S3 = A2 + A3 T3 = B0 S4 = A3 T4 = B2 – B0 S5 = A0 + A3 T5 = B0 + B3 S6 = A1 – A3 T6 = B2 + B3 S7 = A0 - A2 T7 = B0 + B1 אלגוריתם שטראסן
שלב 3 מתוך 4 : חשב באופן רקורסיבי את 7 מכפלות המטריצות P1 = x ( ) S1 = A0 T1 = B1 - B3 P2 = ( ) x S2 = A0 + A1 T2 = B3 P3 = ( ) x S3 = A2 + A3 B0 T3 = P4 = x ( ) S4 = A3 T4 = B2 – B0 P5 = ( ) x ( ) S5 = A0 + A3 T5 = B0 + B3 P6 = ( ) x ( ) S5 = A1 - A3 T5 = B2 + B3 P7 = ( ) x ( ) S5 = A0 - A2 T5 = B0 + B1 אלגוריתם שטראסן
חישוב מכפלות תתי המטריצות A0 A1 B0 B1 C0 C1 (A0B0)+(A1B2) (A0B1)+(A1B3) A2 A3 B2 B3 C2 C3 (A2B0)+(A3B2) (A2B1)+(A3B3) P1 = A0 B1 - A0 B3 נסמן ביטויים חיוניים P1 P2 C1 P2 = A0 B3 + A1 B3 + (A0B1) + (A1B3) = P3 = A2 B0 + A3 B0 P4 = A3 B2 - A3 B0 P5 = A0 B0 + A0 B3 + A3 B0 + A3 B3 P6 = A1 B2 + A1 B3 - A3 B2 - A3 B3 P7 = A0 B0 + A0 B1 - A2 B0 - A2 B1 אלגוריתם שטראסן
חישוב מכפלות תתי המטריצות A0 A1 B0 B1 C0 C1 (A0B0)+(A1B2) (A0B1)+(A1B3) A2 A3 B2 B3 C2 C3 (A2B0)+(A3B2) (A2B1)+(A3B3) P1 = A0 B1 - A0 B3 נסמן ביטויים חיוניים P3 P4 C2 P2 = A0 B3 + A1 B3 + (A2B0) + (A3B2) = P3 = A2 B0 + A3 B0 P4 = A3 B2 - A3 B0 P5 = A0 B0 + A0 B3 + A3 B0 + A3 B3 P6 = A1 B2 + A1 B3 - A3 B2 - A3 B3 P7 = A0 B0 + A0 B1 - A2 B0 - A2 B1 אלגוריתם שטראסן
חישוב מכפלות תתי המטריצות A0 A1 B0 B1 C0 C1 (A0B0)+(A1B2) (A0B1)+(A1B3) A2 A3 B2 B3 C2 C3 (A2B0)+(A3B2) (A2B1)+(A3B3) P1 = A0 B1 - A0 B3 נתבונן על הביטוי P5 + P4 – P2 + P6 נסמן ביטויים חיוניים P2 = A0 B3 + A1 B3 P3 = A2 B0 + A3 B0 + - - + = P4 = A3 B2 - A3 B0 P5 = A0 B0 + A0 B3 + A3 B0 + A3 B3 (A0B0) + (A1B2) P6 = A1 B2 + A1 B3 - A3 B2 - A3 B3 P7 = A0 B0 + A0 B1 - A2 B0 - A2 B1 אלגוריתם שטראסן
חישוב מכפלות תתי המטריצות A0 A1 B0 B1 C0 C1 (A0B0)+(A1B2) (A0B1)+(A1B3) A2 A3 B2 B3 C2 C3 (A2B0)+(A3B2) (A2B1)+(A3B3) P1 = A0 B1 - A0 B3 נתבונן על הביטוי P5 + P1 – P3 - P7 נסמן ביטויים חיוניים P2 = A0 B3 + A1 B3 - P3 = A2 B0 + A3 B0 + - - + + = P4 = A3 B2 - - A3 B0 P5 = A0 B0 + A0 B3 + A3 B0 + A3 B3 (A2B1) + (A3B3) P6 = A1 B2 + A1 B3 - A3 B2 - A3 B3 P7 = A0 B0 + A0 B1 - A2 B0 - A2 B1 אלגוריתם שטראסן
שלב 4 מתוך 4 : חשב את תת המטריצות המבוקשות C0 , C1 , C2 , C3 של מטריצת התוצאה ע"י חיבור ו / או חיסור של צירופים שונים של המטריצות Pi C0 C1 P1 + P2 P5 + P4 – P2 + P6 C2 C3 P3 + P4 P5 + P1 – P3 - P7 אלגוריתם שטראסן
נוסחת הנסיגה של האלגוריתם האלגוריתם משתמש ב 7 הכפלות מטריצות רקורסיביות בגודל n/2 ובמספר פעולות חיבור וחיסור החסום לפי משפט אב התנאי 22 < 7 מתקיים ולכן: אלגוריתם שטראסן
דוגמת הרצת אלגוריתם שטראסן 2 1 3 4 3 4 1 2 A1 A0 B0 B1 ? 4 2 3 5 2 2 3 4 1 2 1 2 4 3 2 1 A2 A3 B3 B2 3 3 2 4 5 4 3 3 נחלק את המטריצות לתת מטריצות בגודל 2x2 נחשב את 14 תתי המטריצות S,T אלגוריתם שטראסן
נחשב את 7 המכפלות S x T נחשב את 14 המטריצות S,T 2 1 -1 1 S1 = A0 = P1 = T1 =B1 - B3 = 4 2 0 1 2 1 3 4 A1 A0 5 5 2 1 S2 =A0 +A1= T2 = B3 = 4 2 3 5 7 7 3 3 1 2 1 2 2 4 3 4 S3 =A2 +A3= T3 = B0 = A2 A3 5 7 2 2 3 3 2 4 1 -1 1 2 T4 =B2 – B0 = S4 = A3 = 3 2 2 4 3 4 1 2 3 3 5 5 S5 =A0 +A3= T5 =B0 + B3 = B0 B1 6 6 5 5 2 2 3 4 6 4 2 2 T6 =B2 + B3 = S6 =A1 -A3= 4 3 2 1 8 7 1 1 B3 B2 5 4 3 3 4 6 1 -1 T7 =B0 + B1 = S7 =A0 –A2= 5 6 1 -1 אלגוריתם שטראסן
נחשב את 7 המטריצות S x T נחשב את 14 המטריצות S,T S1 = A0 = P1 = T1 =B1 - B3 = 0 0 2 S2 =A0 +A1= P2 = 3 T2 = B3 = 1 3 2 1 S3 =A2 +A3= T3 = B0 = 6 P3 = -1 -6 4 2 T4 =B2 – B0 = S4 = A3 = P4 = 1 2 2 -1 1 S5 =A0 +A3= T5 =B0 + B3 = P5 = 0 4 0 0 1 T6 =B2 + B3 = P6 = S6 =A1 -A3= 1 -1 -1 P7 = 0 T7 =B0 + B1 = S7 =A0 –A2= 0 -2 אלגוריתם שטראסן
P5 + P4 – P2 + P6 0 + 2 – 3+ (-1) -2 P1 + P2 0 + 3 3 -1 1 2 1 0 1 4 2 (-6) + 2 P3 + P4 -4 P5 + P1 – P3 - P7 0 + 0 – (-6)- 0 6 P1 = 0 P2 = 3 P3 = -6 P4 = 2 P5 = 0 P6 = -1 P7 = 0 אלגוריתם שטראסן
נחשב את 7 המכפלות S x T 2 1 -1 1 -2 3 P1 = 4 2 0 1 -4 6 2 1 3 4 A1 A0 2 1 5 5 S2 =A0 +A1= P2 = T2 = B3 = 4 2 3 5 3 3 7 7 1 2 1 2 2 4 3 4 S3 =A2 +A3= T3 = B0 = A2 A3 5 7 2 2 3 3 2 4 1 2 1 -1 T4 =B2 – B0 = S4 = A3 = 2 4 3 2 3 4 1 2 3 3 5 5 S5 =A0 +A3= T5 =B0 + B3 = B0 B1 6 6 5 5 2 2 3 4 2 2 6 4 T6 =B2 + B3 = S6 =A1 -A3= 4 3 2 1 1 1 8 7 B3 B2 5 4 3 3 1 -1 4 6 T7 =B0 + B1 = S7 =A0 –A2= 1 -1 5 6 אלגוריתם שטראסן
נחשב את 7 המטריצות S x T נחשב את 14 המטריצות S,T S1 = A0 = P1 = T1 =B1 - B3 = -2 -10 5 S2 =A0 +A1= P2 = 10 T2 = B3 = 3 30 5 5 S3 =A2 +A3= P3 = T3 = B0 = 14 2 28 7 7 T4 =B2 – B0 = S4 = A3 = P4 = 1 7 7 2 1 S5 =A0 +A3= T5 =B0 + B3 = P5 = 5 12 60 3 3 T6 =B2 + B3 = P6 = S6 =A1 -A3= 6 -2 -12 P7 = -6 T7 =B0 + B1 = S7 =A0 –A2= 3 -2 אלגוריתם שטראסן
60 + 7 – 30+ (-12) P5 + P4 – P2 + P6 25 -10 + 30 P1 + P2 20 2 1 5 5 3 3 7 7 28 + 7 P3 + P4 35 P5 + P1 – P3 - P7 60 + (-10) – 28– (-6) 28 P1 = -10 P2 = 30 P3 = 28 P4 = 7 P5 = 60 P6 = -12 P7 = -6 אלגוריתם שטראסן
נחשב את 7 המכפלות S x T 2 1 -1 1 -2 3 P1 = 4 2 0 1 -4 6 2 1 3 4 A1 A0 2 1 5 5 25 20 P2 = 4 2 3 5 3 3 7 7 35 28 1 2 1 2 2 4 14 16 3 4 S3 =A2 +A3= P3 = T3 = B0 = A2 A3 5 7 29 34 2 2 3 3 2 4 1 2 1 -1 T4 =B2 – B0 = 7 3 S4 = A3 = P4 = 2 4 3 14 2 6 3 4 1 2 3 3 30 30 5 5 S5 =A0 +A3= P5 = T5 =B0 + B3 = B0 B1 6 6 60 60 5 5 2 2 3 4 2 2 28 22 6 4 P6 = T6 =B2 + B3 = S6 =A1 -A3= 4 3 2 1 1 1 14 11 8 7 B3 B2 5 4 3 3 1 -1 4 6 P7 = T7 =B0 + B1 = -1 0 S7 =A0 –A2= 1 -1 5 6 -1 0 אלגוריתם שטראסן
P1 P2 P3 P4 P5 P6 P7 -2 3 25 20 14 16 7 3 30 30 28 22 -1 0 -4 6 35 28 29 34 14 6 60 60 14 11 -1 0 2 1 3 4 3 4 1 2 4 2 3 5 2 2 3 4 1 2 1 2 4 3 2 1 3 3 2 4 5 4 3 3 -2 3 25 20 30 30 7 3 23 23 25 20 + - 40 35 28 22 + + P5 + P4 – P2 + P6 P1 + P2 -4 6 35 28 60 60 14 6 31 34 35 28 53 49 14 11 7 3 14 16 21 19 + 30 30 14 16 -2 3 -1 0 15 17 - P3 + P4 - + P5 + P1 – P3 - P7 14 6 29 34 43 40 60 60 29 34 -1 0 -4 6 28 32 אלגוריתם שטראסן
וולקר שטראסן שאלות ? Mail: Oskar-Pletsch-Strassen D-01324 Dresden Telephone: ++49 351 2666942 Fax: ++49 351 2666664 E-Mail: volker.strassen@t-online.de אלגוריתם שטראסן