Beregning af hashcode/id for roterede arrays

Tags:    diverse

Jeg har prøvet at lave en hashcode funktion i Java til at kunne beregne om 2 arrays er ens, evt. roteret og med tal byttet om.

Fold kodeboks ind/udKode 


Disse 5 arrays er alle ens. Nummer 2, 3 og 4 er blot nummer 1 der er roteret. Og nummer 5 er nummer 1, hvor alle forekomster af 1 og 2 er byttet om.

Meningen er så at jeg får et array som input, beregner dets hashcode, og tjekke om det findes i en Hashmap med arrays.

Jeg kan nemt tjekke det femte array og lignende, ved simpelthen at bytte om på alle tallene således at den øverste linje er 1234, og så har jeg array 1.

Men mit problem ligger i at beregne en hashcode så alle 4 rotationer af et array vil give mig den samme hashcode. Og jeg foretrækker også hvis det er muligt med en hashcode der giver samme hashcode for det femte array, således at jeg ikke behøver at bytte om på tal.

Jeg vil jo umiddelbart mene at det godt kan lade sig gøre, da det jo bare drejer sig om mønster genkendelse. Men jeg kan ikke finde en funktion, der giver samme hashcode beregnet ud fra tallene i mine arrays.



1 svar postet i denne tråd vises herunder
1 indlæg har modtaget i alt 2 karma
Sorter efter stemmer Sorter efter dato
Du kan ikke umiddelbart sammenligne tallene som de er i det array. Integer 21 har jo ikke samme hashCode som Integer 12. Du bliver nødt til at splitte dine tal op i cifre og summere disse.

Problemet er, at hashCode på Integers ikke giver meget mening, da hashCode er lige med tallet. Derfor vil 1234 være det samme som 2233, når de er splittet op. Men hvis det kan bruges, kan du gøre de på følgende måder:

Hvis det lige skal være hurtigt at programmere, kan du samle de fire tal til en String, hvorefter du får et byte array med getBytes(). Derefter er det nemt at summere summen (hashCode) af cifrene.

Hvis det skal være effektivt, bør du nok bruge % til at isolere hvert ciffer.



t