算法学习笔记_问题转换

学习编程知识的同时,梳理知识,也便于以后查找
tags:《图解算法》、《算法图解》、B站视频

问题转换

什么是问题转换

简而言之,就是将陌生的问题转换成熟悉的问题后,借助解决此熟悉的问题间接地解决原来陌生的问题。

将相异代表系问题转换成二分图上的匹配问题

  • 相异代表系问题
    在这里插入图片描述

  • 二分图上的匹配问题
    在这里插入图片描述

  • 转换为二分图上的匹配问题
    在这里插入图片描述
    将相异代表系问题转换成分图 上的匹配问题。转换后,根据表的输人,可以画出如上图所示的二分图。此图的最大匹配可以代表在社团中选出的会长名单

当最大匹配的个数小于社团的个数时,代表无法帮每个社团选出-位专职的会长。此外,二分图上的匹配问题可用匈牙利法( the Hungarian Method )

将二分图上的匹配问题转换成网络流图问题

  • 网络流图问题

在这里插入图片描述

接下来,我们将二分图上的匹配问题转换成网络流图问题。首先,将匹配问题的(无方向)二分图转换成网络流图问题的有向网络。以上表中 的匹配问题为例,我们在二分图G=(S, T, E)上下分别新增两顶点s和t (源点和汇集点)。其中,源点s连接朝向S中的所有顶点,汇集点T中的所有顶点连接朝向顶点t。接着,将所有原来E中的连线改成从s指向T的有向连线,如下图
在这里插入图片描述

上图将无向的二分图改成有向的网络

紧接着,让网络上每条连线的容量为1。直觉上,使用二分图改造的网络,其流量的瓶颈就是原来二分图的中间连线。当在此网络上找到最大流量时,必须经过二分图中的最多连线以传输最大流量,也可以间接地找到原来二分图上的最大匹配,如下图中 的粗线。

在这里插入图片描述

上述网络流图问题可使用福特富尔克森法(Ford-Fulkerson Mecho)找到-个整数解。

将网络流图问题转换成线性规划问题

最后的例子是将网络流图问题转换成线性规划问题。线性规划问题对我们来说并不陌生,如农夫养猪羊的问题。

线性规划问题
在这里插入图片描述
接下来,我们将网络流图问题转换成线性规划问题。首先, 重新叙达网络流量问题如下:

  1. 个网络流图是在每一条连线。上决定其流量fe).值不可超过容量c(e)。

  2. 除了源点s和汇集点t外,每一个顶点需符合“流人流量的总和等于流出流量的总和”

  3. 网络流图问题是找出一个网络流图,使得流出源点s的流量总和最大。

经观察发现,(1) 和(2)和限制式有关,而(3)用于阐述目标函数。我们会逐步将这3个叙述转换成线性规划问题。

在这里插入图片描述
受限于:
在这里插入图片描述

如同前面两次的转换,线性规划问题也可以被单纯形法( Simplex Method )所解。

问题转换的技巧

问题转换的技巧是将 一个陌生问题转换成较熟悉的问题。使用较熟悉问题早已存在的解法间接地解决此陌生问题,如上图所示。

当我们面对一个陌生问题时, 常会问:“该转换到哪 个问题呢? 。

如果你熟悉的问题本来就不多,上面的问题就难有答案了! 反之,如果你常常比较两个问题间的相似处和不同处,应该会对这两个问题产生更深的体会。

引用利亚先生(G. Polya)在《如何解题》中的-段话,作为本章的结束语:

“你以前看过这个问题吗?你看过相似的问题吗?你看过相关的问题吗?

“这里有一一个相关而且知道解法的问题。你能使用它吗?你能使用它的结果吗?你能使用它的方法吗?你可以引入一些辅助元素以便使用它吗?

“你可以重新表达这个问题吗?你可以用不同的方式表达这个问题吗?”

–END—