Questions tagged «ds.data-structures»

数据结构的属性和应用程序,例如空间下限或对象插入和删除的时间复杂性。

1
执行分区树?
有没有实施过分区树? 在这里,我正在谈论计算几何学中的分区树。最早(接近最佳)的版本是由于Matousek和其他人,以及最近的Timothy Chan: https://cs.uwaterloo.ca/~tmchan/optpt_2_10.pdf 对我来说,这些方法从未实现过,这听起来很疯狂,但是谷歌搜索没有发现任何人曾报告过的实现方法。

4
两个单词之间的最短编辑次数
我正在寻找一种数据结构和一种算法来计算将一个单词转换为另一个单词所需的最小更改数量,假设两个单词作为输入,其中唯一允许的更改是 在其中一个末端添加一个字母(例如AB-> ABC), 复制并连接整个单词(例如,ABC-> ABCABC), 切成两个词(重复动作的对偶,ABCABC-> ABC + ABC), 删除字母之一(例如,ABC-> AC),然后 重复字母之一(例如,ABC-> ABBC)。 例如,从ABC到BCBC的最小移动顺序是ABC-> BC(删除A)-> BCBC(重复)。 我没有计算机科学背景。也许这是一个众所周知的问题,但是我的Google搜索没有给我任何帮助。 您知道一些相关的,定义明确的问题吗? 编辑:正如安东尼·拉巴雷(Anthony Labarre)的答案所建议的那样,我阅读了一些有关摆球置换/排列问题的论文,该问题与上述问题相似。有人知道这个问题吗?这相关吗?

