茶包风味混合算法

计算科学 算法 组合学
2021-12-23 11:07:41

我买了三盒不同口味(A、B、C)的茶包。

我希望以这样的方式混合它们 - 永远不会有两个连续的相同口味的袋子(避免使用 ABCCAB);- 混合是“最”随机的,即避免使用 ABCABCABC...或 ABABAB...BCBCBC...CACACA 等模式。

这种混合有已知的算法吗?

目前,我随机打乱许多“ABC”并将结果连接起来,如果前一个 shuffle 的最新字母与新 shuffle 的开头相同(...ABCCAB => ...ABCACB),则交换第一个字母。

我想我可以通过预先计算 ABC 的排列来改进这个算法,并在那些不以与前一个排列相同的字母开头的排列中绘制一个排列。

我试图“谷歌”这个问题,但作为一个法语母语人士,我可能错过了适当的关键词。

1个回答

我自然而然地想到的第一个想法是:在每个袋子之后,以 50% 的概率从其余两个袋子中选择一个。这是否避免了诸如 ABABAB 之类的“特殊”模式?不,他们只是出现的机会很小。在真正的随机数生成器中,它应该是这样的。避免特殊模式给人以随机性的印象,但真正的随机数可能有它们(正如您已经注意到的相同的连续数字)。