python与算法:冲突图结构分组分析

简介: python与算法:冲突图结构分组分析

以字典表示冲突图,以关键码(A,B)关联的值为True表示冲突,没有值表示不冲突。用这种技术完成本章求无冲突的分组的程序

result={('AB','BC'):True,
        ('AB','EA'):True,
        ('AB','BD'):True,
        ('AB','DA'):True,
        ('BC','EB'):True,
        ('BC','DB'):True,
        ('AC','EB'):True,
        ('AC','EA'):True,
        ('AC','BD'):True,
        ('AC','DA'):True,
        ('AC','DB'):True,
        ('BD','AB'):True,
        ('BD','AC'):True,
        ('BD','DA'):True,
        ('BD','EC'):True,
        ('BD','EB'):True,
        ('EA','AC'):True,
        ('EA','AB'):True,
        ('EA','AD'):True,
        ('AD','EA'):True,
        ('AD','EB'):True,
        ('AD','EC'):True,
        ('DA','AB'):True,
        ('DA','AC'):True,
        ('DA','BD'):True,
        ('DA','EB'):True,
        ('DA','EC'):True,
        ('DB','AC'):True,
        ('DB','BC'):True,
        ('DB','EC'):True,
        ('EC','BD'):True,
        ('EC','DA'):True,
        ('EC','DB'):True,
        ('EC','AD'):True
}
# 计算所有的路
verbs=[]
for key,value in result.items():
    k1,k2=key
    verbs.append(k1)
    verbs.append(k2)
verbs=list(set(verbs))
print(verbs)
def not_adjacent_with_set(v,new_group,result):
    if len(new_group)==0:
        return True
    else:
        con=True
        for i in new_group:
            if (i,v) in result or (v,i) in result:
                con=False
        return con
def coloring(result,verbs):
    color=0
    groups=[]
    verts=verbs
    while len(verts)>0:
        new_group=[]
        for v in verts:
            if not_adjacent_with_set(v,new_group,result):
                new_group.append(v)
                verts.remove(v)
        groups.append((color,new_group))
        color+=1
    return groups
coloring(result,verbs)
[(0, ['EC', 'EA', 'EB']),
 (1, ['BD', 'DB', 'AD']),
 (2, ['AB']),
 (3, ['AC', 'BC']),
 (4, ['DA'])]

如果想要得到尽可能多的可能性,可以考虑对verbs进行随机排列,有可能得到不同的结果

from random import shuffle
groups=[]
for i in range(100):
    verbs=[]
    for key,value in result.items():
        k1,k2=key
        verbs.append(k1)
        verbs.append(k2)
    verbs=list(set(verbs))
    shuffle(verbs)
    new_result=coloring(result,verbs)
    groups.append(new_result)
print(len(groups))

注:此算法大概率应该不是最优的。

目录
相关文章
|
19小时前
|
机器学习/深度学习 算法 数据可视化
Python 数据结构和算法实用指南(四)(4)
Python 数据结构和算法实用指南(四)
6 1
|
19小时前
|
机器学习/深度学习 存储 算法
Python 数据结构和算法实用指南(四)(3)
Python 数据结构和算法实用指南(四)
11 1
|
19小时前
|
存储 算法 搜索推荐
Python 数据结构和算法实用指南(四)(2)
Python 数据结构和算法实用指南(四)
8 0
|
19小时前
|
存储 搜索推荐 算法
Python 数据结构和算法实用指南(三)(3)
Python 数据结构和算法实用指南(三)
9 1
|
19小时前
|
存储 算法 编译器
Python 数据结构和算法实用指南(三)(1)
Python 数据结构和算法实用指南(三)
10 1
|
20小时前
|
存储 算法 搜索推荐
Python 数据结构和算法实用指南(二)(4)
Python 数据结构和算法实用指南(二)
11 2
|
20小时前
|
存储 XML 算法
Python 数据结构和算法实用指南(二)(3)
Python 数据结构和算法实用指南(二)
9 1
|
Shell Python
生成树状结构的脚本bat\python\shell
实际工作中经常要梳理文件目录结构,比如:发布版本时,随带一些软件包或文档目录,为了一目了然的说明各软件或文档的位置及作用,方便用户查找,这时你需要树状结构图。
927 0
|
5天前
|
JSON 数据格式 开发者
pip和requests在Python编程中各自扮演着不同的角色
`pip`是Python的包管理器,用于安装、升级和管理PyPI上的包;`requests`是一个HTTP库,简化了HTTP通信,支持各种HTTP请求类型及数据交互。两者在Python环境中分别负责包管理和网络请求。
19 5
|
7天前
|
存储 Python 容器
Python高级编程
Python集合包括可变的set和不可变的frozenset,用于存储无序、不重复的哈希元素。创建集合可使用{}或set(),如`my_set = {1, 2, 3, 4, 5}`。通过add()添加元素,remove()或discard()删除元素,如`my_set.remove(3)`。
10 0