понедельник, 17 мая 2010 г.

Раскладка для телефона

Прочитал статью "Улучшенная раскладка для телефона", задумался...

Основная проблема не T9 режима - это подряд идущие символы, которые приходятся на одну клавишу. Необходимо выжидать, чтобы текущий символ зафиксировался, чтобы можно было начать набирать новый.

И тут меня осенило...

Надо расположить буквы в соответствии с порядком их использования в словах!

Возьмем для примера "Войну и мир", соберем статистику по буквам вообще и по рядом стоящим буквам. Нам не важно, какая буква идет раньше, а какая позже. Просто, если стоят рядом - они образуют пару, которую лучше располагать на разных клавишах телефона.

Самые популярные буквы должны располагаться на первых позициях, это правило вступает в некоторый конфликт с правилом парности. Наиболее популярные в русском языке буквы - оаеи (именно в таком порядке). Их стоило бы поставить на первые позиции, если бы не тот факт что совместно они используются крайне редко. Но это требует проверочки.

Для начала стоит попробовать расположить буквы по популярности а комбинировать по редкости:
тмхщ ауц срчъ
игж  оьы  нпш
лдзф еяю вкбэ
     _,.?
Выглядит конечно жестко. :)
Да еще й и ё забыл.

А если попробовать выбрать оптимальные варианты по парности...

Для проверки мы возьмем словарь и будем проверять количество букв, которые попадают на одну и ту же кнопку.

Целый выходные мой компьютер в 4 ядра выбирал оптимальную раскладку, так и не довыбирал до конца, но я думаю что она близка к оптимальной. Вот она:
дбх  рмчз вкэф
еиуъ оаьы нпжц
сгшщ  тлё  яйю

Стандартная раскладка с моего телефона дает 20% из ~160000 слов, которые можно набрать без пауз.
Оптимизированная раскладка дает 72% слов, буквы в которых не пересекаются по кнопкам.

Можно конечно посчитать среднее количество нажатий на кнопки, но помоему это неинтересная характеристика.

Давайте лучше прикинем какое количество слов приходится на одну комбинацию кнопок T9? Но тут что-то странное получается. Среднее количество слов на комбинацию клавиш получается близким к 1, причем для моей супероптимальной раскладки больше, чем для стандартной. Может быть стоит оценить среднее число из некоторого количества максимальных комбинаций?

Всеравно что-то странное получается. стандартная раскладка дает 94% уникальных комбинаций, в то время как моя, оптимизированная на уникальность, - всего лишь 91%... Подозрительно...

PS: Проблему с T9 я потом еще обдумаю, пока стоит отложить эту ерунду... Чем я вообще занимаюсь?

PPS: Еще подумал что вот железнодорожники раскрасили свои поезда в разные цвета, хотя для них это совершенно бесполезно, в то время как в метро все поезда одного цвета, хотя раскрасить поезда по цвету линий - было бы крайне полезно ИМХО. :)

2 коммент.:

Анонимный комментирует...

Череззаборногузадерищенко с одной паузой, Эйяфьятлайокудль с двумя - неплохо против 5и и 1 у обычной раскладки на моём сониэриксоне. Но seek time просто зашкаливает.

Но давайте займёмся главным вопросом - на каком языке программа перебора и почему не common lisp? :D

Андрей Валяев комментирует...

Эту раскладку надо выучить наизусть :D

Скриптовал на питооне.

Вообще надо сказать что со всякими алгоритмами я не очень дружу.

Благо в питоне есть библиотека, которую надо просто найти. itertools.permutations рулит.

Правда пока так и не сообразил как оценить эффективность T9, что-то у меня некорректные результаты получились. :)

За ночь он нашел еще более эффективную раскладку, почти 74% слов без пауз.

В плане сиктайма вспоминается кривая обучения emacs... :)

Один раз выучил раскладку, а потом пишешь быстрее всех. :D