【发布时间】:2020-06-03 16:04:56
【问题描述】:
有一种理论说六度分离是最高的 通过熟人链将人们联系起来的程度。 (你知道贝克 - 分离度
1,贝克认识某人 你不知道 - 分离度2)我们有一个人员列表
P,列表A的相应熟人 在这些人当中,还有一个人x我们正在尝试实施一种算法来检查人
x是否尊重 六度分离。如果距离x,则返回trueP中的所有其他人最多为 6,否则为 false。在最坏的情况下,我们将完成
O(|P| + |A|)。
为了实现这个算法,我考虑在邻接矩阵上实现一个邻接列表来表示带有顶点P 和边A 的图形G,因为邻接矩阵需要O(n^2) 来遍历。
现在我考虑使用 BFS 或 DFS,但我似乎无法找到为什么另一个更适合这种情况的原因。
我想使用 BFS 或 DFS 将与x 的距离存储在数组d 中,然后遍历数组d 以查看是否有任何Degree 大于6。
DFS 和 BFS 具有相同的时间复杂度,但在大多数情况下,深度更好(更快?)找到大于 6 的第一个度数,而广度更好地同时排除所有度数 > 6。
在 DFS 或 BFS 之后,我将遍历包含与人 x 的距离的数组,如果没有条目 >6 和 false,则返回 true。
使用 BFS,分离度总是在数组的末尾,这可能会导致更高的时间复杂度?
使用 DFS,分离度将随机分散在 Array 中,但在搜索早期获得高于 6 的分离度的机会更高。
我不知道如果在这里使用 DFS 或 BFS 是否对时间复杂度有任何影响。
【问题讨论】:
标签: time-complexity depth-first-search breadth-first-search