分析我的算法

时间:2018-02-23 02:59:10

标签: python-3.x algorithm

我正在为课程创建一些算法,这两种算法都适用于顶点覆盖问题。

对于第一部分,我创建了一个通过强力执行工作的算法,它创建了每个可能的顶点组合,删除了未覆盖的集合,然后分析它们。这个尺寸我已经有了。

第二部分是具有附加启发式的相同蛮力,其中我消除了不太可能根据边数创建封面的组合的下部。

由于这两者都适用于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

1 个答案:

答案 0 :(得分:0)

好的,所以我的数学公式错误,启发式不是所有V的总和减去低端的总和。它是从低端到所有V的总和:

我不知道为什么这样做有效,而我原来没有,因为逻辑上另一个只是这个的扩展版本。