slide1 n.
Download
Skip this Video
Loading SlideShow in 5 Seconds..
מבני נתונים PowerPoint Presentation
Download Presentation
מבני נתונים

Loading in 2 Seconds...

play fullscreen
1 / 29

מבני נתונים - PowerPoint PPT Presentation


  • 134 Views
  • Uploaded on

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

loader
I am the owner, or an agent authorized to act on behalf of the owner, of the copyrighted work described.
capcha
Download Presentation

PowerPoint Slideshow about 'מבני נתונים' - shannon-mcleod


An Image/Link below is provided (as is) to download presentation

Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author.While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server.


- - - - - - - - - - - - - - - - - - - - - - - - - - E N D - - - - - - - - - - - - - - - - - - - - - - - - - -
Presentation Transcript
slide1

מבני נתונים

מבוא, סיבוכיות חישוב.

slide2
מבוא
  • מחשבים פועלים על נתונים ומאחסנים אותם.
  • במדעי המחשב מבנה הנתונים מתייחס לאופן אחסון וארגון הנתונים בזיכרון המחשב, המאפשר גישה ושימוש יעיל בנתונים המאוחסנים.
  • לכל מבנה נתונים יש יתרונות וחסרונות.
  • בחירת מבנה הנתונים המתאים תלוי באלגוריתם אותו מעוניינים לממש.
  • בשפות תכנות שונות קיימים מבני נתונים בסיסיים המובנים בשפה. לדוגמא, String עבור מחרוזת.
slide3
מהו מבנה נתונים?
  • מבנה נתונים יכול להכיל מספר רב של ערכים אטומיים (int, double, char…), או מבני נתונים אחרים.
  • בחירת מבנה הנתונים המתאים עשויה לעשות את ההבדל בין אלגוריתם יעיל לאלגוריתם לא יעיל.
slide4
סוגי מבני נתונים
  • מערך – הכנסת ערך מהירה, גישה מהירה לאינדקס ידוע, חיפוש ומחיקה איטיים, גודל קבוע.
  • תור – ראשון נכנס ראשון יוצא (FIFO)
  • מחסנית – אחרון נכנס ראשון יוצא (LIFO)
  • עץבינארי – חיפוש, הוספה ומחיקה מהירים, אלגוריתם מחיקה מורכב.
slide5
מהו אלגוריתם?
  • רצף פעולות סופי לפתרון בעיה מסוימת.
  • על האלגוריתם להיות מדויק, לכלול רצף צעדים סופי וברור (ללא חוסר וודאות לגבי מה הצעד הבא), כמו כן האלגוריתם חייב להגיע לסיום.

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

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

זמן ריצה הוא מדד מקובל ליעילות אלגוריתם

slide7
זמן ריצת אלגוריתם
  • זמן הריצה של תוכנית מחשב בדרך כלל יגדל כאשר גודל נתוני הקלט גדלים.
  • זמן הריצה תלוי גם בסוג הקלטולא רק בגודלו
  • לעיתים בודקים את זמן הריצהשל המקרה הגרוע כמדד לזמןריצת האלגוריתם(קל יותר לחישוב)
  • כיצד ניתן לחשב זמן ריצה?
slide8
ניתוח אימפירי של זמן ריצה
  • יש להריץ את התוכנית מספר רב של פעמים עם גודל נתוני קלט שונים.
  • בכל הרצה נמדוד את זמןהריצה של התוכנית.
  • נייצר גרף שמראה את זמןהריצה כתלות בגודלהנתונים.
slide9
חסרונות ומגבלות שיטה אימפירית
  • צריך לממש את האלגוריתם כדי לאפשר הרצות עם נתונים שונים (לעיתים מורכב)
  • לא ניתן לכסות את כל האפשרויות, ולכן נתוני קלט שלא נבדקו לא יופיעו בגרף.
  • התהליך מורכב ותובעני (דורש זמן ותכנון)
  • על מנת להשוות בין שני אלגוריתמים שונים יש צורך לבצע את הבדיקות על אותו מחשב.
slide10
ניתוח תיאורטי של זמן ריצה
  • מבוסס על תיאור כללי של האלגוריתם (פסאודו קוד), ללא צורך במימושו.
  • לוקח בחשבון את כל סוגי הקלט האפשריים.
  • מאפיין את הקשר בין זמן הריצה לגודל/סוג הקלט.
  • ניתוח זמן ריצה ללא תלות בביצועי המחשב.
pseudocode
פסאודו קוד PseudoCode
  • תיאור כללי של מבנה האלגוריתם בשפה לא רישמית
  • יותר מובנה ומדויק מתאור בשפה מילולית
  • פחות מובנה ומדויק מקוד בשפת תכנות
  • מאפשר להבין את מבנה האלגוריתם בכלליות ללא פרטים על אופן המימוש
