metis 论文串行图划分笔记
Metis
图划分
目标:将图划分为几个包含差不多相等的顶点个数的部分,并且这些部分之间的边数目尽可能地小。(若是有权重的 ,则是各个划分内部的权重和差不多相等,各划分之间的权重尽可能小)
k路划分:
可以不断地执行二路划分 递归的执行 logk 次:例如要求 4 个,那么递归执行 log4 即两次二分,那么就变成了四块。
Coarsening Phase
多个节点合成一个节点,有以下几点要注意:
- 节点的权值为合成的结点的总个数
- 为保持连通性,新的边为原来的并集
- 边的权值为并起来的边的个数之和
两种方法:
- 随机匹配,匹配上的点合成一个节点
- 有高度连接的点合成一个点
第二种方法适用于 VLSI 因为其中可能有很多连接紧密的节点。
第一种方法:
一个匹配是 maximal 的,为如果图中任何一个没被选入匹配的边的至少一个端点被匹配了。也即不能有这样的两个邻接点,他们都没被选中,这样的话这个匹配就不是 maximal 匹配
maximal 匹配中,拥有最大的边的数目的是 maximum 匹配
显然,计算 maximum 匹配要比普通的 maximal 匹配消耗的多。
G0 若是 maximal 的,则 Gi 仍是 maximal 的
Random Matching:
随机的访问图上的点,如果遇到一个没有被 match 的点,那我们就随机的找一个这样的点的邻接点,如果存在这样的一个邻接点 v,我们就将边 (u,v) 加入 match,表示 u 和 v
match 了,如果没有这样的一个点,那么 u 就保持 unmatched。复杂度为 O(|E|)。因为每次都是合并两个点,所以最多减少一半的点,所以这一轮过后不可能少于原图的一半的点的数目
Partitioning Phase
目的:划分成两个差不多大小的顶点集合(weight 差不多),以及 edge-cut 尽可能小(两个集合间边个数或权值之和尽可能小)
此时的图已经尽可能小了(点的数目小于 100 个)
Kernighan-Lin Algorithm (KL):
首先将图分为两半 A 和 B,定义 gain gv(对于v来说) 为,对 v 的邻接点 u,若 u 和 v 属于不同分区,将(u,v)其权重加起来,减去顶点属于同一分区的(u,v)权重之和。如果 gv 是正的,则将 v 移动到另一个区域中,
并且将 edge-cut 减小 gv。如果 gv 是负数,则移动到另一边并且 edge-cut 加上这个负数的绝对值(理解为减去这个负数)。
如果 v 从一边移动到了另一边,要更新 v 的邻接节点的 gain 值。
给出这样的一个定义,KL 算法不断地从较大的一边中选出 gain 最大的 v 并将其移动到另外一边。在移动 v 后,标记它那么同一个迭代中不会再考虑它,它的邻接节点被 update,在一个迭代内:原始的 KL 算法会一直
移动直到所有节点都被动过了,现在论文给出的算法是 x 次移动之后 edge-cut 就不会再降低了,反而可能会增加(gv是负数的情况),设置 x 为 50 次(即一个迭代 50 次交换)
Uncoarsening Phase
在从 Gi+1 变为 Gi 的过程中,由于 Gi 更加精细了,所以可以有更好的划分方式,基本思想是从 A 和 B 之间选择两个子集合,交换他们能得到更少的 edge-cut。
Kernighan-Lin Refinement:
首先,将 Gi+1 的划分作为 Gi 的划分(因为他已经是一个好划分了),KL 算法将用 3~5 个迭代让它变成一个更好的划分。
在这种情况下,只有一小部份的顶点交换才能让他更好,更多的其他的交换只会让他更差,所以一个迭代内还是只交换 50 次。
KL 算法此时的复杂度取决于将顶点插入合适的数据结构的时间。也就是即使我们减少了交换顶点的数量,总体的时间复杂度也并不会大幅的下降。
problem
- 没有考虑网络拓扑和带宽信息
- 搜索空间很大,图很多,规模很大的时候很难做并行化,运行时间较长
metis 论文串行图划分笔记相关推荐
- 【Python爬虫】从零开始爬取Sci-Hub上的论文(串行爬取)
[Python爬虫]从零开始爬取Sci-Hub上的论文(串行爬取) 维护日志 项目简介 步骤与实践 STEP1 获取目标内容的列表 STEP2 利用开发者工具进行网页调研 2.1 提取文章链接和分页链 ...
- metis 多线程图划分论文笔记
多线程图划分 目的 利用多线程来完成图划分,从而达到提高效率的作用. 定义 balance: balance 是用来衡量 k 划分有多么的平等的. balance 定义为 k * max_i{η(V_ ...
- AD9910高速集成DDS芯片(芯片阅读笔记-串行模式篇-22个寄存器SPI通信周期控制)
文章目录 引言 串行编程 利用官方软件得到寄存器值 福利连接 引言 本文为AD9910的芯片阅读笔记,本文并不是对芯片手册的纯粹照搬,所以建议结合芯片手册阅读.通过对AD9910芯片手册的理解,然后再 ...
- windows 安装metis_图划分软件Metis的使用(win10+vs2017)
Metis是由Karypis Lab开发的一个具有强大功能的图划分软件包,可用于划分不规则图(graph).网格(mesh)以及计算稀疏矩阵(Sparse Matrices)的Fill-Reducin ...
- 图划分软件Metis的使用
Metis是由Karypis Lab开发的一个具有强大功能的图划分软件包,可用于划分不规则图(graph).网格(mesh)以及计算稀疏矩阵(Sparse Matrices)的Fill-Reducin ...
- 使用METIS软件包进行图划分
目录 0 前言 1 安装METIS 2 安装CMake GUI 3 用CMake GUI编译METIS 4 修改gk_arch.h文件 5 用VS生成解决方案 6 在VS中进行图划分 参考文献 0 前 ...
- 图划分(Graph PartitionRe-ordering): METIS(5.x)ParMETIS(4.x)使用实践
图划分(Graph Partition&Re-ordering): METIS(5.x)&ParMETIS(4.x)使用实践 学习METIS&ParMETIS用法:阅读手册和示 ...
- STM32学习笔记一、 IO模拟串行通讯
代码下载链接:实验五.USART-IO模拟.zip-嵌入式文档类资源-CSDN下载 文档下载链接:UART数据波形分析_uart波形-硬件开发文档类资源-CSDN下载 首先对UART数据波形进行分析: ...
- 锁与并发工具包与线程池与LockSupport与Fork/Join框架与并行流串行流与阻塞队列与JPS,jstack命令查看死锁查看线程状态与AQS个人笔记九
朝闻道,夕死可矣 本文共计 86564字,估计阅读时长1小时 点击进入->Thread源码万字逐行解析 文章目录 本文共计 86564字,估计阅读时长1小时 一锁 二Java中13个原子操作类 ...
最新文章
- Redis实战(2)安装和试用
- hibernate关联关系(多对多)
- [PAT乙级]1011 A+B 和 C
- Ubuntu中安装Eclipse的SVN插件——subclipse
- 理论 | 当 Spring Boot 遇上了消息队列......
- 有未经处理的异常(在 xx.exe 中): 堆栈 Cookie 检测代码检测到基于堆栈的缓冲区溢出。
- thinkcmf apache rewrite文件
- 家居有线网络布线方案(转)
- simplemind pro for Mac(思维导图)
- ubuntu 环境变量配置
- 经典卷积神经网络 LeNet 动手学深度学习v2 pytorch
- 【备忘】LAMP兄弟连李明老师讲Linux[更新完毕-共享完毕]
- 【GIS】开源GIS简介
- 《图解HTTP》笔记
- UI自动化测试神器->Cypress
- matlab实时编辑器怎么用,Markdown 实时编辑器
- 第二章 爬取案例-链家租房数据获取 2021-09-16
- java.util.Date中的loe_有趣的widget-日期和时间
- Ubuntu20.04切换阿里源镜像(清华源、网易源)
- 保姆级 IGV 基因组浏览器使用指南(图文详解)
热门文章
- Pycharm 让编辑区/代码区背景色为白色或与主题色不同
- 【WangEditor】使用富文本编辑器 WangEditor 实现用户自定义图片大小(改js源码)
- 华为交换机的远程登录和密码设置
- 苹果酸-天冬氨酸穿梭
- Dilated Convolution膨胀卷积感受野详解
- 1、Multisim14 安装教程
- vmware workstation 8序列号
- websocket 单机服务 和 分布式集群解决方案
- python宇晨_第三十届全国青少年科技创新大赛青少年科技创意作品中学组.PDF
- 【WebLogic使用】3.WebLogic配置jndi数据源