ইটারেটিভ next_permutation অ্যালগরিদম ব্যবহার করে রিকার্সন ছাড়া সব পারমুটেশন জেনারেট করা হয়।
উদাহরণ
from math import factorial
def next_permutation(seq):
i = len(seq) - 1
while i > 0 and seq[i-1] >= seq[i]:
i -= 1
if i == 0:
return False
j = len(seq) - 1
while seq[j] <= seq[i-1]:
j -= 1
seq[i-1], seq[j] = seq[j], seq[i-1]
seq[i:] = reversed(seq[i:])
return True
def print_all_permutations(s):
seq = sorted(list(s))
for _ in range(factorial(len(seq))):
print(''.join(seq))
if not next_permutation(seq):
break
text = "bhd"
print("স্ট্রিং:", text)
print("সর্টেড:", ''.join(sorted(text)))
print("সব পারমুটেশন:")
print_all_permutations(text)
আউটপুট
স্ট্রিং: bhd সর্টেড: bdh সব পারমুটেশন: bdh bhd dbh dhb hbd hdb
ব্যাখ্যা
স্ট্রিংকে লিস্টে কনভার্ট করে সর্ট (স্মalleset পারমুটেশন)।
next_permutationইন-প্লেস মডিফাই করে পরের পারমুটেশন দেয়।ফলস রিটার্ন হলে শেষ পারমুটেশন পৌঁছেছে।
রিকার্সন ছাড়া, কনস্ট্যান্ট এক্সট্রা স্পেস (ইন-প্লেস)۔