算法系列总结:分而治之——分治算法大熊先生互联网后端技术

分治算法的基本思想是将一个规模为N的问题分解为K个规模较小的子问题,这些子问题相互独立且与原问题性质相同。求出子问题的解,就可得到原问题的解。

分治法解题的一般步骤:

(1)分解,将要解决的问题划分成若干规模较小的同类问题;

(2)求解,当子问题划分得足够小时,用较简单的方法解决;

(3)合并,按原问题的要求,将子问题的解逐层合并构成原问题的解。

一言以蔽之:分治法的设计思想是,将一个难以直接解决的大问题,分割成一些规模较小的相同问题,以便各个击破,分而治之。

在认识分治之前很有必要先了解一下递归,当然,递归也是最基本的编程问题,一般接触过编程的人都会对递归有一些认识.为什么要先了解递归呢?你看,根据上面所说的,我们就要将一个问题分成若干个小问题,然后一一求解并且最后合并,这就是一个递归的问题,递归的去分解自身,递归的去解决每一个小问题,然后合并…

关于递归,这里举一个最简单的例子,求N!;

我们只需要定义函数

intcalculate(intn)

{

if(n==1)

return1;

else

returnn*calculate(n-1);//调用自身…

}

好了,有了递归的铺垫,我们下来来看一看一个分治算法的问题,归并排序问题…

基本思想:

将待排序元素分成大小大致相同的2个子集合(递归直到最小的排序单元),分别对2个子集合进行排序,最终将排好序的子集合合并成为所要求的排好序的集合。

下面我们用一张图来展示整个流程,最下面的(姑且叫他第一层)是原始数组分成了8个最小排序问题,各自只有一个元素,故不需要排序,大家可以看到,我们通过分而治之的思想把对最初数组的排序分为了若干个只有一个元素的小数组的排序,然后第二层,我们进行了合并,将每两个最小排序结果合并为有两个元素的数组,然后逐层往上进行合并,就有了最后的结果…

下面我们来看一下这个算法的具体实现,下面的MERGE-SORT(A,p,r)表示对数组A[p->r]的排序过程.其中p->r代表从p到r.

MERGE-SORT(A,p,r)

1.IFpr]的排序过程自然需要p

2.THENq=[(p+r)/2]//将当前的排序问题一分为二,分别进行处理

3.MERGE-SORT(A,p,q)//继续递归看能不能将问题继续一分为二,处理A[p->q]的排序

4.MERGE-SORT(A,q+1,r)//继续递归看能不能将问题继续一分为二处理A[q+1->r]的排序

5.MERGE(A,p,q,r)//合并当前结果

到这里,分治算法的精髓已经出来了,我们通过递归将问题进行分解到足够小…继而进行结果计算…然后再将结果合并.

以下算法MERGE(A,p,q,r)表示合并A[p->q]和A[q+1->r]这两个已经排序好的数组

MERGE(A,p,q,r)

1.n1←qp+1//计算A[p->q]的长度2.n2←rq//计算A[q+1->r]的长度3.CreatearraysL[1..n1+1]andR[1..n2+1]//创建两个数组4.FORi←1TOn15.DOL[i]←A[p+i1]6.FORj←1TOn27.DOR[j]←A[q+j]//4-7行是将原数组中A[p->r]的元素取出到新创建的数组,我们的操作是基于临时数组的操作8.L[n1+1]←∞9.R[n2+1]←∞//8-9行设置界限..10.i←111.j←112.FORk←pTOr13.DOIFL[i]≤R[j]14.THENA[k]←L[i]15.i←i+116.ELSEA[k]←R[j]17.j←j+1//12-17行进行排序合

