Algorithm 查找通信故障案例的算法“;“网络”;

Algorithm 查找通信故障案例的算法“;“网络”;,algorithm,logic,Algorithm,Logic,我试图列举一个系统的一些失败案例,以使编写测试案例更容易。基本上,我有一组“点”,它们通过数据“路径”与任意数量的其他点通信。我想提出以下三组失败案例 集合1-单独断开每条路径(普通) 设置2-对于系统中的每个点P,断开路径,以便P与系统的其余部分完全断开(也是微不足道的) 设置3-对于系统中的每个点P,断开路径,以便将系统分为两组点(A和B,不包括点P),以便从A组到B组的唯一方式是通过点P(即,我希望强制系统中的所有数据流量通过点P,以确保其能够保持)。如果某个特定点无法执行此操作,则应跳

我试图列举一个系统的一些失败案例,以使编写测试案例更容易。基本上,我有一组“点”,它们通过数据“路径”与任意数量的其他点通信。我想提出以下三组失败案例

  • 集合1-单独断开每条路径(普通)
  • 设置2-对于系统中的每个点P,断开路径,以便P与系统的其余部分完全断开(也是微不足道的)
  • 设置3-对于系统中的每个点P,断开路径,以便将系统分为两组点(A和B,不包括点P),以便从A组到B组的唯一方式是通过点P(即,我希望强制系统中的所有数据流量通过点P,以确保其能够保持)。如果某个特定点无法执行此操作,则应跳过此操作

第三组是我遇到的问题。在实践中,我所处理的系统足够小和简单,我可能可以“暴力”解决方案(通常我有12个点,每个点连接到1-4个其他点)。然而,如果有人对从哪里开始有任何建议或想法,我会有兴趣找到一个更通用的算法来解决这类问题。

有一些通用的“着色”算法(带或不带u,取决于你想要英国还是美国的文章)。然而,对于您描述的相对简单的问题来说,这是过分的

只需在两个集合之间划分节点,然后使用伪代码:

foreach Node n in a.Nodes
     foreach Edge e in n.Edges
         if e.otherEnd in b then 
               e.break()
               broken.add(e)

broken.get(rand(broken.size()).reinstate()
使用rand选择断开的链接进行恢复,或者一次系统地恢复一个链接


对b重复上述操作(或构造边,使一个方向上的断裂影响另一个方向)

这里有一些伪代码,假设路径连接两个点,用“节点”代替“点”,用“边”代替“路径”

for each P in nodes:
    for each subset A in nodes - {P}:
        B = nodes - A - {P}
        for each node in A:
            for each edge out of A:
                if the other end is in B:
                    break edge
        run test
        replace edges if necessary 

除非我误解了什么,这个问题似乎相对简单,只要你有一个生成节点子集的方法-{p}。这将对每个分区[A,B]进行两次测试,除非您在其中添加其他检查。

非常感谢,这非常简单。我想我是想得太多了。