es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

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!

Tags:  ,

Answer

  1. Avatar for 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:

    1. Definir una función llamada permutations_no_repeating_adjacent que tome dos argumentos: una lista items que contiene los elementos disponibles para elegir, y un entero k que especifica el tamaño de las permutaciones.
    2. Si k es 1, devolver una lista de tuplas de un solo elemento, cada una de ellas conteniendo uno de los elementos disponibles.
    3. De lo contrario, para cada elemento x en items, llamar de forma recursiva a la función permutations_no_repeating_adjacent con los elementos restantes y k-1, y concatenar los resultados para obtener todas las posibles permutaciones que comienzan con x.
    4. Filtrar las permutaciones que contengan dos elementos iguales consecutivos.
    5. Devolver la lista final de permutaciones.

    Aquí hay una posible implementación del algoritmo en Python:

    def permutations_no_repeating_adjacent(items, k):
        if k == 1:
            return [(x,) for x in items]
        else:
            result = []
            for x in items:
                subperms = permutations_no_repeating_adjacent([y for y in items if y != x], k-1)
                for subperm in subperms:
                    if len(subperm) == 0 or subperm[0] != x:
                        result.append((x,) + subperm)
            return result
    

    Para usar la función, simplemente llámala con la lista deseada de elementos y el valor de k:

    items = [1, 2, 3, 4]
    k = 4
    perms = permutations_no_repeating_adjacent(items, k)
    print(perms)
    

    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.

Comments are closed.