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

时间:2016-02-11 20:05:26

标签: java c++ arrays algorithm sorting

运行整数数组的所有不同排列的最有效算法是什么?具体来说,我有一个数组,可以用C ++术语容纳4个大小为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]

它不需要按顺序完成它。只要它尝试所有组合。

谢谢!

2 个答案:

答案 0 :(得分:3)

我希望你有耐心,因为有很多可能的组合。

您不允许0,因此总数略低于2 128 可能的组合。其中只有4,294,967,295 4 ,或340,282,366,604,025,813,516,997,721,482,669,850,625。

因此,如果你每秒可以处理数十亿,那么只需要10,790,283,060,756,779,982,147年来进行计算,给予或占用宇宙的生命周期。

有可能你需要一个更好的策略来找到正确的解决方案,而不是对所有可能性的强力枚举。

答案 1 :(得分:1)

只需几个循环:

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;
            }
        }
    }
}