3
在o(n log n)中找到点的最短成对距离?
以下练习已分发给我指导的学生: 给定平面中的nnn个点,请设计一种算法,该算法可找到一对对所有点之间的距离最小的点。该算法应在时间o(n2)o(n2)o(n^2)。 有一个(相对)简单的分而治之算法,可以解决时间的任务Θ(nlogn)Θ(nlog⁡n)\Theta(n \log n)。 问题1:是否有一种算法可以在最坏的情况下准确地解决给定的问题o(nlogn)o(nlog⁡n)\mathcal{o}(n \log n)? 我怀疑这是有可能的是我记得在一些谈话中看到的结果(赞赏参考)。它指出沿着不超过恒定数目的线的东西c∈Nc∈Nc \in \mathbb{N}点可被布置在周围的一些点处的平面ppp半径的圆内r∈Rr∈Rr \in \mathbb{R}用rrr所涉及的点的任何两个之间的最小距离。我认为c=7c=7c=7,这些点形成一个等边六边形,中心为ppp(在极端情况下)。 在这种情况下,以下算法应在nnn步之内解决它们的问题。 fun mindist [] | p::[] = INFINITY | mindist p1::p1::[] = dist(P[0], P[1]) | mindist p::r = let m = mindist(r) in min(m, nextNeighbour(p, r, m)) end 注意,这是(声称是)在线性时间内,因为在点只有一个恒定数量r可以是不大于较远远离m从p(假设上面的语句); 只需调查这些点即可找到新的最小值。当然有一个陷阱。如何实现nextNeighbour(也许在线性时间内进行预处理)? 问题2:让一组点的和点p ∉ [R 。让米∈ [R与RRRp∉Rp∉Rp \notin Rm∈Rm∈Rm …

1
某些类型查询的最佳预处理
假设我们有一个半群,其元素S = { s 1,s 2,… ,s n }。我们的目标是计算产品的小号我 ∘ 小号我+ 1 ∘ ⋯ ∘ 小号Ĵ。(S,∘ )(S,∘)(S,\circ)小号= { s1个,秒2,… ,sñ}S={s1,s2,…,sn}S=\lbrace s_1,s_2,\dots,s_n\rbraces一世∘ 小号我+ 1〇⋯ 〇小号Ĵsi∘si+1∘⋯∘sjs_i\circ s_{i+1}\circ \cdots\circ s_j Alon和Schieber在他们的论文“用于回答在线产品查询的最佳预处理”中证明,仅使用线性量,我们最多可以以步(其中α是逆阿克曼函数)回答每个这样的查询。预处理。O (α (n ))O(α(n))O(\alpha(n))αα\alpha 如果期望,每个查询可以在回答Ö (日志(Ĵ - 我))的步骤,可以在一个仍然只要这样做线性预处理?s一世∘ 小号我+ 1〇⋯ 〇小号Ĵsi∘si+1∘⋯∘sjs_i\circ s_{i+1}\circ \cdots\circ s_jO (对数(j − i ))O(log⁡(j−i))O(\log(j-i)) (这个问题的灵感来自这个最近布伦丹·麦凯在Mathoverflow问题。)

2
设置数据结构以有效地重复插入
我正在寻找一种节省空间的数据结构,该结构可保存wordize元素的集合(无重复)并支持快速插入(摊销O(1))。理想情况下,“节省空间”是指存储n个元素的n+o(n)n+o(n)n + o(n)单词。nnn 作为一组是问题的一个重要组成部分:如果每个元素添加lognlog⁡n\log n次使用不能成为空间nlognnlog⁡nn\log n。 该结构还应支持列出其要素(合理有效);任何理智的结构在这里都应该没有问题。(快速的成员资格查询是一个加号。)

2
数据结构允许基于标签的高效查找
我正在寻找一种类似于以下内容的高效数据结构来存储数据。 ID标签Order1 Order2 -------------------------- 1 1,2 1 1 2 2,5 2 3 3 1,7 4 7 4 6 3 0 我需要能够以这样的方式来查询这个结构,它会给我含标签表达式中的所有ID的列表-支持AND和OR和NOT操作。例如。(((1或2)而不是7) 我还需要能够指定结果的顺序(Order1或Order2),并且能够指定带有可选偏移量的最大返回行数。获取前30-100个结果的性能至关重要。 最后,我需要一种便宜的方法来查找“标签关系”,例如,我想知道哪些标签与标签(1或2)“相关”以及以什么频率“关联”。表示哪些标签与1 OR 2 ...出现在同一集合中,并按频率排序。 关于哪种数据结构(或结构集)对于此类工作会非常有效的任何想法? (我想以此为概念证明来重新设计SE系列网站的标记页面)

1
高度平衡的确定性跳过列表
在Cache-Oblivious B-Trees的 2.2节中,强权重搜索树定义为: 对于某个常数,高度为h的每个节点v都有Θ (d h)个后代。dddvvvHhhΘ (dH)Θ(dh)\Theta(d^h) 他们声称: 满足属性1和2的搜索树包括权重平衡的B树,确定性跳过列表和预期意义上的跳过列表。 其他论文也声称,确定性跳过列表具有很强的权重平衡,包括并发高速缓存不敏感B树和高速缓存不敏感流B树。 我不知道为什么确定性跳过列表具有此属性。关于确定性跳过列表的原始论文指出: 从图1可以看出,在1-2个跳过列表和2-3个树之间存在一一对应的关系。 然而,在我看来,2-3棵树的重量平衡不强,因为高度为的节点可以有2 h至3 h的后代。Hhh2H2h2^h3H3h3^h

2
有什么快速算法可以解决最小成本的反馈弧集问题?
在有向图中,,如果是DAG(有向无环图),则称为反馈弧集。 ˚F ⊂ Ë ģ ∖ ˚F ˚FG = (V,E)G=(V,E)G=(V,E)F⊂ èF⊂EF\subset E摹∖ ˚FG∖FG\setminus FFFF 如果每个边缘与一个权重相关联,最小成本反馈弧集问题是要找到一个使得为最小。F W (F )wwwFFFw ^(F)W(F)W(F) 众所周知,最小反馈弧集问题是最小的,NP最小成本反馈弧集问题也是如此。我想知道是否有人知道表现良好的近似算法,以及权重函数的任何特性都可以产生快速求解器。

2
半空间范围计数的权衡界限
当前对在一组维点上执行半空间范围计数查询的最佳界限是什么,以时间/空间折衷的形式表示。根据Matousek的开创性1993纸(定理6.2,范围搜索与高效层次插条),我们可以这样做对于那些的交点查询范围计数p半空间,为1个≤ p ≤ d + 1,使用大小的数据结构Ô (米),用于ñ ≤ 米≤ ñ d,在ö (ñdddppp1≤p≤d+11≤p≤d+11 \le p \le d+1O(m)O(m)O(m)n≤m≤ndn≤m≤ndn \le m \le n^d时间。对于p=1,这是O(n/m1/d)时间。但是,Agarwal进行的范围搜索调查(表36.3.2)声称边界为O(nO(nm1/dlogp−(d−p+1)/d(mn))O(nm1/dlogp−(d−p+1)/d⁡(mn))O\left(\frac{n}{m^{1/d}}\log^{p-(d-p+1)/d} \left(\frac{m}{n}\right)\right)p=1p=1p=1O(n/m1/d)O(n/m1/d)O(n/m^{1/d})。界限的正确陈述是什么?或者,我误会什么?最后,当m=nd时,是否存在任何隐藏的对数项?O(nm1/dlog(mn))O(nm1/dlog⁡(mn))O\left(\frac{n}{m^{1/d}}\log(\frac{m}{n})\right)m=ndm=ndm=n^d

1
动态设置的指纹
是否存在每个操作的O(1)时间的w位word-RAM数据结构,用于以下问题?:维护一组支持该操作的w位非负整数。 add(x):将x添加到集合中 remove(x):从集合中移除x Fingerprint():返回集合的指纹。该w位指纹具有以下特性:两个相同的集合具有相同的指纹,而两个不同的集合可能具有不同的指纹 所有操作应在恒定时间内运行。 拉宾-卡普指纹方案,其中,其中p是一个随机w比特素几乎起作用。问题在于更新时间,因为计算2 x mod p花费的时间比固定时间长。使用重复平方,可以在O(log w)时间内完成。我能找到的最快的模块化幂运算算法做了(log w)/(loglog w)算术运算。f(S)=(∑x∈S2x)modpf(S)=(∑x∈S2x)modpf(S) = \left(\sum_{x\in S} 2^x\right) \bmod p2xmodp2xmodp2^x \bmod p

6
树集的数据结构。
尝试可以有效存储元素列表。前缀是共享的,因此节省了空间。 我正在寻找一种有效存储树的类似方法。我希望能够检查成员资格并添加元素,知道给定树是否为某些存储树的子树,或者是否存在存储树为给定树的子树也是可取的。 我通常会存储大约500棵高度小于50的不平衡二叉树。 编辑 我的应用程序是使用某种记忆的某种模型检查器。想象一下,我有一个状态和以下公式:和其中是一个复杂的子公式,并想象我首先想知道是否在成立。我检查成立,经过冗长的过程后,我确定是这种情况。现在,我想知道是否在成立。我想记住成立的事实,并注意到这样我几乎可以立即得出中。˚F = φ 克= (φ ∨ ψ )φ ˚F 小号φ 克小号˚F 克⇒ ˚F 克小号sssF= ϕf=ϕf = \phiG= (φ ∨ ψ )g=(ϕ∨ψ)g = (\phi \vee \psi)ϕϕ\phiFffsssϕϕ\phiGggsssFffG⇒ ˚Fg⇒fg \Rightarrow fGggsss 相反,如果我已经证明不能满足,那么我想告诉我们不能立即满足。吨˚F 吨GggŤttFffŤtt 我们可以在公式上建立偏序,并具有 iff。对于每个状态,我们存储两组公式;存储保存的最大公式,存储不保存的最小公式。现在给定状态和公式,我可以看到,或者在这种情况下我是完成后,我直接知道是否在成立。克⇒ ˚F 小号大号(小号)升(小号)小号克∃ ˚F ∈ 大号(小号),˚F ⇒ 克∃ ˚F ∈ 升(小号),克⇒ ˚F 克小号G≥ ˚Fg≥fg \geq …

4
执行成本 跳过四叉树中的最近邻居搜索
注意:在我的回答中已经重提了这个问题:假设现在我们可以找到O (1 )O(1)O(1)时间中最低的同级祖先,那么可以在真正执行ANN O (对数n )O(log⁡n)O(\log n)吗? 四叉树是有效的空间索引。我对[2]中所述的压缩四叉树结构中最近邻居搜索的实现感到困惑。(不赘述,搜索将沿着所谓的等距正方形自上而下进行,以等距路径的尾节点结束。在所附的图像中,该搜索可能是东南部充满点的任何节点。) 为使算法有效,必须为每个节点(一个至少包含两个非空象限的正方形)维护一个指针,该指针指向四个方向(北,西,南)中每个最低(祖先最靠近)的祖先节点, 东)。这些由节点向西的祖先的绿色箭头指示(箭头指向祖先广场的中心)。 本文声称这些指针可以在点插入和删除期间在O(1)中更新。但是,当查看绿点的插入时,似乎我需要更新任意数量的指针,在这种情况下,其中六个。 我希望有一个技巧可以在恒定时间内更新此指针。也许存在一种可以利用的间接形式? 编辑: 本文的相关部分为6.3,其中的内容为:“如果路径具有弯曲,则除了的最低祖先,我们还应该考虑方向中的每个最低祖先的该伴随朝向该方向[...]查找从这些正方形可在完成每平方的时间,如果我们关联附加指针在每个正方形指向其最接近的祖先为每个方向在插入或删除点的过程中,也可以在时间内更新这些指针。”升Ò 克(c / ε)log(c/ε)log(c/ε)2 d q q O (1 )2 d Q 0 O (1 )qqq2d2d2^dqqqqqqO (1 )O(1)O(1)2d2d2^d问0Q0Q_0O (1 )O(1)O(1) [2]:Eppstein,D.和Goodrich,MT和Sun,JZ,“跳过四叉树:多维数据的简单动态数据结构”,在“计算几何学”第二十一届年度研讨会论文集中,第296-305页。 ,2005年。

2
限制无锁集合吗?
大卫·罗德里格斯(DavidRodríguez)-dribeas 在StackOverflow的评论中写道:“并非没有锁就可以实现所有集合”。我不确定这是否是正确的,而且我也找不到任何证据。 该语句不是很精确,但是让我尝试以一种更为正式的方式来重新表述:对于每种集合类型C,都有一个无锁集合类型CLF,它提供相同的操作集,并且在CLF上的每个操作都在哪里与上的相应操作具有相同的big-O复杂度C。 顺便说一句,我不希望有一个转变。

2
如何选择功能字典数据结构?
我已经阅读了一些有关以下数据结构的信息: Bagwell的理想哈希尝试 Larson的动态哈希表 红黑树 帕特里夏树 ...我敢肯定还有很多其他人。对于每个人都更适合的方式,或者为什么我会选择一个而不是另一个,我很少见。因此,以下是这些方面的一些问题: 重要的是要了解哪些功能词典数据结构? 这些方法的优缺点是什么? 什么时候使用更命令性的数据结构有意义? 数字2和3是最重要的数字。:-)

2
快速编码平衡向量
很容易看出,对于任何,存在从{0,1}到{0,1}的1-1映射,使得对于任何,向量是“平衡的”,即它具有相等的1和0。是否可以定义这样的以便在给定我们可以 有效地计算?F n n + O (log n ) x F (x )F x F (x )nnnFFFnn^nn+O(logn)n+O(log⁡n)^{n+O(\log n)}xxxF(x)F(x)F(x)FFFxxxF(x)F(x)F(x) 谢谢。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.