貪欲なアルゴリズムは、おおよその最適なソリューションを得ることができます。おおよその意味:最も完璧な値に近いが、最も完璧な値ではない
例を挙げてください:ナップザックの問題
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と呼ばれます。