如何解决基于关系的矩阵分组
我遇到了根据矩阵关系来解决矩阵分组问题的问题。
问题
请考虑一群人互相提供书籍。更正式地说,小组由彼此认识的所有人组成,无论是直接认识还是传递。
示例
考虑输入矩阵 M
输入
1100
1110
0110
0001
输出:
2
- 有n = 4个人,编号为related [0]至related [3]。
- 有两对彼此直接认识:( related [0], related [{1])和(related [{1],related [2])。因为关系是 可及的,这组人{related [0],related [1],related [2]}是 被认为是一个团体。
- 剩下的相关人[3]不认识其他任何人,并且 是一个单独的组:{related [3]}
- 共有2组。
示例
输入:
10000
01000
00100
00010
00001
输出:
5
未显示直接关系,因此有5组:{相关 [0],相关[1],相关[2],相关[3],相关[4]}
示例
输入
1100000
1110000
0110000
0001000
0000110
0000110
0000001
4
- 有两对彼此直接认识:( related [0], related [{1])和(related [{1],related [2])。因为关系是 可及的,这组人{related [0],related [1],related [2]}是 被认为是一个团体。
- 有1对彼此直接认识的:(相关[4],相关[5])。因此,它们被视为单个组{related [4],related [5]}
- 与[3],[6]相关的其余人不认识任何其他人,并且 是一个单独的组:{related [3]},{related [6]}
- 共有4个组:{{相关[0],相关[1],相关[2]},{相关[4],相关[5]},{相关[3]}, {related [6]}}
我需要有关如何解决此类问题的帮助。
代码 (我尝试未完成)
def countGroup(matrix):
people = set()
group1 = set()
for i in range(len(matrix)):
people.add(i)
for j in range(len(matrix)):
if i == j:
# next
continue
if matrix[i][j]:
group1.add((i,j))
people.discard(i)
people.discard(j)
# group1.add(i)
# group1.add(j)
print(people,"people")
print(group1,"group1")
count = len(people)
if group1:
count += 1
return count
解决方法
您几乎在那儿,问题是if不太正确,您需要更多使用集合。尚未测试代码,但应该进行一些细微调整,我的python有点生锈。
def countGroup(matrix):
people = set()
group1 = set()
for i in range(len(matrix)):
people.add(i) # Quick way to build a list of all the people
for j in range(len(matrix)):
if i == j: # Not useful,you should know yourself.
# Could avoid this by using itertools.combinations
continue
if matrix[i][j] == 1: # we just want to know
group1.add(i)
group1.add(j)
group2 = people - group1 # Anyone not in group1 is in group2.
return (group1,group2)
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。