【算法学习】减治 · 分治 · 变治(四)

简介: 【算法学习】减治 · 分治 · 变治


03

变  治  法

I don' t konw it' s English name


生活的秘密在于。。。用一个烦恼代替另一个烦恼。

——Charles M. Schulz (1922 - 2000),美国漫画家

 

变治法,就是基于变换的一种思想方法,首先把问题的实例变得容易求解,然后进行求解。这个方法的思路类似于数学建模的思路,将生活中的问题进行简单的抽象、归化,以便对此进行研究。它不是一种标准的算法,更多的是一种思考的方式。

 

变治法的工作可以分成两个阶段:首先把问题变得更容易求解,然后对实例进行求解。根据我们对问题实例的变换方式,变治思想有3种主要的类型:

1.实例化简(Instance simplification)。

2.改变表现(Representation Change).

3.问题化简(Problem reduction).

 

1.实例化简(Instance simplification)。

指将原问题变换为同样问题的一个更简单或者更方便的实例。

 

预排序是一个这样的栗子:

预排序并不是一种算法设计策略,而是一种意识,在设计算法时要有这种意识,在算法中作预处理,是一种将实例化简的变治策略。

 

我们在构建数据时就提前进行排序,处理一些问题时就可以非常方便。

 

例如检验数组元素的唯一性。如果没有预排序,只用蛮力法,需要经过两轮循环,一个个元素检查,时间复杂度为o(n^2)。
而将数组预排序后,相同的元素就会挨着,扫描一遍比较两侧的数据后即可检验元素唯一性,扫描过程的时间复杂度为o(n)。(当然,排序的时间复杂度会更大)

 

再如模式计算。模式是指一个序列中出现次数最多的一个数值。
同样,如果用蛮力,逐个检查元素出现的次数,需要两遍扫描,复杂度为o(n^2)
预排序将相同的元素紧挨着,通过一遍扫描,累计元素重复出现过的次数,就可知道出现最多的元素。同上,时间复杂度为o(n)。

 

同理的还有查找问题,这里就不再说了。代码就是排序,也不写了。

 

2.改变表现(Representation Change).

指将原问题变换为同样实例的不同表现。

 

我们介绍一个很经典的栗子:霍纳法则。

在计算多项式时,人为计算一般都是一项一项算;然而,当计算机这样计算时,每次求k次方都需要进行多次乘法,效率相当低。

 

因此,我们将乘法改变为以下形式:

微信图片_20220422145317.jpg

这样,我们只需要进行n次乘法,通过改变了式子(即问题)的表现形式,大大优化了效率。

代码也非常简单,就不写了。(咱们注重思想哈,不是偷懒)

 

3.问题化简(Problem reduction).

指将原问题变换为另一个问题的实例,这种问题的算法是已知的。(归化思想)转换的难题在于如何找到一个变换的目标算法。

 

线性规划就是一个很好的目标。我们这里以背包问题为例。

在之前的文章中,我们曾用回溯法解决01背包问题。实际上,背包问题的本质是线性规划。了解了线性规划的本质后,才能更好地解决高维的背包问题。

 

在高中大家都学过线性规划。线性规划是一种非常好理解的方法,但我们高中的运用大多局限于二维空间。我们将它拓展到n维空间。

 

在二维空间里,一条的直线Ax+By+C=0能将二维平面分割为两部分。

同样,在三维空间里,Ax+By+Cz+D=0表示一个二维平面,可以将三维空间分割为两个部分。

那么,拓展到n维呢?

 

一个(n-1)维的分割线,可以将一个n维物体分作两份。

 

看这样一条分割线:

A0t0+A1t1+A2t2+...+Antn+An+1=0

我们把n个变量看做n个自变量tn,也就是在n维空间里思考。利用一系列约束条件的方程求出可行域,在寻找最优解——一切就变得想高中时一样好理解,自然而然地上升到了n维。哪怕你不清楚n维空间长什么样,在2、3维空间下思考,起码能让问题变得更形象一些。

 

那么,对于背包问题,我们可以转化为以下不等式组:

其中ni表示第i个物品取几个,vi表示价值,wi表示重量。

0<=w1n1+w2n2+w3n3+...+wnnn<=W

V= v1n1+v2n2+v3n3+...+vnnn

求V的最大值。

(对01背包问题而言,nk只能取0或1.)

 

背包问题就这样一步步转化为线性规划的问题啦。然而,这个问题也不那么好解决。这里我们就不解决了,等到未来的某天再填上这个坑吧。(相信我们未来还会再遇到背包问题的)

 




那么,这期的文章就到这儿结束了。


因为一直觉得总结部分很水,所以这次去掉了。。。


感觉这期的代码都和算法本身关系不大?


的确,这次的算法都不是那么的标准。


但依然提供给我们更多看问题的角度,要学会动态地看问题。


那么,赶完这期的我又要继续忙别的去了。。。


考试在即,无力脱身,让我们下次再见~!


