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.
Tabla de contenido
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:
2. Descarga del código fuente
Descarga del código fuente del diseño del algoritmo de Python:
- Enlace de descarga de GitHub: Portal
- Enlace al texto original: Leer el texto original
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!