news 2026/6/15 6:52:58

[算法设计与分析-从入门到入土] 分治法

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
[算法设计与分析-从入门到入土] 分治法

[算法设计与分析-从入门到入土] 分治法

个人导航

知乎:https://www.zhihu.com/people/byzh_rc

CSDN:https://blog.csdn.net/qq_54636039

注:本文仅对所述内容做了框架性引导,具体细节可查询其余相关资料or源码

参考文章:各方资料

文章目录

  • [算法设计与分析-从入门到入土] 分治法
  • 个人导航
  • 分治法divide and conquer
        • 1.找到多数元素
        • 2.最小 / 最大值查找
        • 3.第 k 小元素查找

分治法divide and conquer

分治范式:

  • 分割(divide):把原问题拆成p pp个规模更小的子问题 (p ≥ 1 p≥1p1)
  • 解决(conquer):如果子问题规模还不够小,就递归解决这些子问题
  • 合并(combine):把所有子问题的解合并起来,得到原问题的解
1.找到多数元素

多数元素: 出现次数 $ > \lfloor n/2 \rfloor$

1,3,2,3,3,4,3: 3是多数元素

1,3,2,3,3,4: 3不是多数元素

  1. 初始化:设候选值 x = A [1],计数器初始化为 1
  2. 扫描数组:从 A [2] 开始逐个扫描元素:
    • 若当前元素等于 x,计数器加 1
    • 若当前元素不等于 x,计数器减 1
  3. 终局判断:
    • 若全部扫描完成后计数器大于 0,返回 x 作为候选主元素
    • 若扫描至某元素 A [j](1 < j < n)时计数器归零,则对子数组 A [j+1…n] 递归调用本算法

-> 验证其是否真的是多数元素

例子: 4, 4, 4, 1, 2, 3, 5

当前元素与候选值 x 的关系计数器备注
4等于 x (初始)1
4等于 x2
4等于 x3
1不等于 x2
2不等于 x1
3不等于 x0计数器归零,触发递归
5-递归处理子数组 [5]

-> 5 在原数组中仅出现 1 次,远小于 7/2 = 3.5,因此该数组没有多数元素

2.最小 / 最大值查找

将数组 A 划分为两个子数组:A [ 1... n 2 ] A[1...\frac{n}{2}]A[1...2n]A [ n 2 + 1... n ] A[\frac{n}{2}+1...n]A[2n+1...n]

分别在两个子数组中查找最小值和最大值

