假设我有一个项目列表:
[ A, B, C, D ]
并且还有一个“流行列表”:
[ 2, 0, 1, 0 ]
假设有一个函数 f(x, p) = y
,可以将索引 p
从列表 x
中弹出并放入新列表 y
中。
运用这个过程,您可以计算
f([ A, B, C, D ], [ 2, 0, 1, 0 ]) = [ C, A, D, B ]
然而,
f
的成本不切实际,因为它反复从列表中弹出并连接剩余元素。
有一个算法 g
,将弹出的列表转换为索引列表是非常理想的,这样可以:
g(p) = [ 2, 0, 3, 1]
这将使得新列表能够高效地构建。
是否有一种有效的算法,例如 O(N),可以用于实现 g
?
f
。 - eatcrayonsf
一样。也许你只是想将x
放入一个顺序统计树中,以使f
更快。 - Matt Timmermansf
。我很惊讶它变得多么棘手。 - eatcrayons