算法设计3:分治法


一、分治法

1.含义

  • Divide(分):P into smaller problems P1, P2, …, Pk.(将大问题分成更小的子问题)
  • Conquer(治):by solving the (smaller) subproblems recursively.(递归地解决更小的子问题)
  • Combine(并):the solutions to P1, P2, …, Pk into the solution for P.(将子问题的解联合起来求出大问题的解)

例子:归并排序

  • Divide: Divide the n elements into two subsequences of n/2 elements each.(将n个元素的序列划分成两个n/2个元素的子序列)
  • Conquer: Sort the two subsequences recursively.(递归地排序两个子序列)
  • Combine: Merge the two sorted subsequences to produce the sorted answer.(合并两个已排序的子序列)

PS:理解(这三个部分互不交融,职能是各自独立的)

  • 分到不能再分才开始解:归并排序一直划分(递归)到排序一个元素(不能再划分)为止。
  • 解只是解最小问题的解:归并排序的解不做任何事情。
  • 并不是求解具体的最小问题的,只是负责将子问题的答案如何合并:负责将已经得到的两个排好的部分排序是并。

2. 例子

3. 时间复杂度

在这里插入图片描述

T ( n ) T(n) T(n) 是规模为n的问题的运行时间。

  • 最小划分规模:当问题规模小于等于 c 时,就不可继续划分了。
  • 划分结果:产生了 a 个子问题,每个子问题的规模是原始问题的 1/b
  • 划分时间 D(n):将规模为n的问题划分为子问题的时间
  • 合并时间 C(n):将子问题的解决方案合并为规模为n的原始问题的解决方案的时间

例子:归并排序

  • 最小规模 c=1
  • 划分产生 a=2 个子问题,每个子问题的规模是 1/b=1/2
  • 划分时间 D(n)=无(因为直接传参数⌊(p + r) / 2)⌋就行)
  • 合并时间 C(n)= Θ ( n ) \Theta(n) Θ(n)
    在这里插入图片描述
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值