Projeto de algoritmo Python - o próximo conjunto de permutações

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:
insira a descrição da imagem aqui

2. Download do código-fonte

Download do código-fonte do projeto de algoritmo Python:

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!

Acho que você gosta

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