arrays
Arrays מערכים
  • כאשר מעוניינים לעבוד עם מספר אובייקטים/נתונים ולבצע עליהם פעולות שונות, ניתן להגדיר מערך.
  • מערך הוא אוסף של משתנים/אובייקטים שלכל אחד מספר סידורי המאפשר גישה מהירה ונוחה.
  • מערך הוא למעשה אובייקט בפני עצמו המאפשר הפעלת שיטות על אוסף הנתונים אותם הוא מכיל.
  • מערך הוא אחד ממבני הנתונים (דרך לשמור ולנהל נתונים) הבסיסיים.
  • מספר איברי המערך הינו קבוע ונקבע בעת יצירתו.
  • למשל אם נרצה לשמור נתונים של כל הסטודנטים בניהול תעשייתי, ניצור מערך שיכיל את כל מופעי הסטודנטים במחלקה. כך ייתאפשר לנו ביצוע פעולות על כלל הסטודנטים בצורה נוחה.
arrays1
Arrays מערכים

כל איבר במערך נקרא אלמנט.

כל אלמנט ניתן לגישה ע"י אינדקס מספרי.

ניתן לגשת לאיבר i בתוך מערך Aע"י A[i]

pseudocode1

Example: find max element of an array

AlgorithmarrayMax(A, n)

Inputarray A of n integers

Outputmaximum element of A

currentMaxA[0]

fori1ton  1do

ifA[i]  currentMaxthen

currentMaxA[i]

returncurrentMax

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

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

"המקרה הגרוע" worst case

slide17
שיערוך זמן הריצה
  • בחינת "המקרה הגרוע" העלתה כי האלגוריתם למציאת ערך מקסימום בתוך מערך דורש 7n-2 פעולות פרימיטיביות.
  • נניח כי הפעולה הפרימיטיבית עם זמן הריצה הנמוך ביותר לוקחת a יחידות זמן, והגבוה b יחידות זמן.
  • נסמן את זמן הריצה במקרה הגרוע של האלגוריתם ב T(n), ונקבל:a (7n 2) T(n)b(7n 2)
  • כלומר זמן הריצה חסום בין שתי פונקציות לינאריות
slide18
שיעור הגידול של זמן הריצה
  • אם נשנה את סביבת העבודה, שפת התכנות או המחשב עליו מריצים את האלגוריתם זמן הריצה יושפע ע"י הכפלה בקבוע (זמן ריצת הפעולות הפרימיטיביות)
  • קצב השינוי של זמן הריצה כתלות בגודל הנתונים n אינו מושפע ונשאר תכונה קבועה של האלגוריתם
  • באלגוריתם למציאת מקסימום, שיעור הגידול הינו לינארי, מכוון שהוא פרופורציוני ל n. וניתן לומר כי T(n) הינו O(n).
slide19

למשל: n^2 אינו O(n), אלא O(n^2)

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

7n-2 is O(n)

3n3 + 20n2 + 5 is O(n3)

slide21
דוגמאות

for( i=0; i<n ;++i)

x = x + y ;

n*2  O(n)

slide22
דוגמאות

for( i=0; i<n ;++i)

x = x + y ;

y = y - 1 ;

n*4  O(n)

slide23
דוגמאות

x = x * y;

for( i=0; i<n ;++i)

x = x + y ;

y = y - 1 ;

n*4 + 2  O(n)

slide24
דוגמאות

for( i=0; i<n ;++i)

for( j=0; j<n ;++j)

x = x + y ;

n*n*2  O(n^2)

slide25
דוגמא

x++;

y++;

for(i=0 ; i< n ; ++i){

for(j=0 ; j < n ; ++j)

x = x + y ;

x++;

y++;

for(j=0 ; j < n ; ++j)

x = x + y ;

}

slide26
פתרון

נתחיל מבפנים כלפי חוץ :

בתוך הלולאה החיצונית הסיבוכיות היא :

O(n) + k + O(n) = O(n)

כלומר בכל איטרציה של הלולאה החיצונית אנו מבצעים חישוב בסדר גודל של n ולכן בסה"כ :

O(n)  O(n) = O(n²)

ובתוספת הקבוע :

O(n²) + k = O(n²)

slide27

דוגמא – חיפוש בתוך מערך

חיפוש ערך מסוים, x בתוך מערך בגודל n

i = 0; (1)

while ( x != a[i]) (2)

i++; (3)

זמו ריצה במקרה הגרוע לעומת מקרה פרטי

(1) O(1)

test in (2) O(1)

(3) O(1)

iterations maximum n

O(while-loop) = O(1) + n * O(1) = O(n)

slide28

זמן ריצת תנאי

test

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

O (max (f (n), g (n)))

if-part

else-part

O(f(n))

O(g(n))

slide29

דוגמא – זמן ריצת תנאי

if ( a[1][i] == 0)

for (i = 0; i < n; i++)

for (j = 0; j < n; j++)

a[i][j] = 0;

else

for (i = 0; i<n; i++)

a[i][i] = 1;

if: T(n)= O(n2)

else : T(n) = O(n)

T(n) = max (O(n2), O(n)) = O (n2)