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

تفکیک و پردازش داده‌ها

یکی از روش‌های مرتب‌سازی داده‌ها، استفاده از الگوریتم مرتب‌سازی به‌صورت ادغامی است. این الگوریتم از روش تقسیم و حل برای مرتب کردن داده‌ها استفاده می‌کند. در روش تقسیم و حل، یک مساله به تعدادی مساله کوچک‌تر تقسیم می‌شود که حل آنها ساده‌تر از حل مساله اصلی است و ادغام نتایج به‌دست آمده از مسائل کوچک‌تر جواب مساله اصلی است. در الگوریتم مرتب‌سازی به روش ادغامی نیز همین‌گونه است. داده‌ها به مجموعه‌ای کوچک‌تر شکسته شده و مرتب می‌شوند. سپس از ادغام فهرست‌های مرتب‌شده به فهرست مرتب‌شده اصلی می‌رسیم. این الگوریتم اولین‌بار در سال 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) با داده‌های یکسان است.

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

newsQrCode
ارسال نظرات در انتظار بررسی: ۰ انتشار یافته: ۰

نیازمندی ها