私は隣接行列と隣接関係リストを持っています(いずれも使用できます)。どちらもグラフを表しています。無向グラフの非交差2サイクルの最大値を求める
基本的に、グラフ内の接続された頂点をペアにして、ペアのない(そして切断された)頂点が残っているようにするにはどうすればよいですか?
私はこの強引な戦略を試してみました:
def max_pairs(adj_matrix):
if len(adj_matrix) % 2:
# If there are an odd amount of vertices, add a disconnected vertex
adj_matrix = [adj + [0] for adj in adj_matrix] + [0] * (len(adj_matrix) + 1)
return max(adj_matrix)
def all_pairs(adj_matrix):
# Adapted from http://stackoverflow.com/a/5360442/5754656
if len(adj_matrix) < 2:
yield 0
return
a = adj_matrix[0]
for i in range(1, len(adj_matrix)):
# Recursively get the next pairs from the list
for rest in all_pairs([
adj[1:i] + adj[i+1:] for adj in adj_matrix[1:i] + adj_matrix[i+1:]]):
yield a[i] + rest # If vertex a and i are adjacent, add 1 to the total pairs
小さいグラフの大丈夫ですが、私が働いているグラフは、100の頂点まで持っています。
これを最適化して、大きなグラフを処理できる方法はありますか?
これはアルゴリズムのある別の問題と同義ですか?私は「ほとんど交差していないkサイクル」とそのバリエーションを検索しましたが、これを行うアルゴリズムは見つかりませんでした。
頂点または辺が離れていなければなりませんか?ペアの数ができるだけ多く、各頂点が最大で1つのペアに属するようにペアを作成する方法を見つけたいのですが、それはあなたですか? – kraskevich
@kraskevichはい。すべての頂点が入っている、最大で1つのペアをペアにし、各ペアはエッジで接続されています。 – Artyer