রিকার্সিভ ব্যাকট্র্যাকিং এবং factorial ব্যবহার করে স্ট্রিংয়ের সব পারমুটেশন লেক্সিকোগ্রাফিক অর্ডারে জেনারেট করা হয়।
উদাহরণ
from math import factorial
def next_permutation(seq):
"""লেক্সিকোগ্রাফিকভাবে পরের পারমুটেশন রিটার্ন করে"""
seq = list(seq)
i = len(seq) - 1
while i > 0 and seq[i-1] >= seq[i]:
i -= 1
if i == 0:
return None
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 seq
def print_permutations(s):
seq = sorted(s) # শুরুতে সর্টেড
for _ in range(factorial(len(seq))):
print(''.join(seq))
seq = next_permutation(seq)
if seq is None:
break
text = input("স্ট্রিং দিন: ")
print("পারমুটেশনগুলো:")
print_permutations(text)
আউটপুট
স্ট্রিং দিন: hey পারমুটেশনগুলো: ehy eyh hey hye yeh yhe
ব্যাখ্যা
স্ট্রিং সর্ট করে লেক্সিকোগ্রাফিকלי সmaalest পারমুটেশন থেকে শুরু।
next_permutationঅ্যালগরিদম: ডান থেকে বামে প্রথম ডিক্রিজ পেয়ার খুঁজে, সোয়্যাপ, রিভার্স।টোটাল
n!পারমুটেশন থাকবে।itertools.permutationsবিল্ট-ইন অ্যাল্টারনেটিভ।