java - 非递归地从两个数组中生成所有可能的元素排列

标签 java algorithm

我正在尝试生成所有可能的方程,给定一个字符串运算符数组(+、-、*、/)和一个字符串变量数组(a、b、c ...)。每个方程式都由成对的变量和数字 (a+ b- c/b) 组成,但最后一个变量除外,它后面没有运算符。该算法必须生成可变长度的方程(2 项、6 项等)。用 Java 生成此列表的最有效方法是什么?

请不要递归地做。 :)

嗯,不,这不是家庭作业。这是一个个人项目,我试图利用遗传算法找到适合数据的最佳方程。如果您相信,对算法的一般性描述就足够了。

最佳答案

这是我想出的代码。我正在使用单个 LinkedList 来存储我生成的方程式。我生成所有可能的运算符和变量对,然后将它们附加到我已经生成的解决方案中以提出新的解决方案。有更好/更快的方法吗?

LinkedList<String> solutions = new LinkedList<String>();
//String[] vars and operators are initialized elsewhere.
int start = 0, end = solutions.size()-1;

//creating the first solutions
for(String s : vars)
    solutions.add(s);


//precompute pairs of operators and variables
String[] pairs = new String[operators.length * vars.length];
for(int i=0, j=0; j<operators.length; j++)
for(int k=0; k<vars.length; k++)
{
    pairs[i++]= operators[j]+vars[k];
}

//while the the terms in equations is under maximum
while(solutions.get(solutions.size()-1).split("[+/*-]").length<4)
{
    for(int i=start; i<end; i++)
    {
        String soln = solutions.get(i);
        for(int j=0; j<pairs.length; j++)
        {
            solutions.add(soln+pairs[j]);
        } 
    }
    start = end +1;
    end = solutions.size()-1;
}

关于java - 非递归地从两个数组中生成所有可能的元素排列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/873413/

相关文章:

java - 为什么我的 IF ELSE 语句默认向后?

java - OkHttp3的实例增长很快,无法被GC释放! OOM

java - 反射 API 不会破坏数据封装的目的吗?

python - 切割列表列表

algorithm - 置换矩阵

algorithm - 局部波束搜索和随机波束搜索有什么区别?

java - 如何使用正则表达式查找密码

java - 我的 onClickListener 有什么问题?

algorithm - 解决这一具有挑战性的动态规划任务的建议

c# - 为什么我们在 HashTable 中使用 Hash Code 而不是 Index?