いくつかの無向、非加重、接続された、そして潜在的に並列化されたグラフを考える 、オイラー回路は、すべての頂点の次数が偶数である場合に構築されます。
奇数の次数の頂点が2つ以上あるグラフ(2の倍数のみが存在する場合があります)では、グラフを「乳化」し、必要に応じて、奇数の頂点を他の頂点を介して追加のエッジで接続する必要があります。
オイラー化の最適なケースは、エッジのみの構成です。ここで、は奇数の頂点の数ですが、これは、各奇数の頂点に隣接するパートナーが存在する場合にのみ該当するため、両方の頂点を1つのエッジと両方を均等にします。
そうは言っても、ほとんどのグラフは以上のエッジを必要とします。人間として、私たちは常に互いに隣接している奇数の頂点の各ペアを選択し、残りに対して試行錯誤を使用することによってグラフをオイラー化する傾向があります。ただし、これは常に機能するとは限りません。
例えば、以下のグラフに、選択すると、隣接する奇数の頂点の対の間のエッジを追加する及び使用接続するエッジを Eulerizationすなわちコストで結果を縁。ただし、代わりにとを接続することを選択すると、隣接する奇数の頂点を使用しなかったとしても、エッジを使用するオイラー化が生成されます。
いくつかのエッジと接続する必要がある奇数の頂点のペアの数は有限であるため、この問題は少なくともブルートフォースで解決できることは確かです。具体的には、(Mathematicaによると)で、接続する奇数の頂点のペアの可能なセットがあります。各頂点をそのパートナーにリンクして、それぞれを通過することができます(無向グラフで2つの頂点間の最短経路を見つけることは、おそらくそれ自体の課題であり、Wikipediaがに時間の複雑さを与えることはできません)。
結局、取引全体はおそらく多項式時間、指数時間、階乗時間で実行され、かなり厄介です。パスをオイラー化するアルゴリズムがあるかどうかについて、いくつかの基本的な調査を行いましたが、それを見つけることができないようです。
グラフィック用のMathematicaコード:
GraphPlot[
{1 -> 2, 2 -> 5, 5 -> 3, 3 -> 6, 6 -> 3, 6 -> 7, 7 -> 6, 2 -> 7, 7 -> 8, 8 -> 9, 9 -> 10, 10 -> 4, 4 -> 11, 11 -> 4, 11 -> 12, 12 -> 1, 1 -> 12},
VertexRenderingFunction ->
(If[#2 < 5,
Text[Style[#2, Large], #1, Background -> Yellow], Null] &)]