Questions tagged «sorting»

给定一系列元素,找到一个排列,使元素按一定顺序排列。

1
排序算法,可以将每个元素进行
是否存在不减少到分类网络的已知比较分类算法,使得每个元素被比较次?O (对数n )O(log⁡n)O(\log n) 据我所知,在每个元素上使用比较进行排序的唯一方法是为n个输入构建一个AKS分类网络,然后在分类网络上运行输入。O (对数n )O(log⁡n)O(\log n)nnn AKS不容易实现,并且具有不切实际的常数,因此有寻找其他算法的动机。 用一种算法每件比较,其似乎不意味着排序网络呈现在这里。(iirc,这是由Rob Johnson在Stony Brook的算法研讨会上首次提出的)。O(log2n)O(log2⁡n)O(\log^2 n)

2
Han's
有谁熟悉韩一杰的线性空间整数排序算法吗?这个结果出现在一篇相当短的论文中(在O (n log log n )时间和线性空间中进行确定性排序。J。Alg。50:96–105,2004),该论文基本上将许多早期的结果结合在一起,并进行了适当的修改。我的问题是,它是用相当挥手的方式编写的,而没有涉及任何细节。它在很大程度上依赖于以前的论文,其中最著名的是Han(线性空间中改进的快速整数排序)Ø (ñ 日志日志n )O(nlog⁡log⁡n)O(n \log\log n)Ø (ñ 日志日志n )O(nlog⁡log⁡n)O(n \log\log n)。信息和计算170(1):81–94)的写作风格大致相同。我在理解这两篇论文时遇到了很大的困难,尤其是它们适应和使用先前结果的方式。我将不胜感激任何帮助。 当然,这个问题太宽泛和含糊,以至于不能将其视为一个适当的问题,但是我希望围绕几个重点明确的问题和答案展开讨论。 首先,这是我的第一个具体问题。在信息的引理2中。比较 论文中有一种递归的时间算法,用于在n个小整数的集合中找到第m个最小的整数,每个小整数将k填充到RAM字中。该算法的描述未提及如何处理基本情况k = O (n )。在这种情况下,需要以O (log k )时间进行选择。如何才能做到这一点?O (n / k 对数k )O(n/klog⁡k)O(n/k \log k)ñnnķkkk = O (n )k=O(n)k=O(n)O (对数k )O(log⁡k)O(\log k)

3
基于比较的数据结构,用于查找项目
是否有一个数据结构,该数据结构接受ñnn个无序数组,在执行预处理O (n )O(n)O(n)并回答查询:列表中是否有一些元素Xxx,每个查询的时间最差O (对数n )O(log⁡n)O(\log n)? 我真的认为没有,因此也欢迎提供证明。

2
在以下问题中是否可以找到多项式时间内是否存在序列?
我一直在思考以下问题,但尚未找到多项式解决方案。只有蛮力。我一直在尝试将NP完全问题简化为没有成功的问题。 这是问题所在: 您有一个正整数对的排序集。 {(A1,B1),(A2,B2),…,(An,Bn)}{(A1,B1),(A2,B2),…,(An,Bn)}\{(A_1, B_1), (A_2, B_2), \ldots, (A_n, B_n)\} (Ai,Bi)&lt;(Aj,Bj)⇔Ai&lt;Aj∨(Ai=Aj∧Bi&lt;Bj)(Ai,Bi)&lt;(Aj,Bj)⇔Ai&lt;Aj∨(Ai=Aj∧Bi&lt;Bj)(A_i, B_i) < (A_j, B_j) \Leftrightarrow A_i < A_j \lor (A_i = A_j \land B_i < B_j) (Ai,Bi)=(Aj,Bj)⇔Ai=Aj∧Bi=Bj(Ai,Bi)=(Aj,Bj)⇔Ai=Aj∧Bi=Bj(A_i, B_i) = (A_j, B_j) \Leftrightarrow A_i = A_j \land B_i = B_j 以下操作可以应用于一对:Swap(pair)。它交换该对中的元素,因此将变为(10,50)(10,50)(10, 50)(50,10)(50,10)(50, 10) 交换集合中的一对时,该集合将自动再次排序(交换后的对不适当,它将移入集合中的位置)。 问题在于查看是否有从某些对开始的序列交换整个集合,并具有以下条件: 一对交换后,下一个要交换的对必须是集合中的后继对或前导对。 找到这个问题的多项式时间解,或者将NP-完全问题简化为一个很好的解决方案。 注意: 这已经是一个决策问题。我不想知道序列是什么:仅当序列存在时。 交换对后如何对集合进行排序的示例 …

