Sıfır ağırlıklı bir grafikte kenarın ağırlığı olarak kabul edilir mi?


60

Rasgele grafikler üreten bir komut dosyası yazmaya çalışıyorum ve ağırlıklı grafikteki bir kenarın 0 değerine sahip olup olmadığını bilmem gerekiyor.

Aslında 0'ın bir kenarın ağırlığı olarak kullanılabileceği anlaşılıyor, ancak son birkaç gündür grafiklerle çalışıyorum ve bunun bir örneğini hiç görmedim.

görüntü tanımını buraya girin


28
Negatif değerlere "izin verilirse", neden sıfır olmasın? :)
Derek 功夫 會 功夫

5
Hızlı bir örnek olarak, eğer pozitif ağırlıklar bir düğümden diğerine giderken net yakıt tüketimini gösteriyorsa, negatif ağırlıklar net yakıt ikmalini temsil edebilir. Sıfır ağırlıklı kenar, harcanan yakıtın yeniden yakıt doldurma ile tam olarak telafi edildiği yerdir.
JW,

1
@DavidRicherby Buradaki asıl sorunun örneğin, "ağırlık sıfır kenarları varlığında X algoritması doğru" olduğuna inanıyorum. Aksi halde, bağlam nedir? Cevap, ayrıntılara bağlı olarak evet veya hayır olabilir. "Bir dizi sıfır içerebilir" gibi bir soru aynı derecede anlamlıdır.
Juho,

1
@ Juho: Ah, tamam açık. Bir sayının negatif olabileceğini sormak gibi. Size göre, içeriğe bağlı olduğu açık görünüyor, ancak negatif sayılar ortaya çıkıncaya kadar insanlar için kesin olmadığı belliydi. Sıfır bile belli değildi.
Mehrdad

1
Ne yapmak istediğinize bağlı olarak, ağırlıklarınız gerçek rakamlar bile olmayabilir. Örneğin, grafiğiniz bir AC devresini temsil ediyorsa, ağırlıklarınız fazör olabilir ve bunlar karmaşık sayılardır.
user2357112

Yanıtlar:


165

Kimler tarafından izin verilir ? Neler yapıp neyi yapamayacağınıza karar veren bir Merkezi Grafik Yönetimi yoktur. Nesneleri, tanımın ne olduğu konusunda net olduğunuz sürece sizin için uygun olan herhangi bir şekilde tanımlayabilirsiniz. Sıfır ağırlıklı kenarlar sizin için yararlıysa, bunları kullanın; sadece okuyucularınızın ne yaptığınızı bildiğinden emin olun.

Genellikle sıfır ağırlıklı kenarlar görmemenizin nedeni, çoğu durumda, sıfır ağırlıklı bir kenarın bir kenar yokluğuna tam olarak eşdeğer olmasıdır. Örneğin, grafiğiniz ülkeleri ve bunlar arasında yapılan ticaret miktarını temsil ediyorsa, sıfır ağırlıklı bir sınır, hiç bir avantajı olmayan aynı ticaret anlamına gelmez. Grafiğiniz mesafeleri temsil ediyorsa, sıfır ağırlıktaki bir kenar birbirinden sıfır mesafedeki iki yere karşılık gelir; bu, aslında aynı yer olacağı anlamına gelir, bu yüzden her ikisi de aynı köşe ile gösterilmelidir. Bununla birlikte, diğer bağlamlarda, sıfır ağırlıklı kenarlar anlamlı olabilir. Örneğin, grafiğiniz bir yol ağını temsil ediyorsa ve kenar ağırlıkları trafik miktarını gösteriyorsa, hiç kimsenin kullanmadığı (sıfır ağırlıklı kenar) ve hiç yol olmayan (kenarsız) bir yol arasında büyük bir fark vardır.


1
Pek çok grafik algoritmasının, negatif ağırlığa sahip grafiklerde çalışıp çalışmadıklarını açıkça belirttiğine dikkat etmek önemlidir. Bunun, bağlamlara bağlı olarak negatif ağırlıklara bile izin verildiğini açıkladığını düşünüyorum.
Mooing Duck

