• 专题2-搜索总结


    只深入做了DFS与简单的二分搜索及三分搜索的题。BFS的相关题目及DFS的深入这周补上。

    二分

    二分查找应该说是无处不在,二分法很简单,比较一个区间(解所在区间)的中点对应的解与要求的解的关系,然后根据此关系缩小解所在的区间(此区间是上一层区间的1/2,所以叫二分法),这篇博客写的比较好。
    二分很容易掌握,但注意应用时的条件是数学模型应是单调函数否则

    三分

    三分经常与二分放在一起,他们也有相似之处,适用于解为最值且只有一个最值在解区间的问题。贴上一段三分法模板:

    1. doubleCalc(Type a)
    2. {
    3. /* 根据题目的意思计算 */
    4. }
    5. voidSolve(void)
    6. {
    7. doubleLeft,Right;
    8. double mid, midmid;
    9. double mid_value, midmid_value;
    10. Left= MIN;Right= MAX;
    11. while(Left+ EPS <Right)
    12. {
    13. mid =(Left+Right)/2;
    14. midmid =(mid +Right)/2;
    15. mid_area =Calc(mid);
    16. midmid_area =Calc(midmid);
    17. // 假设求解最大极值.
    18. if(mid_area >= midmid_area)Right= midmid;
    19. elseLeft= mid;
    20. }
    21. }

    DFS

    DFS(深度优先搜索算法),一般采用队列实现。DFS搜索到的第一个解即为最优解(第一个找到的解深入的层数最少),但应注意深度优先搜索的效率问题,目前我只了解了剪枝。在做1013时就遇到过超出内存的问题,最终剪枝AC了(详见解题报告)。贴上一段模板:

    void dfs()//参数用来表示状态
    { if(到达终点状态)
        {
            ...//根据题意来添加
            return;
        } if(越界或者是不符合法状态) return; for(扩展方式)
        { if(扩展方式所达到状态合法)
            {
                ....//根据题意来添加
     标记;
                dfs();
                修改(剪枝);
                (还原标记); //是否还原标记根据题意 //如果加上(还原标记)就是 回溯法
     }
    
        }
    }
    说起来很是惭愧,这一个专题只刷了区区7,8道题,关于转专业的事情拖得很是心累。不过这段时间心态调整了很多,我觉得这是比刷题正重要的财富吧。在这一段时间里也见识到了很多acm的大神(起码比我厉害很多),知道了自己多弱。。继续努力吧





  • 相关阅读:
    day 66
    day 66 作业
    day 65 作业
    day 55 Ajax
    day 56 forms组件
    day 59
    day 58 cookie与session 中间件
    day 54
    day 53
    day 52
  • 原文地址:https://www.cnblogs.com/liuzhanshan/p/5433103.html
Copyright © 2020-2023  润新知