Python アルゴリズムの設計 - 次の順列セット

Python アルゴリズム設計のソース コード: https://github.com/MakerChen66/Python3Algorithm

著作権に関する声明: 独創性を保つのは簡単ではありません。この記事は盗作、転載、侵害を禁止します。調査する必要があります。

1. 次のグループ編成

完全に順序付けられたセットが与えられた場合、HIJT->HITJ->HJIT->HJTI... など、現在の構造の次の順列セットを見つける必要があります。ほとんどすべてのライブラリが同様の関数を提供しますが、For を改善したい場合は

、アルゴリズムの速度については、これを見てください。

アルゴリズム自体は非常に単純です。

  • シーケンスの終わりから開始して、最長の降順サブシーケンス (例: 46 975 ) を見つけ、その前の項目をピボットとして表します (例: 4 6 975 )
  • このピボット ポイントを、見つかった最長の降順サブシーケンス内の次に小さい項と交換します (例: 4 7 9 6 5)
  • 降順のサブシーケンスを回転します (例: 47569)

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')

出力結果:
ここに画像の説明を挿入

2. ソースコードのダウンロード

Python アルゴリズム設計のソース コードのダウンロード:

3. 著者情報

著者: Xiaohong の釣り日報、目標: プログラミングをもっと面白くする!

元の WeChat 公開アカウント:「Xiaohong Xingkong Technology」。アルゴリズム、クローラー、ウェブサイト、ゲーム開発、データ分析、自然言語処理、AI などに重点を置いています。ご注目をお待ちしております。一緒に成長し、コーディングしましょう!

著作権に関する注意: この記事は盗作と転載を禁止しており、侵害があれば調査する必要があります。

おすすめ

転載: blog.csdn.net/qq_44000141/article/details/121866025