Pascal'ın üçgen değerlerini hesaplamak için özyinelemeli bir işlev geliştirdim.Pascal Üçgen Yinelemeli Program optimizasyonu C++
Bunu optimize etmenin bir yolu var mı?
Pascal üçgeni hakkında kısa bir hatırlatma: C (n, k) = C (n-1, k-1) + C (n-1, k) My kodudur:
int Pascal(int n, int k) {
if (k == 0) return 1;
if (n == 0) return 0;
return Pascal(n - 1, k - 1) + Pascal(n - 1, k);
}
verimsizlik Görüyorum ki, bazı değerleri iki kez depolar. Örnek: ° C (6,2) = C (5,1) + C (5,2) ° C (6,2) = C (4,0) + C (4,1) + C (4, 1) + C (4,2) , C (4,1) iki kere
'u arayacaktır. Bu işlevi nasıl optimize edeceğinize dair bir fikriniz var mı?
Teşekkür
bu yerine veri yapısı gibi bir "tablo" içinde bunları saklamak gerekir bu değerleri recomputing sonra yerine yeniden çalıştırmadan arasında yineleme sizin gören ile klasik bir sorun olduğunu düşünüyorum işlev masada görünüyorsun. Tam olarak tanımladığınız şey, işlevi aynı değerle çağırmanın üst üste binmesi işlem süresi kaybıdır (klasik proc time/memory trade off). Bunun için doğru bir çözümüm yok ama kesinlikle doğru fikre sahipsiniz. – shaunhusain
Bir minör optimizasyon n == k olduğunda 1 değerini döndürmektir, bu, hızı O'dan (O (Toplam (C (n, i) i için 0'dan k'ye)) '' '' O (C (n, k) 'den artıracaktır.) '. – Neil
@shaunhusain teşekkürler, biraz hafıza ayıracağım! @Neil de iyi fikir. – JohnG