最终返回两个最小值中的较小者and两个最大值中的较大者
C ( n ) = { 1 , n ≤ 2 2 C ( n 2 ) + 2 , n > 2 = 3 2 n − 2 \begin{align} C(n)&= \begin{cases} 1, \quad n \leq 2 \\ 2C(\frac{n}{2})+2, \quad n > 2 \end{cases} \\ &=\frac{3}{2}n-2 \end{align}C(n)={1,n22C(2n)+2,n>2=23n2

3.第 k 小元素查找

从数组A AA中选一个元素m m mmmm, 将A AA分为三个部分:
A 1 = { a ∣ a ∈ A ∩ a < m m } A 2 = { a ∣ a ∈ A ∩ a = m m } A 3 = { a ∣ a ∈ A ∩ a > m m } A_1=\{a|a\in A \cap a < mm\} \\ A_2=\{a|a\in A \cap a = mm\} \\ A_3=\{a|a\in A \cap a > mm\}A1={aaAa<mm}A2={aaAa=mm}A3={aaAa>mm}
三种情况判断第 k 小元素的位置:
A 1 : k ≤ ∣ A 1 ∣ A 2 : ∣ A 1 ∣ < k ≤ ∣ A 1 ∣ + ∣ A 2 ∣ A 3 : k > ∣ A 1 ∣ + ∣ A 2 ∣ \begin{align} A1&:\quad k\leq |A_1| \\ A2&:\quad |A_1|<k \leq |A_1|+|A_2| \\ A3&:\quad k > |A_1|+|A_2| \end{align}A1A2A3:kA1:A1<kA1+A2:k>A1+A2
关于mm的选择对效率的影响:

  • 最坏情况:每次选到最大/最小元素,时间复杂度Θ ( n 2 ) \Theta(n^2)Θ(n2)
  • 最好情况:每次选到中位数,时间复杂度O ( n ) O(n)O(n)

具体步骤: (共n个数)

  • 先分m组(行), 每组q = n m q=\frac{n}{m}q=mn个数
  • 各组取中位数, 在m个中位数中找到中位数的中位数
  • 统计小于,等于,大于该数的个数, 判断第k小元素在哪个集合中
  • 在该新的集合中继续上述步骤
  • 终止条件: 当集合数量小于阈值的时候, 直接排序

例子:
n = 25 n=25n=25个数, 找第k = ⌈ n / 2 ⌉ = 13 k=\lceil n/2 \rceil=13k=n/2=13小的数, 也就是中位数
(将直接排序的阈值改为6个)

第 k 小元素查找 -> 讨论时间复杂度:

先横着依次放中间行, 再纵着依次放对应列:

先: 将中位数从小到大放在中间行
再: 把各中间数的对应组顺序地从上到下排列

当分5组的时候(q = n / 5 q=n/5q=n/5),A 1 A_1A1A 3 A_3A3最少约为3 10 n \frac{3}{10}n103n-> 最多约为7 10 n \frac{7}{10}n107n:

若:
f ( n ) = { 0 , n = 0 b , n = 1 f ( ⌊ c 1 n ⌋ ) + f ( ⌊ c 2 n ⌋ ) + b n , n ≥ 2 f(n)= \begin{cases} 0, \quad n = 0 \\ b, \quad n = 1 \\ f(\lfloor c_1n \rfloor)+f(\lfloor c_2n \rfloor)+bn, \quad n \geq 2 \end{cases}f(n)=0,n=0b,n=1f(⌊c1n⌋)+f(⌊c2n⌋)+bn,n2
则:
f ( n ) = { O ( n l o g n ) , c 1 + c 2 = 1 O ( n ) , c 1 + c 2 < 1 f(n)= \begin{cases} O(nlogn), \quad c_1+c_2 = 1 \\ O(n), \quad c_1+c_2 < 1 \end{cases}f(n)={O(nlogn),c1+c2=1O(n),c1+c2<1

-> 当分五组时, q=n/5,T ( n ) ≤ T ( n 5 ) + T ( 7 10 n ) + Θ ( n ) T(n) \leq T(\frac{n}{5})+T(\frac{7}{10}n)+\Theta(n)T(n)T(5n)+T(107n)+Θ(n)
-> 则c 1 + c 2 < 1 c_1+c_2 < 1c1+c2<1, 为O ( n ) O(n)O(n)

q = n / 3 q=n/3q=n/3也就是分三组:

T ( n ) ≤ T ( n 3 ) + T ( 2 3 n ) + Θ ( n ) T(n) \leq T(\frac{n}{3})+T(\frac{2}{3}n)+\Theta(n)T(n)T(3n)+T(32n)+Θ(n)

->O ( n l o g n ) O(nlogn)O(nlogn)

q = n / 7 q=n/7q=n/7也就是分七组:

T ( n ) ≤ T ( n 7 ) + T ( 5 7 n ) + Θ ( n ) T(n) \leq T(\frac{n}{7})+T(\frac{5}{7}n)+\Theta(n)T(n)T(7n)+T(75n)+Θ(n)

->O ( n ) O(n)O(n)

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/6/10 9:02:40

大模型推理服务自动伸缩策略设计要点

大模型推理服务自动伸缩策略设计要点 在当前AI应用爆发式增长的背景下&#xff0c;大语言模型&#xff08;LLM&#xff09;正快速渗透到智能客服、内容生成、编程辅助等关键业务场景。然而&#xff0c;这些动辄数十亿甚至上千亿参数的模型&#xff0c;在实际部署中面临着严峻的…

作者头像 李华
网站建设 2026/6/10 16:18:42

在线电路仿真入门必看:零基础快速理解电子设计

在线电路仿真入门指南&#xff1a;从零开始玩转电子设计 你是否曾因为搭错一根线&#xff0c;烧掉一个电阻而懊恼&#xff1f; 是否想过&#xff0c;在没有示波器、面包板的情况下&#xff0c;也能“动手”做出一个会呼吸的LED灯、一个能放大声音的运放电路&#xff1f; 现在…

作者头像 李华
网站建设 2026/6/11 19:51:15

springboot_ssm基于web的小型公司人事培训报名管理系统java论文

目录 具体实现截图系统所用技术介绍写作提纲核心代码部分展示结论源码文档获取/同行可拿货,招校园代理 &#xff1a;文章底部获取博主联系方式&#xff01; 具体实现截图 springboot_ssm基于web的小型公司人事培训报名管理系统java论文 系统所用技术介绍 本毕业设计项目…

作者头像 李华
网站建设 2026/6/9 20:59:27

如何利用TensorRT提升广告点击率预估效率?

如何利用TensorRT提升广告点击率预估效率&#xff1f; 在现代互联网广告系统中&#xff0c;每一次用户刷新页面或点击链接的背后&#xff0c;都可能触发一次毫秒级的“决策风暴”——成百上千条候选广告需要在极短时间内完成打分与排序。而这场风暴的核心&#xff0c;正是点击…

作者头像 李华
网站建设 2026/6/10 13:50:06

springboot_ssm电影购票选座推荐网站的设计与实现java论文

目录具体实现截图系统所用技术介绍写作提纲核心代码部分展示结论源码文档获取/同行可拿货,招校园代理 &#xff1a;文章底部获取博主联系方式&#xff01;具体实现截图 springboot_ssm电影购票选座推荐网站的设计与实现java论文 系统所用技术介绍 本毕业设计项目基于B…

作者头像 李华
网站建设 2026/6/12 23:34:02

混合专家模型 (MoE) 深度解析

文章目录1. 引言&#xff1a;打破“不可能三角”2. MoE 的核心理念&#xff1a;全科医生 vs. 专家会诊3. 架构拆解与数学原理3.1 工作流程图3.2 数学公式4. 动态路由的时序逻辑5. 核心挑战与解决方案5.1 负载不均衡 (Load Imbalancing)5.2 显存与通信瓶颈6. 前沿演进&#xff1…

作者头像 李华