Diseño de algoritmos de Python: el siguiente conjunto de permutaciones

Código fuente del diseño del algoritmo de Python: https://github.com/MakerChen66/Python3Algorithm

Declaración de derechos de autor: la originalidad no es fácil, este artículo prohíbe el plagio, la reimpresión y la infracción debe investigarse.

1. El próximo arreglo grupal

Dado un conjunto completamente ordenado, necesitamos encontrar el siguiente conjunto de permutaciones de la estructura actual, como: HIJT->HITJ->HJIT->HJTI...

Aunque casi todas las bibliotecas brindan funciones similares, si desea mejorar For velocidad del algoritmo, puedes echar un vistazo a esto.

El algoritmo en sí es muy simple:

  • Comenzando desde el final de la secuencia, encuentre la subsecuencia descendente más larga (p. ej., 46 975 ) y represente el elemento anterior como un pivote (p. ej., 4 6 975 )
  • Intercambie este punto pivote con el siguiente término más pequeño en la subsecuencia descendente más larga encontrada (por ejemplo: 4 7 9 6 5)
  • Gire la subsecuencia descendente (por ejemplo: 47569)

Implementación del algoritmo de Python:

def permute(value):
    values = list(value)
    n = len(values)

    # i: 找到递减序列前的那一个支点
    for i in reversed(range(n - 1)):
        if values[i] < values[i + 1]:
            break
    else:
        # 否则逆转列表里的元素
        values[:] = reversed(values[:])
        return values

    # j: 要和i支点交换值的递减序列的次小项
    for j in reversed(range(i, n)):
        if values[i] < values[j]:
            # i支点和递减序列的次小项交换值,并且把交换后的递减序列逆转,也就是把i支点后的元素逆转
            values[i], values[j] = values[j], values[i]
            values[i + 1:] = reversed(values[i + 1:])
            break

    print(values)

permute('HIJT')

resultado de salida:
inserte la descripción de la imagen aquí

2. Descarga del código fuente

Descarga del código fuente del diseño del algoritmo de Python:

3. Información del autor

Autor: Xiaohong's Fishing Daily, Objetivo: ¡Hacer la programación más interesante!

Cuenta pública original de WeChat: " Tecnología Xiaohong Xingkong ", centrada en algoritmos, rastreadores, sitios web, desarrollo de juegos, análisis de datos, procesamiento de lenguaje natural, IA, etc. Esperamos su atención, ¡crezcamos y codifiquemos juntos!

Nota de derechos de autor: ¡Este artículo prohíbe el plagio y la reimpresión, y la infracción debe investigarse!

Supongo que te gusta

Origin blog.csdn.net/qq_44000141/article/details/121866025
Recomendado
Clasificación