Haskell:仅使用列表在线性时间内反转置换

Pra*_*eek 8 haskell list permutation

我想定义一个函数

invert :: [Int] -> [Int]
Run Code Online (Sandbox Code Playgroud)

假设其输入是一个排列[0..(n-1)],并返回其反转.可以使用列表和元组(没有数组)来定义它,以便它以线性时间运行吗?

这主要是出于学术兴趣; 在实际的代码我可能会使用ArraySTArray或相似.

ДМИ*_*КОВ 2

不确定线性时间,只是一个初学者的笔记。

\n\n
\xce\xbb> (\\x -> map snd $ sort $ zip x [1..(length x)]) [3,8,5,10,9,4,6,1,7,2]\n[8,10,1,6,3,7,9,2,5,4]\n
Run Code Online (Sandbox Code Playgroud)\n

  • 顺便说一句,您可以省略“长度x”,只需用“[1..]”进行压缩即可。 (7认同)