Алфавитный поиск с телефонной клавиатуры
Я реализую алфавитный поиск на основе телефонной клавиатуры, как клавиатура телефона 1
Когда пользователь печатает, скажем, 2, я получаю {A, B, C} в комбинации. Когда пользователь вводит 23, я получаю {AD, AE, AF, BD, BE, BF, CD, CE, CF} в комбинациях и так далее. Если я продолжаю печатать и создавать комбинации, я получаю тысячи комбинаций, которые делают процесс поиска довольно медленным. Итак, теперь я хочу реализовать алгоритм, который удаляет нелогичные комбинации, такие как CF BD CD, я имею в виду, что логически никто не начинается с этих комбинаций, возможно, два согласных без гласной. Таким образом, я хочу сузить свой поиск. Кто-нибудь знает о таком автомате, реализованном на C?
2 ответа
Имейте в виду, что когда речь идет о лингвистических данных, "нелогичные" не являются хорошим показателем для "маловероятных". Это особенно верно, когда дело доходит до имен. Например, согласно стандартному определению "согласная" на английском языке, моя фамилия начинается с четырех согласных. Если бы это было написано по немецкой моде, оно начиналось бы с пяти. Размышляя о таких вопросах, полезно иметь в виду, что:
- Звуки не являются буквами, а буквы не являются звуками: в большинстве орфографических систем отображение букв в звуки не 1:1
- Многие языки имеют неожиданные слоговые ядра: например, Тамазайт Бербер допускает слоги там, где звучат
m
играет роль ядра слогового слога, как гласные обычно делают на английском языке. Так что берберское имя может выглядетьCCmC
(где C означает согласные) и быть идеальным в этом языке. Маловероятно, что человек берберского происхождения тогда использовал бы подобную орфографию на английском языке, которую наивная система исключила бы как "нелогичная" - Наконец, многие системы написания иностранных имен и слов на английском языке используют диграфы или триграфы (двухбуквенные и трехбуквенные комбинации) для представления звуков иностранного языка на английском языке: это может создавать то, что выглядит как незаконные согласные кластеры. Мы знаем, что английский делает это (
sh
представляет один звук, см. пункт 1), но это особенно верно при расшифровке иностранных слов.
Поэтому, если вы не очень хорошо знаете правила написания имен, которые вы ожидаете, вы, скорее всего, исключите законные имена, используя наивную систему.
Вы можете создать три действительных префикса на основе набора данных, который вы ищете. Сопоставить частичные входные данные с этим должно быть довольно легко.