Julia中推荐的数据结构,用于高效追加

时间:2014-01-10 19:34:40

标签: julia

Julia中理想的类似列表的数据结构是什么?

我想要一个带有常量时间追加操作的可索引,可增长的集合。

标准数据结构似乎是Array push!操作。这是不变的时间吗?

3 个答案:

答案 0 :(得分:9)

正如哈伦所说,push!是固定时间的摊还。有关参数的原因,请参阅C ++类似数据结构的描述:Amortized analysis of std::vector insertion

如果您想要一个合法的常量时间数据结构,您可能希望实现一个链表。我已经看过很多样本实现,但没有任何可以用于生产的内容。

答案 1 :(得分:4)

反复调用push!不是恒定时间,但速度非常快。它偶尔会对缓冲区进行指数式重新分配。请参阅C源代码以附加到数组:https://github.com/JuliaLang/julia/blob/master/src/array.c#L564

答案 2 :(得分:0)

差异列表使您可以在固定时间内追加,前置和连接。我昨天here推送了一个实现。确实只有几行代码,但是我增加了对迭代和显示的支持,使它变得更奇特。

您可以使用dl函数创建差异列表,如下所示:dl(1, 2, 3)或为可以使用todl(items)进行迭代的任何内容创建差异列表。

您可以使用concat函数连续地连接任意数量的差异列表,如下所示:concat(dl(1, 2), dl(3, 4))

您可以使用pushfirstpush以恒定的时间添加到起点和终点。

差异列表可以迭代,因此您可以在for循环和splat中使用它们,并轻松地将它们转换为数组。

我正在等待它以Julia程序包的形式发布,但是您可以直接使用the DifferenceLists.jl file