我买了三盒不同口味(A、B、C)的茶包。
我希望以这样的方式混合它们 - 永远不会有两个连续的相同口味的袋子(避免使用 ABCCAB);- 混合是“最”随机的,即避免使用 ABCABCABC...或 ABABAB...BCBCBC...CACACA 等模式。
这种混合有已知的算法吗?
目前,我随机打乱许多“ABC”并将结果连接起来,如果前一个 shuffle 的最新字母与新 shuffle 的开头相同(...ABCCAB => ...ABCACB),则交换第一个字母。
我想我可以通过预先计算 ABC 的排列来改进这个算法,并在那些不以与前一个排列相同的字母开头的排列中绘制一个排列。
我试图“谷歌”这个问题,但作为一个法语母语人士,我可能错过了适当的关键词。