python – 将所有可能的点组合分组,分为m组
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了python – 将所有可能的点组合分组,分为m组,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含1593字,纯文字阅读大概需要3分钟。
内容图文
我想将所有可能的点组合分组为r组.
Points = [A,B,C,D……..] Total n points
一次取m的这些点的组合将是列表l
l = list(itertools.combinations(points,m))
如何进一步将其分组为r组,使得每组的第i个元素没有相似的点.
例如,
Points = [A,B,C,D] m = 2 and r = 2
l = [[A,B],[A,C],[A,D],[B,C],[B,D],[C,D]]
所以小组会
Group 1 = [[A,B],[A,C],[A,D]] and corresponding to it Group 2 =
[[C,D],[B,D],[B,C]]
注意:组1和组2的第i个索引中的点没有相似的点.
我希望一次获取m个点并将其分组为r组.
请提供我的算法.
另请注意,当点数增加时,如果我们想要超过2组,可能的组合也会增加.
解决方法:
这是一个棘手的问题!我实施了一个天真的蛮力解决方案.这可能太慢了,但这是一个起点.
from itertools import combinations, permutations
points = 'ABCDEF'
r = 3
m = len(points) // r
all_combinations = list(combinations(points, m))
group_length = len(all_combinations) // r
assert r * group_length == len(all_combinations)
found = set()
for combinations_permutation in permutations(all_combinations):
groups = [combinations_permutation[group_length * i: group_length * (i + 1)]
for i in range(r)]
transpose = zip(*groups)
# Avoid very similar-looking solutions
canonical = frozenset(map(frozenset, transpose))
if (canonical not in found and
all(len(col) == len(set(col))
for col in (sum(column, ()) for column in transpose))):
found.add(canonical)
for group in groups:
print ', '.join(map(''.join, group))
print '----'
这是输出的开始:
AB, AC, AD, AE, AF
CD, BE, BF, BD, BC
EF, DF, CE, CF, DE
----
AB, AC, AD, AE, AF
CD, BF, BE, BC, BD
EF, DE, CF, DF, CE
----
AB, AC, AD, AE, AF
CE, BD, BE, BF, BC
DF, EF, CF, CD, DE
----
AB, AC, AD, AE, AF
CE, BF, BC, BD, BE
DF, DE, EF, CF, CD
内容总结
以上是互联网集市为您收集整理的python – 将所有可能的点组合分组,分为m组全部内容,希望文章能够帮你解决python – 将所有可能的点组合分组,分为m组所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。