Upload
vance-wilson
View
30
Download
0
Embed Size (px)
DESCRIPTION
תירגול 10: סיבוכיות. תוכנייה. ניתוח סיבוכיות ניתוח סיבוכיות של תוכניות ניתוח סיבוכיות של אלגוריתמים שאלות ממבחנים. ניתוח סיבוכיות. סיבוכיות של תוכנית. - PowerPoint PPT Presentation
Citation preview
המחשב למדעי מבואסיבוכיות: 10תירגול
10מבוא למדעי המחשב מ' - תירגול 1
2
תוכנייה
10מבוא למדעי המחשב מ' - תירגול
סיבוכיות • ניתוחתוכניות – של סיבוכיות ניתוחאלגוריתמים – של סיבוכיות ניתוח
ממבחנים • שאלות
3
ניתוח סיבוכיות
10מבוא למדעי המחשב מ' - תירגול
4
סיבוכיות של תוכנית
הזמן • פונקציה סיבוכיות היא אלגוריתם עבורה fשלחיובי שלם של f(n)הערך nלכל המירבי המספר הוא
באורך קלט על מבצע שהאלגוריתם בסיסיים nצעדים• , דומה זיכרון באופן היא סיבוכיות אלגוריתם של
חיובי fפונקציה שלם לכל הוא f(n)הערך nעבורהזמנית בו דורש שהאלגוריתם בתים של המירבי המספר
באורך קלט על הספציפי nלריצה במחשב תלויה דורשת שתוכנית האמיתית המשאבים כמות. רצה היא עליו
, ולא הקלט באורך כתלות שלהם גודל בסדר מעוניינים אנו לכן. המדויקים בגדלים
5
ניתוח סיבוכיות
ידרשו • אלגוריתם או תוכנית מסויים קלט שעבור להיות יכולמאשר משאבים פחות ' f(n)הרבה אותנו, שמעניין המס אבל
עבור ביותר הוא הגרוע בגודל( worst case)המצב .nלקלטדוגמא:•
של הזמן באורך Bubble Sortסיבוכיות מערך :nעלהיא – הזמן סיבוכיות ממוין O(n)לקלטהיא – הזמן סיבוכיות עבורו קלט (O(n2)קיים הפוך ) בסדר ממוין למשל
זמן • סיבוכיות ביותר הגרוע הריצה בזמן מעוניינים שאנחנו כיווןהוא האלגוריתם של O(n2)הריצה
6
כתיב אסימפטוטי
• , היא: פונקציה איזו פונקציות זוגות עבור של Oתרגילהיא? פונקציה איזו ?Θהשנייה השנייה של
g(n) f(n)n3 n2
n3 1000n2
1000n n2n+100 n∙ 3n+2n
f(n)=O(g(n))
f(n)=O(g(n))
g(n)=O(f(n))
שהכפלה לב שימואת משנה לא בקבוע
הפונקציות בין הקשר
בכל ביותר הגדול האיברהוא מהביטויים אחד
ביניהם היחס את שקובע
f(n)=Θ(g(n))
7
כתיב אסימפטוטי
• , היא: פונקציה איזו פונקציות זוגות עבור של Oתרגילהיא? פונקציה איזו ?Θהשנייה השנייה של
g(n) f(n)n log2nn log2n+nn1/2 log2nn nlog2nn nlog2n+n
f(n)=O(g(n))
f(n)= Θ(g(n))
f(n)=O(g(n))
g(n)=O(f(n))
g(n)=O(f(n))
f(n)=O(g(n))מתקיים: g(n)=O(f(n))וגם
נוסחאות שכדאי לדעת כשמחשבים סיבוכיות
10מבוא למדעי המחשב מ' - תירגול 8
)(log1
...3
1
2
1
1
11
1
nni
n
i
)(...321 1
1
kkkkkn
i
k nni log log( ) log( )a b a b
log log( )ba b a
1
1 1 1 1... ( )
2 4 82 2
n
i ni
nn n
1ניתוח סיבוכיות של תוכנית- דוגמא
זמן מה • הפונקציה סיבוכיות של -fהריצה ב רשמו? nכתלות. ביותר הפשוט הביטוי את
10מבוא למדעי המחשב מ' - תירגול 9
int f (int n){ int x=50000; if (n<x) return 0; for (int i=0; i<n; i++){
int y = 3;printf(“%d\n”,i+y);
}}
מתבצעת nהלולאהפעמים
היא הזמן Θ(n)סיבוכיות
1ניתוח סיבוכיות של תוכנית- דוגמא
המקום מה • הפונקציה סיבוכיות של -fהריצה ב ?nכתלות
10מבוא למדעי המחשב מ' - תירגול 10
int f (int n){ int x=50000; if (n<x) return 0; for (int i=0; i<n; i++){
int y = 3;printf(“%d\n”,i+y);
}}
מערכים הקצאות איןדינאמיות הקצאות ואין
המקום Θ(1)סיבוכיות
2ניתוח סיבוכיות של תוכנית- דוגמא
במערך)( f1הפונקציה • איבר במערך aמחפשת גם bשנמצאהפונקציה • של הריצה זמן סיבוכיות -f1מה ב ?nכתלות
2מבוא למדעי המחשב מ' - תירגול 11
int f1(int a[], int b[], int n) { for(int i=0; i < n; i++) { for(int j = 0; j < n; j++) if(a[i] == b[j]) return i; } return -1; }
הפנימית הלולאהלכל nמתבצעת פעמים
היותר
החיצונית הלולאהלכל nמתבצעת פעמים
היותר
זמן Θ(n2)סיבוכיות
היותר לכל את n2מבצעים פעמים- ב איבר בין ההשוואה לאיבר aפעולת
.bב-
3ניתוח סיבוכיות של תוכנית- דוגמא
את • -nהחלפנו .iב הפנימית בלולאההפונקציה • של הריצה זמן סיבוכיות -f1מה ב ?nכתלות כעת
2מבוא למדעי המחשב מ' - תירגול 12
int f1(int a[], int b[], int n) { for(int i=0; i < n; i++) { for(int j = 0; j < i; j++) if(a[i] == b[j]) return i; } return -1; }
הפנימית הלולאהלכל iמתבצעת פעמים
היותר
החיצונית הלולאהלכל nמתבצעת פעמים
היותר
3ניתוח סיבוכיות של תוכנית- דוגמא
הפונקציה • של הריצה זמן סיבוכיות -f1מה ב ?nכתלות• ' הלולאה של איטרציה בכל הבסיסיות הפעולות מס את נספור
החיצונית:
10מבוא למדעי המחשב מ' - תירגול 13
של' איטרציה מסהחיצונית הלולאה
בסיסיות' פעולות מסזו באיטרציה
1 1
2 23 3
... ...i i
… …n n
זמן Θ(n2)סיבוכיות
' מס סכום הוא הכולל הריצה זמן: איטרציה בכל הפעולות
4ניתוח סיבוכיות של תוכנית- דוגמא
-f2הפונקציה • ' ב אותו ומחלקת טיבעי מס עד 2מקבלת1שמתקבל
הפונקציה • של הריצה זמן סיבוכיות -f2מה ב ?nכתלות
10מבוא למדעי המחשב מ' - תירגול 14
void f2(int n) { while( n > 1) if(n % 2) n /= 2; else n += 1; }
מתבצעת פעמים כמההלולאה?
4ניתוח סיבוכיות של תוכנית- דוגמא
של nאם • חזקה ?2הוא הלולאה, תתבצע פעמים כמהעל • :n=32נדגים
' ' לחלק שצריך הפעמים מס הוא האיטרציות שמס קיבלנו-nאת שמקבלים 2ב .log2nשהוא, 1עד
. כללית מתמטית בצורה זאת לקבל כיצד כעת נראה10מבוא למדעי המחשב מ' - תירגול 15
void f2(int n) { while( n > 1)
if(n % 2) n /= 2; else n += 1; }
איטרציה' מס של בתחילת nהערךהאיטרציה
1 32
2 163 8
4 45 2
4ניתוח סיבוכיות של תוכנית- דוגמא
של nאם • חזקה ?2הוא הלולאה, תתבצע פעמים כמה•: כללי באופן
•? תיעצר הלולאה מתי10מבוא למדעי המחשב מ' - תירגול 16
void f2(int n) { while( n > 1)
if(n % 2) n /= 2; else n += 1; }
איטרציה' מס של בתחילת nהערךהאיטרציה
1 n
2 n/2
3 n/(22)
4 n/(23)
… …k n/(2k-1)
4ניתוח סיבוכיות של תוכנית- דוגמא
של • הערך הוא הלולאה של האיטרציות nשעבורו kמספר . התנאי את מקיים לא כבר המתקבל
•: הבאה המשוואה את נקבל שלנו במקרה
של nעבור • חזקה ' 2שהוא שמס קיבלנוהוא ' log2nהאיטרציות מס ) הגדרה לפי שהוא
את לחלק שצריך -nהפעמים שמקבלים 2ב (1עד17
void f2(int n) { while( n > 1)
if(n % 2) n /= 2; else n += 1; }
עבור זמן של n סיבוכיות חזקה Θ(log2n): 2שהוא
1 2 log( )2
kk
nn k n
4ניתוח סיבוכיות של תוכנית- דוגמא
לגבי • של nמה חזקה ?2שאינו הלולאה, תתבצע פעמים כמהעל • :n=21נדגים
10מבוא למדעי המחשב מ' - תירגול 18
void f2(int n) { while( n > 1)
if(n % 2) n /= 2; else n += 1; }
איטרציה' מס של בתחילת nהערךהאיטרציה
1 21
2 223 11
4 12
5 66 38 49 2
4ניתוח סיבוכיות של תוכנית- דוגמא
• , נכנסנו מסויימת באיטרציה שאם לב נשים הכללי במקרה-elseל- ל, נכנס הבאה באיטרציה .ifבהכרח
שאחרי • לב נשים כן האלה 2כמו קטן nהאיטרציות. בחצי כמעט
• , שתיים פי לנו יהיו ביותר הגרוע במקרה כן אם ' את לחלק שצריך הפעמים מס מאשר nאיטרציות
-2ב- ' מ הקטן מס שנקבל .1עדל • שווה או קטן הריצה זמן הכל סך .log2n∙2כלומר
19
void f2(int n) { while( n > 1)
if(n % 2) n /= 2; else n += 1; } הוא הכללי במקרה זמן Θ(log2n)סיבוכיות
4ניתוח סיבוכיות של תוכנית- דוגמא
•- ב לחלק במקום אם הסיבוכיות משתנה הייתה היינו 2כיצד- ב ? 3מחלקים
20
void f2(int n) { while( n > 1) if(n % 2) n /= 2; else n += 1; }
5ניתוח סיבוכיות של תוכנית- דוגמא
לולאות f3הפונקציה • סדרת ומבצעת טיבעי מספר מקבלתריקות.
של • הריצה זמן סיבוכיות -f3מה ב ?nכתלות
2מבוא למדעי המחשב מ' - תירגול 21
void f3(int n) { int m=1;
for(int i = 0; i < n; i++) m *= n;
while( m > 6) m /= 3; }
מתבצעת פעמים כמההלולאה?
היינו: אם מה רמזאם ?m>1בודקים
מתבצעת nהלולאהפעמים.
למה הראשונה הלולאה בסוףהראשונה ?mשווה הלולאה בסוףm=nn
בסדר הוא הכולל הריצה זמןסדר גודל: מתבצעת הלולאה
של פעמים log3mגודל
זמן Θ(nlogn)סיבוכיות
6ניתוח סיבוכיות של תוכנית- דוגמא
של • הריצה זמן סיבוכיות -f4מה ב ?nכתלות
2מבוא למדעי המחשב מ' - תירגול 22
int f4(int n) { int k=1, count = 0; for(int i = 0; i < n; i++) { k *= 3; for(int j = k; j; j /= 2) count++; } return count;}
מתבצעת logkהלולאהפעמים.
שווה בכל kלמהאיטרציה?
6ניתוח סיבוכיות של תוכנית- דוגמא
עבור • :n=6נדגים
2מבוא למדעי המחשב מ' - תירגול 23
int f4(int n) { int k=1, count = 0; for(int i = 0; i < n; i++) { k *= 3; for(int j = k; j; j /= 2) count++; } return count;}
מס' איטרציה
של kהערך של' איטרציות מסהפנימית הלולאה
1 3 log3
2 9 log9=2log3
3 27 log27=3log3
4 81 log81=4log3
5 243 log243=5log3
6 729 log729=6log3
6ניתוח סיבוכיות של תוכנית- דוגמא
של • הריצה זמן סיבוכיות -f4מה ב ?nכתלות
2מבוא למדעי המחשב מ' - תירגול 24
int f4(int n) { int k=1, count = 0; for(int i = 0; i < n; i++) {
k *= 3; for(int j = k; j; j /= 2) count++; } return count;}
זמן Θ(n2)סיבוכיות
:nעבור הוא הריצה שזמן נקבל
ניתוח סיבוכיות של תוכניות- סיכום
• - והקצאות מערכים של בהקצאות שימוש חפשו מקום סיבוכיות.) - רקורסיה ) גם בהמשך דינמיות
•. - מבצעות הן איטרציות כמה ובדקו לולאות חפשו זמן סיבוכיות•. הקלט בגודל התלוי הריצה זמן עבור ביטוי חפשו• ) לביטוי ) קרוב הכי אסימפטוטי בכתיב ביטוי איזה העריכו
שמצאתם.•. מוכרות בנוסחאות השתמשו
10מבוא למדעי המחשב מ' - תירגול 25
26
ניתוח סיבוכיות של אלגוריתמים
10מבוא למדעי המחשב מ' - תירגול
ניתוח סיבוכיות של אלגוריתם- דוגמא
של • הסיבוכיות לניתוח דוגמה עתה הקוד, אלגוריתםנביא פירוט ללא. אותו שמממש
• : של הבעיה אפשריים פתרונות מספר לה שיש בבעיה קבוצות נדון ייצוג. אלה קבוצות על פעולות וביצוע
• ! היתרונות יהיו פתרון לכל נכון אחד מפתרון יותר יש כי נראה אנו , להשתמש פתרון באיזה דבר של בסופו והבחירה שלו היחסיים והחסרונות
. חישוב משאבי מבחינת שלנו העדיפויות בסדר תלויההוא, • מאוד נפוץ מצב וזמן למשל זיכרון משאבי בין כי. מאזן נראה אנו
, לחילופין או זיכרון יותר לנו יש כאשר יותר מהר הבעיה את לפתור ניתן. יותר ארוך ריצה זמן חשבון על בזיכרון לחסוך
10מבוא למדעי המחשב מ' - תירגול 27
ייצוג קבוצות
(, קבוצה • בין ) סדר ללא שלמים מספרים שלנו במקרה איברים של אוסף הינהבהכרח. בקבוצה האיברים , שונים האיברים שאותו ייתכן לא כלומר מזה זה
." פעמיים " בקבוצה יופיע איברהקבוצה • .גודל מכילה שהיא האיברים מספר הואריקה • (.קבוצה אפס ) גודלה כלל איברים מכילה שאינה קבוצה היא• , את עליהן לבצע מסוגלים ולהיות במחשב קבוצות לייצג אפשרות נרצה אנו
: הבאות הפעולותלקבוצה – איברים להוסיףמהקבוצה – איברים להוציאבקבוצה – נמצא מסוים איבר אם לבדוקחדשה – אחת לקבוצה קבוצות שתי למזג
10מבוא למדעי המחשב מ' - תירגול 28
23
-5
31
9
0
92 1
1קבוצות במחשב- אופציה
•? במחשב שלמים מספרים של קבוצה נייצג כיצדהאיברים :1אופציה• כל את .במערךנאחסןהיותר, • לכל מכילות שלנו שהקבוצות נניח אנו .Nמעשית איברים
המקסימאלי בגודל מראש המערך את נקצה המערך, Nאנו אברי ואת. המערך בתחילת נאחסן
, נניח נוסף במשתנה האברים, Xנעזר מספר את לציין מנת על- ה, במקומות יהיו לפיכך הקבוצה ואברי -0בקבוצה ה .X-1ועד במערך
• , את נבצע כיצד קבוצות ייצוג של זו בחירה ? 4עבור שהגדרנו הפעולות? כזו פעולה כל של הסיבוכיות ומה
10מבוא למדעי המחשב מ' - תירגול 29
1קבוצות במחשב- אופציה
את • :האלגוריתם נתאר הפעולות מן אחת כל לביצוע
10מבוא למדעי המחשב מ' - תירגול 30
: לקבוצה איבר הוספת.1. סופו ועד מתחילתו המערך את סרוק.2 , המערך בסוף אותו כתוב האיבר נמצא לא אם
בהתאם המערך גודל את ועדכן
זמן Θ(n)סיבוכיות
: מהקבוצה איבר הסרת.1. סופו ועד מתחילתו המערך את סרוק
, שאחריו האיברים כל את הזז האיבר נמצא אם. , האיבר דריסת תוך אחורנית אחד מקום במערך
זמן Θ(n)סיבוכיות
1קבוצות במחשב- אופציה
10מבוא למדעי המחשב מ' - תירגול 31
: בקבוצה איבר מציאת.1. סופו ועד מתחילתו המערך את סרוקהחזר 2. האיבר נמצא החזר, 1אם 0אחרת
זמן Θ(n)סיבוכיות
:2מיזוג קבוצות .1. היעד למערך הראשון המערך תוכן את העתק
, . - איבר לכל איבר איבר השני המערך את סרוק, , בו נמצא לא הוא ואם הראשון במערך אותו חפש
, . ללא המשך אחרת היעד למערך האיבר את כתוב. ליעד האיבר כתיבת
זמן Θ(nסיבוכיות m)∙
אחד מערך גודל נניחהוא mהוא nוהשני
2קבוצות במחשב- אופציה
•? במחשב שלמים מספרים של קבוצה נייצג כיצדבאופציה :2אופציה • כמו במערך הקבוצה אברי את , 1נאחסן
אותם נאחסן .ממויניםאך• , של הסיבוכיות את משמעותית משפר זה שינוי שנראה כפי
. הקבוצות על מבצעים שאנו הפעולות
10מבוא למדעי המחשב מ' - תירגול 32
2קבוצות במחשב- אופציה
את • :האלגוריתם נתאר הפעולות מן אחת כל לביצוע
10מבוא למדעי המחשב מ' - תירגול 33
: לקבוצה איבר הוספת.1 , - שנמצא עד איבר איבר המערך את סרוק
כך החדש האיבר את להוסיף יש בו המקום. ממוין יישאר שהמערך
אחד 2. מקום במערך הנותרים האיברים כל את הזז , במקום החדש האיבר את וכתוב קדימה
שהתפנה.
זמן Θ(n)סיבוכיות
: מהקבוצה איבר הסרת.1. בינארי חיפוש באמצעות האיבר את חפש.2 , שאחריו האיברים כל את הזז האיבר נמצא אם
. , האיבר דריסת תוך אחורנית אחד מקום במערך
זמן Θ(n)סיבוכיות
2קבוצות במחשב- אופציה
10מבוא למדעי המחשב מ' - תירגול 34
: בקבוצה איבר מציאת.1. בינארי חיפוש באמצעות האיבר את חפשהחזר 2. האיבר נמצא החזר, .1אם 0אחרת
זמן Θ(logn)סיבוכיות
:2מיזוג קבוצות פונקצית 1. .mergeבאמצעות זמן שלמדנו Θ(n+m)סיבוכיות
3קבוצות במחשב- אופציה
•? במחשב שלמים מספרים של קבוצה נייצג כיצד•. למדי שונה במחשב קבוצה לייצוג השלישית האופציה• , בקבוצה לאחסן רוצים שאנו האיברים כי נניח אנו זה בייצוג
בטווח .בלבד k-1…0הינםבגודל • כמערך הקבוצה את -kנייצג ה. יכיל iהתא אם 1במערך
-iהמספר , ו בקבוצה .0נמצא בקבוצה נמצא אינו אםהמספרים, • את מכילה שלנו הקבוצה אם - 2,3למשל אזי 5ו
- 2,3התאים יכילו 5ו יכילו, 1במערך 0והיתר
10מבוא למדעי המחשב מ' - תירגול 35
0 00 11 1 0 00
3קבוצות במחשב- אופציה
את • :האלגוריתם נתאר הפעולות מן אחת כל לביצוע
10מבוא למדעי המחשב מ' - תירגול 36
: לקבוצה איבר הוספת.1 - ב במערך המתאים התא את זמן .1סמן Θ(1)סיבוכיות
: מהקבוצה איבר הסרת.1 - ב במערך המתאים התא את זמן .0סמן Θ(1)סיבוכיות
בקבוצה : איבר מציאת.1 , מכיל הוא אם במערך המתאים התא את 1בדוק
החזר, 1החזר .0אחרתזמן Θ(1)סיבוכיות
3קבוצות במחשב- אופציה
• ! היכן מאוד יעיל באופן מתבצעות הפעולות רוב זה באלגוריתםהמלכוד?
תופש, • מערך שכל הוא המלכוד , בזיכרון kגודל ובכן אם. לפיכך . על – ואולם הרווחנו קטן הוא לאחסן רוצים שאנו האיברים טווח
, זיכרון בתצרוכת נשלם ואז המצב זה אין רוב מאוד פי .גדולה
10מבוא למדעי המחשב מ' - תירגול 37
:2מיזוג קבוצות .1 . נמצא בו תא בכל הראשון המערך את , 1סרוק
.1כתוב היעד במערך המתאים למקום.2 . נמצא בו תא בכל השני המערך את , 1סרוק
.1כתוב היעד במערך המתאים למקום
זמן Θ(k)סיבוכיות
3קבוצות במחשב-
1אופציה 2אופציה 3אופציה
איבר הוספת Θ(n) Θ(n) Θ(1)
איבר הסרת Θ(n) Θ(n) Θ(1)
איבר חיפוש Θ(n) Θ(logn) Θ(1)
קבוצות מיזוג Θ(n m)∙ Θ(n+m) Θ(k)
זיכרון Θ(n) Θ(n) Θ(k)
10מבוא למדעי המחשב מ' - תירגול 38
39
ניתוח סיבוכיות- שאלות ממבחנים
10מבוא למדעי המחשב מ' - תירגול
, מועד ב'2010ניתוח סיבוכיות – אביב
2מבוא למדעי המחשב מ' - תירגול 40log (𝑛 )1
, מועד ב'2010ניתוח סיבוכיות – אביב
2מבוא למדעי המחשב מ' - תירגול 41𝑛1
42
, מועד ב'2010מערכים – אביב
43
, מועד ב' )פתרון(2010מערכים – אביב
•: לב נשים– , נעמוד לא השורות כל על אפילו או האיברים כל על נעבור אם
. הזמן בסיבוכיות– , שורה באותה נחפש ואז המתאימה השורה את למצוא קודם ננסה
. האיבר את
הגישה:•–. המתאימה השורה עבור בינארי חיפוש נבצע–. , האיבר אחר שורה באותה נחפש מכן לאחר
10מבוא למדעי המחשב מ' - תירגול
44
, מועד ב' )פתרון(2010מערכים – אביב
קצה • מקרי כמה על :נסתכל
10מבוא למדעי המחשב מ' - תירגול
top
bottom
middle
x = 33
45
, מועד ב' )פתרון(2010מערכים – אביב
קצה • מקרי כמה על :נסתכלa[middle][0]<xכאשר –
קטנים middle השורה אחריידוע כי כל איברי השורות ש– bottom. לכן ניתן להזיז את xממש מ-
.middleל-.middle עדיין יכול להיות בשורה שהיתה xנשים לב כי –
10מבוא למדעי המחשב מ' - תירגול
top
bottommiddle
x = 33
46
, מועד ב' )פתרון(2010מערכים – אביב
קצה • מקרי כמה על :נסתכלa[middle][0]>xכאשר –
ידוע כי כל איברי השורות שקודמות לשורה –. לכן ניתן לקדם את x גדולים ממש מ-middleה-
top-ל middle..middle עדיין יכול להיות בשורת xנשים לב כי –
10מבוא למדעי המחשב מ' - תירגול
bottom
middle
x = 33
top
47
, מועד ב' )פתרון(2010מערכים – אביב
קצה • מקרי כמה על :נסתכל
כאשר נישאר עם שתי שורות, לא ניתן לדעת להיכן – ע"י הסתכלות על האיבר הראשון xשייך
בלבד.אך כעת ניתן לעבור על שתי השורות ולמצוא את –
.האיבר בסיבוכיות 10מבוא למדעי המחשב מ' - תירגול
bottom
x = 33
top
48
, מועד ב' )פתרון(2010מערכים – אביב
10מבוא למדעי המחשב מ' - תירגול
int find2d(int a[N*N][N], int x, int *i, int *j){ int row = <find-top-two-rows-using-binary-search;>
return <search-in-top-line> || <search-in-bottom-line;>}
49
, מועד ב' )פתרון(2010מערכים – אביב
10מבוא למדעי המחשב מ' - תירגול
int find2d(int a[N*N][N], int x, int *i, int *j){ int row = findRow(a,x);
return searchInLine(a,row,x,i,j) || searchInLine(a,row+1,x,i,j);}
int searchInLine(int a[N*N][N], int row, int x, int *i, int *j){ for (int k = 0; k < N; k++){
if (a[row][k] == x){ * i = row;
* j = k; return 1;
} }
return 0;}
50
, מועד ב' )פתרון(2010מערכים – אביב
10מבוא למדעי המחשב מ' - תירגול
int findRow(int a[N*N][N], int x){ int top = 0, bottom = N*N-1;
while (top != bottom - 1){ int middleRow = top + (bottom - top)/2 + (bottom - top)%2;
if (a[middleRow][0] > x) top = middleRow;
else bottom = middleRow;
} return top;
}