50
בבבב בבבבב בבבבב בבבבבב10 : בבבבבבבב1 בבבבבב- ' בבבב בבבבב בבבבב ב10

תירגול 10: סיבוכיות

Embed Size (px)

DESCRIPTION

תירגול 10: סיבוכיות. תוכנייה. ניתוח סיבוכיות ניתוח סיבוכיות של תוכניות ניתוח סיבוכיות של אלגוריתמים שאלות ממבחנים. ניתוח סיבוכיות. סיבוכיות של תוכנית. - PowerPoint PPT Presentation

Citation preview

Page 1: תירגול  10: סיבוכיות

המחשב למדעי מבואסיבוכיות: 10תירגול

10מבוא למדעי המחשב מ' - תירגול 1

Page 2: תירגול  10: סיבוכיות

2

תוכנייה

10מבוא למדעי המחשב מ' - תירגול

סיבוכיות • ניתוחתוכניות – של סיבוכיות ניתוחאלגוריתמים – של סיבוכיות ניתוח

ממבחנים • שאלות

Page 3: תירגול  10: סיבוכיות

3

ניתוח סיבוכיות

10מבוא למדעי המחשב מ' - תירגול

Page 4: תירגול  10: סיבוכיות

4

סיבוכיות של תוכנית

הזמן • פונקציה סיבוכיות היא אלגוריתם עבורה fשלחיובי שלם של f(n)הערך nלכל המירבי המספר הוא

באורך קלט על מבצע שהאלגוריתם בסיסיים nצעדים• , דומה זיכרון באופן היא סיבוכיות אלגוריתם של

חיובי fפונקציה שלם לכל הוא f(n)הערך nעבורהזמנית בו דורש שהאלגוריתם בתים של המירבי המספר

באורך קלט על הספציפי nלריצה במחשב תלויה דורשת שתוכנית האמיתית המשאבים כמות. רצה היא עליו

, ולא הקלט באורך כתלות שלהם גודל בסדר מעוניינים אנו לכן. המדויקים בגדלים

Page 5: תירגול  10: סיבוכיות

5

ניתוח סיבוכיות

ידרשו • אלגוריתם או תוכנית מסויים קלט שעבור להיות יכולמאשר משאבים פחות ' f(n)הרבה אותנו, שמעניין המס אבל

עבור ביותר הוא הגרוע בגודל( worst case)המצב .nלקלטדוגמא:•

של הזמן באורך Bubble Sortסיבוכיות מערך :nעלהיא – הזמן סיבוכיות ממוין O(n)לקלטהיא – הזמן סיבוכיות עבורו קלט (O(n2)קיים הפוך ) בסדר ממוין למשל

זמן • סיבוכיות ביותר הגרוע הריצה בזמן מעוניינים שאנחנו כיווןהוא האלגוריתם של O(n2)הריצה

Page 6: תירגול  10: סיבוכיות

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))

Page 7: תירגול  10: סיבוכיות

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))וגם

Page 8: תירגול  10: סיבוכיות

נוסחאות שכדאי לדעת כשמחשבים סיבוכיות

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

Page 9: תירגול  10: סיבוכיות

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)סיבוכיות

Page 10: תירגול  10: סיבוכיות

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)סיבוכיות

Page 11: תירגול  10: סיבוכיות

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ב-

Page 12: תירגול  10: סיבוכיות

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מתבצעת פעמים

היותר

Page 13: תירגול  10: סיבוכיות

3ניתוח סיבוכיות של תוכנית- דוגמא

הפונקציה • של הריצה זמן סיבוכיות -f1מה ב ?nכתלות• ' הלולאה של איטרציה בכל הבסיסיות הפעולות מס את נספור

החיצונית:

10מבוא למדעי המחשב מ' - תירגול 13

של' איטרציה מסהחיצונית הלולאה

בסיסיות' פעולות מסזו באיטרציה

1 1

2 23 3

... ...i i

… …n n

זמן Θ(n2)סיבוכיות

' מס סכום הוא הכולל הריצה זמן: איטרציה בכל הפעולות

Page 14: תירגול  10: סיבוכיות

4ניתוח סיבוכיות של תוכנית- דוגמא

-f2הפונקציה • ' ב אותו ומחלקת טיבעי מס עד 2מקבלת1שמתקבל

הפונקציה • של הריצה זמן סיבוכיות -f2מה ב ?nכתלות

10מבוא למדעי המחשב מ' - תירגול 14

void f2(int n) { while( n > 1) if(n % 2) n /= 2; else n += 1; }

