Python在社交图上使用广度优先搜索
我已经阅读了很多关于如何使用广度优先搜索、dfs、a*等的stackoverflow问题,问题是什么是最佳使用以及如何在模拟图中实现它。例如 假设你有一个Twitter/Facebook/某个社交网站的社交图,在我看来,搜索算法的工作原理如下: 如果用户A有10个朋友,那么其中一个有2个朋友,另一个有3个。搜索将首先找出用户A的朋友是谁,然后必须查找十个用户中每个人的朋友。对我来说这好像是bfs 然而,我不确定这是否是实现算法的方法Python在社交图上使用广度优先搜索,python,algorithm,social-networking,traversal,breadth-first-search,Python,Algorithm,Social Networking,Traversal,Breadth First Search,我已经阅读了很多关于如何使用广度优先搜索、dfs、a*等的stackoverflow问题,问题是什么是最佳使用以及如何在模拟图中实现它。例如 假设你有一个Twitter/Facebook/某个社交网站的社交图,在我看来,搜索算法的工作原理如下: 如果用户A有10个朋友,那么其中一个有2个朋友,另一个有3个。搜索将首先找出用户A的朋友是谁,然后必须查找十个用户中每个人的朋友。对我来说这好像是bfs 然而,我不确定这是否是实现算法的方法 谢谢,谢谢我的两分钱,如果你只是想遍历整个图形,那么使用什么算
谢谢,谢谢我的两分钱,如果你只是想遍历整个图形,那么使用什么算法并不重要,只要它只命中每个节点一次。这似乎是你注意到的: 我只是想遍历整个图表 这意味着你的术语在技术上是有缺陷的——你说的是行走一个图形,而不是搜索一个图形。除非你真的想寻找一些特别的东西,而你在问题中根本没有提到 综上所述,Facebook和Twitter是非常不同的图形结构,它们确实会影响你如何使用它们:
def nodeGenerator(MY_DATA)
for node in MY_DATA:
yield node
显然,您需要调整nodeGenerator内部,以处理实际访问节点的方式。尽管如此,大多数图结构都实现了节点迭代器。然后,您可以随时通过以下方式创建迭代器:
for node in nodeGenerator(MY_DATA):
(Do something here)
也许我没有抓住问题的重点,但现在你提出了一个关于没有搜索问题的搜索算法的问题。由于优化和搜索的本质,任何搜索算法的价值都将完全取决于您试图检查的搜索问题
即使在相同的数据集中也是如此。毕竟,如果你要搜索每个名字以字母D开头的人,一个很好的方法就是按字母顺序对每个人排序,然后进行二进制搜索。相反,如果你想找出每个人与凯文·培根的分离程度,你会想要一个从培根先生开始,递归迭代每个认识他的人和他们认识的人的算法。这些都是你可以在Facebook或Twitter上做的事情,但如果没有任何细节,你真的无法推荐算法。因此,如果您什么都不知道,只需将每个人作为列表进行迭代即可。它和其他东西一样好。如果要优化,请缓存所有计算。对于我的两分钱,如果您只是尝试遍历整个图形,那么使用什么算法并不重要,只要它只命中每个节点一次。这似乎是你注意到的: 我只是想遍历整个图表 这意味着你的术语在技术上是有缺陷的——你说的是行走一个图形,而不是搜索一个图形。除非你真的想寻找一些特别的东西,而你在问题中根本没有提到 综上所述,Facebook和Twitter是非常不同的图形结构,它们确实会影响你如何使用它们:
def nodeGenerator(MY_DATA)
for node in MY_DATA:
yield node
显然,您需要调整nodeGenerator内部,以处理实际访问节点的方式。尽管如此,大多数图结构都实现了节点迭代器。然后,您可以随时通过以下方式创建迭代器:
for node in nodeGenerator(MY_DATA):
(Do something here)
也许我没有抓住问题的重点,但现在你提出了一个关于没有搜索问题的搜索算法的问题。由于优化和搜索的本质,任何搜索算法的价值都将完全取决于您试图检查的搜索问题
即使在相同的数据集中也是如此。毕竟,如果你要搜索每个名字以字母D开头的人,一个很好的方法就是按字母顺序对每个人排序,然后进行二进制搜索。相反,如果你想找出每个人与凯文·培根的分离程度,你会想要一个从培根先生开始,递归迭代每个认识他的人和他们认识的人的算法。这些都是你可以在Facebook或Twitter上做的事情,但如果没有任何细节,你真的无法推荐算法。因此,如果您什么都不知道,只需将每个人作为列表进行迭代即可。它和其他东西一样好。如果你想进行优化,请缓存任何计算。我在facebook上有大约300个朋友,还有一些o