İçeriğe geç

Değer karıştırma algoritması (Shuffle Algorithm)

Algorithm

Merhabalar bu yazımda Swift ile yazmaya devam ettiğim algoritma serisine işinize yarayacak kolay ve etkili bir algoritma olan The Fisher-Yates / Knuth shuffle algoritmasını örnekleyeceğim.

Shuffle algoritması ismindende anlaşılacağı gibi karıştırma algoritmasıdır. Çoğu oyun,sosyal medya uygulamalarında sıklıkla kullanılır. Elimizde bulunan veri setinin sıralarını random bir şekilde karıştırmaya yarar.

Aşağıda yazdığım algoritmayı inceleyebilirsiniz.

public func random(_ n: Int) -> Int {
    return Int(arc4random_uniform(UInt32(n)))
}


extension Array {
    
    mutating func shuffle() {
        
        for i in 0..<self.count {
            
            let rand = random(i + 1)
            
            if i != rand {
                swap(&self[i], &self[rand])
            }
        }
    }
    
}

Örnek ile birlikte açıklayacak olursam.

var arr:[Int] = [22,23,24,25]

arr.shuffle() // 24,22,25,23
arr.shuffle() // 24,23,22,25
arr.shuffle() // 23,24,22,25

var str:[String] = ["A","B","C","D"]

str.shuffle() // A,D,C,B
str.shuffle() // D,C,A,B

Görüğünüz gibi dizi Swift ile Array sınıfına extension olarak yazdığım shuffle fonksiyonunu kullandık ve dizi içerisindeki değerler rastgele olarak yer değiştirmiş oldu. Algoritmanın mantığı dizi count kadar git i + 1 arası rand sayı üret ve bu sayı i değeri ile eşit değilse dizinin i indisi ile rand değerini değiştir.

Github link.

Tarih:AlgorithmSwift

Bu yazı yorumlara kapalı.

Copyright © 2020 Kenan Atmaca