Jgrapht: グラフ彩色の実装の改善(Brelaz DFSなど)

作成日 2019年04月18日  ·  5コメント  ·  ソース: jgrapht/jgrapht

学校のプロジェクトの一環として、現在の茶色のグラフ彩色アルゴリズムを高速化/改善できるいくつかのアルゴリズムに取り組んできました。 これには、Brownの元のアルゴリズム、Brelaz DSATURアルゴリズム、およびPASSアルゴリズムのより高速なバージョンが含まれます。 さらに、最大クリークを事前に着色する機能を実装しました。 このために、クリークの外側の頂点に接続するエッジが最も多い最大クリークを返す追加のクリークファインダーもあります。 最後に、グラフの前処理(色数に影響を与えない頂点を削除)を実装しました。 これらの削除された頂点は、後で正しい色で追加されます。

したがって、これらのアルゴリズムの出力は、色数と同じ量の色を使用する完全に色付けされたグラフです。

これらのアルゴリズムをJGraphtライブラリに統合しました。 これはあなたにとって興味深いものですか?

最も参考になるコメント

それは間違いなく興味深いでしょう。

ただし、過去の経験から言えば、レビューが不可能な1つの大きなプルリクエストではなく、貢献を小さな部分に分割し、十分に文書化された自己完結型の小さなプルリクエストを送信するのが最善です。

さらに、すでにいくつかの欲張り着色アルゴリズムがあります。 たとえば、ヒューリスティックなDSATURアルゴリズムは、クラスSaturationDegreeColoring実装されています。

DSATURが、Brelazによる正確な分枝限定法DSATURアルゴリズムを意味する場合、それが欠落しているので、ライブラリに含めるのは本当に素晴らしいことです。 さらに、PASSアルゴリズムのような改良版も大歓迎です。

全てのコメント5件

それは間違いなく興味深いでしょう。

ただし、過去の経験から言えば、レビューが不可能な1つの大きなプルリクエストではなく、貢献を小さな部分に分割し、十分に文書化された自己完結型の小さなプルリクエストを送信するのが最善です。

さらに、すでにいくつかの欲張り着色アルゴリズムがあります。 たとえば、ヒューリスティックなDSATURアルゴリズムは、クラスSaturationDegreeColoring実装されています。

DSATURが、Brelazによる正確な分枝限定法DSATURアルゴリズムを意味する場合、それが欠落しているので、ライブラリに含めるのは本当に素晴らしいことです。 さらに、PASSアルゴリズムのような改良版も大歓迎です。

おい! 興味があると聞いて良かったです! 私は確かにBrelazの分枝限定DSATURアルゴリズムについて話している。 内部の依存関係のため、別のプルリクエストにアップロードするのは少し難しいかもしれません。 これら3つのバックトラッキングアルゴリズムはすべて多くの類似点があるため、重複コードを制限するために継承構造を使用することにしました。 これは、BaseBronKerboschCliqueFinderとそれに続くサブクラスに使用される構造に似ています。 さらに、クリークファインダーはバックトラッキングアルゴリズムで使用され、最高のクリークを事前に色付けします。 これをバックトラッキングアルゴリズムから削除し、代わりにブロンカーボッシュクリークファインダーを使用することもできます。 フルプルリクエストの合計サイズは、5つのクラスファイルに加えて(BaseBackTrack、BackTrackColoringBrown、BackTrackColoringDSATUR、BackTrackColoringPass、およびPattabiramanMaximumCliqueFinder)、それぞれのテストケースになります。 この場合のプルリクエストに関して、あなたはどのようなアドバイスをしますか?

2つのプルリクエストに分割できますか?

  • CliqueAlgorithmインターフェースを実装できるクリークファインダーを備えた1つのPR
  • 3つのカラーリングアルゴリズムと基本クラスを備えた1つのPR。

2つの部分を分離するために、カラーリングアルゴリズムは、コンストラクター引数として、目的のクリークアルゴリズムを返す関数を期待できます。 Function<Graph<V,E>, CliqueAlgorithm<V>>ようなものでうまくいくと思います。

また、わずかに異なる命名スキームを使用しています。 BaseBacktrackColoring, BrownBacktrackColoring, PassBacktrackColoring, DsaturBacktrackColoringます。

ご意見ありがとうございます。 できるだけ早くプルリクエストをまとめるように努めます。 さらに、現在、私たちのクリークアルゴリズムは、最大1つのクリーク(つまり、頂点の組み合わせが最も多いクリーク)のみを返します。 これを行ったのは、計算が高速になるためです。関心があるのは、単一のクリークの事前着色のみです。 ただし、クリークアルゴリズムに基づいて、すべての最大クリークのセットを返すのが一般的です。 これも実装して、MaximalCliqueEnumerationAlgorithmインターフェイスの一部にしますか?

MaximalCliqueEnumerationAlgorithmは、「最大」を列挙するアルゴリズムのインターフェースですが、必ずしも「最大」クリークである必要はありません。

実装で最大クリークを検索する場合は、 CliqueAlgorithmを実装することをお勧めします。

Pattabiraman et al。の論文をざっと見た後、最初の著者だけを使用して、アルゴリズムに名前を付けない名前にクラスの名前を変更することをお勧めします。 たぶんPPGLCMaximumCliqueFinderようなものです。 通常、Javadocには適切な参照も含まれています。

このページは役に立ちましたか?
0 / 5 - 0 評価

関連する問題

jsichi picture jsichi  ·  12コメント

io7m picture io7m  ·  53コメント

hulk-baba picture hulk-baba  ·  13コメント

haerrel picture haerrel  ·  5コメント

nikhilbhardwaj picture nikhilbhardwaj  ·  3コメント