貪欲アルゴリズム?私はそれをすべてしたいです! - 章IVアルゴリズムShangjishijianレポート

章IVアルゴリズムShangjishijianレポート

練習のトピック

4-1  ストレージ手順で (90 

そこNテープの長さLに格納する手順{1,2、...、N}。私のプログラムは、テープ長li、1≤i≤nに保存されています。プログラム記憶は、磁気テープ上のプログラムに格納されているn個の手順を確立しようと、テープは、多くのプログラムとして保存することが可能となります。テープに格納することができ、所与のNプログラムはプログラムの数まで、磁気テープ長に格納されて計算されます。

入力フォーマット:

最初の行は、それぞれ、正の整数2であり、nは磁気テープの長さ文書Lの数を表します テープ長に格納されたプログラムを表す正の整数nの次の行、1。

出力フォーマット:

出力の数は、プログラムを格納することができます。

サンプル入力:

ここでは、入力のセットを与えられています。例えば:

6 50

2 3 13 8 80 20

出力例:

出力に対応し、ここで考えます。例えば:

5

 

第二に、問題の説明

このようなストアド・プロシージャ(番組選択がテープ長さの合計長さを超えることはできません)の最大数を選択するための記憶方法として、プログラムの数とテープの長さが、次の行の順次入力各番組の長さを入力します。

可能な限りのプログラムを格納するには、ちょうど常に最短貪欲アルゴリズムのように記述することができます思考の使用、を楽しみにテープを追加を選択する必要があります。

ここで、= 0変数Xiはi番目の番組がテープにロードされていないことを示し、XI = 1はi番目のテープをマウントすることを示し、Lは、テープの全長であり、長さLは、i番目のプログラムです。

第三に、アルゴリズム記述

1、貪欲アルゴリズム

    ソート(+のN)。
    int型のp = 0、カウント数= 0 ;
    以下のためにINT iが= 0 ; N I <; Iは++ ){
        カウント + = [I];
        もし(カウント<= M){
            P ++ ;
        }
    }

 

戦略:常に(ソートソート大に小型で直接使用)最小の長さが追加された選択

証明:

       リセットプロセス小から大への長さに応じて、(X1、X2、...、XN)最適解であり、セットK =分{I | XI = 1}(1≤i≤n)、問題は解決策を持っている場合、 1≤k≤n。

①k = 1のとき、(X1、X2、...、XN)は、選択された最適解の貪欲な性質を満たす数です。

②ときにK> 1、Y1 = 1、YK = 0、YI = XI、1 <i≤n、I≠Kを取って、

 

したがって、(Y1、Y2、...、YN)が問題の実行可能解です。

一方、で知られている、(Y1、Y2、...、 YN)が最適解の貪欲な性質を満たすように選択されます。

最適サブ構造:

       セット(X1、X2、...、XN)が最適解問題の貪欲な性質を満足するように選択され、その後、X1 = 1、(X2、X3、...、XN)はL-L1使用可能なテープの長さであり、プログラムが選択されます{2,3、...、n}は、最適なソリューション最適な負荷の問題に対応します。言い換えれば、問題は構造的な次善を持っています。

 

図2は、それが全長よりか否かを判断します

大規模なソートされた手順に小さなあなたがストップの長さの合計を超えた場合、テープを参加するためです。可変長で、カウント、追加のpで録画した番組の数を記録するために使用されています。

 

3、完全なコード

1の#include <iostreamの>
 2の#include <アルゴリズム>
 3  使用して 名前空間をSTD。
4  INT メイン(){
 5      INT N、M。
6      CIN >> N >> M。
7      INT [N]。
8      INT iが= 0 ; iが<N; I ++ ){
 9          CIN >> [I]は、
10      }
 11      ソート(+のN)。
12      int型のp = 0、カウント数= 0 ;
13      のためのint型I = 0 ; I <N; I ++ ){
 14          カウント+ = [I]。
15          であれば(数<= M){
 16              のp ++ 17          }
 18      }
 19      COUT << P << ENDL。
20      リターン 0 ;
21 }
完全なコード

 

アルゴリズム分析の時間と空間の複雑

+、時間計算量はO(n)は、すべての連続テープの最大長になるまで加え介してソートソートプログラムループである貪欲アルゴリズム、O(nlogn)の貪欲アルゴリズムの時間複雑さをソートのみソート。

この問題の解決策は、データを格納するための元の配列[N]の使用のみでは、元のソート、補助空間が使用されていません。

 

第四に、感情や経験

貪欲な問題が、私は、以前の動的なプログラミングに比べて、感じデバイドとはるかに簡単であることを問題を征服それをやって。貪欲な戦略を探している、反例のために引用した、そして最終的には最高のは、一般的な戦略、良い思考「何のほとんど」であるが、より良いコードを果たします。

 

おすすめ

転載: www.cnblogs.com/990924991101ywg/p/11876844.html