首页
题库
公司真题
专项练习
面试题库
在线编程
面试
面试经验
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-24 13:55
浙江科技大学
入职体检发现转氨酶偏高,是有乙肝吗?体检不合格怎么办?
每到求职就业季,就是一次就业高峰期,按照各大公司的招聘惯例,新人入职需要经过重重关卡,入职体检就是其中一项。大四小王(化名)却差点被这个体检难倒了。临近毕业,小王顺利的面试上了心仪的工作,在进行入职体检时,小王体检单上血检中显示转氨酶指数过高,小陈也没太在意,直接上交了体检结果,却被公司列入了复检名单。公司表示,由于他的转氨酶指数过高,需要重新检查,排除病毒性肝炎,尤其是乙肝的可能性。虽然法律规定,用人单位招用人员,不得以是传染病病原携带者为由拒绝录用。“转氨酶升高主要和病毒性肝炎、酒精肝、脂肪肝、肝硬化、肝脏肿瘤及某些感染性疾病等有关,甚至一些非病理性原因,比如剧烈运动、过于劳累或检查前服用...
点赞
评论
收藏
分享
03-22 09:50
蚌埠坦克学院 嵌入式软件开发
嵌入式面试与HR谈薪硬核指南
嵌入式岗位的面试,本质不是“知识问答”,而是三层筛选:技术是否能扛住项目是否具备系统工程思维薪资是否与产出匹配很多人输在最后一步:技术面过了,但谈薪把自己谈低了,或者直接谈崩。一、嵌入式面试的真实评价体系1. 面试官真正关心的不是“你会不会”嵌入式岗位常见技术点:C语言基础STM32 / NXP / ESP32等平台RTOS(FreeRTOS居多)驱动开发(UART / SPI / I2C / DMA)调试能力(JTAG / GDB / logic analyzer)问题定位能力(死机、卡死、内存泄漏)但面试官真正筛选的是:你遇到“线上bug”能不能在没有文档的情况下解决问题?2. 面试分层逻...
点赞
评论
收藏
分享
03-23 13:17
美团_Saas_后端开发
给各位学Java的兄弟丢人了
今天周一休息,突发奇想写一篇阶段总结。如题,我已经去了一个和Java彻底毫无关联的行业。曾经我以为自己能在计算机行业发光发热,没想到刚入行一年多就当了逃兵。从最开始的热爱到现在一看到代码就厌恶,不知道自己经历了什么。所以我去干什么了?答案是:在成都当了租房销售。上班那会压力大了就念叨着去干租房中介,但是一直下不去这个决心,想着自己学了四年多的计算机知识,终究还是不甘心。终于在某一天准备八股文的时候,看着无数篇和工作内容关系不大的理论知识,那一刻下定决心,决定尝试一下销售行业,也算是给自己一个交代。后面阴差阳错的投了成都自如去当租房管家,没想到面试很顺利,在当天一百多个面试的人里面,我成为了为数不多通过的几个幸运儿之一。目前已经培训通过,正式入职,也开了单,也有压力但是每天过得很开心,真心喜欢那种和人交流的感觉,哪怕是最后没有选择找我租房。说这些也是想告诉那些大三,大四正在找Java实习而焦虑的同学:你们现在还年轻,选择很多,容错率也很高,可以尽情去尝试自己喜欢的行业和工作。不用因为某一次的面试没通过或者简历石沉大海而焦虑,更不用因为身边人都在挤编程的独木桥就强迫自己跟风。也算是自己的碎碎念吧,也希望自己能在新的领域取得一点小成就。也祝牛油工作顺利!
沉淀小子:
干啥都不丢人啊,生存是必须要的,销售很考验一个人综合素质能力的,好的销售人脉和资源可不比写字楼的白领差啊
点赞
评论
收藏
分享
03-04 00:14
九江职业大学 C++
腾讯校招
主播27号面完,到现在还显示这个是不是要挂了啊
LZHR:
老哥你从投递简历测评完到一面中间隔了多久呀,我这边已经过了五天了仍显示简历筛选中是不是就是挂了
腾讯求职进展汇总
点赞
评论
收藏
分享
03-24 22:59
东华大学 Java
这个简历可以吗,有人能指导一下吗
点赞
评论
收藏
分享
评论
点赞成功,聊一聊 >
点赞
收藏
分享
评论
提到的真题
返回内容
全站热榜
更多
1
...
双非选手的求职的感悟
2758
2
...
美团暑期实习一面
2735
美团笔试好难
热聊中
3
...
阿里笔试竟然考了AI提示词。。。
2108
4
...
暑期结束,拥抱腾讯了
1683
中国电信328笔试
热聊中
5
...
双非两段大厂实习0offer,我做对了什么
1620
6
...
携程3.25Java开发二面面经
1596
7
...
字节一面-飞书后端暑期实习
1507
8
...
9本暑期实习完全没面试,哪里有问题?
1432
9
...
京东零售暑期一面
1329
10
...
快手暑期前端一面 3.25
1162
创作者周榜
更多
正在热议
更多
#
AI面会问哪些问题?
#
23595次浏览
467人参与
#
中国电信笔试
#
30398次浏览
278人参与
#
开放七大实习专项,百度暑期实习值得冲吗
#
13702次浏览
203人参与
#
你的实习产出是真实的还是包装的?
#
18200次浏览
325人参与
#
找AI工作可以去哪些公司?
#
7162次浏览
174人参与
#
春招至今,你的战绩如何?
#
57986次浏览
523人参与
#
厦门银行科技岗值不值得投
#
7276次浏览
183人参与
#
从事AI岗需要掌握哪些技术栈?
#
7177次浏览
229人参与
#
你做过最难的笔试是哪家公司
#
28256次浏览
172人参与
#
哪些公司真双非友好?
#
69062次浏览
286人参与
#
投递几十家公司,到现在0offer,大家都一样吗
#
339282次浏览
2159人参与
#
阿里笔试
#
174690次浏览
1292人参与
#
面试被问期望薪资时该如何回答
#
382382次浏览
2163人参与
#
一张图晒出你司的标语
#
3705次浏览
67人参与
#
晶盛机电求职进展汇总
#
35191次浏览
318人参与
#
面试尴尬现场
#
220592次浏览
860人参与
#
五一之后,实习真的很难找吗?
#
102765次浏览
583人参与
#
沪漂/北漂你觉得哪个更苦?
#
8839次浏览
183人参与
#
___岗狗都不干,我干!
#
77746次浏览
309人参与
#
HR最不可信的一句话是__
#
5361次浏览
109人参与
#
AI时代,哪个岗位还有“活路”
#
10383次浏览
318人参与
#
长得好看会提高面试通过率吗?
#
21160次浏览
245人参与
牛客网
牛客网在线编程
牛客网题解
牛客企业服务