Szukam struktury danych dla IPV4. Co powinien przechowywać? Prefiks (baza + maska) -> np 85.23.0.0/16Struktura danych + algorytm do przechowywania plików IPV - skuteczne wyszukiwanie w prefiksach
bazowy = 85.23.0.0 -> 32 nieco unsigned
maski = 16 AKA 255.255.0.0 -> 8 bitów unsigned char
Więc min gospodarz jest 85.23.0.0 i max gospodarz jest 85.23.255.255 (wiem, że powinno być .0.1 i .255.254 w normalnym przypadku, ale chcę, aby go uprościć)
Najważniejsze, że wymaga to prędkość wyszukiwania adresu IP w przechowywanych prefiksach. Na przykład daję niepodpisaną int (32bit) i muszę powiedzieć, czy jest tam, czy nie.
piszę w C++, więc mogę używać STL
Teraz jest on przechowywany w zbiorze STL (parach + maska) i szukam jeden po drugim, więc jest to rodzaj O (n) (Bez to jest prawdopodobnie drzewo BST, więc przechodzenie przez niego może być wolniejsze niż O (n))
Podsumowując: Nie potrzebuję wydajnego sposobu na przechowywanie IPV4, potrzebuję skutecznego sposobu na wyszukanie go w niektórych struktura danych. Struktura danych nie będzie przechowywać portu, rodziny itp. Przechowywany będzie PREFIX (baza + maska).
A ja szukam struktury danych + pewien algorytm wyszukiwania.
Jeśli całkowita liczba prefiksów nie jest zbyt duża, wystarczy zwykłe drzewo binarne, reprezentujące bity o największej i najmniej znaczącej wartości. –
Obawiam się, że muszę zapewnić wydajność nawet dla dużej liczby prefiksów. – user3613919
Czy można przechowywać je jako 64-bitową niepodpisaną int? – Logman