立体匹配:动态归划

1最短路径问题之原始问题

1.1问题描述

在A00与A40之间确定一条路径它们之间的距离最短,即求A00到A40的最短距离。

1.2解决思路

(1) 要计算A00到A40的最短距离mindist(4,0),可转换为计算A00分别到A30和A31的最短距离mindist(3,0)和mindist(3,1),于是mindist(4, 0)=min{mindist(3,0)+5, mindist(3,1)+2}

(2) 以计算mindist(3,0)为例,mindist(3,1)计算类似。

要计算A00到A30的最短距离mindist(3,0),可转换为计算A00分别到A20、A21和A22的最短距离mindist(2,0)、mindist(2,1)和mindist(2,2),于是mindist(3,0)=min{mindist(2,0)+3, mindist(2,1)+6, mindist(2,2)+8}

(3) 以计算mindist(2,0)为例,mindist(2,1)和mindist(2,2)计算类似。

要计算A00到A20的最短距离mindist(2,0),可转换为计算A00分别到A10、A11和12的最短距离mindist(1,0)、mindist(1,1)和mindist(1,2),于是mindist(2,0)=min{mindist(1,0)+12, mindist(1,1)+6, mindist(1,2)+13}

(4) 以计算mindist(1,0)为例,mindist(1,1)和mindist(1,2)计算类似。

靠,还计算个毛,mindist(1,0)=2

可见,以上问题的核心公式为:

其中,trandist(x, i, j)和mindist(0, 0)已知且mindist(0, 0)=0。

2最短路径问题之扩展问题

2.1问题描述

在A0列与A4列之间确定一条路径使得它们之间的距离最短,即求A0列到A4列的最短距离。

2.2解决思路

虚拟出A-10与A50,然后按“最短路径问题之原始问题”来处理。其中,虚线上的trandist全为0,mindist(-1,0)=0。

2.3由背包问题反推最短路径问题的决策变量、转移代价、状态变量和状态转移方程

最短路径问题中的决策变量di应为从Aij到A(i-1)列时路径的选择,若将Aij到A(i-1)列时的四条路径依次编号为0, 1, 2, 3,则决策变量di可取值为0, 1, 2, 3。每条路径长度就是相应的决策变量对应的转移代价。最短距离问题中的状态变量和状态转换方程的作用被弱化(或者说根本没有用),因为决策变量并不受任何限制。

30-m背包问题

3.1问题描述

[1]有n=4组物品并从1~4编组;[2]每组有m=2种物品并从1~2编号;[3]第i组的第j号物品重wij;[4]第i组的第j号物品值cij;[5]有一个背包,可负重t;[6]现按组依次取物品,每组最多取1种物品,问在背包不超载的情况下取哪些组的哪些编号的物品才能使背包内的物品价值最大。

说明:若某组没有4种物品,例如,只有2种物品,则将编号为2和3的物品的重量和价值都设置为0即可。

3.2解决思路

根据题目可知,一共要操作4次,每次取哪种物品就是决策变量di,可取值为0, 1, 2。0表示一件也不取。相应物品编号的物品的价值就是相应的决策变量对应的转移代价

如上图所示,可转换为与最短路径相似的求解过程。其中,A-10和A50是虚拟出来的。

与最短路径不同的地方之一是这里要计算的是A-10和A50之间的最大距离。

与最短路径不同的地方之二是决策变量不能任意取值,而受制于背包的剩余负重(状态变量),剩余负重小于物品的重量时则不能取此物品。背包前后两次剩余负重的关系就是状态转移方程。如第4次取了重x的物品,则第3次取时剩余负重为t-x。此时,若t-x小于第3组某件物品的重量,则不能取这件物品。

4立体匹配之线扫描

4.1问题描述

与最短路径问题之扩展问题相同

4.2解决思路

5立体匹配之动态归划

相当于添加了限制条件的线扫描算法。限制条件如下:

(1)若当前状态为(x, i,
0),则前一状态为(x-1,
i, 0)或(x-1, i-1, 1)或(x-1, i, 2)

(2)若当前状态为(x, i,
1),则前一状态为(x-1,
i, 0)或(x-1, i-1, 1)

(3)若当前状态为(x, i,
2),则前一状态为(x,
i+1, 0)或(x, i+1, 2)

其中:x表示当前点,x-1表示前一点,i表示视差,0表示点左右图像中可见,1表示点仅左图像中可见,2表示点仅右图像中可见。可形象表达为:

其中,m=0、l=1、r=2分别表示前一点的三种状态,即在左右图像中可见,仅在左图像中可见,仅在右图像中可见。M=0、L=1、R=2表示当前点三种状态。而线段两端点间的位置关系,表示当前状态和前一状态的位置关系。水平表示前一状态是来自前一列的值相等的视差,对角表示前一状态是来自前一列的值小于1的视差,竖起表示前一状态是来自同一列的值高于1的视差。

尽管表面上看,SO是在cols*channels的二维矩阵上动态归划,DP是在cols*channels*3的三维矩阵上动态归划,但由于DP对前一状态的严格限制。所以,实际上,DP的时效性远高于SO。

假设最大视差为d。对于SO算法,每一视差的前置结点数是d,即要运算d次。而对于DP算法,每一状态的前置状态为(3+2+2)/3=2.33,每一视差又分3个状态,所以对每个视差总共要运算2.33*3=7次。通常d都是几十,所以DP的速度是SO是好几倍。

DP的相关计算公式如下:

公式中的cur表示当前的状态,pre表示之前的状态。

时间: 2024-10-31 11:26:16

立体匹配:动态归划的相关文章

