算法与并发编程实践
1. 鼬鼠程序(Weasel program)
鼬鼠程序是一个思想实验,旨在展示通过积累小的改进(即对个体有益并被自然选择选中的突变)如何能快速产生结果,反驳了进化是大跳跃式发生的主流误解。
1.1 算法步骤
- 从一个随机的 28 个字符的字符串开始。
- 制作该字符串的 100 个副本,每个字符有 5% 的概率被随机字符替换。
- 将每个新字符串与目标字符串 “METHINKS IT IS LIKE A WEASEL” 进行比较,并为每个字符串打分(即字符串中位置和字符都正确的字母数量)。
- 如果任何新字符串的得分是满分(28 分),则停止。
- 否则,选取得分最高的字符串,然后回到步骤 2。
1.2 代码实现
class weasel { std::string target; std::uniform_int_distribution<> chardist; std::uniform_real_distribution<> ratedist; std::mt19937 mt; std::string const allowed_chars = "ABCDEFGHIJKLMNOPQRSTUVWXYZ "; public: weasel(std::string_view t) : target(t), chardist(0, 26), ratedist(0, 100) {