孙子说的是开战前就预计能够取胜,是因为筹划周密,胜利条件充分;开战之前就预计不能取胜,是因为筹划不周,胜利条件不足。
筹划周密,条件充分就能取胜;筹划疏漏,条件不足就会失败,更何况不作筹划,毫无条件呢?
我们根据这些观察,谁胜谁负就显而易见了。
简单说意思就是,算计多的就胜利,算计少的就不能胜利,不算计的呢死路一条。
这强调的是要打有准备的仗,算度越周密,取胜可能性越大。
但这话放到今天,也有局限性。
一则事情涉及到的因素太多太复杂,人们难以算清楚怎么办?
比如说下围棋,都是职业棋手会采用枚举法,其实未必。
否则,藤泽秀行为什么会说,棋道一百,吾仅知其七?
二则,很多比赛是有时间限制的,大部分都是“短平快”,怎么能保证足够的计算时间?
日本围棋的传统的二日制赛制,最初被吹嘘得神乎其神,久而久之,随着日本围棋的积弱不振,“神话”不攻自破。
因此,人们痛切地认识到,枚举法本身绝非有什么不好,实在是,“臣妾做不到”啊。
话又说回来,何为枚举法呢?
其实,枚举法又叫穷举法。
枚举法通常是利用计算机运算速度快、精确度高的特点,对要解决问题的所有可能情况,一个不漏地进行检验,从中找出符合要求的答案,因此枚举法是通过牺牲时间来换取答案的全面性。
在数学和计算机科学理论中,一个集的枚举是列出某些有穷序列集的所有成员的程序,或者是一种特定类型对象的计数。
这两种类型经常(但不总是)重叠。
将问题的所有可能的答案一一列举,然后根据条件判断此答案是否合适,合适就保留,不合适就丢弃。
例如:找出1到100之间的素数,需要将1到100之间的所有整数进行判断。
枚举算法因为要列举问题的所有可能的答案,所有它具备以下几个特点:
1、得到的结果肯定是正确的;
2、可能做了很多的无用功,浪费了宝贵的时间,效率低下;
3、通常会涉及到求极值(如最大,最小,最重等);
4、数据量大的话,可能会造成时间崩溃。
即使是纯粹服务于人类的大型计算机或者巨型计算机甚至最最先进的计算机,运用穷举法解决实际科技问题时,都经常会出现问题;使得人们不得不正视穷举法的弊端。
这就是前面提到的,后来大行其道的“剪枝”算法诞生的理由所在。
实际上,绝大多数人类本来就习惯于用“剪枝”算法,只有极少数人(怀疑一定患有强烈的强迫症)才喜欢穷举法。