运行整数数组所有组合的算法

Algorithm to run through all combinations of integer array

本文关键字:组合 算法 整数 数组 运行      更新时间:2023-10-16
运行

整数数组的所有不同排列的最有效算法是什么?具体来说,我有一个数组,它可以容纳 4 个大小为 C++uint32_t 的元素,但我需要在 Java 中实现它,所以我想我需要使用 long 将其上限为 4,294,967,295。所以一个示例输出将是这样的:

[1,1,1,1]
[2,1,1,1]
[3,1,1,1]
[4,1,1,1]
[1,2,1,1]
[1,3,1,1]
[1,4,1,1]
[1,1,2,1]
[1,1,3,1]
[1,1,4,1]
...
[4,294,967,295, 4,294,967,295, 4,294,967,295, 4,294,967,295]

它不需要按该顺序进行。只要它尝试所有组合。

谢谢!

我希望

你耐心等待,因为有很多可能的组合。

您不允许使用 0,因此总数略小于 2128 种可能的组合。其中只有4,294,967,2954,或340,282,366,604,025,813,516,997,721,482,669,850,625。

因此,如果你每秒可以处理一亿个,那么只需要10,790,283,060,756,779,982,147年就可以进行计算,给出或占用一个宇宙的寿命。

您可能需要更好的策略来找到正确的解决方案,而不是对所有可能性进行暴力枚举。

只需几个循环:

for (int a = 0; a != max_int; ++a) {
    for (int b = 0; b != max_int; ++b) {
        for (int c = 0; c != max_int; ++c) {
            for (int d = 0; d != max_int; ++d) {
                std::cout << a << b << c << d << std::endl;
            }
        }
    }
}