php — Как составить предложение из букв, введенных пользователем?
Вопрос задан
Изменён 7 лет 1 месяц назад
Просмотрен 8k раз
На вход программе подаётся набор английских букв. Имеется словарь из слов.
Как сгенерировать такие предложения из слов, чтобы каждое из предложений состояло только из тех букв, что были поданы на вход, учитывая количество повторений.
Пример
Входящий набор символов: hellomyfriend
Вывод программы:
Feed Hilly Morn Feed Hilly Norm Feed Horny Mill Freehold Nil My Refilled Hon My Defiler Hymn Lo и т.д.
Выбрать слова которые удовлетворяют входному набору символов у меня получилось. А вот быстро составлять из них предложения не получается.
Я делал методом перебора всех слов. Для фразы myfavoritegame скрипт отрабатывал около 5 минут. На сайте предложения отдаются мгновенно.
Можете что-нибудь посоветовать?
- php
- алгоритм
- математика
- поиск
8
Предположим, вам нужно просто найти все возможные комбинации слов из данного словаря, удовлетворяющие условию. Не отвлекаясь на особенности именно языка.
Важно для поиска:
- наличие букв в слове. Исключаем содержащие буквы вне заданных. Исключаем, по мере составления фразы, уже использованные.
- считаем буквы. В любой момент составления фразы известно, слова какой длины подходят, или точно не подходят.
- повторы букв.
Не важно:
- порядок букв в словарном слове.
- смысл слова.
Для скорости нужно сделать поиск по важным признакам максимально быстрым, при необходимости убрав неважные аспекты.
Для быстрого нахождения слов с подходящим набором букв, но без учёта повторов, можно сделать битный индекс, как предложил @Mirdin: 26 букв английского алфавита = 26 бит. Пронумеровать слова в словаре (или просто индексом считать номер строки) и составить отдельный индекс в две колонки: id слова — битовая маска имеющихся букв. Для словаря меньше 65 тыс. слов, такой индекс будет «весить» 6 байт на слово, менее 400k. Можно держать в оперативной памяти для почти-мгновенного поиска. Так можно быстро найти например, первое слово фразы – просто, чтобы точно были выключены биты «лишних» букв.
Стоит сделать копию словаря, где буквы слова отсортированы по алфавиту, и слова отсортированы по алфавиту. Т.е. опять отдельный индекс: сортированные_буквы - id_слова. Этот индекс будет тяжелее самого словаря на (число слов * 2 или 3 байта). В этом индексе можно быстро находить подходящие слова и отбрасывать точно-неподходящие.
Алгоритм примерно такой. Ищем первое слово.
Хочется найти первое же слово наибольшей возможной длины. Перебор по длине, от большего к меньшему. Ест допустимый набор букв и длина. Нашли первое слово, обновили допустимый набор букв и длины слов – ищем следующее слово.
- Делаете структуру (таблицу в БД, хеш-таблица, словарь и тд что там есть в пхп) из двух полей на запись: хэш и собственно говоря слово. Забиваем эту структуру словами.
- Хэш примерно делается так: индекс буквы в алфавите — степень двойки, все буквы слова складываем (32 бит для русского языка должно хватить). Это простейший вариант, возможно будет необходимо придумать более сложную функцию.
- Получив слово которое надо заанаграмить — вычисляем его хэш и ищем по нему в нашей структуре
UPD: Это для одного слова, с фразами будет сложнее, но принцип тот же
2
Зарегистрируйтесь или войдите
Регистрация через Google
Регистрация через Facebook
Регистрация через почту
Отправить без регистрации
Почта
Необходима, но никому не показывается
Отправить без регистрации
Почта
Необходима, но никому не показывается
Игра – тренажёр на составление слов из букв
Похожие презентации:
Healthy lifestyle.
Здоровый образ жизни
Education in Australia
Тренажер-самоучитель «Правила чтения английских слов»
Спорт в Великобритании. Sport in Great Britain
Sport in USA
Новый формат экзамена по английскому языку (2019-2020)
English grammar. Структура английского предложения
Описание фотографии на английском языке
Yale University. Йельский Университет
Модальные глаголы
Игра – тренажёр на составление слов из букв
f i r e
e
f
a
b
r
u
i
v
h o t
r
h
a
o
t
s
i
m
r u n
h
u
k
l
r
n
a
m
s k i
c
y
t
a
k
i
s
w
b e d
b
a
s
i
d
u
e
t
k i t e
e
k
i
d
p
t
a
b
d i v e
d
a
m
i
j
v
p
e
s h e l f
a
s
e
w
h
v
f
l
c o l d
l
k
t
c
d
a
o
m
w a l l
o
b
a
v
d
w
l
l
d e s k
a
d
e
b
s
i
c
k
d o o r
l
o
r
b
d
f
o
w
w i n d y
n
t
v
y
w
e
i
d
n
s u n n y
c
u
a
n
i
s
y
s n o w y
o
i
v
c
s
y
n
w
s
r a i n y
h
n
y
a
l
r
i
i
o
c
r
t
y
m
s
c a r p e t
k
p
r
i
c
a
e
t
w i n d o w
d
u
v
w
o
i
n
w
c l o u d y
a
u
i
d
c
l
o
y
k i t c h en
s
h
k
c
n
t
r
i
e
a r m c h a i r
i
e
s
m
r
r
c
a
n
a
h
Игра-тренажёр “Hungry frog” предназначена для учеников 4 класса,
изучающих английский язык по УМК “Enjoy English” под ред.
М. З.Биболетовой. Она станет хорошим помощником для закрепления лексики по
темам «Погода» (cold, hot, snowy, cloudy, stormy, windy, sunny, rainy, warm),
«Спорт» (dive, run, ski), «Мой дом, квартира, комната» (kitchen, bed, window,
wall, door, armchair, carpet, shelf, desk, fire). В игре ученикам предлагается
составить слова из букв. Для этого следует «кликнуть» мышкой на стрекозе с
буквой, которая есть в названии картинки.
Может быть использована на уроке по повторению и закреплению изученного
в 1 четверти, а также во внеурочное время.
— Изображения взяты из мультимедиа приложения к
учебнику “Enjoy English” для 4 класса “Enjoy Listening
and Playing” и обработаны в графическом редакторе.
— http://grapeviewfire.com/img/fire_and_safety_kitchen.gif
— http://4.bp.blogspot.com/_BRS6UiJz748/S6zBS7oSiI/AAAAAAAAAio/1zd4UUAxMVo/s1600/kite.gif
— http://www.mesenglish.com/flashcards/files/ppt/weather.ppt
— http://im5-tub-ru.yandex.net/i?id=305243420-67-72
— http://lh5.
ggpht.com/wnldPAMtymhiV9_X7YrH5Zk2QhdoiQ1wxgBQwdhDk__reDcJxWUqaMRgbhAy6UrR1zeY
Yvg=s114
— http://www.arthursclipart.org/nature/nature/fire.gif
— http://zvukitut.narod2.ru/lyagushki_v_bolote_kvakayut__afrika/Lyagushki_v_bolote_kvakajut_-_afrika.mp3
— http://4.bp.blogspot.com/_wcoGOE44ARc/TMgw01bNp
KI/AAAAAAAACT8/qFT5t9YncUM/s320/wind.gif
English Русский Правила
Исследуйте все сочетания букв и слова, их содержащие
Узнайте, какие слова образованы из сочетаний букв.
Инструкции
- Добавляйте буквы ниже, пока не получите нужный набор букв (от 2 до 7 букв).
- Щелкните ссылку, выполняющую нужный запрос для текущей комбинации букв.
Выбрать следующую комбинацию
- А
- Б
- С
- Д
- Е
- Ф
- грамм
- ЧАС
- я
Дж- К
- л
- М
- Н
- О
- п
- Вопрос
- р
- С
- Т
- U
- В
- Вт
- Икс
- Д
- Z
Что такое аббревиатура? | Merriam-Webster
Слова состоят из букв, но группа букв не обязательно становится словом.
Подумайте о FBI или HMO , или TSA , или TGIF — совершенно обычные выражения, с которыми мы сталкиваемся каждый день, но никто не стал бы называть их словами. Их обычно называют аббревиатуры , но есть более специфический термин, который используется лингвистами и людьми, которые любят быть точными в этих вещах: инициализм .
Такие сокращения, как «акваланг» («автономный подводный дыхательный аппарат») произносятся как слова. Инициализмы вроде «ФБР» — нет.
Путаница начинается, когда мы произносим буквы этих аббревиатур как слово, например NATO . Определение акронима , «слово, образованное из начальной буквы или букв каждой из последовательных частей или основных частей составного термина», означает, что акронимы можно отличить от других сокращений, поскольку они произносятся как слова. Некоторые аббревиатуры произносятся так часто, что мы начинаем думать о них как о словах, например 9.Радар 0071 (радиообнаружение и дальность), акваланг (автономный подводный дыхательный аппарат) и лазер (усиление света за счет вынужденного излучения).
Другими распространенными аббревиатурами являются ASCII , UNICEF , DARPA и правительственные термины POTUS , FLOTUS и SCOTUS .
Инициализм — это аббревиатура, состоящая из начальных букв. В нашем онлайн-словаре есть записи для примерно 1500 сокращений, в которых используются только заглавные буквы, например ACLU, BBQ, CPR, DIY, POV, PTSD и YMCA. Акроним — относительно новое слово, состоящее из древних частей. Оно вошло в язык примерно в 1940 году, образовано от греческого слова akros , означающего «самый верхний» или «высший», в сочетании с -онимом , от греческого слова onyma («имя» или «слово»). В немецком языке термин Akronym использовался с 1920-х годов.
Инициализм — более старый термин, датируемый серединой 1800-х годов.
Некоторые инициализмы становятся аббревиатурами благодаря тому, что произносятся вслух достаточно часто, чтобы стать больше похожими на слово, чем на набор букв: оба ASAP и LOL часто произносятся как слова.
