[PROGRAMMERS]-接続島(Greedy)



📃 つなぎ島

に答える


Kruskalアルゴリズム

  • 貪欲な方法を利用して、ネットワーク内のすべての頂点(幹線に重み値を割り当てる図形)を最低コストで接続する最適な答えを求める
  • .

    貪欲な方法とは何ですか。

  • の決定を下すたびに、あなたが一番いいと思う瞬間を選んで、最終的に得た答えは
  • です.
  • 貪欲な方法はその瞬間が一番だが、全体的に最良の保証はなく、検証しなければならない.
    1)最小料金幹線からなる2)周期を含まない条件により各段階で周期を構成しない最小料金幹線を選択する.
  • Kruskalアルゴリズムの動作

  • グラフの幹線を重み付け昇順に並べます.
  • に並ぶ幹線リストでは、周期を順番に形成しない幹線が選択される.
    つまり、まず最も低い重みを選択します.周期を形成する幹線を除く.この幹線を現在のMST(最小費用拡張ツリー)のセットに追加します.
  • コード#コード#

    def solution(n, costs):    
        answer = 0 
        costs.sort(key = lambda x : x[2])
        connect = set([costs[0][0]]) # 연결을 확인하는 집합
        while n != len(connect):
            for cost in costs : 
                if cost[0] in connect and cost[1] in connect:
                    continue
                if cost[0] in connect or cost[1] in connect:
                    connect.update([cost[0],cost[1]])
                    
                    answer += cost[2]
                    break
    
        return answer
    
  • connectセット
  • 接続された島を決定するために使用される
  • 島は重複できないため、リスト
  • ではなくコレクションを使用する.
  • Kruskalアルゴリズムにより最小費用を求めた.
  • の繰り返し文でコスト計算を行い、2つの島がconnectでスキップされた場合、2つの島のうち1つしかない場合は、2つの島をconnectに追加し、答えに費用を追加します.