Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/345.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 图中的独立集检查是一个团_Python_Graph Theory_Clique_Independent Set - Fatal编程技术网

Python 图中的独立集检查是一个团

Python 图中的独立集检查是一个团,python,graph-theory,clique,independent-set,Python,Graph Theory,Clique,Independent Set,我有一个关于将s-团转化为s-独立集的算法类家庭作业问题。下面是代码,我需要完成最底层的函数independent\u set\u 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] ret

我有一个关于将s-团转化为s-独立集的算法类家庭作业问题。下面是代码,我需要完成最底层的函数
independent\u set\u 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
def k_子集(lst,k):
如果len(lst)
让我们看看“独立集”和“集团”的定义:

  • 独立集:两个节点不相邻的一组节点

  • 团:每对相邻的一组节点


根据这些定义,如果在图的补集中,一组节点是一个团,则该组节点是独立的。那么,你可以用图的补码和
k\u-clique\u-decision
函数做什么来解决你的问题呢?

我要补充一点,如果我只是返回k\u-clique\u-decision(H,s),这些是通过和失败的测试用例:'***
SUCCESS
***
:测试用例输入:{1:{}},1
**
成功
**
测试用例输入:{1:{2:1},2:{1:1},1
**
失败
**
测试用例输入:{1:{2:1},2:{1:1},2.
预期结果:False**
失败
**
测试用例输入:{1:{2:1:1},3:1},1:1},4},3.
预期结果:True**
成功
**
:测试用例输入:{1:{2:1,3:1},2:{1:1},3:{1:1},4:{},4
,所以我需要创建一个新的图形,即补码,然后对其运行“k_clique_decision”?我是通过在任何一个节点之间建立一个链接来实现的,而这个节点与另一个节点没有链接?我暖和了吗?:)我在这里更新了代码,但似乎无法正确创建补码图。代码有什么问题?