ATS中是否有用于随机置换列表的库函数?

时间:2016-12-30 04:00:11

标签: ats

给定一个线性列表,ATS中是否有一个库函数随机地对列表进行洗牌以产生它的排列:

fun{a:t@ype}
list_vt_permute{n:int}(xs: list_vt(a, n)): list_vt(a, n)

如果可能的话,我希望list_vt_permute的实现不会调用malloc / free。

1 个答案:

答案 0 :(得分:0)

是的,在prelude / list_vt.sats中声明了这样一个函数,该函数基于prelude / array.sats中声明的函数array_permute

请注意,list_vt_permute调用list_vt_permute$randint来生成随机数,它实际上实现了Fisher-Yates算法来执行随机混洗。函数list_vt_permute是O(n)-time,它需要为临时使用分配内存。

对于不需要malloc / free的list_vt_permute版本,它可以像mergesort一样实现,需要O(n * log(n)) - 完成时间。