【发布时间】:2018-11-25 12:00:36
【问题描述】:
我无法想出逻辑来为 X 位数生成所有可能的 0-9 唯一组合。
例如,如果我想要总共 5 位数字的所有唯一组合,它将使用 0-9 生成它们。 (01234、01235等)
如果您对我的问题有任何简单而有创意的解决方案,我很想听听。我必须在 MASM 中实现它,但任何使用 C++ 的解决方案都应该不是问题。
【问题讨论】:
-
组合还是排列?也许您正在寻找std::next_permutation?
-
@Sani:哦,等等,Generating permutations of a set (most efficiently) 是 permutations,这里的 OP 要求 combinations。所以不是完全相同的副本,但它确实具有可以在 asm 中实现的 next_permutation 的显式算法。我没有足够详细地研究这个问题,但 Jarod 的答案似乎是一种在给定排列算法的情况下获得组合的方法。 (IDK,如果我应该立即重新打开它,或者让它编辑到另一个 dup 目标中;对不起,我第一次应该更仔细地阅读。)
-
@Richard:也找到了组合部分的副本。打印每个 sorted 排列就可以了,通过排列真/假值来完成。您可能希望使用字节数组而不是打包位图来实现它(如实际的
vector<bool>)。然后,如果您想以有趣的方式进行操作,请将该位图与 SSSE3pshufb或 bmi2pdep一起使用以将整数左包。如果您有一台具有 BMI2 的机器,也许您可以将 AVX2 what is the most efficient way to pack left based on a mask? 用于字节而不是 32 位 int。否则使用标量循环!