THE END
1.数的分流(7)——左右课率,正负名之以正负术入之。 正负术曰:今两算得失相反,要令正负以名之。正算赤,负算黑,否则以邪正为异。 方程自有赤、黑相取,法、实数相推求之术。而其并减之势不得广通,故使赤、 黑相消夺之,于算或减或益。 正负的概念,实际上在“盈不足”算法中已经有了雏形,即对盈、朒两势维乘之后,达到不盈不朒的状态,https://zhuanlan.zhihu.com/p/92512462
2.分而治之算法一言以蔽之:分治法的设计思想是,将一个难以直接解决的大问题,分割成一些规模较小的相同问题,以便各个击破,分而治之。 2.分而治之的重点: 看是否能够发现重复的子问题,能否发现大问题存在的循环子结构,如果发现就把原问题转化为很简单的小问题。 是否能划分步骤(不同步骤不同解决方法),因为单个步骤往往比整个https://www.jianshu.com/p/038352946ba3
3.分而治之的算法(DevideandConquer)分而治之的算法(Devide and Conquer) 分治法 分治法是一种一般性的算法设计技术,它将问题的实例划分为若干个较小的实例(最好拥有相同的规模),对这些较小的实例递归求解,然后合并这些解,以得到原始问题的解。许多高效的算法都基于这种技术,虽然有时候它的适应性和效率并不如一些更简单的算法。https://blog.csdn.net/huanghanqian/article/details/78828788
4.基于SmithWaterman算法的并行分而治之生物序列比对算法生物序列比对 动态规划 分而治之 并行处理 内存空间https://www.cnki.com.cn/Article/CJFDTotal-JEXK200402005.htm
5.什么是分率此题中的1/8是分率是小林与小红身高的差去除以小红的身高,1/8是比值,把小红身高数看成单位“1”,“小红比小林矮几分之几”是把小林身高数看成单位“1”,应拿两人身高差去除以小林的身高数,得1/9。这里的 1/9也不是一般分数,而是表示两个数比值的分数。https://xue.baidu.com/okam/pages/strategy-tp/index?strategyId=140962423263312&source=natural
6.经典优化算法之分治法(DivideandConqueAlgorithm)分治分治,即分而治之。分治,就是把一个复杂的问题分成两个或更多的相同或相似的子问题,再把子问题分成更小的子问题……直到最后子问题可以简单的直接求解,原问题的解即子问题的解的合并。这个技巧是很多高效算法的基础,如排序算法(快速排序,归并排序),傅立叶变换(快速傅立叶变换)……直接说就是将一个难以直接https://cloud.tencent.com/developer/article/1523170
7.陈景辉:算法之治:法治的另一种可能性?因此,我的结论将是:算法之治不但不是法治的较优越样态,甚至它都无法被视为真正的法治,它只不过是一种“法制”。尽管它是更先进、更优越、更隐蔽的法制,但它始终还是需要被小心警惕的法制,而不是应当被热情拥抱的法治。 一、法律的算法化:三个规范性理由https://www.legal-theory.org/?mod=info&act=view&id=26587
8.Awesome针对空间,无非就一个办法:大而化小,分而治之(hash映射),你不是说规模太大嘛,那简单啊,就把规模大化为规模小的,各个击破不就完了嘛。 至于所谓的单机及集群问题,通俗点来讲,单机就是处理装载数据的机器有限(只要考虑cpu,内存,硬盘的数据交互),而集群,机器有多辆,适合分布式处理,并https://github.com/Ty-Chen/Awesome-Backend/blob/5ad253a0f2e82d9b83892a60e01a1e0a855d70b3/Data%20Structure%20and%20Algorithm.md
9.2023年中国保险业数字化转型研究报告而此时,领域驱动设计(DDD)作为一种领先的架构设计方法,通过领域实体聚合、限界上下文建模等手段明晰有效的微服务边界,并建立业务架构与技术架构间的映射关系。每个业务领域作为独立的微服务,通过API实现与其他业务的灵活、高效交互。微服务架构与DDD相辅相成,为中台建设提供分而治之的整体思想、精益迭代的演进理念,成为https://36kr.com/p/2382894555673096
10.2022网络治理专题(答题纯享版)*这里我的动词是影响,而不是限制之类完全负面词汇,就是提醒大家,算法并不是造成信息茧房的唯一因素,要时刻谨记辩证思维哈! 算法窄化用户信息获取路径包括两方面:一是信息定制化意味着“自主权”让渡,看与不看看什么由算法决策,从而构建了一个由算法和个人共同决定的拟态环境,平台便通过算法推荐实现算法与商业价值的https://weibo.com/ttarticle/p/show?id=2309404830345634906292
11.算法学习减治·分治·变治51CTO博客经典优化算法之分治法(Divide-and-Conque Algorithm) 转载|【算法】分治法(Divide-and-Conquer Algorithm)经典例子分析 从字面上分析就可以看到有哪些步骤: 分-分解-将问题分解为规模更小的子问题,子问题最好相同或相似; 治-求解-将这些规模更小的子问题逐个击破; https://blog.51cto.com/u_14328065/2884404
12.高一乘杨东︱应对元宇宙挑战:数据安全综合治理三维结构范式多元共治是智能社会治理的题中应有之义,也是破解“治理赤字”的重要法宝。[36]在欧盟的立法模式下,数据被分为个人数据与非个人数据,前者由《通用数据保护条例》(GDPR)保护,而后者由《非个人数据自由流动条例》保护,公共数据纳入基础设施予以保护。然而,个人数据与非个人数据的边界越来越模糊,通过算法分析非个人数据https://www.ccps.gov.cn/bkjd/xzglgg/xgglgg2022_3/202203/t20220325_153412.shtml
13.论坛·DTCC 2022中国数据库技术大会即将召开,120+精选案例抢先看 ·【技术栈公益直播第五十期】人工智能在线下零售智慧门店的技术研究及商业应用落地 ·【在线技术沙龙】开源小秀场系列沙龙活动(第二期) ·求助-天干地支的计算 ·awk数组 ·SDDC之基础架构硬件选型 http://www.chinaunix.net/
14.五大常用算法之一:分治算法分治法是计算机科学中非常重要的算法。字面上的解释是“分而治之”,即将一个复杂的问题分为两个或两个以上相同或相似的子问题,然后将子问题分为更小的子问题。。。直到最后一个子问题可以简单地直接解决,原始问题的解决方案就是子问题的解决方案的结合。这一技能是许多高效算法的基础,如排序算法( 快速排序, 傅https://www.tulingxueyuan.cn/tlzx/jsp/3793.html
15.《中国社会科学文摘》2023年第9期目录价值哲学视域中的算法歧视与社会公正 孙伟平 作者单位:上海大学智能哲学与文化研究院、马克思主义学院,摘自《哲学研究》2023年3期 算法的认识论逻辑 吴畏 作者单位:华中科技大学哲学学院,摘自《哲学动态》2023年3期 数据、平台媒介与公共领域的危机 董山民 作者单位:浙江工商大学马克思主义学院,摘自《广州大学学报》2023年https://cssn.cn/dkzgxp/zgxp_zgshkxwz/2023n/202309/t20230927_5688327.shtml