WebByte
Проходящий мимо
Задача хранения и поиска больших объемов данных.
Имеется некая практическая задача, смысл которой в следующем.
Дана числовая последовательность, которая предположительно
может быть номером телефона.
Даны шаблоны, описывающие по каким правилам могут записываться номера
телефонов в различных странах и городах.
Дан XML-файл с описанием некоторых аттрибутов телефонных номеров для той или иной страны/города
Надо для числовой последовательности определить страны и города,
в которых она может являться телефонным номером.
Задача, как понимаете, достаточно ресурсоемкая.
По данным может строиться несколько миллионов шаблонов.
Простым перебором решать - смерти подобно.
Я строил дерево для оптимизации поиска по следующему правилу:
Для каждого нового города строим всевозможные шаблоны согласно правилам.
Общий вид шаблона например такой:
8095\d{7} - возможный шаблон для записи московского номера.
Шаблоны упорядочиваем в общее дерево по следующему принципу.
Верхний элемент - длина шаблона. Элемент второго уровня - первые N цифр шаблона. Элемент третьего уровня - еще несколько цифр.
Число уровней и длияну ключей в принципе можно расчитать на тестах.
Последний элемент - массив вида (шаблон, ссылка на страну, ссылка на город)
Более-менее алгоритм работает, однако, до сих пор не знаю является ли мое решение оптимальным.
Вот и интересно кто чего придумает еще.
Имеется некая практическая задача, смысл которой в следующем.
Дана числовая последовательность, которая предположительно
может быть номером телефона.
Даны шаблоны, описывающие по каким правилам могут записываться номера
телефонов в различных странах и городах.
Дан XML-файл с описанием некоторых аттрибутов телефонных номеров для той или иной страны/города
Надо для числовой последовательности определить страны и города,
в которых она может являться телефонным номером.
Задача, как понимаете, достаточно ресурсоемкая.
По данным может строиться несколько миллионов шаблонов.
Простым перебором решать - смерти подобно.
Я строил дерево для оптимизации поиска по следующему правилу:
Для каждого нового города строим всевозможные шаблоны согласно правилам.
Общий вид шаблона например такой:
8095\d{7} - возможный шаблон для записи московского номера.
Шаблоны упорядочиваем в общее дерево по следующему принципу.
Верхний элемент - длина шаблона. Элемент второго уровня - первые N цифр шаблона. Элемент третьего уровня - еще несколько цифр.
Число уровней и длияну ключей в принципе можно расчитать на тестах.
Последний элемент - массив вида (шаблон, ссылка на страну, ссылка на город)
Более-менее алгоритм работает, однако, до сих пор не знаю является ли мое решение оптимальным.
Вот и интересно кто чего придумает еще.