Questions tagged «ds.data-structures»

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

3
计算滑动窗口中位数的非平凡算法
我需要计算运行中位数: 输入: ,,向量。k (x 1,x 2,… ,x n)ñnnķkk(x1个,X2,… ,xñ)(x1,x2,…,xn)(x_1, x_2, \dotsc, x_n) 输出:向量,其中是的中位数。ÿ 我(X 我,X 我+ 1,... ,X 我+ ķ - 1)(y1个,ÿ2,… ,yn − k + 1)(y1,y2,…,yn−k+1)(y_1, y_2, \dotsc, y_{n-k+1})ÿ一世yiy_i(x一世,X我+ 1,… ,xi + k − 1)(xi,xi+1,…,xi+k−1)(x_i, x_{i+1}, \dotsc, x_{i+k-1}) (不作弊;我希望有确切的解决方案。元素是大整数。)X一世xix_i 有一个简单的算法可以维护大小为的搜索树;总运行时间为。(这里的“搜索树”是指一些有效的数据结构,支持对数时间内的插入,删除和中位数查询。)O (n log k )ķkkØ (ñ 日志k )O(nlog⁡k)O(n \log k) …

4
高级数据结构手册
我正在寻找一本关于高级数据结构的书,它超出了诸如Cormen,Leiserson,Rivest和Stein的“算法简介”之类的标准教科书的范围。 该书可用于教授高级数据结构的研究生课程,例如Erik Demaine和MIT的AndréSchulz的高级数据结构课程。一本百科全书的数据结构手册会更好。


