快速入门分治算法

核心掌握主方法求解递归关系式

分治算法

本质其实就是将一个问题分解为若干个规模较小的相同子问题,分而治之。

解题步骤

-分解问题
将要解决的问题分解为若干个规模较小,相互独立,与原问题形式相同的子问题。
-问题治理
求解各个子问题,由于各个子问题和原问题的形式相同,只是规模较小,因此当子问题划分的足够小时,我们就可以用较为简单的方法去解决。
-问题合并
按照原问题的要求,将子问题的解逐层的合并构成原问题的解.一句话总结,分治法就是将一个难以直接解决的大问题,分割成规模较小的相同子问题,以便各个击破,分而治之。

案例分析

二分猜数

我们一定都玩过猜数游戏,现在我们两个人玩这个游戏,我在我的手心写一个100以内的整数,并且只能给你大了或小了的提示,并且只有三次机会,那如何才能以最快的速度猜出来呢?
解题思路:
从问题的描述来看,如果是n个数,最坏的情况我们得猜n次才可以成功,其实我们没有必要非得一个个的去猜,这显然是一个笨方法,因为这些数是有序的,我们可以按照折半查找的方式,每次和中间的元素去比较,如果每次比中间的部分大,去后半部分找,比中间部分小,去后半部分找.那我们现在思路有了,可以将问题抽象描述出来:给定n个元素,假设这些元素是有序的,从中查找特定元素x.
解题思想:
将有序序列先大致分为数目相等的两组,然后去中间的元素与特定的查找元素进行比较,如果x等于中间元素,查找成功,如果x小于中间元素,在前半部分继续执行分解和治理操作,如果x大于中间元素,去后半部分进行分解和治理.算法设计:使用一维数组S[]放置该有序序列,设置变量low和high表示查找的上下界,middle表示中间的位置,x为特定的查找元素.

参考:https://juejin.im/post/5c3fdae9e51d45522264260b

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 一些概念 数据结构就是研究数据的逻辑结构和物理结构以及它们之间相互关系,并对这种结构定义相应的运算,而且确保经过这...
    Winterfell_Z阅读 6,681评论 0 13
  • 说起分治法,大家一定也都听过秦始皇采用郡县制将国家分为三十六郡的故事,我们常说”山高皇帝远”,意思就是山高路远,皇...
    云时之间阅读 929评论 0 0
  • 一. 写在前面 要学习算法,“排序”是一个回避不了的重要话题,在分析完并查集算法和常用数据结构之后,今天我们终于可...
    Leesper阅读 2,698评论 0 40
  • 1、今天的晨间导读,船长给了我们一个心理学概念:合理认知。 什么是合理认知呢,要同时满足两个条件。那就是真实和有用...
    陈龙英阅读 668评论 0 0
  • KK: 今天下雨,森林里薄薄的雾气,环绕着层层叠叠的绿树,雨水滋润着这春天的森林。我拿上一本罗杰斯的书,开车穿行于...
    四海司南阅读 203评论 0 1

友情链接更多精彩内容