プログラミング
 Computer >> コンピューター >  >> プログラミング >> プログラミング

プラットフォームの最小数問題


到着時刻と出発時刻のリストが表示されます。ここで問題となるのは、列車が待たないため、鉄道に必要なプラットフォームの最小数を見つけることです。

すべてのタイミングを並べ替えて並べ替えることで、解決策を簡単に見つけることができます。電車が駅に到着したが駅を出ていないときを追跡するのは簡単です。

この問題の時間計算量はO(n Log n)です。

入力と出力

Input:
Lists of arrival time and departure time.
Arrival: {900, 940, 950, 1100, 1500, 1800}
Departure: {910, 1200, 1120, 1130, 1900, 2000}
Output:
Minimum Number of Platforms Required: 3

アルゴリズム

minPlatform(arrival, departure, int n)

入力- 到着時刻と出発時刻のリスト、およびリスト内のアイテム数

出力- 問題を解決するには、最小プラットフォームの数が必要です。

Begin
   sort arrival time list, and departure time list
   platform := 1 and minPlatform := 1
   i := 1 and j := 0

   for elements in arrival list ‘i’ and departure list ‘j’ do
      if arrival[i] < departure[j] then
         platform := platform + 1
         i := i+1
         if platform > minPlatform then
            minPlatform := platform
      else
         platform := platform – 1
         j := j + 1
   done
   return minPlatform
End

#include<iostream>
#include<algorithm>
using namespace std;

int minPlatform(int arrival[], int departure[], int n) {
   sort(arrival, arrival+n);     //sort arrival and departure times
   sort(departure, departure+n);

   int platform = 1, minPlatform = 1;
   int i = 1, j = 0;

   while (i < n && j < n) {
      if (arrival[i] < departure[j]) {
         platform++;     //platform added
         i++;
         if (platform > minPlatform)    //if platform value is greater, update minPlatform
            minPlatform = platform;
      } else {
         platform--;      //delete platform
         j++;
      }
   }
   return minPlatform;
}

int main() {
   int arrival[] = {900, 940, 950, 1100, 1500, 1800};
   int departure[] = {910, 1200, 1120, 1130, 1900, 2000};
   int n = 6;
   cout << "Minimum Number of Platforms Required: " << minPlatform(arrival, departure, n);
}

出力

Minimum Number of Platforms Required: 3

  1. C++を使用する鉄道駅に必要なプラットフォームの最小数。

    問題の説明 鉄道駅に到着するすべての列車の到着時刻と出発時刻を考えると、列車が待たないように、鉄道駅に必要なプラットフォームの最小数を見つけることがタスクです。 停車する列車の到着時刻と出発時刻を表す2つの配列が与えられます。 以下の入力には、少なくとも3つのプラットフォームが必要です- トレーニング 到着時間 出発時間 Train-1 09:00 09:15 Train-2 09:35 11:45 Train-3 09:40 11:05 Train-4 11:00 12:00 電車-5 14:30 1

  2. C++で最小ページ数を割り当てます

    最小ページ数を割り当てることはプログラミングの問題です。この問題について詳しく話し合い、解決策を見つけましょう。 ステートメント n冊の異なる本のページ数が与えられます 。また、m人の学生がいます 書籍の割り当て先。本はページ数の昇順で並べられています。そして、すべての学生にいくつかの連続した本を割り当てることができます。プログラムは、学生が読んだ最大ページ数を返す必要があります。これは最小でなければなりません。 この問題をよりよく理解するために例を見てみましょう。 Input : books[] = {13 , 43, 65, 87, 92}    m = 2 Out