Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/389.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java中的优化排列代码_Java_Memory Management_Permutation_Executable Jar_Performance - Fatal编程技术网

Java中的优化排列代码

Java中的优化排列代码,java,memory-management,permutation,executable-jar,performance,Java,Memory Management,Permutation,Executable Jar,Performance,这是我从网上得到的代码。 import java.util.ArrayList; 导入java.util.Calendar; 导入java.util.Collection; 导入java.util.HashSet; 导入java.util.List; 导入java.util.Set; 公开课考试{ 公共静态void main(字符串参数[]){ 测试对象=新测试(); 集合输入=新的ArrayList(); 对于(int i=0;i

这是我从网上得到的代码。

import java.util.ArrayList;
导入java.util.Calendar;
导入java.util.Collection;
导入java.util.HashSet;
导入java.util.List;
导入java.util.Set;
公开课考试{
公共静态void main(字符串参数[]){
测试对象=新测试();
集合输入=新的ArrayList();
对于(int i=0;i<14;i++){
输入。添加(i);
}
采集输出=对象排列(输入);
int k=0;
设置pnr=null;

对于(int i=0;i而不是首先生成所有置换(因为这需要的内存量呈指数级增长),我建议您在生成置换时处理每个置换。这意味着您一次只需要存储一个组合

您可以生成大小为1的所有置换(如果允许的话,可以为零),并扩展到所有大小的所有置换


注意:对于输出,您只需要计算将生成的数量,而不必实际生成它们。

而不是首先生成所有置换(因为这需要的内存量呈指数增长)我建议您在生成每个排列时对其进行处理。这意味着您一次只需要存储一个组合

您可以生成大小为1的所有置换(如果允许的话,可以为零),并扩展到所有大小的所有置换


注意:对于您的输出,您只需要计算将生成的数量,而不必实际生成它们。

您可以稍微增加堆大小:in或从中


但是,如果您想要30个元素的所有排列,则需要
30!*30*4
字节的内存,即3e+22 TB…

您可以稍微增加堆大小:in或从中


然而,如果你想要30个元素的所有排列,你将需要
30!*30*4
字节的内存,即3e+22 TB…

我想这里可能遗漏了一点。你一直在问是否有更“高效”或“优化”的方法来查找一组数字的所有排列

30个整数的可能排列数是一个大约32位的数字。1GB的ram是一个10位的字节数。如果你说的是将这个问题的所有答案同时存储在内存中,可以想象,即使你在整个世界中拥有所有的ram,你也无法做到这一点d、


Peter的回答认识到了这一点,他指出,虽然不可能将整个解决方案存储为大于30个数字(更不用说计算时间了),可以计算部分答案并根据需要生成更多答案。

我认为这里可能遗漏了一点。你一直在问,是否有更“高效”或“优化”的方法来查找一组数字的所有排列

30个整数的可能排列数是一个大约32位的数字。1GB的ram是一个10位的字节数。如果你说的是将这个问题的所有答案同时存储在内存中,可以想象,即使你在整个世界中拥有所有的ram,你也无法做到这一点d、


Peter的回答认识到了这一点,他指出,虽然不可能将整个解决方案存储为大于30个数字(更不用说计算时间了),可以计算部分答案,并根据需要生成更多答案。

这将适用于您所做的工作。但是,我看不到减少处理的方法。因此,这是您所能获得的最有效的方法

public static ArrayList<Integer> calPermutations (ArrayList<ArrayList<Integer>> n) {
    if (n.size() <= 0 || n == null) {
        return null;
    }
    ArrayList<Integer> Result = new ArrayList<Integer>();
    for (int i = 0; i < n.size(); i++) {
        Integer num = n.get(i).get(0);
        for (int x = 1; x < n.get(i).size(); x++) {
            num *= n.get(i).get(x);
        }
        Result.add(num);
    }
    return Result;
}

如果这对你的RAM来说太大,只需减少数字,直到你能找到适合的。更多信息。

这将适用于你正在做的事情。但是我看不到减少处理的方法。因此,这是你能得到的最有效的方法

public static ArrayList<Integer> calPermutations (ArrayList<ArrayList<Integer>> n) {
    if (n.size() <= 0 || n == null) {
        return null;
    }
    ArrayList<Integer> Result = new ArrayList<Integer>();
    for (int i = 0; i < n.size(); i++) {
        Integer num = n.get(i).get(0);
        for (int x = 1; x < n.get(i).size(); x++) {
            num *= n.get(i).get(x);
        }
        Result.add(num);
    }
    return Result;
}

如果这对你的RAM来说太大,只需减少数字,直到你能找到适合的东西。更多信息。

你能更具体地说明你的问题吗?你在排列什么?我已经编辑了这个问题,包括我的需要。当你说排列时,是对元素排序吗?@Padrus排序是不需要的对我来说。你能不能更具体一点你的问题陈述?你在排列什么?我已经编辑了这个问题,包括我的需要。当你说排列时,是为了对元素排序吗?@Padrus排序对我来说不需要。所以编辑这个代码就足够了?有没有可以有效地进行排列的JAR?可能有是的,但考虑到这只是一个练习,我怀疑你会通过自己做来学到更多。这只是几行代码。所以编辑这段代码就足够了?有没有可以有效地进行置换的JAR?可能有,但考虑到这只是一个练习,我怀疑你会通过自己做来学到更多。这只是几行代码。
public static ArrayList<Integer> calPermutations (ArrayList<ArrayList<Integer>> n) {
    if (n.size() <= 0 || n == null) {
        return null;
    }
    ArrayList<Integer> Result = new ArrayList<Integer>();
    for (int i = 0; i < n.size(); i++) {
        Integer num = n.get(i).get(0);
        for (int x = 1; x < n.get(i).size(); x++) {
            num *= n.get(i).get(x);
        }
        Result.add(num);
    }
    return Result;
}
-Xmx2048M