【发布时间】:2013-02-12 06:47:47
【问题描述】:
在 O(n) 中洗牌 array 并不难,通过就地交换,
如何在 OCaml 中为 list 使用 O(n)?
要求:
无数组或就地使用
将此视为面试问题
【问题讨论】:
-
廉价技巧:将列表复制到数组、随机播放、复制回......应该是 O(n)。
-
@phimuemue 不,当然没有数组或位置,将其视为面试问题
-
是否有要求,例如列表的所有可能排列必须具有相同的可能性?
-
如果没有突变,我认为没有比
O(n log n)做得更好的了。 -
@phimuemue 当然,这意味着“纯”随机洗牌
标签: functional-programming ocaml