Python 利用图和DFS/BFS解决关系问题
从实施的角度来看,我在处理这个问题时遇到了一些问题: 让我们假设有两个人们正在参加的活动。我们想看看是否有两个人参加了相同的活动或不同的活动。如果存在不止一种可能性,可能没有足够的信息来说明。我们有一个包含三种类型信息的列表:“不同连接”、“正常连接”和“查找连接”。我们想确定任何两个人之间的关系,他们是否参加相同或不同的活动。或者,如果没有足够的信息来确定,则是未知连接。以下是一个示例输入,其中每个输入均采用信息类型的格式,并且两个被比较的人都有一个唯一的编号:Python 利用图和DFS/BFS解决关系问题,python,algorithm,graph,depth-first-search,Python,Algorithm,Graph,Depth First Search,从实施的角度来看,我在处理这个问题时遇到了一些问题: 让我们假设有两个人们正在参加的活动。我们想看看是否有两个人参加了相同的活动或不同的活动。如果存在不止一种可能性,可能没有足够的信息来说明。我们有一个包含三种类型信息的列表:“不同连接”、“正常连接”和“查找连接”。我们想确定任何两个人之间的关系,他们是否参加相同或不同的活动。或者,如果没有足够的信息来确定,则是未知连接。以下是一个示例输入,其中每个输入均采用信息类型的格式,并且两个被比较的人都有一个唯一的编号: find_connection
find_connections(
['different_connection 3 5',
'same_connection 5 6',
'different_connection 1 2',
'same_connection 2 5',
'different_connection 9 8'
'find_connection 1 3',
'find_connection 1 5',
'find_connection 2 5',
'find_connection 6 8'])
以下是预期输出:
['same_connection','different_connection','same_connection', 'unknown_connection']
可能的输出为“相同连接”、“不同连接”和“未知连接”,并且输出仅用于给定输入列表中的查找连接信息
人数是有限的,一次只能比较两个人
我的目标是在O(n)最坏情况下实现,其中n是给定输入信息列表中的元素数
我知道如何在O(n^2)最坏情况下使用循环和深度优先搜索,在find_连接情况下使用邻接列表进行搜索
我画了一张这方面的图,并了解如何根据这张图获得输出,但要在O(n)时间内完成这项工作似乎很困难
但是我如何在O(n)时间内做到这一点呢?我知道图形在这里很有用,但在O(n)时间内不可能做到
这里需要一些想法。您可能对为什么不相交集感兴趣?从介绍的第一段:“最后一个操作可以有效地找出任何两个元素是否在相同或不同的集中。”听起来很熟悉吗?即使是这样,我也想知道两个不同节点之间的关系。让我上传一个图表来帮助可视化它。