Düğümler ve kenarlar arasında seçmeli olarak kaybolabilen birden fazla kenarı olan bir grafik nasıl temsil edilir


11

Bazı varsayımsal, idealleştirilmiş ağ kullanımını modellemek için ne tür bir veri yapısı kullanılacağını anlamaya çalışıyorum.

Benim senaryomda, birbirlerine düşman olan bazı kullanıcılar, tüm potansiyel bağlantıların bilindiği bilgisayar ağları oluşturmaya çalışıyor. Ancak bir kullanıcının bağlanması gereken bilgisayarlar, başka bir kullanıcının bağlanması gereken bilgisayarlarla aynı olmayabilir; 1 numaralı kullanıcının A, B ve D bilgisayarlarını bağlaması gerekebilir, 2 numaralı kullanıcının B, C ve E bilgisayarlarını bağlaması gerekebilir.

resim açıklamasını buraya girin

NCTM Graph Creator yardımıyla oluşturulan görüntü

Bunun çekirdeği, bilgisayarları temsil eden düğümler ve Ethernet kablolarını temsil eden kenarlar ile yönlendirilmemiş bir döngüsel grafik olacak. Ancak, senaryonun doğası gereği, bitişiklik listelerini ve bitişiklik matrislerini (en azından önemsiz değişiklikler olmadan) dışlayan birkaç nadir özellik vardır:

  1. kenarlar sınırlı kullanıma dönüşebilir; yani, bir kullanıcı belirli bir ağ bağlantısı edinirse, başka hiçbir kullanıcı bu bağlantıyı kullanamaz
    • örnekte, yeşil kullanıcı A bilgisayarına bağlanamaz, ancak kırmızı kullanıcı aralarında doğrudan bir bağlantı olmamasına rağmen B'yi E'ye bağladı
  2. bazı durumlarda, belirli bir düğüm çifti birden fazla kenarla bağlanır
    • örnekte, D'den E'ye çalışan iki bağımsız kablo vardır, bu nedenle yeşil ve mavi kullanıcıların her ikisi de bu makineleri doğrudan bağlayabilir; ancak kırmızı artık böyle bir bağlantı kuramaz
  3. iki bilgisayar birden fazla kabloyla bağlıysa, her kullanıcı bu kablolardan birden fazlasına sahip olmayabilir

Bu grafik üzerinde birkaç işlem yapmam gerekecek, örneğin:

  • belirli bir kullanıcı için belirli bir bilgisayar çiftinin bağlı olup olmadığını belirleme
  • belirli bir kullanıcının hedef bilgisayarları bağlaması için en uygun yolu belirleme
  • belirli bir kullanıcı için en yüksek gecikmeli bilgisayar bağlantısını belirleme (yani dallanma olmadan en uzun yol)

İlk düşüncem, tüm kenarların bir koleksiyonunu oluşturmaktı, ancak bu arama için korkunç. Şimdi düşünebileceğim en iyi şey, listedeki her öğenin sadece kenar uzunluğunu değil, aynı zamanda maliyetini ve mevcut sahibini de içerecek şekilde bir bitişiklik listesini değiştirmektir. Bu mantıklı bir yaklaşım mı? Alanın bir endişe kaynağı olmadığı varsayıldığında, tek bir grafik yerine grafiğin birden fazla kopyası (her kullanıcı için bir tane) oluşturmak mantıklı olur mu?


Bu bir şekilde alakalı görünüyor. youtube.com/watch?v=xdiL-ADRTxQ
RubberDuck

Bunun burada nasıl yardımcı olacağını gerçekten görmüyorum.
Pops