6
@MooingDuck Sorunun amacı, algoritmalar gerçekten olumsuz ağırlıklar için çalışıp çalışmadıklarını söylerken, sıfır ağırlıktan nadiren söz edildiğini düşünüyorum. Negatif ağırlıklar sıfırdan çok daha az olağandışı olduğundan, bu özel bağlamda, belirtilmeleri gerektiğinden emin değilim.
David Richerby

13

Bu koşullara bağlıdır. Genel olarak evet, sıfır kenarlara ve hatta negatif ağırlıklara izin verilebilir. Bazı özel durumlarda, kenar ağırlıklarının negatif veya kesin olarak pozitif olması gerekebilir (örneğin, Dijkstra'nın algoritması ağırlıkların negatif olmamasını gerektirir).


Sıfırlamayı yasaklayan belirli bir grafik türü var mı? ve negatif veya pozitif değerlere izin verir?
Taxellool

9
Msgstr "Sıfır olmayan kenar ağırlıklı grafik".
Tom van der Zanden

10
@Taxellool Matematiksel nesneler taşa ayarlanmamış. Kullanmanıza izin verilen, yalnızca sabit adlara sahip sabit bir matematiksel nesne listesi yok.
David Richerby

Hangi algoritmayı kullandığınıza bağlı. Bellman-Ford sıfırları kabul ederken, Dijkstra'da onlar ellerinden
Manuel Azar

5

Diğer cevapların belirttiği gibi, sıfır ağırlıklı kenarlı ağırlıklı grafikleri dikkate almakta (veya dikkate almamakta) tamamen özgürsünüz.

Bu, benim deneyimlerime göre, ağırlıklı grafiklerin çoğu uygulamasında olağan kongre, sıfır ağırlıklı bir kenar ile bir kenarın olmaması arasında bir ayrım yapmamaktır. Bunun bir nedeni, tipik olarak, ağırlıklı grafiklerin çoklu grafiklerin genelleşmeleri olarak ortaya çıkmasıdır , ki bu da basit grafiklerin genelleştirilmesidir.

Spesifik olarak, bir çoklu grafik ( basit bir grafiğin aksine ) aynı düğüm çiftleri arasında çoklu kenarlara izin veren bir grafiktir . Basit bir grafikte, herhangi bir düğüm çifti her zaman 0 veya 1 kenarla bağlanırken, çoklu grafikteki bir düğüm çifti 0, 1, 2, 3 veya daha fazla (ancak her zaman negatif olmayan bir tam sayıdır) ile bağlanabilir. ) kenarlar.

Bir çift düğümü arasındaki kesirli sayıda kenara izin vermek için bir multigrafın genelleştirilmesi, daha sonra doğal olarak bir tane ağırlıklı grafikleri dikkate alır ve rastgele çoklu grafikler üzerinde çalışan birçok algoritma da bu gibi ağırlıklı grafikler üzerinde çalışmak için yapılabilir. Ancak bu tür algoritmalar için, bir kenarın "ağırlığı" gerçekten çokluğunu gösterir . Dolayısıyla, bu yorum göz önüne alındığında, bir çift düğüm arasında "kenar yok" ve "0 kenar" arasında anlamlı bir ayrım olamaz: her ikisi de tamamen aynı anlama gelir.

Tabii ki, tanım gereği "ağırlıklı bir grafik", aslında sadece her bir kenara ilişkin bir sayıya sahip bir grafiktir ve ağırlığın çokluktan başka bir şey olarak yorumlanması mükemmel bir şekilde mümkündür , bu durumda kenarsız ve sıfır ağırlık arasındaki bir ayrım kenar gerçekten anlamlı olabilir. Ancak bu tür "garip ağırlıklı grafiklere" standart çoklu grafik algoritmaları uygulamaya çalışmak, kenar ağırlıklarının alternatif (çok-olmayan) yorumlamaları açısından anlamlı olacak sonuçlar üretme olasılığı düşüktür.


6
Ağırlıklı grafiklerin "tipik olarak" nasıl göründüğü, alanınıza bağlıdır. Bir yol ağını en kısa yolları bulmak için bir grafik olarak modellediğim zaman, ağırlıklar mesafeleri temsil eder, kavşaklar arasında çok sayıda yolla başlamam ve sonra kesirli yollara girmem gerekir.
adrianN

