在加权图C#实现中查找最大权重集

时间:2011-06-03 07:49:53

标签: c# algorithm graph

C#中的加权图中是否有可自由实现的最大权重集?

2 个答案:

答案 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(维基百科)中找到有用的东西。

相关问题