Código-fonte do projeto do algoritmo Python: https://github.com/MakerChen66/Python3Algorithm
Declaração de direitos autorais: Originalidade não é fácil, este artigo proíbe plágio, reimpressão, violação deve ser investigada!
1. O próximo arranjo de grupo
Dado um conjunto totalmente ordenado, precisamos encontrar o próximo conjunto de permutações da estrutura atual, como: HIJT->HITJ->HJIT->HJTI...
Embora quase todas as bibliotecas forneçam funções semelhantes, se você quiser melhorar o For velocidade do algoritmo, você pode dar uma olhada nisso.
O algoritmo em si é muito simples:
- Começando no final da sequência, encontre a subsequência descendente mais longa (por exemplo: 46 975 ) e represente o item antes dela como um pivô (por exemplo: 4 6 975 )
- Troque este ponto de pivô com o próximo menor termo na subsequência descendente mais longa encontrada (por exemplo: 4 7 9 6 5)
- Transforme a subsequência descendente (por exemplo: 47569)
Implementação do algoritmo 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 saída:
2. Download do código-fonte
Download do código-fonte do projeto de algoritmo Python:
- Link para download do GitHub: Portal
- Link para o texto original: Leia o texto original
3. Informações do autor
Autor: Xiaohong's Fishing Daily, Objetivo: Tornar a programação mais interessante!
Conta pública original do WeChat: " Xiaohong Xingkong Technology ", com foco em algoritmos, rastreadores, sites, desenvolvimento de jogos, análise de dados, processamento de linguagem natural, IA, etc., aguardando sua atenção, vamos crescer e codificar juntos!
Nota de direitos autorais: este artigo proíbe plágio e reimpressão, e a violação deve ser investigada!