斯坦纳树暂记

2023-10-04 10:30
文章标签 斯坦纳 暂记

本文主要是介绍斯坦纳树暂记,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

考虑著名的Steiner Tree问题:

问题描述

设 G ( V , E , W )是一个无向带权连通图 ( V 是顶点的集合, E 是边的集合, W 是边上权重的集合,顶点 v i , v j ∈ V ,由 v i , v j 构成的边记为 e i j 或者 e j i , 边上的权重记为 w i j 或者 w j i , 且 w i j = w j i , w i j > 0 ) 。 设G(V,E,W)是一个无向带权连通图\\ \tiny(V是顶点的集合,E是边的集合,W是边上权重的集合,顶点v_i,v_j∈V,由v_i,v_j构成的边记为e_{ij}或者e_{ji},边上的权重记为w_{ij}或者w_{ji},且w_{ij}=w_{ji},w_{ij}>0)。 GV,E,W)是一个无向带权连通图(V是顶点的集合,E是边的集合,W是边上权重的集合,顶点vi,vjV,由vi,vj构成的边记为eij或者eji,边上的权重记为wij或者wji,wij=wji,wij>0)
设 R 是 V 的一个子集,即 R ⊆ V ,在 G 中求一颗生成树 T ,使得 T 包含 R 中所有顶点,且生成树 T 的权重最小 (生成树 T 的权重是指构成 T 的所有边权重之和),即 m i n { ∑ e i j ∈ T w i j } 权重最小的生成树 T 称为 G 关于 R 的 S t e i n e r T r e e . 设R是V的一个子集,即R⊆V,在G中求一颗生成树T,使得T包含R中所有顶点,且生成树T的权重最小\\ (生成树T的权重是指构成T的所有边权重之和),即 min\{\sum_{e_{ij}\in T} w_{ij}\}\\ 权重最小的生成树T称为G关于R的Steiner Tree. RV的一个子集,即RV,在G中求一颗生成树T,使得T包含R中所有顶点,且生成树T的权重最小(生成树T的权重是指构成T的所有边权重之和),即min{eijTwij}权重最小的生成树T称为G关于RSteinerTree.
参考一

NPC证明

方法: b y t r a n s f o r m i n g a n o t h e r k n o w n N P − c o m p l e t e p r o b l e m t o i t 方法:by\ transforming\ \ another \ \ known\ \ NP-complete \ problem \ to \ it 方法:by transforming  another  known  NPcomplete problem to it
show that a problem Π is NP-complete:

  1. show than Π is in NP;\
  2. select a known NP-complete problem Π0;
  3. construct a transformation f from Π0 to Π;
  4. prove that f is a polynomial transformation.

Steiner Tree is in NP

假设存在正确解T,我们可以在多项式时间内验证:
T是一棵树,是联通的且不存在环
T包含顶点集合R的所有元素
树的边数不超过k

XKC问题 集合覆盖问题(选择最少的集合,覆盖所有的元素)

添加链接描述
XKC中k的意思是每个小集合只有三个元素

最小生成树是在给定的点集和边中寻求最短网络使所有点连通
而最小斯坦纳树允许在给定点外增加额外的点,使生成的最短网络开销最小

参考

拓展

  • Steiner Minimum Tree Problem,SMTP
  • 最小斯坦纳树

这篇关于斯坦纳树暂记的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1888

相关文章

设计编程网站集:生活部分:饮食+农业,植物(暂记)

这里写目录标题 植物相关综合教程**大型植物:****高大乔木(Trees):** 具有坚硬的木质茎,通常高度超过6米。例如,橡树、松树、榉树等。松树梧桐 **灌木(Shrubs):** 比乔木矮小,通常有多个木质茎,高度通常在1.5米至6米之间。例如,蔷薇科中的一些植物。蔓越莓蓝莓柠檬 **中型植物:****草本植物(Herbs):** 通常是一年生或多年生的短小植物,没有木质茎。它们的高

linux系统下vscode portable版本的c++/Cmake环境搭建002:使用 VSIX 安装VSCODE插件(暂记)

