通过检查图中的团来验证独立集
我有一个关于算法课的作业问题,内容是关于如何把一个s-clique(s-团)转换成一个s-independent set(s-独立集)。下面是代码,最下面的函数independent_set_decision(H,s)
是我需要完成的部分。我现在有点卡住了。
def k_subsets(lst, k):
if len(lst) < k:
return []
if len(lst) == k:
return [lst]
if k == 1:
return [[i] for i in lst]
return k_subsets(lst[1:],k) + map(lambda x: x + [lst[0]], k_subsets(lst[1:], k-1))
# Checks if the given list of nodes forms a clique in the given graph.
def is_clique(G, nodes):
for pair in k_subsets(nodes, 2):
if pair[1] not in G[pair[0]]:
return False
return True
# Determines if there is clique of size k or greater in the given graph.
def k_clique_decision(G, k):
nodes = G.keys()
for i in range(k, len(nodes) + 1):
for subset in k_subsets(nodes, i):
if is_clique(G, subset):
return True
return False
def make_link(G, node1, node2):
if node1 not in G:
G[node1] = {}
(G[node1])[node2] = 1
if node2 not in G:
G[node2] = {}
(G[node2])[node1] = 1
return G
def break_link(G, node1, node2):
if node1 not in G:
print "error: breaking link in a non-existent node"
return
if node2 not in G:
print "error: breaking link in a non-existent node"
return
if node2 not in G[node1]:
print "error: breaking non-existent link"
return
if node1 not in G[node2]:
print "error: breaking non-existent link"
return
del G[node1][node2]
del G[node2][node1]
return G
# This function should use the k_clique_decision function
# to solve the independent set decision problem
def independent_set_decision(H, s):
#insert code here
return True
1 个回答
0
我们来看看“独立集”和“团”的定义:
独立集:一组节点,里面没有两个节点是相邻的
团:一组节点,里面的每一对节点都是相邻的
根据这些定义,如果在图的补图中,这组节点是一个团,那么这组节点就是独立的。那么,你可以利用图的补图和 k_clique_decision
函数来解决你的问题吗?