分辨多个用户之间是否是分身的算法?

103 天前
 Grocker

我有一个需求是为了分辨多个用户之间是否是分身(需求背景是为了防止新注册用户薅羊毛,优惠力度挺大的,是分身的用户只要一人享受了优惠,其他人不能再次享受), 所以我要将多个用户之间人为的去关联,比如用户 A 关联了 B ,A 和 B 互为分身;用户 B 再关联了 C ,B 和 C 互为 分身,C 和 A 也互为分身,因为有中间人 B ,以此类推,中间人的层级不限,这种用推荐使用什么算法实现呢?

我自己想到的是多存数据将这种层级平铺:

当用户 A 直接关联用户 B 时,我们在 associations 表中插入两条记录:

associations 表结构:user_id 关联用户 ID ,associated_user_id:被关联用户 ID ,is_direct:是否是直接关联

INSERT INTO associations (user_id, associated_user_id, is_direct) VALUES (A 的用户 ID, B 的用户 ID, TRUE);
INSERT INTO associations (user_id, associated_user_id, is_direct) VALUES (B 的用户 ID, A 的用户 ID, TRUE);

当用户 B 再直接关联用户 C 时,不仅插入 B 和 C 之间的直接关联记录,还插入 A 和 C 之间的间接关联记录:

INSERT INTO associations (user_id, associated_user_id, is_direct) VALUES (B 的用户 ID, C 的用户 ID, TRUE);
INSERT INTO associations (user_id, associated_user_id, is_direct) VALUES (C 的用户 ID, B 的用户 ID, TRUE);
INSERT INTO associations (user_id, associated_user_id, is_direct) VALUES (A 的用户 ID, C 的用户 ID, FALSE);
INSERT INTO associations (user_id, associated_user_id, is_direct) VALUES (C 的用户 ID, A 的用户 ID, FALSE);

需要用到的场景有: 取消关联某两个用户之间的关联 查询给定用户的所有分身

6427 次点击
所在节点    程序员
74 条回复
murmur
103 天前
别需求了,现在只能实名制,有多少黑产专门卖抹指纹的手机

我看到的下面都是不知所云

最核心的用户特征辨别方法都没有
Grocker
103 天前
@murmur 辨别方法是线下,因为业务人员知道哪些人之间存在关联关系
murmur
103 天前
@Grocker 你最好在仔细想一下常见,设备指纹、实名制,这两个最常用的方法你不用

那你有没有想过线下业务推广人员勾结撸公司羊毛

你这需求我真看不懂。。。
Grocker
103 天前
@murmur 我们场景不一样,是线下教育机构
TArysiyehua
103 天前
楼上说的对,其实光实名都不太行,之前我待的一家公司就是,实名+手机号才能过的账号,也被黑产刷了一大波。关键就是黑产手上有无数个号。
后来不得不限定只有用户我们的产品才能薅羊毛(就是你必须有类似于购买或者消费记录),这样来说这样的用户是肯定能满足的。
不过这一套又不能用在拉新身上,因为新人他是不会有任何购买或者消费记录的,这样就不得不再设计一套类似于现在很多 app 这样,可以让你信号注册领羊毛,但是变现不了,只能用于消费。(类似于朴朴,淘宝这样的拉新)

当然如果你的优惠是针对虚拟的东西,这又不一样了。。。

总之一个铁律:不能提现,变现。最好能跟产品商品绑定,优惠下来,哪怕不挣钱,甚至亏一点点,但是产品还是卖了,也不亏。
Grocker
103 天前
所有用户事先都已实名了,比如有个宝宝,用他妈妈的账号注册了,去买了个低价课,上完后,又用他爸爸的账号注册了再去买了个低价课,就是为了避免这种情况
veni2023
103 天前
技术上能实现的话,用户体验肯定非常差
wuud
103 天前
@Grocker #6 如果这个宝宝用他妈妈的手机和身份、他爸爸的手机和身份,这个应该怎么分辨。同好奇,有答案麻烦踢一下
Grocker
103 天前
@wuud 其实分辨不是这个问题的重点,主要是问算法 😄

我们的业务模式是线下,上课的娃始终没变,自然知道哪些账号之间是存在关联的了
hi909
103 天前
用树形结构,在数据库中加个 path 字段,例如 A/B/C/D ,就表示 D 的上级是 C 。就和文件夹一样。
Unicornvic
103 天前
@Grocker 如果“上课的娃始终没变”,那么签协议的时候设置一下主体,判断一下唯一可行吗
hi909
103 天前
或者可以增加一个 customer group ,每个上课的人都需要有一个 group 。 他爸妈的账号也要关联在这个 group 里。
meilicat
103 天前
并查集
saberlove
103 天前
填写娃儿的身份证
zizon
103 天前
你想想面向对象编程里子类和父类的关系.
wangxiaoer
103 天前
感觉图数据库很合适拿来用用。
xabcstack
103 天前
你需要的是账号遗传 DNA 的算法
2Q6flVvMwgSYg5T8
103 天前
保留 associations 表,同时使用另一个表来记录每个用户的所属分量。遍历 associations 表中的用户,有直接关联的两个用户属于同一分量,通过并查集将他们合并到同一个合集。这样可以吗?
docx
103 天前
同一设备,同一手机号,同一实名,同一支付方式满足其一即为同一用户

照着那些办羊毛活动的来准没错,他们都是被薅过有经验的
alphaControler
103 天前
楼主,你搜搜并查集算法。有树的路径压缩

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/1060831

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX