Dijkstra的算法是否适合解决此信号路由问题?


12

我正在开发用于集成视听系统的信号管理和路由模块,并且正在设计该模块,以便在不同的信号分配网络中尽可能地灵活。该模块的目的是处理跨多个堆叠矩阵切换器1的路由并处理必要的格式转换。

在这一点上,我探索的最好的解决方案是将网络映射到一个图形,该图形具有针对切换器支持的每种信号类型的离散顶点,然后通过代表处理格式转换的视频处理器的节点进行连接。

示例图

颜色代表信号格式。 圆形节点是切换台,源或宿。 正方形节点是执行格式转换的视频处理器。

从那里,我可以使用Dijkstra算法的实现来识别为使输入X到输出Y所必须形成的路径。这应该允许有关所有切换器和处理器的输入/输出配置的数据传入并相应地调整模块。

这是一个适当的解决方案,还是值得研究的替代方法?

1个又名“纵横开关”,是具有M输入x N输出的视频路由器,支持一对多连接。每个物理设备可以处理多种信号格式,并且可能执行或可能不执行任何格式转换。

编辑:正如PéterTörök所提到的,图形不一定是一棵树,该图是一个简单的例子来说明这个想法。在“现实世界”中实现时,可能会存在多个路径,这些路径可提供不同级别的清晰度(DVI> VGA>组件>复合),而我打算用边缘加权来表示。

编辑2:这是一个稍微全面的示例,其中指示了方向性,并显示了由两种信号类型组成的网络。最初的示例已稍作修改,因此设备上的每个输入和输出都定义为离散节点,因为这将提供控制矩阵路由/输入选择所需的数据。 示例2-两种信号类型,堆叠式开关


您是否打算将边缘权重相乘?
彼得·泰勒

添加剂。从理论上讲,这将允许对其进行定义,以使信号路径的定义越高,权重越低。然后,连接执行格式转换的节点的边缘的权重将高于分配给连接非转换节点的边缘的权重。如果可能,这将以本机格式路由信号,仅在必要时涉及格式转换(以及相关的信号降级和设备使用)。
Kim Burgess)

1
@PeterTaylor:它们是否相乘会不会很重要?通过应用对数,它们与加法器的语义完全相同(前提是它们是正数)。还是它背后的事情更复杂?
Herby

@herby,很好的一点,没想到。垂头丧气
Peter Taylor

Answers:


4

这是一棵树,Dijkstra是O(n ^ 2)过度杀伤力。琐细的O(n)广度优先搜索就足够了。

编辑:在至少两个度数的任何节点中启动BFS。

EDIT2:由于不能保证该图是一棵树,请使用Dijkstra,如果要进行一些优化,可以首先将所有度为1的顶点“剥离”(对于它们来说,路径是微不足道的),包括那些那些人由于剥夺了前邻居而获得了一级学位,而其余人则获得了Dijkstra的支持(这正是“非树”部分)。

另外,我想说的是您想要从每个节点到另一个节点的路径,不是吗?Dijsktra的算法仅执行从一条到所有其他路径的路径。也许对剥离后的其余部分执行Floyd-Warshall算法。当然,如果拓扑结构非常动态,则最好临时进行(剥离和)Dijkstra。


2
我相信上面显示的图形是一个简化的示例,在现实生活中,两个节点(格式)之间通常可能有多个替代路径,即您可能不希望图形始终是一棵树。
彼得Török

适当实现的Dijkstra的算法也将是O(n),尽管更为复杂并且仍然过高。
彼得·泰勒

@PéterTörök:是的。只有询问者才能确定。但是,当它是一棵树时,bfs就足够了(而且很简单)。
赫比

@PeterTaylor:有趣。有消息来源吗?
herby

@PéterTörök是正确的。参见编辑后的问题。
金伯吉斯

2

您可能可以使用A *(Dijkstra算法的更通用形式)来搜索相关图形。您在评论中提到加权的成本:

添加剂。从理论上讲,这将允许对其进行定义,以使信号路径的定义越高,权重越低。然后,连接执行格式转换的节点的边缘的权重将高于分配给连接非转换节点的边缘的权重。这将在可能的情况下以本机格式路由信号,仅在必要时涉及格式转换(以及相关的信号降级和设备使用)

如果我对它的理解正确,那么您希望找到从起点到目标的成本最低的路径。如果您为每个节点提供实际成本和对目标的估计(启发式)(可允许且一致的),则可以保证A *提供最佳解决方案。但是,根据我对您的问题的了解程度,它可能会过分杀伤力。


+1:同样,IIRC,启发式算法必须始终估计比实际成本差的成本,以确保它具有最佳路径。在最坏的情况下,如果您无法获得启发式的权利,则只需从启发式中返回0,就可以得到dijkstra的算法。
史蒂文·埃弗斯
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.