[ osmania @ 05.05.2008. 21:21 ] @
Treba mi pomoc, radim algoritam extendible hashing. I sada zapeo sam na jednoj funkciji. Treba mi funkcija da pretvori broj (decimalni) u binarni broj pa da uzmem zadnjih onoliko koliko mi treba i te zadnje bitove da ponovo prebacim u decimalni broj. primjer: 9 = 1001 izimam zadnje 2 cifre to jest 01 i pretvaram u decimalan i to je broj 1 ovo je code koji sam uradio(radi kako treba) i profa nije zadovoljan jer treba sto manje da uzima vremena, mislim da je problem for petlja int tiefe, je int broj i od njega zavisi koliko cu da uzimam zadnjih cifara od binarnog broja. ako je tiefe=2 onda od 1001 uzimam zadnje dvije cifre tj. 01 i tako dalje ako je tiefe=1 onda uzimam samo zadnju cifru od 1001 tj uzimam broj 1. unsigned long int key=keys.hashValue()*2 ovo je funkcija kojom ja dobivam broj koji trebam da pretvorim u binaran pa njegov dio binarnog pretvorim u decimalan profa je nesto spominjao da bi moglo kao modulo da se radi nisam ga skontao. ako vi poznajete nesto jednostavnije molio bih da mi pomognete hvala puno... Code: int ContainerImpl::hashf (Key keys) const { // ovako se zove funkcija koju cu pozvati kasnije negdje u zadatku (da ne buni) [b]ovaj dio pretvara u binaran[/b] std::vector <bool> t (tiefe); int j=1 ; unsigned long int key=keys.hashValue()*2; for (int i=tiefe-1;i>=0;--i,++j) t[i]=(key>>j)&1?1:0; [b]ovaj ispod dio pretvara u decimalan [/b] int u=1,o=0; for (int i=1;i<tiefe;++i) { int j=i; if(t[i]) { while (i){ u*=2; --i; } o+=u; i=j; u=1; } } if(t[0]) ++o; return o; } hvala puno |