分治算法

本文介绍了分治算法的基本思想,通过实例分析了如何运用分治策略解决问题,包括寻找伪币、铺设道路和归并排序三个经典例子。通过分治,复杂问题可以被分解成更小的子问题,从而简化求解过程,降低计算复杂度。
摘要由CSDN通过智能技术生成


一、概念

当我们求解某些问题时,由于这些问题要处理的数据相当多,或求解过程相当复杂,使得直接求解法在时间上相当长,或者根本无法直接求出。对于这类问题,我们往往先把它分解成几个子问题,找到求出这几个子问题的解法后,再找到合适的方法,把它们组合成求整个问题的解法。如果这些子问题还较大,难以解决,可以再把它们分成几个更小的子问题,以此类推,直至可以直接求出解为止。这就是分治策略的基本思想。——百度百科

当然,不变的,我们用一句话来总结分治:大事化小,小事化了。
分治的表面意思是"分而治之",同样因此分治会将一个问题进行分解,拆分成多个子问题,直到能直接解决为止。
在这里插入图片描述
在分治当中,最“有名”的就是二分(我们后面会讲)了。
好了,话不多说,来看题。


二、例题

  • 1.寻找伪币

    题目描述
    给你一个装有16枚硬币的袋子。16枚硬币中有一个是伪造的,并且那个伪造的硬币比真的硬币要轻一些。你的任务是找出这枚伪造的硬币。为了帮助你完成这一任务,将提供一台可用来比较两组硬币重量的仪器,比如天平。利用这台仪器,可以知道两组硬币的重量是否相同。

    输入格式
    一行,包含16个正整数,用空格隔开,每个正整数不大于10, 其中15个数相同,1个数小于其它15个数

    输出格式
    一行,两个数,用空格隔开 第一个数是伪币的输入编号,第二个数是伪币的重量

    样例输入

    2 2 2 1 2 2 2 2 2 2 2 2 2 2 2 2
    

    样例输出

    4 1
    

    题解
    其实这道题就只需要一个一个的比较,然后找到最轻的硬币输出就好了……
    但是我们在写分治!
    所以!让我们用分治的思想来想一想这道题到底该怎么想(?)
    我们假设这16枚硬币分别是
    A B C D E F G H I J K L M N O P,且假硬币是E
    则:

    天平左 天平右 哪边轻
    ABCDEFGH IJKLMNOP
    ABCD EFGH
    EF GH
    E F

    所以……可以了吗?
    我们首先将16枚硬币分成2组,一组8个,接着找到轻的,将它分成2组,每组4颗……直到找到假硬币为止。递归……它出现了!
    在这里插入图片描述
    强势插播:如果递归不太好滴,可以去看一看这篇文章的递归板块。

    为什么我们会想到这么做?
    第一:只有16枚硬币,按照分治的思想,一定会把这些硬币分为多组,然后进行比较。可是分为几组比较合适呢?这里你会发现出题人的心思:
    16 / 2 = 8 16/2=8 16/2

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值