الگوریتم جانسون
الگوریتم جانسون الگوریتمی برای پیدا کردن کوتاهترین مسیر بین تمام جفتهای راسی در گرافهای پراکنده جهت دار است. الگوریتم اجازه میدهد که وزن بعضی از یالهای گراف منفی باشد، ولی نباید دوری با وزن منفی وجود داشته باشد. این الگوریتم از الگوریتم بلمن-فورد بهره جسته تا گراف جدیدی بسازد که در آن تمام وزنهای منفی گراف حذف شده؛ و سپس از الگوریتم دیکسترا در گراف جدید استفاده میکند. نام این الگوریتم از دونالد بی جانسون*[۱] کسی که اولین بار در سال ۱۹۷۷ این تکنیک را منتشر کرد، گرفته شدهاست. توضیح الگوریتمالگوریتم جانسون شامل مراحل زیر میباشد.
به هر حال، به خاطر راهی که مقدار (h(v محاسبه شد، تمام طولهای یالهای تغییر یافته منفی نیستند و بهینه بودن مسیری که در الگوریتم دیکسترا پیدا شده مورد اطمینان است. مسافت را میتوان از روی مسافت حساب شده در الگوریتم دیکسترا در گراف وزن دهی مجدد به وسیلهٔ بالعکس کردن تبدیل وزن دهی مجدد محاسبه کرد. تحلیل پیچیدگیپیچیدگی زمان این الگوریتم با استفاده کردن از هیپ فیبوناتچی در اجرای الگوریتم دیکسترا میباشد: این الگوریتم زمان را برای قسمت بلمن-فورد و را برای هر بار اجرای الگوریتم دیکسترا مصرف میکند. بنابراین موقعی که گراف پراکنده است، زمان کل میتواند سریعتر از الگوریتم فلوید-وارشال باشد که همان مسئله را در زمان حل میکند. مثالسه مرحله اول الگوریتم جانسون در شکلهای زیر ترسیم شدهاست گراف سمت چپ دو یال منفی دارد اما هیچ طوقهٔ منفی ندارد. در مرکز، راس جدید q نشان داده شده است که کوتاهترین مسیر درخت که بوسیله الگوریتم بالمن-فورد محاسبه شده با q ، بعنوان راس شروع کننده ومقدار ( h(v که در هر گره دیگر به عنوان طول کوتاهترین مسیر از q تا آن گره محاسبه شدهاست. توجه کنید این مقدارها همه مثبت نیستند، به دلیل اینکه q، یال با طول صفر برای هر راس دارد و کوتاهترین مسیر نمیتواند بلند تر از آن یال باشد. در شکل سمت راست گراف وزن دهی مجدد نشان داده شده که به وسیلهٔ (w(u,v) + h(u) −h(v تشکیل شدهاست.در این گراف وزن دهی مجدد، تمام وزنهای یال منفی نیستند .اما کوتاهترین مسیر بین هر دو گره از همان ترتیب گرهها استفاده میکند که کوتاهترین مسیر بین همان دو گراف اصلی استفاده شدهاست. ![]() پانویس
منابع
Information related to الگوریتم جانسون |
Portal di Ensiklopedia Dunia