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

グラフ内の最大のクリークの最小サイズを見つけるプログラム(Python)


グラフが与えられ、グラフ内の最大のクリークの最小サイズを見つけるように求められたとします。グラフのクリークは、頂点のすべてのペアが隣接している、つまり頂点のすべてのペアの間にエッジが存在するグラフのサブセットです。グラフ内で最大のクリークを見つけることは多項式時間では不可能であるため、小さなグラフのノードとエッジの数を考えると、グラフ内の最大のクリークを見つける必要があります。

したがって、入力がノード=4、エッジ=4のような場合。その場合、出力は2になります。

グラフ内の最大のクリークの最小サイズを見つけるプログラム(Python)

上のグラフでは、クリークの最大サイズは2です。

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

  • 関数helper()を定義します。これにはx、y
      がかかります
    • ga:=x mod y
    • gb:=y --ga
    • sa:=(x / y)+1の値の商
    • sb:=(x / y)の値の商
    • return ga * gb * sa * sb + ga *(ga-1)* sa * sa / 2 + gb *(gb-1)* sb * sb / 2
  • i:=1
  • j:=ノード+1
  • i + 1
  • p:=i +フロア値((j --i)/ 2)
  • k:=helper(nodes、p)
  • k <エッジの場合、
    • i:=p
  • それ以外の場合、
    • j:=p
  • return j
  • 理解を深めるために、次の実装を見てみましょう-

    import math
    def helper(x, y):
        ga = x % y
        gb = y - ga
        sa = x // y + 1
        sb = x // y
        return ga * gb * sa * sb + ga * (ga - 1) * sa * sa // 2 + gb * (gb - 1) * sb * sb // 2
    
    def solve(nodes, edges):
        i = 1
        j = nodes + 1
        while i + 1 < j:
            p = i + (j - i) // 2
            k = helper(nodes, p)
            if k < edges:
                i = p
            else:
                j = p
        return j
    
    print(solve(4, 4))
    

    入力

    4,4

    出力

    2

    1. Pythonのグラフでクリティカルエッジと疑似クリティカルエッジを見つけるプログラム

      0からn-1までの番号が付けられたn個の頂点を含むグラフが与えられたとします。グラフは無向であり、各エッジには重みがあります。したがって、グラフが与えられた場合、グラフMSTのクリティカルエッジと疑似クリティカルエッジを見つける必要があります。エッジを削除するとMSTの重みが増加する場合、そのエッジはクリティカルエッジと呼ばれます。疑似クリティカルエッジは、すべてではなく、すべてのグラフMSTに表示できるエッジです。グラフを入力として与えられたエッジのインデックスを見つけます。 したがって、入力が次のような場合 頂点の数が5の場合、出力は[[]、[0、1、2、3、4]]になります。指

    2. 配列内の最大の要素を見つけるPythonプログラム

      この記事では、以下に示す問題ステートメントの解決策について学習します。 問題の説明 −配列が与えられたので、配列の最大要素を計算する必要があります。 ここでは、ループ全体をトラバースして最大の要素を計算し、要素を取得するブルートフォースアプローチを使用します。 以下の実装を観察できます。 例 # largest function def largest(arr,n):    #maximum element    max = arr[0]    # traverse the whole loop    for