Dijkstra'nın algoritması bu sinyal yönlendirme problemine uygun bir çözüm müdür?


12

Entegre görsel-işitsel bir sistem için bir sinyal yönetimi ve yönlendirme modülü geliştirme sürecindeyim ve farklı sinyal dağıtım ağlarında olabildiğince esnek olma niyetiyle tasarlıyorum. Modülün amacı, bir dizi yığılmış matris anahtarlayıcı 1 boyunca yönlendirmeyi işlemek ve gerekli format dönüşümünü işlemektir.

Bu noktada keşfettiğim en iyi çözüm, ağı, anahtarlayıcılar tarafından desteklenen her sinyal türü için ayrı köşeleri olan bir grafiğe eşlemektir ve bunlar daha sonra biçim dönüşümünü işleyen video işlemcilerini temsil eden düğümler aracılığıyla birleştirilir.

Örnek grafik

Renkler sinyal formatlarını temsil eder. Yuvarlak düğümler anahtarlayıcılar, kaynaklar veya lavabolardır. Kare düğümler, biçim dönüştürme gerçekleştiren video işlemcileridir.

Oradan , X girişinin Y çıkışına girmesi için oluşturulması gereken yolu tanımlamak için Dijkstra algoritmasının bir uygulamasını kullanabilirim. Bu, tüm anahtarlayıcıların ve işlemcilerin giriş / çıkış yapılandırması hakkındaki verilerin aktarılmasına izin vermelidir. ve modül buna göre uyarlanır.

Bu uygun bir çözüm mü yoksa araştırmaya değer alternatif bir yaklaşım var mı?

1 olarak adlandırılan 'çapraz çubuk anahtarı', birden çok bağlantıyı destekleyen M girişi x N çıkışlı bir video yönlendirici. Her fiziksel cihaz birden fazla sinyal biçimini işleyebilir ve herhangi bir biçim dönüştürme gerçekleştirebilir veya edemeyebilir.

edit: Péter Török tarafından belirtildiği gibi, grafik mutlaka bir ağaç olmayacak, diyagram fikri göstermek için basit bir örnektir. 'Gerçek dünyada' uygulandığında, kenar ağırlıklandırmayı temsil etmeyi planladığım değişik tanım seviyeleri (DVI> VGA> bileşen> kompozit) sunan birden fazla yol bulunabilir.

edit 2: Burada gösterilen ve iki sinyal tipinden oluşan bir ağı gösteren biraz daha kapsamlı bir örnek. İlk örnek, bir cihazdaki her giriş ve çıkışın ayrı bir düğüm olarak tanımlanması için hafifçe değiştirilmiştir, çünkü bu, matris yönlendirme / giriş seçimini kontrol etmek için gereken verileri sağlayacaktır. Örnek 2 - iki sinyal tipi, istiflenmiş anahtarlayıcılar


Kenar ağırlıklarının çarpımsal olmasını mı istiyorsunuz?
Peter Taylor

Katkı. Bu teori, sinyal yolunun tanımı ne kadar yüksek olursa, ağırlıklandırma o kadar düşük olacak şekilde tanımlanmasına izin verecektir. Biçim dönüşümü gerçekleştiren düğümlere bağlanan kenarlara, dönüşüm olmayan düğümleri bağlayan kenarlara atanandan daha yüksek bir ağırlık verilir. Bu, mümkünse, sinyali gerektiğinde yerel biçiminde yönlendirir ve yalnızca gerektiğinde biçim dönüşümünü (ve ilişkili sinyal bozulmasını ve ekipman kullanımını) içerir.
Kim Burgess

1
@PeterTaylor: Çoklayıcı olmaları önemli midir? Bir logaritma uygulayarak katkı maddesi ile tam olarak aynı anlambilime sahiptirler (olumlu olmaları koşuluyla). Yoksa arkasında daha karmaşık bir şey mi var?
herby

@herby, iyi bir nokta, bunu düşünmemişti. utanç içinde kafa asılı
Peter Taylor

Yanıtlar:


4

Bu bir ağaç, Dijkstra O ( n ^ 2 ) overkill. Önemsiz O ( n ) genişlik ilk arama yeterlidir.

EDIT: BFS herhangi bir düğümde en az iki derece ile başlatın.

EDIT2: Grafiğin bir ağaç olması garanti edilmediğinden, Dijkstra'yı kullanın, eğer biraz optimize etmek istiyorsanız, önce grafiği bir derece tüm köşeleri (onlar için yol önemsizdir) "şeritleyebilirsiniz". eski komşularını sıyırma ve birincisi Dijkstra (tam olarak "ağaç olmayan" kısmı) yapmak nedeniyle bir derece almak için olur.

Ayrıca, her düğümden birbirine geçiş yapmak istediğinizi söyleyebilirim, değil mi? Dijsktra'nın algoritması sadece birinden diğerine giden yolları yapar. Belki sökülen geri kalanında Floyd-Warshall algoritması var. Tabii ki, topoloji çok dinamikse, (sıyırma ve) Dijkstra, ad hoc yapmak en iyisidir.


2
Yukarıda gösterilen grafiğin basit (ified) bir örnek olduğuna ve gerçek hayatta genellikle iki düğüm (format) arasında birden fazla alternatif yol olabileceğine inanıyorum, yani her zaman bir ağaç olan grafiğe güvenmeyebilirsiniz.
Péter Török

Uygun şekilde uygulandığında, Dijkstra'nın algoritması da O ( n ) olacaktır , ancak daha karmaşık ve hala aşırı derecede dolgun olacaktır.
Peter Taylor

@ PéterTörök: Bu durumda, evet. Kesinlikle sadece asker bilir. Ama bir ağaç olduğunda, bfs yeterlidir (ve ölü basit).
herby

@PeterTaylor: İlginç. Herhangi bir kaynak lütfen?
herby

@ PéterTörök doğrudur. Düzenlenmiş soruya bakın.
Kim Burgess

2

Söz konusu grafiği aramak için A * (Dijkstra algoritmasının daha genel formu) kullanabilirsiniz. Yorumunuzdaki ağırlıkların maliyetlerinden bahsediyorsunuz:

Katkı. Bu teori, sinyal yolunun tanımı ne kadar yüksek olursa, ağırlıklandırma o kadar düşük olacak şekilde tanımlanmasına izin verecektir. Biçim dönüşümü gerçekleştiren düğümlere bağlanan kenarlara, dönüşüm olmayan düğümleri bağlayan kenarlara atanandan daha yüksek bir ağırlık verilir. Bu, mümkünse sinyali gerektiğinde yerel biçiminde yönlendirir ve yalnızca gerektiğinde biçim dönüşümünü (ve ilişkili sinyal bozulmasını ve ekipman kullanımını) içerir

Doğru anlarsam, başlangıçtan hedefe en düşük maliyetli yol yolunu bulmak istersiniz. Her düğüme hedefe hem gerçek bir maliyet hem de tahmin (sezgisel) sağlarsanız (hem kabul edilebilir hem de tutarlıdır), A * 'nın en uygun çözümü sunacağı garanti edilir. Sorununuzu ne kadar iyi anladığımla ilgili olarak aşırıya kaçmış olabilir.


+1: Ayrıca, sezgisel tarama, optimal bir yolu garanti edebilmek için her zaman gerçek maliyetten daha kötü bir maliyeti tahmin etmek zorundadır. En kötü durumda, sezgisel doğru elde edemezseniz, sezgiselden 0 döndürün ve dijkstra algoritmasına sahipsiniz.
Steven Evers
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.