Как эффективно проверить если два символа являются соседями на клавиатуре?

Я хочу разработать программную клавиатуру для Android, и у меня уже есть алгоритм автозамены, который ch делает предложения, основанные на том, что вводимый символ и символ слова из словаря являются соседями на клавиатуре. Это работает в сочетании с алгоритмом Левенштейна (если символ должен быть заменен другим символом, проверяется, являются ли они соседями). Вот почему эта проверка вызывается очень часто. В настоящее время он занимает 50% времени, затрачиваемого на автокоррекцию.

Мой текущий подход - это отдельное дерево с 3 уровнями. Первый слой: первый персонаж. Второй уровень: второй символ: Третий уровень: логическое значение, содержащее информацию, если символы являются соседями. Но я боюсь, что это перебор? Хэш-карты стажеров для каждого ребенка тоже могут замедлить его? Должен ли я создать хэш-карту с собственной функцией charToNumber?

Как бы вы это сделали? Каких узких мест можно избежать? Character.toLowerCase () также кажется неэффективным, когда он вызывается каждый раз при выполнении проверки.

Надеюсь, вы поможете мне ускорить задачу :)

8
задан Philipp 16 August 2011 в 13:48
поделиться