交叉字符串 java_java – 如何“交叉”两个字符串(1234&abcd – > 12cd&ab34)

我在

Java中开发一种遗传算法,就像所有这些算法一样,需要两条父染色体的交叉.这些染色体可能很长,从30到500不等(但无论它们长度如何,它们都将具有相同的大小,因此如果长度为80,那么GA运行的全部将为80).

我想以不同的方式发展,但他们在我看来都非常低效,所以我想我可能会要求新的,不同的观点和建议.

例如,我认为的一种方法是将字符串转换为字符数组并从交叉轨迹的起点到终点迭代(即从s1& s2 [25]到s1& s2 [40] )将这些点之间的每个数组字符复制到时间数组中,然后再次迭代并使用“伙伴”的时间数组中的字符交换它们.但就像我说的那样,一个拥有大约1000条染色体并且大约1000代的人群的程序似乎非常缓慢.

以下是两点交叉的示例:

还有一个更简单的点交叉:

因为在Java中根本不是很先进,你可以建议我采取什么方法,可能是一个我不知道的Java函数,或者我可以实现的一些算法?

// chromosomes

String s1;

String s2;

// crossovers

String c1;

String c2;

Random r = new Random();

// get 2 random indices

int ind1 = r.nextInt(s1.length());

int ind2 = r.nextInt(s1.length());

// make sure ind2 > ind1... leaving this part out;

// break both strings into parts like in your picture

String s1part1 = s1.substring(0, ind1);

String s1part2 = s1.substring(ind1, ind2);

String s1part3 = s1.substring(ind2);

String s2part1 = s2.substring(0, ind1);

String s2part2 = s2.substring(ind1, ind2);

String s2part3 = s2.substring(ind2);

// combine the parts

c1 = s1part1 + s2part2 + s1part3;

c2 = s2part1 + s1part2 + s2part3;

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值