不是家庭作业问题或类似的任何问题。所以,这是一个简单的问题陈述: 你有一堆用户U 1 ,U 2 ,...,U n 。 每个用户都有一组朋友,这是整个用户集的子集。 U 1 - > U 2 ,U 5 ,U 8 ,...,U k
类似地,U 2 可以有朋友U 1 ,U 11 ,...,U k2 。现在有一堆“喜欢”实体L 1 ,L 2 ,L 3 ,......很明显,每个用户都喜欢子集Like对象。所以U 1 - > L 1 ,L 2 ,L 5 ,L 10 ,... U 2 - > L 4 ,L 8 ,L 10 ,......
现在问题是,给定一个像上面这样的网络,给定一个用户ID,我们需要返回HIS网络中的顶级喜欢以及喜欢它的几个朋友(朋友可能没有特定的顺序)。
我的想法: 一个想法是维护用户及其朋友的哈希图。这是全球性的。
User-Friends HashMap
|用户|朋友和他们喜欢的地图|
现在每个用户,我们还将维护他的喜欢的最大堆,按他们在网络中的频率排序。我们需要某种不相交的设置,以及实际的最大堆。当查询进入时,给定一个用户ID,我们从喜欢的堆中检索顶部条目,对于每个类似,我们检索喜欢它的朋友。
总的来说,从数据结构的角度来看,我们正在查看每个用户不相交集的每个用户最大堆的全局散列映射。
这是解决此问题的最佳方法吗?我完全迷失了:(:( 建议多欢迎。我们可以在这里使用最短路径/ bfs / dfs吗?
答案 0 :(得分:1)
现在每个用户,我们还会根据他们在网络中的频率对他的喜欢的最大堆进行排序。
为什么呢?这意味着您不断为每个人提供查询答案,而不仅仅是您被问到的人。因此,对图表的任何更改现在变得更加昂贵,因为您必须更新所有这些堆。加上每个节点的内存占用量,而不是常数,取决于他拥有的朋友数量和他们有多少喜欢。
按照您的描述保留图表,即只是朋友和类似的关系。
然后,当您收到有关用户ID的查询时:
k
个计数。