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

20251025 分治总结

分治算法核心

将复杂问题分解为多个相似子问题,通过递归求解子问题并合并结果获得原问题解。需满足问题可分解、子问题独立、解可合并三个基本条件。

汉诺塔实现

移动n个圆盘时:

  • 将n-1个盘从起始柱移到过渡柱
  • 移动最底层盘到目标柱
  • 将n-1个盘从过渡柱移到目标柱

时间复杂度为O(2^n),空间复杂度O(n)由递归栈深度决定。

归并排序

采用分治策略的稳定排序算法:

  • 递归划分数组至单个元素
  • 双指针合并有序子数组
  • 使用哨兵节点简化边界判断

时间复杂度稳定为O(nlogn),空间复杂度O(n)来自临时数组。实际应用中可通过以下方式优化:

  • 对小规模子数组切换至插入排序
  • 原地归并减少内存消耗
  • 非递归实现避免栈溢出
#include<bits/stdc++.h>
using namespace std;
int a[100005],b[100005];
void msort(int L,int r){if(L==r)return;int mid=(L+r)/2;msort(L,mid);msort(mid+1,r);int l=L,k=mid+1,cs=0;while(l<=mid&&k<=r){if(a[l]<a[k]){b[++cs]=a[l++];}else{b[++cs]=a[k++];}}if(l<=mid){while(l<=mid){b[++cs]=a[l++];}}if(k<=r){while(k<=r){b[++cs]=a[k++];}}for(int i=L;i<=r;i++){a[i]=b[i-L+1];}
}
int main(){int n;cin>>n;for(int i=1;i<=n;i++){cin>>a[i];}msort(1,n);for(int i=1;i<=n;i++){cout<<a[i]<<" ";}return 0;
}
http://www.dtcms.com/a/528065.html

相关文章:

  • CentOS上安装dpkg的方法
  • 【C++ 泛型编程】基于哈希表封装 unordered_set(附完整源码解析)
  • 【Docker】docker部署一个服务
  • 【C++】set map 的使用
  • mormot.net.sock.pas的总体设计分析
  • 上海企业网站制作哪家专业wordpress适合做大型网站吗
  • 建设银行网站怎么看不见余额数字展馆设计
  • 【数组二分查找+数组反转】2022-11-19
  • 【新版发布】标准版PHP v5.6.4正式版,优化部分用户体验
  • Spring Boot3零基础教程,Profile 环境隔离用法,笔记55
  • 【MATLAB例程】二维环境定位,GDOP和CRLB的计算,锚点数=4的情况(附代码下载链接)
  • 英语“近音“易混单词
  • 代码随想录Day62|总结篇
  • 基于VMware和Cent OS的Docker Engine安装与配置
  • 十七、OpenCV中HighGUI模块的介绍和使用
  • 【JVM】详解 编译器原理与优化技术
  • 良好形象的重要性----反思
  • kali抓包流量
  • Python 正则表达式深度解析与实战指南
  • 开源 Linux 服务器与中间件(十二)FRP内网穿透应用
  • 石家庄网站建设王道下拉棒wordpress 类似
  • 基于AT89C52单片机的计算器设计与仿真
  • AI研究-112 DeepSeek-OCR 发展背景 走红原因 新型任务与潜在研究方向 详细分析 附最小运行测试
  • STC32G144K246,高速PWM@240Mhz 运行测试
  • OpenHarmony轻量级内核LiteOS-M技术详解与应用实践
  • hive自定义函数
  • 做新媒体每天必看的网站wordpress exif
  • Elasticsearch从入门到进阶——分布式特性
  • Elasticsearch并发更新冲突问题与解决
  • 数据结构14:查找