我正在为课程创建一些算法,这两种算法都适用于顶点覆盖问题。
对于第一部分,我创建了一个通过强力执行工作的算法,它创建了每个可能的顶点组合,删除了未覆盖的集合,然后分析它们。这个尺寸我已经有了。
第二部分是具有附加启发式的相同蛮力,其中我消除了不太可能根据边数创建封面的组合的下部。
由于这两者都适用于combos
中所有基本元素的总和,我需要了解所述列表的大小。
图形是随机生成的,用于从顶点对中随机创建的顶点和边。
combos = []
vertices = [1, 2, 3,...]
edges = [(1, 2), (2, 3),...]
E = len(edges)
V = len(vertices)
蛮力
for x in range(1, V+1):
for subset in itertools.combinations(vertices, X):
combos.append(subset)
sum = 0
for i in combos:
for j in i:
sum += 1
蛮力的总和是:
Heuristc:
for x in range(ceil((V**2)/E), V+1):
for subset in itertools.combinations(vertices, X):
combos.append(subset)
sum = 0
for i in combos:
for j in i:
sum += 1
我认为最终的总和是:
但是,我的测试运行不匹配启发式,强力匹配。
样品运行:
V E Brute Heuristic
5 10 80 25
6 11 192 36
7 17 448 294
8 23 1024 792
9 25 2304 1467
10 36 5120 4660
答案 0 :(得分:0)
好的,所以我的数学公式错误,启发式不是所有V的总和减去低端的总和。它是从低端到所有V的总和:
我不知道为什么这样做有效,而我原来没有,因为逻辑上另一个只是这个的扩展版本。