设计算法时要确保分类讨论的完备性

1 何为完备性

如果算法有多个分支的话,要确保每个分支都走到了。这个时候如果不整理清楚自己就搞混了,编程就容易出现错误。要整理清楚。

2 什么情况会出现完备性难题

当算法的走向同时受2个、3个及其以上的变量的取值的影响的时候,会出现要分成多个分支来考虑,从而出现完备性难题。

比如3个变量,都可以取true和false,那么就有8种可能的情况出现。除此之外,最要命的是,要确保逻辑上的合理性,在确定变量的判定的顺序时,也需要探索一下,可能a的判定放在b的后面会让整个逻辑更清楚一下。

3 怎样确保完备性

第一,确定有多少种可能,比如a、b、c三个变量,a和c有2种可能,b有3种可能。那么总共有2*2*3=12种可能。

第二,适当的安排a、b、c判定的顺序,确保分支种每种可能都走到了,并且是合乎逻辑的。

时间: 2024-11-25 15:55:43

设计算法时要确保分类讨论的完备性的相关文章

在设计IOSapp时为了代码的扩展性可可维护性需要遵守的原则

作为软件工程范畴的iosApp,为了保持代码的可维护性和扩展性,必然要遵守软件的基本特性,众所周知高内聚低耦合的程序才能具备这样的特性. 首先,不能依赖于storyboard和xib,原显而易见.第一点是,在源代码管理方面,在团队项目中,一旦有人改变了一点内容storyboard就会显示modify的样子,所以让人看起来很不安,其实带着M的原因很可能就是其他团队成员鼠标手点击了一下而已,最新的源代码管理工具在Xcode中的集成基本上解决了这个问题,但是依然还是会产生严重的代码冲突,这不是团队人员

【算法基础】由插入排序来看如何分析和设计算法

插入排序及其解决思路 算法的作用自然不用多说,无论是在校学生,还是已经工作多年,只要想在计算机这条道路走得更远,算法都是必不可少的. 就像编程语言中的"Hello World!"程序一般,学习算法一开始学的便是排序算法.排序问题在日常生活中也是很常见的,说得专业点: 输入是:n个数的一个序列<a1,a2,...,an?1,an> 输出是:这n个数的一个全新的序列<a,1,a,2,...,a,n?1,a,n>,其特征是a,1≤a,2≤...≤a,n?1≤a,n 举

BZOJ 1099([POI2007]树Drz-9次线段树&amp;分类讨论+线段树与插入顺序维护2个参数)

1099: [POI2007]树Drz Time Limit: 15 Sec  Memory Limit: 162 MB Submit: 142  Solved: 55 [Submit][Status] Description CDQZ是一个偏远的小学校,FGD在学校里中了一排树.他却不喜欢这些树的顺序,因为他们高高矮矮显得那么参差不齐. FGD定义这些树的不整齐程度为相邻两树的高度差的和.设树高分别为h1,h2,h3,-,hn.那么不整齐程度定义为:|h1-h2|+|h2-h3|+--+|hn

POJ 2826 An Easy Problem?!(线段相交,分类讨论)

题意:给两个线段,问他们能收集到多少雨水. 链接:http://poj.org/problem?id=2826 解法:分四种情况讨论 1. 存在一个线段与x轴平行,答案为0 2. 两个线段没有交点,答案为0 3. 1和2都不满足时,令线段1为比较低的那个线段,且p1为其比较高的那个点,若该点往y轴正方向的射线与线段2有交点,则答案为0 4. 3不满足时,求出两线段交点x1,p1做一条平行于x轴的线,该线与线段2的交点x2,则三角形x1, x2, p1的面积就是答案 小结:此题属于分类讨论型的题,

Codeforces 460D Little Victor and Set --分类讨论+构造

题意:从区间[L,R]中选取不多于k个数,使这些数异或和尽量小,输出最小异或和以及选取的那些数. 解法:分类讨论. 设选取k个数. 1. k=4的时候如果区间长度>=4且L是偶数,那么可以构造四个数(L,L+1,L+2,L+3),这样的话(L^(L+1)) ^ ((L+2)^(L+3)) = 0,最优 如果L不是偶数,那么看从L+1到R有没有四个数,如果有则取该四个数,否则最小异或和达不到0,也达不到1了,不再考虑k=4,k=3时还有可能等于0,所以转到k=3 2. k=3时,要使异或和为0,那

LA UVaLive 6862 Triples (数学+分类讨论)

题意:给定一个n和m,问你x^j + y^j = z^j 的数量有多少个,其中0 <= x <= y <= z <= m, j = 2, 3, 4, ... n. 析:是一个数学题加分类讨论.首先对 x进行分类讨论. 当 0 = x 时,只要 y = z,就行,那么就有(m+1) *  (n-1) 个,因为 y 可能从0取到m ,j 可以从2取到 n. 当 0 != x 时,那么只要一个勾股定理能构成,只要幂大于2,就一下没解,所以我们把第一种中拿出j = 2时,的特殊情况,特殊考

【算法】1 由插入排序看怎样分析和设计算法

插入排序及其解决思路 算法的作用自然不用多说.不管是在校学生,还是已经工作多年.仅仅要想在计算机这条道路走得更远,算法都是不可缺少的. 就像编程语言中的"Hello World."程序一般.学习算法一開始学的便是排序算法. 排序问题在日常生活中也是非经常见的,说得专业点: 输入是:n个数的一个序列<a1,a2,...,an?1,an> 输出是:这n个数的一个全新的序列<a,1,a,2,...,a,n?1,a,n>,其特征是a,1≤a,2≤...≤a,n?1≤a,

【算法】1 由插入排序看如何分析和设计算法

插入排序及其解决思路 算法的作用自然不用多说,无论是在校学生,还是已经工作多年,只要想在计算机这条道路走得更远,算法都是必不可少的. 就像编程语言中的"Hello World!"程序一般,学习算法一开始学的便是排序算法.排序问题在日常生活中也是很常见的,说得专业点: 输入是:n个数的一个序列<a1,a2,...,an?1,an> 输出是:这n个数的一个全新的序列<a,1,a,2,...,a,n?1,a,n>,其特征是a,1≤a,2≤...≤a,n?1≤a,n 举

使用E.W.D.Dijkstra设计算法实现算数表达式求值

要求:编程模拟(1+(2+3)*(4*5))的运算过程,重点在于如何解析由括号运算符和数字组成的字符串,并按照正确的顺序完成各种初级运算符的操作. 实现思路:用两个栈(LIFO)结构来实现(一个用于保存运算符,一个用于保存操作数) 将操作数压如操作数栈 将操作符压如操作符栈 忽略左括号 在遇到右括号时,弹出一个运算符,并弹出所需数量的操作数,并将操作符和操作数的运算结果压到操作数栈 1 package com.luochuang.demo.stdlib; 2 3 public class Eva