27
ןןןן םםםם םםםםםם08

מבני נתונים 08

  • Upload
    rusk

  • View
    54

  • Download
    2

Embed Size (px)

DESCRIPTION

מבני נתונים 08. מיון. מיון CountSort. מיון n מספרים שונים בתחום 1- k. נשתמש במערך בוליני A באורך k. 1. 1. 3 , 5 , 7 , 1 , 9 , 6. 2. 3. 1. 4. 1. 3. 5. 6. 7. 9. 5. 1. אפס את A . לכל x בקלט בצע: A[x] = 1 - PowerPoint PPT Presentation

Citation preview

Page 1: מבני נתונים  08

מיון

08מבני נתונים

Page 2: מבני נתונים  08

CountSortמיון

k-1 מספרים שונים בתחום nמיון

k באורך Aנשתמש במערך בוליני 1

2

3

4

5

6

7

8

9

3 , 5 , 7 , 1 , 9 , 61

1

1

1

1

1 .Aאפס את 1.

A[x] = 1 בקלט בצע:xלכל 2.

for (i = 1; i < k ; i++)עבור על המערך ואסוף:3.

if (A[i] = = 1 ) output i ;

1 3 5 6 7 9

Page 3: מבני נתונים  08

.Aאפס את 1.

A[x] = 1 בקלט בצע:xלכל 2.

for (i = 1; i < k ; i++)עבור על המערך ואסוף:3.

if (A[i] = = 1 ) output i ;

CountSortסיבוכיות מיון

k-1 מספרים שונים בתחום nמיון

kn

k

kn

nOk)(אם סבוכיות זמן

nO)(סבוכיות זמןסתירה לחסם התחתון!

Page 4: מבני נתונים  08

CountSortמיון

k-1 בתחום שאינם בהכרח שונים מספרים nמיון

3 , 5 , 3 , 1 , 9 , 5 , 3

31 , 51 , 32 , 11 , 91 , 52 , 33

Stable sortמיון יציב

11 ,31 , 32 , 33 , 51 , 52 ,91

של תוריםk באורך Aנשתמש במערך

1

2

3

4

5

6

7

8

9

11

31 32 33

51 52

91 kn סבוכיות זמן

Page 5: מבני נתונים  08

CountSortמיון

kn סבוכיות זמן

)(nOk אם

)(nO סבוכיות זמן

)( 2nOk אם

)( 2nO סבוכיות זמן

המספרים לקוחים n אינה יעילה כאשר BucketSortשיטת n << k, כלומר כאשר k..1מתחום "רחב מדי"

Page 6: מבני נתונים  08

321123231132213312111223332213

321231111132312332123213223213

1

1

1

2

2

3

2

3

3

4

111123132213213223231312321331

321123231132213312111223332213

RadixSortמיון Least Significant Digits

Page 7: מבני נתונים  08

Radix-Sort(A,d)

for i 1 to d

do use BucketSort to sort array A on digit i

RadixSortמיון

סבוכיות זמן

RadixSort מיון מספרים d10dn )10( )(ndO

)1(Od nO)(אם

בסיס

rRadixSort ממין מספרים dr

drn )(

Page 8: מבני נתונים  08

דוגמה

kn סבוכיות זמן2..1..1 nk אם תחום המספרים

)( 2nO סבוכיות זמן

BucketSortמיון

RadixSortמיון בסיס

n

)(2 nn

סבוכיות זמן

)(nO

2d

Page 9: מבני נתונים  08

1תרגיל בהינתןn 1 מספרים שלמים בטווח..nc כיצד ניתן למיין

O(n∙c)בזמן פתרון

1נתחיל ממספרים בטווח..n2 האם ניתן למיין אותם ?O(n)ב

?אילו אלגוריתמים אנו מכירים שממיינים בזמן לינאריCounting sort בהנתן – n 0 מספרים בטווח..k

נכתוב כל מספר בבסיסn?כמה ספרות , נמיין כמוradix sort, O(n) 2 לכל ספרה ולכןO(n)=O(n)?עבור הבעיה המקורית כמה ספרות יהיו לנו

( )

( )

k n

k O n

Page 10: מבני נתונים  08

חסמים עליונים ותחתונים .חסם עליון: הוכחה לזמן ריצה מקסימלי עבור כל קלט

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

הרבה זמן.

נניח שהוכחנו שאלגוריתם מסויים פותר את הבעיהO(t)לכל קלט בזמן

אזיO(t) הוא חסם עליון לזמן הנדרש לפתור את WCהבעיה

Page 11: מבני נתונים  08

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

לכל קלט שפותר את הבעיה אלגוריתם קיים,nבגודל

.O(logn)בזמן

יש להוכיח ש:לבעיהכדי למצוא חסם תחתון

קיים קלט שפותר את הבעיה אלגוריתם לכל.Ω(logn)שעבורו זמן הריצה הוא

זה לא אומר שאין אלגוריתם שפותר את הבעיה עבור קלטים מסוימים!O(1)בזמן

זה לא אומר שאין אלגוריתם שפותר את הבעיה עבור קלטים מסוימים!O(1)בזמן

Page 12: מבני נתונים  08

חסמי זמן ריצה לבעיה חסם עליוןO(t) אלגוריתם לדוגמא שפותר את :

O(t)הבעיה לכל קלט בזמן חסם תחתוןΩ(t):

מיפוי כל אלגוריתם לעץ החלטות בגובהΩ(t) רדוקציה לבעיה שהוכחנו בכיתה עם חסם תחתון על זמן

הריצה )מיון או חיפוש בינארי במודל ההשוואות(. זמן קריאת הקלט. למשל: כל אלגוריתם לבעיית מציאת

מספרים חייב לעבור על כל הקלט ולכן לוקח nהמינימום מ-Ω(n)זמן

Page 13: מבני נתונים  08

חסם תחתון על מיון על ידי השוואות

,אם אלגוריתם המיון שלנו מתבצע רק ע"י השוואות אברים?nכמה סידורים אפשריים יש ל-

ישn!סידורים אפשריים

For <a,b,c> a,b,c a,c,b b,a,c b,c,a c,a,b c,b,a

n!

Page 14: מבני נתונים  08

חסם תחתון על מיון על ידי השוואות

ניתן לייצג כל אלגוריתם מיון )השוואתי( על ידי עץהחלטות בינארי

?למה ניתן לייצג כעץ?למה דווקא כעץ בינארי

בעץ עצמו כל צומת מייצגת את הסידור החלקי כפי שידוע לנו עד

נקודה זוקשתות העץ הן תוצאות ההשוואות

Page 15: מבני נתונים  08

חסם תחתון על מיון על ידי השוואות

>

>

>

>

>

Page 16: מבני נתונים  08

חסם תחתון על מיון על ידי השוואות

מס' ההשוואות המקסימאלי = עומק העלה העמוקביותר בעץ

מס' ההשוואות הממוצע = עומק עלה ממוצע

עץ החלטה למייןn אברים הוא בעל n!עלים בהכרח עץ בינארי מעומקd 2 הוא בעלdעלים לכל היותר

2 עץ בינארי בעלd עלים חייב להיות בעל עומקd עץ בעלn! עלים חייב להיות מעומק של לפחות |log(n!)|

ולכן כל אלגוריתם מיון מבוסס השוואות דורש לפחות|log(n!)|.השוואות במקרה הגרוע ביותר

Page 17: מבני נתונים  08

חסם תחתון על מיון על ידי השוואות

2log ! log( ( 1)( 2)...(2)(1))

log log( 1) ... log 2 log1

log log( 1) ... log( )2

log2 2

log( )2 2( log )

n n n n

n n

nn n

n n

n nn

n n

Page 18: מבני נתונים  08

חסם תחתון על חיפוש?מה החסם התחתון על חיפוש במערך ממוין

במקרה הגרוע ביותר נשווה לכל איבר ז"א בעץ ישnעלים מה העומק המינימלי של עץ בינארי בעלn?עלים

זמן לוגריתמיO(logn)

Page 19: מבני נתונים  08

2תרגיל ?כמה "יקר" להפוך ערמה לעץ חיפוש בינארי נראה שהחסם התחתון הואnlognנפתור ברדוקציה על דרך השלילה

-נניח שניתן להפוך ערמה לעץ חיפוש בינארי בf(n) בהינתןn)מספרים, מיינו את המספרים )במודל ההשוואה

