0

بررسي الگوريتم مرتب‌سازي ادغامي

 
samsam
samsam
کاربر طلایی1
تاریخ عضویت : بهمن 1387 
تعداد پست ها : 50672
محل سکونت : یزد

بررسي الگوريتم مرتب‌سازي ادغامي

 
يکي از روش‌هاي مرتب‌سازي داده‌ها، استفاده از الگوريتم مرتب‌سازي به‌صورت ادغامي است. اين الگوريتم از روش تقسيم و حل براي مرتب کردن داده‌ها استفاده مي‌کند. در روش تقسيم و حل، يک مساله به تعدادي مساله کوچک‌تر تقسيم مي‌شود که حل آنها ساده‌تر از حل مساله اصلي است و ادغام نتايج به‌دست آمده از مسائل کوچک‌تر جواب مساله اصلي است. در الگوريتم مرتب‌سازي به روش ادغامي نيز همين‌گونه است. داده‌ها به مجموعه‌اي کوچک‌تر شکسته شده و مرتب مي‌شوند. سپس از ادغام فهرست‌هاي مرتب‌شده به فهرست مرتب‌شده اصلي مي‌رسيم. اين الگوريتم اولين‌بار در سال 1945 توسط جان فون نويمان مطرح شد.

 

روش کار الگوريتم مرتب‌سازي ادغامي

ابتدا فهرستي از داده‌ها که قرار است مرتب شوند به 2 فهرست به طول مساوي تقسيم مي‌شوند و سپس فهرست‌هاي توليد شده به روش بازگشتي با صدا زدن تابع MergSort هر کدام به دو زيرفهرست تقسيم مي‌شوند. اين عمل آنقدر ادامه پيدا مي‌کند تا به فهرست‌هايي برسيم که طول هر کدام ? باشد.

تمام زيرفهرست‌هاي توليدشده مرتب مي‌شوند و سپس از پايين به بالا با فهرست‌هاي مجاور خود ادغام شده و فهرست جديدي توليد مي‌شود. اين فهرست‌ها نيز با فهرست‌هاي مجاور خود ادغام مي‌شوند. آن قدر اين فهرست‌ها با هم ترکيب مي‌شوند تا به فهرست نهايي برسيم. در هر ادغام مرتب بودن داده‌ها حفظ مي‌شود. حال اين روش را با يک مثال توضيح مي‌دهيم.

فرض کنيد داده‌هاي ما مجموعه‌اي به نام A‌ است که به‌صورت زير تعريف شده است:

A = { 5,2,4,7,1,3,2,6}

ابتدا مجموعه A را به 2 زيرمجموعه با طول يکسان به نام‌هاي A1و A2 تقسيم مي‌کنيم:

A1={5,2,4,7}, A2={ 1,3,2,6}

سپس هر کدام از اين مجموعه‌ها را به 2 مجموعه با طول مساوي تقسيم كرده و در نهايت به ? مجموعه به‌صورت زير مي‌رسيم:

B={5,2}, C={4,7}, D={1,3}, E={2,6}

از مجموعه‌هاي بالا فقط مجموعه B نياز به مرتب‌سازي دارد. پس از مرتب کردن جدول B بايد مجموعه‌ها را با هم ادغام کنيم.

عمل ادغام به اين صورت است که ابتدا اولين عنصر از هر دو مجموعه‌ را با هم مقايسه كرده و عنصر کوچک‌تر را در مجموعه سومي قرار مي‌دهيم که همان خروجي اين مرحله است. سپس عنصر بعدي را از همان مجموعه‌اي انتخاب مي‌کنيم که عنصر اول که در مجموعه سوم قرار گرفته است. سپس اين عمل را آنقدر ادامه مي‌دهيم که تمامي عناصر يکي از 2 مجموعه در مجموعه سومي که نتيجه حاصل از ادغام دو مجموعه در آن ذخيره شده ‌است، قرار بگيرد. سپس باقي عناصر مجموعه دوم به ترتيب به مجموعه سوم منتقل مي‌شود.

شبه‌کد اين الگوريتم به‌صورت زير است:

function merge_sort(m) {

var list left, right, result

if length(m) «= 1

return m

var middle = length(m) / 2

for each x in m up to middle

add x to left

for each x in m after middle

add x to right

left = merge_sort(left)

right = merge_sort(right)

result = merge(left, right)

return result

}

function merge(left, right) {

var list result

while length(left) » 0 and length(right) » 0

if first(left)«=first(right)

append first(left) to result

left = rest(left)

else

append first(right) to result

right = rest(right)

end while

while length(left) » 0

append left to result

while length(right) » 0

append right to result

return result}

پيچيدگي زماني الگوريتم مرتب‌سازي ادغامي

 

اگر زمان لازم براي مرتب‌سازي آرايه N‌عضوي به روش ادغام برابر (T(N باشد داريم:

T(N) = 2T(N/2) + N

در اين الگوريتم در هر مرحله آرايه به 2 آرايه شکسته مي‌شود و در هر مرحله از ادغام نيز بايد N مقايسه صورت بگيرد.

 

در نتيجه در بدترين حالت تعداد مقايسه‌هاي اين الگوريتم برابر (n[log n] -2[log n] +1) است و چون عمل غالب در اين الگوريتم مانند باقي الگوريتم‌هاي مرتب‌سازي عمل مقايسه است.

 

پس مرتبه اجرايي اين الگوريتم برابر (o(nlogn است. اين الگوريتم در بدترين حالت ?? بار سريع‌تر از الگوريتم مرتب‌سازي حبابي (Bubble sort) است. در جاهايي بدترين حالت اين الگوريتم از لحاظ زماني برابر بهترين حالت الگوريتم سريع (Quick sort) با داده‌هاي يکسان است.

اميربهاالدين سبط‌الشيخ

چهار راه برای رسیدن به آرامش:
1.نگاه کردن به عقب و تشکر از خدا  2.نگاه کردن به جلو و اعتماد به خدا  3.نگاه کردن به اطراف و خدمت به خدا  4.نگاه کردن به درون و پیدا کردن خدا

پل ارتباطی : samsamdragon@gmail.com

تالارهای تحت مدیریت :

مطالب عمومی کامپیوتراخبار و تکنولوژی های جدیدسیستم های عاملنرم افزارسخت افزارشبکه

 

یک شنبه 6 شهریور 1390  12:39 PM
تشکرات از این پست
دسترسی سریع به انجمن ها