NTU课程笔记 MAS714(8) 分治与排序

1 分治主要思想

  • 将问题分割成多个子问题(divide )
  • 递归地解决问题
  • 把子问题的结果合并成总问题的结果(conquer)

2 排序

2.1 插入排序

假设输入是A[1...n]

 2.1.1 时间复杂度

令T(n)表示排序n个元素的时间复杂度

于是我们有

 2.2 合并排序

        在第三步合并的时候,我们需要创建大小为n的数组C,从左向右扫描A和B,将小的元素放入C中,然后将相应的指针向后移动

2.2.1 时间复杂度

 那么,如何计算这个呢?我们使用递归树来计算之

1)假设元素个数n是2的幂,root为n的递归树表示T(n)

表示递归树T(n)是由两棵子树T(n/2)和自己本身root的值O(n)相加求得的

那么整个T(n)可以表示为: 

不难发现,递归树每一层自己的值都是O(n)数量级的

所以整棵递归树T(n)=O(n)*O(树的深度)

由于递归树是一棵二叉树,所以对于有n个节点,它的深度为O(logn)

所以T(n)=O(nlogn)

2)假设元素个数不是2的幂,我们验证一下T(n)是不是依然是O(nlogn)

所以合并排序的时间复杂度是O(nlogn) 

另一种解法:换元迭代

3 主定理 

可以想成:哪个大T(n)就跟哪个

3.1 证明主定理:

使用换元迭代法

说明一下最后一行 

\frac{n}{b^k}=1 \rightarrow k=\log_{b}^n

a^k=a^{\log_b^n}=n^{log_b^a} (两边取logb即可说明) 

  • 情况1  

 

 情况2 

 

 情况3 

  

3.2 主定理举例

T ( n ) = 2T ( n/2 ) + n
a=2,b=2——>f(n)=Θ(n)
所以T(n)=Θ(nlogn)

3.2.1 不能使用主定理的例子

和2.2.1 解法1一样

 3.2.2 递推方程中\lceil x \rceil , \lfloor x \rfloor的处理

先猜想解,然后用数学归纳法证明

 

4 快排

 4.1 时间复杂度

 

 

每一层之和也是O(n),一共也是O(logn)层【“下降”得最慢得是3/4那一系,那一次有层】

 所以总的时间复杂度也是O(nlogn)

 定理:快排的期望时间复杂度是O(nlogn)

期望什么呢?不同的输入,会得到不同的执行时间。对于一种固定的取pivot的方法,会存在一些输入,使得算法的时间复杂度来到O(n^2)

4.1.1 随机算法

        随机算法是得到一系列随机数字,在执行过程中做出随机决策的算法

        它有两个分支:

        蒙特卡洛算法:执行固定数量级步数,并且生成一个算法,正确率大于等于1/3

                ——O(n^2)级蒙特卡洛算法

                ——为什么是1/3?这个不重要,别的数字也可以,只要是一个actual number即可

                        比如我进行一次实验,那么成功的概率是1/3,失败的概率是1-1/3=2/3

                        进行两次实验,那么成功的概率是1-(2/3)*(2/3)=5/9,失败的概率是1-5/9=4/9

                        进行三次实验,成功的概率是19/27,失败的概率是8/27   

        拉斯维加斯算法:始终得出对的结果,执行时间是随机变量。

4.1.2 用拉斯维加斯算法看快排(随即快排)

        拉斯维加斯算法,运行时间是一个多项式级的随机变量

        使用标准快排,每一次随机选择一个点作为pivot点

                

         所以说,固定取pivot的方法,随机一种输入;和固定输入,随机取pivot,两者的时间复杂度相似。

  

5 基于比较的排序算法的下边界

 证明方法:决策树:

        任何一个基于比较的算法都可以用决策树来模拟:

                1)决策树的树叶是一种input元素的排列方式

                2)树的深度是一次计算最多的比较次数

一个基于比较的算法可以用用决策树来模拟

        ——一共有n!中不同的排列方法

                ——>决策树需要有n!个叶子

                ——>有n!片叶子的树至少需要O(log(n!))=O(nlogn)的深度

——>任何一个排序对应的决策树,至少O(nlogn)

5.1 不基于比较的排序算法

假设所有的值都在1~m之间:

 时间复杂度是O(n+m) 【一开始建m个元素的数组O(m)+遍历每个元素进行计数O(n)】

6 其他分治的例子

6.1 芯片测试

6.1.1 题目描述

6.1.2 解题思路

                

 6.1.3 复杂性分析

每一轮分治至少可以减少一半的规模 

6.2 求幂

6.2.1 问题描述

6.2.2 解题思路

6.2.3 复杂性分析 

 6.2.4 求幂的拓展应用:分治法求解斐波那契数列

 

 见NTU 课程笔记:MAS714(9) 动态规划_UQI-LIUWJ的博客-CSDN博客

 

 

 我们证明一下

首先\begin{bmatrix} F_2 & F_1\\ F_1 & F_0 \end{bmatrix} =\begin{bmatrix} 1 & 1\\ 1 & 0 \end{bmatrix}满足条件

假设\begin{bmatrix} F_{n} & F_{n-1}\\ F_{n-1} & F_{n-2} \end{bmatrix}以及之前的矩阵均满足条件

那么根据定义

\begin{bmatrix} F_{n+1} & F_n\\ F_n & F_{n-1} \end{bmatrix}=\begin{bmatrix} F_n +F_{n-1} & F_{n-1}+F_{n-2}\\ F_{n-1}+F_{n-2} & F_{n-2}+F_{n-3} \end{bmatrix} =\begin{bmatrix} F_n & F_{n-1}\\ F_{n-1} & F_{n-2} \end{bmatrix} +\begin{bmatrix} F_{n-1} & F_{n-2}\\ F_{n-2} & F_{n-3} \end{bmatrix}

 ={\begin{bmatrix} 1 & 1\\ 1 & 0 \end{bmatrix}}^{n-1}+{\begin{bmatrix} 1 & 1\\ 1 & 0 \end{bmatrix}}^{n-2} ={\begin{bmatrix} 1 & 1\\ 1 & 0 \end{bmatrix}}^{n-2}\times({\begin{bmatrix} 1 & 1\\ 1 & 0 \end{bmatrix}}+{\begin{bmatrix} 1 & 0\\ 0 & 1 \end{bmatrix}})

={\begin{bmatrix} 1 & 1\\ 1 & 0 \end{bmatrix}}^{n-2} \times {\begin{bmatrix} 2 & 1\\ 1 & 1 \end{bmatrix}} ={\begin{bmatrix} 1 & 1\\ 1 & 0 \end{bmatrix}}^{n-2} \times {\begin{bmatrix} 1 & 1\\ 1 & 0 \end{bmatrix}}^2 ={\begin{bmatrix} 1 & 1\\ 1 & 0 \end{bmatrix}}^{n}

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

UQI-LIUWJ

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值