דוגמה לשיפור סיבוכיות בסדר גודל עבור פתרון בעיה במערך דו-ממדי
Transcription
דוגמה לשיפור סיבוכיות בסדר גודל עבור פתרון בעיה במערך דו-ממדי
- 40 - ד"ר נוע רגוניס מכללת בית ברל יתרונות הצגת הבעיה ופתרונה מבוא • בהוראת סיבוכיות של אלגוריתמים אנחנו מדברים על בדרך כלל איננו עוסקים בבעיות של מערכים דו- שיפור בסדר גודל ,אך לא מציגים דוגמאות רבות מימדיים בתחום הערכת הסיבוכיות ,פרט מן המעידות על שיפורים מסוג זה. העובדה הבסיסית שסריקת מערך דו-מימדי הבעיות הקלאסיות אותן אנו מציגים בדרך כלל היא בסיבוכיות של ).O(n2 מופיעות בטבלה המצורפת למטה. • מאמר זה מציג בעיה המתייחסת למערך דו-מימדי וידון מערך דו-מימדי. בשני פתרונות המראים שיפור בסיבוכיות בסדר גודל. הבעיה במערך הגדולים מכל הערכים הנמצאים בשורה שלהם ובעמודה שלהם. הבעיה חיפוש מחלק של מספר • הפתרונות המוצגים מראים שיפור בסדר גודל. • הייצוג הגראפי של ניתוח הסיבוכיות ,יכול לשמש דגם לניתוח סיבוכיות של אלגוריתמים. כתוב אלגוריתם המקבל מערך Aדו-מימדי של מספרים בגודל ,N*Mומחזיר את מספר הערכים הבעיה דורשת מיומנויות טיפול באינדקסים של בהמשך נציג שני פתרונות .בפתרון ,1עבור כל תא במערך ייבדק התנאי :האם הערך שבו גדול מכל הערכים שבשורה שלו ,וגם גדול מכל הערכים שבעמודה שלו .אם התנאי מתקיים יקודם המונה. בפתרון ,2עבור כל שורה במערך ימצא הערך המקסימאלי בשורה ותישמר בהתאמה גם העמודה שלו .עבור המקסימאלי שנמצא בשורה ,תיסרק כל העמודה שלו וייבדק התנאי :האם הוא גדול מכל הערכים בעמודה זו .אם התנאי מתקיים יקודם המונה. הפתרון די לחפש עד לשורש של המספר שיפור בסיבוכיות מO(n) - לO(√n) - למשל ,בבדיקה האם מספר הוא ראשוני חיפוש ערך במערך ממוין שימוש בחיפוש בינארי במקום חיפוש לינארי מO(n) - מיון מערך מיון בשיטה של מיון-מיזוג במקום שיטות המיון הקלאסיות מ O(n2) -לO(nlog2n) - הבטים בהוראת מדעי המחשב – ינואר 2006 לO(log2n) - - 41 - פתרון 1 הרעיון לפתרון עבור כל תא במערך ייבדק התנאי :האם הערך שבו גדול מכל הערכים שבשורה שלו ,וגם גדול מכל הערכים שבעמודה שלו .אם התנאי מתקיים יקודם המונה. האלגוריתם לפתרון מספר-גדולים-בשורה-ובעמודה )(A, N, M } הפעולה מקבלת מערך Aדו-מימדי של מספרים ,ובו Nשורות ו M -עמודות. { } הפעולה מחזירה את מספר הערכים במערך הגדולים מכל הערכים בשורה שלהם { } ומכל הערכים בעמודה שלהם. { } – Counterמונה מספר הערכים המקיימים את התנאי { } – Okדגל ,ערכו trueאם האיבר התורן מקיים את התנאי ,וערכו falseאחרת { } – Iמציין שורה – J ,מציין עמודה – k ,מציין סריקה לעמודה ואח"כ לשורה { Counter ³ 0 (1 (2עבור Iמ 1 -עד Nבצע סריקת המערך הדו-מימדי, האיבר לבדיקה ]A [I, J (2.1עבור Jמ 1 -עד Mבצע (2.1.1 (2.1.2 Ok ³ true K ³ 1 (2.1.3 כל עוד ) (K ≤Mוגם ) (Okבצע (2.1.3.1אם ] A[I, J] < A[I, Kאזי Ok ³ false (2.1.3.1.1 בדיקה על פני השורה I (2.1.3.2אחרת K ³ K + 1 (2.1.3.2.1 K ³ 1 (2.1.4 (2.1.5כל עוד ) (K ≤Nוגם ) (Okבצע (2.1.5.1אם ] A[I, J] < A[K, Jאזי בדיקה על פני העמודה J Ok ³ false (2.1.5.1.1 (2.1.5.2אחרת K ³ K + 1 (2.1.5.2.1 (2.1.6אם Okאזי Counter ³ Counter + 1 (2.1.6.1 (3החזר Counter הבטים בהוראת מדעי המחשב – ינואר 2006 - 42 - הערכת סיבוכיות הפתרון על מנת להעריך את סיבוכיות האלגוריתם ,נוריד ממנו את כל הפעולות שהן בסדר גודל ) ,O(1ונשאר עם מבנה הלולאות .יש לשים דגש כמובן על קינון הלולאות. לולאה על N שורות )O(n (2עבור Iמ 1 -עד Nבצע לולאה על M עמודות )O(n (2.1עבור Jמ 1 -עד Mבצע לולאה על השורה I Mעמודות )O(n לולאה על העמודה J Nשורות )O(n (2.1.2 K ³ 1 (2.1.3 כל עוד ) (K ≤Mוגם ) (Okבצע K ³ 1 (2.1.4 (2.1.5כל עוד ) (K ≤Nוגם ) (Okבצע כלומר: )O(n )O(n )O(n ⇐ )O(n ולכן הסיבוכיות היא )o(n3 (n + n) * n * n הבטים בהוראת מדעי המחשב – ינואר 2006 - 43 - פתרון 2 הרעיון לפתרון עבור כל שורה במערך ימצא הערך המקסימאלי בשורה ותישמר בהתאמה גם העמודה שלו .עבור המקסימאלי שנמצא בשורה ,תיסרק כל העמודה שלו וייבדק התנאי :האם הוא גדול מכל הערכים בעמודה זו .אם התנאי מתקיים יקודם המונה. האלגוריתם לפתרון מספר-גדולים-בשורה-ובעמודה )(A, N, M } הפעולה מקבלת מערך Aדו-מימדי של מספרים ,ובו Nשורות ו M -עמודות. { } הפעולה מחזירה את מספר הערכים במערך הגדולים מכל הערכים בשורה שלהם { } ומכל הערכים בעמודה שלהם. { } – Counterמונה מספר הערכים המקיימים את התנאי { } – Okדגל ,ערכו trueאם נערכים בעמודה מקיימים את התנאי ,וערכו falseאחרת { } – Maxערך מקסימלי בשורה ה – colMax ,I -העמודה של הערך המקסימלי בשורה I { } – Iמציין שורה – J ,מציין עמודה – k ,מציין סריקה לשורות { Counter ³ 0 (1 סריקת שורות המערך הדו-מימדי (2עבור Iמ 1 -עד Nבצע ColMax ³ 1 (2.1 Max ³ A[I, 1] (2.2 (2.3עבור Jמ 2 -עד Mבצע (2.3.1אם ] Max < A[I, Jאזי ColMax ³ J (2.3.1.1 Max ³ A[I, J] (2.3.1.2 סריקת השורה I למציאת הערך המקסימלי, שיושם ב,Max - ומספר העמודה שלו יושם בColMax - Ok ³ true (2.4 K ³ 1 (2.5 (2.6כל עוד ) (K≤Nוגם ) (Okבצע (2.6.1אם ] Max < A[K, colMaxאזי Ok ³ false (2.6.1.1 (2.6.2אחרת K ³ K + 1 (2.6.2.1 (2.7אם Okאזי Counter ³ Counter + 1 (2.7.1 (3החזר Counter הבטים בהוראת מדעי המחשב – ינואר 2006 סריקת העמודה ColMax לבדיקה האם אין ערך גדול מ Max -בעמודה זו - 44 - הערכת סיבוכיות הפתרון על מנת להעריך את סיבוכיות האלגוריתם ,נוריד ממנו את כל הפעולות שהן בסדר גודל ) ,O(1ונשאר עם מבנה הלולאות .יש לשים דגש כמובן על קינון הלולאות. לולאה על N שורות )O(n (2עבור Iמ 1 -עד Nבצע לולאה על השורה I ) (M-1עמודות )O(n (2.3עבור Jמ 2 -עד Mבצע לולאה על העמודה ColMax Nשורות )O(n K ³ 1 (2.5 (2.6כל עוד ) (K≤Nוגם ) (Okבצע כלומר: )O(n )O(n ⇐ )O(n ולכן הסיבוכיות היא )o(n2 (n + n) * n הראנו שיפור בסיבוכיות מ O(n3) -לO(n2) - הבטים בהוראת מדעי המחשב – ינואר 2006