前N个和前N个之间的差异允许重复:
input: 1, 9, 7, 9, 5, 10, 7
top 3: 10, 9, 9
top 3 allow duplicates: 10, 9, 9, 7, 7
前N个分布式算法很直观。所有机器都运行前N个算法,一个机器将所有结果同时获取并运行前N个算法。
machine A: 1,9,
machine B: 9, 5,10, 7, 7
step 1: each machine runs top 3
machine A: 9, 1
machine B: 10, 9, 7
step 2: machine C get all results and runs top N
input to machine C: 9, 1, 10, 9, 7
run top 3 again: 10, 9, 9
每台机器上运行的前N个算法可以使用堆来实现,时间复杂度为O(MlogN)(M =输入行数)
前N名允许重复的人可以应用类似的分发算法,但是我不知道如何证明这一点。我想不出一个反例。
machine A: 1,9
machine B: 9, 5,10, 7, 7
step 1: each machine runs top 3 allow duplicates
machine A: 9, 1
machine B: 10, 9, 7, 7
step 2: machine C get all results and runs top N allow duplicates
input to machine C: 9, 1, 10, 9, 7, 7
run top 3 again: 10, 9, 9,7,7
前N个允许每台机器上重复运行的操作可以使用堆+映射(以进行重复操作)实现,并且时间复杂度也将为O(MlogN)(M =输入行数)
如何证明这是正确的?还是有什么反例来证明其不正确?