QQ登录

只需要一步,快速开始

 注册地址  找回密码
查看: 4893|回复: 2
打印 上一主题 下一主题

数学建模常用算法—分治算法

[复制链接]
字体大小: 正常 放大

3503

主题

538

听众

5990

积分

  • TA的每日心情
    开心
    2017-2-7 15:12
  • 签到天数: 691 天

    [LV.9]以坛为家II

    社区QQ达人 元老勋章 发帖功臣 新人进步奖 优秀斑竹奖 金点子奖 原创写作奖 最具活力勋章 助人为乐奖 风雨历程奖

    群组2013年国赛赛前培训

    群组2014年地区赛数学建模

    群组数学中国第二期SAS培训

    群组物联网工程师考试

    群组2013年美赛优秀论文解

    跳转到指定楼层
    1#
    发表于 2016-3-2 14:44 |只看该作者 |倒序浏览
    |招呼Ta 关注Ta
    分治算法
    分治法的基本思想
    任何一个可以用计算机求解的问题所需的计算时间都与其规模有关。问题的规模越小,越容易直接求解,解题所需的计算时间也越少。例如,对于n个元素的排序问题,当n=1时,不需任何计算。n=2时,只要作一次比较即可排好序。n=3时只要作3次比较即可,…。而当n较大时,问题就不那么容易处理了。要想直接解决一个规模较大的问题,有时是相当困难的。
    分治法的设计思想是,将一个难以直接解决的大问题,分割成一些规模较小的相同问题,以便各个击破,分而治之。
    如果原问题可分割成k个子问题,1<k≤n ,且这些子问题都可解,并可利用这些子问题的解求出原问题的解,那么这种分治法就是可行的。由分治法产生的子问题往往是原问题的较小模式,这就为使用递归技术提供了方便。在这种情况下,反复应用分治手段,可以使子问题与原问题类型一致而其规模却不断缩小,最终使子问题缩小到很容易直接求出其解。这自然导致递归过程的产生。分治与递归像一对孪生兄弟,经常同时应用在算法设计之中,并由此产生许多高效算法。
    分治法的适用条件
    分治法所能解决的问题一般具有以下几个特征:
    该问题的规模缩小到一定的程度就可以容易地解决;
    该问题可以分解为若干个规模较小的相同问题,即该问题具有最优子结构性质。
    利用该问题分解出的子问题的解可以合并为该问题的解;
    该问题所分解出的各个子问题是相互独立的,即子问题之间不包含公共的子子问题。
    上述的第一条特征是绝大多数问题都可以满足的,因为问题的计算复杂性一般是随着问题规模的增加而增加;第二条特征是应用分治法的前提,它也是大多数问题可以满足的,此特征反映了递归思想的应用;第三条特征是关键,能否利用分治法完全取决于问题是否具有第三条特征,如果具备了第一条和第二条特征,而不具备第三条特征,则可以考虑贪心法或动态规划法。第四条特征涉及到分治法的效率,如果各子问题是不独立的,则分治法要做许多不必要的工作,重复地解公共的子问题,此时虽然可用分治法,但一般用动态规划法较好。
    分治法的基本步骤
    分治法在每一层递归上都有三个步骤:
    分解:将原问题分解为若干个规模较小,相互独立,与原问题形式相同的子问题;
    解决:若子问题规模较小而容易被解决则直接解,否则递归地解各个子问题;

    合并:将各个子问题的解合并为原问题的解。

    它的一般的算法设计模式如下:
    Divide-and-Conquer(P)1. if |P|≤n0 2. then return(ADHOC(P))3. 将P分解为较小的子问题 P1 ,P2 ,...,Pk4. for i←1 to k 5. do yi ← Divide-and-Conquer(Pi) △ 递归解决Pi6. T ← MERGE(y1,y2,...,yk) △ 合并子问题7. return(T)
    其中|P|表示问题P的规模;n0为一阈值,表示当问题P的规模不超过n0时,问题已容易直接解出,不必再继续分解。ADHOC(P)是该分治法中的基本子算法,用于直接解小规模的问题P。因此,当P的规模不超过n0时,直接用算法ADHOC(P)求解。算法MERGE(y1,y2,...,yk)是该分治法中的合并子算法,用于将P的子问题P1 ,P2 ,...,Pk的相应的解y1,y2,...,yk合并为P的解。
    根据分治法的分割原则,原问题应该分为多少个子问题才较适宜?各个子问题的规模应该怎样才为适当?这些问题很难予以肯定的回答。但人们从大量实践中发现,在用分治法设计算法时,最好使子问题的规模大致相同。换句话说,将一个问题分成大小相等的k个子问题的处理方法是行之有效的。许多问题可以取k=2。这种使子问题规模大致相等的做法是出自一种平衡(balancing)子问题的思想,它几乎总是比子问题规模不等的做法要好。
    分治法的合并步骤是算法的关键所在。有些问题的合并方法比较明显,如下面的例1,例2;有些问题合并方法比较复杂,或者是有多种合并方案,如例3,例4;或者是合并方案不明显,如例5。究竟应该怎样合并,没有统一的模式,需要具体问题具体分析。
    99f623579391ac1ae63fa1954c4711c8.jpg





    zan
    转播转播0 分享淘帖0 分享分享0 收藏收藏0 支持支持0 反对反对0 微信微信

    3503

    主题

    538

    听众

    5990

    积分

  • TA的每日心情
    开心
    2017-2-7 15:12
  • 签到天数: 691 天

    [LV.9]以坛为家II

    社区QQ达人 元老勋章 发帖功臣 新人进步奖 优秀斑竹奖 金点子奖 原创写作奖 最具活力勋章 助人为乐奖 风雨历程奖

    群组2013年国赛赛前培训

    群组2014年地区赛数学建模

    群组数学中国第二期SAS培训

    群组物联网工程师考试

    群组2013年美赛优秀论文解

    理解了这些算法,做些小模型已经够用了,具体神经网络大家可以查阅百度,也是很重要的算法,我现在就是这个算法不熟练,也不喜欢用。其他的什么蚁群算法等等都是建立在我们的基础算法之上,思想是大同小异,理解了这些,用得熟练,能够自己整理出来,我觉得至少比我强多了,反正我自己整理不了这么完整的说。最近编点优化程序还总是会出错。
    文字很多没有整理,但相信大家闲下来慢慢看,都还是不影响观看理解的。
    最后祝大家建立模型,处理、优化,检验模型的能力越来越强,强到让自己惊讶!
    回复

    使用道具 举报

    3503

    主题

    538

    听众

    5990

    积分

  • TA的每日心情
    开心
    2017-2-7 15:12
  • 签到天数: 691 天

    [LV.9]以坛为家II

    社区QQ达人 元老勋章 发帖功臣 新人进步奖 优秀斑竹奖 金点子奖 原创写作奖 最具活力勋章 助人为乐奖 风雨历程奖

    群组2013年国赛赛前培训

    群组2014年地区赛数学建模

    群组数学中国第二期SAS培训

    群组物联网工程师考试

    群组2013年美赛优秀论文解

    理解了这些算法,做些小模型已经够用了,具体神经网络大家可以查阅百度,也是很重要的算法,我现在就是这个算法不熟练,也不喜欢用。其他的什么蚁群算法等等都是建立在我们的基础算法之上,思想是大同小异,理解了这些,用得熟练,能够自己整理出来,我觉得至少比我强多了,反正我自己整理不了这么完整的说。最近编点优化程序还总是会出错。
    文字很多没有整理,但相信大家闲下来慢慢看,都还是不影响观看理解的。
    最后祝大家建立模型,处理、优化,检验模型的能力越来越强,强到让自己惊讶!
    回复

    使用道具 举报

    您需要登录后才可以回帖 登录 | 注册地址

    qq
    收缩
    • 电话咨询

    • 04714969085
    fastpost

    关于我们| 联系我们| 诚征英才| 对外合作| 产品服务| QQ

    手机版|Archiver| |繁體中文 手机客户端  

    蒙公网安备 15010502000194号

    Powered by Discuz! X2.5   © 2001-2013 数学建模网-数学中国 ( 蒙ICP备14002410号-3 蒙BBS备-0002号 )     论坛法律顾问:王兆丰

    GMT+8, 2025-8-22 08:14 , Processed in 0.890921 second(s), 63 queries .

    回顶部