五个同事决定计算他们的平均工资,在大家互相不告诉薪水的情况下,如何才能做到这一点?
发布时间:
2024-09-04 14:42
阅读量:
22
这个问题很简单……
假设五个同事分别为ABCDE,他们的工资分别为abcde
则A随便想一个数a1,他把a1告诉B
B也随便想一个数b1,把a1+b1的结果告诉C
C也随便想一个数c1,把a1+b1+c1的结果告诉D
D也随便想一个数d1,把a1+b1+c1+d1的结果告诉E
E也随便想一个数e1,把a1+b1+c1+d1+e1的结果告诉A
A把自己的工资a加上去,把自己之前加上去的a1去掉,把a+b1+c1+d1+e1的结果告诉B
B把自己的工资b加上去,把自己之前加上去的b1减掉,把a+b+c1+d+e1的结果告诉C
C把自己的工资c加上去,把自己之前加上去的c1减掉,把a+b+c+d1+e1的结果告诉D
D把自己的工资d加上去,把自己之前加的d1去掉,把a+b+c+d+e1的结果告诉E
E把自己的e1减掉,加上自己的工资e,除以5,得到最终平均数。
这个做法的好处在于:
- 显然,全程中每个人都没有机会知道任何一个人的具体工资到底是多少。
- 哪怕数据传输的过程中被其他人截获,也没有机会用自己手中的随机数和工资反推其他人工资(而其他答案中,比如第一个人随便想一个数,然后加上自己工资传给第二个人,然后每个人加上自己工资往下传,那么极端情况下,第一个人是有机会截获其他所有人传递的中间数据,根据自己手中的起始数推出所有其他人工资的)。这个算法唯一的破绽在于,只有所有人一起联手,交出自己手中的随机数,才能把所有人的工资推出来。
- 这个算法对任意大于2人的方式都成立。扩展性很好。
- 数据传输次数为2n-1(n表示人数),已经足够简略了。再少就不能保证安全了。
END