这种题该怎么毛概2018版思考题答案?我从来就不会画辅助线 甚至都没有画辅助线的思想

注册 | 登录
《进化式运营》作者,公众号:少加点班
产品经理就业班,12周特训,测、练、实战,22位导师全程带班,200+名企内推,保障就业!
一些读者问我,是否用的是“第一性原理”思考法。怎么说呢,既是也不是。本文就以这个为主题,我分享下自己是怎么思考问题,大伙儿可以理解为李少加版本的“第一性原理”思考法。
相信你身边一定有过那么一两个人(当然也可能是你自己):
当一大群人开会吵的不可开交时,这个人总是能够提出让所有人都服气的观点;
又或许,这个人平时吊儿郎当,但你跟他聊天会发觉他对很多事情都入木三分;
或者,当你遇到一直解决不了的难题,这个人能跳出常规的方法漂亮的解决它
这类人通常都是习惯于用“第一原理”思考事物。
很多人可能都体验过一种诡异的状态:明明意识到生活或工作中出了些问题,却又怎么挣扎都没法消减其中的“不满”。
这也通常是因为你的努力并没有触及到该问题的“第一原理”。
那么,什么是“第一性原理”?
第一性原理到底是什么?
第一性原理(First principle thinking,又称“第一原理”)其实是古希腊哲学家亚里士多德提出的一个哲学术语:
每个系统中存在一个最基本的命题,它不能被违背或删除。
哲学不怎么亲民,我们打个比方就很容易理解了:
比如,几何学中的“第一原理”(部分)有:两点之间直线最短。
又或者,经济学中的“第一原理”(部分)有:供求理论。供不应求时价格上涨,当供过于求时价格下降。
这个名词被炒的很火主要得益于“钢铁侠”埃隆·马斯克(特斯拉汽车CEO)。他曾在采访中提到自己特别推崇“第一原理”思考法:“通过第一原理,我把事情升华到最根本的真理,然后从最核心处开始推理……”
是不是觉得说了等于没说?紧接着他举了特斯拉汽车电池的例子,反正我觉得他那例子也不咋地就不复述了。
为了让大伙儿对“第一原理”思考法有个更直观的认识,我们换几个真实的商业事例:
20世纪80年代,互联网诞生早期,多数互联网企业都倾力于为网民提供各种网站内容,80后应该有印象,我们一上网就登录搜狐、新浪之类的门户网站。
但远比门户时代更早的十多年前,就有两个年轻人认为:
比起内容本身,如何让用户“便利的获取内容”更重要,这将产生万亿美元级的市场潜力。
那个年代,网民总量少、互联网上内容稀少、许多服务还是付费,如果这两个年轻人对外宣扬这种想法,公众只会嗤之以鼻,没人会认为他们高瞻远瞩。
但历史证明,少数人的观点多半是对的。
这两个年轻人是布林和佩奇,Google创始人。
他们对互联网产业的核心洞察:“便利、免费”贯穿了Google从创立到强盛的整个历程。
巧合的是,这种对新产业的“非主流深刻洞察”频繁出现于那些伟大企业的核心创始人中:
1976年,商用计算机刚兴起,家庭计算机更是闻所未闻,但乔布斯却预见了计算机终究会像水电一样进入千家万户,于是创办了苹果公司研制个人计算机;
同年,比尔·盖茨也看好了个人计算机的未来,他还意识到只需要抢占用户与计算机的联结中枢——操作系统,就能垄断整个产业;
1984年,互联网尚未兴起,思科CISCO创始人博萨卡和勒纳(两人是夫妇)就看好“多协议路由器”便义无反顾投入,最终成为了世界最大的通讯服务商;
是的,以上商业巨星们便是运用了“第一原理”思考法(虽然他们未必知道这个名词)。它的效用惊人。
“第一原理”思考法并不是商界大亨的特权,这不连我都能运用么(虽然略为浅薄)
说的俗气点,无论你是想跟老板叫板涨薪、还是成功创业、哪怕是提升生活品质,第一原理思考法都是一种必备思维。
下面,为确保实用性,李少加将按照自己的理解(也是我自身的思考方法)对“第一原理”进行解说,大家只需理解它的三个关键属性即可:
属性1:“第一原理”针对的是“具体情境的具体系统”,它不是孤立的事物,也不能抛开情境讨论。
比如,我们可以说一个蜂群(系统)中蕴含着行为模式的“第一原理”,但你不能说可以从一只小蜜蜂中找到“第一原理”(除非下降到细胞组织层次)。
属性2:第一原理虽然具有稳定性,但不是“真理”。
其实“第一原理”这个译法有点误导性,虽然它听着高大上、易于记忆、传播,但那个“一”字却极易使人产生误解,仿佛它是真理,永远不会改变。
但诚如我在《》中所言,「真实的世界」是混沌、复杂、相互交织的,任何系统中的“第一原理”也不可能亘古不变。
尤其是重大事件,典型如科技革命、经济发展的突变、阶级人口金字塔的改变、大规模人口迁徙等等……一旦发生,务必重新审视你的判断。
属性3:它无法通过运气或者所谓天赋获得,所有人都必须经历“长期观察、实践、思考”才能洞察获得。
这对多数人而言其实是个“利好”的属性。
把多数人的成功归结为“天赋”通常是写书的人为了让故事更具“戏剧色彩”杜撰出来的:
想象一下,令狐冲学了独孤九剑跑出山洞却还是被田伯光打的满地找牙那得让读者多尴尬啊(参见金庸小说《笑傲江湖》)。
事实上,任何深刻的洞察都不可能一蹴而成。
比如,我在拙作《进化式运营》中提出的“用户养成运营框架”,它是基于我多年互联网运营实践、猜想、试错、验证的总结,也许你看着清晰简洁,但背后却是无数日夜磨砺的心血。
如果你看了这3个属性还不是特别理解也没关系,毕竟这个思想略为复杂,大家也不用纠结,继续往下看具体实践时就会明白了。
我们简单总结下:
“第一原理”是任何特定系统中存在的最底层“本质”,对任何系统的“第一原理”的改变都会「实质」改变该系统,反过来,任何没有触及“第一原理”的努力都是做无用功(或影响微弱)。
还是有点看不懂?没关系,我举个大家关心的“涨工资”的例子就很容易明白:
谈到“收入”,我们可以把“个人能力在社会的市场价”看作一个系统。
它的“第一原理”是:
产业市值及从业人数比例
岗位对产业的贡献度
个人能力的不可取代性(相对竞争优势)
所以,如果你想实质提升“工资”,根据上述“第一原理”,你可以:
换一个市值更大的行业,且从业人数较少(通常科技成分比较高)
提升自己的核心竞争力,用业绩或其他形式证明(增加相对竞争优势)
换一个对产业贡献更大的岗位(比如从行政换到销售)
其他的理由,诸如:
“我像老黄牛一样工作那么多年了”
“那谁谁谁都涨工资了为何我没涨”
“我天天加班女朋友都快把我甩了”
“你不给我涨工资就离职”
都是不成立的(没有触及“第一原理”)。当然,除非一开始给到你的工资远低于市场价则是另一码事了。
可见,掌握“第一原理”思考法是非常实用的,哪怕你没有野心,但起码也不能糊糊涂涂的活着任人宰割是吧?
那么,下面迎来本剧的高潮了:
如何学习运用“第一原理”思考法?
我们学生时养成了以“记忆”为主导的学习思路,这其实并不科学,更万万不能套用在思维模式的“学习”中。
“第一原理”思考法最根本的获得途径应当是培养一种思维习惯,更确切的说,就是一种洞察抽象事物的“敏感度”……
其实很像武侠小说里的“上乘内功心法”,一旦启动,哪怕平日里睡觉、呼吸休息时,都在不断地自发修行内功。(这个角度讲,小说杜撰也是有些符合脑科学的)
那么,具体怎样实操培养第一原理思考习惯呢?
有两个方向:由内而外,自外而内。
由内而外:永远不满足于简单解释
由内而外,就像婴儿探索世界一样,无需任何外部激励,以本能的好奇作为驱动力。
这种训练方法说简单也简单,说难也难,就是驾驭你的好奇心。
谈到“好奇心”,很多人可能会浮现出“大街上不明群众围观”、或者“娱乐明星的破家事”之类的“猎奇式”好奇……显然,这是“好奇心”的错误示范。
众所周知,许多顶级科学家都提到过好奇心的重要性。这里说的“好奇心”正是指“科学素养”层面的好奇心。
换个更实操性的说法:永远不要止步于简单解释。这个心理暗示非常重要,它为我们探索任何系统的“第一原理”在思维深处开了一扇窗。
什么是“不满足于简单解释”呢?
举个例子:
你对历史兴趣浓厚,然后问你爸,为什么是秦国而不是其他国家统一了全国?
你爸说,当然是因为秦国兵强马壮把其他国家PK掉啊。
这就是一种简单解释。看似合理,成王败寇嘛。
如果这个答案满足你,那么,就离“统治历史”的“第一原理”非常远。
顺带一提,多数人的“好奇心”都停留在简单解释,这也是多数人不具备“第一原理”思考的原因。
但是,如果你仔细一调查,会发觉不对啊,战国初年魏国的军事实力更强啊,为何没统一?而且在近现代,无论是二战、还是美苏争霸时,军事实力强的一方最终不都失败了。
于是你继续问历史老师。
历史老师告诉你,是“商鞅变法”为秦国奠定了基础,主要有:
土地家庭承包制(提升农民产粮积极性)、
升官进爵与杀敌数直接挂钩(KPI提升军队士气)、
连坐法(严厉的惩罚在制度上确保管理效率)……
历史老师的解释更进一步,这可以视为“一般专家”的看法,也是我们教科书的观点。
但是它的解释让你满足了么?
如果你再进一步调查会发现,不对啊,商鞅的思想也是从其他各国学来的,难道其他各国都是一帮脓包不懂“困则思变”?
于是你进一步寻求更好的解释……
直到,你找到李开元老师写的《秦谜》,他补充提出以下观点:
秦是战国中唯一一个彻底将“贵族阶级”连根拔起的国家。
看过《芈月传》之类历史剧的就知道,古代国君娶的都是各国的公主,这公主以后做了皇后,能不利用娘家关系(母国)培养自己的势力么?
这些“外戚”势力平日里恭恭敬敬,哪怕是针对母国的“征伐战”也可以睁眼闭眼,但一旦到了“灭国”战的时候,他们能不念旧情么?我们想下建国初期大量留学的科学巨匠们宁愿放弃大好前程回国就大概能够明白。
再看看秦始皇,正史上从来没提到他的皇后(史料推测是楚国公主)……在统一全国之前,秦老分别迅速的清理掉了韩国、赵国、楚国的外戚势力(分别对应各大“内乱”)这些最终为扫平六国去除了“裙带关系”的重大阻碍……(篇幅关系这里的解释简化了,重在示例)
这个例子把“寻求好的解释”阐述的较为详细了,从中我们可以提炼“好解释”的通性——
不仅是逻辑自洽、自圆其说,还必须能持续经得起事实证据的考验,直到没有任何论据能驳倒它,这个时候,暂时可以将之视为“第一原理”。(这其实是卡尔·波普尔的思想)
这种“不满足于简单解释”的好奇心其实才是伟人们通常说的那种“好奇心”。
而这种思考习惯其实并没有门槛,也不需要所谓的“天才天赋”,更多的不过是些许“寻根问底的好奇心”、些许“搜寻材料的汗水”。当下的网络、书籍的获取非常便宜、便利,让我们“寻找好解释”比前互联网时代的人简单的多,遗憾的是,多数人并没有这么使用网络或智能手机。
幸运的是,一旦你培养出了这种“不满足于简单解释”的思考习惯,假以时日,必能让你的“戳中问题本质”的能力成指数提升。
以“好奇心”为驱动力,由内而外的获得“第一原理”的思考方法非常实用。但它存在一个缺陷——它会受你认知局限性的制约。
就好比初中时做几何题,如果你不知道可以画“辅助线”这回事,一些题目是永远解不开的。
为了弥补这个缺陷,我们还需要第二类思考模式:自外而内。
自外而内:借鉴自然界的隐喻、外部学科的启示
都说应试教育最大的弊端是扼杀了孩子的创造力,但这个说法也“过于简单”了,我认为它最大的弊端是,硬生生把“阅读这么有趣的事”变成了件特别功利的事情。
考试功利,常年灌输下,学子们自然会归纳出一条:“读书=考好试=功利”的恒等式。
以至于出了学校,多数人的阅读品味竟还停留在看言情小说的阶段。
一旦阅读严肃的书,又回归功利模式,跟工作有关就看,没关就不看。
总之,功利性阅读会让我们永久错失大千世界海量可供参考的隐喻、思维宝藏。而这些对于我们寻求系统的“第一原理”是不可多得的“辅助线”。
很多朋友业余时间也大量阅读学习,但时间一长,相信很多人都并没有感知到实质的进步,为什么呢?因为多数人的阅读并没有触及学习的“第一原理”。
这时,一般人的习惯可能会去知乎搜“高效学习”或者付费听一些专家们的“速成论”。请注意,无论是知乎高赞答案还是付费课程,他们都是捡大众喜欢的答案(而不是有用)给到你(这样才能赚钱)……很久之后,才会意识到然并卵。
但是,一旦你放弃“功利心态”,转而去大千世界中寻找答案,会发觉无论是“自然界”还是“其他学科”反倒能给到你启示。
我们观察一下弹簧。把它用力下压,压的越厉害它是不是反弹的越高?那弹簧为什么会弹起来?因为它要恢复原来的“平衡”对吧。
那么我们的大脑是否也存在类似弹簧的“反弹机制”?
你想要取得实质进步,就必须要施加一定的外部压力,让固化的思维失去平衡,从而获得强劲的弹力。
但是,如果弹簧会说话,你用力压它,它也肯定会喊痛的,思维施压的过程也会让人感觉“不舒服”。
这顺带解释了为何我们直觉喜欢的阅读跟学习内容(功利类居多)很难让我们实质提升,因为“太舒服了”,让你的思维一直处于“平衡”状态。
而受“弹簧”的“压力-弹力”的隐喻启示,你可能会意识到了学习的“第一原理”是“让思维失去平衡”(意即不会很舒服)。
顺带一提,最前沿的教育已经开始引入这些“平衡-再平衡”构建学习思想。
或许你会说,洞察“自然隐喻”对我们普通人有点难。
那么,更简单的方式就是学习其他学科,学生时代称之为“杂科”的思想。
例如,还是刚才提到的学习的“第一原理”。
如果你看过“生命科学”的一些思想。比如,“对大多数细胞生命体而言,平衡等同于死亡”,或者你要是知道,“健康的人心脏跳动是非常不规律的,只有死之前几个小时,心态才会惊人的有规律”,而我们脑细胞也符合细胞的基本规律……
看到这些,就会明白,舒服(平衡)的学习并没有让大脑神经产生多少变化。
如果你对儿童心理学大师皮亚杰的“发生认识论”有所了解,那就会对人类学习能力的进步了解的更彻底。
但是,我们回过头来看一下,对于“功利读书”(挑自己喜欢的看)主导的人,又怎么会去观察思考“弹簧的启示”、怎么会吃饱了撑着去看“生命科学”、更不会没事去啃“发生认识论”……这也就白白浪费了“外部现成”的漂亮答案。
现实中,透过大自然以及跨学科知识而在各行各业找到“第一原理”的例子非常多,简略罗列下一些世界级的:
达尔文进化论的“第一原理”受“水滴石穿”(自然隐喻)、经济学《国富论》的“自由竞争理论”(跨学科知识)影响;
丰田汽车著名的“精益生产”受“自组织理论”(跨学科知识)的启示,顺带一提,咱老祖宗,道家思想的“无为而治”就蕴含了“自组织理论”的思想,值得骄傲。
一个优秀的理论框架,能够为我们探寻任何系统的“第一原理”提供众多的隐喻、启示。
这正是人类思维有别于其他物种的绝对优势:知识的迁移及创造性应用。
所以我经常强调“非功利阅读”的巨大价值,凭着自身的兴趣(好奇心)引导,能够让你永久掌握更多的优秀理论,而这些思维框架又反过来为你探寻工作、生活中的各种“第一原理”提供现成的工具,让我们超越自身认知的局限性成为可能。
相信很多人都曾受困于一种诡异的状态:明明意识到生活或工作中出了点问题,却又无论怎么努力都没法消减其中的“不满”。
这种情况,几乎可以肯定是因为你的努力并没有真正触及到“问题领域”的“第一原理”。
幸运的是,“第一原理”的思考方式是所有人都可以习得的。有两种方式:
方式一,由内而外:
凡事均不满足于简单的解释,直到获取一个逻辑自洽,经得起任何事实证据批判的解释,而这个解释通常就可以暂时认为是“第一原理”。(忘了可上拉查看例子)
方式二,自外而内:
放弃“功利阅读”,回归好奇的天性,持续吸纳外部“多元化”的优秀理论(不求多但求质),进而辅助我们跳出认知局限洞察事物的“第一原理”。
这两种方式并不是“二选一”的孤立方案,而是彼此交融,互相强化的联结:
方式一是思维驱动力,是寻找、分析问题的思路;方式二为方式一提供更好的思考工具、启示。
写到这里,我想起了生物学的一个假说「幼态持续」。
简单来说,就是人类成年后的样子维持在古猿的幼年阶段,见下图,一只幼年黑猩猩和成年黑猩猩,很明显,人类与幼年的黑猩猩更相似。
图片源自《人类的误测:智商歧视的科学史》插图
这个假说认为,人类智力之所以取得绝对优势正是因为比其他物种保持更久时间的“好奇心”,其他物种的进步时间很短(仅限年幼时),而人类却有望进步一辈子。
我想这是「幼态持续」一个最有趣的「隐喻」了:
衰老的起点不是在皮肤松弛之时,而是发生在思维停止探索之后。
我们既可以选择“未老先衰”也可以选择“永葆青春”,up to u.
#专栏作家#
李少加,微信公众号:少加点班,人人都是产品经理专栏作家。《进化式运营》作者,“基于用户视角的用户养成运营框架”提出者,互联网商业独立研究者、运营管理专家。
本文原创发布于人人都是产品经理。未经许可,禁止转载。
题图来自PEXELS,基于CC0协议
赞赏是对原创者的最大认可
赞赏8人打赏
收藏已收藏 | 192赞已赞 | 53
《进化式运营》作者,公众号:少加点班
产品经理群
运营交流群
数据分析群
文案交流群
Axure交流群
关注微信公众号
大家都在问
38个回答39人关注
5个回答5人关注
10个回答20人关注
18个回答21人关注
19个回答22人关注
26个回答46人关注Powered by理解会带来巨大的好处
服务器君一共花费了329.398 ms进行了6次数据库查询,努力地为您提供了这个页面。
试试阅读模式?希望听取您的建议
先说三件事情:
一个问题其实你可以一直放在脑子里面,利用暗时间对其软泡硬磨,时间足够久你总会有一点新的感悟,问题其实就像那句老话说的那样,不怕贼偷就怕贼惦记,聚精会神的思考一天,也许比不上惦记一个星期(据说数学家庞加莱就特别会惦记问题)。
事实上,当你感觉懂了的时候,你至少得反问自己一句,真的懂了吗?当你确信自己真的懂了的时候,你至少得讲给别人听,别人听懂了吗?考察你自己是否真懂了的一个很好的依据是,你是否有一种“哦,原来是这样啊,这下再也不可能忘记了”的感觉。
记录只是学习和思考的副作用,只要还在学习和思考,就必然会有新的记录。
我有一个习惯,看定理必看证明。一个你不明白其证明的定理在我看来比不知道这个定理还要糟糕,因它给你造成一种懂了的错觉。在没有明白背后的证明之前,任何一个定理对你来说都是等价的——等价于背乘法口诀(只不过有的长一点有的短一点)。一个原本美妙的定理,把其证明扔掉就是真正的买椟还珠,暴殄天物。
举个例子。看看美国孩子怎么学数学的(理解为什么比背公式更重要)。
从现实意义来说,去理解一个定理的证明会带来巨大的好处,首当其冲的好处就是你很难再忘掉它。这一点其实很容易解释——在理解一个定理的证明之前,定理对你而言是一堆没有内在联系的词句,而在理解了证明之后,定理就归约为证明它所需的条件加上逻辑,“逻辑”本来就存在于你的大脑里面,而证明的过程中除了公理和用到的常见定理(往往没几条)之外,宽泛地说,需要你去记的,一般来说也只有一个或两个关键的insights,也就是我们常说的证明中的神来之笔,比如几何证明里面的某条看上去莫名其妙的辅助线,一旦你知道了这条辅助线,那么整个证明就毫无难处,那么该定理的信息量便直接缩减为一条辅助线的信息量;虽然看上去这一步信息并没有缩减多少,但是如果你考虑到类似的辅助线不仅会用在这个特定的定理上,往往会在很多地方用到。很多关键的证明手法是通用的。那么其实你就是把所有以这个辅助线为关键证明手法的定理的集合的信息量归约为了这条辅助线。如果你进而甚至能够理解了作这条辅助线的思想精髓,那就更牛逼了,因为解决问题的思路更具有一般性,理解了寻找正确的辅助线的思路,你就根本不需要去记得某条特定辅助线的作法,你就把所有以作一条或几条辅助线为证明核心的定理的集合的信息量归约为了这个“寻找辅助线的思路”。
这是一个树状的知识结构,越往上层走,需要记忆的节点就越少。所谓触类旁通者,其实便是因为他擅长去理解解法背后的更具一般性的东西。所以我还有一个习惯,就是看到美妙的证明和解法总是会去一遍又一遍的去反复揣摩,试图理解想出这个证明的人到底是怎么想出来的,有没有什么一般性的方法可循,很多时候,在这样揣摩的过程中,你会理解到更深刻的东西,对问题性质更深刻的认识,对解决问题的思路更深刻的认识,这些认识不仅对于你理解当前这个定理或问题有极大的帮助,同时也有助于你解决以后会遇到的表面不同但本质一样的问题。
与看定理必看证明类似,看一个问题的解法,必然要看解法所诞生的过程,背后是否隐藏着更具一般性的解决问题的思路和原则。否则一个解法就只是一个问题的解法,跟背口诀一样。即便记住了也无法推广,即便当时记住了也容易遗忘。
举个经典的例子:每本算法书都会讲动态规划,每本讲动态规划的书都会讲背包问题,每次讲背包问题都会讲可重复背包和01背包,我们就拿《Algorithms》这本还算不错的算法书对背包问题的讲解来说吧,重复背包问题的递归公式是这样的:
K(W) = max { K(W-Wi) + Vi : Wi <= W }
这个公式的理解倒是很简单:为了把问题降阶,我们在最终的最优解里面去掉一个元素,对这个元素的可能性进行讨论,它必然是任何Vi之一(前提是Wi <= W,否则就装不下),而在去掉这个元素之后,剩下的元素肯定构成问题 K(W-Wi) 的最优解,于是递归关系出现了。
此外也可以这样来理解:要拿一组最优元素,那么总得开始一个个拿吧,对第一个拿的元素进行讨论,而问题的最优解等于讨论的各个分支的最优解中的最优者;如果拿掉Vi之后,剩下来要怎么拿才能最优呢?这就是一个 K(W-Wi) 的问题了。
01背包问题就大不一样了——每个物品都只有一件,拿掉之后就不能再拿了。我们不妨看看重复背包问题的解法是不是能用到01背包上呢?还是讨论第一个拿的元素,设被拿掉的是第i个元素,问题就归结为把剩下的物品(注意,可拿的物品少了一件)最优地装入容量为 W-Wi 的包里,所以,问题的参数便变成了两个,一个是背包剩余容量 W-Wi,另一个是剩余可拿的物品集合 S\{i} (表示去掉i之后的子集),显而易见第二个参数是物品集合的各种可能的子集,那么其可能性个数就是 2^n ,这就导致子问题的个数是 2^n, 由于要依次计算每个子问题,那么算法复杂度显然也是 2^n ,是不可接受的。
那么,《Algorithms》上又是怎么来讲解01背包问题的解法的呢?以下是原文:
Our earlier subproblems now become completely useless. We must therefore refine our concept of a subproblem to carry additional information about the items being used. We add a second parameter, 0 <= j <= n: K(W, j) = maximum value achievable using a knapsack of capacity w and items 1..j: The answer we seek is K(W, n).
首先作者说了,之前重复背包问题的解法在这里完全废掉了,所以我们必须重新定义子问题,并且子问题的条件必须要包含目前拿剩下的物品。以上这些都还不错,关键是接下来就让人吐血了。作者接着说道,我们给子问题加上一个新的参数j…
凭什么啊?
还是让我们回顾一下这样一幅经典的漫画吧:
“我们给子问题加上一个参数j”,这就像你在看数学证明时看到无比邪恶的“我们考虑…“一样,一看到这样的句子,你就知道,这个问题的证明远远不像看上去那么简单,之所以你一路看下去理解上全无困难,那完全是因为作者直接把最重要的一个insight告诉你了,举个很简单的例子,证明素数无最大,谁都会第一时间想到去反证:假设存在一个最大的素数P,那么找到比P大的素数就是证明中最关键的一步,怎么找的?一般书上是不会说的,你会看到书上这样说:假设P是最大的素数,那么我们考虑P’ = 小于等于P的所有素数的乘积+1。那么P’一来显然大于P,二来不能被小于它的所有素数整除,那么P’就成了大于P的素数。
如果你经常注意反证法,你会发现一个有趣的现象,反证法里面经常会有这样一句“我们考虑”,而“我们考虑”后面几乎肯定接着一个天外飞仙一般的insight。素数无最大这个古老的证明里面的“我们考虑”尚算是比较有迹可循的(我们想要构造一个更大的素数,而素数的等价定义就是“不能被小于它的所有素数整除,为了达到这个目的,构造的方法就较明显了)。但是有非常非常多的证明,其中关键的一步就跟嗑药磕出来做梦做出来走路跌跟头跌出来的一样(不信去翻一翻《Proofs from THE Book》),让你完全不知道他怎么想到的。
话说回来,虽然有很多数学证明的关键步骤是很难逆向工程的(因为很多时候想出那个关键步骤的本人其实也是尝试了各种方法,撞了无数堵墙,在寻求证法的尝试空间中作了N次回溯才“妙手偶得”,与其说是妙手偶得,不如说是绞尽脑汁),但并非全无章法可循,否则陶哲轩也不会写出《Solving Mathematical Problems》这样的著作来,而求解问题也就成了真正的Black Art了。
算法的解法则比精妙的数学证明稍加更容易逆向工程一点。只要你有耐心仔细地去琢磨算法的关键步骤和本质,总能从中窥探到一些更general的思想和思路来。
此外,很多经典问题,算法书上的讲法虽然时时令我们失望,但如果去网上一搜,则通常会发现更优秀的解释来。比如背包问题就是如此。
简单地说,如果你对于每个问题都能真正弄清以下这几个问题的答案,那么可以肯定的是,你的理解,记忆,以及学习的效率都会得到质的提高:
为什么这种解法是对的?
为什么那种解法是错的?
为什么这种解法不是最优的?
证明为什么没有更优的解法。
回到人民群众喜闻乐见的经典例子:背包问题。为什么01背包问题的正确(高效)算法是正确(高效)的。表面的解释是,因为01背包问题的子问题定义是 K(W, j),其两个维度相乘的可能性一共有nW种,也就是说一共要计算nW个子问题,而计算每个子问题的复杂度是O(1)的。
但是如果仅仅满足于这样的解释,可以说是隔靴搔痒,并没有触及到本质。算法本质上可以看做是在一个解空间当中的搜索问题,所以要分析一个算法的好坏,首先弄清它的解空间的结构,然后分析它是怎么来探索这个解空间的。
弄清解空间的是第一步,例如排序算法,其解空间可以看做是所有可能的下标排列组合,其中有且仅有一个排列是正确的排序排列(简单起见假设元素各不相同)。那么一个算法在探索这个解空间方面的行为就决定了它的效率高低,最简单的,如果一个算法每次只能检查解空间中的一个点,那么这个算法的复杂度就是解空间的大小。对排序算法而言也就是n!。从这个角度来看,我们就会很容易的发现,所有基于比较的排序算法,其复杂度为什么是以O(nlogn)为下界的,因为一次比较操作最多有两个结果,a>b或a < b,既然只有两种结果,那么最多只能将解空间进行2分,如果每次都能完美的2分,那么找到那个唯一点最终需要的步骤就是log(n!) = O(nlogn)。如此就不难理解什么基于比较的排序算法的复杂度最好不过如此了。
回到01背包问题,01背包问题的解空间其实也是类似的。一次选取就是一个01数组,其中每个元素代表其所对应的物品要不要选取。很显然,这个解空间的大小是2^n。在01背包的算法里面,每当我们解出K(W, j)(需要O(W)次计算)之后,解空间就会被折半(排除掉1/2的可能性),一共如此做n次,就能得到最终解。由于每次折半的代价是O(W),便不难理解为什么算法复杂度是O(nW)了。
那么,为什么每次计算出K(W,j)就能使解空间折半呢?那就需要来看看这个算法是如何探索解空间的,算法探索解空间的方式在其递归公式里面:
K(W, j) = max { K(W, j-1), K(W-Wj, j – 1)
也就是说,首先看你要不要选取第一个物品,有两种可能性(两个分支),每个分支都是一个更低阶的子问题,即在其中的任意一个分支下都要决定要不要选取第二个物品(又是两个分支),如此下递归去,可以构建出一棵有2^n方个叶子节点的树,每条从根结点到叶子节点的路径“01..101”就对应一个解,其中每个分叉代表“选”或“不选”当前的物品。
建立在对这个解空间的理解上,我们再来看为什么01背包问题的正确解法能做到O(nW)。(首先你最好将这棵树画在纸上,其中每个节点都是一个子问题K(W,j),每条分叉都是0或1。)当我们计算出所有的K(W, 1)(需要O(W)次操作)之后,我们容易注意到,所有离叶子节点的距离为1的内部节点K(W, 2)到叶子节点的两个分支都必然只能取其一了,也就是说,有一半的叶子节点被排除掉了(对解空间折半)。当我们进而计算出K(W,2)之后,同样的道理,我们容易看到,到叶子节点距离为2的内部节点的两个分支也只能取其一了,这就进而再次将解空间折半。由于每次折半需要O(W)的复杂度,所以就不难理解算法的总复杂度为O(nW)了。另一种理解的方法是,当我们计算出K(W,j)的时候,从内部节点K(W,j)到根节点的唯一路径便确定了。经过O(nW)次计算,从根节点到那个唯一解(叶子节点)的路径便完全确定了。
知道怎么做是从正确(高效)解法得到的,而知道为什么必须得那样做则往往是从错误(低效)的解法当中得到的。
然而遗憾的是,绝大多数算法书或教程都只顾一上来就告诉你正确的做法是什么,对于一些常见的错误解法,或者常见的低效解法,却根本不加分析。经验告诉我们,理解错误的做法为什么错误同样甚至更为重要,往往是在理解了错误的解法为什么错误之后,我们才能深刻的体会到为什么正确的解法是如此正确。
还是拿经典的背包问题来作例子,你几乎看不到哪本书会告诉你一个典型的低效解法为什么低效的深刻原因。我们都知道动态规划的核心在于子问题的划分,同样的问题,不同的划分办法得到的复杂度完全不一样。前面已经提到了,重复背包问题的思路在01背包问题上会带来指数级的复杂度,但是为什么呢?如果你满足于说:因为如果拿重复背包问题的思路来解01背包问题,那么子问题定义的第二个维度(物品的子集)(见前文)是指数级的,那么要计算所有子问题,当然是指数级的。那么你只是看到这个问题的表象。
如果从对解空间的探索方式来说,可以容易看出这个现象的本质,我们回顾一下01背包问题的正确(高效)算法:
K(W, j) = max { K(W, j-1), K(W-Wj, j – 1)
这个算法讨论的是两种情况,“要”或者“不要”选取第j个物品,这两种情况所对应的解空间是完全不交的,这就有效地将解空间划分为了不重复的两个部分。
而再来看利用重复背包问题思路的解法:
K(W, S) = max { K(W-Wi, S\{i}) + Vi : Wi <= W }
这里讨论的是首先拿掉哪一个物品,还是那句话,讨论的每一个分支都对应了算法对解空间的一个切分,我们容易看出,在“先拿物品i”和”先拿物品j“这两个分支里面,存在大量的重复,因为先拿物品i再拿j,和先拿物品j再拿i对应的是完全一样的一组选取。事实上,如果你将这个递归公式画成树状结构,会发现有n!个叶子节点。n!是什么概念?01背包问题的解空间大小本质上就只有2^n次方,穷举也不过O(2^n)的复杂度,结果这样一切分却变成了n!,可见这种对解空间的切分方法的冗余度是多么高了。你不妨看看,每一次计算K(W, S)子问题能对解空间排查多少呢?是否能像前面正确的算法那样,每次都能有效排查一半情况?理解了这一点之后,我们便注意到在划分解空间,也就是定义子问题的时候的一个原则,就是在建立递归公式的时候,尽量将解空间进行不交的切分。同时我们便有了趁手的工具去分析一个动态规划的解法的效率。
最后再举一个例子:算法书上几乎必讲的霍夫曼树。你所看的算法书在讲霍夫曼树的时候给了证明吗?讲过霍夫曼树的历史八卦吗?也许你看了霍夫曼树的构造方法之后觉得:“哦,这样啊,显然”。但是你可曾想到,在最优编码这个问题上,连香农本人之前给出的解法都只是suboptimal的,而且霍夫曼本人在得到这个算法之前也是绞尽脑汁几近放弃。如果你10分钟就“理解”了,那么百分之百只是背了课文而已。
延伸阅读此文章所在专题列表如下:
本文地址:,欢迎访问原出处。
不打个分吗?
转载随意,但请带上本文地址:
如果你认为这篇文章值得更多人阅读,欢迎使用下面的分享功能。
小提示:您可以按快捷键 Ctrl + D,或点此 。
大家都在看
现代魔法研究协会欢迎你
阅读一百本计算机著作吧,少年
Joel Spolsky (作者), 阮一峰 (译者)
《软件随想录:程序员部落酋长Joel谈软件》是一部关于软件技术、人才、创业和企业管理的随想文集,作者以诙谐幽默的笔触将自己在软件行业的亲身感悟娓娓道来,观点新颖独特,内容简洁实用。全书分为 36讲,每一讲都是一个独立的专题。《软件随想录:程序员部落酋长Joel谈软件》从不同侧面满足了软件开发人员、设计人员、管理人员及从事软件相关工作的人员的学习与工作需要。
扫一扫,在手机上阅读
栏目最新博文
7,660 views
9,413 views
9,100 views
8,555 views
9,471 views
14,788 views
13,844 views
17,731 views
11,317 views
15,249 views
栏目博文推荐
5,602 views
5,031 views
12,845 views
5,616 views
26,380 views
7,660 views
3,897 views
3,731 views
4,549 views
6,944 views
去了解一个事物的本质,才可以征服该事物。
关于网站与作者
互联网信息太多太杂,各互联网公司不断推送娱乐花边新闻,SNS,微博不断转移我们的注意力。但是,我们的时间和精力却是有限的。这里是互联网浩瀚的海洋中的一座宁静与美丽的小岛,供开发者歇息与静心潜心修炼(愿景)。
“Veda”的本义是知识、启示,希望这里能为开发者提供充足的技术资料。
我的电子邮件gonnsai(at)163.com,腾讯微博:,欢迎与我联系。}

我要回帖

更多关于 我要上小学主题思考 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信