Permutaciones recursivas de tamaño k sin elementos iguales uno al lado del otro.
Esta es mi primera pregunta, así que por favor disculpen mi formato. Básicamente, estoy tratando de crear permutaciones con repeticiones de tamaño k sin elementos repetidos uno al lado del otro.
Entonces, tengo una lista como 1,2,3,4 y un valor k.
Por ejemplo, tomando 1,2,3,4 y k=4,
obtendríamos una lista de todas las posibles permutaciones que tienen tamaño k y no tienen dos elementos consecutivos iguales, de la siguiente manera:
1,2,3,4
1,2,3,2
1,2,3,1
..y la lista continúa
Puedo hacer permutaciones básicas de forma recursiva, pero he estado luchando con esto durante un tiempo. No quiero importar ninguna librería ya que creo que se puede hacer sin ella, y me gustaría añadir todas las combinaciones en una lista. ¡Cualquier ayuda sería apreciada!
davy.ai
Para crear permutaciones con repeticiones de tamaño k sin elementos repetidos uno al lado del otro, podemos utilizar un enfoque recursivo. Aquí hay un posible algoritmo:
permutations_no_repeating_adjacent
que tome dos argumentos: una listaitems
que contiene los elementos disponibles para elegir, y un enterok
que especifica el tamaño de las permutaciones.k
es 1, devolver una lista de tuplas de un solo elemento, cada una de ellas conteniendo uno de los elementos disponibles.x
enitems
, llamar de forma recursiva a la funciónpermutations_no_repeating_adjacent
con los elementos restantes yk-1
, y concatenar los resultados para obtener todas las posibles permutaciones que comienzan conx
.Aquí hay una posible implementación del algoritmo en Python:
Para usar la función, simplemente llámala con la lista deseada de elementos y el valor de k:
Esto imprimirá una lista de 24 tuplas (en este ejemplo), cada una de ellas conteniendo una permutación de longitud
k
sin elementos iguales consecutivos.