使用 N 路合并的时间复杂度

2024-01-01

我正在研究 2 路合并排序算法,并思考是否通过减少合并次数我们可以在时间方面获得更好的收益。

例如,在 2 路合并中,我们有以下递归:

T(n) = 2T(n/2) + O(n)

时间复杂度为 N.log-base 2(N)

如果我将问题除以 4 并合并 4 个子数组,我会得到

T(n) = 4T(n/4) + O(n)

时间复杂度应该为 N.log-base4(N)

既然合并传递的数量减少了,那么在实现合并排序时是否应该考虑这一点?

例如,对于 64 个元素的数组,第一种方法将有 6 次传递,而使用第二种方法将有 3 次传递。

Edit:

好的,那么对于 2T(n/2),我们每次传递进行 N 次比较,而对于 4T(n/4),我们最终每次传递进行 3*N 次比较?移动元素以产生排列的成本如何,每次传递时都保持不变吗?


请注意,数字的以 4 为底的对数恰好是数字以 2 为底的对数的一半;因此,您只是引入了常数因子加速。除非你不是,因为你在实际合并的成本中引入了类似的常数因子减慢(2 路合并需要每个项目 1 次比较,4 路可能需要最多 3 次)。因此,虽然通行证的数量可能会减少,但每一次通行证的成本都会更高。因此,您已经使代码变得相当复杂,并且其好处也受到质疑。

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

使用 N 路合并的时间复杂度 的相关文章

  • 一种递归算法,用于在数组中查找总和为给定整数的两个整数

    我需要一个算法来确定数组是否包含两个总和为给定整数的元素 数组已排序 该算法应该是递归的并且运行时间为 O n 递归步骤应该基于总和 这意味着该方法传递总和并根据最终结果返回 true 或 false 如果找到两个元素 返回 true 否则
  • 算法 - 如何有效删除列表中的重复元素?

    有一个list L 它包含以下元素任意类型each 如何有效删除此类列表中的所有重复元素 必须保留订单 只需要一个算法 因此不允许导入任何外部库 相关问题 在Python中 从列表中删除重复项以使所有元素都是唯一的最快算法是什么在维持秩序的
  • 如何返回 Solidity 中的结构数组?

    我正在为以太坊智能合约设计一个解决方案bidding 用例包括保留名称 例如 myName 并分配给一个地址 然后 人们可以竞标该名称 在本例中为 myName 可以有多个名称发生多次此类出价 struct Bid address bidO
  • 给定一个点向量(可能无序),找到多边形(不是凸包)

    我目前有一个点向量 vector
  • 快速排序应用程序中这些交换代码行的目的是什么?

    我试图理解快速排序的实现或应用程序以找到第 k 个最小元素 这是我试图理解的代码 public int quicksort int a int start int end int k if start lt end int pivot pa
  • 当平方和为N时,如何找到四个变量的所有可能值?

    A 2 B 2 C 2 D 2 N给定一个整数N 打印出整数值的所有可能组合ABCD求解方程 我猜我们可以比暴力做得更好 天真的暴力会是这样的 n 3200724 lim sqrt n 1 for a 0 a lt lim a for b
  • 处理流星中的长服务器端计算

    我正在使用 jimp https www npmjs com package jimp https www npmjs com package jimp 在meteor JS中生成图像服务器端 换句话说 我正在使用递归算法 计算 图像的像素
  • 一种良好且简单的随机性测量方法

    获取一长整数序列 例如 100 000 个 并返回序列随机性的测量值的最佳算法是什么 该函数应返回单个结果 如果序列并非完全随机 则返回 0 如果完全随机 则返回 1 如果序列有点随机 它可以给出介于两者之间的东西 例如0 95 可能是一个
  • 如何在 JavaScript 中构建树模式匹配算法?

    好吧 这是一个有点复杂的问题 但是 tl dr 基本上是如何使用 模式树 解析 实际树 如何检查特定的树实例是否与特定的模式树匹配 首先 我们有我们的结构模式树 模式树通常可以包含以下类型的节点 sequence节点 匹配一系列项目 零个或
  • 素数生成器算法

    我一直在尝试解决素数生成算法的SPOJ问题 这是问题 彼得想为他的密码系统生成一些素数 帮助 他 你的任务是生成两个给定之间的所有素数 数字 Input 输入以单行中测试用例的数量 t 开始 t Output 对于每个测试用例 打印所有素数
  • 关于Marching Cubes算法的澄清

    关于Marching Cubes 我对其算法和实现有一些疑问 我已经阅读了 Marching Cubes 的 Paul Bourke 优秀文章以及网站上可用的源代码 但是 我在理解以及如何以自己的方式实现算法方面仍然遇到了一些问题 问题如下
  • 检查有效的 IMEI

    有人知道如何检查有效的 IMEI 吗 我找到了一个可以检查此页面的功能 http www dotnetfunda com articles article597 imeivalidator in vbnet aspx http www do
  • 分而治之算法找到两个有序元素之间的最大差异

    给定一个整数数组 arr 找出任意两个元素之间的差异 使得较大的元素出现在 arr 中较小的数字之后 Max Difference Max arr x arr y x gt y 例子 如果数组是 2 3 10 6 4 8 1 7 那么返回值
  • LRU算法,实现这个算法需要多少位?

    我有一个关于 LRU 算法的小问题 如果您有一个包含四个块的高速缓存 那么需要多少位来实现该算法 假设您指的是 4 路组关联缓存 完美 LRU 本质上是按照使用顺序为每一行分配一个精确的索引 您也可以将其视为 年龄 因此 4 个元素中的每一
  • 这个函数(for循环)空间复杂度是O(1)还是O(n)?

    public void check 10 for string i list Integer a hashtable get i if a gt 10 hashtable remove i 这是 O 1 还是 O n 我猜测 O n 但不是
  • 如何计算 3D Morton 数(交织 3 个整数的位)

    我正在寻找一种快速计算 3D Morton 数的方法 这个网站 http www graphics stanford edu seander bithacks html InterleaveBMN有一个基于幻数的技巧来处理 2D Morto
  • 贝尔曼福特算法可以有任意的边顺序吗?

    我刚刚开始学习新算法 但当我阅读 极客为极客而写的贝尔曼福特算法 时 我陷入了困境 http www geeksforgeeks org dynamic programming set 23 bellman ford algorithm h
  • 使用什么算法来确定使系统达到“零”状态所需的最小操作数?

    这是一种更通用的问题 不是特定于语言的 有关要使用的想法和算法的更多信息 系统如下 它登记朋友群体之间的小额贷款 Alice and Bill要去吃午饭 比尔的卡坏了 所以爱丽丝支付了他的餐费 10 美元 第二天Bill and Charl
  • JavaScript 中的埃拉托斯特尼筛法对大量数据无限运行

    我一直在尝试写埃拉托斯特尼筛法 http en wikipedia org wiki Sieve of EratosthenesJavaScript 中的算法 基本上我只是按照以下步骤操作 创建从 2 到 n 1 的连续整数列表 令第一个素
  • 删除近排序数组中未排序/离群元素

    给定一个像这样的数组 15 14 12 3 10 4 2 1 我如何确定哪些元素乱序并删除它们 在本例中为数字 3 我不想对列表进行排序 而是检测异常值并将其删除 另一个例子 13 12 4 9 8 6 7 3 2 我希望能够删除 4 和

随机推荐