![]() |
#1 |
Ivan Dilber
Sir Write-a-Lot
|
![]() treba mi neka hash funkcija za koji bi vazilo da je H(A,B) = H(B,A), jel postoji tako nesto? Pri tome H() treba da daje (dovoljno) unique brojeve, da nema kolizije kljuceva...
Radi se o tome da imam 2 ID-ja (32-bitni integeri) i da treba da ih povezem u relaciju u bazi, ali mi je redosled ID-ja nebitan (odnosno bitno je da ne zavisi od redosleda).Hocu da izbegnem da moram da stavljam 2 rekorda u bazu, jedan za {A,B} i drugi za {B,A}, nego da imam jedan record oblika { H(A,B) }
__________________
Leadership is the art of getting people to want to do what you know must be done. |
![]() |
![]() |
![]() |
#2 |
I'm a PC too.
Wrote a book
Datum učlanjenja: 05.06.2005
Lokacija: Kanada
Poruke: 1.354
Hvala: 82
130 "Hvala" u 89 poruka
![]() ![]() |
![]() Može li ovako - napravi jednu funkciju GetHash(a,b) i onda je pozivaj:
hash = a < b ? GetHash(a,b) : GetHash(b,a) ![]() Odnosno to raspoređivanje "manji pa veći" možeš da radiš unutar same funkcije.. I tako onda možeš da imaš jedan 64-bitni broj koji je uvek isti za ulaz (a,b) i (b,a) i onda računaš hash za njega. Inače, algoritam za samu hash funkciju bi trebao da nađeš bez većih problema. Ako ne budeš imao uspeha, javi.
__________________
Commercial-Free !!! Poslednja izmena od degojs : 22. 08. 2008. u 17:58. |
![]() |
![]() |
![]() |
#3 |
expert
Grand Master
|
![]() ^ fino
|
![]() |
![]() |
![]() |
#4 |
Python Ambassador
Master
|
![]() Hm, a zašto ne bi koristio:
Kôd:
def my_hash(a, b): return postojeci_hash(napravi_kljuc(min(a, b), max(a, b)))
__________________
Python Ambassador of Serbia |
![]() |
![]() |
![]() |
#5 |
Ivan Dilber
Sir Write-a-Lot
|
![]() da, to sa sortiranjem po redu je i meni palo na pamet, nije lose, jednostavno je, a trebalo bi da sljaka... verovatno cu naprosto da uradim md5 od toga, i to je to..
__________________
Leadership is the art of getting people to want to do what you know must be done. |
![]() |
![]() |
![]() |
#6 |
I'm a PC too.
Wrote a book
Datum učlanjenja: 05.06.2005
Lokacija: Kanada
Poruke: 1.354
Hvala: 82
130 "Hvala" u 89 poruka
![]() ![]() |
![]() Što se hash funkcije tiče.. u stvari, tebi ne mora da bude komplikovana, čini mi se.
Ako budeš probavao ovo što sam ja napisao, onda znači kombinuješ ta dva 32-bitna broja u jedan 64-bitni, pa hash onda jednostavno računaš kao ostatak celobrojnog deljenja. Npr. hash = x % 11; (gde je % simbol koji označava celobrojno deljenje). Što bi obezbedilo da je hash vrednost između 0 i 10. Naravno, ako ti treba više mogućih hash vrednosti, onda samo stavi veći broj. Mada, proveri na netu, ne sećam se sad koje su mane tako jednostavne hash funkcije.
__________________
Commercial-Free !!! |
![]() |
![]() |
![]() |
#7 |
Python Ambassador
Master
|
![]() Kolizija ključeva?
![]()
__________________
Python Ambassador of Serbia |
![]() |
![]() |
![]() |
#8 |
I'm a PC too.
Wrote a book
Datum učlanjenja: 05.06.2005
Lokacija: Kanada
Poruke: 1.354
Hvala: 82
130 "Hvala" u 89 poruka
![]() ![]() |
![]() Petre, ne može namena funkcije da joj bude mana.
Hash funkcije se koriste da bi podatke grupisale, npr. u svrhu bržeg pronalaženja, pa je onda ne samo normalno, nego traženo da određeni broj podataka ima istu hash vrednost. Npr. hash funkcija koja korisnike grupiše prema prvom slovu korisničkog imena. I onda kada čovek ukuca username, mi lepo pogledamo koje je prvo slovo (=hash) i pretraživanje vršimo u tabeli gde smo sačuvali samo korisnike čije korisničko ime počinje sa tim slovom (u bazi, za svako slovo imamo po jednu tabelu). Mana je što podrazumeva da je distribucija elementa u skupu ujednačena, tj. da imamo otpilike jednak broj korisnika za svako (prvo) slovo korisničkog imena (a-z). To bi bila valjda mana i te gore funkcije sa ostatkom celobrojnog deljenja. Osim ako si hteo da se našališ u smislu da je nešto mnogo 2^64 mogućih vrednosti deliti u 11 grupa, onda se razumemo.. ![]() Anyway.. raspričao sam se ![]()
__________________
Commercial-Free !!! Poslednja izmena od degojs : 22. 08. 2008. u 22:47. |
![]() |
![]() |
![]() |
#9 | |
Python Ambassador
Master
|
![]() Citat:
![]()
__________________
Python Ambassador of Serbia |
|
![]() |
![]() |
![]() |
Alati teme | |
Način prikaza | |
|
|
![]() |
||||
Tema | Početna poruka teme | Forum | Odgovori | Poslednja poruka |
Hash (#) u linkovima | IgorHW | Marketing i SEO | 1 | 01. 12. 2010. 12:53 |
google algoritam | Ekvador | Marketing i SEO | 7 | 21. 10. 2010. 22:48 |
Algoritam za generisanje skupova | dejanr | Programiranje | 2 | 26. 05. 2010. 21:30 |
Google malo menjao PR algoritam | Ilija Studen | Marketing i SEO | 43 | 02. 02. 2008. 01:57 |
C/C++ Algoritam: Iz Dekadnog u Hex prenoseci vrednosti... | LiquidBrain | Programiranje | 29 | 22. 03. 2007. 14:56 |