Для этого можно использовать троичное дерево, но я бы не советовал (это нелегко сделать).
Я думаю, что вы можете использовать два разных подхода:
A., Используйте стандартное Trie вместо троичного дерева, поэтому время поиска будет считаться постоянным, независимо от того, сколько предметов у вас есть в Trie.
Реализация на C # достижима, но имейте в виду, что Три требует среднего / высокого уровня знаний алгоритма.
B., Использовать стандартный отсортированный массив (строка []). Поскольку ваше требование состоит в том, чтобы просто создать автозаполнение на основе префикса, сохраните все ваши слова в строке [] и начните двоичный поиск для этого.
Время поиска не является постоянным, а логарифмическим, но даже если в этом массиве хранятся миллионы слов, каждый поиск может быть измерен за доли миллисекунды (например, если в этом массиве миллион слов, всего 20 операций необходимо найти тот, который вы ищете). Даже если бинарный поиск не был успешным, у вас будет индекс, который является наиболее близким совпадением (но индекс будет отрицательным значением, указывая, что совпадение не было успешным). Итак, в этом массиве:
A
C
D
E
если вы ищете B, вы получите индекс 0, указывающий на A. Если вы начнете повышаться, вы увидите элементы после «B» (или «собака» в вашем примере).
Таким образом, даже если у вас есть полное или частичное совпадение после двоичного поиска, продолжайте перечислять элементы из массива, пока искомое ключевое слово не станет в начале слова словаря.