我正在使用持久数组创建联合查找算法。以下是我可以使用的一些功能:
Array.sub : 'a array * int -> 'a
Array.update: 'a array * int * 'a -> unit
我需要建一张桌子
datatype 'a table = Array of 'a Array.array | Change of int * 'a * 'a table ref
使用 Change 构造函数和库,从一个在恒定时间内只不同一个槽的现有槽
Array.tabulate : int * (int-> 'a)-> 'a array
实现返回对大小为 n 的表的引用的函数,其中每个元素都是它自己的分区。
newTable : int -> int table ref
这是我的尝试,但任何帮助将不胜感激,因为我真的很困惑:
fun newTable n =
if 0 = Array.sub(Array.tabulate (n,fn i => i), 0)
then ()
else
ref(Change(Array.array(n)));