2
确切的比较次数以计算中位数
Knuth的《计算机编程艺术》第三章(第5章,第3.2节)包括下表,该表列出了从大小为的未排序集合中选择第个最小元素对所有所需的确切最小比较数。。该表中,与公知的封闭形式的表达式沿和,表示大部分的现有技术的状态的作为1976年。Ñ 1 ≤ 吨≤ Ñ ≤ 10 V 1(Ñ )= ñ - 1 V 2(Ñ )= ñ - 2 + ⌈ Ñ / 2 ⌉Ťttñnn1 ≤ 吨≤ Ñ ≤ 101≤t≤n≤101\le t \le n\le 10V1个(n )= n − 1V1(n)=n−1V_1(n) = n-1V2(Ñ )= ñ - 2 + ⌈ Ñ / 2 ⌉V2(n)=n−2+⌈n/2⌉V_2(n) …

1
具有线性比较的近似一维TSP?
一维旅行推销员路径问题显然与排序相同,因此可以通过比较时间来精确解决,但它的表达方式既逼近又精确解决方案很有意义。在输入为实数且可以四舍五入为整数的计算模型中,对于任意常数,在时间,都很容易在因子内近似。:找到最小值和最大值,将所有内容四舍五入到其原始值之内的一个数字,然后使用基数排序。但是具有四舍五入的模型的复杂性理论存在问题,这使我想知道,较弱的计算模型又如何呢?O(nlogn)O(nlog⁡n)O(n\log n)1+O(n−c)1+O(n−c)1+O(n^{-c})cccO(n)O(n)O(n)(max−min)n−(c+1)(max−min)n−(c+1)(\max-\min)n^{-(c+1)} 因此,在计算的线性比较树模型中(每个比较节点测试输入值的线性函数的符号),时间复杂度为o(nlogn)o(nlog⁡n)o(n\log n)?相同的舍入方法可以实现n ^ {1-o(1)}形式的任何近似比率n1−o(1)n1−o(1)n^{1-o(1)}(通过使用二进制搜索进行舍入,并进行更粗略的舍入以使其足够快)。但是,对于某些\ epsilon&gt; 0,是否有可能甚至达到O(n ^ {1- \ epsilon})的近似值?O(n1−ϵ)O(n1−ϵ)O(n^{1-\epsilon})ϵ&gt;0ϵ&gt;0\epsilon>0

