String üzerinde permütasyon işlemi
Bir string düşünün "123" gibi, "123", "132", "213", "231", "321" , "312" permütasyonları nasıl elde edersiniz? Çözüm için yazıyı okuyunuz.
Permütasyon, birbirinden ayrılabilir nesnelerin değişik sıralarda
dizilmelerini ifade eden kavramdır. 1 Elimizde "ABCDE" gibi bir bilgi varsa, bu bilginin bir permütasyonu
"EABDC" şeklindedir.
Matematikte ise permütasyon, her sembolün sadece bir kez ya da birkaç kez kullanıldığı
sıralı bir dizidir.
Eleman sayısı n olan bir kümenin içinden r kadar
eleman seçerek yapılabilecek permütasyonlar aşağıdaki formülle hesaplanır:
Eğer "123" metninin 3 elemanı dizilimlerinin sayısını hesaplamak
istiyorsak formül n!'e eşit olur.
Aşağıdaki programda, verilen bir stringin permütasyonlarını listeleyen programı
bulabilirsiniz.
Listenin en altına yazılan adet bilgisi ise permütasyon sayısını
vermektedir.
static int adet = 0; static void Main(string[] args) { char[] metin = "123".ToCharArray(); Permutasyon(metin, 0, metin.Length - 1); Console.WriteLine("----------------"); Console.WriteLine(adet + " adet"); } static void Degistir(ref char a, ref char b) { if(a == b) return; char c = a; a = b; b = c; } static void Permutasyon(char[] dizi, int sol, int sag) { if(sol == sag) { adet++; Console.WriteLine(dizi); } else for(int i = sol; i <= sag; i++) { Degistir(ref dizi[sol], ref dizi[i]); Permutasyon(dizi, sol + 1, sag); Degistir(ref dizi[sol], ref dizi[i]); } }
Ekran çıktısı şu şekildedir:
1 Wikipedia
#string #C #Program #permütasyon