1
对于GA需要两种方法:寻找快速的方法来转换布尔[]以格雷码至BigInteger和反之亦然的Java
BigInteger greyToBigInteger(boolean[]){...}
和
boolean[] bigIntegerToGrey(BigInteger){...}
例如:
15 ---> {true,false,false,false}
and
{true,false,false,false} --> 15
我不知道,如何让这非常快。要转换的最大数量是10^1125,所以对于一个数字,它的工作时间超过5分钟,如果我这样做的话,就像维基百科的例子。
如果能结合每4个布尔在一起,你可以做一个简短的查找表,生成一个十六进制数字为每4布尔组合。现在只需将十六进制数字添加到字符串构建器中,并从生成的十六进制字符串中生成BigInteger。十六进制到BigInteger转换是IME,速度非常快。 –
@RudyVelthuis我找到一些方法来转换BigInteger(灰色)<--> BigInteger(二进制)。我可以使用它们,但我需要首先转换boolean [] <--> BigInteger,但我不确定它可以工作多快。 – Legion
只收集16个布尔值,将它们转换为16位整数,将BigInteger(Gray)左移16,并添加16位整数。重复,直到完成。然后,您只需调用BigInteger(灰色) - > BigInteger(二进制)代码即可!你知道如何将16个布尔变量(实际上是16位)转换为一个16位的整数,对吗?或者如何将16位int转换为16位布尔值? –