برنامه محاسبه حداقل سکوهای لازم برای ایستگاه قطار – راهنمای کاربردی

۱۴۲
۱۴۰۲/۰۴/۷
۶ دقیقه
PDF
آموزش متنی جامع
امکان دانلود نسخه PDF

در این مطلب، روش نوشتن برنامه محاسبه حداقل سکوهای لازم برای ایستگاه قطار مورد بررسی قرار گرفته و پیاده‌سازی آن در زبان‌های برنامه‌نویسی گوناگون شامل «سی‌پلاس‌پلاس» (++C)، «جاوا» (Java)، «پایتون» (Python)، «سی‌شارپ» (#C) و «پی‌اچ پی» (PHP) انجام شده است.

برنامه محاسبه حداقل سکوهای لازم برای ایستگاه قطار – راهنمای کاربردیبرنامه محاسبه حداقل سکوهای لازم برای ایستگاه قطار – راهنمای کاربردی
997696

برنامه محاسبه حداقل سکوهای لازم برای ایستگاه قطار

زمان‌های ورود و خروج همه قطارهایی که به یک ایستگاه قطار می‌رسند، داده شده است. هدف، محاسبه حداقل سکوهای لازم برای ایستگاه قطار به گونه‌ای است که هیچ قطاری منتظر نماند. در این راستا، دو آرایه داده شده است که زمان ورود و خروج قطارهایی که توقف می‌کنند در آن وجود دارد.

مثال زیر، به درک بهتر این مطلب، کمک می‌کند.

Input: arr[] = {9:00, 9:40, 9:50, 11:00, 15:00, 18:00}
dep[] = {9:10, 12:00, 11:20, 11:30, 19:00, 20:00}
Output: 3
There are at-most three trains at a time (time between 11:00 to 11:20)

نیاز به پیدا کردن حداقل تعداد قطارهایی است که در هر بار، در یک ایستگاه قطار وجود دارند. یک راهکار ساده، هر بار در نظر گرفتن یک وقفه (فاصله | فرجه) و سپس، پیدا کردن تعداد وقفه‌هایی است که با آن وقفه هم‌پوشانی دارند. بدین صورت، ردیابی حداکثر تعداد وقفه‌هایی که با یک وقفه هم‌پوشانی دارند، ادامه پیدا می‌کند. پیچیدگی زمانی این روش از درجه O(n۲)‎ است.

می‌توان این مسئله را در زمانی از درجه O(N Log N)‎ حل کرد. ایده آن است که همه رویدادها به صورت مرتب شده‌ای در نظر گرفته شوند. هنگامی که همه رویدادها به صورت مرتب شده باشند، می‌توان تعداد کل قطارها و تعداد قطارهایی که رسیده‌اند را پیگیری کرد؛ اما نمی‌توان این کار را برای قطارهای خروجی انجام داد. برای درک بهتر مطلب، مثال زیر قابل توجه است.

  arr[]  = {9:00,  9:40, 9:50,  11:00, 15:00, 18:00}
    dep[]  = {9:10, 12:00, 11:20, 11:30, 19:00, 20:00}

All events sorted by time.
Total platforms at any time can be obtained by subtracting total 
departures from total arrivals by that time.
 Time     Event Type     Total Platforms Needed at this Time                               
 9:00       Arrival                  1
 9:10       Departure                0
 9:40       Arrival                  1
 9:50       Arrival                  2
 11:00      Arrival                  3 
 11:20      Departure                2
 11:30      Departure                1
 12:00      Departure                0
 15:00      Arrival                  1
 18:00      Arrival                  2 
 19:00      Departure                1
 20:00      Departure                0

Minimum Platforms needed on railway station = Maximum platforms 
                                              needed at any time 
                                           = 3

در ادامه، پیاده‌سازی رویکرد بالا ارائه شده است. شایان ذکر است که پیاده‌سازی ارائه شده، یک لیست مجرد مرتب‌سازی شاده از همه رویدادها نمی‌سازد. بلکه، به طور جداگانه‌ای آرایه‌های arr[]‎ و dep[]‎ مرتب می‌شوند و سپس، از فرایند ادغام موجود در «مرتب سازی ادغامی» (Merge Sort) استفاده می‌شود. شایان ذکر است که در این رویکرد، فرض بر این است که همه قطارها در تاریخ یکسانی، ورود و خروج دارند.

برنامه محاسبه حداقل سکوهای لازم برای ایستگاه قطار در ++C

برنامه محاسبه حداقل سکوهای لازم برای ایستگاه قطار در جاوا

برنامه محاسبه حداقل سکوهای لازم برای ایستگاه قطار در پایتون ۳

برنامه محاسبه حداقل سکوهای لازم برای ایستگاه قطار در #C

برنامه محاسبه حداقل سکوهای لازم برای ایستگاه قطار در PHP

خروجی قطعه کدهای بالا، به صورت زیر است.

Minimum Number of Platforms Required = 3

در روش ارائه شده در بالا، از «برنامه‌نویسی پویا» (Dynamic Programming) استفاده شده است.

پیچیدگی زمانی این روش، با فرض اینکه الگوریتم مرتب‌سازی برای مرتب کردن arr[]‎ و dep[]‎ از درجه O(N Log N)‎ باشد، از درجه O(N Log N)‎ است.

اگر نوشته بالا برای شما مفید بوده است، آموزش‌های زیر نیز به شما پیشنهاد می‌شوند:

بر اساس رای ۲ نفر
آیا این مطلب برای شما مفید بود؟
اگر پرسشی درباره این مطلب دارید، آن را با ما مطرح کنید.
منابع:
GeeksforGeeks
PDF
مطالب مرتبط
نظر شما چیست؟

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *