ACM 学习总结报告(二)

一:map知识点补充
1.遍历map:
iterator有对应于map的迭代器:map<key型[key名],value类型[value名]>::iterator iter;
for(iter=map名.begin();iter!=map名.end();iter++)
{
cout<first<<" "<second<<endl; //iter是指针, 迭代器都可以看成是地址或者指针,指向所指的数据结构的首地址。
}
2.map中元素的查找:
find()函数返回一个迭代器指向键值为key的元素,如果没找到就返回指向map尾部的迭代器。
3.map中swap的用法:
map中的swap不是一个容器中的元素交换,而是两个容器交换。
4.map的sort问题:
map中的元素是自动按key升序排序,所以不能对map用sort函数。
二:贪心算法
(一):
在求最优解问题的过程中,依据某种贪心标准,从问题的初始状态出发,直接去求每一步的最优解,通过若干次的贪心选择,最终得出整个问题的最优解,这种求解方法就是贪心算法。
从贪心算法的定义可以看出,贪心算法不是从整体上考虑问题,它所做出的选择只是在某种意义上的局部最优解,而由问题自身的特性决定了该题运用贪心算法可以得到最优解。
如果一个问题可以同时用几种方法解决,贪心算法应该是最好的选择之一。
(二):贪心算法的理论基础
贪心算法是一种在每一步选择中都采取在当前状态下最好或最优的选择,希望得到结果是最好或最优的算法。
贪心算法是一种能够得到某种度量意义下的最优解的分级处理方法,通过一系列的选择得到一个问题的解,而它所做的每一次选择都是当前状态下某种意义的最好选择。即希望通过问题的局部最优解求出整个问题的最优解。
这种策略是一种很简洁的方法,对许多问题它能产生整体最优解,但不能保证总是有效,因为它不是对所有问题都能得到整体最优解。
利用贪心策略解题,需要解决两个问题:
1.该题是否适合于用贪心策略求解;
2.如何选择贪心标准,以得到问题的最优/较优解。
(三):贪心选择性质
贪心选择性质是指所求问题的整体最优解可以通过一系列局部最优的选择,即贪心选择来达到。
当一个问题的最优解包含其子问题的最优解时,称此问题具有最优子结构性质。
运用贪心策略在每一次转化时都取得了最优解。问题的最优子结构性质是该问题可用贪心算法或动态规划算法求解的关键特征。
贪心算法的每一次操作都对结果产生直接影响。
贪心算法对每个子问题的解决方案都做出选择,不能回退。
(四):最优子结构性质
使用贪心算法求解问题应该考虑如下几个方面:
(1)候选集合A:为了构造问题的解决方案,有一个候选集合A作为问题的可能解,即问题的最终解均取自于候选集合A。
(2)解集合S:随着贪心选择的进行,解集合S不断扩展,直到构成满足问题的完整解。
(3)解决函数solution:检查解集合S是否构成问题的完整解。
(4)选择函数select:即贪心策略,这是贪心法的关键,它指出哪个候选对象最有希望构成问题的解,选择函数通常和目标函数有关。
(5)可行函数feasible:检查解集合中加入一个候选对象是否可行,即解集合扩展后是否满足约束条件。

//A是问题的输入集合即候选集合
Greedy(A)
{
  S={ };           //初始解集合为空集
  while (not solution(S))  //集合S没有构成问题的一个解
  {
    x = select(A);     //在候选集合A中做贪心选择
    if feasible(S, x)    //判断集合S中加入x后的解是否可行
      S = S+{x};
      A = A-{x};
  }
  return S;
}

因为贪心还没有做题,所以仅仅把贪心的知识点梳理了一下。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值