Questions tagged «priority-queues»

9
是否存在带有提取的优先级队列?
有很多数据结构实现了优先级队列接口: 插入:将元素插入结构 Get-Min:返回结构中的最小元素 Extract-Min:删除结构中的最小元素 实现此接口的常见数据结构是(min)堆。 通常,这些操作的(摊销)运行时间为: 插入:(有时)O(log n )O(1 )O(1)\mathcal{O}(1)O(对数n )O(log⁡n)\mathcal{O}(\log n) Get-Min:O(1 )O(1)\mathcal{O}(1) 提取最小值:O(对数n )O(log⁡n)\mathcal{O}(\log n) 例如,斐波那契堆可达到这些运行时间。现在,我的问题是: 是否存在具有以下(摊销)运行时间的数据结构? 插入:O(对数n )O(log⁡n)\mathcal{O}(\log n) Get-Min:O(1 )O(1)\mathcal{O}(1) 提取最小值:O(1 )O(1)\mathcal{O}(1) 如果我们可以在给定排序输入的情况下在时间内构造这样的结构,那么我们可以例如在比使用“通常”优先级队列的路口快得多。o (nO(n )O(n)\mathcal{O}(n)ø (Ñ日志ñ)o(nlog⁡n)o\left(\frac{n}{\log n}\right)

3
二进制最小堆中的增加键和减少键
在许多关于二进制堆的讨论中,通常仅将减小键列为最小堆的受支持操作。例如,CLR第6.1章和此Wikipedia页面。为什么通常不会为最小堆列出增加密钥?我想可以通过将增加的元素(x)迭代替换为其最小的子元素来在O(height)中做到这一点,直到其子元素都不大于x为止。 例如 IncreaseKey(int pos, int newValue) { heap[pos] = newValue; while(left(pos) < heap.Length) { int smallest = left(pos); if(heap[right(pos)] < heap[left(pos)]) smallest = right(pos); if(heap[pos] < heap[smallest]) { swap(smallest, pos); pos= smallest; } else return; } } 以上正确吗?如果没有,为什么?如果是,为什么没有列出最小堆的增加密钥?

6
具有infima的部分排序优先级的优先级队列
我有一些优先级为复合类型的对象,并且仅部分排序。我需要按此优先级顺序选择对象(即每次产生最少的项)。但是,我宁愿选择队列是否稳定(从某种意义上说,如果存在多个最小元素,则应该首先返回最旧的元素),而不是随意完成订单。 是否有任何可用于部分排序的堆数据结构?还是修改了常规优先级队列才能使用它?我需要的算法的常见选择是简单的二进制或四进制堆,但这不适用于部分排序。 优先级值支持: 一个≼ b b ≼ 一个≼≼\preccurlyeqa≼ba≼ba \preccurlyeq bb≼ab≼ab \preccurlyeq a也可能为假。在这种情况下,我写。a⋚̸ba⋚̸ba \not\lesseqgtr b 查找INFI(glb)和uprema(lub)。是最大y,因此y \ preccurlyeq x_i。计算n个值的最小值需要O(n)时间。ý ý ≼ X 我 Ñ ø (Ñ )inf(xi)inf(xi)\inf(x_i)yyyy≼xiy≼xiy \preccurlyeq x_innnO(n)O(n)O(n)下确界(并确)每一组的存在。 可以定义部分排序的线性扩展。将其用于优先级队列是一种简便的方法,因为该算法确实可以正常工作。但是顺序会影响性能,插入顺序看起来应该最好,以避免最坏的情况。 另外,我要在其中使用的算法需要知道队列中所有优先级的最小值。 优先级具有现实意义,但可能会发生变化,因此依靠它们可能拥有的其他属性似乎并不可行。 注意:二进制堆不适用于部分排序。假设一个带有aaa,bbb和c的二进制堆ccc,其中a≼ca≼ca \preccurlyeq c和a⋚̸ba⋚̸ba \not\lesseqgtr b以及a⋚̸ca⋚̸ca \not\lesseqgtr c。它们按该顺序放置,所以 a (0) / \ b (1) c (2) 现在已插入d。下一个自由头寸是3,b的左孩子bbb,所以我们得到 a (0) / …

2
堆-给出
最有可能在问过这个问题。来自CLRS(第二版)问题6.5-8- 给出一个时间算法,将k个排序列表合并为一个排序列表,其中n是所有输入列表中元素的总数。(提示:请使用最小堆进行k向合并。)O(nlgk)O(nlg⁡k)O(n \lg k)kkknnnkkk 由于有排序的列表且总共有n个值,所以我们假设每个列表包含n个kkknnn数字,而且每个列表都严格按升序排序,结果也将按升序存储。nknk\frac{n}{k} 我的伪代码看起来像这样- list[k] ; k sorted lists heap[k] ; an auxiliary array to hold the min-heap result[n] ; array to store the sorted list for i := 1 to k ; O(k) do heap[i] := GET-MIN(list[i]) ; pick the first element ; and keeps track of …

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 

1
带有减少键和增加键操作的优先级队列
一个Fibonnaci堆支持以下操作: insert(key, data) :向数据结构添加一个新元素 find-min() :使用最小键返回指向元素的指针 delete-min() :用最小键删除元素 delete(node) :删除由指向的元素 node decrease-key(node) :减少由指向的元素的键 node 所有非删除操作均为(摊销)时间,删除操作为O (log n )摊销时间。O(1)O(1)O(1)O(logn)O(log⁡n)O(\log n) 是否有increase-key(node)在(摊销)时间内也支持的优先级队列的任何实现?O(1)O(1)O(1)
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.