(используя ABCDE для простоты представления китайских иероглифов)
Допустим, у вас есть предложение 'предложение' ABCDE , и ваш словарь содержит эти слова, которые начинаются с A : AB , ABC , AC , AE и ABB . И предположим, что слово CDE существует, но DE и E нет.
При разборе входного предложения, идущего слева направо, скрипт извлекает первый символ A . Вместо того, чтобы запрашивать базу данных, чтобы узнать, является ли A словом, запросите базу данных, чтобы получить все слова, которые начинаются с A .
Переберите эти результаты, выбрав следующие несколько символов из входной строки, чтобы получить правильное сравнение:
AB ?= AB : True
ABC ?= ABC: True
AC ?= AB : False
AE ?= AB : False
ABB ?= ABC: False
В этот момент программа разветвляет две «истинные» ветви, которые она нашла. В первом случае предполагается, что AB является первым словом, и пытается найти слова, начинающиеся с C . CDE найдено, так что ветвление возможно. Вниз по другой ветви, ABC - первое слово, но DE невозможно, так что ветвь недопустима, то есть первая должна быть истинной интерпретацией.
Я думаю, что этот метод минимизировал количество обращений к базе данных (хотя он может возвращать большие наборы из базы данных, так как вы выбираете наборы слов, начинающиеся с одного и того же символа). Если бы ваша база данных была проиндексирована для такого рода поиска, я думаю, что это сработало бы лучше, чем проходить по буквам. Глядя на весь этот процесс сейчас и другие ответы, я думаю, что это на самом деле структура три (если предположить, что искомый символ является корнем дерева), как предложил другой автор. Что ж, вот реализация этой идеи!