桶排序的复杂度怎么会是O(n+k)呢?

2024-01-07

在说“这个问题以前有人问过”或者“找一本算法书”之前,请继续阅读并告诉我我的推理的哪一部分出了问题?

假设你有 n 个整数,并将它们分成 k 个容器,这将花费 O(n) 时间。然而,需要对 k 个 bin 中的每一个进行排序,如果对每个 bin 使用快速排序,则这是 O((n/k)log(n/k)) 操作,因此这一步将花费 O(nlog(n/k)+k)。最后需要组装这个数组,这需要 O(n+k),(参见这个帖子 https://stackoverflow.com/questions/7311415/how-is-the-complexity-of-bucket-sort-is-onk-if-we-implement-buckets-using-lin),所以总的操作将是 O(n+nlog(n/k)+k)。现在,这是怎么做到的?log(n/k) 消失了,我根本无法弄清楚。我的猜测是有一些数学运算可以消除这个 n*log(n/k) 。有人可以帮忙吗?


你的假设:

  • k - 桶的数量 - 是任意的

是错的。

桶排序有两种变体,所以很混乱。


A

桶的数量等于输入中项目的数量

查看分析here http://www.personal.kent.edu/~rmuhamma/Algorithms/MyAlgorithms/Sorting/bucketSort.htm


B

桶的数量等于R- 输入整数的可能值的数量

查看分析here http://cs.nyu.edu/courses/fall02/V22.0310-002/lectures/lecture-23.html and here http://www.ics.uci.edu/~eppstein/161/960123.html

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

桶排序的复杂度怎么会是O(n+k)呢? 的相关文章

  • R中按字母顺序对每一行字符串进行排序

    我环顾四周 似乎找不到解决这个问题的好方法 我有一个包含行名称的列 我想按字母顺序对每一行进行排序 以便稍后可以识别具有相同名称但顺序不同的行 数据如下 names lt c John D Josh C Karl H John D Bob
  • 根据三列中的值组织行

    导入并获取数据集import numpy as np import matplotlib pyplot as plt import pandas as pd df pd DataFrame DaysExperienceTask 7 8 2
  • 将 n 个可变高度图像拟合为 3 个(相似长度)列布局

    我正在寻找类似于的 3 列布局piccsy com http piccsy com 给定许多宽度相同但高度不同的图像 有什么算法可以对它们进行排序以使列长度的差异最小 最好使用 Python 或 JavaScript 非常感谢您提前的帮助
  • 如何对数字进行排序? [复制]

    这个问题在这里已经有答案了 下面是代码 Is the sortNumber对数字进行排序的函数 a 和 b 是什么意思以及为什么存在 为什么sortNumber in n sort sortNumber 没有指定任何参数a and b Ja
  • 计算总和等于 k ​​的子集数量

    给定一个数组 我们需要找出总和恰好等于给定整数 k 的子集的数量 请针对这个问题提出一个最佳算法 这里不需要实际的子集 只需计数即可 该数组由整数组成 可以是负数也可以是非负数 例子 数组 gt 1 4 1 10 5 绝对值总和 gt 9
  • 仅使用两个变量交换两个数字

    它如何执行交换 a a b b a b a b a 我不同意把它换成书 书中的选项包括 a和b的值的补集 否定和b 希望这些选项也不能满足它 正确的算法应该是 a a b b a b a a b
  • 递归:n项级数之和

    需要递归函数 系列是 1 2 3 3 4 5 4 5 6 7 递归求 n 的级数之和 我无法想到应该在函数中传递哪些参数 我的方法 我认为我应该传递 n 要相乘的项数 但我无法想到的是我应该如何在同一个函数中 和 以及我的 return 语
  • CSR 矩阵 - 矩阵乘法

    我有两个方阵A and B 我必须转换B to CSR Format并确定产品C A B csr C 我在网上找到了很多关于CSR 矩阵 向量乘法 http www mathcs emory edu cheung Courses 561 S
  • 大小为 n 的数组,其中一个元素 n/2 次

    给定一个由 n 个整数组成的数组 其中一个元素出现超过 n 2 次 我们需要在线性时间和恒定的额外空间中找到该元素 YAAQ 又一个数组问题 我有一种偷偷的怀疑 这类似于 在 C 中 We don t need an array publi
  • 创建将 n 个用户放入 k 个组的所有可能方法

    给定 n 个用户 u 1 u 2 u n 和 k 个组 g 1 g 2 g k 创建所有组的所有可能组合 基本上 最后每个组合都是一个Map 其中第一个Integer是用户ID 第二个Integer是组ID 例如 u 1 g 1 u 2 g
  • 为什么 n 按位和 -n 总是返回最右边的位(最后一位)

    这是Python代码片段 1 1 1 2 2 2 3 3 1 看来任何n n总是返回最右边 最后 位 我真的不知道为什么 有人可以帮助我理解这一点吗 这是由于负数以二进制表示的方式 称为二进制补码表示 创建某个数字 n 的补码 换句话说 创
  • 找到一个恰好出现了 N/2 次的数字

    这是我的面试问题之一 给定一个包含 N 个元素的数组以及元素出现的位置正好 N 2次 其余 N 2 个元素是unique 您如何找到运行时间更好的元素 请记住 元素未排序 您可以假设 N 是偶数 例如 input array 10 2 3
  • 如何随机化 NSArray? [复制]

    这个问题在这里已经有答案了 假设我有一个 NSArray 里面有 50 100 个对象 如何将数组按随机顺序排列 有很多方法可以做到这一点 但大多数只涉及生成随机数 也许您可以使用 NSMutableArray 使用此技术 生成 0 到 4
  • 对列表进行排序,同时保持一些元素始终位于顶部

    我们有一个List
  • 线性问题和非线性问题之间的区别?点积和核技巧的本质

    核技巧将非线性问题映射为线性问题 我的问题是 1 线性问题和非线性问题的主要区别是什么 这两类问题的差异背后的直觉是什么 核技巧如何帮助在非线性问题上使用线性分类器 2 为什么点积在这两种情况下如此重要 Thanks 当人们说到分类问题的线
  • 正则表达式等价

    有没有办法找出两个任意正则表达式是否等价 对我来说看起来很复杂的问题 但可能有一些 DFA 简化机制之类的 要测试等价性 您可以计算的表达式并进行比较
  • 对数字和字母元素的数组进行排序(自然排序)

    假设我有一个数组 var arr 1 5 ahsldk 10 55 3 2 7 8 1 2 75 abc huds 我尝试对其进行排序 我得到了类似的东西 1 1 10 2 2 3 5 55 7 75 8 abc ahsldk huds 注
  • ElasticSearch - 定义自定义字母顺序进行排序

    我正在使用 ElasticSearch 2 4 2 通过 Java 的 HibernateSearch 5 7 1 Final 我在字符串排序方面遇到问题 我的应用程序的语言有变音符号 它们有特定的字母顺序 订购 例如 直接在之后L 追随O
  • 如何通过组度量的平均值在 df 内排列 dplyr:: 组?

    借鉴吴卡拉的设计https stackoverflow com a 26555424 9350837 https stackoverflow com a 26555424 9350837答案 我希望根据各个组汇总测量的平均值对分组 df 进
  • 为什么对本地列表求和比用“GHC -O2”对教会编码列表求和慢?

    为了测试教会编码的列表如何针对用户定义的列表和本机列表执行 我准备了 3 个基准测试 用户定义的列表 data List a Cons a List a Nil deriving Show lenumTil n go n Nil where

随机推荐

  • 编译器实际上会生成机器代码吗?

    我一直在读到 在大多数情况下 如 gcc 编译器以高级语言读取源代码并吐出相应的机器代码 现在 机器代码的定义是处理器可以直接理解的代码 因此 机器代码应该仅依赖于机器 处理器 且独立于操作系统 但这种情况并非如此 即使 2 个不同的操作系
  • 如何在 Objective-C 中播种随机生成器并创建随机 int

    我在 Objective C 中见过一些随机 int 的例子 但是所有人都在抱怨每次应用程序运行时都有相同的数字序列 我读过有关播种随机数的内容 但我不确定这意味着什么 即使应用程序重新启动后 如何每次都会生成不同的随机数 是否可以将某些数
  • CMake 错误:启用语言后未设置 CMAKE_C_COMPILER

    当我构建一个包含 ndk 代码的 android 项目时 我收到以下错误 Build command failed Error while executing process home gongzelong Android Sdk cmak
  • WPF中如何处理鼠标滚轮点击事件?

    我想在单击鼠标滚轮时关闭选项卡控件中的选项卡 如何在 WPF 中捕获此事件 编辑 这是代码 private void tabMain MouseDown object sender MouseButtonEventArgs e if e C
  • 在 Docker 构建期间安装自制程序包

    我正在尝试安装 docker 映像 并希望在运行容器时预安装某些 Homebrew 软件包 我能够很好地构建它 并且版本语句按预期工作 但是当我运行时 已安装的软件包丢失了 知道我做错了什么吗 RUN git clone https git
  • 如何在 MongoDB 中的一个命令中更新增量两个字段?

    文档告诉我 如果我想设置一个值并增加另一个值 这是合法的 set x 1 inc y 1 如果我想增加两个变量怎么办 我正在尝试这个 但它不起作用 inc y 1 x 1 这可能吗 我是个白痴 inc y 1 x 1
  • 如何在Airflow MsSqlOperator中使用mssql_conn_id?

    我正在尝试在 Airflow 工作流程中使用 MsSqlOperator 但我不知道如何设置连接字符串 我尝试将 mssql conn id 设置为连接字符串本身 t2 MsSqlOperator task id sql op mssql
  • XCode:在哪里放置图像资源

    我正在尝试添加一些App Icons and Launch Images对于我的应用程序 我的代码文件在 Xcode 内按组组织 在文件系统中也是如此 我尝试拖动一个名为Resources将我的 PNG 图像添加到我的应用程序中 然后尝试将
  • 将桌面客户端直接连接到 MySQL 是否明智?

    我正在编写一个 Java 桌面客户端应用程序 用于从远程 MySQL 服务器检索数据 出于开发目的 我将其直接连接到 MySQL 服务器 即使用 DriverManager getConnection databaseURL 等 但一直打算
  • 在选项卡栏控制器内时,分割视图控制器的导航栏会变暗

    如果将拆分视图控制器放置在选项卡栏控制器内 则导航栏和选项卡栏在左侧会更暗 我已附上屏幕截图 我通过创建主从应用程序然后添加选项卡栏控制器来创建它 您如何纠正这个问题 截至撰写本文时 2017 年 5 月 此错误仍然存 在 我不敢相信苹果不
  • CoffeeScript:coffee -w 文件名.coffee 抱怨:“窗口未定义”

    在 CofeeScript 中 我通过这样做创建一个全局对象 window App init gt Running coffee w app coffee抱怨window is not defined并且不重写app js file 然而
  • 从n个已排序的数组中查找第k个最小的数

    所以 你有n个排序数组 不一定是等长的 你要返回组合数组中第k个最小的元素 即通过合并所有n个排序数组形成的组合数组 我已经尝试它和它的其他变体有一段时间了 到目前为止 我只在有两个长度相等的数组 都已排序 并且必须返回这两个数组的中位数的
  • 在商业 Java 应用程序中使用 LGPL 库 [关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 我有一个商业 Java 应用程序 我将分发 我想使用 LGPL 的 java 库 我不会修改库 该库的 LGPL 许可证对我的应用程序许可
  • 在 Firefox/Chrome 扩展程序中使用 Java/Python 库

    我有一个研究浏览器上用户行为的想法 为此我打算制作一个 Chrome Firefox 扩展来动态研究行为 我有一些 Java 和 Python 中的预定义库来分析结果 这不可能用纯 JavaScript 进行编程 现在我的问题是 是否可以使
  • 更改facet_wrap多重图中的绘图标题大小

    Can any help me change the title text size for these plots i e make them larger Script ggplot NMPSCMOR aes Length fill Y
  • Gradle 2.2.0 执行失败:SymbolForDebug

    将我的项目 以及附加的库 的 gradle 从 2 1 3 gt 2 2 0 升级后 它不再构建 并且显示 错误 任务 app transformNative libsWithStripDebugSymbolForDebug 执行失败 ja
  • 在matlab中通过非整数移位来移动向量的元素

    我想通过非整数移位来移位向量 线性插值似乎不是很准确 所以我尝试使用sinc通过以下使用傅立叶变换的代码进行插值 function y fshift x s FSHIFT Fractional circular shift Syntax g
  • 我可以在与其他页面(例如 wordpress)相同的 url 中创建 Flask Web 应用程序吗?

    我有一个自托管服务器 仅适用于我的局域网 带有 Wordpress miservidor com 和 Owncloud miservidor com owncloud 页面 这些页面工作完美 我最近决定在同一目录下使用 Flask 创建一个
  • 绑定到 ListView 的 SelectedItem 属性时设置初始选定项

    我有一个 Xamarin Forms xaml 页面 其中使用 ListView 允许用户从列表中选择单个项目 我已将 ListView 的 SelectedItem 属性绑定到 ViewModel 上的属性 效果很好 一旦用户更改所选项目
  • 桶排序的复杂度怎么会是O(n+k)呢?

    在说 这个问题以前有人问过 或者 找一本算法书 之前 请继续阅读并告诉我我的推理的哪一部分出了问题 假设你有 n 个整数 并将它们分成 k 个容器 这将花费 O n 时间 然而 需要对 k 个 bin 中的每一个进行排序 如果对每个 bin