为什么在快速排序中选择随机主元

2024-01-24

So choosing a pivot at random has O(n2) running at worst case but when the pivot is chosen as the average of min value and max value of the list you get a worst case O(n log n).

当然,由于查找最小值和最大值,每次递归都会增加 2*O(n),而不是随机生成器的常数 O(1)。当将其实现为枢轴时,您将在递归树的叶子处对列表进行排序,而不是在标准算法中将元素从根到叶子进行排序。

当实现而不是枢轴作为列表上的值时,它只是一个与之比较的数字,所以这不是标准的快速排序,但我的问题仍然适用。

下面是我写得不好的伪代码:

func sort(List n):
    if n.length < 2
     return n;
    min = n.minValue
    max = n.maxValue
    avg = (min+max) /2 
    List left = list of elements in n less than avg
    List right = list of elements in n greater than avg
    sort(left)
    sort(right)

Your algorithm suffers O(n2) if you choose average of min value and max value as pivot when the list contains the following elements:

1, 3, 7, 15, 31, 63, ..., 2n-1

您会发现,对于算法的每一次传递,right部分始终只有 1 个元素。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

为什么在快速排序中选择随机主元 的相关文章

  • 使用多级解决方案计算二维网格中的最近邻

    我有一个问题 在 x y 大小的网格中 我提供了一个点 并且我需要找到最近的邻居 在实践中 我试图在 pygame 中找到距离光标最近的点 该点跨越颜色距离阈值 计算如下 sqrt rgb1 0 rgb2 0 2 rgb1 1 rgb2 1
  • C# 中的 strstr() 等效项

    我有两个byte 我想找到第二个的第一次出现byte 在第一个byte 或其中的一个范围 我不想使用字符串来提高效率 翻译第一个byte to a string会效率低下 基本上我相信就是这样strstr 在 C 中做 最好的方法是什么 这
  • 数学组合的完美最小哈希

    首先定义两个整数N and K where N gt K 两者都在编译时已知 例如 N 8 and K 3 接下来 定义一组整数 0 N or 1 N 如果这使答案更简单 并调用它S 例如 0 1 2 3 4 5 6 7 的子集数量S wi
  • 具有多个谓词的 C++11 算法

    功能如std find if来自algorithmheader 确实很有用 但对我来说 一个严重的限制是我只能为每次调用使用 1 个谓词count if 例如给定一个像这样的容器std vector我想同时应用相同的迭代find if 多个
  • 如何对STL向量进行排序?

    我想排序一个vector vector
  • 在 O(n) 时间内排序?

    我被这个问题困扰了 2周 知道如何处理它吗 令 L 为 n 个不同整数的列表 假设 L 的 x 的元素在 1 750 范围内 设计线性排序算法对 L 的元素进行排序 我已经尝试过插入排序 但我不确定我的方法是否正确 Construct an
  • 如何在Python中按AaB而不是ABa顺序对字符串进行排序

    我正在尝试对字符串进行排序 为 punnetsquare 制作基因型 我目前的实现是 unsorted genotype ABaB sorted genotype sorted list unsorted genotype sorted s
  • 举例解释bpe(字节对编码)?

    有人可以帮忙解释一下背后的基本概念吗BPE模型 除了这张纸 https arxiv org abs 1508 07909 目前还没有那么多解释 到目前为止我所知道的是 它通过将罕见和未知的单词编码为子词单元序列来实现开放词汇表上的 NMT
  • 以 O(1) 计算汉明权重 [重复]

    这个问题在这里已经有答案了 在二进制表示中 汉明权重是 1 的数量 我偶然发现了网络并找到了一个 O 1 的答案 v v v gt gt 1 0x55555555 v v 0x33333333 v gt gt 2 0x33333333 in
  • 解开 Knuth 的结:如何重构意大利面条式代码?

    这个问题的灵感来自如何将流程图转化为实施 https stackoverflow com questions 36647765它询问如何通过算法消除goto代码中的语句 这answer https stackoverflow com a 3
  • 照片马赛克算法。如何在给定基本图像和瓷砖列表的情况下创建马赛克照片?

    Hy 我要做的是创建一个程序 使用 C 或 C 它将 24 位 像素位图和图像集合作为输入 我必须创建一个马赛克图像 类似于使用库的输入图像给定的图像 创建与输入类似的马赛克照片 到目前为止 我可以访问输入的图像像素及其颜色 但我有点卡住了
  • 如何对对象进行排序? (画家算法)

    所以我有 4 个矩形形状 我正在尝试应用排序算法 画家算法 https en wikipedia org wiki Painter 27s algorithm 来知道我需要先绘制哪些形状 在 3d 中 然后绘制哪个形状 Note 相机位于右
  • O(1) 算法确定节点是否是多路树中另一个节点的后代?

    想象一下下面的树 A B C D E F 我正在寻找一种方法来查询 F 是否是 A 的后代 注意 F 不需要是directA 的后代 在这种特殊情况下这是正确的 只需要针对更大的潜在后代节点池测试有限数量的潜在父节点 当测试一个节点是否是潜
  • 动态规划 (DP) 中的重叠子问题是什么?

    为了使动态规划适用 问题必须具有两个关键属性 最优子结构 and 重叠子问题 1 https en wikipedia org wiki Dynamic programming 对于这个问题 我们只关注后一个属性 有各种不同的定义重叠子问题
  • 对 std::vector 进行排序但忽略某个数字

    我有一个std vector
  • 数量重新分配逻辑 - 具有外部数据集的 MapGroups

    我正在研究一种复杂的逻辑 需要将数量从一个数据集重新分配到另一个数据集 在例子中我们有Owner and Invoice 我们需要从数量中减去Invoice准确地Owner匹配 在给定汽车的给定邮政编码处 减去的数量需要重新分配回同一辆车出
  • 如何计算排列? [关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 我有一个关于 Java 排列的问题 Suppose I have five different elements in an arra
  • 将名称字符串编码为唯一的数字

    我有一大堆名字 数以百万计 他们每个人都有一个名字 一个可选的中间名和一个姓氏 我需要将这些名称编码为唯一代表这些名称的数字 编码应该是一对一的 即一个名称只能与一个数字相关联 一个数字只能与一个名称相关联 对此进行编码的明智方法是什么 我
  • 将数组排序为第一个最小值、第一个最大值、第二个最小值、第二个最大值等

    编写一个JS程序 返回一个数组 其中第一个元素是第一个最小值 第二个元素是第一个最大值 依此类推 该程序包含一个函数 该函数接受一个参数 一个数组 该函数根据要求返回数组 输入示例 array 2 4 7 1 3 8 9 预期输出 1 9
  • 列出所有 k 元组,其条目总和为 n,忽略旋转

    有没有一种有效的算法来查找所有序列k总和为的非负整数n 同时避免旋转 如果可能的话 完全避免 顺序很重要 但对于我正在解决的问题来说 轮换是多余的 例如 与k 3 和n 3 我想要得到一个如下所示的列表 3 0 0 2 1 0 2 0 1

随机推荐

  • 黄瓜的路由问题

    我正在使用 Rails 3 和 Cucumber 除了这个小问题之外一切都很顺利 Given I am on the edit automobile page No route matches controller gt automobil
  • 模块未出现在 jupyter 中

    我在将模块导入 jupyter 时遇到问题 我做了以下事情 创建虚拟环境 激活它 下面的所有内容都在我的 venv 上下文中 安装雅虎财经模块 pip install yfinance 打开 python 控制台并导入它来测试是否工作 gt
  • 如何转储所有_G表内容

    我想转储 G 表 在 G 表中还有其他表也转储 内联表 我想要一个好的格式 我有一个例子 但使用它转储 G表有一些问题 function print table node to make output beautiful local fun
  • 将垂直滚动从 UIScrollView 转发到同级 UITableView

    我有一个具有以下层次结构的视图控制器 视图控制器 UIScrollView 可水平滚动 UITableView 可垂直滚动 我想转发我的垂直卷轴UIScrollView给兄弟姐妹UITableView 这样当用户向上滚动时UIScrollV
  • Kubernetes 集群上的粘性会话

    目前 我正在尝试在 Google Cloud 上创建一个 Kubernetes 集群 其中包含两个负载均衡器 一个用于后端 在 Spring boot 中 另一个用于前端 在 Angular 中 其中每个服务 负载均衡器 与 2 个副本 p
  • 使用 cURL 获取 HTTP 标头并保存到变量

    我用它来获取 XML 提要和 HTTP 标头 Initiate the curl session ch curl init Set the URL curl setopt ch CURLOPT URL url Allow the heade
  • 如何将 Chrome 开发者控制台停靠在左侧?

    我知道您可以单击垂直省略号按钮 然后选择停靠在底部 右侧或分离 但有人知道如何停靠在左侧吗 目前我必须分离然后手动调整大小和调整 这很烦人 Edit 我将保留这个问题 直到有人说服谷歌添加左对接 或者有人找出黑客 发现或构建扩展以使其正常工
  • 带有 Activity 和子 Fragment 的导航抽屉

    我有一个Activity A a 列表片段 P and 2 碎片 Q and R 当应用程序启动时 A已创建 加载P 根据用户点击的内容 将其替换为Q or R 现在通过引用this https developer android com
  • 如何突出显示 Ionic 列表中的选定项目

    我在屏幕上填充了一个项目列表 只想在列表视图中突出显示所选项目 请帮助
  • 关于不阻塞 GUI 线程的 MessageBox.Show 替换的建议?

    不久前 我遇到了一种情况 我们需要向用户显示消息框以获取通知 但我们无法使用 MessageBox Show 因为它会阻塞 GUI 线程 因此当对话框处于活动状态时 屏幕上的任何内容都不会更新 关于替代方案有什么建议吗 我当时编写了一个替代
  • Linux 和 Windows 上 html 中的 javascript 导入区分大小写

    我有以下内容 测试 html test js var Test test 问题是为什么它在 Windows 上工作而在 Linux 上不起作用 换句话说 为什么 linux 对于导入区分大小写 但 window 不区分 如何在 Linux
  • SQL Server数据通过网络发送时以什么格式序列化?

    我问这个问题的原因是因为我们计划将大量 几 GB 数据从 SQL Server 数据库读取到 Net 应用程序进行处理 我想知道为每条记录计算多少空间开销 以估计对网络流量的影响 例如 一条记录由 5 个整数组成 即 4 5 20 字节数据
  • Codeigniter result_array()何时返回单维或多维数组?

    返回 query gt result array 时有时我会得到多个像这样的单个数组 Array user id gt 32 username gt johnd cat id gt 7 Array user id gt 33 usernam
  • Action Script 中的 JSON:如何获取 JSON 对象的属性和值?

    假设我有这个 JSON 并且假设属性可能会改变 srcLocation pc filename name fileext jpg url 首先我想获取它们的所有属性 srcLocation 文件名等 并使用我得到的属性我想获得相应的值 我怎
  • 如何舍入到某个浮点精度?

    我认为这是一个简单的问题 我想 a 1 154648126486416 成为 a 1 154 and not a 1 15000000000 在不使用的情况下我该如何做到这一点format bank 你可以这样做 a floor a 100
  • WPF 装饰器有什么意义?

    我最近为我的公司开发了一个绘图组件 其中包含一个画布 您可以在上面通过单击并拖动来绘制某些形状 对于每个形状 我在其 AdornerLayer 上放置了两个装饰器 一个用于增加命中检测 基本上是一个会超出形状边界几个像素的透明矩形 另一个用
  • 什么是

    我对 Vue js 完全陌生 我想我对路由器如何处理以下内容有一些了解
  • 使用 dateutil 解析器从字符串中解析日期

    我正在尝试解析字符串格式的日期 u 2015 年 6 月 11 日 12 26 小时 美国标准时间 但是当我使用 dateutil 解析器来解析时出现错误 from dateutil parser import parse parse u
  • SQL:NOLOCK 导致查询速度变慢

    向查询添加 nolock 是否有任何原因会导致执行时间增加 UPDATE TargetTable SET col1 c1 RowCnt col2 c2 RowCnt from TargetTable tt join select col3
  • 为什么在快速排序中选择随机主元

    So choosing a pivot at random has O n2 running at worst case but when the pivot is chosen as the average of min value an