【LeetCode-面试算法经典-Java实现】【064-Minimum Path Sum(最小路径和)】

[064-Minimum Path Sum(最小路径和)] [LeetCode-面试算法经典-Java实现][全部题目文件夹索引] 原题 Given a m x n grid filled with non-negative numbers, find a path from top left to bottom right which minimizes the sum of all numbers along its path. Note: You can only move either

Do Palapala (this)

Description 伟大的中国人民有宝箱容量为S(0<=S<=20000),有m个物品(0<m<=30,每个物品有一个体积(正整数).任取若干个装入箱内,使箱子的剩余空间为最小. Input (this.in) 一个整数,表示箱子容量一个整数,表示有m个物品接下来m行,分别表示这m个物品的各自体积 Output (this.out) 一个整数表示箱子剩余空间. SampleInput&Output #1: 24 6 8 3 12 7 9 7 #1: 0 =-= 首先,读

集群调度技术研究综述

1  引言 什么是调度?个人理解最初的调度是和时间有关的.时间作为唯一的不可逆转的资源,一般是划分为多个时间片来使用(如下图所示).就计算机而言,由于CPU的速度快的多,所以就有了针对CPU时间片的调度,让多个任务在同一个CPU上运行起来.这是一个假象,某一时刻CPU还是单任务运行的. 后来为了在同一时间进行更多的任务,需要在同一时间内干多件事情.如果多个人或者多个处理器为了完成一个任务目标一起工作,就需要一个协调者.这就是一个分布式系统,就单个数据中心或者小范围来说,就是集群.如果让一个分布式

剪辑的楼天城的ACM之路

楼天城楼教主的acm心路历程(剪辑) 利用假期空闲之时,将这几年GCJ,ACM,TopCoder 参加的一些重要比赛作个回顾.昨天是GCJ2006 的回忆,今天时间上更早一些吧,我现在还清晰记得3 年前,我刚刚参加ACM 时参加北京赛区2005 和杭州赛区2005 的情况.2005 年ACM-ICPC——酸甜苦辣我进入清华大学开始本科学习的时间是2004 年8 月,在进入清华大学的第一年里,由于基础课学习比较紧张,再加上计算机系不允许大一学生自带电脑,我没有参加2004 年的ACM 比赛.不过在

中国大学生编程第一人:楼天城楼教主的acm心路历程

作为acm爱好者,分享下楼教主的故事,作为勉励 利用假期空闲之时,将这几年GCJ,ACM,TopCoder 参加的一些重要比赛作个回顾.昨天是GCJ2006 的回忆,今天时间上更早一些吧,我现在还清晰记得3 年前,我刚刚参加ACM 时参加北京赛区2005 和杭州赛区2005 的情况.2005 年ACM-ICPC——酸甜苦辣我进入清华大学开始本科学习的时间是2004 年8 月,在进入清华大学的第一年里,由于基础课学习比较紧张,再加上计算机系不允许大一学生自带电脑,我没有参加2004 年的ACM 比

uva658(最短路径+隐式图+状态压缩)

题目连接(vj):https://vjudge.net/problem/UVA-658 题意:补丁在修正 bug 时,有时也会引入新的 bug.假定有 n(n≤20)个潜在 bug 和 m(m≤100) 个补丁,每个补丁用两个长度为 n 的字符串表示,其中字符串的每个位置表示一个 bug.第一 个串表示打补丁之前的状态("-" 表示该 bug 必须不存在,"+" 表示必须存在,0 表示无所 谓),第二个串表示打补丁之后的状态("-" 表示不存在,

动态模板中 SWIPER 划不动问题

原文: 地址:http://hao.jser.com/archive/8030/ 作者:segmentfault 问题: 动态循环生成swiper-slide类,在swiper-wrapper里生成6个以上的滑动页,可是就是划不到第二页. 解决: 在查阅Swiper的API时发现,有这样两个参数:observer和observeParents,前者启动动态检查器,当改变swiper的样式(例如隐藏/显示)或者修改swiper的子元素时,自动初始化swiper.后者原理和前者一样,只是将obser

Windows服务器配置与管理动态磁盘技术 、建立基本卷、带区卷、跨区卷、镜像卷和RAID-5卷的方法 磁盘配额

工作任务描述 在上一个项目中,HT公司为HW的部署windows server 2008 以后,又添置了3块8G的(实验模拟)硬盘,要求完成以下操作 项目要求: 将这3块磁盘升级为动态磁盘. 在磁盘1上创建一个简单卷,大小为10M,格式化为NTFS,卷标为E: 完成后,扩展E卷,由磁盘1和磁盘2各提供10M,最后E卷的大小为多少M? 在磁盘2和磁盘3上划出15M出来做镜像卷,设置卷标为F: 在磁盘2和磁盘3上划出20M出来做带区卷,设置卷标为G: 在磁盘1,磁盘2和磁盘3上各划出12M出来做RA

第二十二章 动态分区管理(LPAR)

一.逻辑分区 Lpar即系统级的逻辑分区,它把一台计算机上的硬件资源划分成多个不同的逻辑服务器,每个逻辑服务器上单独运行一个私有的操作系统,这样就可以实现在一台服务器上多个操作系统的运行. 根据在逻辑分区中调配资源是否需要重启这个分区中的操作系统,可以把逻辑分区分成两种:静态Lpar和动态Lpar.静态Lpar是指系统资源(CPU.内存和I/O等)在不同的分区之间移动的时候需要重新启动所有影响到的Lpar,而动态Lpar则可以使用户在不同的分区之间灵活移动资源时不会影响到分区的正常运行,既不需要