OCaml 中的恒定时间列表串联
Constant-time list concatenation in OCaml
是否可以在OCaml中实现常量时间列表连接?
我设想了一种方法,我们直接处理内存并通过将第一个列表的末尾指向第二个列表的开头来连接列表。本质上,我们正在创建某种类型的链表,如对象。
对于普通的列表类型,不,你不能。您给出的算法正是实现的算法...但是您仍然必须实际找到第一个列表的末尾...
有多种方法可以实现常量时间串联(参见 Okazaki for fancy details). I will just give you names of ocaml libraries that implement it: BatSeq, BatLazyList (both in batteries), sequence, gen, Core.Sequence。
很确定某处也有差异列表实现。
列表已经是(单)链表。但是列表节点是不可变的。所以你改变任何节点的指针指向任何不同的东西。因此,为了连接两个列表,您必须复制第一个列表中的所有节点。
是否可以在OCaml中实现常量时间列表连接?
我设想了一种方法,我们直接处理内存并通过将第一个列表的末尾指向第二个列表的开头来连接列表。本质上,我们正在创建某种类型的链表,如对象。
对于普通的列表类型,不,你不能。您给出的算法正是实现的算法...但是您仍然必须实际找到第一个列表的末尾...
有多种方法可以实现常量时间串联(参见 Okazaki for fancy details). I will just give you names of ocaml libraries that implement it: BatSeq, BatLazyList (both in batteries), sequence, gen, Core.Sequence。 很确定某处也有差异列表实现。
列表已经是(单)链表。但是列表节点是不可变的。所以你改变任何节点的指针指向任何不同的东西。因此,为了连接两个列表,您必须复制第一个列表中的所有节点。