首页
题库
公司真题
专项练习
面试题库
在线编程
面试
面试经验
AI 模拟面试
简历
求职
学习
基础学习课
实战项目课
求职辅导课
专栏&文章
竞赛
搜索
我要招人
发布职位
发布职位、邀约牛人
更多企业解决方案
AI面试、笔试、校招、雇品
HR免费试用AI面试
最新面试提效必备
登录
/
注册
VLK_hf
河北经贸大学 测试其它
发布于河北
关注
已关注
取消关注
@编程文青李狗蛋:
分治算法,分而治之!
大家好呀,我是帅蛋。 在上一篇文章中我讲了递归算法: 递归不会,有点崩溃! 递归是一种很重要的算法,经常在一些高级的算法中应用,比如今天我要讲的分治算法。 分治算法同样也是一种很重要的算法,可能很多同学都听说过分治算法,但是没有系统的了解过。 这篇文章,就让我们来一探究竟。 这篇是我在牛客网连载系列 #帅蛋的数据结构与算法空间#的第 9 篇文章,欢迎大家关注。 也希望大家能够喜欢上帅蛋,多多点赞收藏,记得关注我呀! 什么是分治? 学习分治,得先知道什么是分治。 分治,表面意思就是“分而治之”,洋名儿叫 Divde & Conquer。 正规点的说法是: 分治算法就是将一个大的复杂的问题,拆分成多个相同或者相似的子问题,然后再把子问题拆成更小的子问题,然后再拆成更更小的问题 and so on 直至最后的子问题可以简单求解,那最后问题的解即子问题解的合并。 白话点说就是: 将一个难题,拆成一些规模较小的相同的子问题,各个击破,分而治之。 很多算法用到了分治的思想,比如排序算法中的快排和归并排序,这些等我讲到排序算法的时候再来细聊。 由此可以看出,分治算法真真正正是一种处理问题的思想,这个要区别于递归,递归只是一种编程技巧。 分治算法的过程 分治算法由“分”和“治”两部分组成,但是它主要包括 3 个过程: 划分(Divide) 求解(Conquer) 合并(Combine) 其中: 划分(Divide):将原问题划分为规模较小的子问题,子问题相互独立,与原问题形式相同。 求解(Conquer):递归的求解划分之后的子问题。 合并(Combine):这一步非必须。有些问题涉及合并子问题的解,将子问题的解合并成原问题的解。有的问题则不需要,只是求出子问题的解即可。 分治算法的整个流程可以看下图: 分治算法适用情况 由分治算法的过程可以看出分治算法适用的情况,我的总结是 4 个词: 规模大 可分解 各独立 可合并 “规模大”和“可分解”针对原始问题。 即原问题要规模比较大,不易直接解决,但是问题分解成规模较小的相同子问题比较容易解决。 “各独立”和“可合并”针对子问题。 即子问题之间求解是相关独立互不影响,且子问题的解可以合并成原始问题的解。 这四个词中最重要的是“各独立”和“可合并”。 “各独立”涉及到分治法的效率问题。 如果各个子问题是不独立的,则分治法就需要重复的去解决一些重复的子问题,这样多做了很多不必要的工作。 比如我们很熟悉的斐波那契数列,公式如下: 假设我们要求 f(5),分治法将其划分为一个个的子问题: 由上图可见,仅仅是求 f(5),仅仅是只画了 3 层,就已经出现了相同结果的重复计算(比如 f(3) 和 f(2))。 通过对子问题解的合并,最终的结果毋庸置疑,但是因为各个子问题的不独立,造成了子问题的重复计算,从而分治法求解斐波那契的效率感人... 碰到这种情况,还是动态规划比较合适... “可合并”是涉及能否用分治的关键。 如果子问题的解可合并,那就能用分治法。 如果不可合并,单单只是“规模大”和“可分解”,分治就没必要考虑,用贪心或者动态规划才是正理。 设计分治算法 通过之前的了解,其实可以很清楚的发现,用分治算法解决问题的核心,其实就是归纳一个求解的数学公式,然后根据公式设计递归程序。 说白了就是先找找拆分到最小规模问题时怎么解,然后再瞅瞅随着问题规模增大点问题怎么解,最后就是找到递归函数,码出递归代码即可。 分治算法实例 其实在这之前,我已经讲过一个典型的分治算法的应用:二分查找。 可以说二分查找是分治算法中最常用的算法: ACM 选手带你玩转二分查找! 二分查找是在一个有序的数组中进行查找吗,每次可以让问题的规模减半。 它思路比较简单: 选择一个 mid 将数组分为左右两个集合。 判断标志 arr[mid] 是否能与要查找的目标值 target 相等,相等则直接返回。 若小于 arr[mid],则在左半区间继续查找。 如大于 arr[mid],则在右半区继续查找。 递归上面的步骤。 def BinarySearch(arr, low, high, target): if low <= high: mid = (low + high) / 2 if arr[mid] == target: return mid elif arr[mid] < target: return BinarySearch(arr, low, mid - 1, target) else: return BinarySearch(arr, mid + 1, high, target) else: # 没有找到 return -1 分治算法到这就讲完辣,原理很简单,大家看会了么? 原理搞懂只是迈出学会分治算法的第一步,想要灵活的使用却不是一件容易的事儿,更多的还是要在实战中领悟,在实战中加深对分治算法的理解。 大家只要认真去搞,就一定能掌握分治算法。 我是帅蛋,我们下次见。 ❤️ 欢迎关注我,有问题,找帅蛋,我最看不得别人迷茫! ❤️ 如果你觉得有帮助,希望爱学习的你不要吝啬三连击哟[点赞 + 收藏 + 评论]~ 还有小小公众号 【编程文青李狗蛋】,聊聊迷茫吹吹牛皮~
点赞 14
评论 4
全部评论
推荐
最新
楼层
暂无评论,快来抢首评~
相关推荐
03-26 15:46
科大讯飞_教育BG_后端开发(准入职员工)
战斗战斗,只做第一
在京东实习,最让我印象深刻的就是 “战斗战斗,只做第一”。作为后端开发,每天面对需求迭代、接口调试,压力再大,看到这句标语就觉得该往前冲。它不只是口号,更是刻在工作里的执行力,让我明白技术人也要有敢拼敢赢的劲头。万事做第一,是一种信念,一种心气,我永远也不比别人差!#一张图晒出你司的标语#
京东工作强度 428人发布
点赞
评论
收藏
分享
03-23 22:28
已编辑
门头沟学院 Java
腾讯IEG
1.上来直接一道hard LC2050并行课程III,几乎一模一样说了给20分钟,结果快30分钟还不打断我,我自己放弃了2.RAG解决了什么问题,有什么优点和缺点3.RAG多种召回策略有逻辑冲突怎么办?刚说了BM25+相似度召回,被说不对,然后他说意思是段落通过不同方式召回,需要逻辑通顺,然后我又说分块overlap,估计也不对4.Mcp怎么注册tool工具5.设计大模型调用工具的过程6.skills是解决什么问题的7.MySQL如何优化查询数据说了慢查询日志explain索引,要求补充(不许用redis),说了RR改成RC,还有buffer pool局部性原理,看样子也没说道点子上8.Red...
Java垫脚石:
理解,上来一道 hard30 分钟,太压力了,这个没做出来心态都崩了,再面试应该都没思绪了
查看8道真题和解析
点赞
评论
收藏
分享
02-26 10:01
南方科技大学 产品经理
27届真的好难啊
做过很多的项目,也有一段实习,但是投递就几乎没啥反应,是简历问题吗?大家帮忙看看吧想做AI产品
在喝茶的考拉很幸福:
感觉你的简历很乱,一眼望去全是字,模板没选好
点赞
评论
收藏
分享
03-27 09:08
已编辑
蚌埠坦克学院 嵌入式软件开发
荣耀嵌入式软件二面 面经
二面和一面相比完全不是一个量级,一面还算是考察基础知识,二面更像是在和你讨论技术方案,每个问题都有大量追问,而且他会故意提出反驳意见看你怎么应对。项目聊了将近四十分钟,他把我项目里的每个技术决策都问了一遍为什么,有几次我答不上来被他直接指出设计上的问题。1. 讲一下 FreeRTOS 的任务状态机,每种状态之间的转换条件是什么,阻塞状态和挂起状态有什么本质区别?答:FreeRTOS 的任务有五种状态:运行、就绪、阻塞、挂起、删除。运行状态是任务正在占用 CPU 执行,单核系统里同一时刻只有一个任务处于运行状态。就绪状态是任务具备运行条件,等待调度器分配 CPU。所有就绪任务按优先级排在就绪列表...
嵌入式面试八股文全集
点赞
评论
收藏
分享
评论
点赞成功,聊一聊 >
点赞
收藏
分享
评论
提到的真题
返回内容
全站热榜
更多
1
...
双非选手的求职的感悟
2758
2
...
美团暑期实习一面
2735
3
...
阿里笔试竟然考了AI提示词。。。
2108
4
...
暑期结束,拥抱腾讯了
1683
5
...
双非两段大厂实习0offer,我做对了什么
1620
6
...
携程3.25Java开发二面面经
1596
7
...
字节一面-飞书后端暑期实习
1507
8
...
京东零售暑期一面
1329
9
...
快手暑期前端一面 3.25
1162
10
...
感谢信
1099
创作者周榜
更多
正在热议
更多
#
你的实习产出是真实的还是包装的?
#
19363次浏览
339人参与
#
中国电信笔试
#
31436次浏览
284人参与
#
开放七大实习专项,百度暑期实习值得冲吗
#
14559次浏览
215人参与
#
春招至今,你的战绩如何?
#
62209次浏览
569人参与
#
如果秋招能重来,我会____
#
96812次浏览
500人参与
#
一张图晒出你司的标语
#
3977次浏览
74人参与
#
米连集团26产品管培生项目
#
13076次浏览
285人参与
#
i人适合做什么工作
#
37038次浏览
124人参与
#
我是面试官,请用一句话让我破防
#
79643次浏览
219人参与
#
金三银四,你的春招进行到哪个阶段了?
#
21779次浏览
280人参与
#
哪些公司真双非友好?
#
69419次浏览
287人参与
#
投递几十家公司,到现在0offer,大家都一样吗
#
340271次浏览
2169人参与
#
AI面会问哪些问题?
#
26158次浏览
527人参与
#
找AI工作可以去哪些公司?
#
8299次浏览
212人参与
#
从事AI岗需要掌握哪些技术栈?
#
8224次浏览
277人参与
#
面试尴尬现场
#
220878次浏览
861人参与
#
五一之后,实习真的很难找吗?
#
102846次浏览
584人参与
#
你做过最难的笔试是哪家公司
#
31684次浏览
211人参与
#
应届生第一份工资要多少合适
#
20598次浏览
86人参与
#
聊聊你的职场新体验
#
336207次浏览
1894人参与
#
你小时候最想从事什么职业
#
159888次浏览
2072人参与
#
阿里笔试
#
177512次浏览
1306人参与
牛客网
牛客网在线编程
牛客网题解
牛客企业服务