← Back to topics
Topic

[z-pesak]

r
robi_petranovic
Napravio sam jednostavnu hash funkciju koja za 10 random generiranih primjera sa N=1000000 ne baca ni jednu koliziju... takodjer moji test primjeri rade dobro.... pa bih molio admina bilokoji test primjer sa zadatka da vidim u cemu je stvar
A
Amtrix
Probaj samo da razlikujes komande prema trecem znaku. Jer nesto neradi kada se pregledava cijela komanda od jednom. Barem sam taj problem ja imao...
m
msantl
mislim da je problem u naredbi "Ostajem na ovom polju" jer ti ona (za ulaz jednog stringa) zauzme zapravo tri, pa onda ako naides na "Ostajem" samo stavi da unese jos 3 stringa ili s kim vec radis
D
Daniel93
Neslazem se s tobom. Get.line ucitava cijelu recenicu sto bi trebalo biti ok, ja sam koristio gets sto je isto. A inace se slazem sa Amtrixom,, kod mene je bio isti problem. Nemoj porediti stringove vec tii je dovoljno samo jedno slovo, to je i bila kod mene greska.
m
msantl
neznam kako je tko unosio, samo sam rekao da sam ja to pogrešno napisao, iako mi je još uvijek nije prošao :P
D
Daniel93
Bas gledam tvoj kod, pa evo i tebi mala pomoc. U hash funkciji uzmi veci broj mislim da bi 1000000 trebao biti dovoljno. Znaci bit ce Hash(x,y)=(x*1000000)+y:Ako i dalje neradi javi...
m
msantl
neznam da li radi ispravno jer za svaki test primjer prekorači memorijsku granicu ....
D
Daniel93
Prvo ispravi ovo, else {scanf("%s%s%s");}. Ti tu trebas u necemu unijeti te stringove. Deklariraj jedan string pa u njega unosi otprilike ovako: else scanf("%s%s%s",&tmp,&tmp,&tmp);. Ako i dalje ne radi javi...
m
msantl
sad je sve pogrešno rješenje
m
msantl
našao sam grešku i sad radi, hvala
D
Daniel93
Ok, sad ovdje u ovoj petlji gdje provjeravas.

for(x=0;x<n;++x){
if(v[x]==v[x+1])tx++;
else{if(ty<tx){ty=tx; tx=1;}}
}
Ti ovdje "tx" postavljas samo na 1 ako ti je tx veci od ty. a sta ako je manji? Znaci kad vise nisu isti onda u bilo kom slucaju moras postaviti na 1.
D
Daniel93
u meduvremenu ti uradio,,,,,
r
robi_petranovic
hvala na pomoci dosada...
ispravio sam da gleda samo 3. znak ulaza a ne cijeli string i imam 13/20... Jos uvijek ne mogu nac gresku. Koristim ove 2 funkcije:

inline long long int aabs (const long long int &a) { return (a < 0) ? -a * 11301 : a; }

inline int hashit (const int &a, const int &b) { return aabs (a*14698713+b*1737371) % 1000000; }
m
msantl
ja nisam radio funkcije , nego sam samo kad sam prepozano kretnju, uvećao x ili y koordinatu i onda samo u nastavku zapisao u vector, npr v[x]=11301*x+y;.
A
Amtrix
robi_petranovic:
mislim da je greska kod tebe sto se moze destiti da dvije razlicite coord imaju istu HASH vrijednost probaj da HASH pamtis redom u nizu odnosno:

int keys[100000]; // ovdje cuvamo rezultate HASHA
int size=0;

i onda ovako dodavaj vrijednoste u tom nizu:

keys[size++]= HASH(x,y) // sa time neces trebati raditi modulo u hashu,
na kraju jedino sto trebas uraditi je
sort (keys,keys+size)

I zatim napravis brojac i izracunas koja se vrijednost najvise javlja u tom nizu.
D
Daniel93
Da, nemoj sebi bezveze komplikovati zivot. Dovoljna ti je jedna Hash funkcija, za npr. hash(x,y)=x*1000000+y.
I u nizu pamtis rezultate. Onda sortiras niz kao sto je Amtrix vec rekao i vidis koliko ima najvise slicnih u tom nizu. To ti je onda rezultat..
r
robi_petranovic
hvala svima na pomoci.... uspio sam rjesiti zadatak ;)
v
vasja
Ja sam koristio map<> ali je presporo , prolazi samo na 9 primera. Gde ima tutorial za hash funkcije ili hash nesto?:D
m
mbalunovic
recimo



long long hash ( int x, int y ) {return x*1003+y;}

keys[100000];


u keys spremas hashirana polja i na kraju sortiras, te redom pregledavas...


v
vasja
Nisam bas razumeo... Sve sto znam za hash jeste da ubrzava trazenje elemenata. Treba mi tutorial. Odakle si ti ili ostali naucili hashing?
D
Daniel93
Hash ti je malo opsirniji pojam, a u sustini ti je dodjeljivanje nekih jednistvenih vrijednosti da bi ti olaksalo neke stvari. Ima tu dosta stvari. Probaj na netu naci kakav tutorial o tome, ili kupi sebi kakvu dobru knjigu za algoritme.
m
mbalunovic
probaj

http://en.wikipedia.org/wiki/Hash_function
W
WindListener
E legende ste, sta bih ja bez vas... HASH je strava...=)