Bunu bir süre düşündüm. Grafik algoritmalarının çoğunda, yapmanız gereken iki şey vardır: komşuları numaralandırın veya bir kenarın ağırlığını bulun. Listelediğiniz tüm sorular yalnızca bir kullanıcıyı içerir. Tek bir kullanıcı için, komşuların numaralandırılması veya bir kenarın ağırlığının bulunması, sabit bir zamanda (kullanıcı sayısı sınırlıysa) veya günlük N'de bitişiklik listesini veya matrisi bir "sahiplik" ile yansıtarak yanıtlanabilir. Bu amaçla, ya kolayca genişletilebilir ve kullanıcı kısmı dikkatini dağıtmak yerine geleneksel güçlere göre seçilmelidir düşünüyorum.
J Trana

Yanıtlar:


6

Alanın bir endişe kaynağı olmadığı varsayıldığında, tek bir grafik yerine grafiğin birden fazla kopyası (her kullanıcı için bir tane) oluşturmak mantıklı olur mu?

Bana öyle geliyor ki “katmanlı grafikleri” etiketleyebileceğimiz şeyi kullanmalıyız, yani grafikler için bir birleştirici ekleyin, örneğin @:

  • A ve B grafikler ise A @ B aynı zamanda bir grafiktir (yani grafik kitaplığınızın algoritmalarına beslenebilir).
  • A @ B'deki köşeler kümesi A ve B'deki köşelerin birleşimidir.
  • A @ B'deki kenar kümesi A ve B'deki kenar birleşimidir.
  • A @ B yapısı herhangi bir tepe veya kenara sahip değildir, aksine veri kapları olarak A ve B'yi kullanır.

Bu tür katmanlı grafikler ile, K'yi kommon kullanılabilir bilgi olarak tanımlayabilirsiniz ve her bir özel bilgi R, G, B'dir, böylece her oyuncu aslında R @ K, G @ K, B @ K görür.

Bunu gerçekten uygulamak için, algoritmaları genel olarak uygulayan bir grafik kitaplığı arayabilirsiniz, yani en uzun yol algoritması vb. Grafiğinizin gerçek gösterimi ile parametrelenir. Yani kütüphaneniz şöyle diyorsa

ConcreteGraphAlgorithms = GenericAlgorithms(ConcreteGraphImplementation)

ile kolayca değiştirebilirsiniz

LayeredGraphAlgorithms = GenericAlgorithms(LayeredGraphs(ConcreteGraphImplementation))

LayeredGraphsgeri kalanını kütüphaneden temin ettiğiniz ve ödünç aldığınız yer.


Hata! Önceki yorumumu dikkate almayın, cevabınızı biraz yanlış okudum. Mevcut grafik kütüphanelerinden faydalanamama rağmen, temelde yaptığım şey bu, çünkü aptalca var olup olmadığını görmeyi düşünmedim.
Pops

1

İhtiyacınız olan şeye "ilişkilendirilmiş grafik" denir. Nitelikli bir grafikte, bilgi (nitelikler) yaylara eklenir. Ağırlıklı grafik, en basit ilişkilendirilmiş grafiklerden biridir.

İlişkilendirilmiş bir grafiği temsil etmek için, her hücreye daha fazla bilgi ekleyerek fazladan sütunlar veya bitişiklik matrisleri ekleyerek bir bitişiklik listesi kullanabilirsiniz. İlişkilendirilmemiş grafiklerin çoğu algoritması, özelliklere göre yayları filtrelerseniz çalışır. İlişkilendirilmiş grafikler için birçok algoritma geliştirilmiştir, bu yüzden burada tarif etmeyeceğim.


1
şüphesiz bir bitişiklik matrisi normalde her bir düğüm çifti arasında 1'den fazla kenarı temsil edemez
jk.

1
@jk, normalde haklısın. Ancak bitişiklik matrisine eklenen bilgiler, her yay için yay sayısı ve ayrı özelliklere sahip olabilir. Ancak çoğu durumda, bir bitişiklik listesi kullanırdım çünkü daha basit olurdu.
walrii

1
Eğer hücrenin her bir kenarı için bilgi ekliyorsanız, etkin bir şekilde bitişik bir listeniz vardır, bir matrisin yoğun grafikler için verdiği yararı kaybedersiniz
jk.
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.