【发布时间】:2011-11-30 06:59:18
【问题描述】:
我要定义一个函数
invert :: [Int] -> [Int]
假设其输入是[0..(n-1)] 的排列,并返回其逆。是否可以仅使用列表和元组(不使用数组)来定义它,使其在线性时间内运行?
这主要是出于学术兴趣;在实际代码中,我可能会使用 Array 或 STArray 或类似的。
【问题讨论】:
-
你能解释一下什么是排列列表的倒置吗?
-
Tarrasch,看看这里:mathworld.wolfram.com/InversePermutation.html
-
我喜欢这个问题,但我相信在 O(n) 中不可能做到。一个简单的方法需要排序。如果 Haskell 列表支持 O(1) 索引和追加,那么它是可能的。
Data.List中的许多操作都是 O(n),因此我们在效率方面非常有限。 -
@Kenji,我认为可以使用数组。
-
dmitry,是的,当然。计数/桶排序会做到这一点。 =)
标签: list haskell permutation