【问题标题】:Find the number of possible combinations in a graph找出图中可能组合的数量
【发布时间】:2020-12-20 05:37:42
【问题描述】:

这是我要解决的问题:

给定一个无向图,找出可以通过遍历任意两个节点之间的路径并跟踪我们去了哪些节点(不去任何节点两次)可以获得的不同无序节点组合的数量。

比如说邻接矩阵是:

1: 2,3
2: 1,3,4
3: 1,2,4
4: 2,3,5
5: 4

一个无序组合是 [1,2,3,4],可以通过路径 1>3>4>2 或 1>3>2>4

答案将是 17,包含以下无序集:

[1,2] [1,3] [2,3] [2,4] [3,4] [4,5] 
[1,2,3] [1,2,4] [1,3,4] [2,3,4] [2,4,5] [3,4,5] 
[1,2,3,4] [1,2,4,5] [1,3,4,5] [2,3,4,5] 
[1,2,3,4,5]

目前,我的函数在我的程序中所做的只是暴力破解所有可能性,但我想知道如果图表有 10,000 多个节点,是否有更快的方法来做到这一点?暴力破解太慢了。

【问题讨论】:

  • 对于这个问题的有效解决方案没有太大希望。在某些时候,算法需要确定是否存在连接每个节点的路径(不访问任何节点两次)。这就是所谓的Hamiltonian path problem,即 NP-Complete。

标签: algorithm graph combinations


【解决方案1】:

你可以使用这个算法:

name 对节点进行排序,例如N_0,...,N_k

define an `result` set which is empty at beginning
for `i` from `0` to `k` do the following
 set node `n_i` as root
 step 1: list of all 'n_i` neighbors like `n_j` which `j>i`
 add all of these pairs to `result` set
 set `n_j` as root
 go to step 1
end

【讨论】:

    猜你喜欢
    • 2015-09-05
    • 1970-01-01
    • 1970-01-01
    • 2022-11-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多