seegongsik
算法

什么是随机算法

在贪心那里,我们挑的是眼前最好的。可有的解法干脆掷骰子,随机决定选什么。听起来奇怪,可有时这样反而更快、更简单。交给运气,怎么会有帮助呢?

01

用骰子来选

有的解法靠掷骰子决定下一步做什么。不是想好了再选,而是干脆交给运气。
每按一次按钮,骰子就滚一次。
会掷出几点,事先谁也不知道。

按一下来掷
掷过的点

一按,骰子就滚起来。下一次掷出几点,事先没法知道。

为什么要故意交给运气?要是总用同一种方式来选,就可能有人盯住这个习惯,专门造出难对付的输入。
随机地选,就能躲开这种算计。
真正的用处,下一步就能看到。

02

用随机的基准

快速的排序里,有一种是先定一个基准,比它小的放左边,比它大的放右边。
可要是总拿最后一个值当基准,遇到已经排好队的输入,每次都切得一边倒,就会非常慢。

总用末值基准
随机基准

比一比总拿最后一个值当基准 vs 随机基准,各要切几次。(一边倒 = 慢)

随机选基准,不管来什么输入,几乎都不会一边倒,专门针对坏输入的陷阱也不管用了。
所以平均来看,每次都切得比较均匀,排序就快了。

03

多掷几次来估算

随机还能用来估算。在正方形里画一个四分之一圆,也就是把圆分成四份中的一份,再往里面乱撒点。
看落在四分之一圆里的点占全部点的多少,就能估算出它占了多大面积。
一个个地撒点看看。

圆内: 0全部: 0比例: -真值: 0.785
撒点,看比例

点撒得越多,比例就越接近真值。(圆内的点 / 全部的点)

点少的时候,估算忽高忽低。可点撒得越多,比例就越紧贴真值。
一两次的运气靠不住,可掷过无数次的平均值是靠得住的。
这就是多掷几次来估算答案的办法。

04

拿确定换速度

随机解法不是白来的。又快又简单,代价是不能保证每次答案都一样,运气不好时偶尔也会慢。
点开两边,比一比得到什么、付出什么。

两边都按一按比比看

点一点得到的和付出的,比一比。(快·简单 vs 不能保证同样的答案)

所以随机并不总是好的,它有自己合适的位置。
当又快又简单比一点点不确定更值钱时,就用它。付出一点确定,换来速度和简单。

05

一眼看总结

把随机解法一眼看下来:用骰子来选,用随机基准躲开陷阱,多掷几次来估算答案,拿确定换速度。
按顺序点开要点,自己总结一下。

依次点要点来收尾

按顺序点这四个要点来总结。(骰子 · 随机基准 · 多掷估算 · 交换)

说是交给运气,听着有点马虎,可用得好的话,随机是又快又靠得住的工具。
数据越是多得惊人,多掷几次来估算的这个想法就越派得上大用场。
下一课,我们走进由点和线连起来的世界:图。

一句话总结有的解法掷骰子,随机地选下一步做什么。快速排序总拿最后一个值当基准,遇到坏输入就会变慢;随机选基准,就能躲开这个陷阱,平均来看更快。往正方形里乱撒点,看落在四分之一圆里的比例,就能估算出面积,掷得越多,估算越准。随机解法不能保证每次答案都一样,但换来的是又快又简单。付出一点确定,换来速度。
← 算法
如果有帮助,请支持我们