Mam aplet Java, w którym chcę wygenerować identyfikatory long
dla ciągów (w celu przechowywania tych ciągów w neo4j). Aby uniknąć duplikowania danych, chciałbym wygenerować identyfikator dla każdego ciągu zapisanego w liczbie całkowitej long
, która powinna być unikalna dla każdego ciągu. Jak mogę to zrobić ?Jak mogę wygenerować długi skrót łańcucha?
Odpowiedz
long
ma 64 bity. A String
o długości 9 ma 72 bity. od pigeon hole principle - nie można uzyskać unikalnego skrótu dla 9 znaków długich łańcuchów do long
.
Jeśli nadal chcesz long
hash: Można po prostu wziąć dwa standardowe [różne!] Funkcje skrótu dla String->int
, hash1()
i hash2()
i obliczyć: hash(s) = 2^32* hash1(s) + hash2(s)
Dlaczego nie rzucić okiem funkcji hashcode()
String, a po prostu przyjąć go do używania długich wartości zamiast?
Przy okazji. gdyby istniał sposób na stworzenie unikalnego identyfikatora dla każdego Łańcucha, to znalazłbyś algorytm kompresji, który byłby w stanie spakować każdy Ciąg na 8 bajtów (nie jest to możliwe z definicji).
Istnieje wiele odpowiedzi, spróbuj wykonać następujące czynności:
http://stackoverflow.com/questions/415953/generate-md5-hash-in-javaEDIT: usunięto, Tęskniłam wymaganielong
. Mea culpa.- http://en.wikipedia.org/wiki/Perfect_hash_function
Albo, jak sugerował wcześniej, sprawdź źródła.
PS. Jeszcze jedną techniką jest utrzymywanie słownika ciągów znaków: ponieważ mało prawdopodobne jest, że otrzymasz w przyszłości 2 ciągi, możesz mieć doskonałe odwzorowanie. Należy jednak pamiętać, że mapowanie może również stać się poważnym wąskim gardłem.
Ten kod obliczy całkiem dobry hash:
String s = "some string";
long hash = UUID.nameUUIDFromBytes(s.getBytes()).getMostSignificantBits();
- 1. Prosty skrót MD5 łańcucha znaków
- 2. Jak wygenerować unikatowy skrót dla adresu URL?
- 3. Jak wygenerować skrót pliku MD5 w javascript?
- 4. Jak wygenerować numer skrótu łańcucha w Go?
- 5. W języku Ruby, jak wygenerować długi ciąg powtarzanego tekstu?
- 6. Jak mogę wygenerować plik tsconfig.json?
- 7. Jak mogę wygenerować plik .pfx?
- 8. Jak mogę wygenerować Dynamic JavaScript?
- 9. Jak wygenerować unikatowy równy skrót dla równych słowników?
- 10. Jak wygenerować kolumnę DataFrame pandy klasy Categorical z kolumny łańcucha?
- 11. Phonegap - Jak wygenerować plik obrazu z łańcucha base64?
- 12. Jak wygenerować AST z łańcucha C++ za pomocą Clang?
- 13. modinfo srcversion: Jak mogę to wygenerować z mojego źródła?
- 14. Jak dopasować długi tytuł?
- 15. Jak wygenerować macierz kombinacji
- 16. Jak mogę wygenerować bitmapę z formantu WinForm?
- 17. Jak mogę wygenerować identyfikator GUID w Vimie?
- 18. Jak mogę wygenerować ObjectId z mangustą?
- 19. Jak mogę wygenerować indeks PDF z pdfLaTeX?
- 20. Jak mogę wygenerować obrazy GIF w .NET?
- 21. Jak mogę wygenerować dokumenty HTML używając `godoc`?
- 22. Jak odtwarzasz długi AudioClip?
- 23. Jak mogę podzielić ciąg z ogranicznikiem łańcucha?
- 24. Jak mogę uzyskać wysokość daszka danego łańcucha?
- 25. Czy mogę zamienić długi na int?
- 26. Jak wstawić długi tekst?
- 27. Jak mogę efektywnie próbować długi okres w Splunk?
- 28. unsigned długi długi konflikt z uint64_t?
- 29. log4j: Skrót/Skrót nazwy pakietów
- 30. Dopasowanie do łańcucha Regex?
Nie możesz po prostu uzyskać skrótu z ciągów i rzucić je na długo przed przechowywanie w neo? – Marthin
Nie można osiągnąć "unikatowego dla wszystkich ciągów" - długie ma 64 bity, ciąg o długości 9 ma 72 bity, muszą istnieć pewne łańcuchy, które będą mieszane do tego samego długiego – amit
Nie można uzyskać wyjątkowości, ponieważ istnieją nieskończenie wiele strun i tylko skończenie wiele długich. Czy możesz dokładniej opisać, czego szukasz? – templatetypedef