מבני נתונים 08

Post on 05-Jan-2016

60 Views

Category:

Documents

2 Downloads

Preview:

Click to see full reader

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

TRANSCRIPT

מיון

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

.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)(סבוכיות זמןסתירה לחסם התחתון!

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 סבוכיות זמן

CountSortמיון

kn סבוכיות זמן

)(nOk אם

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

)( 2nOk אם

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

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

321123231132213312111223332213

321231111132312332123213223213

1

1

1

2

2

3

2

3

3

4

111123132213213223231312321331

321123231132213312111223332213

RadixSortמיון Least Significant Digits

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

דוגמה

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

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

BucketSortמיון

RadixSortמיון בסיס

n

)(2 nn

סבוכיות זמן

)(nO

2d

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

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

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

הרבה זמן.

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

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

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

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

.O(logn)בזמן

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

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

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

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

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

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

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

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

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

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

,אם אלגוריתם המיון שלנו מתבצע רק ע"י השוואות אברים?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!

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

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

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

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

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

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

>

>

>

>

>

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Selection

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

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

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

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

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

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

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

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

...

...

...

n/6intervals

3תרגיל פתרון

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

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

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

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

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

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

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

A

B

x

y

AUB

x yחציון

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

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

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

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

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

!

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

n

n n n

הסוף

שבוע נעים

top related