QHash i jednakowe hashe.

0

Witajcie,

Będę pisał w niedalekiej przyszłości nowy menadżer zasobów bo taki szit co napisałem jak mniej umiałem to szkoda gadać. Zasoby będą odszukiwane przez ścieżkę do pliku. Jeśli użyłbym QMap to wyszukiwanie nie będzie znów tak wolne, ale porównywanie stringów które średnio będą miały 64 znaki czy coś koło tego jest jednak wolniejsze niż porównanie long long int, można szybciej więc myślałem o QHash. Znów nurtuje mnie to, że ścieżki są dosyć długie i jest ryzyko, że kilka ścieżek/dwie będą miały tego samego hasha. Z dokumentacji wiem, że QHash jeśli są takie same hashe to nadpisuje ostatnio dodany albo w przypadku odczytu zwraca iterator na początek "rekordów" z tymi samymi hashami i możemy sobie iterować. Więc wyjściem będzie trzymanie niehashowanego klucza, żeby z tych o takim samym hashu znaleźć ten którego szukamy. I czemu w doc Qt pisze, że QHash ma nieposortowane dane? Więc jak może tak szybko wyszukiwać? Jeśli częste będą sytuacje gdzie różne klucze mają ten sam hash to czy nie lepiej będzie po prostu użycie QMap? Niby na 1 milion rekordów trzeba zrobić 20 "strzałów" w wyszukiwaniu binarnym. Nie wydaje się tak dużo w skali jednego wyszukiwania, ale jeśli GejmEndżin będzie szukał takiego samego zasobu przy dodawaniu nowego, żeby nie wczytywać jednego dwa razy to troche liczenia jest.

2

Ciężko się czyta ten twój strumień świadomości.
Najwyraźniej nie masz pojęcia jak działają kontenery wykorzystujące funkcję hashujące.
Może poczytaj to: https://pl.wikipedia.org/wiki/Tablica_mieszaj%C4%85ca

Może zamiast opisywać swoje rozumienie jakiegoś problemu, opisz w prostych (nie złożonych) zdaniach co chcesz osiągnąć? Jaką funkcjonalność chcesz napisać?

2
  1. http://doc.qt.io/qt-5/containers.html#algorithmic-complexity ?
  2. Który to już rok twojej nauki? Serio nigdy nie słyszałeś o takich rzeczach jak tablice hashujące i drzewa binarne? o_O
    QMap to mapa oparta o drzewo binarne. Dane są przez to posortowane a wyszukiwanie w drzewie odbywa się w czasie O(logn).
    QHash to mapa oparta o tablice hashującą. Dane są nieposortowane a średni czas wyszukiwania to O(1), przy czym pesymistyczny czas to O(n). Jak to się dzieje? Ot masz tablicę na 100 elementów. Wrzucasz sobie tam jakieś wartości a kluczem jest powiedzmy string. Wrzucenie polega na: wyliczeniu hasha na podstawie tego stringa (czyli dostajemy liczbę) a następnie robimy hash%100 i voila, mamy indeks w tablicy gdzie wpisujemy dane. Jeśli juz coś tam siedzi to robimy tam listę elementów o tym samym hashu. W efekcie możesz wyszukać element "od razu", ale pesymistycznie wiele elementów moze mieć ten sam hash.
  3. Nie umiesz czytać. Dokumentacja mówi że QHash zastąpi w mapie element jeśli KLUCZ jest taki sam a nie hash klucza!

1 użytkowników online, w tym zalogowanych: 0, gości: 1