آیا تا حالا به این فکر کردین که گوگلمپ چه طوری میتونه کوتاهترین و سادهترین مسیر بین دو مکان رو پیدا کنه؟ جواب این سؤال، استفاده از الگوریتم دایجسترا در آموزش برنامه نویسی هست. این الگوریتم، یک الگوریتم گراف هست که میتونه کوتاهترین مسیر از رأس مبدأ رو بهتمامی رئوس دیگه در گراف پیدا کنه. خوب، اگر علاقه دارین با این الگوریتم بیشتر آشنا بشین و مفاهیم اون رو درک کنین، مطالعه این مقاله، کمک زیادی به شما میکنه. ما در این مقاله از بلاگ کندو، علاوه بر تعریف و معرفی الگوریتم شناخته شده دایجسترا، قصد داریم مزیتها و کاربردهای این الگوریتم رو معرفی کنیم و شما رو با این الگوریتم بیشتر آشنا کنیم.
تعریف گرافها
قبل از بررسی الگوریتم دایجسترا، قصد داریم مقدمه کوتاهی رو در مورد گرافها بهعنوان پیشنیاز این الگوریتم بیان کنیم. گرافها، ساختارهای دادهای غیرخطی هستن که ارتباط بین عناصر (المانها) رو نشون می دن. این المانها، رأس و خطوط یا قوسهایی که هر دو رأس رو در گراف به هم متصل میکنن، لبه نامیده می شن.
کاربردهای گرافها
گرافها برای حل بسیاری از مسائل واقعی استفاده می شن. گرافها برای نمایش شبکهها، به کارگرفته می شن. ممکنه این شبکهها شامل شبکههای مدار یا تلفن یا مسیرهای خیابانهای یک شهر باشن. همچنین گرافها در پلتفرمهای گوناگون رسانههای اجتماعی مثل لینکدین، فیسبوک یا توییتر استفاده می شن. مثلاً، فیسبوک از گرافها برای ذخیره کردن دادههای کاربران استفاده میکنه، بهنحویکه هر شخص، یک رأس لحاظ میشه و ساختار هر کدوم از اونها دارای اطلاعاتی مثل شماره شناسایی فرد، نام، جنسیت، آدرس و اطلاعات دیگه هست.
انواع گرافها
گرافها به دو دسته گرافهای جهتدار و بدون جهت تقسیم میشن.
گراف بدون جهت
گراف دارای لبههایی که جهت ندارن، گراف بدون جهت نامیده میشه. لبههای این گراف، یک رابطه دوطرفه رو نشون میده که امکان حرکت هر لبه در دو جهت وجود داره.
گراف جهتدار
یک گراف با لبههای دارای جهت، گراف جهتدار هست. لبههای این گراف، یک رابطه یکطرفه رو نشون میده و امکان حرکت هر لبه در یک جهت وجود داره.
گراف وزنی
یک گراف زمانی گراف وزنی نامیده میشه که یک وزن مشخص به هر لبه اختصاص داده بشه. وزن یک لبه میتونه فاصله، زمان یا هر چیز دیگهای که ارتباط بین جفت رئوس رو مدلسازی میکنه، نشون بده.
تعریف الگوریتم دایجسترا
الگوریتم پرکاربرد دایجسترا، یک الگوریتم گراف هست که میتونه کوتاهترین مسیر از رأس مبدأ رو بهتمامی رئوس دیگه در گراف پیدا کنه. این الگوریتم یه جور الگوریتم حریصانه هست که صرفاً بر روی گرافهای وزنی که وزن مثبت دارن، اجرا میشه.
تاریخچه الگوریتم دایجسترا
الگوریتم دایجسترا توسط، دکتر وی. دایجسترا دانشمند، مهندس نرمافزار، و برنامهنویس آلمانی علوم رایانه، طراحی و منتشر شد. دایجسترا، مسئله کوتاهترین مسیر رو در زمانی که بهعنوان برنامهنویس در مرکز ریاضی آمستردام در سال 1956 کار میکرد، بررسی کرد و قصد داشت تا قابلیتهای یک رایانه جدید با نام ARMAC رو نشون بده.
اصول بنیادین الگوریتم دایجسترا
اصول و مفاهیم اصلی این الگوریتم عبارتاند از:
- این الگوریتم در گرهی که ما انتخاب میکنیم، شروع میشه (گره مبدأ) و گراف رو برای یافتن کوتاهترین مسیر بین اون گره و کلیه گرههای دیگه در گراف، ارزیابی میکنه
- این الگوریتم، سوابق کوتاهترین شناخته شده را از هر گره به گره مبدأ ثبت میکنه و اگر مسیر کوتاهتری رو پیدا کنه، این مقادیر رو بهروز میکنه.
- زمانی که این الگوریتم کوتاهترین مسیر رو بین گره مبدأ و گرههای دیگه بازیابی کرد، این گره بهعنوان گره بازدید شده و لحاظ شده در مسیر، علامت زده میشه.
- این رویه تا زمان در نظر گرفتن تمامی گرهها در گراف در مسیر ادامه پیدا میکنه. در این حالت، ما یک مسیر داریم که گره مبدأ رو به کلیه گرههای دیگه وصل میکنه تا کوتاهترین مسیر، به دست بیاد.
درک اصول عملیاتی الگوریتم دایجسترا
گراف و رأس مبدأ، الزامات این الگوریتم هستن. این الگوریتم، بر اساس رویکرد حریصانه عمل میکنه و در هر مرحله از الگوریتم، انتخاب بهینه محلی (کمینه محلی) رو پیدا میکنه.
هر رأس تو این الگوریتم دو خصوصیت بازدید شده و خصوصیت مسیر رو داره.
خصوصیت بازدید شده
- خصوصیت بازدید شده، بازدید شدن یا نشدن گره رو نشون میده.
- ما از این خصوصیت استفاده میکنیم، بهطوریکه هیچ گرهی رو دوباره بازدید نمیکنیم.
- یک گره هنگامی بازدید شده شناخته میشه که کوتاهترین مسیر پیدا بشه.
خصوصیت مسیر
- خصوصیت مسیر، مقدار مسیر جریان حداقل رو برای گره، ذخیره میکنه.
- حداقل مسیر موجود، کوتاهترین مسیر پیدا شده تا گره هست.
- این خصوصیت زمانی اصلاح میشه که هر همسایه گره، بازدید بشه.
- این خصوصیت به این دلیل اهمیت داره که جواب نهایی رو برای هر گره، ذخیره میکنه.
مزیتها و معایب الگوریتم دایجسترا
مزایا
- مزیت اصلی استفاده از این الگوریتم، داشتن پیچیدگی فضایی و زمانی خطی هست.
- می تونیم از این الگوریتم برای محاسبه کوتاهترین مسیر از یک رأس برای کلیه رئوس دیگه و یک رأس مبدأ به رأس مقصد با متوقف کردن الگوریتم با رسیدن به کوتاهترین فاصله برای رأس مقصد، استفاده کنیم.
- این الگوریتم صرفاً بر روی گرافهای وزنی جهتدار عمل میکنه و باید کلیه لبههای این گراف، غیر منفی باشن.
معایب
- این الگوریتم یک کاوش پنهانی رو انجام میده و به زمان زیادی حین فرآیند نیاز داره.
- این الگوریتم قادر به کنترل لبههای منفی نیست.
- این الگوریتم برای حفظ سابقه رئوس بازدید شده، نیازمند نگهداری هست.
بیشتر بخوانید: آموزش الگوریتم و فلوچارت {راهنمای جامع آموزشی}
بعضی از موارد استفاده الگوریتم دایجسترا
الگوریتم دایجسترا کاربردهای زیادی در حوزههای مختلف داره که به بعضی از اون ها اشاره میکنیم:
سرویسهای نگاشت دیجیتال در گوگل مپ
بارها پیش اومده که برای پیدا کردن مقصد مورد نظر خودمون در کوتاهترین فاصله ممکن نسبت به مبدأ، از گوگل مپ استفاده کردیم. صرفاً الگوریتم دایجسترا میتونه به این برنامه کمک کنه تا کوتاهترین مسیر بین دو نقطه رو در امتداد مسیر نشون بده.
برنامههای شبکه اجتماعی
در بسیاری از برنامه و پلتفرمهای پرطرفدار شبکههای اجتماعی، می تونیم فهرستی از مخاطبان رو ببینیم که ممکنه یک کاربر اونها رو بشناسه. با وجود میلیاردها نفر کاربر، شرکتها پلتفرمهای اجتماعی چه طوری میتونن این ویژگی رو بهصورت مؤثر و کارآمد اجرا کنن؟ جواب این سؤال هم آشناست.
بله درسته، الگوریتم کمنظیر دایجسترا. این الگوریتم عموماً برای تخمین کوتاهترین مسیر کاربرها از طریق ارتباطها یا روابط متقابل کاربران استفاده میشه. در پلتفرمهای اجتماعی، هر چه قدر گراف بزرگتر بشه، اجرای الگوریتم استاندارد نیازمند صرف چند ثانیه زمان هست و در نهایت، ممکنه الگوریتمهای پیشرفته بهعنوان جایگزین استفاده بشن.
برای شروع آموزش برنامه نویسی در کندو کلیک کنید.
شبکه تلفن
در یک شبکه تلفن، هر خط انتقال دارای پهنای باند مشخصی هست. پهنای باند، بزرگترین فرکانسی هست که خط انتقال، قابلیت پشتیبانی اون رو داره. بهطورکلی، اگر فرکانس سیگنال در یک خط خاص، بزرگتر باشه، این سیگنال با اون خط کاهش پیدا میکنه. پهنای باند، میزان اطلاعات قابلانتقال توسط یک خط رو نشون میده. شبکه تلفن هم در دسته مسئله کوتاهترین مسیر قرار میگیره و باید برای حل اون از الگوریتم پرکاربرد دایجسترا استفاده کرد.
برنامه پرواز
فرض کنید که شخصی به نرمافزاری برای آمادهسازی برنامههای پرواز برای مشتریان نیاز داره. این فرد مسئول به پایگاه داده کلیه پروازها و فرودگاهها دسترسی داره. علاوه بر شماره پرواز، فرودگاه مبدأ و مقصد، پروازها دارای زمان ورود و خروج هستن. بنابراین برای تعیین زودترین زمان رسیدن برای مقصد احتمالی از فرودگاه اصلی و با توجه به زمان شروع، افراد مسئول میتونن از الگوریتم پرطرفدار دایجسترا استفاده کنن.
تخصیص فایل سرور
می تونیم از الگوریتم مفید دایجسترا برای تخصیص یک فایل سرور در شبکه ناحیه محلی (LAN) استفاده کنیم. فرض کنید که یک دوره زمانی نامحدود برای انتقال فایلها از یک رایانه به رایانه دیگه لازم باشه. بنابراین برای حداقل کردن تعداد هاپ ها از فایل سرور به هر رایانه در شبکه، ما از این الگوریتم استفاده میکنیم.
بیشتر بخوانید: مبانی برنامه نویسی مقدماتی مخصوص تازه کارها
کلام آخر
ما در این راهنمای آموزشی در آموزشگاه مهندسی کندو، در مورد الگوریتم دایجسترا توضیح دادیم. این الگوریتم یکی از پرکاربردترین الگوریتمهایی هست که میتونه کوتاهترین مسیر بین دو گروه رو پیدا کنه. ما تو این مقاله با مفاهیم کلیدی و پایهای گراف با انواع و کاربردهای اون آشنا شدیم. همچنین با تاریخچه نحوه اجرای این الگوریتم آشنا شدیم. در نهایت علاوه بر مزیتها و معایب، بعضی از کاربردهای الگوریتم رو بیان کردیم.