ホームページ > バックエンド開発 > C++ > アクティビティ選択問題用の C プログラム

アクティビティ選択問題用の C プログラム

王林
リリース: 2023-09-11 22:13:02
転載
566 人が閲覧しました

アクティビティ選択問題用の C プログラム

#アクティビティ選択問題は、一連のアクティビティとその開始時刻と終了時刻が与えられた場合に発生する問題です。人が 1 つのアクティビティを同時に実行できるすべてのアクティビティを見つける必要があります。

この問題では、次に実行するアクティビティを選択する貪欲なアルゴリズムを指定します。まずは 貪欲なアルゴリズム を理解しましょう。

貪欲アルゴリズムは、段階的に解決策を見つけることで問題の解決策を見つけようとするアルゴリズムです。次のステップを選択するために、アルゴリズムは最も有望と思われるステップ、つまり、残りのステップと比較してすぐに最適化されたソリューションにつながるステップも選択します。貪欲アルゴリズムは、次の中間ステップの最適な解決策を見つけようとするため、最適化問題を解決するために使用され、問題全体の最適な解決策につながります。

貪欲アルゴリズムは優れたソリューションですが、適用を妨げる問題がいくつかあります。たとえば、0-1 のナップザックは、貪欲なアルゴリズムを使用して解決することはできません。

アルゴリズム

標準的な貪欲アルゴリズムには、-

1) Dijkstrata’s Shortest Path
2) Minimum Spanning Tree (MST) {prim’s and kruskal’s}
3) Huffman coding
ログイン後にコピー

非アクティブ選択問題があり、開始時間と終了時間に関する n 個の問題が与えられます。人が一度に 1 つのアクティビティしか実行できないと仮定して、人が実行できるアクティビティの最大数を選択する必要があります。

アクティビティは終了時間順に 3 つあります。

Start = [1 , 5 , 12 ]
End = [10, 13, 23]
ログイン後にコピー

ここでは、最大 2 つのアクティビティを実行できます。実行できるアクティビティは [0, 2] です。

デモンストレーション

#include<stdio.h>
int main(){
   int start[] = {1 , 5 , 12};
   int finish[] = {10, 13, 23};
   int activities = sizeof(start)/sizeof(start[0]);
   int i, j;
   printf ("Following activities are selected \t");
   i = 0;
   printf("%d\t", i);
   for (j = 1; j < activities; j++){
      if (start[j] >= finish[i]){
         printf ("%d ", j);
         i = j;
      }
   }
   return 0;
}
ログイン後にコピー

出力

Following activities are selected 0 2
ログイン後にコピー

以上がアクティビティ選択問題用の C プログラムの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:tutorialspoint.com
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
最新の問題
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート