Julia中理想的类似列表的数据结构是什么?
我想要一个具有常量时间追加操作的可索引,可增长的集合。
标准数据结构似乎是 Array
随着 push!
操作。这是不变的时间吗?
Julia中理想的类似列表的数据结构是什么?
我想要一个具有常量时间追加操作的可索引,可增长的集合。
标准数据结构似乎是 Array
随着 push!
操作。这是不变的时间吗?
正如哈兰所说, push!
是摊销的常数时间。有关参数的原因,请参阅C ++类似数据结构的描述: std :: vector插入的摊销分析
如果您想要一个合法的恒定时间数据结构,您可能希望实现一个链表。我已经看过很多样本实现,但没有任何可用于生产的东西。
正如哈兰所说, push!
是摊销的常数时间。有关参数的原因,请参阅C ++类似数据结构的描述: std :: vector插入的摊销分析
如果您想要一个合法的恒定时间数据结构,您可能希望实现一个链表。我已经看过很多样本实现,但没有任何可用于生产的东西。
反复呼唤 push!
不是恒定的时间,但它很快。它偶尔会对缓冲区进行指数式重新分配。请参阅附加到数组的C源: https://github.com/JuliaLang/julia/blob/master/src/array.c#L564
差异列表允许您在恒定时间内追加,前置和连接。我昨天推了一个实施 这里。它实际上只是几行代码,但我通过添加对迭代和显示的支持使其变得更加漂亮。
您可以使用。创建差异列表 dl
功能,像这样: dl(1, 2, 3)
或者为您可以迭代的任何内容制作差异列表 todl(items)
。
您可以使用常量时间连接任意数量的差异列表 concat
功能,像这样: concat(dl(1, 2), dl(3, 4))
。
您可以使用 pushfirst
和 push
在恒定时间内添加到开始和结束。
差异列表可以迭代,因此您可以在for循环和splats中使用它们,并轻松将它们转换为数组。
我正在等待它作为Julia包发布,但你可以使用 DifferenceLists.jl文件 直。