folder Tahribat.com Forumları
linefolder C - C++
linefolder Fisher Yates Karıştırma Algoritması



Fisher Yates Karıştırma Algoritması

  1. KısayolKısayol reportŞikayet pmÖzel Mesaj
    DeadSoul
    DeadSoul's avatar
    Kayıt Tarihi: 12/Mayıs/2012
    Erkek

    #include <iostream>

    #include <conio.h> // getch() 

    using namespace std;

      

    void shuffle(int a[],int size)

    {

       int tmpa, tmpb;

       int random;

      

       srand(time(NULL));

      

       while (size > 0)

       {

          random = rand()%size; // dizi boyutunun random değer alır 

          tmpa = a[size-1];           // değişkene dizideki en son elemanı atar

          tmpb = a[random];       // dizideki random değişkenin değerindeki sırada olan rakamı değişkene atar 

          a[size-1] = tmpb;          // takas et

          a[random] = tmpa;      //  takas et 

          size = size-1;

       }

    }

     

    int main()

    {

       const int SIZE = 20; 

       int arr[SIZE]= {0};

      

       for (int j=0;j < SIZE;j++)

       { arr[j] = j+1; } 

       shuffle(arr,SIZE); 

       for (int f=0;f < SIZE;f++)

       { cout << arr[f] << endl; }

     

       getch();

       return EXIT_SUCCESS;

    }

     

     

    Merhaba,şöyle kısa bir doküman niteliğinde bir şey paylaşıyım.Kod c++ ile yazılmıştır.Shuffle fonksiyonu namı diğer fisher yates karıştırma algoritması olarak geçer,merak edenler için wiki: http://en.wikipedia.org/wiki/Fisher–Yates_shuffle

     

    Peki ne yapar bu kod ? Çalışma mantığı nedir ?

     

    Mesela rakamlardan oluşan bir dizimiz var bu kod ile rakamları karıştırabiliriz.Ya da rakamlardan oluşan bir dizi oluşturmak istiyoruz ama bütün rakamlardan en fazla 1 tane olacak.Bu problemin çözümü için şöyle bir algoritma oluşturabiliriz.Ben diziye 1 den x’e kadar değerler atıyım sonra bu diziyi karıştırayım al sana bütün rakamlardan bir tane karışık dizi.

     

    Algoritma diziden rastgele bir rakam seçer bunla başka bir rakamın yerini değiştirir(tekrar sayısı = dizi boyutu)bu şekilde tüm dizi karışmış olur.

     

    Umarım anlamışsınızdır :) 

     

     

Toplam Hit: 1894 Toplam Mesaj: 1