使用 VSIX 安装VSCODE插件 在 Visual Studio Code (VSCode) 中,你可以通过以下步骤离线安装插件: 获取插件的 VSIX 文件: 在一个联网环境中,访问 Visual Studio Code Marketplace,搜索并找到你想要的插件。 比如:https://marketplace.visualstudio.com/items?itemName=ms-

生物化学 荒诞医学史笔记:重金属(暂记)

“理论基础” 四液说         根据希罗多德的说法,古埃及人为了维持自身健康,每月都会使用催吐剂。希波克拉底也提倡定期呕吐。之后的好几千年中,这种建议不断出现。直到最近几十年,催吐剂还被认为是医学处方的重要组 成部分。         大部分催吐剂的使用,都可溯源到四液说:这一理论认为,当体内的血液、黑胆汁、黄胆汁、黏液四种体液失衡时,人体就会产生疾病。而通过呕吐、腹泻、出汗或唾液分泌来

经典斯坦纳树

问题 给出一张正权联通图和K个点,求连接这K个点的连通块最小权值和 题解 首先可以确定答案连通块是一棵树,因为如果有环则删去环上任意一条边就更优 引入斯坦纳树 设f[i][s]为以i为根的树达到这K个点为s的状态所需的最小权值和 有(t|s=s)时,f[i][s]=min(f[i][s],f[i][t]+f[i][s-t]) 有i与j有边时,f[i][s]=min(f[i][s],f[j][s

django内置模板标签和过滤器{%%}及html中{{}}暂记

html中:{{}}、{%%} Built-in template tags and filters Built-in template tags and filters | Django documentation | Django  https://docs.djangoproject.com/en/dev/ref/templates/builtins/ {% autoescape on

ZOJ 3613 Wormhole Transport(DP 斯坦纳树)

题意:有n个星球,其中有些星球上有多个工作,有些星球上有些资源(但是一个星球上的资源只能提供给一个工厂),知道在一些星球边建立边的代价,问使得得到资源的工厂的数目最多的多少,在些前提下代价最小是多少。 还是斯坦纳树,不懂看:http://endlesscount.blog.163.com/blog/static/821197872012525113427573/ #include <iost

HDU 4085 Peach Blossom Spring(DP,斯坦纳树)

题意:给你n,m,k ,分别表示有n个点,m条边,每条边有一个权值,表示修复这条边需要的代价,从前k个点中任取一个使其和后k个点中的某一个点,通过边连接,并且必须是一一对应,问最小的代价是多少。     同样是斯坦纳树,不过最后得到的答案可能是森林,所以最后要跑一个DP。如果不懂斯坦纳树,看:http://endlesscount.blog.163.com/blog/static/82119

CF 108E Garden(DP,斯坦纳树)

题意:给你一个n*m的矩阵,和k个点,要求使这k个点相互连接,并且使连接的代价最小(每个矩阵上都有一个权值,如果权值为0表示k个点其中的一个,连接的代价等于将这些点连接起来的路径上的权值和。)    简单的斯坦纳树,只要要要多开一个数组记录路径。如果不懂斯坦纳树,看http://endlesscount.blog.163.com/blog/static/821197872012525113427

[bzoj4006][斯坦纳树][DP]管道连接

Description 小铭铭最近进入了某情报部门,该部门正在被如何建立安全的通道连接困扰。 该部门有 n 个情报站,用 1 到 n 的整数编号。给出 m 对情报站 ui;vi 和费用 wi,表示情 报站 ui 和 vi 之间可以花费 wi 单位资源建立通道。 如果一个情报站经过若干个建立好的通道可以到达另外一个情报站,那么这两个情报站就 建立了通道连接。形式化地,若 ui 和 vi 建立了通

[图论算法] 斯坦纳树

斯坦纳树解决的是这么一类问题——在图上选择N个节点,求只计算这N个节点的最小生成树。该问题是NP完全的,这意味着它没有多项式时间的解法。一般来说,我们使用状压DP解决这个问题        我们让   表示已经考虑的节点状态为i(如果i的第k位是1,那么我们已经把需要考虑的第k个节点考虑进去了),当前斯坦纳树的根节点为j的解(边权和),那么,显然一棵斯坦纳树可以裂成两个,换句话说