对间距大小的贪心选择。
来源:互联网 发布:doss攻击软件 编辑:程序博客网 时间:2024/04/28 17:23
点区域覆盖的问题是这样的:
n个点排列在一直线上,设计一个算法,最少需要多少单位长度的闭区间线段才能完全覆盖这n个点。
算法设计如下:
首先计算各个相邻点之间的间距。先划一条线段覆盖整个点区域,如果此线段长度小于等于单位长度,则结束,反之,找出最大间距的两点,从中划开,继续观察划开的2个区域线段长度...直到所有线段都小于等于单位长度。
这个问题选择的是对间距大小的贪心选择。
可本菜鸟想了半天也不知道怎么证明其正确性,求虾米指点一二,本人不甚感激。
假设点的序列为x1,x2,x3......xn,且x1 <=x2 <x3 <=..... <=xn;
那么从x1开始,用一个单位长度的线段去覆盖,假设可以覆盖到xj;
那么下一次从x(j+1)开始用单位长度的线段去覆盖;
大致的伪代码如下:
count=0;
j=1;
for(i=1;i <=n;i++)
{
if (x[i]-x[j])> 1
{
count++;
j=i+1;
}
}
if (i> =j) count++;
可以证明是最优的:
1)假设以x1为起点的单位线段可以覆盖到xj,即xj-x1 <=1 and x(j+1)-x1> 1;
2)再假设存在一个最优的覆盖法,该方法覆盖x1点的单位线段(假设为[x',y'])不以x1为起点,即x' <x1 <=y';
那么y' <=x'+1 <x1+1 <x(j+1);即该单位线段最多能覆盖到xj;
去除覆盖x1点的单位线段后,第一个方法剩下的区间 是 第二个最优的方法剩下的区间的子集;覆盖第一个方法剩下的区间需要的单位线段 不会 比 覆盖第二个最优的方法剩下的区间需要的单位线段 多;
所以 第一个方法用到的总的单位线段的个数 不多于 最优的覆盖法
证毕!
- 对间距大小的贪心选择。
- UICollectionViewFlowLayout 设置九宫格的大小间距
- latex调整itemize的间距大小
- Android系统状态栏图标间距大小的调整
- android 动态添加的checkbox设置间距大小
- 自定义UIPageCrontroll的圆点大小和间距
- UICollectionView 不同大小Cell 等间距的实现
- 自定义RatingBar,更方便指定星星的图标、大小,间距
- radiobutton 选择框和文字间距的设置方法
- poj1700多种选择的贪心
- 个人对贪心的理解
- 对 Set 的选择
- 对NoSQL的选择
- 设置Textview的Drawableleft、Drawableright 等图片与文字间距、位置和大小的方法
- 贪心算法求解问题的选择准则
- 基于贪心策略的活动选择问题
- (贪心5.2.4)ZOJ 1360 Radar Installation(对有序化数据进行贪心选择)
- 关于bga焊盘的大小,0.65mm间距,0.8mm焊盘直径
- 国内黑客案风起云涌
- 关于数组a[3] 和3[a]的问题
- 说的好
- 不设防的系统
- 2008-03-01 我的日志
- 对间距大小的贪心选择。
- [转帖]美国不应是中国唯一的榜样--采访丁学良
- 动态规划题目
- 2008-03-01
- 动态规划
- c#局部类型
- 新居落成!
- 动态规划及其应用
- 编程心得之C语言