Algorithm 平衡绳索的连接复杂性是什么?

Algorithm 平衡绳索的连接复杂性是什么?,algorithm,string,data-structures,stl,ropes,Algorithm,String,Data Structures,Stl,Ropes,我看过不同的文件,以下是我收集的信息: 对于长绳,既不能保证O(1)时间连接,对于短绳,也不能保证~logN深度 不同的来源相互矛盾。权利要求O(1)串联。表示仅当一个操作数较小时,串联才为O(1),否则为O(logn) 那么,连接的时间复杂度是多少?在保持树平衡的同时,何时执行重新平衡以确保这种连接复杂性?在谈论这种复杂性时,是否假设了一些特定的使用模式?维基百科的文章不清楚,它没有引用任何地方的文章声称这是一种复杂性的结果 另一方面,这篇最新的论文(由Gerth Stølt Brodal

我看过不同的文件,以下是我收集的信息:

  • 对于长绳,既不能保证O(1)时间连接,对于短绳,也不能保证~logN深度
  • 不同的来源相互矛盾。权利要求O(1)串联。表示仅当一个操作数较小时,串联才为O(1),否则为O(logn)

那么,连接的时间复杂度是多少?在保持树平衡的同时,何时执行重新平衡以确保这种连接复杂性?在谈论这种复杂性时,是否假设了一些特定的使用模式?

维基百科的文章不清楚,它没有引用任何地方的文章声称这是一种复杂性的结果

另一方面,这篇最新的论文(由Gerth Stølt Brodal、Christos Makris和Kostas Tsichlas撰写)确实:。他们也有O(logn)搜索,所以你确实可以把它标记为“平衡”,虽然我没有阅读细节,只是结果


“绳索”是一个在实践中(相对而言)很常见的术语,但在研究中并不常见。相反,我搜索了可分类队列(或列表),特别是Tarjan、Okasaki、Kaplan和其他人所做的研究,我认为这就是你真正的答案。

谢谢你的文章,不幸的是,它不能用于实现rope,因为它不支持有效的拆分操作(文章的最后一段)因此,我们无法有效地检索子字符串。如果你能找到解决方案,它将是可发布的:)这篇关于ropes的文章很难理解,显然作者对big-oh表示法有异议,但这样的表示法将使他们所追求的非常精确。在再平衡问题上,它们是模糊的。“我们很少进行再平衡”。好啊听起来不错,我想……所有操作都是
log(N)
时间复杂度。Rope本质上是一个由隐式键组成的二叉搜索树,这些键本质上是指子树的大小。这允许强大的操作,如concat/split。其中一种可能的实现是使用Treap数据结构,该结构专门用于使用隐式键,并且很有可能将树的高度保持在
4*log(n)
范围内,即
O(log n)
。我用Treap做了一些简单的实现:。@Yerken:谢谢,因为我问了这个问题,所以我自己实现了ropes——保证了确定性
logn
复杂性。看来,
O(1)
串联是一些人散布的一种误解,在
O(logn)
中进行串联是微不足道的。我已经浏览了您的代码,但它似乎不适合rope实现:如果您使用父指针,那么在进行本地更改时必须克隆整个树(在
O(N)
time中)。绳子的意义在于它们可以避免这种情况。对不起,我不太明白,克隆整棵树是什么意思?所有的局部更改都是通过合并和拆分来完成的,而合并和拆分只沿着切割线(指针被取消引用的地方)进行,切割线的高度为tree@Yerken:连接函数在哪里?我找不到它。它应该在O(logn)时间内以非破坏性方式工作。我没有单独放置它,但是您可以看到在
过程中如何进行连接。