I have encountered an interview question
“Implement a phone directory using Data Structures”
Я хочу, чтобы решить его с помощью tries.By решения его попыток, я попытался с помощью двух попыток, один для имени, а другой для номера телефона, , но я столкнулся с трудностями.
Предположим, я должен добавить три записи (AB "112" BC "124" CD "225") Затем, если я запрашиваю имя для номера «225», как мне вернуть CD. То есть, как эти две попытки будут связаны.Реализовать телефонный справочник с помощью двух попыток
One approach I was thinking was taking two pointers in both the tries.
These pointers will point to the first and last word in the other trie.
For example,if the structures are as follows:
Struct nametrie
{
Struct nametrie *child[26];
struct phonetrie*head,*tail;
struct phonetrie*root;
-----------
}
Struct phonetrie
{
struct phonetrie*child[9];
struct nametrie*head,*tail;
struct nametrie*root;
-----------
}
Then for AB “112”,
Name trie willstore head(1) and tail (2).
Но я думаю, что этот подход не будет работать для повторяющихся записей (одно имя и несколько номеров.)
Can someone please explain a good approach.I am not looking for code but good understanding of approach,may be via diagram or algorithm.
: Для обратного просмотра это не сработает, то есть от номера к имени. Для этого вам нужно создать еще одно trie.If вы включаете поле значения в том же trie, то такое же значение хранится дважды. Один раз в три от корневого до листового узла и в другое время в поле значения во втором trie – KIMchi
@KIMchi Это точно верно. поэтому у вас будет дублирование, но вы получите быстрый доступ к поиску в обоих случаях – Hani
: можно ли это сделать без дублирования? Есть ли какие-нибудь предложения по этому поводу? – KIMchi