Python Ile Tekrarli Permutasyon Sorusu
PYTHON İLE TEKRARLI PERMÜTASYON ÖRNEĞİ
Soru:
A'dan B'ye gidilebilecek en kısa kaç yol vardır?
Çözüm: Bu soruda A noktasından başlayacaksak en kısa yol için bütün yolları şu şekilde düşünebiliriz: Sağa ve sağ alta. Zaten sola alta gitmeye gerek yoktur.
4 kere sağ alta 2 kere sağa gitmeyi A'dan B'ye giderkenki en kısa mesafe olarak tanımlayabiliriz. Örneğin sağa alta gitmek için X'i, sağa gitmek için Y değişkenlerini tayin edelim.
Yollar şu şekilde sıralabilir. XXXXYY XXXYYX . . . YYXXXX
Tekrarlı permütasyon olmasını sağlayan kısıtın X ve Y'lerin tekrar etmesi olduğunu görmekteyiz.
O zaman cevap şu şekilde olur. (4+2)! / (4!.2!) = 15
def faktoriyelHesapla(i):
if i==1:
return 1
else:
return i * faktoriyelHesapla(i-1)
X = 4
Y = 2
sonuc = faktoriyelHesapla(X + Y) / (faktoriyelHesapla(X) * faktoriyelHesapla(Y))
print("Gidilebilecek en kısa yolların sayısı = ",sonuc)
Soruda şöyle bir değişiklik yaparsak;
Eğer işaretlenen yerden geçiş yapmak kısıtlanırsa o zaman geçilebilecek en kısa yol sayısı ne olur ?
Çözüm:
Eğer Tüm durumlardan;
A'dan C'ye gidilen yollar ve D'den B'ye gidilen yollar çıkarılırsa çözüm elde edilir.
Tüm durumları zaten bulmuştuk (15)
O zaman
A'dan C'ye (1 + 1)! / (1! * 1!)
ile
D'den B'ye (2 + 1)! / (2! 1)
sonuçlarını çarpıp tüm durumlardan çıkarırsak sonucu elde etmiş oluruz.
XAC = 1
YAC = 1
XDB = 1
YDB = 2
AC = faktoriyelHesapla(XAC + YAC) / (faktoriyelHesapla(XAC) * faktoriyelHesapla(YAC))
DB =faktoriyelHesapla(XDB + YDB) / (faktoriyelHesapla(XDB) * faktoriyelHesapla(YDB))
print("Gidilebilecek en kısa yolların sayısı = ",sonuc - (AC * DB))


