[MD-sorular] matematik ve algoritma

Burak Yücesoy burakyucesoy at gmail.com
13 Kas 2008 Per 20:55:08 EET


recursive bir algoritma kullanmalısın. Örnek üzerinde anlatmak gerekirse;

Bir grupta en fazla elemanı bulunan bütünün eleman sayısı gruba adını versin.
Ör:
** * *  (2 grubu)
*** *** (3 grubu)


p(6) yı şu şekilde gruplar ayırıyorum

6 grupları:
******
5 grupları:
***** *
4 grupları:
**** **
**** * *
3 grupları:
*** ***
*** ** *
*** * * *
2 grupları:
** ** **
** ** * *
** * * *
1 grupları:
* * * * * *

fonsiyonda p(0) ı ve p(1) i 1 olarak tanımladıyorum. Daha sonra

p(6)  nın 6 grupları için: p(6-6) {kalan 0 elemanı parçalıyorum}
p(6)  nın 5 grupları için: p(6-5) {kalan 1 elemanı parçalıyorum}
p(6)  nın 4 grupları için: p(6-4) {kalan 2 elemanı parçalıyorum}
p(n)  nın r grupları için: p(n-r) {kalan (n-r) elemanı parçalıyorum}
...

şeklinde. Burada unutmamamız gereken r nin o gruptaki max elemanlı
bütünün adı olduğu. Yani n-r nin r den büyük olduğu durumlarda r den
büyük elemanlı gruplar üretilebilinir. Buda hesabın fazla çıkmasına
sebep olacaktır. Mesela;

p(6) nın 2 li grupları için p(4) ü hesaplamak yanlıştır. Böyle
durumlarda o 4 ü de 2 ve 2 den küçük parçalara ayırarak işlem yapmak
gerekir.


MD-sorular mesaj listesiyle ilgili daha fazla bilgi