الگوریتمستان
برنامهنویسی، طراحی الگوریتم و حل مسئلههای الگوریتمی
الگوریتم فلوید-وارشال (Floyd-Warshall) یک الگوریتم مبتنی بر روش برنامهنویسی پویا برای محاسبهی کوتاهترین مسیر بین هر دو جفت گره گرافهای وزندار است. دو الگوریتم رایج دایکسترا و بلمن-فورد روشهای محاسبهی کوتاهترین مسیر از مبدأ ثابت هستند که در صورت تکرار آنها به ازای هر گره عملکردی همانند الگوریتم فلوید-وارشال دارند. اما این الگوریتم ویژگیهایی دارد که آن را برجسته میکند:
روش مرتبسازی ادغامی (Merge Sort) یک روش مرتبسازی مبتنی بر مقایسهی عناصر با استفاده از روش تقسیم و غلبه است. این روش از مراحل بازگشتی زیر تشکیل یافته است:
1- آرایه را به دو زیرآرایه با اندازهی تقریبا یکسان تقسیم کن.
2- دو زیرآرایه را به روش مرتبسازی ادغامی مرتب کن.
3- دو زیرآرایهی مرتبشده را ادغام کن.
روش مرتبسازی سریع (Quick Sort) یکی از الگوریتمهای مشهور مرتبسازی دادهها است. این الگوریتم طی مراحل بازگشتی زیر یک روش تقسیم و غلبه برای مرتب کردن دادهها ارائه مینماید:
1- انتخاب عنصر محوری: یکی از عناصر آرایه به عنوان عنصر محوری (pivot) - به عنوان مثال عنصر اول - انتخاب میشود.
2- تقسیم آرایه: چینش عناصر آرایه به قسمی تغییر داده میشود که تمامی عناصر کوچکتر یا مساوی محور در سمت چپ آن و تمامی عناصر بزرگتر در سمت راست آن قرار بگیرند. این دو قسمت زیر آرایههای چپ و راست نامیده میشوند.
روش مرتبسازی درجی (Insertion Sort) یکی از روشهای مقدماتی مرتبسازی مبتنی بر مقایسهی عناصر است که در مقایسه با روشهای دیگر بیشتر مورد توجه قرار دارد.
قفسهی کتابی را در نظر بگیرید که قصد دارید کتابها را بر اساس عنوان و به ترتیب حروف الفبا مرتب کنید. از یک سمت قفسه شروع به مرتب کردن میکنید. ابتدا کتاب دوم را با کتاب اول مقایسه کرده و در صورت لزوم جابجا میکنید. سپس کتاب سوم را از محل خود برداشته و در مقایسه با دو کتاب قبلی در محل مناسب قرار میدهید. به همین ترتیب کتابهای بعدی را نیز نسبت به کتابهای مرتبشدهی قبلی در محل مناسب درج میکنید تا به آخر قفسه برسید.
روش مرتبسازی انتخابی (Selection Sort) یکی از روشهای اولیهی مرتبسازی بر اساس مقایسهی عناصر است. این الگوریتم طی چند مرحله عناصر لیست را به صورت صعودی یا نزولی مرتب میکند. به این ترتیب که در هر مرحله با بررسی عناصر نامرتب، بزرگترین (یا کوچکترین) عنصر را پیدا کرده و به انتهای لیست منتقل میکند.
لیست اعداد زیر را در نظر بگیرید که باید به صورت صعودی (کوچک به بزرگ) مرتب شود:
2 8 4 1 7
یکی از روشهای مرتبسازی، روش مرتبسازی حبابی (Bubble Sort) است که به آن روش تعویض استاندارد (Standard Exchange) نیز میگویند. این روش شامل چند مرحله است که در هر مرحله یک عنصر از لیست به طور قطع در محل مناسب خود قرار میگیرد.
لیست زیر را در نظر بگیرید که میخواهیم به صورت صعودی (از کوچک به بزرگ) مرتب کنیم:
4 3 8 1 6 2