我想写一个算法来找到连续的奖励点。
邀请者每确认一次邀请就得到(1/2)^k分,其中k是邀请的级别:0级
(直接邀请的人)得1分,级别1(由原始客户邀请的人邀请的人)
得1/2分,2级邀请(1级有人邀请的人)得1/4分,以此类推。
只有第一个邀请才算数:发送给同一个人的多个邀请不会产生任何进一步的点数,
即使他们来自不同的邀请者,而且只有第一次邀请才有价值。
例如:
输入:

A recommends B
B accepts
B recommends C
C accepts
C recommends D
B recommends D
D accepts

将计算为:
A从B的推荐中得1分,B从C的推荐中得0.5分,以及
C.A推荐D再得0.25分,得1.75分。
B从C的建议中得到1分,C从D的建议中得到0.5分。B从D的建议中没有得到任何分,因为D以前是C邀请的。B的总分是1.5分。
C从D的推荐中得到1分,C的总分为1分。
输出:
{ “A”: 1.75, “B”: 1.5, “C”: 1 }
算法应该是什么我认为这里必须使用动态程序。

最佳答案

这只不过是祖先在树上搜索通过跟踪深度,你知道该奖励多少分。
伪码

def add_points(accepter):
    depth = 0
    while accepter has an inviter:
        accepter.inviter.points += (0.5)^depth
        accepter = accepter.inviter
        depth += 1

这个算法是O(父母的数量),因为你需要遍历所有的父母来更新,你知道你不能做任何更好的复杂明智。

07-26 09:34
查看更多