Pythonでの次の順列
次の順列メソッドを実装したいとします。そのメソッドは、辞書式順序で次に大きい数の順列に数値を再配置します。そのような配置が不可能な場合、このメソッドはそれを可能な限り低い順序として再配置します(つまり、実際には昇順でソートされます)。交換はインプレースで行う必要があり、余分なメモリを使用しないでください。たとえば、入力が左側の列にあり、対応する出力が右側の列にある場合。
1,2,3 → 1,3,2 3,2,1 → 1,2,3 1,1,5 → 1,5,1
手順を見てみましょう-
- found:=false、i:=配列の長さ– 2
- while i> =0
- A [i]
- iを1増やします
- A [i]
- 見つかった場合:=false、配列Aを並べ替えます
- それ以外の場合
- m:=インデックスi + 1、A、および現在の要素A[i]から最大要素インデックスを検索します
- 要素A[i]とA[m]を入れ替えます
- i+1からAの最後まですべての要素を逆にします
理解を深めるために、次の実装を見てみましょう-
例
class Solution(object): def nextPermutation(self, nums): found = False i = len(nums)-2 while i >=0: if nums[i] < nums[i+1]: found =True break i-=1 if not found: nums.sort() else: m = self.findMaxIndex(i+1,nums,nums[i]) nums[i],nums[m] = nums[m],nums[i] nums[i+1:] = nums[i+1:][::-1] return nums def findMaxIndex(self,index,a,curr): ans = -1 index = 0 for i in range(index,len(a)): if a[i]>curr: if ans == -1: ans = curr index = i else: ans = min(ans,a[i]) index = i return index ob1 = Solution() print(ob1.nextPermutation([1,2,5,4,3]))
入力
[1,2,5,4,3]
出力
[1, 3, 2, 4, 5]
-
BogoSortまたは順列ソート用のPythonプログラム
この記事では、以下に示す問題ステートメントの解決策について学習します。 問題の説明 −配列が与えられたので、順列ソートの概念を使用して配列をソートする必要があります。 BogoSortは順列ソートとも呼ばれ、パラダイムの生成とテストに基づいています。 それでは、以下の実装のソリューションを見てみましょう- 例 # random module import random # Sort def bogoSort(a): n = len(a) while (is_sorted(a)== False):
-
Pythonのイテレータ関数
説明 Iteratorは、反復プロトコルを実装するPythonのオブジェクトです。タプル、リスト、セットは、Pythonでは組み込みイテレータと呼ばれます。反復プロトコルには2つのタイプのメソッドがあります。 __ iter __(): このメソッドは、イテレータを初期化するときに呼び出され、next()または__next __()(Python 3の場合)メソッドで構成されるオブジェクトを返す必要があります。 next()または__next __()(Python 3の場合): このメソッドは、反復シーケンスから次の要素を返す必要があります。イテレータがforループで使用される場合