ランダムグラフを生成するスクリプトを作成しようとしていますが、重み付きグラフのエッジが0の値を持つ可能性があるかどうかを知る必要があります。
実際、0をエッジの重みとして使用できることは理にかなっていますが、ここ数日でグラフを操作しており、その例を見たことはありません。
ランダムグラフを生成するスクリプトを作成しようとしていますが、重み付きグラフのエッジが0の値を持つ可能性があるかどうかを知る必要があります。
実際、0をエッジの重みとして使用できることは理にかなっていますが、ここ数日でグラフを操作しており、その例を見たことはありません。
回答:
誰に許可されていますか?できることとできないことを決定する中央グラフ管理はありません。定義が何であるかが明確である限り、あなたにとって都合の良い方法でオブジェクトを定義できます。重みのないエッジが便利な場合は、それらを使用します。読者にそれがあなたがしていることを知っていることを確認してください。
通常、ウェイトがゼロのエッジが表示されない理由は、ほとんどのコンテキストで、ウェイトがゼロのエッジはエッジがないこととまったく同じだからです。たとえば、グラフが国とその国間で行われた取引量を表す場合、ゼロウェイトエッジは取引なしを意味します。これはエッジがまったくないことと同じです。グラフが距離を表す場合、ゼロウェイトエッジは互いに距離ゼロの2つの場所に対応します。つまり、実際には同じ場所になるため、両方を同じ頂点で表す必要があります。ただし、他のコンテキストでは、ウェイトがゼロのエッジが意味をなす場合があります。たとえば、グラフが道路網を表し、エッジの重みが交通量を表す場合、誰も使用していない道路(重みのないエッジ)とまったく道路がない(エッジなし)の間に大きな違いがあります。
コンテキストに依存します。一般的には、ゼロのエッジと負の重みも許可されます。場合によっては、エッジの重みが非負または厳密に正であることが必要になる場合があります(たとえば、ダイクストラのアルゴリズムでは重みが非負である必要があります)。
他の回答が指摘しているように、重みがゼロの重み付きグラフを完全に自由に検討(または考慮から除外)できます。
とはいえ、私の経験では、重み付きグラフのほとんどのアプリケーションでの通常の慣習は、重みがゼロのエッジとエッジがないことを区別しないことです。この理由の1つは、通常、重み付きグラフがマルチグラフの一般化として表示され、それが単純なグラフの一般化であることです。
具体的には、マルチグラフは、(単純なグラフとは異なり)同じノードのペア間に複数のエッジを許可するグラフです。単純なグラフでは、ノードのペアは常に0または1のエッジで接続されますが、マルチグラフのノードのペアは0、1、2、3またはそれ以上で接続できます(ただし、常に負ではない整数の数)エッジ。
マルチグラフを一般化してノードのペア間の端数の端数を考慮に入れると、当然、重み付きグラフを検討することになり、任意のマルチグラフで機能する多くのアルゴリズムをそのような重み付きグラフでも機能させることができます。しかし、そのようなアルゴリズムの場合、エッジの「重み」は実際にその多重度を示します。したがって、この解釈を考えると、ノードのペア間で「エッジなし」と「0エッジ」を区別することはできません。両方ともまったく同じことを意味します。
もちろん、定義によると「重み付きグラフは、」本当に各エッジに関連した数とちょうどグラフであり、そしてそれは何かのように体重を解釈することは完全に可能です他のエッジとゼロ・ウェイトなしの間の場合で区別多重度よりも、エッジは本当に意味があるかもしれません。しかし、標準のマルチグラフアルゴリズムをこのような「奇妙に重み付けされたグラフ」に適用しようとしても、エッジの重みの代替(非多重度)解釈に関して意味のある結果を生成することはほとんどありません。
英国ケンブリッジの道路システムのグラフを考えてみてください。メモはサイクリストと運転手の間で共有されているため、ほとんどのエッジが共有されています。そうすることで、データの維持コストが大幅に削減されます。
エッジの重みを移動時間(秒単位)として定義すると、各エッジには2つの重みがあり、1つは自動車用、もう1つは自転車用です。車は自転車道では許可されないため、一部の重量は無限になります。
次に、互いに非常に近い2つの道路の交差点を検討します。道路の交差点は、車の運転手を止めるいくつかのポストによってのみ鋸歯状になっています。(たとえば、車の運転は左折しかできないが、サイクリストは任意の方向に進むことができる交差道路)。その後、車の運転手から無限の重量とサイクリストの0の重量を持つエッジを取得します。
(明らかに、グラフを前処理して、サイクリストのルーティング用のより単純なグラフを作成してから、最適なルートを決定することができます。)
重みを使用して、グラフの2つの明確に異なる側面を表現しようとしているようです。1つ目は、グラフに実際に表現可能な(描画された)エッジがあるかどうか、2つ目は実際の重みです。
お気づきのように、エッジが存在することを示す指標として「非ゼロ」を使用した場合(そして描画またはリストする必要がある場合)、同時に状況が見つかった場合、混乱する状況に陥ります。ここで、ゼロの重みは有効として分類されます。
基本的に、エッジの存在を表す別の方法が必要になります(実際にそれが必要であり、単純に重みのN ^ 2配列を作成することはできませんが、ループについて何をするかを決定する必要があるというtrapに陥ります)バックエッジ...)