Estou desenvolvendo um módulo de gerenciamento e roteamento de sinais para um sistema audiovisual integrado e estou projetando-o com a intenção de ser o mais flexível possível em diferentes redes de distribuição de sinais. A intenção do módulo é manipular o roteamento entre vários comutadores de matriz empilhados 1 e manipular a conversão de formato necessária.
A melhor solução que eu explorei neste momento é mapear a rede para um gráfico com vértices discretos para cada tipo de sinal suportado pelos comutadores e que são então unidos por nós que representam os processadores de vídeo que manipulam a conversão de formato.
Cores representam formatos de sinal. Nós redondos são comutadores, fontes ou sumidouros. Nós quadrados são processadores de vídeo que realizam conversão de formato.
A partir daí, posso usar uma implementação do algoritmo de Dijkstra para identificar o caminho que deve ser formado para obter a entrada X na saída Y. Isso deve permitir que os dados sobre a configuração de entrada / saída de todos os comutadores e processadores sejam transmitidos e o módulo se adapta de acordo.
Essa é uma solução apropriada ou existe uma abordagem alternativa que talvez valha a pena investigar?
1 aka 'crossbar switch', um roteador de vídeo com saídas M x N de entrada que suporta conexões um para muitos. Cada dispositivo físico pode lidar com vários formatos de sinal e pode ou não ser capaz de executar qualquer conversão de formato.
edit: Como mencionado por Péter Török, o gráfico não será necessariamente uma árvore, o diagrama é um exemplo simples para ilustrar a ideia. Quando implementados no 'mundo real', vários caminhos podem existir, oferecendo níveis variados de definição (DVI> VGA> componente> composto) que eu planejava representar com ponderação de borda.
edit 2: Here's an slightly more comprehensive example with directivity indicated and showing a network consisting of two signal types. The initial example has been modified slightly so that each input and output on a device is defined as a discrete node as this will provide the data required to control matrix routing / input selection.