• 分治策略思想:

    • 将原问题划分或者归结为规模较小的子问题。
    • 递归或迭代求解每一个问题。
    • 将子问题的解综合得到原问题的解。
  • 性质:

    1. 子问题与原问题具有相同的性质。
    2. 子问题的求解彼此独立。
    3. 划分时子问题的规模尽可能均衡。
  • 实现方式: 递归或迭代。

  • 二分检索:

算法 Binary Search(T,l,r,x)
输入:数组T,下标从l到r,数x;
输出:j // 若x在T中,j为下标,否则为0。
伪代码:l <—— 1;r <——n;
while l < = r do
m <——  ⌊(l + r)/2⌋ // m为T的中间位置,向下取整。
if T[m] = x then return m // x是中位数
else if T[m] > x then r <—— m - 1 // x 小于中间元素,归结成前半个数组。else l <—— m + 1
return 0;
  • 二分检索时间复杂度分析:
    W(n)= W(⌊n⁄2⌋)+1
    W(n)=1
    W(n)= ⌊log⁡n⌋+1
  • Java实现:
public static int BinarySearch(int[] T,int x,int l,int r){if(x < T[l] || x > T[r] || l > r){return 0;}int middle = (l + r) / 2;if(T[middle] > x){return BinarySearch(T, x, l, middle - 1);}else if(T[middle] < x){//比关键字小则关键字在右区域return BinarySearch(T, x, middle + 1, r);}else {return middle;}}
  • 二分归并排序
算法:Merge Sort (A,p,r)
输入:数组A[p...r]
输出:元素按从小到大排序的数组A
if p < r
then q <— ⌊(p + r)/2⌋ // 对半划分,向下取整。Merge Sort(A,p,q)  // 子问题1Merge Sort(A,q+1,r) // 子问题2Merge(A,p,q,r) // 综合解
  • Java实现:
class Mergesort {private void  mergeSort(int start,int end,int[]arr) {if(start>=end){return 0;}int mid=(start+end)/2;int left=start;int right=mid+1;//将序列二分成子序列mergeSort(start,mid,arr);mergeSort(mid+1,end,arr);//开辟一段数组存储子序列排序后的结果int []sort=new int[end-start+1];int i=0;//进行排序,将子序列已排好序的左右两部分序列合并while(left<=mid||right<=end){if(left>mid){sort[i++]=arr[right++];}else if(right>end){sort[i++]=arr[left++];}else{if(arr[left]<arr[right]){sort[i++]=arr[left];left++;}else{sort[i++]=arr[right];right++;}}}//序列覆盖if (sort.length >= 0) System.arraycopy(sort, 0, arr, start, sort.length);}
}
  • 二分归并排序时间复杂度分析:
    W(n)= 2W(n⁄2)+n-1
    W(1)=0
    W(n)= n log⁡n-n+1

分治算法的设计思想(二分检索、二分归并排序)相关推荐

  1. 3.分治算法的设计思想与分析方法: 芯片测试, 快速排序, 幂乘算法, 减少子问题数, 增加预处理

    本文内容为北大慕课课程的算法分析与设计的课程讲义, 将其整理为OneNote笔记同时添加了本人上课时的课堂笔记, 且主页中的思维导图就是根据课件内容整理而来, 为了方便大家和自己查看,特将此上传到CS ...

  2. 【算法设计与分析】13 分治策略的设计思想

    算法中很多方法都是可以采用分治策略进行设计与优化,那么什么是分治策略?如何使用分治策略进行算法的设计与分析? 文章目录 1. 分治策略的基本思想 1.1 二分检索的设计思想 1.2 二分归并排序的设计 ...

  3. 分治:分治和动态规划的区别,二分检索递归和迭代方式实现

    分治法 分治一般可以直接使用递归实现,在不考虑空间消费的情况下和迭代方式时间消耗相差不多 ======================================================= ...

  4. 【算法设计与分析】14 分治算法的一般描述和分析方法

    本文主要描述分治算法的一般描述和分析方法.衔接上一篇文章:[算法设计与分析]13 分治策略的设计思想 文章目录 1 分治算法的一般性描述 1.1 分支算法的时间分析 1.2 两类常见的递推方程与求解方 ...

  5. 【数据结构与算法】【算法思想】分治算法

    贪心算法 回溯算法 分治算法 动态规划 MapReduce本质就是分治算法,是Google大数据处理的三驾马车之一,另外两个是GFS和Bigtable.它在倒排索引,PageRank计算,网页分析等搜 ...

  6. 2.Python算法之分治算法思想

    1.什么是分治算法? 2.为什么需要分治算法? 3.分治算法基础 4.分治算法的解题一般步骤 5. 用分治算法--求顺序表中的最大值 5. 用分治算法--判断某个元素是否在列表中 6. 用分治算法-- ...

  7. 数据结构与算法--分治算法-最大子序列和问题

    分治算法 用于设计算法的一种常用技巧–分治算法(divide and conquer).分治算法由两部分组成: 分(divide):递归然后借机较小的问题(基础情况除外) 治(conquer):然后从 ...

  8. 选址问题java_学习使用分治算法来解决邮局选址问题(Java实现)

    邮局选址问题(分治算法) 前言 提示:在算法的学习过程中我们会遇到各种各样的算法思想,其中最常见的就有分治算法思想,而本文的问题邮局选址问题就是基于分治思想而去实现的一个日常问题 提示:以下是本文内容 ...

  9. 搞定面试算法系列 | 分治算法三步走

    戳蓝字"CSDN云计算"关注我们哦! 作者 | 江子抑 转自 | 编程拯救世界 主要思想 分治算法,即分而治之:把一个复杂问题分成两个或更多的相同或相似子问题,直到最后子问题可以简 ...

最新文章

  1. 以实用著称的《PHP与MySQL程序设计(第3版)》问世啦!
  2. 开源前后端分离在线考试系统
  3. 线上慢查询?试试这几个优化思路!
  4. C标准库assert.h实现
  5. 使用cpan安装perl模块
  6. java写一个web聊天工具_javaweb写的在线聊天应用
  7. ftp服务器PDF文件在线查看
  8. iOS底层探索之多线程(二)—线程和锁
  9. [翻译] Canvas 不用写代码的动画
  10. IOS开发之宏的深度学习
  11. 华为手机使用HiSuite升级和降级刷机方法
  12. vs2017 社区版
  13. 串口通信之波特率计算
  14. Win10专业工作站版本激活并获得数字权利的方法和密钥
  15. bzoj3332: 旧试题
  16. [CTF]QWE加密
  17. 【Enhanced Time-Frequency Representation and Mode Decomposition】翻译1
  18. [NOIP2011]铺地毯 D1 T1
  19. python如何画函数图像
  20. 第七章 卷积神经网络2(代码实现)

热门文章

  1. 导出swagger2生成的文档
  2. 数据结构(03)— 数据处理基本操作(数据的查找、新增、删除、修改)
  3. 2022-2028年中国动力锂电池用橡胶密封件行业研究及前瞻分析报告
  4. Python 生成器总结
  5. Java,Hello world 欢迎进入Java世界
  6. python 替换字符串的方法replace()、正则re.sub()
  7. Python 字典(Dictionary) get()方法
  8. 用0到9十个数字,每个数字使用一次,构成两个五位数a和b,并且a+20295=b.求a,b
  9. 王道考研 计算机网络笔记 第一章:概述计算机网络体系结构
  10. TVM性能评估分析(二)