首页 > 其他分享 >分治的原理

分治的原理

时间:2024-11-19 12:45:51浏览次数:3  
标签:递归 求解 分治 出解 问题 解决 原理

当我们要求解一个数据规模为 n 且 n 取值又相当大的问题时,直接求解往往是非常困难的。如果在将这 n 个输入分成 k 个不同子集合的情况下,能得到k个不同的可分别求解的子问题,其中 1<k ≤ n ,求出了这些子问题的解之后,还可找到适当的方法把它们合并成整个问题的解,那么,具备上述特性的问题可考虑使用分治策略求解。

1.分治的原理

所谓分治法就是将问题分而治之。有将问题一分为二,也有将问题一分为三或一分为N等份。对每一等份分别进行解决后,原问题就可以很快得以解决。因此一个问题能否用分治法解决,关键是看该问题是否能将原问题分成n个规模较小而结构与原问题相似的子问题。递归地解决这些子问题,然后合并其结果就得到原问题的解。当 n=2 时的分治法又称二分法。

2.分治的步骤

(1)分解(divide):将原问题分成一系列子问题。

(2)解决(conquer):递归地解各子问题。若子问题足够小,则可直接求解。

(3)合并(combine):将子问题的结果合并成原问题的解。

3.分治的具体过程

使用分治策略的问题常常要借助递归结构,逐层求解,当问题规模达到某个简单情况时,解容易直接得出,而不必继续分解。 其框架如下:

if 问题不可分 then
    begin
        直接求解;
        返回问题的解;
    end
else
    begin
        从原问题中划出含1/n运算对象的子问题1;
        递归调用分治过程,求出解1;
        从原问题中划出含1/n运算对象的子问题2;
        递归调用分治过程,求出解2;
        …………
        从原问题中划出含1/n运算对象的子问题n;
        递归调用分治法过程,求出解n;
        将解1、解2、……、解n组合成整个问题的解;
    end;

由此我们可以看出,分治算法的时间是这样确定的:解决子问题所需的工作总量(由子问题的个数、解决每个子问题的工作量决定),合并所有子问题所需的工作量。

典型例子:qsort( ) ,快速排序

标签:递归,求解,分治,出解,问题,解决,原理
From: https://blog.csdn.net/ch_yang123/article/details/143880783

相关文章

  • docker原理、常用命令,以及部署nginx、tomcat、es+kibana练习(一)
    基本结构镜像(image):docker镜像可以当作一个模板,通过这个模板可以创建多个容器。例如一个tomcat镜像=>运行=>容器(提供服务)容器(container):docker利用容器技术,可以独立运行一个或一组应用(容器间相互隔离)docker容器通过镜像来创建,即容器中的进程依赖于镜像中的文......
  • 深育大讲堂 | 洞见容器存储技术原理和市场应用趋势
       4月12日,【深育大讲堂】系列直播活动第一讲“从容器存储讲起”圆满结束。深信服产教中心资深讲师丁运管、深信服四川省云业务总监薛悟团分别就多场景下的容器存储技术以及容器技术的应用与最佳实践进行深入剖析;并聚焦前沿领域热点话题,以访谈形式做解读分析,小编特......
  • 从大模型定义、大模型工作原理、大模型应用领域、大模型优缺点等详细简述大模型
    大模型定义与特点大模型,作为深度学习领域的重要突破,具有一系列显著的特点,这些特点不仅定义了它们的独特性质,也决定了它们在各种应用场景中的表现。以下是大模型特点的详细介绍:1.庞大的参数规模大模型最显著的特点就是其庞大的参数规模。这些模型通常包含数千万、数亿甚至......
  • 存储快照原理
    快照有COW(CopyOnWrite,写时复制)和ROW(RedirectOnWrite,写重定向)两种实现方式。1.COWCOW(Copy-On-Write),写时拷贝,也称为写前拷贝。创建快照,如果源卷的数据发生了变化,快照系统会将原始数据拷贝到快照卷上的数据块中,然后再对源卷进行改写;OW快照在初始化的过程中仅创建用来描述......
  • 树分治全家桶
    树分治全家桶树,(是一种益于保护环境植物)是图论当中的一种特殊图,由于(绿化环境的作用非常优秀)特殊性质丰富,经常出现在我们身边。本文将主要介绍(如何植树)一种树上优美的暴力——树分治。树分治树分治可以将部分暴力降至\(O(\logn)\)至\(O(\log^2n)\)级别,适用于树上路径的相......
  • 循环内的会被其他核修改的变量需要使用volatile的例子说明,及内存屏障的原理及使用
    一、背景之前在做 rt-linux之防止优先级反转-CSDN博客 里的优先级反转的实验的验证时,在模拟长时间占锁的代码里使用了死循环死等一个标志位的方式,遇到了这篇博客里说的这个不加volatile导致的代码运行与编写预期不一致的情况。我觉得是一个比较典型的情况,所以有必要单独写一......
  • Linux 链式与层级中断控制器讲解:原理与驱动开发
    往期内容本专栏往期内容,interrtupr子系统:深入解析Linux内核中断管理:从IRQ描述符到irqdomain的设计与实现Linux内核中IRQDomain的结构、操作及映射机制详解中断描述符irq_desc成员详解Linux内核中断描述符(irq_desc)的初始化与动态分配机制详解中断的硬件框架GIC介绍......
  • 遗传算法原理与详解
    遗传算法原理与详解一、引言遗传算法(GeneticAlgorithm,GA)是一种基于自然选择和遗传学原理的优化搜索算法。它模拟生物进化过程中的遗传、变异、交叉等机制,在复杂的搜索空间中寻找最优解或近似最优解。遗传算法具有广泛的应用,包括函数优化、组合优化、机器学习、自动控制等......
  • StarRocks 物化视图刷新流程及原理
    前段时间给StarRocks的物化视图新增了一个特性,那也是我第一次接触StarRocks,因为完全不熟悉这个数据库,所以很多东西都是从头开始了解概念。为了能顺利的新增这个特性(具体内容可以见后文),我需要把整个物化视图的流程串联一遍,于是便有了这篇文章。在开始之前简单了解下物化视图的......
  • CPU设计--计算机组成原理实验(模型计算机的研制)
    目录要求原理图指令格式单字长指令单字长零地址指令单字长一地址指令单字长二地址指令双字长指令流程图芯片写入仪乘法设计(思路)要求模型计算机采用暂存器型的运算器结构。设计一个16条指令的指令系统,包括单字长指令和双字长指令,其指令寻址方式包括立即寻址、......