מתבצעת פעמים כמההלולאה?

Page 15: תירגול  10: סיבוכיות

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

Page 16: תירגול  10: סיבוכיות

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)

Page 17: תירגול  10: סיבוכיות

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

Page 18: תירגול  10: סיבוכיות

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

Page 19: תירגול  10: סיבוכיות

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)סיבוכיות

Page 20: תירגול  10: סיבוכיות

4ניתוח סיבוכיות של תוכנית- דוגמא

•- ב לחלק במקום אם הסיבוכיות משתנה הייתה היינו 2כיצד- ב ? 3מחלקים

20

void f2(int n) { while( n > 1) if(n % 2) n /= 2; else n += 1; }

Page 21: תירגול  10: סיבוכיות

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)סיבוכיות

Page 22: תירגול  10: סיבוכיות

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למהאיטרציה?

Page 23: תירגול  10: סיבוכיות

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

Page 24: תירגול  10: סיבוכיות

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עבור הוא הריצה שזמן נקבל

Page 25: תירגול  10: סיבוכיות

ניתוח סיבוכיות של תוכניות- סיכום

• - והקצאות מערכים של בהקצאות שימוש חפשו מקום סיבוכיות.) - רקורסיה ) גם בהמשך דינמיות

•. - מבצעות הן איטרציות כמה ובדקו לולאות חפשו זמן סיבוכיות•. הקלט בגודל התלוי הריצה זמן עבור ביטוי חפשו• ) לביטוי ) קרוב הכי אסימפטוטי בכתיב ביטוי איזה העריכו

שמצאתם.•. מוכרות בנוסחאות השתמשו

10מבוא למדעי המחשב מ' - תירגול 25

Page 26: תירגול  10: סיבוכיות

26

ניתוח סיבוכיות של אלגוריתמים

10מבוא למדעי המחשב מ' - תירגול

Page 27: תירגול  10: סיבוכיות

ניתוח סיבוכיות של אלגוריתם- דוגמא

של • הסיבוכיות לניתוח דוגמה עתה הקוד, אלגוריתםנביא פירוט ללא. אותו שמממש

• : של הבעיה אפשריים פתרונות מספר לה שיש בבעיה קבוצות נדון ייצוג. אלה קבוצות על פעולות וביצוע

• ! היתרונות יהיו פתרון לכל נכון אחד מפתרון יותר יש כי נראה אנו , להשתמש פתרון באיזה דבר של בסופו והבחירה שלו היחסיים והחסרונות

. חישוב משאבי מבחינת שלנו העדיפויות בסדר תלויההוא, • מאוד נפוץ מצב וזמן למשל זיכרון משאבי בין כי. מאזן נראה אנו

, לחילופין או זיכרון יותר לנו יש כאשר יותר מהר הבעיה את לפתור ניתן. יותר ארוך ריצה זמן חשבון על בזיכרון לחסוך

10מבוא למדעי המחשב מ' - תירגול 27

Page 28: תירגול  10: סיבוכיות

ייצוג קבוצות

(, קבוצה • בין ) סדר ללא שלמים מספרים שלנו במקרה איברים של אוסף הינהבהכרח. בקבוצה האיברים , שונים האיברים שאותו ייתכן לא כלומר מזה זה

." פעמיים " בקבוצה יופיע איברהקבוצה • .גודל מכילה שהיא האיברים מספר הואריקה • (.קבוצה אפס ) גודלה כלל איברים מכילה שאינה קבוצה היא• , את עליהן לבצע מסוגלים ולהיות במחשב קבוצות לייצג אפשרות נרצה אנו

: הבאות הפעולותלקבוצה – איברים להוסיףמהקבוצה – איברים להוציאבקבוצה – נמצא מסוים איבר אם לבדוקחדשה – אחת לקבוצה קבוצות שתי למזג

10מבוא למדעי המחשב מ' - תירגול 28

23

-5

31

9

0

92 1

Page 29: תירגול  10: סיבוכיות

1קבוצות במחשב- אופציה

•? במחשב שלמים מספרים של קבוצה נייצג כיצדהאיברים :1אופציה• כל את .במערךנאחסןהיותר, • לכל מכילות שלנו שהקבוצות נניח אנו .Nמעשית איברים

המקסימאלי בגודל מראש המערך את נקצה המערך, Nאנו אברי ואת. המערך בתחילת נאחסן

, נניח נוסף במשתנה האברים, Xנעזר מספר את לציין מנת על- ה, במקומות יהיו לפיכך הקבוצה ואברי -0בקבוצה ה .X-1ועד במערך

