• 二分法、枚举


    知识点总结报告

    知识点:

    二分法

    (原理)见https://i.cnblogs.com/EditPosts.aspx?postid=8340889&update=1折半插入排序

     

    知识点:

    枚举

    (原理)

      枚举算法策略

      枚举法,又称穷举法,其基本思想是在一个有穷的问题所有 可能解的集合中,按某种顺序逐一枚举各个元素,用给定的 约束条件判定元素是否符合条件,若满足条件,使命题成立 的候选解就是问题的解;否则,该元素就不是该问题的解。

      枚举法本质上属于搜索策略

      适用枚举法求解的问题必须满足两个条件:

    (1)可预先确定每个解的元素个数n;

    (2)解元素S1,S2,…,Sn的可能值为一个连续的值域。
    应用枚举法的场合有:求不定方程、排列组合、暴力算法

     枚举算法因为要列举问题所有可能解,所以它具备以下几个 特点:
    (1)得到的结果肯定是正确的;

    (2)可能做了很多的无用功,浪费了宝贵的时间,效率低 下。

    (3)通常会涉及到求极值(如最大,最小,最重等)。

    (4)数据量大的话,可能会造成时间崩溃。

    并不是所有的问题都可以使用枚举算法来求解,只有当问题的所有可能解的个数不太多时,并在可以接受的时间内得到 问题的所有解,才可使用枚举算法。

    枚举法的优点:

    (1)由于枚举算法一般是现实生活中问题的“直译”,因此比 较直观,易于理解;

    (2)由于枚举算法建立在考察大量状态、甚至是穷举所有 状态的基础上,所以算法的正确性比较容易证明。

    枚举法的特点是算法简单,但是运算量大是它的缺点,当问 题的规模变大,循环的阶数愈大,执行的速度愈慢
    从全局观点使用枚举法,计算量容易过大,在局部地方使用 枚举法,其效果会十分显著。

    求解策略

    采用枚举算法求解问题的基本思路为:

    (1)确定枚举对象、枚举范围和判定条件;

    (2)逐一枚举可能的解,验证是否是问题的解。

    求解方法和步骤

    (1)首先确定可能解的集合;

    (2)抽象出解包含的参数,确定每个参数的数据范围;

    (3)对解的每个参数的数据范围采用循环语句一一枚举;

    (4)对每次枚举,根据题意给定的条件判定是否解,是否 是最优解;

    (5)优化程序,以便缩小搜索范围,减少程序运行时间。

    程模式:

    编程时可以采用“循环语句+判断语句”的枚举结构,其中循环 语句用于“枚举”,判断语句用于“验证条件”。

    用枚举法求解问题时,需要按照某种方式列举候选解。为了使枚举的结果不重复又不遗漏,要抓住对象的特征,选择适 当的标准分类,有次序、有规律地列举。

    针对问题的数据类型,常用的列举方式有如下三种:

    (1)顺序枚举,候选解范围内的各种情况很容易与自然数 对应甚至就是自然数,可以按自然数的变化顺序去枚举。
    (2)排列枚举,候选解的数据形式是一组数的排列,可以 枚举出所有候选解所在范围内的排列。
    (3)组合枚举,当候选解的数据形式为一些元素的组合 时,往往需要用组合枚举。组合是无序的。

    枚举算法是用计算机解决问题的一种特色,特点是算法的思路简单,但运算量大。当问题的规模变大,循环嵌套的层数越多,执行速度变慢。如果枚举范围太大,在时间上就难以承受,所以应尽可能考虑对枚举算法优化。

    优化策略
    (1)减少枚举次数
    (2)合理选择用于枚举的变量
    (3)注意枚举的顺序
    (4)减少判断每种情况的时间

     

     

     

     

     

     

     

  • 相关阅读:
    mysql存储过程及拼接字符串的用法
    SpringMVC的工作原理
    3年java工作经验必备技能
    HashMap的源码,实现原理,底层结构
    十年软件测试感悟,写给想要转行的测试新人。
    软件自动化测试有了测试工程师就等于有了质量?
    为何你的简历石沉大海?这份新鲜出炉的测试用人需求分析报告揭示了原因。
    【软件测试】Python自动化软件测试算是程序员吗?
    达内教育培训怎么样,值得去吗?
    软件测试员最核心的竞争力究竟是什么? 爱码小哥
  • 原文地址:https://www.cnblogs.com/li1997/p/8409093.html
Copyright © 2020-2023  润新知