gpt4 book ai didi

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

转载 作者:塔克拉玛干 更新时间:2023-11-03 06:35:13 25 4
gpt4 key购买 nike

我正在尝试生成所有可能的方程,给定一个字符串运算符数组(+、-、*、/)和一个字符串变量数组(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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com