• , את נבצע כיצד קבוצות ייצוג של זו בחירה ? 4עבור שהגדרנו הפעולות? כזו פעולה כל של הסיבוכיות ומה

10מבוא למדעי המחשב מ' - תירגול 29

Page 30: תירגול  10: סיבוכיות

1קבוצות במחשב- אופציה

את • :האלגוריתם נתאר הפעולות מן אחת כל לביצוע

10מבוא למדעי המחשב מ' - תירגול 30

: לקבוצה איבר הוספת.1. סופו ועד מתחילתו המערך את סרוק.2 , המערך בסוף אותו כתוב האיבר נמצא לא אם

בהתאם המערך גודל את ועדכן

זמן Θ(n)סיבוכיות

: מהקבוצה איבר הסרת.1. סופו ועד מתחילתו המערך את סרוק

, שאחריו האיברים כל את הזז האיבר נמצא אם. , האיבר דריסת תוך אחורנית אחד מקום במערך

זמן Θ(n)סיבוכיות

Page 31: תירגול  10: סיבוכיות

1קבוצות במחשב- אופציה

10מבוא למדעי המחשב מ' - תירגול 31

: בקבוצה איבר מציאת.1. סופו ועד מתחילתו המערך את סרוקהחזר 2. האיבר נמצא החזר, 1אם 0אחרת

זמן Θ(n)סיבוכיות

:2מיזוג קבוצות .1. היעד למערך הראשון המערך תוכן את העתק

, . - איבר לכל איבר איבר השני המערך את סרוק, , בו נמצא לא הוא ואם הראשון במערך אותו חפש

, . ללא המשך אחרת היעד למערך האיבר את כתוב. ליעד האיבר כתיבת

זמן Θ(nסיבוכיות m)∙

אחד מערך גודל נניחהוא mהוא nוהשני

Page 32: תירגול  10: סיבוכיות

2קבוצות במחשב- אופציה

•? במחשב שלמים מספרים של קבוצה נייצג כיצדבאופציה :2אופציה • כמו במערך הקבוצה אברי את , 1נאחסן

אותם נאחסן .ממויניםאך• , של הסיבוכיות את משמעותית משפר זה שינוי שנראה כפי

. הקבוצות על מבצעים שאנו הפעולות

10מבוא למדעי המחשב מ' - תירגול 32

Page 33: תירגול  10: סיבוכיות

2קבוצות במחשב- אופציה

את • :האלגוריתם נתאר הפעולות מן אחת כל לביצוע

10מבוא למדעי המחשב מ' - תירגול 33

: לקבוצה איבר הוספת.1 , - שנמצא עד איבר איבר המערך את סרוק

כך החדש האיבר את להוסיף יש בו המקום. ממוין יישאר שהמערך

אחד 2. מקום במערך הנותרים האיברים כל את הזז , במקום החדש האיבר את וכתוב קדימה

שהתפנה.

זמן Θ(n)סיבוכיות

: מהקבוצה איבר הסרת.1. בינארי חיפוש באמצעות האיבר את חפש.2 , שאחריו האיברים כל את הזז האיבר נמצא אם

. , האיבר דריסת תוך אחורנית אחד מקום במערך

זמן Θ(n)סיבוכיות

Page 34: תירגול  10: סיבוכיות

2קבוצות במחשב- אופציה

10מבוא למדעי המחשב מ' - תירגול 34

: בקבוצה איבר מציאת.1. בינארי חיפוש באמצעות האיבר את חפשהחזר 2. האיבר נמצא החזר, .1אם 0אחרת

זמן Θ(logn)סיבוכיות

:2מיזוג קבוצות פונקצית 1. .mergeבאמצעות זמן שלמדנו Θ(n+m)סיבוכיות

Page 35: תירגול  10: סיבוכיות

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

Page 36: תירגול  10: סיבוכיות

3קבוצות במחשב- אופציה

את • :האלגוריתם נתאר הפעולות מן אחת כל לביצוע

10מבוא למדעי המחשב מ' - תירגול 36

: לקבוצה איבר הוספת.1 - ב במערך המתאים התא את זמן .1סמן Θ(1)סיבוכיות

: מהקבוצה איבר הסרת.1 - ב במערך המתאים התא את זמן .0סמן Θ(1)סיבוכיות

בקבוצה : איבר מציאת.1 , מכיל הוא אם במערך המתאים התא את 1בדוק

החזר, 1החזר .0אחרתזמן Θ(1)סיבוכיות

Page 37: תירגול  10: סיבוכיות

3קבוצות במחשב- אופציה

