Sziasztok!
Nem akarok más topicba belerondítani a kérdésemmel, ha gond lenne az új topic, akkor trey töröld légyszíves!
Nos, van itt egy n alatt k értéket kiszámító metaprogram, aminek működéséről kicsit összekülönböztünk kollégával, így szeretném szakavatottabb ember véleményét kikérni, hogy jó-e az implementáció, mivel szerintem jó:
#include <iostream>
using namespace std;
template<int N, int K>
class NK {
public:
static const int result = (N==K) ? 1 : NK<N-1,K-1>::result + NK<N-1,K>::result;
};
template<int N>
class NK<N, 0> {
public:
static const int result = 1;
};
template<int K>
class NK<0, K> {
public:
static const int result = 0; //0 alatt K nincs ertelmezve, ezert dobunk egy 0-t
};
template<>
class NK<0,0> {
public:
static const int result = 0;
};
int main() {
cout << "10 alatt 3 = " << NK<10, 3>::result << endl;
return 0;
}
- 3448 megtekintés
Hozzászólások
Ez így nagyon durva :-)
Az hogy jól működik szükséges, de nem elégséges feltétele a "jó" megoldásnak.
- A hozzászóláshoz be kell jelentkezni
Nem teljesen, lásd NK<-10, 3>.
- A hozzászóláshoz be kell jelentkezni
való igaz... :(
---
A gyors gondolat többet ér, mint a gyors mozdulat.
- A hozzászóláshoz be kell jelentkezni
Egy par aprosag a binom egyutthatok definiciojahoz:
- 0 alatt a 0 az 1 (es nem 0)
- n alatt a k akkor es csak akkor nulla, ha n<0 vagy k<0 vagy k>n, egyebkent meg mindig pozitiv egesz.
(felteve persze, ha n es k ege'sz: ha nem, akkor is van ertelme a binom. egyutthatoknak, csak az kicsit macerasabb...).
- A hozzászóláshoz be kell jelentkezni
Huh... jo hulye vagyok, pedig vagy 3x levezettem papiron 0 alatt 0-t :DD, a 0 alatt K az szinten "nincs ertelmezve", mert a nevezoben megjelenik egy negativ faktorialis (0-K)! jol tevedek? 0-t adok vissza akkor is, ha nincs ertelmezve, ez igy gaz, de nem tudtam jobbat kitalalni... :/
---
A gyors gondolat többet ér, mint a gyors mozdulat.
- A hozzászóláshoz be kell jelentkezni
hat, ha ugy nezzuk, hogy (n alatt a k) = n! / ( k! * (n-k)! ), marpedig miert ne, es n>=0 es k>=0, es 0!=1, 1!=1, 2!=2, ..., akkor 0 alatt a 0 az 1, nagyon is. Egyebkent meg az altalad is hasznalt azonossagbol, ami ugye teljesen ekvivalens a pascal-haromszog definicojaval, miszerint (n+1 alatt a k+1) = (n alatt a k) + (n alatt a k+1) is odavissza kovetkezik, hogy n<0, k<0 es k>n eseten (n alatt a k) 0 kell, hogy legyen...
szoval az igy pongyola megfogalmazas, hogy "nincs ertelmezve", mert ertelmezik, csak 0 az erteke...
tovabbi info, pl: http://mathworld.wolfram.com/BinomialCoefficient.html, illetve http://mathworld.wolfram.com/GammaFunction.html (ha a tortszamos re'sze is erdekel...)
- A hozzászóláshoz be kell jelentkezni