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

企业网站设计专业好吗胶州房产网

企业网站设计专业好吗,胶州房产网,怎么修改公司网站图片,商城网站建设是 什么软件分治算法(Divide and Conquer)是一种经典的算法设计思想,核心是 “分而治之”—— 将复杂问题拆解为更小的子问题,通过解决子问题并合并结果,最终得到原问题的解。 核心思想 将一个规模为 n 的复杂问题,分…

分治算法(Divide and Conquer)是一种经典的算法设计思想,核心是 “分而治之”—— 将复杂问题拆解为更小的子问题,通过解决子问题并合并结果,最终得到原问题的解。

核心思想

将一个规模为 n 的复杂问题,分解为 k 个规模较小且结构与原问题相似的子问题(通常 \(k=2\));递归解决这些子问题(若子问题足够小,则直接求解);最后将子问题的解合并,得到原问题的解。

基本步骤

分治算法的执行过程可归纳为三步:

  1. 分解(Divide) 将原问题拆分为若干个规模更小、结构相同的子问题(例如,将长度为 n 的数组分为两个长度为 \(n/2\) 的子数组)。

  2. 解决(Conquer) 若子问题规模足够小(如仅含 1 个元素),直接求解;否则,递归分解子问题并求解。

  3. 合并(Combine) 将子问题的解合并为原问题的解(例如,将两个有序子数组合并为一个有序数组)。

适用条件

并非所有问题都适合分治,需满足以下条件:

  • 问题可分解为若干个规模较小的子问题,且子问题与原问题结构相似;
  • 子问题相互独立(无重叠),否则合并时可能需要处理重复计算(此时更适合动态规划);
  • 子问题的解可有效合并为原问题的解;
  • 最小子问题可直接求解(无需再分解)

分治与其他算法的区别

  • 与递归:分治是思想,递归是实现方式(分治常通过递归实现,但也可迭代);
  • 与动态规划:分治适用于子问题独立的场景,动态规划适用于子问题重叠(需避免重复计算)的场景;
  • 与贪心算法:分治强调 “分解 - 合并”,贪心强调 “局部最优→全局最优”,适用场景不同。

经典案例

归并分治、

算法讲解022【必备】归并分治_哔哩哔哩_bilibilihttps://www.bilibili.com/video/BV1L14y1B7ef/?spm_id_from=333.1387.collection.video_card.click&vd_source=cdc2a34485eb016f95eae1a314b1a620计算数组的小和_牛客题霸_牛客网https://www.nowcoder.com/practice/edfe05a1d45c4ea89101d936cac32469

#include <iostream>
#include <vector>
using namespace std;const int MAXN = 100001;
int arr[MAXN];
int help[MAXN];
int n;// 返回跨左右产生的小和累加和,合并左右两个有序数组
long long merge(int l, int m, int r) {// 统计跨左右的小和long long ans = 0;//1      3     5     2    4    6//             m//       i           //                        j//sum=1+3+5for (int j = m + 1, i = l, sum = 0; j <= r; j++) {//一轮while循环结束后,回到for循环,i会重新赋值//每一轮for循环j是固定的,可能对应多轮while循环,每一轮是i指针在动while (i <= m && arr[i] <= arr[j]) {sum += arr[i++];// cout<<i-1<<"\n"<<j<<'\n';// cout<<"sum="<<sum<<'\n';}ans += sum;// cout<<"ans="<<ans<<'\n'<<"--------"<<'\n';}// 归并排序合并两个有序数组int i = l;int a = l;int b = m + 1;while (a <= m && b <= r) {help[i++] = arr[a] <= arr[b] ? arr[a++] : arr[b++];}while (a <= m) {help[i++] = arr[a++];}while (b <= r) {help[i++] = arr[b++];}// 将合并结果复制回原数组for (i = l; i <= r; i++) {arr[i] = help[i];}return ans;
}// 返回arr[l...r]范围上的小和累加和,同时将arr[l..r]排序,这里用到了分治思想,递归来实现
long long smallSum(int l, int r) {if (l == r) {//基本情况/终止条件/return 0;}int m = (l + r) / 2;//二分return smallSum(l, m) + smallSum(m + 1, r) + merge(l, m, r);//自我调用
}int main() {while (cin >> n) {for (int i = 0; i < n; i++) {cin >> arr[i];}cout << smallSum(0, n - 1) << endl;}return 0;
}

归并排序模板

杂项 | 算竞常用 C++ 代码片段 - 颢天笔记https://io.zouht.com/174.html#cl-35先用其他人的

const int MAXN = 100;
int tmp[MAXN];
void merge_sort(int arr[], int l, int r)
{if (l >= r)return;int mid = (l + r) / 2;merge_sort(arr, l, mid);merge_sort(arr, mid + 1, r);int i = l, j = mid + 1, k = 0;while (i <= mid && j <= r){if (arr[i] <= arr[j])tmp[k++] = arr[i++];elsetmp[k++] = arr[j++];}while (i <= mid)tmp[k++] = arr[i++];while (j <= r)tmp[k++] = arr[j++];for (int m = l, n = 0; m <= r; m++, n++)arr[m] = tmp[n];
}

http://www.dtcms.com/a/477826.html

相关文章:

  • 环境变量完全指南:用 Vite 把「配置」玩出花
  • 深入解析JAVA虚拟线程
  • 不同设计牙周探针在深牙周袋探查中的精确性与局限性比较
  • 三极管分类
  • Leetcode 3710. Maximum Partition Factor
  • 亚马逊,塔吉特采购测评:高砍单率核心原因及技术破解策略
  • SQLite3数据库——Linux应用
  • 人机关系中“看不见的手”
  • 上街区网站建设做网站用什么系统好
  • k8s cert-manager cert-manager-webhook-xxx pod 证书过期问题处理
  • 宝塔服务器磁盘爆满:占用50G磁盘空间的.forever日志文件处理导致服务崩溃的教训
  • Docker资源限制全解析
  • 毫米级的安全舞蹈
  • 成都网站专业制作一造和一建哪个难度大
  • 解码AI智能体的大脑:Function Calling 与 ReAct 策略深度对决
  • K8s多租户方案指南--图文篇
  • 去一个新公司~重新设置git信息,clone项目 ~需要做的
  • wordpress 自动标签插件廊坊seo推广
  • Abase 数据库:永久关闭 misopt_preventing 选项的方法
  • 基于单片机的智能洗碗机设计
  • 网站策划书ppt9377白蛇传奇
  • 从Wireshark到Mitmproxy:网络数据侦探——抓包工具在爬虫开发中的艺术与科学之“HTTPS全流量解密实战”
  • HTTP与HTTPS的五大核心区别
  • 关于2025.10.13力扣每日的学习
  • Hive 删除分区语句卡死问题
  • 19.1 TCP 和 UDP 有什么区别?
  • 汇编和C语言结构
  • 单页网站的营销高端渠道开发
  • 定制网站建设公司哪家便宜seo免费课程
  • 【密码学实战】openHiTLS server命令行:搭建国密标准安全通信服务器