貪欲アルゴリズムの問題をカバーセット

貪欲なアルゴリズムを考えた:各ステップは、局所最適解を選択し、最後にグローバルな最適解を得ることです。

近似アルゴリズム:長い時間が厳密解を得るために必要とされるには、近似アルゴリズムを使用することができます。

近似アルゴリズムの基準を分析します:

速いスピードの添加;

最適解の近傍で得られた近似解。

貪欲アルゴリズムは単純ではないだけで、良い選択ですが、一般的に非常に迅速に実行されます。

操作を設定します。

組合:セットA |セットB

交差点演算子:セットA&セットB

設定した差分操作:セットA - セットB

コレクションは重複要素が含まれていません。

放送局の最小のほとんどのカバーエリア、異なる放送局のカバレッジエリアは、問題と重なっていてもよいです。

DEF貪欲(states_needed): 
格納放送局の最終的な選択
final_stations = SET()

一方がstates_needed:
ストレージがむき出し状態放送局の最もカバー
best_station =なし
位のために、被覆されたラジオ局によって覆われていないすべての状態を含みますループ繰り返し、各放送局、それは最高のラジオ局であるかどうかを判断
states_covered = SET()
放送局のすべてを#の反復
駅について、stations.items()内の状態:
#は駅の放送局の集合体で覆われていることを追求状態のコレクションの交差点カバー
=の対象とすることは米国&states_needed
状態のほとんどをカバーするラジオ局を見つけるたびに#を
lenのIFは(のカバー)>(states_covered)でlen:
現在のラジオ局の保存
best_station =ステーション
#はカバーされた状態の現在のセットを保存します
=のカバーstates_covered
#更新状態の組がカバーされます
states_needed - = states_covered
#将找出的广播台添加到最终集合
final_stations.add(best_station)

プリント(final_stations)
リターンfinal_stations


場合__name__ == '__main__':

states_needed =セット([ "MT"、 "WA"、 "または」、 "ID"、 "NV"、 "UT"、 "CA"、 "AZ"])
局= {}
ステーション[ "コネ"]([設定= "ID"、 "NV"、 "UT"] )
ステーション[ "ktwoは"]([ "WA"、 "ID"、 "MT"])SET =
ステーション[ "kthree"]に設定=([ "または"、 "NV"、 "CA"])
ステーション[」 kfour "]セット([=" NV " "UT"])
ステーション["kfive "] =は、([設定された" CA」、 "AZ"])
プリント()states_needed(貪欲)

 

おすすめ

転載: www.cnblogs.com/songyuejie/p/11422543.html