( נבנה ערמה בזמן לינאריO(n)) נמיר את הערמה לעץ בינארי מאוזן בזמןf(n)-נעבור על העלים בin orderונדפיס אותם )ממוינים( בזמן לינארי – סה"כ זמןO(n) + f(n) + O(n) לכן, אםf(n)<<n∙log(n) ניתן למיין n מספרים בזמן קטן

ואנו יודעים שזה בלתי אפשרי. מ.ש.לO(n∙logn)מ-

Page 20: מבני נתונים  08

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

, לפחות חצי מהפרמוטציות nבו עבור קלט באורך ניתנות למיון n עד 1האפשריות של המספרים מ-

בזמן ליניארי.)עבור המחצית השניה של הפרמוטציות, לאלגוריתם

מותר להחזיר כל דבר, אפילו סדר שגוי(.

Page 21: מבני נתונים  08

Selection

Page 22: מבני נתונים  08

2תרגיל בהינתן מערך )לא ממוין( בעלn אברים, מצא את k

O(n)האברים הקטנים ביותר במערך בזמן פתרון

-בהנחה שאנו יודעים מיהו האבר הk הקטן ביותר )ז"א statistic order k כמה זמן דרוש למצוא את שאר ,)האברים הדרושים?

סה"כO(n)למצוא את האבר ה kקטן ביותר O(n)לעבור על המערך ולסמן את כל הקטנים ממנו

Page 23: מבני נתונים  08

3תרגיל אבר מסוים מופיע במערךn/5 פעמים, באיזו מהירות

ניתן למצוא אותו?האבר חוזר במערך הרבה פעמים

?מה אם המערך היה ממוין

?איך ננצל את העובדה הזו

...

...

...

n/6intervals

Page 24: מבני נתונים  08

3תרגיל פתרון

-נמצא את הorder statisticsהבאים n/62n/63n/6…

אחד מהם חייב להיות בוודאות האיבר המופיעn/5פעמים סה"כ סיבוכיות - לינארית

Page 25: מבני נתונים  08

4תרגיל מציאת חציון משותף לשני מערכים ממוינים שאין

להם אברים משותפיםפתרון

?זמן לינארי?זמן לוגריתמי

נמצא חציון של כל אחד מהם, נניח בה"כ כיx<y?איפה יהיה החציון של האיחוד

ניפטר מכל מה שמתחת לxוכל מה שמעל ל yנחזור על התהליך רקורסיבית

A

B

x

y

AUB

x yחציון

Page 26: מבני נתונים  08

5תרגיל במערך אבר מסוים מופיעn/2 פעמים, אחר n/4

פעמים וכו'n/8פעמים, הבא ?כיצד ניתן למיין את המערך ובאיזו מהירות

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

lognמהמערך, ממשיכים רקורסיבית ובסוף ממיינים את הערכים

אפשר להראות למה החסם התחתון לינארי

!

( / 2)!( / 4)!( / 8)!...

n

n n n

Page 27: מבני נתונים  08

הסוף

שבוע נעים