Сегодня я посетил письменный тест, проведенный компанией. Общий тест был сосредоточен на структурах данных. У меня возникла проблема, которую я думал, что решил. Но мне было нелегко вычислить функцию Big O для структуры данных. Я предоставлю вопрос и ответ, который я придумал.
Учитывая документ, который вам нужно сохранить, и слова в документе, и вы должны иметь возможность возвращать счет при вводе любого слова. Вам предоставляется
char* GetNextWord()
.
- Какую структуру данных вы выберете
- Дайте алгоритм
- Каков будет порядок вашего алгоритма
На вопрос 1 я написал, что выберу структуру данных TRIE. На вопрос 2 я дал краткий алгоритм. Я написал, что построю структуру данных TRIE следующим образом.
struct TRIE{
boolean isWord;
int count;
Node* myList;
}
struct Node{
char* character;
Node *next;
TRIE *child;
}
У меня есть методы constructTrie()
, которые будут выполнять addToTrie()
для каждого слова.
Я написал, что порядок addToTrie()
будет O(k), где k — длина. И порядок constructTrie()
будет N*O(k), где N — количество слов.
Теперь мой вопрос таков: верны ли приказы, которые я упомянул, или нет? Если нет, то как бороться с подобными проблемами в будущем (учитывая, что ds находит порядок). Я очень запутался после использования O(k). Это заставляет меня предположить O (1).
Подсказки/Советы/Советы широко открыты!
Изменить: исправлен вопрос, четко указав, что количество слов должно храниться для всех уникальных слов.
TRIE
? - person kennytm   schedule 27.02.2010