Como cruzar duas strings (1234 e abcd -> 12cd e ab34)

Estou desenvolvendo um algoritmo genético em Java, que, como todos eles, requer o cruzamento de dois cromossomos-mãe. Esses cromossomos podem ser bastante longos, de 30 a 500 (mas qualquer que seja o comprimento que eles tiverem, todos terão o mesmo tamanho, portanto, se o comprimento for 80, nessa execução do GA, todos serão 80).

Pensei em desenvolver de maneiras diferentes, mas todas elas me parecem muito ineficientes, então pensei em pedir novos pontos de vista e sugestões diferentes.

Por exemplo, uma das maneiras que pensei foi converter a cadeia de caracteres em uma matriz de caracteres e iterar do ponto inicial ao final do locus cruzado (ou seja, des1 & s2[25] paras1 & s2[40]) copiando em matrizes temporais cada um dos caracteres de matrizes entre esses pontos e iterando novamente e trocando-os pelos caracteres da matriz temporal do "parceiro". Mas, como eu disse, parece que para um programa que terá uma população de cerca de 1000 cromossomos e com cerca de 1000 gerações será extremamente lento.

Aqui está uma ilustração de como é o crossover de dois pontos:

Há também o cruzamento de um ponto mais fácil:

Como não sou muito avançado em Java, você poderia me aconselhar sobre qual abordagem adotar, talvez uma função Java desconheça ou algum algoritmo que eu possa implementar?

questionAnswers(3)

yourAnswerToTheQuestion