当前位置: 首页 > news >正文

算法-分治算法

文章来源:
https://blog.csdn.net/weixin_45630258/article/details/126425400
欢迎各位大佬指点、三连

一、分治

1、定义:分治,也就是分而治之。

它的一般步骤是:

① 将原问题分解成若干个规模较小的子问题(子问题和原问题的结构一样,只是规模不一样)

② 子问题又不断分解成规模更小的子问题,直到不能再分解(直到可以轻易计算出子问题的解)

③ 利用子问题的解推导出原问题的解

分治策略非常适合用递归

需要注意的是:子问题之间是相互独立的


2、分治的应用

  • 快速排序
  • 归并排序
  • Karatsuba算法(大数乘法)

3、分治时间复杂度的计算–主定理


4、最大连续子序列和

子序列:按照原序列的排序顺序,从原序列取出部分元素

连续子序列:按照原序列的排序顺序,连续地从原序列取出部分元素

  • 举例:

    原序列:–2、1、–3、4、–1、2、1、–5、4

    子序列可以是:–2、1、1、4 还可以是:4、1、4 还可以是:2、1、–5、4 等等

    连续子序列可以是:–2、1、–3、4、–1 还可以是:–3、4、–1 还可以是:2、1、–5、4 等等

子串、子数组、子区间必须是连续的,子序列是可以不连续的

解法:分治

◼ 将序列均匀地分割成 2 个子序列

  • [begin , end) = [begin , mid) + [mid , end),mid = (begin + end) >> 1

◼ 假设 [begin , end) 的最大连续子序列和是 S[i , j) ,那么它有 3 种可能

  • [i , j) 存在于 [begin , mid) 中,同时 S[i , j) 也是 [begin , mid) 的最大连续子序列和
  • [i , j) 存在于 [mid , end) 中,同时 S[i , j) 也是 [mid , end) 的最大连续子序列和
  • [i , j) 一部分存在于 [begin , mid) 中,另一部分存在于 [mid , end) 中
    • [i , j) = [i , mid) + [mid , j)
    • S[i , mid) = max { S[k , mid) },begin ≤ k < mid
    • S[mid , j) = max { S[mid , k) },mid < k ≤ end

对于解:只在左边或者只在右边,可以直接使用 递归

对于解:在中间,一部分在左边,一部分在右边的情况:

  • 需要先 从中间mid开始统计[mid - 1, 左边某个元素] 统计出左边的最大值
  • 再从中间mid开始统计[mid, 右边某个元素] 统计出右边的最大值
  • 然后左边最大值+右边最大值,就是 横跨两个区域的解




如果本文对你有帮助的话记得给一乐点个赞哦,感谢!

http://www.lryc.cn/news/162202.html

相关文章:

  • react 实现监听逻辑
  • vue项目一个页面包含多个时间选择器的处理方案
  • 机器学习入门教学——决策树
  • 文献阅读:Chain-of-Thought Prompting Elicits Reasoning in Large Language Models
  • 从零开发一款ChatGPT VSCode插件
  • go基础09-Go语言的字符串类型
  • 【C++模拟实现】手撕AVL树
  • 如何重置 docker中的mariadb的root
  • 设计模式系列-原型模式
  • 家用电脑可以用做服务器吗
  • CRM软件管理系统的基本功能
  • 手机喊话应用实现思路
  • 【ARM CoreLink 系列 3 -- CCI-550 控制器介绍 】
  • 最长递增子序列 -- 动规
  • linux 进程管理命令
  • 第一章:计算机网络和因特网
  • Android后退堆栈
  • 网络原理(一)网络基础,包括IP ,网络相关的定义
  • Python语义分割与街景识别(2):环境搭建
  • stm32(GD32,apm32),开优化后需要特别注意的地方
  • LLVM 与代码混淆技术
  • R语言---使用runway进行机器学习模型性能的比较
  • C++斩题录|递归专题 | leetcode50. Pow(x, n)
  • 详解Redis之Lettuce实战
  • 【3】单着色器文件读取
  • 祝贺埃文科技入选河南省工业企业数据安全技术支撑单位
  • Chinese-LLaMA-Alpaca-2模型的测评
  • SLAM论文详解(5) — Bundle_Adjustment_LM(BALM)论文详解
  • C语言对单链表所有操作与一些相关面试题
  • 高防服务器如何抵御大规模攻击