- 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
© Copyright 2025