IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 数据结构与算法 -> 算法设计与分析基础(七) -> 正文阅读

[数据结构与算法]算法设计与分析基础(七)

算法设计与分析基础(七):分治法

  • 基本思想

    将规模为 N 的问题分解为 k 个规模较小的子问题,使得这些子问题相互独立并可分别求解, 再将 k 个子问题的解“合并”成原问题的解. 如子问题的规模仍很大, 则反复分解直到问题小到可直接求解为止。
    在分治法中, 子问题的解法通常与原问题相同,自然导致递归过程。

  • 特点

    1. 算法适宜并行计算
    2. 算法的计算复杂度对应如下递归方程

    image-20211213014851439

预备知识

T(n)=aT(n/b)+f(n)递推式的解法

image-20211213015351513

合并排序

  1. 问题:将n个元素排成非递减顺序。

image-20211213015642046

  1. 算法思想
  • 若n为1, 算法终止; 否则,
  • 将n个待排元素分割成k (k=2) 个大致相等子集合A、B,
  • 对每一个子集合分别递归排序,
  • 再将排好序的子集归并为一个集合。
  1. 伪代码

    image-20211213020007365

    Merge(B,C,A):

    image-20211213211255036

  • 结论

    image-20211213212435836

    缺点:需要线性的额外空间。

    ? 虽然合并也可以做到“在位”,但导致算法过程过于复杂。

快速排序

算法思路:对于输入A[0… n-1],按以下三个步骤进行排序:

  1. 元素划分

    取A中的一个元素为支点(pivot), 将A[0…n-1]划分成3段: A[0…s-1], A[s ], A[s+1…n-1], 使得

    image-20211213213418062

    下标s在划分过程中确定。

  2. 递归排序

    递归调用快速排序法 分别对A[0…s-1]和A[s+1…n-1]排序。

  3. 有序段串接

    将已经有序的 A[0…s-1], A[s], A[s+1…n-1] “连接”成 整体有序的A[0…n-1]。

分区的例子(双向扫描)

image-20211213214737171

伪代码

算法 Partition( A[l..r] )
    // 输入:子数组A[l..r] 
    // 输出:分划点/基准点pivot的位置
begin   p ← A[l]; i ← l;   j ← r+1;
     repeat
     	 repeat i ←i + 1 until A[i] ≥ p ;
           repeat    j ← j – 1    until A[j] ≤ p ;
           swap ( A[i], A[j] )
     until i ≥ j ; 
     swap ( A[i], A[j] );   
     swap ( A[l], A[j] )return j;
end

快速排序

If   l < r
      	s ← Partition( A[l..r] )
      	QuickSort( A[l..s-1] )
     	QuickSort( A[s+1..r] ) 

算法复杂度满足以下方程:

image-20211213215408244

上式依赖于s的位置。partition的基本操作:比较
Partition的最坏情况:
已经具有增序,按照上述算法描述,对于长度为n的数组一次划分,如果出现指针交叉,所执行的比较是 n+1 次(工作指针的边界元素的比较),即Θ(n)。

  • 效率分析

最坏情况(已具有增序):在进行了n+1次比较后建立了分区,还会对数组进行排序, 继续到最后一个子数组A[n-2…n-1]。总比较次数为:

image-20211213215818438

最好情况:每次都是等分

image-20211213215857537

平均复杂度:分裂点有可能在一次分区后出现在每个位置

设每种情况出现的概率均等,即均为是1/n,则平均复杂度满足如下递归方程:

image-20211213220047309

总结

image-20211213220109027

  数据结构与算法 最新文章
【力扣106】 从中序与后续遍历序列构造二叉
leetcode 322 零钱兑换
哈希的应用:海量数据处理
动态规划|最短Hamilton路径
华为机试_HJ41 称砝码【中等】【menset】【
【C与数据结构】——寒假提高每日练习Day1
基础算法——堆排序
2023王道数据结构线性表--单链表课后习题部
LeetCode 之 反转链表的一部分
【题解】lintcode必刷50题<有效的括号序列
上一篇文章      下一篇文章      查看所有文章
加:2021-12-14 16:12:59  更:2021-12-14 16:14:29 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/26 16:42:02-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码