Presentation is loading. Please wait.

Presentation is loading. Please wait.

Tree Sort.

Similar presentations


Presentation on theme: "Tree Sort."— Presentation transcript:

1 Tree Sort

2 درخت جستجوی دودویی(Binary Search Tree)
درخت جستجوی دودویی یک درخت دودویی است که ممکن است تهی باشد. اگر تهی نباشد دارای خاصیت زیر است: مقدار هر گره بزرگتر از هر مقدار در زیر درخت چپ و کوچکتر از هر مقدار در زیر درخت راست آن می باشد. هر گره دارای یک کلید است و دو گره نباید دارای کلید یکسان باشند(کلیدها منحصر به فردهستند).

3 در شکلهای زیر: شکل الف BST نیست چرا که فرزند راست گره 15 (یعنی 10) از آن کوچکتر است در حالی که باید بزرگتر باشد. شکل ب یک درخت BST می باشد. 30 20 5 40 15 25 12 10 2 (الف) (ب)

4 جستجوی یک عنصر در BST فرض کنید بخواهیم دنبال عنصری با کلید x بگردیم . ابتدا از ریشه شروع می کنیم .اگر ریشه تهی باشد، درخت جستجو فاقد هر عنصری بوده و جستجو ناموفق خواهد بود. در غیر این صورت، x را با مقدار کلید ریشه مقایسه می کنیم. اگرx کمتر از مقدار کلید ریشه باشد، زیر درخت چپ را جستجو می کنیم. اگر x بزرگتر از مقدار کلید ریشه باشد آنگاه زیر درخت راست را جستجو می کنیم. در زیر الگوریتم جستجو را بیان می کنیم:

5 Function search (t: BSTpointer; x:integer):boolean; Var found: boolean; Begin found:=false; if (t<>nill) then begin found=TRUE if data(t) = x then else if data(t) > x then found := search (Lchild(t) , x) else if data(t) < x then Search (Rchild (t), x); found := end; Search := found; End;

6 نکته: اگر h ارتفاع یا عمق یک درخت جستجوی دودویی باشد، با استفاده از تابع search می توانیم عمل جستجو را در O(h) انجام دهیم. البته در روش بازگشتی به یک پشته اضافی به میزان O(h) نیاز خواهیم داشت.

7 اضافه کردن یک عنصر به BST
برا ی درج عنصر جدید x، باید ابتدا مشخص نمود که آیا این عنصر با عناصر موجود متفاوت می باشد یا خیر. برای انجام این کار باید درخت را جستجو کرد. اگر جستجو ناموفق باشد پس ما عنصر را در محلی که جستجو خاتمه پیدا کرده است درج می کنیم. بنابراین الگوریتم اضافه کردن شبیه الگوریتم جستجو است و برای این کار باید به انتهای الگوریتم جستجو خط زیر را اضافه کنیم: if (not found ) then insert (x ,q);

8 تابع insert به صورت زیر است: Procedure insert ( x: integer ; q: BSTpointer); Var t: BSTpointer; Begin new (t); data(t) := x; Lchild (t):=nil; Rchild (t):=nil; if (data (q) > x) then Lchild (q):=t else if (data(q) < x) then Rchild(q):=t; End;

9 مرتب سازی درختی Tree Sort
در این روش از درختهای جستجوی دودویی BST برای مرتب سازی استفاده می شود. اگر درخت BST به صورت inorder پیمایش شود، دنباله حاصل به صورت صعودی مرتب خواهد شد. در این الگوریتم ابتدا عناصر آرایه یک به یک داخل یک درخت BST که در ابتدا تهی است درج می کنیم. سپس همزمان با پیمایش این درخت، عناصر پیمایش شده را در یک آرایه قرار می دهیم تا مرتب شوند.

10 40,60,50,33,55,11 40 11 < 40 33 < 40 55 > 40 50 > 40 60 > 40 11 33 40 50 55 60 33 60 11 < 33 50 < 60 55 < 60 11 50 55 > 50 55

11 بهترین حالت حالت متوسط بدترین حالت O(n log n) O (n^2)
پیچیدگی اجرایی O(n log n) O (n^2)

12 نکته مهم آن است که اگر اعداد داده شده با ترتیب مختلفی داده شده باشند، آن گاه درختهای حاصل ممکن است با هم فرق می کنند و عمق مختلفی داشته باشند.

13 حذف یک عنصر از BST حذف یک عنصر از BST نسبتا دشوارتر از درج آن است. زیرا وقتی گره ای حذف می شود که دارای فرزند است باید گره دیگری انتخاب شود تا جایگزین گره حذف شده شود. اگر این انتخاب درست انجام نشود خواص BST نقض می شود. گره ای که باید حذف شود ابتدا در BST جستجو می شود سپس به نحوی جایگزین می شود که خواص درخت حفظ شود.

14 حالت 1. گره ای که باید حذف شود برگ باشد و فرزندی نداشته باشد
حالت 1. گره ای که باید حذف شود برگ باشد و فرزندی نداشته باشد. در این حالت حذف به سادگی انجام می پذیرد و کافی است اشاره گر والد برابر تهی شود.

15 90 90 50 95 50 95 20 20 5 25 5

16 حالت 2.گره ای باید حذف شود تنها دارای یک فرزند چپ است که می تواند جایگزین آن شود.
90 50 95 90 20 20 95 5 25 5 25

17 حالت3. فرزند راست گره ای که باید حذف شود فرزند چپی ندارد
حالت3. فرزند راست گره ای که باید حذف شود فرزند چپی ندارد. بنابراین فرزند راست جایگزین آن می شود. 90 90 50 175 50 150 20 125 20 125 175 140 140

18 حالت4. فرزند راست گره ای که باید حذف شود فرزند چپ دارد
حالت4.فرزند راست گره ای که باید حذف شود فرزند چپ دارد. در این حالت چپ ترین فرزند راست گره جایگزین آن می شود. یعنی کوچکترین مقدارزیر درخت راست گره. برای مثال اگر بخواهیم گره 50 را حذف کنیم چپ ترین فرزند راست آن یعنی 66 را حذف می کنیم.

19 90 90 50 150 66 150 20 75 20 75 5 66 80 5 80

20 پیمایش inorder به صورت زیر است: 15,25,33,44,50,60,66,75

21 جانشینی گره 33 به جای 25 در حافظه تنها با تغییر اشاره گرها انجام می شود و نه با جا به جایی محتوای یک گره از یک مکان به مکان دیگر. البته بجای گره 33 می توانیم گره 15 را جانشین 25 کنیم. در نتیجه درخت BST حاصل از عمل حذف یکتا نمی باشد. 60 33 75 15 50 66 44

22 عمل حذف می تواند در زمان O(h) انجام گیرد که h عمق درخت می باشد
عمل حذف می تواند در زمان O(h) انجام گیرد که h عمق درخت می باشد. در یک درخت BST با ارتفاع متوسط Log 2n، کوچکترین عنصر را میتوان حذف کرد.

23 منبع: ساختمان دادها حمیدرضا مقسمی

24 تهیه کنندگان: مونا امامی سمانه نوع جو استاد راهنما: استاد کسمایی


Download ppt "Tree Sort."

Similar presentations


Ads by Google