Questions tagged «search-algorithms»

用于在某些指定的数据结构(最常见的是在树中)中查找元素的算法。

2
仅使用O(k)内存O(n)时间从给定序列中找到第k个最小元素
假设我们逐个读取数字的序列。如何仅使用单元存储器并在线性时间()中找到第个最小元素。我认为我们应该保存序列的前项,并在获得第个项时删除一个确定不能为第个最小元素的项,然后保存第个项。因此,我们应该有一个指标,在每个步骤中显示此不可用的术语,并且该指标应在每个步骤中快速更新。我从“ max”开始;但它无法快速更新;意味着如果我们考虑最大ķnnnkkkO (n )k k + 1 k k + 1O(k)O(k)O(k)O(n)O(n)O(n)kkkk+1k+1k+1kkkk+1k+1k+1然后在第一次删除中,我们错过了最大值,我们应该在搜索最大值,其原因时间不是线性的。也许我们应该更智能地保存前项。O(k)O(k)O(k)k(n−k)×O(k)(n−k)×O(k)(n-k)\times O(k)kkk 我该如何解决这个问题?

1
使用处理器在时间中找到最大值的并行算法
我们在课堂上介绍了一种算法,该算法可在台计算机上以时间复杂度并行查找数组中的最大值。n 2O (1 )O(1)O(1)ñ2n2n^2 该算法是: 给定长度为n的数组A: 制作一个长度为n的标志数组B,并在台计算机上将其初始化为零。ñnn 比较每2个元素,并使用台计算机以最小值的索引在B中写入1 。ñ2n2n^2 在台计算机的A中找到带有0的索引。ñnn 讲师嘲笑我们可以使用计算机和时间复杂度来完成。登录nñ日志ñnlog⁡n\frac{n}{\log n}日志ñlog⁡n\log n 经过一番思考,我不知道该怎么做。任何的想法?