3
@ adrianN Öyle bir grafikte, bir kenarın bulunmaması, sıfırla ilişkili sonsuz bir ilişkili değere karşılık gelir.
CodesInChaos

0

Cambridge İngiltere'deki yol sisteminin grafiğini düşünün, notlar bisikletçiler ve araç sürücüleri arasında paylaşılır, bu nedenle de çoğu kenardır. Bunu yapmak, verileri koruma maliyetini büyük ölçüde azaltır.

Şimdi, kenar ağırlığını saniyeler içinde hareket süresi olarak tanımlarsak, temiz bir şekilde her kenarın iki tanesi olacaktır; biri motosikletler için olan anteler için. Otomobillerin bisiklet yollarına girmesine izin verilmemesi nedeniyle bazı ağırlıklar sonsuz olacaktır.

Şimdi birbirine çok yakın iki yol kavşağı düşünün, araç sürücülerinin durmasını sağlayan birkaç direk tarafından tırtıklı olurlar. (Örneğin, otomobil sürücülerinin yalnızca sola dönebileceği, ancak bisikletçilerin herhangi bir yöne gidebileceği bir yol). Daha sonra, otomobil sürücülerinden sonsuz ağırlık ve bisikletçiler için 0 ağırlık gibi bazı kenarlar elde ediyoruz.

(Açıkça, grafik daha iyi işlenmeden önce, bisikletlilerin güzergahı için daha basit bir grafik oluşturmak üzere önceden işlenebilir.)


Bunun soruyu nasıl ele aldığını anlamadım. Soru, ağırlığı sıfır olan kenarlar hakkında sorular sorar. Örneğinizde (bu arada, Cambridge'e aşina olmayan insanlara tam anlamıyla bir anlam ifade etmeyebilir), her iki ucun zaten iki ağırlığı vardır. Şimdi, istediğiniz kadar ağırlıklı grafikleri tanımlayabildiğiniz sürece, sorun değil, ancak sorulan soruyu ele almıyor gibi görünüyor. Ayrıca, tüm tanımladığınız kenarların bisikletliler için en azından çok küçük bir ağırlığa sahip olduğu görülüyor: kısa bir mesafeyi hareket ettirmek bile sıfır zaman gerektiriyor.
David Richerby

@DavidRicherby, 1 saniyeden daha kısa sürelerin kaydedilmediğini varsayalım.
Ian Ringrose,

0

Grafiğin farklı iki yönünü denemek ve temsil etmek için ağırlığı kullanıyormuşsunuz gibi geliyor. Birincisi, grafiğin gerçekten gösterilebilir (çizilen) bir kenarı olup olmadığı ve ikincisi ise gerçek ağırlıktır.

Fark ettiğiniz gibi, eğer 'sıfır olmayan' bir kenarın mevcut olduğunun bir göstergesi olarak kullandıysanız (ve çizilmesi veya listelenmesi gerekecek) bir gösterge olarak kullandıysanız kafa karıştırıcı bir duruma düşersiniz. sıfır ağırlık geçerli olarak sınıflandırıldığında.

Temel olarak, kenarın varlığını temsil etmenin başka bir yoluna ihtiyacınız olacak (aslında buna ihtiyacınız olduğunu varsayarsak ve basitçe bir N ^ 2 ağırlık dizisi oluşturamazsınız, ancak daha sonra döngü hakkında ne yapacağınıza karar vermeniz gerekme tuzağına düşersiniz. arka kenarlar ...)


Bunun soruyu gerçekten cevapladığından emin değilim. Soru, grafiklerin sıfır ağırlıklı kenarlara sahip olup olmadığıyla ilgilidir; Cevabınız çoğunlukla sıfır ağırlıklı kenarlı grafikler için bir veri yapısını nasıl uygulayabileceği ile ilgilidir.
David Richerby

@DavidRicherby, Close; Bu (cevabım), sorunun neden ve nasıl ortaya çıktığı (veya geldiği) hakkında daha fazlaydı - Bir XYProplem sorunu. Genellikle neden bir sorun olduğu konusunda rasyonel hale gelmek, ilk etapta sorunun nasıl doğru cevap olduğunu ve sadece bazı 'geçiştirmelerin' olmadığını görmede büyük ölçüde yardımcı olabilir
Philip Oakley
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.