#1 - 2017-2-24 23:03
君寻 (已淡出bgm38)
最近好友功能很是火热,于是产生了一个脑洞:Bangumi上离你最遥远的那个人是谁?
假定你与你的好友的距离为1
(忽然想到还有广义的情况)
(1)狭义上“离你最远的人”
你的好友集合记为A,你的好友中的某人,他的好友集合记为B,如果一个人属于B,而不属于A,那么他与你的距离为2
同理,B中的某人有好友集合C,对于一个人属于C,且不属于A、B,与你的距离则为3
以此类推,从你的好友集合出发,完成一次遍历所形成的所有人的集合,不妨简称为“你的世界”
那么在你的世界里,一定存在一个离你距离最远的那些人,称之为“Bangumi上离你最遥远的人”(狭义)
(2)广义上“离你最远的人”
考虑进“加你为好友的人”的集合,假定这些人与你的距离也为1,在上述遍历过程中同样考虑“加对方为好友”的人的集合,这样得到的离你距离最远的那些人,称之为“Bangumi上离你最遥远的人”(广义)

一个好友也不加的孤立个体不在“你的世界”中,所以不算在内

由于我是小白一只,对于python完全不懂,如果有感兴趣的菊苣愿意做出这个功能就好了Y(^o^)Y
#2 - 2017-2-24 23:40
(Enjoy your (real) life!)
BFS
#2-1 - 2017-2-24 23:42
小T
百度了一下:宽度(/广度)优先搜索算法?
#2-2 - 2017-2-24 23:46
Genius🌟小乖💯
如果运行两遍 BFS 就可以算出全 BGM 距离最为遥远的两个人。
#2-3 - 2017-2-24 23:52
君寻
Genius、小乖 说: 如果运行两遍 BFS 就可以算出全 BGM 距离最为遥远的两个人。
两遍?正向和逆向吗?
不太能捋顺这中间的结构呀
#2-4 - 2017-2-24 23:55
Genius🌟小乖💯
君寻 说: 两遍?正向和逆向吗?
不太能捋顺这中间的结构呀
http://wattlebird.github.io/2014/09/21/树的直径/
#2-5 - 2017-2-25 02:07
Franklin Yu
Genius、小乖 说: http://wattlebird.github.io/2014/09/21/树的直径/
兩次 BFS 是「相距最遠的兩個人」,樓主說的是「離你最遠的人」,所以一次 BFS(或者任何 search)就夠了

另外地址是 http://wattlebird.github.io/2014 ... %E7%9B%B4%E5%BE%84/(BGM 的鏈接判定不行……)
#2-6 - 2017-2-25 08:35
邓林
Genius、小乖 说: 如果运行两遍 BFS 就可以算出全 BGM 距离最为遥远的两个人。
两遍bfs要求图连通,所以只能在某个连通分量里找。最远的两个人,应该认为是从所有相互距离有限的人里边儿找。所以还是floyd-marshall,而且能用于有向图。
#3 - 2017-2-24 23:43
(Happy birthday.)
估计要爬好久好久
而且最遥远的肯定不止一个啊 一个好友也不加的人也有 那就都算咯
#4 - 2017-2-24 23:45
(愿意给我5分钟的编辑时间吗?)
小白提问:如果一个人没有任何好友,那么距离会是最远之一吗?虽然他好像没有办法被定出一个距离,所以会是论外的样子?对吗?
#4-1 - 2017-2-24 23:47
Genius🌟小乖💯
正无穷。只考虑连通图。
#4-2 - 2017-2-24 23:47
君寻
如果一个人没有任何好友,那么他不在“你的世界”内,所以不在讨论范围呀
#4-3 - 2017-2-24 23:49
小T
君寻 说: 如果一个人没有任何好友,那么他不在“你的世界”内,所以不在讨论范围呀
哦哦,所以说论外是对的,本来就没有算距离的必要与手段。还好有在发言时一边过一下脑(bgm38)
#5 - 2017-2-24 23:45
都别说了,是我老婆(bgm38)
#5-1 - 2017-2-24 23:47
小T
你开心就好。

对了,你老婆挺漂亮的
#5-2 - 2017-2-24 23:47
凡付真遠
小T 说: 你开心就好。