1
有指导的工会发现
考虑一个有向图在该图上可以动态添加边并进行一些特定的查询。GGG 示例:不相交的森林 考虑以下查询集: arrow(u, v) equiv(u, v) find(u) 第一个向图形添加箭头,第二个确定,最后一个找到等价类的规范表示,即使得表示。ü ↔ * v ↔ * - [R (Û )Ü ↔ * v [R (v )= - [R (Û )u→vu→vu→vu↔∗vu↔∗vu↔^*v↔∗↔∗↔^*r(u)r(u)r(u)u↔∗vu↔∗vu↔^*vr(v)=r(u)r(v)=r(u)r(v)=r(u) 有一种众所周知的算法,它使用不相交集森林数据结构以准恒定的摊销复杂度实现这些查询,即O(α(n))O(α(n))O(α(n))。请注意,在这种情况下,equiv是使用实现的find。 更复杂的变体 现在,我对一个方向很重要的更复杂的问题感兴趣: arrow(u, v) confl(u, v) find(u) 第一个添加箭头,秒确定是否存在从和均可到达的节点,即。最后一个应该返回对象,使得暗示其中应该易于计算。(例如,为了进行计算)。目的是找到一个好的数据结构,使这些操作快速进行。u→vu→vu→vwwwuuuvvvu→∗←∗vu→∗←∗vu→^*←^*vr(u)r(u)r(u)u→∗←∗vu→∗←∗vu→^*←^*vr(u)∙r(v)r(u)∙r(v)r(u) \bullet r(v)∙∙\bulletconfl 周期数 该图可以包含周期。 我不知道是否有一种方法可以有效地和增量地计算强连接的组件,以便仅针对主要问题考虑DAG。 当然,我也希望为DAG提供解决方案。这将对应于最小公共祖先的增量计算。 天真的方法 不相交的森林数据结构在这里没有帮助,因为它忽略了边的方向。请注意,在图形不汇合的情况下,不能是单个节点。r(u)r(u)r(u) 可以定义并在时将定义为。但是如何逐步计算呢?r(u)={v∣u→∗v}r(u)={v∣u→∗v}r(u)=\{v ∣ u→^*v\}∙∙\bulletS1∙S2S1∙S2S_1\bullet S_2S1∩S2≠∅S1∩S2≠∅S_1 ∩ …

1
推断优化类型
在工作中,我的任务是推断一些有关动态语言的类型信息。我将语句序列重写为嵌套let表达式,如下所示: return x; Z => x var x; Z => let x = undefined in Z x = y; Z => let x = y in Z if x then T else F; Z => if x then { T; Z } else { F; Z } 由于我从一般类型信息开始,并试图推断出更具体的类型,因此自然的选择是精简类型。例如,条件运算符返回其真假分支类型的并集。在简单的情况下,它效果很好。 但是,在尝试推断以下类型时遇到了障碍: function …
11 programming-languages  logic  type-theory  type-inference  machine-learning  data-mining  clustering  order-theory  reference-request  information-theory  entropy  algorithms  algorithm-analysis  space-complexity  lower-bounds  formal-languages  computability  formal-grammars  context-free  parsing  complexity-theory  time-complexity  terminology  turing-machines  nondeterminism  programming-languages  semantics  operational-semantics  complexity-theory  time-complexity  complexity-theory  reference-request  turing-machines  machine-models  simulation  graphs  probability-theory  data-structures  terminology  distributed-systems  hash-tables  history  terminology  programming-languages  meta-programming  terminology  formal-grammars  compilers  algorithms  search-algorithms  formal-languages  regular-languages  complexity-theory  satisfiability  sat-solvers  factoring  algorithms  randomized-algorithms  streaming-algorithm  in-place  algorithms  numerical-analysis  regular-languages  automata  finite-automata  regular-expressions  algorithms  data-structures  efficiency  coding-theory  algorithms  graph-theory  reference-request  education  books  formal-languages  context-free  proof-techniques  algorithms  graph-theory  greedy-algorithms  matroids  complexity-theory  graph-theory  np-complete  intuition  complexity-theory  np-complete  traveling-salesman  algorithms  graphs  probabilistic-algorithms  weighted-graphs  data-structures  time-complexity  priority-queues  computability  turing-machines  automata  pushdown-automata  algorithms  graphs  binary-trees  algorithms  algorithm-analysis  spanning-trees  terminology  asymptotics  landau-notation  algorithms  graph-theory  network-flow  terminology  computability  undecidability  rice-theorem  algorithms  data-structures  computational-geometry 

2
确定时间和空间中的特定数字(最坏的情况)
\newcommand\ldotd{\mathinner{..}}假定A[1..n]A[1..n]A[1\ldotd n]是整数,则对于所有1 \ le k \ le n均为0 \ le A [k] \ le m,并且每个出现除A [1 \ l点缀n]中的特定数字以外的数字是奇数。尝试查找出现为偶数的数字。0≤A[k]≤m0≤A[k]≤m0\le A[k]\le m1≤k≤n1≤k≤n1\le k\le nA[1..n]A[1..n]A[1\ldotd n] 有一个Θ(nlogn)Θ(nlog⁡n)\Theta(n\log n)算法:我们将A [1 \ ldotd n]排序A[1..n]A[1..n]A[1\ldotd n]为B[1..n]B[1..n]B[1\ldotd n],然后将B[1..n]B[1..n]B[1\ldotd n]分解成许多块,其元素值为相同,因此我们可以计算每个元素的出现。 我想找到最坏的情况O(n)O(n)O(n) -时间和O(n)O(n)O(n) -空间算法。 假设m=Ω(n1+ϵ)m=Ω(n1+ϵ)m=\Omega(n^{1+\epsilon})和ϵ>0ϵ>0\epsilon>0,那么基数排序是不可接受的。 \DeclareMathOperator{\xor}{xor} 二进制按位运算是可接受的,例如A[1]xorA[2]A[1]xor⁡A[2]A[1]\xor A[2]。

1
为什么说广度优先搜索在时间?
经常有人说(例如,在Wikipedia中),图上的广度优先搜索(BFS)的运行时间为。但是,任何连接图都具有,即使在非连接图中,BFS也永远不会查看包含起始顶点的组件外部的顶点。该组件最多包含 边,所以它最多包含个顶点,这些是该算法将访问的唯一顶点。G=(V,E)G=(V,E)G=(V,E)O(|V|+|E|)O(|V|+|E|)O(|V|+|E|)|V|≤|E|+1|V|≤|E|+1|V|\leq |E|+1|E||E||E||E|+1|E|+1|E|+1 这意味着,那么为什么不说运行时间仅为呢?|V|+|E|≤2|E|+1|V|+|E|≤2|E|+1|V|+|E|\leq 2|E|+1O(|E|)O(|E|)O(|E|) 这是关于Disjkstra算法运行时间的一个问题的评论。
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.