图论导引 - 第三章 第四节 - 11/13

ops/2024/11/14 11:41:04/

相关算法

在本节中,我们简要描述与本章相关的三个问题——最短路径问题、中国邮递员问题和旅行商问题

  • 最短路径问题可以通过一种高效算法来解决,即通过一个有限的、逐步执行的程序能快速得出解决方案。
  • 邮递员问题只考虑一种特殊情况。
  • 旅行商问题,目前还没有已知的高效算法;因此必须在执行时间长的算法和启发式算法之间做出选择,启发式算法虽然应用起来很快,但只能给出近似解

最短路径问题

注意,通过选取从 A A A L L L 的任意一条路径并计算其长度,就可以很容易地得到答案的一个上界。例如,路径 A → B → D → G → J → L A \to B \to D \to G \to J \to L ABDGJL 的总长度为 18,所以最短路径的长度不会超过 18。

加权图

在最短路径问题中,图/连通图中的每条边都被赋予了一个非负数字,这样的图被称为加权图(weighted graph),赋予每条边 e e e 的数字就是 e e e权重(weight) w ( e ) w(e) w(e) 表示

  • 最短路径问题就在于找到从 A A A L L L 总权重最小的一条路径。
  • 如果一个加权图中每条边的权重都为 1,那么该问题就简化为找出从 A A A L L L 的最短路径中的边数问题。
解决思路

本质是动态规划思想,从起点到当前节点的最短距离一定来源于上一个具有最短距离的邻接节点。

  • 动态规划数组 l ( V ) l(V) l(V) 表示从起点 A A A 到当前顶点 V V V 的最短距离。同时再用一个数组标记当前顶点 V V V​ 是否已经找到了最短距离,称为永久标记。
  • 递推方程
    • 用节点 V ′ V^{'} V 表示当前节点 V V V 的邻接节点
    • $l(V{'})=min(l(V{‘}), l(V)+w(e_{VV^{’}})) $
  • 初始化:起点最短距离标记为 l ( A ) = 0 l(A)=0 l(A)=0,并永久标记。
  • 遍历顺序:从起点开始遍历邻接节点,之后每次都从已经确定最短距离的顶点开始遍历,直到遍历完整个图。

在这里插入图片描述在这里插入图片描述在这里插入图片描述
在这里插入图片描述

中国邮递员问题

问题定义

在中国数学家管梅谷所探讨的这个问题中,一名邮递员希望投递信件,要覆盖尽可能短的总路程并返回其起点。显然,他必须至少遍历其路线中的每条道路一次,且应避免过多道路被重复经过

解决思路
  • 图表示
    • 用加权图的形式表述问题,该图对应道路网络,每条边的权重就是相应道路的长度。
    • 问题要求是找到一条总权重最小的闭迹,且每条边至少要经过一次。
  • 思路
    • 如果该图是欧拉图,那么任何一条欧拉迹都是问题的解,欧拉迹可以通过弗勒里算法找到。
    • 如果该图不是欧拉图,但有可能是半欧拉图
      • 回顾推论:一个连通图是半欧拉图当且仅当它恰有两个度数为奇数的顶点。
      • 该图中恰好有两个顶点的度数为奇数,说明该图是一个半欧拉图。
      • 在一个半欧拉图中,任何半欧拉迹都必须以一个度数为奇数的顶点作为起始顶点以另一个度数为奇数的顶点作为终点
      • 找到一条半欧拉迹,该半欧拉迹会经过每条边,但是我们还需要从终点返回到起点。
      • 根据最短路径算法找到一条从终点返回起点的最短路径加入半欧拉迹即可。

在这里插入图片描述

旅行商问题

问题定义

在这个问题中,一名旅行推销员希望走访若干给定的城市并返回其起点,且要覆盖尽可能短的总路程。

走访给定城市可以视为走访图中尽可能多的顶点,即找哈密顿圈。

解决思路
  • 图表示
    • 用加权图的形式表述问题,该图对应道路网络,每条边的权重就是相应道路的长度,也可以指代城市之间的通行时间,或者其他成本。
    • 问题要求是在一个加权完全图中找到总权重尽可能小的哈密顿圈。
  • 思路
    • 一种可能的算法是计算所有可能的哈密顿回路的距离再选择距离最小的,但对于超过约五座城市的情况,该方法过于复杂。
      • 如果有20座城市,可能的回路数量是 ( 19 ! ) / 2 (19!)/2 (19!)/2,大约为 6 × 1 0 16 6×10^{16} 6×1016。也有其他算法被提出,但应用起来耗时太长。
    • 另一方面,有几种启发式算法能快速大致告诉我们最短距离是多少,其中一种启发式方法将在后续中介绍。

在这里插入图片描述


http://www.ppmy.cn/ops/133555.html

相关文章

Redis设计与实现 学习笔记 第十七章 集群

Redis集群是Redis提供的分布式数据库方案,集群通过分片(sharding,水平切分)来进行数据共享,并提供复制和故障转移功能。 17.1 节点 一个Redis集群通常由多个节点(node)组成,在刚开…

02-分布式对象存储设计原理

02-分布式对象存储设计原理 保存图片、音视频等大文件就是对象存储: 很好的大文件读写性能 还可通过水平扩展实现近乎无限容量 并兼顾服务高可用、数据高可靠 对象存储“全能”,主要因为,对象存储是原生分布式存储系统,相比MySQL、…

聚焦国际数字影像,打造特色产业集群

在数字经济浪潮的推动下,众多城市和地区正积极投身于这一新兴领域的园区建设与规划,旨在打造数字经济与创意产业蓬勃发展的沃土。 规划国际数字影像产业园的首要任务,在于精准定位与明确目标。鉴于数字影像产业的多元化特性,涵盖…

酯化反应催化剂树脂

酯化反应是有机化学中一种重要的反应类型,涉及到酸和醇生成酯和水的过程。为了加速这一过程,通常需要加入催化剂。 Tulsimer T-62 MP DRY 催化剂级强酸型核子级离子交换树脂 加载在聚合物基质上的酸性官能团与同类型的矿物质酸具有相同的化学性质&a…

Paddle分布式训练报NCCL错

应该是没有装NCCL,但是通过NVIDIA官网方式用apt安装报错,说nccl签名有问题 打开官网查找对应版本的nccl:https://developer.nvidia.com/nccl/nccl-legacy-downloads 这里不下载local Ubuntu选项,下载O/S agnostic local install…

密码学在网络安全中的应用

密码学作为网络安全领域的核心技术之一,发挥着举足轻重的作用。以下是对密码学在网络安全中应用的详细阐述: 一、数据加密密码学通过加密算法将明文转换为密文,以防止未经授权的个人或机构获取敏感信息。这主要包括:对称加密&…

opencv 中 threshold 函数作用

在 OpenCV 中,threshold 函数用于将图像转换为二值图像,它通过设置一个阈值来将像素值分类为两类:低于阈值的像素设置为 0(或黑色),高于阈值的像素设置为最大值(通常是 255 或白色)。…

导航栏小案例

实现类似于这样的效果 <!DOCTYPE html> <html><head><meta charset"utf-8"><title>导航栏</title><style>*{margin: 0;padding: 0;}.div1{width: 100%;height: 60px;/* border: 1px solid blue; */background-color:rgb(…