对了,你老婆挺漂亮的
谢谢夸奖w
#5-3 - 2017-2-25 01:42
N
你老婆是我女神,大概离我更远(bgm38)
#5-4 - 2017-3-1 11:20
用户
跟我去二次元吧.JPG
#6 - 2017-2-24 23:53
(愿意给我5分钟的编辑时间吗?)
比起最遥远的那个是谁,我可能会更想知道“自己的世界”有多大呢(bgm35)
#7 - 2017-2-24 23:56
(已淡出bgm38)
忽然想到,你的距离最远的人,对他(们)来说,距离最远的人是不是你?也就是说这个关系是否是互逆的?
#7-1 - 2017-2-25 00:01
Genius🌟小乖💯
不一定是。
#8 - 2017-2-25 00:13
(Enjoy your (real) life!)
怎么净想这些没用的东西。我找到了与我距离最远的人我应该 say hello to him/her 还是打一架?
#8-1 - 2017-2-25 01:01
板砖加身
no more words, just do.
#8-2 - 2017-2-27 00:56
原来的头像呢
找到后
第一步:不告诉任何人
第二步:脑补
第三步:用纸巾收拾一下
第四步:该干嘛干嘛去
#9 - 2017-2-25 00:24
(必须保卫战争)
你知道六度分隔理论吗,是社交网络的基础理论

只需要六个人,你就可以联系到世界上的任何一个人(bgm38)
#9-1 - 2017-2-25 00:46
君寻
6是平均值吧
#9-2 - 2017-2-25 00:53
秘则为花
君寻 说: 6是平均值吧
最大值为6

这是一个形式理论,我不清楚推导过程,你去看wiki吧(bgm38)
#9-3 - 2017-2-25 10:55
君寻
秘则为花 说: 最大值为6

这是一个形式理论,我不清楚推导过程,你去看wiki吧
http://degreesofwikipedia.com/
这个好玩,好像维基百科词条的度也为6
#9-4 - 2017-2-26 05:12
绯红の空
+1正想说这个
#9-5 - 2017-2-26 10:32
疾走狂徒
秘则为花 说: 最大值为6

