算法与并发编程实用指南
1. The Weasel程序
The Weasel程序是一个思想实验,由Richard Dawkins提出,旨在展示累积的小改进(即能为个体带来益处并被自然选择选中的突变)如何快速产生结果,这与主流认为进化是大幅度跳跃的误解相反。
算法步骤:
1. 从一个随机的28个字符的字符串开始。
2. 制作该字符串的100个副本,每个字符有5%的概率被随机字符替换。
3. 将每个新字符串与目标字符串 “METHINKS IT IS LIKE A WEASEL” 进行比较,并为每个字符串打分(即字符串中位置和字符都正确的字母数量)。
4. 如果任何新字符串的得分是满分(28分),则停止。
5. 否则,选取得分最高的字符串,返回步骤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,