合并算法时间复杂度计算
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
T(n) <= 2T(n/2) + O(n),
或 T(n) <= 2T(n/2) + cn (当 n > 2时,T(2) <= c)
从这个关系式中并不能明显看出 T(n) 是什么类型的函数, 所以我们需要想办法解出这个关系式,也就是递归求解。
方法求解有两种基本的方法:
1、最自然的方法是展开关系式,通过分 析最初几级的运行时间来得到一个通式, 或者说是规律,然后把每一级的运行时 间相加,即求得总的运行时间。
计算机科学中,算法的时间复杂度是一个函数, 它定量描述了该算法的运行时间。这是一个关于 代表算法输入值的字符串的长度的函数。时间复 杂度常用大O符号表述,不包括这个函数的低阶 项和首项系数。使用这种方式时,时间复杂度可 被称为是渐近的,它考察当输入值大小趋近无穷 时的情况。
用 T(n) 表示输入大小为 n 的数组时合并排序最坏 的运行时间。假设 n 是偶数。排序需要 O(n) 时间 把输入分成两个大小为 n/2 的子数组,然后对每个 子数组排序需要 T(n/2)。最后需要 O(n) 把结果合 并起来。所以我们得到这个关系式:
三放三拿来上课, 知识、方法双收获。 算法具有四性质: 输入、输出、确定、有限。 算法分析话时空, 大O大Ω最常用。 勤学勤练勤思考, 登高自卑千古理!
求和:对于大小为n的问题,总的层数还是不变,所 以
令 r = q/2,则上式变成了 这里用到了几何级数的一个公式。如果我们有 等式两边同时乘以r得到 两式相减得到
所以
回到T(n)上来。因为r=q/2是常数,所以
现在问题变成了求 当a>1, b>1时
。这里用上对数的换底公式, 。
所以 最终得到
从结果看得出,运行时间是大于线性的因为
合并排序的时间复杂度计算
通信1304班:鲁信金、易浩宇、刘子雄
目录 CONTENT
01合并排序 02时间复杂度 03方法及计算 04 如何学习
合并排序是建立在归并操作上的一种有效的排 序算法。该算法是采用分治法(Divide and Conquer)的一个非常典型的应用。合并排序法 是将两个(或两个以上)有序表合并成一个新 的有序表,即把待排序序列分为若干个子序列, 每个子序列是有序的。然后再把有序子序列合 并为整体有序序列。将已有序的子序列合并, 得到完全有序的序列;即先使每个子序列有序, 再使子序列段间有序。若将两个有序表合并成 一个有序表,称为2-路归并。合并排序也叫归 并排序。
还是用几何级数可以得出它最终收敛于2。所以
通过对上面三种情况,q = 1, q = 2, q > 2的分析我们得出三种不同的运行时间。 q = 1时,运行时间是线性的。q = 2时是 O(nlogn)。q > 2 时是多项式级数。造成这 种差别的原因主要在于在递归时大部分的工 作完成的阶段。q = 1时,第0级就已经完成 了一半的工作,而当q > 2时,大部分工作却 是在递归底层完成。所以 q = 2可以说是介 于两者之间的分水岭 – 每一层完成工作的 总量是相同的,给了我们较优的O(nlogn)的 运行时间。
2、得出规律:可以看到在第 j 级时,我们有2j个 子数组,每个大小为 cn/2j,分别需要cn/2j时间, 所以这级总的运行时间为2j(cn/2j) = cn.
3、求和:我们已经求得每一级需要的运行时间。对 于一个大小为 n 的数组,递归最多有logn层,所以 总的运行时间为 O(nlogn)。
更通用的递归式:
。
q=4时运行时间是O(n2)。
q=1的情况:
•分析:第0级时,只有一个大小为n的问题,需要cn时 间。第1级时,问题大小为n/2,需要cn/2时间。第2级 时,问题大小为n/4,需要cn/4时间。 •规律:我们看到在任意级j都只有一个问题,大小为 n/2j,需要cn/2j时间来完成。 •求和:总的层数还是logn。
还是采用基本的步骤展开:
•分析:这里我们假设 q=3。在第0级时,只有一个 大小为n的问题,需要cn时间。在第1级,我们有q个 子问题,每个大小n/2,需要cn/2时间,所以总的时 间为(q/2)cn。在第2级,有q2个字问题,每个大小 n/4,需要cn/4时间,总的时间为(q2/4)cn。
•得出规律:在任意一级j,有qj个字问题,每个大 小为n/2j,所以总的时间为qj(cn/2j) = (q/2)jcn。
2、第二种方法是先猜出一个觉得合理的 解,然后代入原来的关系式中验证。
展开递归式基本的步骤:
1、分析最初的几级:在第0级时,我们只有一个大 小为 n 的数组,这里需要最多 cn 时间。在第1级, 我们有两个子数组,每个大小为 n/2,分别需cn/2 时间,所以总的时间是 2*(cn/2) = cn。在第2级, 我们有四个子数组,每个大小为 n/4,分别需要 cn/4 时间,所以总的时间还是 4*(cn/4) = cn。
上面的分析都是基于每个问题被分成2个子问题。如果现在我们把 每个问题分成 q 个大小为 n/2 的子问题,我们得到一个更通用的递 归式
T(n) <= qT(n/2)பைடு நூலகம்+ cn 当 n>2时,T(2) <= c
当 q=2时就是我们 上面分析的情况。 接下来我们分析 q>2 和 q=1的情况。
q>2的情况:
或 T(n) <= 2T(n/2) + cn (当 n > 2时,T(2) <= c)
从这个关系式中并不能明显看出 T(n) 是什么类型的函数, 所以我们需要想办法解出这个关系式,也就是递归求解。
方法求解有两种基本的方法:
1、最自然的方法是展开关系式,通过分 析最初几级的运行时间来得到一个通式, 或者说是规律,然后把每一级的运行时 间相加,即求得总的运行时间。
计算机科学中,算法的时间复杂度是一个函数, 它定量描述了该算法的运行时间。这是一个关于 代表算法输入值的字符串的长度的函数。时间复 杂度常用大O符号表述,不包括这个函数的低阶 项和首项系数。使用这种方式时,时间复杂度可 被称为是渐近的,它考察当输入值大小趋近无穷 时的情况。
用 T(n) 表示输入大小为 n 的数组时合并排序最坏 的运行时间。假设 n 是偶数。排序需要 O(n) 时间 把输入分成两个大小为 n/2 的子数组,然后对每个 子数组排序需要 T(n/2)。最后需要 O(n) 把结果合 并起来。所以我们得到这个关系式:
三放三拿来上课, 知识、方法双收获。 算法具有四性质: 输入、输出、确定、有限。 算法分析话时空, 大O大Ω最常用。 勤学勤练勤思考, 登高自卑千古理!
求和:对于大小为n的问题,总的层数还是不变,所 以
令 r = q/2,则上式变成了 这里用到了几何级数的一个公式。如果我们有 等式两边同时乘以r得到 两式相减得到
所以
回到T(n)上来。因为r=q/2是常数,所以
现在问题变成了求 当a>1, b>1时
。这里用上对数的换底公式, 。
所以 最终得到
从结果看得出,运行时间是大于线性的因为
合并排序的时间复杂度计算
通信1304班:鲁信金、易浩宇、刘子雄
目录 CONTENT
01合并排序 02时间复杂度 03方法及计算 04 如何学习
合并排序是建立在归并操作上的一种有效的排 序算法。该算法是采用分治法(Divide and Conquer)的一个非常典型的应用。合并排序法 是将两个(或两个以上)有序表合并成一个新 的有序表,即把待排序序列分为若干个子序列, 每个子序列是有序的。然后再把有序子序列合 并为整体有序序列。将已有序的子序列合并, 得到完全有序的序列;即先使每个子序列有序, 再使子序列段间有序。若将两个有序表合并成 一个有序表,称为2-路归并。合并排序也叫归 并排序。
还是用几何级数可以得出它最终收敛于2。所以
通过对上面三种情况,q = 1, q = 2, q > 2的分析我们得出三种不同的运行时间。 q = 1时,运行时间是线性的。q = 2时是 O(nlogn)。q > 2 时是多项式级数。造成这 种差别的原因主要在于在递归时大部分的工 作完成的阶段。q = 1时,第0级就已经完成 了一半的工作,而当q > 2时,大部分工作却 是在递归底层完成。所以 q = 2可以说是介 于两者之间的分水岭 – 每一层完成工作的 总量是相同的,给了我们较优的O(nlogn)的 运行时间。
2、得出规律:可以看到在第 j 级时,我们有2j个 子数组,每个大小为 cn/2j,分别需要cn/2j时间, 所以这级总的运行时间为2j(cn/2j) = cn.
3、求和:我们已经求得每一级需要的运行时间。对 于一个大小为 n 的数组,递归最多有logn层,所以 总的运行时间为 O(nlogn)。
更通用的递归式:
。
q=4时运行时间是O(n2)。
q=1的情况:
•分析:第0级时,只有一个大小为n的问题,需要cn时 间。第1级时,问题大小为n/2,需要cn/2时间。第2级 时,问题大小为n/4,需要cn/4时间。 •规律:我们看到在任意级j都只有一个问题,大小为 n/2j,需要cn/2j时间来完成。 •求和:总的层数还是logn。
还是采用基本的步骤展开:
•分析:这里我们假设 q=3。在第0级时,只有一个 大小为n的问题,需要cn时间。在第1级,我们有q个 子问题,每个大小n/2,需要cn/2时间,所以总的时 间为(q/2)cn。在第2级,有q2个字问题,每个大小 n/4,需要cn/4时间,总的时间为(q2/4)cn。
•得出规律:在任意一级j,有qj个字问题,每个大 小为n/2j,所以总的时间为qj(cn/2j) = (q/2)jcn。
2、第二种方法是先猜出一个觉得合理的 解,然后代入原来的关系式中验证。
展开递归式基本的步骤:
1、分析最初的几级:在第0级时,我们只有一个大 小为 n 的数组,这里需要最多 cn 时间。在第1级, 我们有两个子数组,每个大小为 n/2,分别需cn/2 时间,所以总的时间是 2*(cn/2) = cn。在第2级, 我们有四个子数组,每个大小为 n/4,分别需要 cn/4 时间,所以总的时间还是 4*(cn/4) = cn。
上面的分析都是基于每个问题被分成2个子问题。如果现在我们把 每个问题分成 q 个大小为 n/2 的子问题,我们得到一个更通用的递 归式
T(n) <= qT(n/2)பைடு நூலகம்+ cn 当 n>2时,T(2) <= c
当 q=2时就是我们 上面分析的情况。 接下来我们分析 q>2 和 q=1的情况。
q>2的情况: