Grokkingアルゴリズム(第8章)貪欲なアルゴリズム

貪欲なアルゴリズムは、おおよその最適なソリューションを得ることができます。おおよその意味:最も完璧な値に近いが、最も完璧な値ではない

例を挙げてください:ナップザックの問題

35ポンドの商品を収納できるバッグがあるとします。下の写真のアイテムから、最も価値のあるアイテムを選んでバッグに入れます。同時に、重量は35ポンドを超えることはできません。

貪欲なアルゴリズムを使用する手順は次のとおりです

 貪欲なアルゴリズムを使用する場合、3000の価値があるステレオしかバッグに入れることができませんが、最適な解決策は3500の価値があるラップトップとギターです。貪欲なアルゴリズムは最適な解決策ではありませんが、最も最適なソリューションアプローチ

以下は、貪欲なアルゴリズム(旅行関連)で一般的に使用されるシナリオです。

 

つまり、最適解を解くコストが非常に大きい場合、貪欲なアルゴリズムを使用して解を近似することができます。

例として

まず、setの機能を見てみましょう。Setはリスト内の重複コンテンツを削除することです。下の図から、重複2と3が削除されていることがわかります。

次の図に状況を示します。

次のコードを使用してこの選択作業を完了します。50の州が多すぎるため、州のサブセット(エリア)を選択します。その中の各ステーションはエリアの一部(州)をカバーします。すべての州(エリア)をカバーするには、最小のステーションを使用する必要があります)

states_needed = set(['mt', 'wa', 'or', 'id', 'nv', 'ut',
                    'ca', 'az'])
stations = {}
stations['kone'] = set(['id', 'nv', 'ut'])
stations['ktwo'] = set(['wa', 'id', 'mt'])
stations['kthree'] = set(['or', 'nv', 'ca'])
stations['kfour'] = set(['nv', 'ut'])
stations['kfve'] = set(['ca', 'az'])
 
final_stations = set()

while states_needed:
    best_station = None
    best_states = set()
    for station, states in stations.items():
        covered_states = states_needed & states
        if len(covered_states) > len(best_states):
            best_states = covered_states
            best_station = station
    final_stations.add(best_station)
    states_needed = states_needed-best_states
print (final_stations)

印刷されるのは{'ktwo'、 'kone'、 'kthree'、 'kfve'}であることがわかります。

NP完全問題

上記のステーションを見つける場合は、考えられるすべてのソリューションを計算し、最小/最短のソリューションを選択します。この状況はNP-completeと呼ばれ、計算コストが非常に高い問題はNP-completeと呼ばれます。

総括する

おすすめ

転載: blog.csdn.net/Gussss/article/details/96152797