二分法、枚举
知识点总结报告
知识点:
二分法
(原理)见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)减少判断每种情况的时间