seegongsik
我的单词本
算法

不求完美,但求够好

上回你看到了:有些问题情况会爆炸,要把完美答案查到底,得花一辈子。那就放弃吗?倒不一定。就算拿不到完美答案,“够好的答案”往往很快就能拿到。让一点点,省下一大把时间。

01

先把完美放一放

有个难题。
要找完美答案,
就得把每种情况都查一遍,
而那个数大得吓人。
查到底,
确实会得出最好的答案。
可那
到底什么时候才查完?
按一下数数看。

1
2
2
3
4
5
6
7
输入大小: 1 - 要查的情况数: 2
现在还数得过来。

把完美答案查到底。(情况一涨,时间就爆炸 → 看不到头)

数涨得太快了。
才多几个,
要查的就多出好几倍。
所以等着完美答案
查到底,
有时并不现实。
可话说回来,
也不能就这么撒手。

02

够好的答案,要快

这儿有个想法。
要是不必非得
是最好的呢?
不去冲着完美,
就快快地
抓出一个
“还不错的答案”。
就像贪心里那样,
把眼前好的
一个个利索地挑出来。

粗略答案
一瞬间
?
完美答案
要好一会儿
?

快速的粗略答案 vs 完美答案。(粗略的一下就有 · 差距很小)

你看。
粗略答案眨眼就出来了,
可跟完美答案
差不了多少。
稍微差一点,
却很好用。
很多时候,
这就够了。

03

它保证有多好

不过有个担心。
那个“还不错的答案”,
真能信吗?
万一它其实
糟得很,怎么办?
所以聪明的方法
会连个保证一起给。
它说:“这个答案
不会比最好的
差太多。”

最优
150
保证线 (最优的 1.5 倍)

保证在最优的 1.5 倍以内。(不管出什么答案都在这条线内 → 最坏被挡住了)

这才是真正妙的地方。
划一条线,
比如“在最优的 1.5 倍以内”,
那答案再差,
也过不了那条线。
虽不完美,
可它能差到哪儿,
我们清清楚楚。
这跟瞎猜,
完全是两回事。

04

拿准度换时间

说到底这是一杆秤。
多花时间,
答案就更准;
省时间,
答案就糙一点。
哪边好,
没法一口咬定。
急了就要快的那边,
要精就要准的那边。
挪一挪把手,
在两者之间挑一处。

花的时间45%
准度89%
时间和准度配得正合适。

多花时间更准,少花时间没那么准。(在哪儿停下,由我们来挑)

这杆秤,
是整个算法的心。
快的路和准的路,
简单的路和细致的路。
每一回,我们都在
挑要让出什么、
要换回什么。
懂一个好方法,
就是会读这杆秤。

05

走到这里的路

我们走了好长一段路。
从按顺序解题开始,
排队、查找、
量成本、
拆分、连接、挑选。
我们看到有些问题真的难,
也看到即便如此,
够好的答案是存在的。
按一下,把这条路
一口气回看一遍。

依次点这个领域给的东西来收尾

这个领域给的四样东西。(好方法 · 快 · 策略 · 懂极限再权衡)

我们没法把每个问题
都解得完美。
可这并不意味着
我们就无能为力。
用快的方法、
聪明的策略,
懂得极限再明智地权衡,
哪怕站在难题面前,
也能把一个好用的答案
握在手里。
这,就是算法
给我们的力量。

一句话总结就算是拿不到完美答案的难题,“够好的答案”往往很快就能拿到。有的方法更进一步,还能保证那答案“在最优的百分之几以内”。这是一桩交易:让出一点准度,换来时间。多花点时间就更准,少花点就没那么准。在哪儿停下,由我们来挑。这就是整个领域的收尾。我们没法把每个问题都解得完美,可只要用快的方法、聪明的策略、清楚自己的极限去明智地权衡,哪怕站在难题面前,也能把一个好用的答案握在手里。
算法
如果有帮助,请支持我们