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))

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

目录
相关文章
|
10天前
|
JSON API 数据格式
使用Python发送包含复杂JSON结构的POST请求
使用Python发送包含复杂JSON结构的POST请求
|
7天前
|
Python
Python sorted() 函数和sort()函数对比分析
Python sorted() 函数和sort()函数对比分析
|
9天前
|
数据采集 网络协议 调度
Python爬虫策略分析4
Python爬虫策略分析4
23 1
|
9天前
|
数据采集 前端开发 Python
Python爬虫策略分析3
Python爬虫策略分析3
11 1
|
9天前
|
数据采集 Python
Python爬虫策略分析1
Python爬虫策略分析1
11 1
|
10天前
|
大数据 UED 开发者
实战演练:利用Python的Trie树优化搜索算法,性能飙升不是梦!
在数据密集型应用中,高效搜索算法至关重要。Trie树(前缀树/字典树)通过优化字符串处理和搜索效率成为理想选择。本文通过Python实战演示Trie树构建与应用,显著提升搜索性能。Trie树利用公共前缀减少查询时间,支持快速插入、删除和搜索。以下为简单示例代码,展示如何构建及使用Trie树进行搜索与前缀匹配,适用于自动补全、拼写检查等场景,助力提升应用性能与用户体验。
28 2
|
12天前
|
Unix Linux C++
python优缺点分析11
python优缺点分析11
30 3
|
9天前
|
数据可视化 数据处理 Python
Python操作Excel:轻松实现数据处理与分析
Python操作Excel:轻松实现数据处理与分析
12 0
|
9天前
|
数据采集 JSON 前端开发
Python爬虫策略分析2
Python爬虫策略分析2
10 0
|
12天前
|
数据挖掘 Python
用python的tushare模块分析股票案例(python3经典编程案例)
该文章提供了使用Python的tushare模块分析股票数据的案例,展示了如何获取股票数据以及进行基本的数据分析。
12 0
下一篇
无影云桌面