Questions tagged «sorting»

关于某些排序关系对一组元素进行排序的算法问题。

5
复杂度为O(n)的词频
在接受Java开发人员职位面试时,有人问我以下问题: 编写一个具有两个参数的函数: 代表文本文档的字符串,以及 提供要返回的项目数的整数。 实现函数,使其返回按单词频率排序的字符串列表,最频繁出现的单词在前。您的解决方案应在时间运行,其中是文档中的字符数。nO (n )O(n)O(n)ñnn 以下是我的回答(用伪代码),由于排序,它不是,而是时间。我不知道该怎么做时间。 O (n log n )O (n )O (n )O(n)O(n)Ø (ñ 日志n )O(nlog⁡n)O(n \log n)O (n )O(n)O(n) wordFrequencyMap = new HashMap<String, Integer>(); words = inputString.split(' '); for (String word : words) { count = wordFrequencyMap.get(word); count = (count == null) ? 1 : …

2
此重排/排序问题的名称?
给您一个长度为的数组。数组的每个元素都属于K类之一。你应该重新排列使用交换操作的最小数量,以使阵列的所有元素从相同类总是组合在一起,即它们形成连续的子阵列。 例如: nnnKKK 剩下三个有效的安排。[2,1,3,3,2,2]⟶[2,2,2,1,3,3], or[2,1,3,3,2,2]⟶[1,2,2,2,3,3], or[2,1,3,3,2,2]⟶[3,3,2,2,2,1].[2,1,3,3,2,2]⟶[2,2,2,1,3,3], or[2,1,3,3,2,2]⟶[1,2,2,2,3,3], or[2,1,3,3,2,2]⟶[3,3,2,2,2,1]. \begin{align*} &[2, 1, 3, 3, 2, 2] \longrightarrow [2, 2, 2, 1, 3, 3], \text{ or} \\ &[2, 1, 3, 3, 2, 2] \longrightarrow [1, 2, 2, 2, 3, 3], \text{ or} \\ &[2, 1, 3, 3, 2, 2] \longrightarrow [3, 3, …

2
经二分模型在O(n)中是否可以进行整数排序?
据我所知,不存在可以解决以下问题的最坏情况算法:O (n )O(n)O(n) 给定长度为的序列,该序列由有限整数组成,请找到每个元素小于或等于其后继元素的排列。ñnn 但是在跨二分法的计算模型中是否存在不存在的证据? 请注意,我并没有限制整数的范围。我也不将解决方案限制为比较排序。

1
为什么内省型使用堆排序而不是合并排序?
作为涉及内省排序实现的家庭作业的一部分,我被问到为什么使用堆排序而不是合并排序(或其他算法)。 Ø (ñ 日志(n ))Ø(ñ日志⁡(ñ))O(n\log(n)) Introsort是一种混合排序算法,可提供快速平均性能和(渐近)最佳最坏情况性能。它从快速排序开始,并在递归深度超过基于排序元素数量(的对数)的级别时切换到堆排序。(Wikipedia,检索2014年5月6日。) 我能想到的唯一原因是,heapsort是“就位”的……但是,我并不真正理解为什么这在这里很重要。

1
分析Quicksort时要使用什么措施
我试图理解为什么使用Lomuto分区和固定枢轴的快速排序在随机生成的输入上表现不稳定,但总体效果不佳。我在想,即使输入是随机生成的,序列也可能有很多顺序,但是我不确定如何测量序列中的混乱程度。我曾考虑过使用反演次数,但从另一个问题中我看到,我问这不是一个很好的方法。 我怀疑我的随机序列具有很多“顺序”的原因是,随机化枢轴解决了性能问题。但是从理论上讲,这些所谓的“随机”输入序列应该不存在任何性能问题。

2
当使用硬币翻转比较器时,是否有一种“排序”算法返回随机排列?
受这个问题的启发,在这个问题中,问询者想知道在标准搜索算法中使用的比较器被公平的硬币翻转代替时运行时间是否发生了变化,并且微软也未能编写统一的排列生成器,因此我的问题是: 是否有一个基于比较的排序算法,具体取决于我们对比较器的实现: 使用真正的比较器时,将元素按排序顺序返回(即,比较符合我们在标准排序算法中的预期) 当比较器被公平的硬币翻转代替时,返回元素的均匀随机排列(即x < y = true,无论x和y的值如何,返回概率均为1/2) 排序算法的代码必须相同。只有比较“黑匣子”内部的代码可以更改。

1
有效地删除重复项并降低内存开销
我想以一种只需要存储结果集的方式有效地过滤重复项的整数列表。 一种可见的方式: 我们有一个整数范围其中大(例如)N 2 40小号= { 1 ,...,N}S={1,…,N}S = \{1, \dots{}, N\}ñNN2402402^{40} 我们有一个函数,据说它有很多碰撞(图像均匀地分布在)SF:S→ Sf:S→Sf : S \to S小号SS 然后,我们需要存储,即{ f (x )| X ∈ 小号}F[ S]f[S]f[S]{ ˚F(x )| X ∈ 小号}{f(x)|x∈S}\{f(x) | x \in S\} 我对有一个非常准确的(概率性)估计。是,因此可以预先分配数据结构(例如)。| f [ S ] | ≈ 2 30| F[ S] ||f[S]||f[S]|| F[ S] | …

3
如果选择最大元素作为枢轴,Quicksort是否始终具有二次运行时间?
如果您有快速排序算法,并且始终选择最小(或最大)元素作为枢轴;我是否假设如果您提供一个已经排序的数据集,无论您的“已排序”列表是按升序还是降序,都将始终获得最差的性能? 我的想法是,如果您始终为枢轴选择最小的元素,那么“已排序”输入是按升序还是降序排序并不重要,因为选择相对于枢轴进行排序的子集始终是一样大小?
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.