Логотип YeaHub

База вопросов

Собеседования

Тренажёр

База ресурсов

Обучение

Навыки

Задачи

Войти

Выбери, каким будет IT завтра — вместе c нами!

YeaHub — это полностью открытый проект, призванный объединить и улучшить IT-сферу. Наш исходный код доступен для просмотра на GitHub. Дизайн проекта также открыт для ознакомления в Figma.

© 2026 YeaHub

AI info

Карта сайта

Документы

Медиа

Назад
Вопрос про Golang: trie, radix

Какие структуры данных можно использовать для хранения IP-подсетей (например, префиксное дерево)?

Вопрос проверяет знание структур данных для быстрого поиска по префиксам и диапазонам.

Короткий ответ

Для хранения подсетей используют префиксные деревья (trie или radix tree), а также структуры диапазонов, например interval tree. Префиксное дерево эффективно для поиска по CIDR, потому что IP-адрес — это последовательность битов. Такие структуры позволяют выполнять поиск за время, близкое к длине ключа. Они применяются в маршрутизаторах и сетевых фильтрах.

Длинный ответ

Когда подсетей мало, можно просто хранить список и проверять по очереди. Но при тысячах и миллионах записей нужен более эффективный подход.

Основные структуры данных

1) Префиксное дерево (Trie)

Идея:

  1. IP рассматривается как последовательность битов

  2. каждый уровень дерева соответствует одному биту

  3. подсети хранятся в узлах

Преимущества:

  1. быстрый поиск

  2. естественная поддержка CIDR

  3. predictable время работы

Недостаток — большой расход памяти.

2) Radix tree

Оптимизированный вариант trie:

  1. сжатие цепочек узлов

  2. меньше памяти

  3. быстрее на практике

Поэтому в реальных системах часто используют именно radix tree.

3) Interval tree или диапазоны

Подсеть можно представить как диапазон:

start_ip - end_ip

И хранить диапазоны:

  1. быстро искать пересечения

  2. эффективно хранить большие диапазоны

Но сложнее работать с префиксной логикой.

Где это используется

Такие структуры применяются:

  1. маршрутизаторы

  2. firewall

  3. CDN

  4. балансировщики

Вывод

Для хранения подсетей чаще всего используют trie или radix tree, поскольку они хорошо соответствуют префиксной природе IP-адресов и позволяют быстро выполнять поиск.

  • Аватар

    Golang Guru

    Maxim Lukyanov

    Guru – это эксперты YeaHub, которые помогают развивать комьюнити.

Уровень

  • Рейтинг:

    4

  • Сложность:

    8

Навыки

  • Golang

    Golang

Ключевые слова

#trie

#radix

Подпишись на Golang Developer в телеграм

  • Аватар

    Golang Guru

    Maxim Lukyanov

    Guru – это эксперты YeaHub, которые помогают развивать комьюнити.