现实里面的road network是存在着width比较小的tree decomposition的。

  • 节点对应城镇,
  • 边对应着城镇间的道路,
  • 边权对应着距离

在road network里面,一个重要的问题就是对于任意给定的两个节点 s 和 t  ,计算它们之间的最短距离 (shortest distance)。

这个问题可以用Dijkstra算法来计算,但在[1]中,作者给出了更好的解法:( n表示图中节点的数量)

定理. 假设我们有关于road network G、width为 w、高度为 h 的一个树分解,那么存在一个大小为 O(n·h)的数据结构 S,使得我们能够在 O(w)时间内计算 G 中任意两个节点的最短距离。

在[1]中,作者对于美国的几个road network分别启发式地计算了一个次优(width不一定最小)的tree decomposition,得到的结果如下(第5和第6列):

1. 定义

为了方便讨论,因为题目没给,下面先给出tree decomposition和treewidth的定义。

对于每个节点 v∈V,我们用

  • T(v)表示所有满足v∈Sz的树节点 z 所构成的子树
  • X(v)表示 T(v) 的根节点。

例如,对于下面这个图,

存在一个树分解(图2)。

树中的每个节点记录着对应的 Sz。

可以验证这棵树满足定义中的3个条件。

此外,以 v13 为例子, T(v13)为图中黄色背景的那棵子树,X(v13)为这颗子树的根。

treewidth的定义与tree decomposition相关,如下:

求treewidth是一个NP-hard的问题。在[1]中,作者用Bodlaender的启发式算法,在多项式时间内对一个给定的road network,计算它的一个tree decomposition。对于图1中的图,图2即为该算法的结果。该算法得到的tree decomposition除了定义中的3个性质,还满足另外一个性质:

作者:知乎用户
链接:https://www.zhihu.com/question/343030840/answer/833066097
来源:知乎
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

视频

https://www.youtube.com/watch?v=kEnDGTwSDXY

树分解 宽度 如何分解 算法相关推荐

  1. java质因数的分解_Java实现分解任意输入数的质因数算法示例

    本文实例讲述了Java实现分解任意输入数的质因数算法.分享给大家供大家参考,具体如下: 分解任意输入数的质因数: 质因数概念:任何一个合数都可以写成几个质数相乘的形式.其中每个质数都是这个合数的因数, ...

  2. 基于矩阵分解的协同过滤算法

    基于矩阵分解的协同过滤算法 基于矩阵分解的CF算法实现(一):LFM LFM原理解析 损失函数 随机梯度下降法优化 基于矩阵分解的CF算法实现(二):BiasSvd BiasSvd 损失函数 随机梯度 ...

  3. 大数据算法概述及算法分解之亚线性算法

    一.大数据算法的难度 1.访问全部数据时间过长 --读取部分数据---------------时间亚线性算法 2.数据难于放入内存计算 --将数据存储在磁盘上--------外存算法 --仅基于少量数 ...

  4. 非负矩阵分解算法C语言,非负矩阵分解的两种算法

    摘要: 随着计算机和信息技术的发展,矩阵分解成为处理大规模数据的一种有效手段.例如,在数值计算中,利用矩阵分解可将规模较大的复杂问题转化为小规模的简单子问题来求解;在应用统计领域,通过矩阵分解得到原数 ...

  5. 怎样用matlab做矩阵的LU分解,矩阵LU分解程序实现(Matlab)

    n=4;%确定需要LU分解的矩阵维数 %A=zeros(n,n); L=eye(n,n);P=eye(n,n);U=zeros(n,n);%初始化矩阵 tempU=zeros(1,n);tempP=z ...

  6. 树模型系列之XGBoost算法

    文章目录 树模型系列之XGBoost算法 概要 原理 损失函数 子树 xgboost算法流程总结 关键问题 缺失值处理(稀疏问题的分裂点查找 Sparsity-aware Split Finding) ...

  7. 三阶矩阵的lu分解详细步骤_数学 - 线性代数导论 - #4 矩阵分解之LU分解的意义、步骤和成立条件...

    线性代数导论 - #4 矩阵分解之LU分解的意义.步骤和成立条件 目前我们用于解线性方程组的方法依然是Gauss消元法.在Gauss消元法中,我们将右侧向量b与A写在一起作为一个增广矩阵进行同步的操作 ...

  8. 机器学习(十一)——机器学习中的矩阵方法(1)LU分解、QR分解

    http://antkillerfarm.github.io/ 因子分析的EM估计(续) 去掉和各参数无关的部分后,可得: ∑i=1mE[logp(x(i)|z(i);μ,Λ,Ψ)]=∑i=1mE[1 ...

  9. CP分解和HOSVD分解

    一.CP分解(CANDECAMP/PARAFAC) 这是较为古老的一种张量分解方法.最早的研究历史可以追溯到1927年. 在上一节,学习向量乘积的时候,我们看到两个向量外积产生一个矩阵.我们可以推断出 ...

  10. 矩阵理论(二)特征值分解和SVD分解

    特征值分解和SVD分解是两种将矩阵进行分解的经典方法,两者在机器学习的各类算法中被广泛使用(如PCA降维.文本LSI.推荐算法等等). 一.特征值分解 定义:对于方阵A\boldsymbol AA,若 ...

最新文章

  1. 个人博客开通--纪念一下。。。
  2. PyCairo 后端
  3. 更精炼更专注的RTMPClient客户端EasyRTMPClient,满足直播、转发、分析等各种需求...
  4. HDOJ1014 Uniform Generator
  5. 1-4 TCP/IP协议族
  6. SpringBoot2 | Spring IOC 流程中核心扩展接口的12个扩展点源码分析(十一)
  7. Linux cc 和 gcc 的区别概括介绍
  8. Python卸载报错:No Python 3.8 installation was detected
  9. c语言float类型小数部分占几个字节,c语言float类型小数点后位数
  10. node koa2 mysql_Node.js + Koa2 + MySQL + Vue.js 实战开发一套完整个人博客项目网站
  11. AUTOCAD——标注关联
  12. opencv (二十六)图像直方图匹配
  13. ROS与Arduino:ros_arduino_bridge功能包的使用解读
  14. 08python excel一键式统计0.11版本修正利息收入费用正负表达问题
  15. UDP进程terminated
  16. 获取非行内样式的兼容
  17. 洛谷 P2186 小Z的栈函数
  18. ARP协议详解(3)--arp欺骗
  19. java ews appointment_EWS API 2.0读取日历信息-读取内容注意事项
  20. 西安工大计算机学院李颖,李颖 -西安交通大学人文社会科学学院

热门文章

  1. MAC 上的 Live Writer : ecto
  2. JDBC连接Oracle数据库时出现的ORA-12505错误及解决办法.
  3. 10分钟快速配置LAMP环境
  4. shell 之while两种写法
  5. 流畅的python和cookbook学习笔记(五)
  6. 056 日志的正则式方式加载
  7. Extjs4.2或以上 使用自定义事件时报错问题
  8. 驱动研究日记-内核同步
  9. python获取线程返回值_如何从python中的线程获取返回值?
  10. linux服务器家目录,linux服务器根目录空间不足