相关文章
|
5天前
|
负载均衡 算法
架构学习:7种负载均衡算法策略
四层负载均衡包括数据链路层、网络层和应用层负载均衡。数据链路层通过修改MAC地址转发帧;网络层通过改变IP地址实现数据包转发;应用层有多种策略,如轮循、权重轮循、随机、权重随机、一致性哈希、响应速度和最少连接数均衡,确保请求合理分配到服务器,提升性能与稳定性。
59 11
架构学习:7种负载均衡算法策略
|
25天前
|
供应链 算法
【算法】——快排,分治算法合集
本文主要介绍排序中的快排思想的应用,做到一法通万法的效果
|
2月前
|
存储 算法 安全
2024重生之回溯数据结构与算法系列学习之串(12)【无论是王道考研人还是IKUN都能包会的;不然别给我家鸽鸽丟脸好嘛?】
数据结构与算法系列学习之串的定义和基本操作、串的储存结构、基本操作的实现、朴素模式匹配算法、KMP算法等代码举例及图解说明;【含常见的报错问题及其对应的解决方法】你个小黑子;这都学不会;能不能不要给我家鸽鸽丢脸啊~除了会黑我家鸽鸽还会干嘛?!!!
2024重生之回溯数据结构与算法系列学习之串(12)【无论是王道考研人还是IKUN都能包会的;不然别给我家鸽鸽丟脸好嘛?】
|
2月前
|
机器学习/深度学习 人工智能 自然语言处理
【EMNLP2024】基于多轮课程学习的大语言模型蒸馏算法 TAPIR
阿里云人工智能平台 PAI 与复旦大学王鹏教授团队合作,在自然语言处理顶级会议 EMNLP 2024 上发表论文《Distilling Instruction-following Abilities of Large Language Models with Task-aware Curriculum Planning》。
|
2月前
|
算法 Python
在Python编程中,分治法、贪心算法和动态规划是三种重要的算法。分治法通过将大问题分解为小问题,递归解决后合并结果
在Python编程中,分治法、贪心算法和动态规划是三种重要的算法。分治法通过将大问题分解为小问题,递归解决后合并结果;贪心算法在每一步选择局部最优解,追求全局最优;动态规划通过保存子问题的解,避免重复计算,确保全局最优。这三种算法各具特色,适用于不同类型的问题,合理选择能显著提升编程效率。
71 2
|
2月前
|
算法 安全 搜索推荐
2024重生之回溯数据结构与算法系列学习(8)【无论是王道考研人还是IKUN都能包会的;不然别给我家鸽鸽丢脸好嘛?】
数据结构王道第2.3章之IKUN和I原达人之数据结构与算法系列学习x单双链表精题详解、数据结构、C++、排序算法、java、动态规划你个小黑子;这都学不会;能不能不要给我家鸽鸽丢脸啊~除了会黑我家鸽鸽还会干嘛?!!!
|
2月前
|
算法 安全 搜索推荐
2024重生之回溯数据结构与算法系列学习之单双链表精题详解(9)【无论是王道考研人还是IKUN都能包会的;不然别给我家鸽鸽丢脸好嘛?】
数据结构王道第2.3章之IKUN和I原达人之数据结构与算法系列学习x单双链表精题详解、数据结构、C++、排序算法、java、动态规划你个小黑子;这都学不会;能不能不要给我家鸽鸽丢脸啊~除了会黑我家鸽鸽还会干嘛?!!!
|
2月前
|
算法 安全 NoSQL
2024重生之回溯数据结构与算法系列学习之栈和队列精题汇总(10)【无论是王道考研人还是IKUN都能包会的;不然别给我家鸽鸽丢脸好嘛?】
数据结构王道第3章之IKUN和I原达人之数据结构与算法系列学习栈与队列精题详解、数据结构、C++、排序算法、java、动态规划你个小黑子;这都学不会;能不能不要给我家鸽鸽丢脸啊~除了会黑我家鸽鸽还会干嘛?!!!
|
3天前
|
算法 数据安全/隐私保护 计算机视觉
基于Retinex算法的图像去雾matlab仿真
本项目展示了基于Retinex算法的图像去雾技术。完整程序运行效果无水印,使用Matlab2022a开发。核心代码包含详细中文注释和操作步骤视频。Retinex理论由Edwin Land提出,旨在分离图像的光照和反射分量,增强图像对比度、颜色和细节,尤其在雾天条件下表现优异,有效解决图像去雾问题。
|
3天前
|
算法 数据可视化 安全
基于DWA优化算法的机器人路径规划matlab仿真
本项目基于DWA优化算法实现机器人路径规划的MATLAB仿真,适用于动态环境下的自主导航。使用MATLAB2022A版本运行,展示路径规划和预测结果。核心代码通过散点图和轨迹图可视化路径点及预测路径。DWA算法通过定义速度空间、采样候选动作并评估其优劣(目标方向性、障碍物距离、速度一致性),实时调整机器人运动参数,确保安全避障并接近目标。

热门文章

最新文章