sns好友演算法

2021-09-30 16:25:57 字數 1653 閱讀 3469

最近研究sns的好友系統,才慢慢理解了六度分割中的度的概念,比如:我跟你是好友,咱們之間的度就是1,你的好友呢,也就是我的好友的好友,那我們之間的度就是2,相當於隔了多少層。

比如我有個好友表:(以雙向好友表為例)

user_id friend_id

1 2

1 3

2 1

2 3

3 1

3 2

3 4

如果我的id是1 那麼我的好友就是2,3 也就是

select friend_id from *** where user_id=1

這句話就是檢視我的直接好友,也就是一度好友

那麼檢視二度好友呢 就在迴圈遍歷一遍 也就是查詢我的好友的好友

而好友關係是這樣 a->b->c c是a的二度好友

也就是

select friend_id from *** where user_id in (select friend_id from *** where user_id=1)

這是id為1的二度好友 可是如果a->c 那個c與a認識 abc互相認識,c既可以是a的一度好友也可以是a的二度好友,這時就看要求了,如果要是只查二度好友,就可以用上面的句子,如果要是想看不認識的二度好友,就像人人網的好友推薦那樣,還要在上面的結果中把a的好友去除,也就是

select friend_id from *** where user_id in (select friend_id from *** where user_id=1) and friend_id not in(select friend_id from *** where user_id=1)

[color=red]括號內為一度好友查詢[/color]

恩 這樣就是不認識的二度好友了

看到這裡大家也應該明白了 二度好友就是在一度好友的情況下 在遍歷一遍 如果每個人的好友有n個 那麼你的二度好友就是n*n個

現實世界中假設你的好友有100個 肯定比這個多 那麼二度好友就是10000個(先不排除認識二度好友) 那麼6度好友就是100^6 1萬億 地球上才幾十億 也就是這個道理

廢話不說 繼續跟著上述的sql 根據sql出的結果是二度好友數 可是還有情況是好友是自己 也就是迴圈一圈回來了- -! 因為是雙向好友表嘛 需要在結果中把自己的id去掉

select friend_id from *** where user_id in (select friend_id from *** where user_id=1) and friend_id not in(select friend_id from *** where user_id=1) and friend_id <> 1

[color=red]括號內為一度好友查詢[/color]

可以根據group by 分下組 就知道了自己不認識的人 和自己有多少個共同好友 也就是人人的好友推薦了

如果要是查詢兩人的共同好友,我又要開一貼了,況且我這是sql資料庫 人人好像用的nosql,想不管這麼多 :d 寫完了

推薦演算法之好友推薦

寫點自己的理解,大牛請直接略過。好友推薦裡有推薦一些你可能認識的人,其中二度人脈是其中一種。比如 何炅和謝娜 在微博上相互關注,那用二度人脈的方法就是找和謝娜相互關注的人 如 張杰,海濤,某人 這時候 張杰,海濤,某人 就是何炅的二度人脈,排除掉何炅已經相互關注的張杰,剩下 張杰和某人 於是何炅發現...

SNS的工具化思考 SNS之我見(六)

前一篇文章我主要談的是陌生人交友社群的問題,這類 往往通過刺激使用者的持續高潮來透支使用者,達到短時間內流量激增的效果,當然負面影響也很大。針對這類 我覺得最重要的改良方向是把雙向反饋的好友關係拆開,拆為兩類 一是單向的訂閱關係 一是雙向的熟人關係。單向的訂閱關係只是我關注別人,我的動作不會對我關注...

分析國內SNS現狀 把握SNS使用者心理

嚴格講,國內sns並非social networking services 社會性網路服務 而是social network site 即社交 以人人網 校內網 開心網 51.com這三個sns平台為代表,結合一些相對可靠的資料,不難歸納出主流sns使用者的共性。一 使用者特徵 1 基於使用者互動的...