Python
 Computer >> コンピューター >  >> プログラミング >> Python

Pythonでプリムのアルゴリズムを使用してMSTを見つけるプログラム


グラフが与えられ、そのグラフから「最小スパニングツリー」(MST)を見つけるように求められたとします。グラフのMSTは、すべての頂点が存在して接続され、サブセットにサイクルが存在しない加重グラフのサブセットです。 MSTの合計エッジ重みがグラフから可能な限り最小であるため、MSTは最小と呼ばれます。したがって、ここではプリムのMSTアルゴリズムを使用して、特定のグラフからMSTの合計エッジウェイトを見つけます。

したがって、入力が次のような場合

Pythonでプリムのアルゴリズムを使用してMSTを見つけるプログラム

、頂点の数(n)は4で、開始頂点(s)=3の場合、出力は14になります。

このグラフのMSTは次のようになります-

Pythonでプリムのアルゴリズムを使用してMSTを見つけるプログラム

このMSTの合計エッジウェイトは14です。

これを解決するには、次の手順に従います-

  • 関数mst_find()を定義します。これにはGがかかります、s
    • distance:=負の無限大の値で初期化されたサイズGの新しいリスト
    • 距離[s]:=0
    • itr:=値Falseで初期化されたサイズGの新しいリスト
    • c:=0
    • Trueの場合は、
      • min_weight:=無限大
      • m_idx:=-1
      • 0からGのサイズの範囲のiの場合、
        • itr [i]がFalseと同じ場合、
          • distance [i]
          • min_weight:=distance [i]
          • m_idx:=i
    • m_idxが-1と同じ場合、
      • ループから抜け出す
    • c:=c + min_weight
    • itr [m_idx]:=True
    • G [m_idx]の値の各ペアi、jについて、do
      • distance [i]:=最小距離[i]、j
  • return c
  • G:=他のn個のマップを含む新しいマップ
  • エッジの各アイテムについて、
    • u:=item [0]
    • v:=item [1]
    • w:=item [2]
    • u:=u-1
    • v:=v-1
    • min_weight =min(G [u、v]、w)
    • G [u、v]:=min_weight
    • G [v、u]:=min_weight
  • return mst_find(G、s)
  • 理解を深めるために、次の実装を見てみましょう-

     def mst_find(G、s):distance =[float( "inf")] * len(G)distance [s] =0 itr =[False] * len(G)c =0 while True:min_weight =float( "inf")m_idx =-1 for i in range(len(G)):if itr [i] ==False:if distance [i]  

    入力

     4、[(1、2、5)、(1、3、5)、(2、3、7)、(1、4、4)]、3 

    出力

     14 

    1. Pythonを使用して2つの式ツリーが同等であるかどうかを確認するプログラム

      2つの式ツリーが提供されているとします。 2つの式ツリーをチェックし、式ツリーが同様の値を生成するかどうかを判断するプログラムを作成する必要があります。 2つの式ツリーは順番に提供され、一致する場合はTrue値を返し、一致しない場合はFalse値を返します。 したがって、入力が次のような場合 その場合、出力はTrueになります。 2つの式ツリーは同じ値に評価されます。 これを解決するには、次の手順に従います。 関数dfs()を定義します。これはノード、dicを取ります ノードが空の場合、 戻る ノードの左側とノードの右側が空でない場合、 dic

    2. Pythonを使用してバイナリツリーの右側のノードを見つけるプログラム

      バイナリツリーが提供されているとします。また、ノード(「u」という名前)へのポインターが与えられ、提供されたノードのすぐ右にあるノードを見つける必要があります。特定のノードの右側にあるノードは同じレベルにとどまる必要があり、特定のノードはリーフノードまたは内部ノードのいずれかになります。 したがって、入力が次のような場合 u =6の場合、出力は8になります。 ノード6の右側にあるノードはノード8であるため、値8が返されます。 これを解決するには、次の手順に従います- ルートが空の場合、 nullを返す dq:=新しい両端キュー dqの最後にルートを挿入