C#中的加权图中是否有可自由实现的最大权重集?
答案 0 :(得分:2)
你可以阅读论文“最大团队问题的快速算法”,你会发现本文提出的有效最大团队算法。此外,最大加权算法可以在“最大加权团队问题的新算法”中找到。这是伪代码:
1 **FUNCTION CLIQUE(U, size)**
2 if |U| = 0 then
3 if size > max then
4 max ← size
5 New record; save it.
6 found ← true
7 end
8 return
9 end
10 while |U| != ∅ do
11 if size + weight(|U|) <= max then
12 return
13 end
14 i ← min{ j|vj ∈ U}
15 if size + c[i] <= max then
16 return
17 end
18 U ← U ∖ {vi}
19 CLIQUE(U ∩ N(vi); size + weight(vi))
20 if found = true then
21 return
22 end
23 end
24 return
25 **FUNCTION NEW()**
26 max ← 0
27 for i ← n downto 1 do
28 found ← false
29 CLIQUE(Si ∩ N(vi), weight(i))
30 c[i] ← max
31 end
32 return
我们假设Si表示索引大于i的顶点,例如{vi,vi + 1,...,vn}。 N(vi)表示vi的相邻顶点。全局变量 max 标记我们现在找到的clique的最大大小,全局变量 found 标记我们是否找到了更大的clique。数组c []记录Si的最大团大小。 size 记录本地递归中的最大clique大小。
有几种修剪策略可以避免无用的搜索,特别是在第11行和第15行。
您可以使用哈希表来实现此算法。
答案 1 :(得分:1)
查找最大集团是一个NP难题。你可以在Clique problem(维基百科)中找到有用的东西。