这是一个形式理论,我不清楚推导过程,你去看wiki吧
是最大值的期望值是6,始终是一个概率问题。不能否定特例的···
#9-6 - 2017-2-26 10:50
秘则为花
疾走狂徒 说: 是最大值的期望值是6,始终是一个概率问题。不能否定特例的···
说了啊,这是一个形式模型(bgm38)
#9-7 - 2017-2-26 11:02
疾走狂徒
秘则为花 说: 说了啊,这是一个形式模型
对啊,所以“只需要六个人”这点并不是绝对的啊,特别是像这种比较狭窄的圈子里,很容易就会出现特例。例如少数某几个人自己组成一个封闭的圈子这样的,那么圈子外的人就绝对联系不上了。
#10 - 2017-2-25 01:08
(你谁啊?我准许你套近乎了吗?)
欸我想问一下为什么这个用python? (本人python入门小白)
#10-1 - 2017-2-25 01:50
Franklin Yu
因為很多搞爬蟲的只會用 Python
#11 - 2017-2-25 01:38
(人型自走单线程大脑培养皿#5)
life is short
i use python

好了,现在我们有一个绝佳的idea,就差一个程序员了
#11-1 - 2017-2-27 00:06
触触✅个人认证
我就挑一条看得懂的来评论
#12 - 2017-2-25 01:40
(見えたぞ、エンディングが)
想起数小时前进了某用户的时光机,记得好像标记了800+动画,然后同步率是0,0.00%
一开始以为是bug,我好歹也标了500多了,不可能吧。然后点进“看过”,标的每一部都是里番……
这是另一种意义上的最遥远吗(bgm38)
我承认文不对题,瞄了一眼标题想起来了而已
#13 - 2017-2-25 03:34
一般定义下的距离应该满足对称性哈...
#14 - 2017-2-25 07:52
(Information doesn't harm)
说一个简单的结论:之前我抓的那3700多活跃用户的连通图的diameter是10,也就是说在这3700人中距离最遥远的两个人之间只有九个人
#14-1 - 2017-2-25 10:20
君寻
是以Sai为根节点遍历得到的那个?这个数据如果提供一个接口的话是不是可以给他人查找了呢?
#14-2 - 2017-2-25 10:56
君寻
话说昨天我看到有个链接可以看谁加自己为好友,现在却怎么都找不到了,查找记录都找不到
好像是friends后面加rev什么的
找到了原来是 /rev_friends
#14-3 - 2017-2-25 11:23
Hentyclopedia
君寻 说: 是以Sai为根节点遍历得到的那个?这个数据如果提供一个接口的话是不是可以给他人查找了呢?
主要是数据有一定的时效性
而且你要是光算3700人之间任意两人之间的距离的话Dijkstra算一遍就好了,更大的数据的话也许一些message passing的方法会有用些
#14-4 - 2017-2-25 12:38
Genius🌟小乖💯
Hentyclopedia 说: 主要是数据有一定的时效性
而且你要是光算3700人之间任意两人之间的距离的话Dijkstra算一遍就好了,更大的数据的话也许一些message passing的方法会有用些
Ah! Message passing. I only use this in graphical model inference. Belief propagation? I never heard someone use message passing in distance calculation. Can you give more details?
#14-5 - 2017-2-25 12:55
Hentyclopedia
Genius、小乖 说: Ah! Message passing. I only use this in graphical model inference. Belief propagation? I never heard...
还不太确定能不能用来计算距离,我这么想是受到Viterbi algorithm和affinity propagation clustering的启发,belief propagation确实是message passing的一种,我不负责任地怀疑min-sum也许可以用来算距离

ps:message passing在没有loop的情况下是精确的,有loop会导致oscillation,虽然可以简单的增加damping来使算法稳定,不过我现在不太看好这个点子了
#14-6 - 2017-2-26 09:27
Franklin Yu
Hentyclopedia 说: 主要是数据有一定的时效性
而且你要是光算3700人之间任意两人之间的距离的话Dijkstra算一遍就好了,更大的数据的话也许一些message passing的方法会有用些
時效性 +1,抓好數據、算好每個人對應的值以後可能就失效了…… 不過做成 Python 腳本的話可以讓用戶選擇「是否重新抓」
#14-7 - 2017-2-26 09:49
Hentyclopedia
Franklin Yu 说: 時效性 +1,抓好數據、算好每個人對應的值以後可能就失效了…… 不過做成 Python 腳本的話可以讓用戶選擇「是否重新抓」
但是这个麻烦在所有人都在加好友,你只抓自己是不够的
要是你想计算自己和用户x的距离,要是x和你不在同一个connected component的话,用BFS不加以限制会跑完整个“我的世界”,这样非常浪费时间
#14-8 - 2017-2-26 09:55
君寻
Hentyclopedia 说: 但是这个麻烦在所有人都在加好友,你只抓自己是不够的
要是你想计算自己和用户x的距离,要是x和你不在同一个connected component的话,用BFS不加以限制会跑完整个“我的世界”,这样非常浪...
每一次加好友事件的发生都在影响网络的结构,已经保存的网络结构是否能节省新一次遍历所需要的时间?
如果每一次新的遍历都要很长时间的话,我觉得这事儿得等这阵加好友风潮过了之后比较好
#14-9 - 2017-2-26 10:11
Hentyclopedia
君寻 说: 每一次加好友事件的发生都在影响网络的结构,已经保存的网络结构是否能节省新一次遍历所需要的时间?
如果每一次新的遍历都要很长时间的话,我觉得这事儿得等这阵加好友风潮过了之后比较好
感觉这个很难做到,因为从某一个用户的角度看,他不可能知道其他所有用户的加好友的动作,这意味着为了保证结果的正确性你不得不重新访问其他人的好友页面看他的好友列表是否有变更
从数据结构的角度上说,保留一定的缓存进行增量式的更新确实省一定时间,然而这不是最慢的地方,目前的bottleneck在你不得不访问并分析大量页面上
#14-10 - 2017-2-27 07:26
Franklin Yu
Hentyclopedia 说: 但是这个麻烦在所有人都在加好友,你只抓自己是不够的
要是你想计算自己和用户x的距离,要是x和你不在同一个connected component的话,用BFS不加以限制会跑完整个“我的世界”,这样非常浪...
當然是每次都要遍歷整個樹,這個沒辦法避免…… 所以這種項目對服務器的壓力是比較大的
#15 - 2017-2-25 08:54
(Rigidity and Uncertainty~☆)
请问自己暗恋的从未见过面的bgmer算不算是bangumi上最遥远的人?(bgm38)

话说,我们能证明“你的世界”是个 Metric Space 吗?

想象下面的这个情况:让你的世界为整数集合Z
定义“你的好友”为与你左右相邻的两个整数
假设你是0,对你而言,你的好友集合是 A = {-1, 1},所以我们知道 d(0, -1) = d(0, 1) = 1
对于0的好友1而言,他的好友集合是 B = {0, 2}
我们知道 0 in B 且 0 not in A,所以0对于你的距离是2
d(0, 0) = 2 (bgm38)
#15-1 - 2017-2-25 10:25
君寻
并不是Metric Space,因为好友关系是单向的,不满足可逆性。
#15-2 - 2017-2-27 07:31
Franklin Yu
君寻 说: 并不是Metric Space,因为好友关系是单向的,不满足可逆性。
如果只考慮互粉的話那應該還是能算度量空間的
#15-3 - 2017-3-1 09:29
th3ta "Paradox"
Franklin Yu 说: 如果只考慮互粉的話那應該還是能算度量空間的
事实上,上面的例子其实已经考虑互粉了...
0的好友集A里面有1,而1的好友集B里面必然有0,也就是说相邻的两个用户必然互为好友

问题出在了定义“距离2”上面
x有一个好友y,而假设互粉,y的好友集里面必然有x
x的好友集里面必不包含x
所以x在好友y的好友集,却不在x自己的好友集里
因此按照定义,x对于自己的距离是2
#15-4 - 2017-3-1 10:06
Hentyclopedia
th3ta "Paradox" 说: 事实上,上面的例子其实已经考虑互粉了...
0的好友集A里面有1,而1的好友集B里面必然有0,也就是说相邻的两个用户必然互为好友

问题出在了定义“距离2”上面
x有一个好友y,而假设互粉,y的好友集...
给定一张undirected graph G=(V,E)当作互粉情况的模型
你对 d(x,y) 的定义是

d(x,y) = min { k > 0 | x = x_0, x_1, ..., x_{k-1}, x_k = y, where x_i x_{i+1} \in E, for all i = 0,...k-1 }

么?注意这里因为限制了 k > 0,而且我们考虑的graph里没有self-loop,所以按照这个定义,如果x至少有一个互粉好友y的话,那么d(x,x)=2,如果x没有互粉好友 d(x,x)=+\infty

但是,这个定义并不是一个metric,因为metric第一个条件就是
d(x,y) \ge 0 for all x,y    and     d(x,y) = 0 iff x = y
#15-5 - 2017-3-2 09:24
Franklin Yu
th3ta "Paradox" 说: 事实上,上面的例子其实已经考虑互粉了...
0的好友集A里面有1,而1的好友集B里面必然有0,也就是说相邻的两个用户必然互为好友

问题出在了定义“距离2”上面
x有一个好友y,而假设互粉,y的好友集...
哦,我無視了 d(0, 0) = 2 這種奇怪的 metric…… 明明有個正常的度量為何不用
#15-6 - 2017-3-3 16:47
th3ta "Paradox"
Hentyclopedia 说: 给定一张undirected graph G=(V,E)当作互粉情况的模型
你对 d(x,y) 的定义是

d(x,y) = min { k > 0 | x = x_0, x_1, ..., x_{k...
是的,我说距离2本来是想说这可能是个 pseudo-metric,因为没有事先声明 d(x, y) = 0  iff x = y,而根据lz的那个 set 的定义是会得出矛盾的;所以想要改定义,把不属于B改成不属于B且非你本身这样

我的图论和组合都快忘光了... 你提到了 graph 我才突然想起来。我刚去读了wiki,里面写着 connected undirected graph 的 geodesic distance 就是一个 metric (然而我依然找不到证明)... 根据定义,没有关联的用户不在“你的世界”里,所以 connected,然后假设自动互为好友,所以 undirected,所以是 metric 没错;这样看来,lz所说的那个距离就等价于geodesic distance,所以最远的距离也就是 eccentricity
#16 - 2017-2-25 12:04
(Q, Σ, Γ, δ, q0, Z0, F)
啊。
#17 - 2017-2-26 10:27
(当笨蛋超爽der~)
考虑一种特殊情况,假设你新加了一个好友,这个好友到处乱加好友,就会导致“距离”一下子缩短····然而虽然从定义上来说你和某些人“距离”变近了,但是实际上并没有什么用···因为只是多了一条“捷径”···
#17-1 - 2017-2-27 07:28
Franklin Yu
所以我們不應該加觸觸
#17-2 - 2017-3-2 10:33
luna
SN分析(bgm38)
#18 - 2017-3-1 05:04
(Information doesn't harm)
截止到昨天的状态,一共有21378个人可以与你连通,bangumi上离你最远的人是@汤米@小叶纸Rae,距离为12
#18-1 - 2017-3-1 05:55
Hentyclopedia
烈之斩 说: ?他俩都有朋友:labsdog啊
12是这两个人到LZ的距离
#18-2 - 2017-3-1 10:05
君寻
这两人竟然互为好友,有意思
#18-3 - 2017-3-1 10:13
Hentyclopedia
君寻 说: 这两人竟然互为好友,有意思
和你距离等于0-12的人的个数分别是
1, 74, 3114, 9221, 5843, 2204, 698, 168, 43, 6, 3, 1, 2
你可以看出来后面其实是有一个长长的链条,应该是某个和你距离为8的人加了一个独立小团体的人为好友
#18-4 - 2017-3-1 11:39
君寻
Hentyclopedia 说: 和你距离等于0-12的人的个数分别是
1, 74, 3114, 9221, 5843, 2204, 698, 168, 43, 6, 3, 1, 2
你可以看出来后面其实是有一个长长的链条,应该是某个...
这么看来,距离为6以内的人可以涵盖“我的世界”的99%的人数