R'da Yüksek Performanslı Programlama II: Algoritmalar

R'da Yüksek Performanslı Programlama II: Algoritmalar

Bu yazıda Fibonacci serisi örneği üzerinden R programlamanın performansını etkileyen önemli faktörlerden olan algoritma tasarımı konusunu ele alıyoruz.
Onur Boyar06 Nis 2021

Bir programlama çalışmasında algoritmanın oluşturulma yöntemi, çalışmanın performansını etkileyen faktörler arasında sayılabilir. Belirli bir işleve sahip bir program birden fazla farklı yöntemlerle yazılabilir. Bize düşen en yüksek performanslı olan kodu yazabilmektir..

R'da farklı performanslarda  Fibonacci serisi kodlama

Bu yazıda iki farklı yöntemle Fibonacci serisini kodlayacak ve bu yöntemler arasındaki performans farkını inceleyeceğiz. İncelemeyi ise microbenchmark paketi aracılığı ile yapacağız.

fibonacci_rec  <- function(n) {
 if(n <= 1) {
   return(n)
 } else {
   return(fibonacci_rec (n-1) + fibonacci_rec(n-2))
 }
}

Burada recursive bir kod ile Fibonacci serisini yazdık. Fonksiyon kendisini n-1 ve n-2 değerleri için çağırıyor ve sonuçları toplayarak bize dönüyor. Şimdi gelin bu yöntemle Fibonacci serisindeki 20. sayıyı bulmak için ne kadar zaman gerekiyor hesaplayalım.

# install.packages("microbenchmark")
library(microbenchmark)
microbenchmark(fibonacci_rec(20), unit="ms")
# Unit: milliseconds
#              expr    min      lq     mean median     uq     max neval
# fibonacci_rec(20) 5.4937 5.86875 6.724587 6.1197 7.1821 10.7857   100

İşlem yaklaşık 7 milisaniye sürdü. Şimdi gelin bunu farklı bir yöntemle yazalım ve bu yöntemde performansı artırmak için bulduğumuz sayıları kaydedelim. Böylece fonksiyonumuz bir kere bulduğu sayıyı bir kez daha bulmak zorunda kalmasın.

fibonacci_seq <- function(n) {
 if (n <= 1) {
   return(n)
 }
 fib <- rep.int(NA_real_, n + 1)
 fib[1] <- 0
 fib[2] <- 1
 for (i in 2:n) {
   fib[i + 1] <- fib[i] + fib[i - 1]
 }
 return(fib[n + 1])
}
microbenchmark(fibonacci_seq(20), unit="ms")

# Unit: milliseconds
#              expr   min     lq     mean median     uq    max neval
# fibonacci_seq(20) 0.002 0.0022 0.085159 0.0023 0.0024 8.2883   100

Daha verimli bir yöntemle yazdığımız Fibonacci serisi algoritması ise yaklaşık 0.08 milisaniye sürdü. Bu basit çalışmada bile algoritma tasarımının R'da yüksek performanslı programlama için ne denli kritik olduğu net bir biçimde görülebiliyor. Bir de çok daha geniş ölçekli çalışmalarda algoritma seçiminin yaratacağı farkı hayal edin!

 

Veri bilimi hakkında daha geniş ve kapsamlı bilgiye erişmek, kariyerinizde fark yaratacak adımlar atmak isterseniz Miuul'un sunduğu Data Scientist Path eğitimine göz atabilirsiniz.
 

Miuul topluluğunun bir parçası ol!

Abone ol butonuna tıklayarak Miuul'dan pazarlama ve haber içerikleri almayı onaylıyorum.