Algothrim Design note 1

引言:稳定匹配

稳定匹配问题:Gale-Shapley算法返回稳定匹配

initial 所有m∈M和w∈m都是自由的
While 存在男人m 是自由的且没有每个女人求婚
	choose this man m
	let w 是 m 的 优先表中m还没有求过婚的最高排名的女人
	if  w 是自由的 then
		( m , w )形成配对
	Else w 当前与m' 配对
		if w prefer m' to m then
	    	m 保持自由
	    Else  w prefer m to m'
	    	m' 变为自由
	    Endif
	  Endif
EndWhile
输出已配对 集合S

五个经典算法问题

  1. 区间调度(Interval Scheduling) nlogn 贪心算法
    Input: 有标记为1,2,···,n的n个需求,每个需求i由开始时间 s i s_i si和结束时间 f i f_i fi指定,显然对于所有i,我们有 s i < f i s_i<f_i si<fi,如果两个需求i和j所要求的区间不重叠,或者需求i比需求j处在一个更早的时间区间( f i < s i f_i<s_i fi<si),则称为相容的.
    output:找到最大的相容的需求子集!

    Algothrim Design note 1_第1张图片
  2. 带权区间调度 nlogn 动态规划
    设置每个需求区间i有一个相联系的值或者权 v i > 0 v_i>0 vi>0(weights)

Algothrim Design note 1_第2张图片
  1. 二分匹配(Bipartite graph) n k n^k nk最大流问题
    把图应用于之前提到的稳定匹配来表达这些概念,图G=代表二部图,顶点集V可以划分为集合X与Y。
Algothrim Design note 1_第3张图片

与稳定匹配问题不同的是,这里不考虑优先,但是任意二部图问题本身增加了不同源的复杂性:从每个 x ⊂ X y ⊂ Y x \subset X y \subset Y xXyY不一定存在一条边。
input :给定 一个任意二部图 output: 求一个最大匹配

  1. 独立集(Independent Set) NP完全问题
Algothrim Design note 1_第4张图片

讨论一个更加一般化的问题,给定图G=,我们说集合 S ⊂ V S\subset V SV是独立的。如果在S中没有两个结点与同一条边相交。那么独立集问题描述如下:
更加一般化的问题(区间调度和二分图都可以归为独立集问题 NPC问题) 给定图G,找到最大相容独立集。
独立集问题目前状态为:对这一问题还不知道有任何有效的算法,据猜想不存在这样的算法,明显的蛮力算法将尝试所有的结点子集,对每一个进行检查,看看它是否独立,记录遇到的最大的一个,可能这个将近我们力所能及的最好的情况。

  1. 竞争便利店选址问题(Competitive facility location) PSPACE问题

基于以下对策,两家便利店轮流开店,必须遵从分区规章,要求两家咖啡店不允许位置太接近,使得布局尽可能方便。我们更具体一些问题:问题中的地区被划分为n个小区,记为1,2,···,n, 每个小区i有一个值bi,为收入,某对小区(i,j)是相邻的,不允许两个相邻的小区各包含一家店。通过图G=建模,V为小区集合,相邻代表为一条边,构成独立集。
两个对手P1,P2交替从G中选择结点,对于P2是否存在一个策略使得不管P1如何走,P2有一个界至少为B的结点集合
Algothrim Design note 1_第5张图片
input: 一个有带权结点的图
Game: 两个竞争对手轮流选择结点,如果邻居结点被选择了,则不能选。
output:寻找结点的最大权重子集

《 Algorithm Design 》 Jon Kleinberg, Eva Tardos

你可能感兴趣的:(算法)