R ile Yüksek Performanslı Programlama — 2
R ile Yüksek Performanslı Programala serimizin ikinci yazısında performansı etkileyen önemli faktörlerden algoritma dizaynını konuşacağız ve fibonacci serisi örneğiyle bunun önemini göreceğimiz.
Algoritma Dizayni
Algoritmamızı oluşturma yöntemimiz de performansımızı etkileyen faktörlerdir. Aynı işlemi yapan bir program çok farklı yöntemlerle yazılabilir. Bize düşen en yüksek performanslı olanları yazabilmektir. Bu dersimizi de algoritma dizaynı ile ilgili bir ders ile sonlandıracağız.
Fibonacci Serisi
İki farklı yöntemle Fibonacci serisini kodlayacağız ve aralarındaki performans farkını inceleyeceğiz. Bu incelemeyi de microbenchmark paketi aracılığı ile yapacağız.
fibonacci_rec <- function(n) {
if(n <= 1){
return(n)
}
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 20. fibonacci sayısını bulmak için ne kadar zaman gerekiyor onu bulalım.
# install.packages(microbenchmark)
library(microbenchmark)
microbenchmark(fibonacci_rec(20), unit = “ms”)Unit: milliseconds
expr min lq mean median uq max
fibonacci_rec(20) 9.623579 9.992997 11.04975 10.71602 11.58787 19.3283
neval
100
Ortalama olarak 11 saniye sürdü. Şimdi gelin bunu farklı bir yöntemle yazalım. Bu yöntemimizde performansımızı arttırmak için bulduğumuz sayıları kaydedelim. Bu sayede fonksiyonumuz bir kere bulduğu bir 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
fibonacci_seq(20) 0.003203 0.0032645 0.1258763 0.003335 0.0034385
max neval
12.25115 100
Daha etkili bir yöntemle yazdığımız fibonacci serisi algoritması ortalama olarak yalnızca 0.13 saniye sürdü. Farkın kaç kat olduğunu siz hesaplayın :)
R ile ilgili daha fazla içerik ve video dersler için R Programlama ile Veri Bilimi isimli Udemy kursumu inceleyebilirsiniz.