В интервью мне было предложено создать структуру данных, которая может содержать миллионы шаблонов и позволяет быстро найти их, чтобы найти самый длинный подходящий.Структура данных для большого числа шаблонов
Например, узоры, как:
1- 8876 8893 87 | true
2- 8876 889 | false
3- 8876 8 | false
4- 887 | true
вход представляет собой число, по меньшей мере, 2 и не более 18 цифр, и мы должны найти самый длинный шаблон согласования из структуры данных и извлечь логическое значение в конец.
Например, 8876 8893 9943 53
будет соответствовать 1
и true
. 8876 8397 5430 74
будет соответствовать 3
и false
.
Ответом было использование дерева и наличие пары key value
на каждом уровне. Ключ, являющийся цифрами и значением, является либо нулевым, либо равным логическому в зависимости от того, является ли это концом шаблона или нет. Нравится:
# matching 8875
# start the search by first digit
[..., (7, null), (8, null), (9, null)]
^
[..., (7, null), (8, null), (9, null)]
^
[..., (7, true), (8, null), ...]
# at the last step because we don't have a pattern
# to match the digit 5, we return the `true` from (7, true)
Сложная часть заключается в том, что узоры довольно много. Миллионы из них. Это хорошо? Если нет, то каково ваше предложение.
попробуйте префикс trie – Alex
@Alex, чистый золотой человек. Когда-то одно слово открывает новый мир. Большое спасибо. Я бы даже согласился, чем ответить, если вы хотите опубликовать его. – paytonpy
ОК, я добавлю его в качестве ответа, также чтобы вопрос был «закрыт» принятым ответом. – Alex