1
可拆分堆栈
关于数据结构,它可以维护要经受以下两项操作的一系列项目,这是什么? Push(x):将x添加到序列的末尾,并返回其在序列中位置的标识符 提取(S):给定一组无序的标识符,从序列中删除这些位置中的项目,并按序列顺序返回已删除项目的列表 如果您愿意,可以将其视为堆栈或具有拆分操作的队列,该拆分操作会将其拆分为两个堆栈:extract操作可用于实现pop或dequeue操作,提取的项目序列也可以放入再次返回另一个堆栈或队列。 我已经知道:可以将序列维护为双链表,其中每个标识符只是指向链表节点的指针,并且每个节点还存储一个位置号,该位置号允许快速比较两个不相关元素的位置按顺序。随着数据结构的发展,更新位置编号并不难,因此它们都是最大值正整数,其中n是列表中的当前项目数。使用此数据结构,提取操作的唯一困难部分是按提取的项目的位置编号对它们进行分类。的提取ķ项需要ø (ķ √O (n )O(n)O(n)ñnnķkk使用整数排序汉Thorup的算法从2002年FOCS,例如预期的随机时间,以及推入操作需要一定时间。Ø (ķ 日志日志ķ-------√)O(klog⁡log⁡k)O(k\sqrt{\log\log k}) 我不知道的是:是否可以在时间内处理提取并按固定时间推送?有关于这个问题的文献吗?它像整数排序一样难吗?Ô (ķ )O(k)O(k) 动机:这是在Coffman-Graham调度算法中订购商品所需的基本步骤,该算法在图形绘制中也有应用。Coffman-Graham的困难部分是字典拓扑顺序。对于每个不同的度数,可以通过在子图中保持该度数的顶点序列来保持剩余的顶点来完成此操作。然后,从零度顶点的序列中重复删除第一个顶点并将其添加到拓扑顺序中;从先前所属的度数中提取v的邻居,并将其推入序列以获取下一个较小的度数。所以O (k )vvvvvvÔ (ķ )O(k)O(k) 在此数据结构中进行提取操作所需的时间将导致Coffman-Graham算法的线性时间实现。 自从最初提出这个问题以来,我发现了Sethi在1976年发表的一篇论文,该论文允许在线性时间内实现Coffman-Graham算法,并将其包含在我的Wikipedia文章中有关Coffman-Graham算法的文章中,因此最初的动机意义不大。我仍然很好奇答案是什么。

2
分析垃圾收集的编程语言中指定的最坏情况数据结构的运行时间时,可以忽略GC的成本吗?
我只是意识到我一直以为我的问题的答案是“是”,但我没有充分的理由。我想象也许有一个垃圾收集器,可证明只引入了最坏情况的减速。有没有我可以引用的权威参考文献?就我而言,如果这些细节很重要,那么我将使用纯功能数据结构,并使用Standard ML。O (1 )O(1)O(1) 当应用于例如Java中指定的数据结构时,也许这个问题会更加相关?使用Java的算法/数据结构教科书中可能有一些相关的讨论?(我知道Sedgewick具有Java版本,但是我只能访问C版本。)

6
压缩感测的类似物
x∈Rnx∈Rnx \in \mathbb{R}^n∥x∥0&lt;k‖x‖0&lt;k\|x\|_0 < kAxAxAx- [R Ñ ř « Ñ 甲ķAAARRRnnnR≪nR≪nR \ll nAAAkkk-稀疏xxx且RRR小至O(kno(1))O(kno(1))O(k n^{o(1)})。我可能没有最知名的参数,但这是一般的想法。 我的问题是:在其他情况下是否也有类似现象?我的意思是,根据复杂度的度量(不一定是稀疏性),输入信号可能来自某个“低复杂度族”。然后,我们需要高效且正确的压缩和解压缩算法(不一定是线性映射)。这样的结果在不同的情况下已知吗?您对压缩感测的“一般”理论有何看法? (当然,在压缩感测的应用中,线性和稀疏性是重要的问题。我在这里提出的问题更多是“哲学的”。)

1
我们可以接近线性乘法,加法和比较(整数)吗?
根据KW Regan的文章“ Connect the Stars”,他最后提到,找到整数表示以使得加,乘和比较运算可在线性时间内计算仍然是一个开放的问题: 是否存在整数表示形式,以便加法,乘法和比较都可以在线性时间内完成?基本上,是否存在线性时间离散排序的环? (1)在没有比较的情况下,我们可以接近线性时间乘法和加法吗?在这里,我假设问题的大小可能会有所不同,因此我们可能需要一个允许更改整数大小的数据结构/算法。 (2)对于完整的问题,我们可以假定我们将找到一个最佳方案,用于对整数进行乘法,加法和比较。我们可以将这三个操作中最慢的(最坏的情况)接近线性时间多近?并注意,其他操作的速度有多快? 正式问题陈述 正如EmilJeřábek所提到的,我们想排除一些琐碎的案例,并专注于最坏案例的行为。 因此,我们要求,对于非负整数和∀ ÿ其中0 ≤ X &lt; Ñ和0 ≤ ÿ &lt; Ñ,我们可以找到一个数据结构/算法可以执行加法,乘法,以及与\之间比较X和ÿ在O (n log (n ))时间和O (log 2 (n ))空间中?∀ X∀x\forall x∀ ÿ∀y\forall y0 ≤ X &lt; Ñ0≤x&lt;n0 \le x < n0 ≤ ÿ&lt; n0≤y&lt;n0 \le y < nXxxÿyyØ (ñ 日志(n ))O(nlog⁡(n))O(n …


1
我们可以多快计算一个集合族的集合包含条件?
给定一组家庭FF\mathcal{F}宇宙的子集的UUU。让S1,S2∈FS1,S2∈FS_1,S_2 \in \mathcal F,我们想答案是S1⊆S2S1⊆S2S_1 \subseteq S_2。 我正在寻找一种数据结构,可以使我快速回答这一问题。我的应用程序来自图论,我想查看删除顶点及其邻域是否会留下任何孤立的顶点,并针对每个顶点列出它留下的所有孤立的顶点。 我想创建完整的球型或最终创建|F|2|F|2|\mathcal{F}|^2表,其中存储true或false准确地告诉您哪些集合是彼此的子集。 让m=∑S∈F|S|m=∑S∈F|S|m = \sum_{S\in \mathcal{F}} |S|,u=|U|u=|U|u = |U|和n=|F|n=|F|n = |\mathcal{F}|中,假定u,n≤mu,n≤mu,n \leq m 我们可以生成n×un×un \times u在容纳基质(二分图)O(un)O(un)O(un)的时间,然后可以创建所有的表n2n2n^2在比较O(nm)O(nm)O(nm)通过对每个设定时间S∈FS∈FS \in \mathcal{F},遍历所有所有其它组的元素和标记组为不的一个子集SSS,如果他们的元件不处于SSS。总计O(nm)O(nm)O(nm)时间。 我们可以更快地做任何事情吗?特别是O((n+u)2)O((n+u)2)O((n+u)^2)时间是否可能? 我找到了一些相关文章: 一种计算子集偏序的简单亚二次算法(1995) ,给出了Ô (米2/升ø克(米))O(m2/log(m))O(m^2 / log(m))算法。 子集偏序:计算和组合略有改进,但还声称上述论文解决了ø (米d)O(md)O(md)时间的问题,其中ddd是共享公共元素的最大集合数,但我无法理解该结果。 在文章之间O (n 米)O(nm)O(nm)和Ø (ñα)O(nα)O(n^{\alpha})作者展示如何在曲线图通过使用矩阵乘法删除顶点的闭邻域后发现连接的组件。通过查找运行时间为所有单调分量,可以将其用于计算集合包含姿态O ((n + u )2.79)O((n+u)2.79)O((n+u)^{2.79})。 这个论坛的讨论也与之相关:检查集合包含的最快方法是 什么? 这意味着的下界Ø (ñ2 − ϵ)O(n2−ϵ)O(n^{2-\epsilon})。

4
数据结构同构
免责声明:我不是CS理论家。 来自抽象代数,我习惯于处理等同于同构的事物,但是我很难将这个概念转换为数据结构。我首先以为,设置理论上的双射态射影就足够了,但是我很快遇到了麻烦-它们只是编码而不能捕捉数据结构的计算本质。 有没有更严格(但更有用)的定义?(或者,如果不是,为什么?)“构造数据结构”类别的规范定义吗?

5
通过多次传递来减少st-connectivity的空间使用?
假设将具有个顶点的图表示为m个边的流,但是允许对该流进行多次遍历。Ñ 米GGGnnnmmm Monika Rauch Henzinger,Prabhakar Raghavan和Sridar Rajagopalan观察到Ω(n/k)Ω(n/k)\Omega(n/k)空间对于确定G中两个给定顶点之间是否存在路径是必要的GGG,如果允许对数据进行kkk次传递。(另请参阅技术报告版本。)但是,它们没有提供实际实现此限制的算法。我假设一种最佳算法实际上将在现实的计算模型中占用O((nlogn)/k)O((nlogn)/k)O((n\, \log\, n)/k)空间,因为如果一个人不能使用恒定大小的指针索引内存,则必须区分nnn不同的顶点。 如何使用O((n \,\ log \,n)/ k)空间确定kkk传递的图形连通性?O((nlogn)/k)O((nlogn)/k)O((n\, \log\, n)/k) 如果只允许一次通过,则输入数据可以存储为一组顶点的分区,如果在两个不同集合中的顶点之间看到一条边,则合并这些集。显然,这最多需要O(nlogn)O(nlogn)O(n\, \log\, n)空间。我的问题是关于k&gt;1k&gt;1k > 1:如何才能使用更多的通道来减少所需的空间? (为避免琐碎性,kkk是不能被常数先验限制的参数,而空间界限是涉及nnn和k的函数的表达式kkk。) 更新:即使对于k=2k=2k=2,也有一种只存储n/2n/2n/2个顶点的方法确实很有用。还是实际上对于某个常数c都存在一个更强的下界cn,而与k无关?cncncnccckkk

2
最短路径的数据结构
令为具有个顶点和边的未加权无向图。是否可以预处理并生成大小为的数据结构,以便它可以在时间O(n)内回答“与之间的距离”形式的查询?GGGnnnmmmGGGm⋅polylog(n)m⋅polylog(n)m \cdot \mathrm{polylog}(n)uuuvvv 这个问题似乎太基本了,无法解决。

2
最小点积查询的数据结构
考虑配备了标准点积和其中向量的:v_1,v_2,\ ldots,v_m。我们要构建一个数据结构,以允许以下格式的查询:给定x \ in \ mathbb {R} ^ n输出\ min_i \ langle x,v_i \ rangle。是否有可能超越平凡的O(nm)查询时间?例如,如果n = 2,则立即获得O(\ log ^ 2 m)。RnRn\mathbb{R}^n⟨⋅,⋅⟩⟨⋅,⋅⟩\langle \cdot, \cdot \ranglemmmv1,v2,…,vmv1,v2,…,vmv_1, v_2, \ldots, v_mx∈Rnx∈Rnx \in \mathbb{R}^nmini⟨x,vi⟩mini⟨x,vi⟩\min_i \langle x, v_i \rangleO(nm)O(nm)O(nm)n=2n=2n = 2O(log2m)O(log2⁡m)O(\log^2 m) 我唯一能想到的是以下内容。Johnson-Lindenstrauss引理的直接结果是,对于每个ε&gt;0ε&gt;0\varepsilon > 0和\ mathbb {R} ^ n上的\ mathcal {D}分布,都有一个线性映射f \ colon \ mathbb {R} …

2
保持增长的无向图的平衡生成树
我正在寻找方法来维护图的相对平衡的生成树,因为我向图添加了新的节点/边。 我有一个无向图,该图以单个节点“根”开始。 在每个步骤中,我都会在图上添加一个新节点和将其连接到图的边,或者仅添加一个新的边来连接两个旧节点。随着图形的增长,我会维护一棵生成树。大多数情况下,这意味着当我添加新节点和边时,会将新节点设置为它所连接的旧节点的子节点。 我无法控制新节点的添加顺序,因此上述树构建算法显然会导致生成树不平衡。 有谁知道在线启发式技术可以使生成树“相对平衡”,同时最大程度地减少重新树的工作量?我对树结构有完全控制。我无法控制的是图形连接性,或者添加新节点的顺序。 请注意,标准的Google对诸如“平衡”,“生成”和“树”之类的术语的响应似乎是二叉树和B树,两者均不适用。我的图节点可以具有任意数量的邻居,因此树节点可以具有任意数量的子代,而不是像二叉树那样的2个子代。B树通过更改其邻接表来保持平衡,而我无法更改图的连接性。

5
是否可以测试可计算数字是有理数还是整数?
是否可以通过算法测试可计算数是有理数还是整数?换句话说,将有可能为图书馆实现可计算数提供的功能isInteger还是isRational? 我猜测这是不可能的,并且这在某种程度上与以下事实有关:无法测试两个数字是否相等,但是我看不出如何证明这一点。 编辑:可计算的数字xxx由函数给出,该函数fx(ϵ)fx(ϵ)f_x(\epsilon)可以返回精度为ϵ的的有理近似值:| x − f x(ϵ )| ≤ ε,对于任何ε &gt; 0。鉴于这样的功能,就是可以测试,如果X ∈ Q或X ∈ ž?xxxϵϵ\epsilon|x−fx(ϵ)|≤ϵ|x−fx(ϵ)|≤ϵ|x - f_x(\epsilon)| \leq \epsilonϵ&gt;0ϵ&gt;0\epsilon > 0x∈Qx∈Qx \in \mathrm{Q}x∈Zx∈Zx \in \mathrm{Z}
18 computability  computing-over-reals  lambda-calculus  graph-theory  co.combinatorics  cc.complexity-theory  reference-request  graph-theory  proofs  np-complete  cc.complexity-theory  machine-learning  boolean-functions  combinatory-logic  boolean-formulas  reference-request  approximation-algorithms  optimization  cc.complexity-theory  co.combinatorics  permutations  cc.complexity-theory  cc.complexity-theory  ai.artificial-intel  p-vs-np  relativization  co.combinatorics  permutations  ds.algorithms  algebra  automata-theory  dfa  lo.logic  temporal-logic  linear-temporal-logic  circuit-complexity  lower-bounds  permanent  arithmetic-circuits  determinant  dc.parallel-comp  asymptotics  ds.algorithms  graph-theory  planar-graphs  physics  max-flow  max-flow-min-cut  fl.formal-languages  automata-theory  finite-model-theory  dfa  language-design  soft-question  machine-learning  linear-algebra  db.databases  arithmetic-circuits  ds.algorithms  machine-learning  ds.data-structures  tree  soft-question  security  project-topic  approximation-algorithms  linear-programming  primal-dual  reference-request  graph-theory  graph-algorithms  cr.crypto-security  quantum-computing  gr.group-theory  graph-theory  time-complexity  lower-bounds  matrices  sorting  asymptotics  approximation-algorithms  linear-algebra  matrices  max-cut  graph-theory  graph-algorithms  time-complexity  circuit-complexity  regular-language  graph-algorithms  approximation-algorithms  set-cover  clique  graph-theory  graph-algorithms  approximation-algorithms  clustering  partition-problem  time-complexity  turing-machines  term-rewriting-systems  cc.complexity-theory  time-complexity  nondeterminism 

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.