Cómo "cruzar" dos cadenas (1234 y abcd -> 12cd y ab34)

Estoy desarrollando un algoritmo genético en Java que, como todos ellos, requiere el cruce de dos cromosomas parentales. Estos cromosomas pueden ser bastante largos, de 30 a 500 (pero sea cual sea la longitud que tengan, todos serán del mismo tamaño, por lo que si la longitud es 80, en ese análisis GA todos serán 80).

ensé en desarrollar de diferentes maneras, pero todas me parecen muy ineficientes, así que pensé en pedir nuevos y diferentes puntos de vista y sugerencia

Por ejemplo, una de las formas en que pensé fue convertir la cadena en una matriz de caracteres e iterar desde el punto de inicio hasta el final del lugar de cruce (es decir, desdes1 & s2[25] as1 & s2[40]) copiando en matrices temporales cada uno de los caracteres de las matrices entre esos puntos y luego iterando nuevamente e intercambiándolos con los caracteres de la matriz temporal del "socio". Pero como dije, parece que para un programa que tendrá una población de aproximadamente 1000 cromosomas y con alrededor de 1000 generaciones será extremadamente lento.

Aquí hay una ilustración de cómo se ve el crossover de dos puntos:

También existe el crossover de un punto más fácil:

Como no estoy muy avanzado en Java, ¿podría aconsejarme sobre qué enfoque tomar, tal vez una función de Java que desconozco o algún algoritmo que pueda implementar?

Respuestas a la pregunta(3)

Su respuesta a la pregunta