• ! היכן מאוד יעיל באופן מתבצעות הפעולות רוב זה באלגוריתםהמלכוד?

תופש, • מערך שכל הוא המלכוד , בזיכרון kגודל ובכן אם. לפיכך . על – ואולם הרווחנו קטן הוא לאחסן רוצים שאנו האיברים טווח

, זיכרון בתצרוכת נשלם ואז המצב זה אין רוב מאוד פי .גדולה

10מבוא למדעי המחשב מ' - תירגול 37

:2מיזוג קבוצות .1 . נמצא בו תא בכל הראשון המערך את , 1סרוק

.1כתוב היעד במערך המתאים למקום.2 . נמצא בו תא בכל השני המערך את , 1סרוק

.1כתוב היעד במערך המתאים למקום

זמן Θ(k)סיבוכיות

Page 38: תירגול  10: סיבוכיות

3קבוצות במחשב-

1אופציה 2אופציה 3אופציה

איבר הוספת Θ(n) Θ(n) Θ(1)

איבר הסרת Θ(n) Θ(n) Θ(1)

איבר חיפוש Θ(n) Θ(logn) Θ(1)

קבוצות מיזוג Θ(n m)∙ Θ(n+m) Θ(k)

זיכרון Θ(n) Θ(n) Θ(k)

10מבוא למדעי המחשב מ' - תירגול 38

Page 39: תירגול  10: סיבוכיות

39

ניתוח סיבוכיות- שאלות ממבחנים

10מבוא למדעי המחשב מ' - תירגול

Page 40: תירגול  10: סיבוכיות

, מועד ב'2010ניתוח סיבוכיות – אביב

2מבוא למדעי המחשב מ' - תירגול 40log (𝑛 )1

Page 41: תירגול  10: סיבוכיות

, מועד ב'2010ניתוח סיבוכיות – אביב

2מבוא למדעי המחשב מ' - תירגול 41𝑛1

Page 42: תירגול  10: סיבוכיות

42

, מועד ב'2010מערכים – אביב

Page 43: תירגול  10: סיבוכיות

43

, מועד ב' )פתרון(2010מערכים – אביב

•: לב נשים– , נעמוד לא השורות כל על אפילו או האיברים כל על נעבור אם

. הזמן בסיבוכיות– , שורה באותה נחפש ואז המתאימה השורה את למצוא קודם ננסה

. האיבר את

הגישה:•–. המתאימה השורה עבור בינארי חיפוש נבצע–. , האיבר אחר שורה באותה נחפש מכן לאחר

10מבוא למדעי המחשב מ' - תירגול

Page 44: תירגול  10: סיבוכיות

44

, מועד ב' )פתרון(2010מערכים – אביב

קצה • מקרי כמה על :נסתכל

10מבוא למדעי המחשב מ' - תירגול

top

bottom

middle

x = 33

Page 45: תירגול  10: סיבוכיות

45

, מועד ב' )פתרון(2010מערכים – אביב

קצה • מקרי כמה על :נסתכלa[middle][0]<xכאשר –

קטנים middle השורה אחריידוע כי כל איברי השורות ש– bottom. לכן ניתן להזיז את xממש מ-

.middleל-.middle עדיין יכול להיות בשורה שהיתה xנשים לב כי –

10מבוא למדעי המחשב מ' - תירגול

top

bottommiddle

x = 33

Page 46: תירגול  10: סיבוכיות

46

, מועד ב' )פתרון(2010מערכים – אביב

קצה • מקרי כמה על :נסתכלa[middle][0]>xכאשר –

ידוע כי כל איברי השורות שקודמות לשורה –. לכן ניתן לקדם את x גדולים ממש מ-middleה-

top-ל middle..middle עדיין יכול להיות בשורת xנשים לב כי –

10מבוא למדעי המחשב מ' - תירגול

bottom

middle

x = 33

top

Page 47: תירגול  10: סיבוכיות

47

, מועד ב' )פתרון(2010מערכים – אביב

קצה • מקרי כמה על :נסתכל

כאשר נישאר עם שתי שורות, לא ניתן לדעת להיכן – ע"י הסתכלות על האיבר הראשון xשייך

בלבד.אך כעת ניתן לעבור על שתי השורות ולמצוא את –

.האיבר בסיבוכיות 10מבוא למדעי המחשב מ' - תירגול

bottom

x = 33

top

Page 48: תירגול  10: סיבוכיות

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;>}

Page 49: תירגול  10: סיבוכיות

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;}

Page 50: תירגול  10: סיבוכיות

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;

}