我不确定你是在询问如何提出建议或检测朋友距离.提出建议很容易,但往往会大小爆炸.
前两种情况可以用同一算法覆盖,第三种情况可以用小扩展覆盖.
前两个基本上是寻找你知道的朋友相互了解的所有人:
FriendHash = {}
foreach Friend in me.getFriends()
foreach FriendOfFriend in Friend.getFriends()
FriendHash{FriendOfFriend} += 1
foreach PotentialFriend in keys FriendHash
if FriendHash{PotentialFriend} > 1
me.suggestFriend(PotentialFriend)
Run Code Online (Sandbox Code Playgroud)
在情况1中,朋友1和2之间的链接可能是一个额外的约束,实际上会使案例实现起来有点复杂.通过要求朋友1和2拥有链接,您需要在迭代朋友对时检测潜在的朋友,而不是在最后一次.
foreach Friend in me.getFriends()
foreach SecondFriend in me.getFriends()
# skip already processed friends and Friend == SecondFriend
if Friend.getFriends() contains SecondFriend
foreach FriendOfFriend in Friend.getFriends()
# skip already suggested friends
if SecondFriend.getFriends() contains FriendOfFriend
me.suggestFriend(PotentialFriend)
Run Code Online (Sandbox Code Playgroud)
当然可以添加一些可以跳过重复比较的优化.实际上,这可能不是一个有用的搜索.你所要做的就是排除两个不同朋友群体共同的潜在朋友.
最后一个案例通过将朋友建议扩展到已知朋友共同朋友的所有朋友来修改第一个伪代码段:
foreach PotentialFriend in keys FriendHash
if FriendHash{PotentialFriend} > 1
foreach ExtendedFriend in PotentialFriend.getFriends()
me.suggestFriend(ExtendedFriend)
Run Code Online (Sandbox Code Playgroud)
正如Neil Knight评论的那样,您可以过滤每个朋友列表,然后首先查看最活跃的朋友.或者计算一个相似度分数,以促进那些拥有更多朋友的朋友.
如果您实际上正在考虑检测朋友和建议之间的距离,这可能与此无关.
| 归档时间: |
|
| 查看次数: |
3293 次 |
| 最近记录: |