3
使用黑匣子排序
假设我们想要一个列表排序,SSS的nnn实数。假设我们得到一个黑匣子,它可以立即对实数进行排序。使用这个黑匣子,我们可以获得多少优势?n−−√n\sqrt n 例如,是否可以仅使用调用黑盒来对数字进行排序?我发现的最佳算法是对黑盒使用调用。但是我无法进一步改进它。这是我的算法,类似于merge-sort:nO(n−−√)O(n)O(\sqrt n)nnn 首先将列表划分为大小约为列表。然后使用调用黑盒对这些列表进行排序。最后,使用黑框合并排序列表,如下所示:√SSS小号1,s ^2,。。。,ş √n−−√n\sqrt n √s1个,秒2,...,sn√s1,s2,...,sns_1, s_2, ..., s_{\sqrt n} √n−−√n\sqrt nn−−√n\sqrt n 将列表中的最小元素放入新列表,然后调用黑盒对其进行排序。在数(第一和的最小元素)将在最小数目。我们可以将其放在输出列表的第一位。 假设已从选择元素,我们将替换为排序列表的第二个最小元素,然后再次运行黑盒以计算的第二个最小成员。 我们继续进行,直到所有元素都被排序为止。此部分的黑匣子调用总数为L [ 1 ] L S s j L [ 1 ] s j S n - √LLLL[1]L[1]L[1]LLLSSSsjsjs_jL[1]L[1]L[1]sjsjs_jSSSn−n−−√n−nn - \sqrt n。因此,总的通话总数为nnn。 另一方面,看起来我们应该能够使用排序所需的数字比较中的下界来获得下界:我们可以使用√来实现黑盒n−−√lgn−−√=12n−−√lgnnlg⁡n=12nlg⁡n\sqrt n \lg \sqrt n = \frac{1}{2} \sqrt n \lg n比较。如果我们可以通过调用来解决该问题,并在线性时间内进行合并,则可以使用比较对实数进行排序,这是不可能的。no(nlgn)o(n−−√)o(n)o(\sqrt …

1
合并易碎对象列表
背景:徐超不久前发布了以下问题:“ 是否存在不减少到分类网络的已知比较分类算法,使得每个元素被比较次?O(logn)O(log⁡ñ)O(\log n) ”。看来我们对这个问题有些困惑;我曾在2009年与Valentin Polishchuk讨论过同样的问题,但我们一无所获。 为了获得一些新的想法,我试图提出一个最简单的问题,该问题具有相似的风格并且并非完全无关紧要。因此,下面的问题。 问题:将为您提供两个排序列表,每个列表包含元素。您可以合并列表,以便每个元素仅比较次吗?ññnO (1 )Ø(1个)O(1) 自然,输出应为包含所有元素的排序列表。2 n2ñ2n [事实证明这很简单,答案是“否”。] 问题2:为您提供两个排序列表,每个列表包含元素。如果允许丢弃一小部分元素,是否可以合并列表,以便每个元素仅被比较次?ññnO (1 )Ø(1个)O(1) 更精确地,输出应该是包含排序列表元素,和一个“垃圾箱”包含元素。值可以小到多少?使是微不足道的。像这样的事情应该可以直接实现。但是你能得到吗?T (n )T (n )T (n )= n T (n )= n / 100 T (n )= o (n )2 n − T(n )2ñ-Ť(ñ)2n-T(n)Ť(n )Ť(ñ)T(n)Ť(n )Ť(ñ)T(n)Ť(n )= nŤ(ñ)=ñT(n) = nŤ(n )= n / 100Ť(ñ)=ñ/100T(n) = …

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 

2
按欧几里得距离排序
SSS是平面上的一组点。随机点x∉Sx∉Sx \notin S是在同一平面上给出。任务是要排序的所有y∈Sy∈Sy \in S通过之间欧氏距离xxx和yyy。 无脑方法是计算之间的距离xxx和yyy所有ÿ∈ 小号y∈Sy \in S,然后排序它们使用任何快速算法。 有什么方法可以存储或预处理小号SS从而使分类过程变得更快?

2
线性时间中的“几乎排序”整数
我有兴趣对线性时间中的正整数值的数组进行排序(在采用均等成本度量的RAM模型中,即整数可以具有对数大小,但假定对其进行算术运算单位时间)。当然,使用基于比较的排序算法是不可能的,因此我对计算“近似”排序很感兴趣,即,计算一些置换通常不是真正排序的,而是的排序版本的“良好近似” 。我将假定我们按递减顺序对整数进行排序,因为它使续集的陈述更加令人愉快,但当然可以反过来说明问题。L=v1,…,vnL=v1,…,vnL = v_1, \ldots, v_nvσ(1),…,vσ(n)vσ(1),…,vσ(n)v_{\sigma(1)}, \ldots, v_{\sigma(n)}LLLLLL 用于近似的排序的一个可能的准则是以下的(*):让NNN是∑ivi∑ivi\sum_i v_i,对于每1≤i≤n1≤i≤n1 \leq i \leq n,我们要求(即, “准排序”列表从上方受递减函数。很容易看出实际排序满足以下条件:不得大于因此最多为,即,通常不得大于vσ(i)≤N/ivσ(i)≤N/iv_{\sigma(i)} \leq N/ii↦N/ii↦N/ii \mapsto N/ivσ(2)vσ(2)v_{\sigma(2)}vσ(1)vσ(1)v_{\sigma(1)}(vσ(1)+vσ(2))/2(vσ(1)+vσ(2))/2(v_{\sigma(1)} + v_{\sigma(2)})/2≤N/2≤N/2\leq N/2vσ(i)vσ(i)v_{\sigma(i)}(∑j≤ivσ(i))/i(∑j≤ivσ(i))/i(\sum_{j \leq i} v_{\sigma(i)})/i,即。≤N/i≤N/i\leq N/i 例如,可以通过以下算法(@Louis建议)来实现要求(*)。我的问题是:是否通过强加诸如(*)这样的实际排序可以满足的要求来完成线性时间“几乎排序”整数的任务?下面的算法或它的某些变体是否具有确定的名称? 编辑:修复了算法并添加了更多说明 算法: INPUT: V an array of size n containing positive integers OUTPUT: T N = Σ_{i&lt;n} V[i] Create n buckets indexed by …

1
是否足以对一个排序网络的多项式0-1序列进行排序?
0-1原则表示,如果排序网络适用于所有0-1序列,则适用于任何数字集。是否有一个使得如果网络对S中的每个0-1序列进行排序,那么它对每个0-1的序列进行排序,并且的大小是多项式?小号ÑS⊂{0,1}nS⊂{0,1}nS\subset \{0,1\}^nSSSnnn 例如,如果由其中存在最多的所有序列的试验1级的的(时间间隔),则在那里分选网络N和,如果所有成员不被N有序序列由N有序?2 小号SSS222SSS 答案:从答案及其注释中可以看出,答案是,对于每个未排序的字符串,都有一个对其他所有字符串进行排序的排序网络。以下是对此的简单证明。令字符串使得永远且。由于未排序,因此排序后应该为。将与每个进行比较。然后比较每对,使得和s i = 0 i &lt; k s k = 1 s s k 0 k i s i = 1 (i ,j )i ≠ k j ≠ ks=s1…sns=s1…sns=s_1\ldots s_nsi=0si=0s_i=0i&lt;ki&lt;ki<ksk=1sk=1s_k=1ssssksks_k000kkkiiisi=1si=1s_i=1(i,j)(i,j)(i,j)i≠ki≠ki\ne kj≠kj≠kj\ne k多次。这使整个字符串保持排序状态,可能是除外,而则未对排序,而某些其他字符串的大于。现在比较对 DOWNTO,除了住的地方应该走。这将对除所有内容进行排序。 s 1 s s k i = n 1 s k s ssksks_ksss111ssssksks_ki=ni=ni=n111sksks_kssssss …

3
位置受限的拓扑排序的复杂性
我得到个顶点的DAG作为输入,其中每个顶点都另外加上了一些。GGGnnnxxxS(x)⊆{1,…,n}S(x)⊆{1,…,n}S(x) \subseteq \{1, \ldots, n\} 甲拓扑排序的是一个双射从顶点到,使得对所有,,如果有从一个路径到在然后。我想决定是否存在的拓扑排序,这样对于所有,。GGGfffGGG{1,…,n}{1,…,n}\{1, \ldots, n\}xxxyyyxxxyyyGGGf(x)≤f(y)f(x)≤f(y)f(x) \leq f(y)GGGxxxf(x)∈S(x)f(x)∈S(x)f(x) \in S(x) 这个决策问题的复杂性是什么? [注意:显然这是在NP中。如果查看允许的顶点/位置对的图,并且成对之间的无向边会因为违反顺序而发生冲突,那么您会得到一个不连续的图,每个图最多要选择一对,每个图最多要选择一对位置,每个顶点最多一对-似乎与3维匹配有关,但我看不出使用此特定问题的附加结构是否仍然困难。

2
一组部分有序元素的持久数据结构是什么?
我需要存储类型为a的元素集。类型a是部分排序的,因此比较和可以返回更小,更大,相等或不可比的结果。一种1个一种1个a_1一种2一种2a_2 哈希表的一个问题是,两个相等的元素可以用不同的方式表示,并且我无法访问与相等一致的哈希函数。 比较两个元素可能是一个漫长的过程,因此最小化比较会很有趣。如果需要,可以记住对比较运算符的调用。我现在意识到,我只需要存储反链(或者假设是这样)。更准确地说,我将需要执行的操作如下: 从反链中删除一个元素; 尝试添加一个元素。如果元素小于成员,则不要添加它,否则,添加它并删除所有小于它的元素。 我还可以用两个整数来绑定每个元素,因此,如果我知道和,那么知道立刻给我。当然,并不意味着 ...与完整的元素比较相比,找到整数范围是一个相对便宜的操作。一世1个&lt; a &lt; 我2一世1个&lt;一种&lt;一世2i_1 < a < i_2一世3&lt; b &lt; 我4一世3&lt;b&lt;一世4i_3 < b < i_4一世2&lt; 我3一世2&lt;一世3i_2 < i_3a &lt; b一种&lt;ba < b一世2≮ 我3一世2≮一世3i_2 \not< i_3一≮ b一种≮ba \not < b

2
排序列表的最小换位数
在尝试设计自己的排序算法时,我正在寻找可以与之进行比较的最佳基准。对于元素的未排序的顺序一个和排序顺序乙,什么是计算换位的最优数量得到一种有效的方式一至乙? 换位定义为切换列表中2个元素的位置,例如 1 2 4 3 有一个变调(变调4和3) 1 2 3 4 就像是 1 7 2 5 9 6 需要4个换位(7,2),(7,6),(6,5),(9,7) 更新(9/7/11):问题更改为使用“换位”而不是“掉期”来指代不相邻的交易所。

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.