Если вы используете этот набор для хранения IP-адресов в качестве элементов фиксированной длины, то это определенно не правильный путь. Дело в том, что PT особенно полезен для хранения данных переменной длины.
Если вы храните части IP-номеров в качестве префиксов переменной длины, то PT - хороший выбор.
В этом случае ваши ключи должны быть разной длины.
Допустим, вы храните префикс «192.168» в двоичном формате 0xC0 0xA8, вы добавляете его в качестве первого ключа.
Затем при поиске IP-адреса, например 192.168.1.1, вы можете получить информацию о том, что ваш файл содержит 192.168, что является префиксом того, что вы ищете.
Все, что вам нужно сделать, это сохранить «общую часть» при обходе дерева.
Это небольшое дополнение к реализации this . Просто убедитесь, что при переходе вниз по дереву вы сохраняете общую часть где-то в параметрах рекурсивной функции.
Для хорошего понимания Patricia trie я бы предложил прочитать книгу Алгоритмов Роберта Седжвика , которая является отличным источником знаний.
РЕДАКТИРОВАТЬ : Существует одна проблема при хранении C-строк в PT. Этот три предназначен для хранения двоичных данных, но вы заинтересованы только в получении целых байтов.
Убедитесь, что вы храните общую часть префикса, только если его размер в битах кратен 8.
Для неправильного примера: у вас есть ключ в вашем дереве: 0xC0 0xA5, и вы ищете 0xC0 0xA6.
Ваш обход прекратится, когда общая часть "0xC0 0xA", но вы заинтересованы в принятии только "0xC0". Поэтому убедитесь, что храните общие байты, а не биты.