如何计算归并排序算法的时间复杂度?

2023-10-27

如何计算归并排序算法的时间复杂度?

什么是归并排序?

归并排序的概念十分简单,就是“分而治之”的思想。这里我直接从网上找了一份对归并排序算法的比较好的介绍排序算法

计算时间复杂度

关键是怎么计算时间复杂度?
我们在假设数组的长度为n的基础上进行归并排序,假设排序的总共用时为 T [ n ] T[n] T[n],则:
第一次,将数组对半分,分别对两个子数组进行排序,并合并两个有序数组,所需要的时间为
T [ n ] = T [ ⌈ n − 1 2 ⌉ ] + T [ ⌊ n + 1 2 ⌋ ] + Θ [ n ] T[n]=T[\lceil\frac{n-1}{2}\rceil]+T[\lfloor\frac{n+1}{2}\rfloor]+\Theta[n] T[n]=T[2n1]+T[2n+1]+Θ[n]
我们将其简写为
T [ n ] = 2 ⋅ T [ n 2 ] + Θ [ n ] T[n]=2\cdot{T[\frac{n}{2}]}+\Theta[n] T[n]=2T[2n]+Θ[n]
同理,第二次,继续将子数组对半分,并分别对两个子子数组进行排序,并合并两个有序数组,所需要的时间为
T [ n 2 ] = 2 ⋅ T [ n 4 ] + Θ [ n 2 ] T[\frac{n}{2}]=2\cdot{T[\frac{n}{4}]}+\Theta[\frac{n}{2}] T[2n]=2T[4n]+Θ[2n]
依照这个规律,我们计算 T [ n ] 、 T [ n 2 ] 、 T [ n 4 ] 。 。 。 、 T [ 2 ] 、 T [ 1 ] T[n]、T[\frac{n}{2}]、T[\frac{n}{4}]。。。、T[2]、T[1] T[n]T[2n]T[4n]T[2]T[1],且最终可得到下面这个式子:
T [ n ] = Θ [ n ] + 2 Θ [ n 2 ] + 4 Θ [ n 4 ] + . . . + n Θ [ 1 ] T [ n ] = n + 2 ⋅ n 2 + 4 ⋅ n 4 + . . . + n ⋅ 1 T[n]=\Theta[n]+2\Theta[\frac{n}{2}]+4\Theta[\frac{n}{4}]+...+n\Theta[1] T[n]=n+2\cdot\frac{n}{2}+4\cdot\frac{n}{4}+...+n\cdot1 T[n]=Θ[n]+2Θ[2n]+4Θ[4n]+...+nΘ[1]T[n]=n+22n+44n+...+n1
我们可以把 Θ [ n ] \Theta[n] Θ[n]理解为在 n n n时间内完成的程序,则
T [ n ] = n + 2 ⋅ n 2 + 4 ⋅ n 4 + . . . + n ⋅ 1 = n + n + n + . . . + n = n ⋅ l o g 2 n \begin{aligned} T[n]&=n+2\cdot\frac{n}{2}+4\cdot\frac{n}{4}+...+n\cdot1 \\&=n+n+n+...+n \\&=n\cdot{log_2{n}} \end{aligned} T[n]=n+22n+44n+...+n1=n+n+n+...+n=nlog2n
这里, l o g 2 n log_2{n} log2n是怎么冒出来的?就是因为一共有 l o g 2 n log_2{n} log2n n n n相乘(不懂的话,自己好好思考一下)。
因此,最终就可得到归并排序算法的时间复杂度为 n ⋅ l o g 2 n n\cdot{log_2{n}} nlog2n

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

如何计算归并排序算法的时间复杂度? 的相关文章

