Java 找到和生成所有可能的大型阵列对的最佳方法是什么?

Java 找到和生成所有可能的大型阵列对的最佳方法是什么?,java,python-3.x,algorithm,Java,Python 3.x,Algorithm,给定数组太大,大约包含10^6个元素 已经知道遍历每一个可能的对的传统方法,但是我想要一些更有效的方法/技巧 int prod = 0, arr[]= {1,4}; for(int x = 0; x<arr.length;x++) { for(int y = x;y<arr.length; y++) { prod += arr[x] & arr[y]; } } System.out.println(prod); 如果arr[x]=0,您可

给定数组太大,大约包含10^6个元素

已经知道遍历每一个可能的对的传统方法,但是我想要一些更有效的方法/技巧

int prod = 0, arr[]= {1,4};

for(int x = 0; x<arr.length;x++) {
    for(int y = x;y<arr.length; y++) {
        prod += arr[x] & arr[y];
    }
}

System.out.println(prod);

如果arr[x]=0,您可以跳过该x值的整个内环,因为无论y是什么,0&y=0。

如果arr[x]=0,您可以跳过该x值的整个内环,因为无论y是什么,0&y=0。

对角线是一个恒等式

prod = 0;
for(int x = 0; x < arr.length; x++) {
    int ax = arr[x];
    for(int y = x + 1; y <arr.length; y++) {
        prod += ax & arr[y];
    }
    prod += arr[x];
}

对角线是一个恒等式

prod = 0;
for(int x = 0; x < arr.length; x++) {
    int ax = arr[x];
    for(int y = x + 1; y <arr.length; y++) {
        prod += ax & arr[y];
    }
    prod += arr[x];
}

为什么要标记这个?您已经避免了对角线上的重复计算,我认为任何进一步的优化都可能取决于数组中数据的外观。@JacobG。我希望它可以用python或java来完成。为什么当运算符为+=”时标题和变量名会显示product?为什么要标记它?您已经避免了对角线上的重复计算,我认为任何进一步的优化都可能取决于数组中的数据是什么样子。@JacobG。我希望它可以用python或java来完成。为什么当运算符为+=”时标题和变量名会显示product?这个方法没有提供适当的结果。下面是一个例子:如果有一个数组={1,2,3},那么结果应该是9。说明:And-product1,1+和-product1,2+和-product1,3+和-product2,2+和-product2,3+和-product3,3。噢,如果要计算对角线,则其nn+1/2。我来调整密码谢谢!现在它工作正常,也是我找到的最快的方法。这个方法没有提供合适的结果。下面是一个例子:如果有一个数组={1,2,3},那么结果应该是9。说明:And-product1,1+和-product1,2+和-product1,3+和-product2,2+和-product2,3+和-product3,3。噢,如果要计算对角线,则其nn+1/2。我来调整密码谢谢!现在它工作正常,也是我找到的最快的方法。