对一个问题的思考,最基本的套路就是把概念、意义和方法论梳理一遍。有时候等你梳理完,答案也就出来了。
即便是我正在思考“如何解决一个问题”这样的递归问题。
定义:
一个问题出现了,意味着什么呢?
意味着在通向你所期待目标的道路上有尚需完成的事情了。而且这个事情的做法是未知的。如果这个做法是不存在的,那你永远达不成目标。如果存在,那么任务就是找到它。
意义
解决问题 = 离目标更近
方法论
从定义上来看,如何解决问题就变得非常清晰了:
- 判断是不是有实现的可能
- 如果不可能,那就放弃;可能实现,那就再去找。
首先,怎么判断能否实现呢?
暂时我还没想到一个能通用的方法来判断。
但是有两个简单的办法是可以一定程度上解决这个问题的。
第一种办法:看看你要解决的这个问题的相同类型的问题是不是有人已经解决过了或者是不一定知道有人解决,但这个问题是很多人都有的。
我们凡人遇到的绝大部分问题(如果不是全部的话),都是有人已经解决过的,哪怕是你以为已经很小概率的事情。。。[别问我我是怎么知道的,逃(。。]
比如说考研3个月能不能考上,你思考这个问题的时候,发现已经有人用2个月的时间实现过了,那么你起码不会认为这是不可能的。接下来就是取经或思考策略的时候了。
另外,如果一个问题大部分人都有,那解也很可能是存在的,尤其是人为问题,因为“法不责众”。
第二种办法:先小范围试运行问题的解决,然后进行计算。
比如《火星救援》上,男主在不同的情况下要重新计算自己的土豆还能吃多长时间,然后通过计算来确定自己能否坚持到救援飞船的到来。
不能涵盖全部,但是这两个简单的办法在我的生活中,大部分问题的可实现性都能判断了。
然后下面就更关键了:
如果不可能,那直接放弃;如果可能,又怎么做呢?
既然已经确定了可能实现了,那么就一定是有一个可行的路径/方法能够抵达彼岸。这就是像是:真理是在的,它就在那,发不发现是你的问题,但大家都知道它在。
所以问题就变成,怎么把这个存在的东西找到,再进一步,其实是怎么把肯定有的答案和这个问题匹配。我觉得“找”和“匹配”还是有区别的。关键就在于,你要找的不再是无形无踪的东西,而是随“匹配”的特点而来的“联系”。
有一本书叫做《怎样解题》,波利亚著。说的是怎么解决数学问题,但是其中的思维却是解决任何问题都能通用的。
他所说的解决问题的步骤如下:
- 理解题目
- 已知、未知、条件(够吗?可能实现吗?)
- 画图、用符号表示
- 联系
- 相关题目/定理,见过吗?
- 相同未知量的题目
- Yes →
- 能怎么利用? → 方法?结果?
- 引入辅助元素
- No →
- 以不同的方式重新叙述题目
- 回到定义
- 解相关题目
- 更容易的题目
- 普遍化
- 特殊化
- 类似
- 一部分留题目 → 保部分条件
- 改变已知/未知,使2者更接近
- 更容易的题目
- 用到所有条件了吗?
- Yes →
- 执行、检查每步
- 检查
- 检验
- 不同方式推导
- 一眼看出来
- 在别的地方怎么用?
你可能已经看出来了我的意思了。
我觉得,《怎样解题》的核心就是理解和联系。理解主要是判断问题是否可解;联系就是把已知存在的答案和要解决的问题匹配起来。其中更核心、更重要的是:
联系。
所以这本书我觉得用两个字解释的话就是:联系/匹配。把答案和问题匹配起来,所以问题的解决就是一个连连看的游戏。
上面的联系的那一小条里就是《怎样解题》里的逻辑框架。
重新整理一下:
- 直观感觉一下,是不是以前做过的套路?
- 是→ 直接套。
- 不是→
- 看着问题的这个结果/形式,有没有别的问题跟这个结果一样?
- 有→ 看看能用这个相关问题的方法还是结论。
- 没有→ 加入辅助元素,再看看有没有(循环回去一步)
- 真的没有类似形式的结果→
- 用不同形式描述问题,换个角度看问题→ 再看有没有类似的问题
- 回到问题中重要概念的定义上去。用最朴素的词汇(小学生和老奶奶能理解的词汇)来尝试描述。
- 解相关题目
- 更容易的题目
- 普遍化
- 特殊化
- 类似
- 一部分留题目 → 保部分条件
- 改变已知/未知,使2者更接近
- 更容易的题目
- 用到所有条件了吗?
- 看着问题的这个结果/形式,有没有别的问题跟这个结果一样?
剩下的就是练习和debug了。
哦,书里有一个有趣的练习:
一只熊,从点P开始,向正南走一里,然后改变方向,向正东走一里。
接着,它再向左转,向正北走一里,恰好到达它所出发的P点。问这熊的颜色是什么?
问题看起来无厘头,但是不是无聊的脑筋急转弯,而是可以分析得到答案的。
而且,生活中绝大多数都是这样的问题:
只要可解,几乎就等于能找到。剩下就是方法论和时间了。
ps:
个人简介里有微信公众号:iNotes。文章首发在那里。