随机推荐

  • 【自学】记录Centos遇到的坑-网络连接失败

    Failed to start LSB Bring up down networking 问题 一 执行 service network restart 出现以下错误 Restarting network via systemctl Job
  • 蚂蚁算法matlab,蚁群算法(ACA)及其Matlab实现

    1基本原理 本质上也是一种概率算法 通过大概率收敛到最佳值 和其他的智能算法很相似 蚁群分泌的信息素存在正反馈 使得较佳的解 具有大概率被选到 当全局都选用较佳的解 变可以得到整体的最优解 2几个关键点 1 概率选择 受信息素浓度和启发函数
  • NETSDK1045 当前 .NET SDK 不支持将 .NET 6.0 设置为目标。请将 .NET 5.0 或更低

    vs2019解决 NETSDK1045 错误 一 平台描述 二 问题描述 三 问题原因 四 解决办法 一 平台描述 系统 Windows 10 VS Visual Stdio 2019 二 问题描述 我在下载了 微软官网 的WPF示例代码运
  • matlab求分量平方和,Matlab经典复习试题

    A 是三条边构成三角形的条件 B 是三条边不构成三角形的条件 C 构成三角形时逻辑值为真 D 不构成三角形时逻辑值为假 二 程序阅读理解 1 数学实验程序如下 syms x f 3 x 2 6 x 1 g x 2 x 3 R f g ezp
  • STM32-内存管理实验

    一 内存管理简介 1 如何在LCD上实现SD卡文件浏览 需要读取所有文件名到内存 然后显示到LCD 一般的方法是定义一个数组来存储所有文件名 1 需要知道最大文件名的长度 比如255字节 2 需要知道文件的个数 如果没有内存管理 则需要定义
  • 差分进化算法(Differential Evolution,DE)实例详解

    差分进化算法是 differential evolution DE 是基于群体智能理论的优化算法 是通过群体内个体间的合作与竞争而产生的智能优化搜索算法 对比进化计算 它保留了基于种群的全局搜索策略 采用实数编码 基于差分的简单变异操作和
  • SAP PO上传异步接口(PO从对方中间表读取数据)

    导语 最近的项目上出现了一个奇奇怪怪的需求 上传接口居然不是外围系统给我传输 而是他数据丢到他的中间表 然后PO去取过来 真就他不动 我自己动 下面说一下需要怎么来实现吧 其实跟PO下传接口写入中间表一样 只不过方向变了 还有一些小变动 这
  • HBASE列族不能太多的真相 (一个table有几个列族就有几个 Store)

    HRegionServer内部管理了一系列HRegion对象 每个HRegion对 应了table中的一个region HRegion中由多 个HStore组成 每个HStore对应了Table中的一个column family的存储 可以
  • Mac 快速打开终端快捷键

    Mac下没有打开终端的快捷键 需要自己设置 主要是利用Mac的Automator来创建打开终端的服务 并设置快捷键 直接看图说话 找到Automator 创建打开终端的服务 编写打开终端的命令 其中的 Terminal 改成其他的应用名就能
  • mysql高级教程

    mysql高级教程 1 索引相关 1 创建索引 创建索引 ALTER TABLE test test ADD INDEX myindex name USING BTREE CREATE INDEX myindex ON test name
  • 算法课四

    算法报告四 Dijkstra算法 最短距离 16122020 钟顺源 一 题目大意 给出一张图 并给定起点和终点 问起点到终点的最短距离是多少 有两个特殊要求 1 如果从顶点i到顶点j有不止一条最短路径 那么输出路段数最少者 2 如果具有最
  • 使用frp配置内网穿透

    1 服务端配置 服务端即在公网环境下的服务器 需配置frps服务 1 1 下载frp 下载地址是https github com fatedier frp releases 要注意下载的版本 由你的服务器机型决定 我下载的是frp 0 34
  • Windows 网络凭证

    前言 单位内部 员工之间电脑免不了要相互访问 eg 访问共享文件夹 这就引出网络凭证的概念 即你用什么身份访问对端计算机 实验环境 创建共享文件夹 WinSrv 2008上新建的文件夹sharedata 共享给任何人 任何人都是参与者 即具
  • matlab 随机函数 基于,[转载](zz)Matlab 随机函数

    随机函数 包括rand rands randn 根据MATLAB中的相关解释 rands函数一般是用在神经网络的权值和阈值的初始化时 范围是 1到1 rand函数 产生均匀分布的伪随机数 randn函数 正态分布的均值为0 方差为1的随机数
  • 【多尺度密集递归融合网络:超分】

    A novel image super resolution algorithm based on multi scale dense recursive fusion network 基于多尺度密集递归融合网络的图像超分辨率算法 随着卷积
  • Activity劫持实例与防护手段

    原文地址 http blog chinaunix net uid 29170659 id 4930737 html 本文只用于学习技术 提高大家警觉 切勿用于非法用途 什么叫Activity劫持 这里举一个例子 用户打开安卓手机上的某一应用
  • postman如何进行更新呢?

    一般来说 postman我们要用最新的版本 最新版有些比较好的特性 如何更新呢 第一种 postman是自动更新的 什么都不用设置 就会自动更新 更新的界面表现是 第二种 手动设置 打开postman 在file里面选择setting up
  • (七)图像处理中常用算子Laplacian\Sobel\Roberts\Prewitt\Kirsch

    1 拉普拉斯 Laplacian 算子 1 1基础介绍 最简单的各向同性导数算子是拉普赖斯算子 其具有旋转不变性 对于两个变量的函数 f x y f x y f
  • java将一个文件或者目录复制到另一个文件下

    java将一个文件或者目录复制到另一个文件下 列如 把 F cc下的所有文件复制到 F home下面 如果是文件的话那就是 F JSON JSON jpg 和 F JSON JSON jpg import java io import ja
  • 如何计算归并排序算法的时间复杂度?

    如何计算归并排序算法的时间复杂度 什么是归并排序 计算时间复杂度 什么是归并排序 归并排序的概念十分简单 就是 分而治之 的思想 这里我直接从网上找了一份对归并排序算法的比较好的介绍排序算法 计算时间复杂度 关键是怎么计算时间复杂度 我们在