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:
Permütasyon Formülü

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:
Program çıktısı




1 Wikipedia