Как из мухи сделать слона

от admin

Как сделать из мухи слона

— Скажите, знакома Вам эта игра:
пытаться из «мухи» сделать «слона»?
Давайте попробуем. Ну, Вы готовы?
Менять нужно букву одну только в слове.
— Но это же глупость: из мухи. слона.
— Изменим лишь букву, что будет?
— «МурА»…
— Ну, вот и играем… Что будет потом?
— Не знаю, как Вы, я считаю — дурдом…
— Но это же шутка, забава, игра…
Смените лишь букву, что будет?
— «ТурА»…
— Вот славно… Продолжим…
— Что, «дура» потом?
— Нет, эдак в тупик мы с Вами зайдём…
— А «тара»?
— Отлично!
— За ней будет «пара»…
— Вот видите, трудимся с Вами недаром…
— Что дальше – не знаю…
— Я тоже не знаю…
Все буквы в уме вот перебираю…
— А «парк» подойдёт?
— Ну, конечно. Удача!
— Когда ж, наконец, этот «слон» замаячит?
— Терпенье, мой друг, Вы включились в игру…
Придумывать трудно, я Вам помогу…
— Но что после «парка»?
— Давайте — «паук»…
Вот видите, всё без особых натуг…
— Продолжим…Что дальше?
— А дальше — «паУт»…
— Что-что Вы сказали? Никак не пойму…
— ПаУт — насекомое. Это слепЕнь…
— О, Боже… какая-то дребедень…
— А слово подходит… теперь можно «плут»…
Какую же букву я тут уберу?
— Попробуем «плот»…
— Получается ловко…
— А дальше – не знаю, опять пробуксовка…
— А ежели «слот»…
— Что такое?
— Пролив…
— Впервые я слышу… Какой эксклюзив!
— И вот, наконец, добрались мы до цели…
Не верили Вы, что так ловко сумеем?
— И вправду, забавная это игра!
— Вот так получили из «мухи» «слона».

Примечание:
Слот – пролив в Соломоновых островах…

Да уж, захотелось вот так, в стихах. Помучиться пришлось.

Портал Стихи.ру предоставляет авторам возможность свободной публикации своих литературных произведений в сети Интернет на основании пользовательского договора. Все авторские права на произведения принадлежат авторам и охраняются законом. Перепечатка произведений возможна только с согласия его автора, к которому вы можете обратиться на его авторской странице. Ответственность за тексты произведений авторы несут самостоятельно на основании правил публикации и законодательства Российской Федерации. Данные пользователей обрабатываются на основании Политики обработки персональных данных. Вы также можете посмотреть более подробную информацию о портале и связаться с администрацией.

Ежедневная аудитория портала Стихи.ру – порядка 200 тысяч посетителей, которые в общей сумме просматривают более двух миллионов страниц по данным счетчика посещаемости, который расположен справа от этого текста. В каждой графе указано по две цифры: количество просмотров и количество посетителей.

© Все права принадлежат авторам, 2000-2023. Портал работает под эгидой Российского союза писателей. 18+

метаграммы Муха — Слон. Все рекорды. часть 1

метаграммы. «Муха» – «Слон». Конец истории.
Последний рекорд.

рекордные метаграммы «МУХА» — «СЛОН»
— метаграммы. рекорды за 4,5,6,7 ходов;
— метаграммы-панграммы. рекорды с заменой 4 букв,
где ни одна буква не повторяется;
— метаграммы. рекорды с заменой 2,3 букв;
— метаграммы. рекорды из нескольких цепочек
метаграмм, где слова ни разу не повторяются;
— мета-анаграммы. рекорды с заменой 1 буквы;
— мета-анаграммы. рекорды с заменой 2 букв;
— приведены 10.000 вариантов решения задачи за
4,5,6,7 ходов(варианты за 8 и более ходов не
включены – более 50.000 вариантов).
правила сборки метаграммных цепочек смотри ниже.

Самая знаменитая метаграмма «Как сделать из мухи
слона».
История СЛОНОМУХИ началась с рекорда из 16 ходов и,
казалось, всем закончилась за 8 ходов в 2011 году.
(смотри историю на igfun.ru)

Но мне удалось найти несколько решений метаграммы
«МУХА» — «СЛОН» за 7 ходов:

рекорд. Метаграмма «МУХА» – «СЛОН» с заменой одной
буквы за 7 ходов более 10 вариантов):

МУХА — МУНА — СУНА — СУНН – СУАН – СТАН — СТОН – СЛОН
муна – народность в Индонезии; один из австронезийских
языков;
суна – вежа, башня(церк.т.с.Даля);
сунн – пенька для тросов; ост-индийская пенька;
суан – 1)-племя (Большая Советская энциклопедия)
(Советская историческая энциклопедия); (старший жуз –
в его состав вошли усуни, суаны и др. племена);
суан – 2)-древний сван или суан(были знакомы ещё грекам…)(Энциклопедический словарь Брокгауза и Ефрона
(см.Сванеты);
стан – лагерь, место стоянки;
стон — звук, издаваемый при страданиях;

МУХА — МУХР — МУАР — МУАН — СУАН – СТАН — СТОН – СЛОН
мухр – историческая золотая монета Индии, Непала, Афганистана;(Википедия)
муар — плотная шёлковая ткань;
муан – это различие по отношению к аскетизму…(сл.Даля);
суан – 1)-племя (Большая Советская энциклопедия)
(Советская историческая энциклопедия); (старший жуз –
в его состав вошли усуни, суаны и др. племена);
суан – 2)-древний сван или суан(были знакомы ещё грекам…)(Энциклопедический словарь Брокгауза и Ефрона
(см.Сванеты);
стан – лагерь, место стоянки;
стон — звук, издаваемый при страданиях;

МУХА — МУХР — МУАР — МУАН — СУАН — СКАН — СКОН — СЛОН
мухр – историческая золотая монета Индии, Непала, Афганистана;(Википедия)
муар — плотная шёлковая ткань;
муан – это различие по отношению к аскетизму…(сл.Даля);
суан – 1)-племя (Большая Советская энциклопедия)
(Советская историческая энциклопедия); (старший жуз –
в его состав вошли усуни, суаны и др. племена);
суан – 2)-древний сван или суан(были знакомы ещё грекам…)(Энциклопедический словарь Брокгауза и Ефрона
(см.Сванеты);
скан – (жарг.)списать у кого-нибудь задачу;
скон – британская булочка; британский хлеб;

МУХА — МУРА — МЕРА — МЕРН — МЕОН – МИОН — СИОН – СЛОН
мура – чепуха, ерунда;
мера – единица измерения;
мерн – рыба семейства окунёвых;
меон – филосовское понятие, передающее представление о
всякой неопределенности(словари на Академике);
мион – мышечное волокно;
сион – церковная утварь;

МУХА — КУХА — КУСА — КУСТ — КУОТ — КЛОТ — СЛОТ – СЛОН
куха – глиняная заслонка с дыркой посредине в печное
окошко;
куса – набег, нападение(словарь-справочник Слово о
полку Игореве);
куст — растение с древовидными ветвями;
куот – язык на котором говорят в Папуа — Новая Гвинея;
клот – тарелка на кончике флагштока;
слот – разъём; (сл.бизнес терминов; Р.орф.сл.);

МУХА — КУХА — КУРА — КУРТ — КУОТ — КЛОТ — СЛОТ – СЛОН
куха – глиняная заслонка с дыркой посредине в печное
окошко(сл.Даля);
кура – растение; вьюга; курица;
курт – кисломолочный продукт;(сл.на Академике);
куот – язык на котором говорят в Папуа — Новая Гвинея;
клот – тарелка на кончике флагштока;
слот – разъём; (сл.бизнес терминов; Р.орф.сл.);

МУХА — МАХА — САХА — САХМ — СААМ — СЛАМ — СЛОМ – СЛОН
маха — вид пшеницы; вид полбы.
саха – самоназвание якутов;
сахм – египетская единица измерения площади(Википедия);
саам – лопарь, житель Карелии;
слам — слаз отсталого, срыв за то, чтобы отстать, не
набивать цену, передать взятую работу и пр. Взять сламу.
слом — место, где что-нибудь сломано, сломлено; ;;

МУХА — ПУХА — ПУНА — ПИНА — ПИНН — ПИОН — СИОН – СЛОН
пуха – огнестрельное оружие;(см.сл.на Академике);
(см. Воровской жаргон); то же что пушка;(разг.); пух;
пуна – природная зона в Ю.Америке; плато; степь;
пина – мера жидкости в испанских и португальских
колония, в Англии, Америке и др.; коктейль; смузи;
(см.сл.на Академике);
пинн – двухстворчатый моллюск;
пион – цветок; растение; элементарная частица;
(см.сл.на Академике);
сион — церковная утварь; (см.сл.на Академике);

МУХА – МАХА – САХА – САХН – САУН – СРУН – СРОН – СЛОН
маха — вид пшеницы; вид полбы. (больш.энц-ий сл.);
саха – самоназвание якутов;
сахн – двор; (орфогр.словарь; сл.синонимов;).
саун – пост в месяц рамодан; муниципалитет в Испании;
срун – трус; серун; грязнуля; засранец;
срон – действие по глаголу сронить(сронка; сроение;);

МУХА — СУХА — САХА — САХМ — СААМ — СЛАМ — СЛОМ – СЛОН
суха – 1)- тоска; иносказательно: сильно тосковать по
ком-нибудь (пить суху)- Большой сл.рус.поговорок);
2) — худоба;
саха – самоназвание якутов;
сахм – египетская единица измерения площади(Википедия);
саам – лопарь, житель Карелии;
слам — слаз отсталого, срыв за то, чтобы отстать, не
набивать цену, передать взятую работу и пр. Взять сламу.
слом — место, где что-нибудь сломано, сломлено;

МУХА — СУХА — СУНА — СУНН – СУАН – СТАН – СТОН — СЛОН
суха – 1)- тоска; иносказательно: сильно тосковать по
ком-нибудь (пить суху)- Большой сл.рус.поговорок);
суна – вежа, башня(церк.т.с.Даля);
сунн – пенька для тросов; ост-индийская пенька;
суан – 1)-племя (Большая Советская энциклопедия)
(Советская историческая энциклопедия); (старший жуз –
в его состав вошли усуни, суаны и др. племена);
суан – 2)-древний сван или суан(были знакомы ещё грекам…)(Энциклопедический словарь Брокгауза и Ефрона
(см.Сванеты);
стан – лагерь, место стоянки;
стон — звук, издаваемый при страданиях;

МУХА – СУХА – САХА – САХН – САУН – СРУН – СРОН – СЛОН
суха – 1)- тоска; иносказательно: сильно тосковать по
ком-нибудь (пить суху)- Большой сл.рус.поговорок);
2) — худоба;
саха – самоназвание якутов;
сахн – двор; (орфогр.словарь; сл.синонимов;).
саун – пост в месяц рамодан; муниципалитет в Испании;
срун – трус; серун; грязнуля; засранец;
срон – действие по глаголу сронить(сронка; сроение;);

МУХА – МУЛА – КУЛА – КИЛА – КИЛН – КИОН – СИОН – СЛОН
мула – то же что мол;
кула – жилище на Балканах;
кила – грыжа;
килн – печь для обжига стекла;
кион – дно лодки у нанайцев;
сион – церковная утварь;

рекорд. Метаграмма «МУХА» – «СЛОН». Приведены
метаграммные цепочки из существительных за 7 ходов,
где слова между МУХОЙ и СЛОНОМ не повторяются!

МУХА — СУХА — СУНА — СУНН – СУАН – СТАН – СТОН — СЛОН
МУХА – МАХА – САХА – САХН – САУН – СРУН – СРОН – СЛОН
МУХА — КУХА — КУРА — КУРТ — КУОТ — КЛОТ — СЛОТ – СЛОН
МУХА — МУРА — МЕРА — МЕРН — МЕОН – МИОН — СИОН – СЛОН

рекорд. Метаграмма «МУХА» – «СЛОН» с заменой
или перестановкой сразу 2 букв в слове (не
путать с мета-анаграммой – две буквы остаются на
своём месте!):

рекорд. Метаграмма «МУХА» – «СЛОН» с заменой
или перестановкой сразу 3 букв в слове за 2
хода(не путать с мета-анаграммой – две буквы
остаются на своём месте!):

рекорд. метаграмма «МУХА» — «СЛОН» из разнобуквиц
с заменой сразу 4 букв за 6 ходов. (сложность
заключается в том, чтобы использовать как можно
больше букв. При этом каждая буква используется
только один раз!
(правила: только из сущ. в ед.числе, им.пад.):

————————————————
МУХА – ФЭЙК – ЗЫБЬ – ДЖИГ – ШВЕЯ – ТРЁП — СЛОН
————————————————
варианты:
МУХА – ВЯЗЬ – ДЖИП – ФЭЙК – ШТЫБ – ЮГЕР — СЛОН
МУХА – ВЯЗЬ – ДЖИГ – ФЭЙК – ШТЫБ – ПЮРЕ — СЛОН
МУХА – ЯЗЫК – РЕЙВ – ПШЮТ – БЭДЖ – ГИЧЬ — СЛОН

рекорд. метаграмма «МУХА» — «СЛОН» из разнобуквиц
с заменой сразу 4 букв за 7 ходов. (сложность
заключается в том, чтобы использовать как можно
больше букв. При этом каждая буква используется
только один раз!
(правила: никаких правил, можно использовать
любые слова):

рекорд. Мета-анаграмма «МУХА» – «СЛОН»
с заменой одной буквы за 4 хода.
(привожу только три примера):

———————————-
МУХА – ХЛАМ – ХОЛМ – СЛОМ — СЛОН
МУХА – СУМА – АНУС – УНОС — СЛОН
МУХА – ХАУС – СОХА – САЛО – СЛОН
———————————-

прежние рекорды – за 5 и 6 ходов:
МУХА-хула-луна-лунь-ноль-СЛОН
МУХА-мура-уран-улан-клан-клон-СЛОН

рекорд. Мета-анаграмма «МУХА» – «СЛОН»
с заменой двух букв за 2 хода.

прим.
Мета-анаграмма – слова, отличающие одной буквой,
как в метаграммах, и порядком букв в словах, как
в анаграммах.

рекорд. Метаграмма «МУХА» – «СЛОН». Приведены
метаграммные цепочки из вольных слов, где слова
между МУХОЙ и СЛОНОМ не повторяются!
(цепочки более 8 ходов не включены).

МУХА – МУОА – МУОН – СУОН – СЛОН
МУХА — СУХА — СУОА — СЛОА – СЛОН
МУХА — МАХА — САХА — САХН — САОН – СЛОН
МУХА — МУИА — МУИН — МЛИН — МЛОН – СЛОН
МУХА — МОХА — СОХА — СОХН — СООН — СЛОН
МУХА — МИХА — МИХН — МИОН — СИОН – СЛОН
МУХА — БУХА — БУИА — БУИН — БЛИН — БЛОН — СЛОН
МУХА — ВУХА — ВЕХА — ВЕОА — ВЕОН — ВЛОН – СЛОН
МУХА — ГУХА — ГУНА — ГУНН — ГУОН — ГЛОН — СЛОН
МУХА — ИУХА — ИТХА — ИТОА — ИТОН — ИЛОН – СЛОН
МУХА — КУХА — КУИА — КУИН — КЛИН — КЛОН — СЛОН
МУХА — МЕХА — МЕРА — МЕРН — МЕОН — СЕОН – СЛОН
МУХА — МУГА — АУГА — АЛГА — АЛОА — АЛОН – СЛОН
МУХА — МУДА — СУДА — СУДН — СУЕН — СЛЕН — СЛОН
МУХА — МУЛА — ЭУЛА — ЭЛЛА — ЭЛОА — ЭЛОН — СЛОН
МУХА — МУМА — СУМА — СТМА — СТОА — СТОН — СЛОН
МУХА — МУНА — СУНА — СУНН — СУАН — СЛАН — СЛОН
МУХА — МУРА — СУРА — СУРТ — СУОТ — СЛОТ — СЛОН
МУХА — МУСА — СУСА — СУСН — СУЁН — СЛЁН – СЛОН
МУХА — МУХР — МУОР — ФУОР — ФЛОР — ФЛОН – СЛОН
МУХА — МУХУ — СУХУ — СУХН — СУЮН — СЛЮН — СЛОН
МУХА — МУЗА — ОУЗА — ОМЗА — ОМОА — ОМОН — ОЛОН – СЛОН
МУХА — МУПА — СУПА — СИПА — СИПЯ — СИОЯ — СЛОЯ – СЛОН
МУХА — МУХИ — ЭУХИ — ЭЛХИ — ЭЛОИ — ЭЛОЮ — СЛОЮ – СЛОН
МУХА — МУХЛ — МУАЛ — СУАЛ — СУАЙ — СЛАЙ — СЛОЙ – СЛОН
МУХА — ЯУХА — ЯУКА — ЯЛКА — ЯЛКУ — ЯЛОУ — СЛОУ — СЛОН
МУХА — МУТА — АУТА — АЛТА — АЛТЕ — АЛОЕ — СЛОЕ — СЛОН
МУХА — ЗУХА — ЗУРА — ЗУРН — ЗУОН — ЗВОН — СВОН — СЛОН
МУХА — ЛУХА — ЛУДА — ЛЬДА — ЛЬОА — ЛЬОН — СЬОН — СЛОН
МУХА — МУХЕ — МОХЕ — МОХН — МОЭН — СОЭН — СЛЭН – СЛОН
МУХА — МУХУ — МУТУ — МГТУ — МГОУ — МГОН — СГОН — СЛОН
МУХА — ТУХА — ТЕХА — ТЕХН — ТЕОН — ТРОН — СРОН — СЛОН
МУХА — МУХО — СУХО — СУАО — СУАЙ — СЛАЙ — СЛОЙ — СЛОН

только существительные в ед.числе, им.падеже

ЗАПРЕЩЕНО ИСПОЛЬЗОВАТЬ:
придуманные слова; слова из мифологии(там одни имена);
слова с дефисом; уменьшительно-ласкательные;
имена, фамилии; название городов, рек, гор,
звёзд и т.д. и т.п.; словоформы, глаголы,
прилагательные наречия и др.;

если ВЫ не соблюдаете этих правил – значит ВАМ сюда:
(метаграммы вольные или метаграммы у которых одно
правило: НИКАКИХ ПРАВИЛ. (см. в конце – все варианты
МУХА-СЛОН) более 10.000 вариантов(всего более 50.000
вариантов).

ОСТАЛЬНЫЕ РЕКОРДЫ СМОТРИ НИЖЕ:

рекорд. Метаграмма «МУХА» – «СЛОН» с заменой одной
буквы за 4 ходов:

МУХА – МУОА – МУОН – СУОН – СЛОН
муоа – город в Танзании;
муон – народ(см.Иркипедия – энциклопедия Иркутской
области); стиль Тайдзюцу, изобретённый Широй; Муон –
Муона, г. в Ценральной
Африке, Мозамбик; и многое другое;
суон – камера в тюрьме; тюрьма; тип фрегата в
Австралии; анг.химик; река; и др.(очень много
определений);

МУХА – СУХА – СУОА – СУОН – СЛОН
суха – 1.тоска; иносказательно: сильно тосковать по
ком-нибудь (пить суху)- Большой сл.рус.поговорок);
2.худоба; иносказательно: худа как палка;
суоа – строительное управление общества автолюбителей;
суон — камера в тюрьме; тюрьма; тип фрегата в
Австралии; и др.(очень много определений);

МУХА – СУХА – СУОА – СЛОА – СЛОН
суха – 1.тоска; иносказательно: сильно тосковать по
ком-нибудь (пить суху)- Большой сл.рус.поговорок);
2.худоба; иносказательно: худа как палка;;
суоа – сумма отношений удельных активностей; (сокр.)
слоа – название мёртвого воинства в горной Шотландии;

рекорд. Метаграмма «МУХА» – «СЛОН» с заменой одной
буквы за 5 ходов (выложил только часть с определениями):

МУХА – МУНА – СУНА – СУНН – СУОН – СЛОН
муна – народность в Индонезии;
суна – вежа, башня(церк.т.с.Даля); река в Карелии;
сунн – пенька для тросов; ост-индийская пенька;
коммуна в Норвегии;
суон – тюрьма; то же что и сизо, строгие условия
отбывания наказания; анг.химик; река;

МУХА – МУОА – МУОН – МИОН – СИОН — СЛОН
муоа – город в Танзании;
муон – народ(см.Иркипедия – энциклопедия Иркутской
области); стиль Тайдзюцу, изобретённый Широй; Муон –
Муона, г. в Ценральной Африке, Мозамбик;
мион – мион – мышечное волокно;
сион — сион – церковная утварь.

МУХА – СУХА – САХА – САХН – САОН — СЛОН
суха – 1.тоска; иносказательно: сильно тосковать
по ком-нибудь (пить суху)- Большой сл.рус.поговорок);
2.худоба; иносказательно: худа как палка;
саха – самоназвание якутов;
сахн – двор; (сл. синонимов; орф.словарь)
саон – сын Зевса и нимфы; река; и др.;

МУХА – МАХА – САХА – САХН – САОН — СЛОН
маха – один из видов полбы. (больш.энц-ий сл.).
саха – самоназвание якутов;
сахн – двор; (сл. синонимов; орф.словарь)
саон – сын Зевса и нимфы; река; и др.;

МУХА – МУРА – СУРА – СУРН – СУОН – СЛОН
мура – ерунда;
сурн – самоходная установка разведки и
наведения. (сл.сокращений русского языка);
сурн – сурна, стар.русс.муз.инструмент;
суон – анг.химик; река; то же что и сизо, строгие
условия отбывания наказания;

МУХА – МУРА – МОРА – МОРН – СОРН – СЛОН
мура – ерунда;
мора – рыба; тьма; античная доля стиха;
морн – гранитная горная гряда в Серв.Ирландии;
сорн — река в Швейцарии; камбоджийская тхэквондистка;

рекорд. Метаграмма «МУХА» – «СЛОН» с заменой одной
буквы за 6 ходов (выложил только часть с определениями):

МУХА — МУНА — СУНА — СУНН — СУАН — СЛАН – СЛОН
муна – народность в Индонезии; один из австронезийских
языков.
суна – вежа, башня(церк.т.с.Даля); река в Карелии;
сунн – пенька для тросов; ост-индийская пенька;
суан – племя (Большая Советская энциклопедия)(Советская
историческая энциклопедия); (старший жуз – в его состав
вошли усуни, суаны и др. племена);
слан – металлофторопласт;

МУХА – МУНА – ГУНА – ГУНН – ГУОН – ГЛОН – СЛОН
муна – народность в Индонезии;
гуна – рубище;
гунн – племя;
гуон – персонаж фр.эпоса;
глон – полководец Гуннии;

МУХА – МУРА – МАРА – САРА – САРН – САОН — СЛОН
сарн – кантон в Швейцарии; (сарна), серна.
саон – сын Зевса и нимфы;

МУХА – МУРА – СУРА – СИРА – СИРН – СИОН — СЛОН
сира – жанр литературы; виноградная лоза;
сирн – Лью Сирн.

МУХА – МУРА – МИРА – МИРН – МИОН – СИОН — СЛОН
мирн – анг.переплётчик;

МУХА – МУРА — СУРА — СУРТ – СУОТ – СЛОТ — СЛОН
сурт — в скандинавской мифологии великан; г. в Алжире;
суот – система управления охраны труда;

МУХА – МУНА – МИНА – МИНН – МИОН – СИОН — СЛОН
муна – народность в Индонезии;
минн – бельгийский скульптор;

МУХА – МУНА – МИНА – ЛИНА – ЛИНН – ЛИОН — СЛОН
линн — город в США;

МУХА — МУЛА — МИЛА — МИЛН — МИОН — СИОН — СЛОН
милн – егип.писатель;

все варианты «муха» — «слон» за 4 хода:

[муха-муоа-муон-суон-слон]
[муха-муоа-суоа-слоа-слон]
[муха-муоа-суоа-суон-слон]
[муха-мухн-муон-суон-слон]
[муха-суха-суоа-слоа-слон]
[муха-суха-сухн-суон-слон]
[муха-муоа-муон-млон-слон]

все варианты «муха» — «слон» за 5 ходов:

[муха-ауха-алха-алоа-алон-слон]
[муха-ауха-алха-алоа-слоа-слон]
[муха-маха-саха-сахн-саон-слон]
[муха-миха-михн-мион-млон-слон]
[муха-миха-михн-мион-сион-слон]
[муха-моха-мохн-моон-млон-слон]
[муха-моха-мохн-моон-соон-слон]
[муха-моха-мохн-сохн-соон-слон]
[муха-моха-соха-сохн-соон-слон]
[муха-муга-суга-суоа-слоа-слон]
[муха-муга-суга-суоа-суон-слон]
[муха-муда-суда-судн-суон-слон]
[муха-муда-суда-суоа-слоа-слон]
[муха-муда-суда-суоа-суон-слон]
[муха-муза-суза-суоа-слоа-слон]
[муха-муза-суза-суоа-суон-слон]
[муха-муиа-муин-млин-млон-слон]
[муха-муиа-муин-муон-суон-слон]
[муха-мука-сука-суоа-слоа-слон]
[муха-мука-сука-суоа-суон-слон]
[муха-мула-сула-суоа-слоа-слон]
[муха-мула-сула-суоа-суон-слон]
[муха-мума-сума-суоа-слоа-слон]
[муха-мума-сума-суоа-суон-слон]
[муха-муна-мунн-муон-млон-слон]
[муха-муна-мунн-муон-суон-слон]
[муха-муна-мунн-сунн-суон-слон]
[муха-муна-суна-сунн-суон-слон]
[муха-муна-суна-суоа-слоа-слон]
[муха-муна-суна-суоа-суон-слон]
[муха-муоа-муон-маон-саон-слон]
[муха-муоа-муон-мгон-сгон-слон]
[муха-муоа-муон-меон-сеон-слон]
[муха-муоа-муон-мион-сион-слон]
[муха-муоа-муон-моон-соон-слон]
[муха-муоа-муон-суон-саон-слон]
[муха-муоа-муон-суон-свон-слон]
[муха-муоа-муон-суон-сгон-слон]
[муха-муоа-муон-суон-сеон-слон]
[муха-муоа-муон-суон-сион-слон]
[муха-муоа-муон-суон-скон-слон]
[муха-муоа-муон-суон-соон-слон]
[муха-муоа-муон-суон-спон-слон]
[муха-муоа-муон-суон-срон-слон]
[муха-муоа-муон-суон-стон-слон]
[муха-муоа-муон-суон-сьон-слон]
[муха-муоа-суоа-слоа-слов-слон]
[муха-муоа-суоа-слоа-слог-слон]
[муха-муоа-суоа-слоа-слое-слон]
[муха-муоа-суоа-слоа-слож-слон]
[муха-муоа-суоа-слоа-слои-слон]
[муха-муоа-суоа-слоа-слой-слон]
[муха-муоа-суоа-слоа-слом-слон]
[муха-муоа-суоа-слоа-слоо-слон]
[муха-муоа-суоа-слоа-слоп-слон]
[муха-муоа-суоа-слоа-слот-слон]
[муха-муоа-суоа-слоа-слоу-слон]
[муха-муоа-суоа-слоа-слою-слон]
[муха-муоа-суоа-слоа-слоя-слон]
[муха-муоа-суоа-стоа-стон-слон]
[муха-муоа-суоа-суон-саон-слон]
[муха-муоа-суоа-суон-свон-слон]
[муха-муоа-суоа-суон-сгон-слон]
[муха-муоа-суоа-суон-сеон-слон]
[муха-муоа-суоа-суон-сион-слон]
[муха-муоа-суоа-суон-скон-слон]
[муха-муоа-суоа-суон-соон-слон]
[муха-муоа-суоа-суон-спон-слон]
[муха-муоа-суоа-суон-срон-слон]
[муха-муоа-суоа-суон-стон-слон]
[муха-муоа-суоа-суон-сьон-слон]
[муха-муоа-суоа-суот-слот-слон]
[муха-мура-мурн-муон-млон-слон]
[муха-мура-мурн-муон-суон-слон]
[муха-мура-мурн-сурн-суон-слон]
[муха-мура-сура-суоа-слоа-слон]
[муха-мура-сура-суоа-суон-слон]
[муха-мура-сура-сурн-суон-слон]
[муха-муса-суса-суоа-слоа-слон]
[муха-муса-суса-суоа-суон-слон]
[муха-муса-суса-сусн-суон-слон]
[муха-мута-мутн-муон-млон-слон]
[муха-мута-мутн-муон-суон-слон]
[муха-мута-сута-суоа-слоа-слон]
[муха-мута-сута-суоа-суон-слон]
[муха-мухе-сухе-сухн-суон-слон]
[муха-мухи-сухи-сухн-суон-слон]
[муха-мухо-сухо-сухн-суон–слон]
[муха-мухр-муор-муон-суон-слон]
[муха-мухр-муор-суор-суон–слон]
[муха-муху-суху-сухн-суон–слон]
[муха-муша-суша-суоа-слоа-слон]
[муха-муша-суша-суоа-суон-слон]
[муха-суха-саха-сахн-саон-слон]
[муха-суха-соха-сохн-соон-слон]
[муха-суха-стха-стоа-стон-слон]
[муха-суха-суоа-слоа-слов-слон]
[муха-суха-суоа-слоа-слог-слон]
[муха-суха-суоа-слоа-слое-слон]
[муха-суха-суоа-слоа-слож-слон]
[муха-суха-суоа-слоа-слои-слон]
[муха-суха-суоа-слоа-слой-слон]
[муха-суха-суоа-слоа-слом-слон]
[муха-суха-суоа-слоа-слоо-слон]
[муха-суха-суоа-слоа-слоп-слон]
[муха-суха-суоа-слоа-слот-слон]
[муха-суха-суоа-слоа-слоу-слон]
[муха-суха-суоа-слоа-слою-слон]
[муха-суха-суоа-слоа-слоя-слон]
[муха-суха-суоа-стоа-стон-слон]
[муха-суха-суоа-суон-саон-слон]
[муха-суха-суоа-суон-свон-слон]
[муха-суха-суоа-суон-сгон-слон]
[муха-суха-суоа-суон-сеон-слон]
[муха-суха-суоа-суон-сион-слон]
[муха-суха-суоа-суон-скон-слон]
[муха-суха-суоа-суон-соон-слон]
[муха-суха-суоа-суон-спон-слон]
[муха-суха-суоа-суон-срон-слон]
[муха-суха-суоа-суон-стон-слон]
[муха-суха-суоа-суон-сьон-слон]
[муха-суха-суоа-суот-слот-слон]
[муха-суха-сухн-сахн-саон-слон]
[муха-суха-сухн-сохн-соон-слон]
[муха-суха-сухн-суан-слан-слон]
[муха-суха-сухн-суен-слен-слон]
[муха-суха-сухн-суён-слён-слон]
[муха-суха-сухн-суон-саон-слон]
[муха-суха-сухн-суон-свон-слон]
[муха-суха-сухн-суон-сгон-слон]
[муха-суха-сухн-суон-сеон-слон]
[муха-суха-сухн-суон-сион-слон]
[муха-суха-сухн-суон-скон-слон]
[муха-суха-сухн-суон-соон-слон]
[муха-суха-сухн-суон-спон-слон]
[муха-суха-сухн-суон-срон-слон]
[муха-суха-сухн-суон-стон-слон]
[муха-суха-сухн-суон-сьон-слон]

Читать:
Rufus как создать загрузочную флешку windows

Как из мухи сделать слона? Рекорд этой словесной игры ⁠ ⁠

И вот он, новый рекорд: МУХА–МУЛА–КУЛА–КИЛА–КИЛТ–КИОТ–КЛОТ–КЛОН-СЛОН. 8 шагов, поставлен в Донбассе человеком, скромно попросившим назвать его Александром из Донецка. Как и следовало ожидать, многие слова малоизвестные, но Александру они были известны все, кроме двух, которые он подобрал, пользуясь поиском Яндекса. Пояснения:

МУЛА — мол, насыпь. (Толковый словарь В.И. Даля);
КУЛА — дом-крепость в горных районах в Югославии, Албании, Греции. (Большая советская энциклопедия);
КИЛА — болезнь капусты и др. крестоцветных растений. (Энциклопедический словарь Ф.А. Брокгауза и И.А. Ефрона);
КИЛТ — мужская юбка у кельтских народов Великобритании и Ирландии. (Энциклопедия моды. Андреева Р., 1997);
КИОТ — остеклённая рама или шкафчик для икон. (Толковый словарь С.И. Ожегова);
КЛОТ (также клотик) — тарелка, на кончике флагштоков. (Толковый словарь В.И. Даля).

Некоторые другие примеры игры как из мухи сделать слона:

превратить ночь в день: ночь-ноль-соль-сель-сень-день;
превратить миг в час: миг-маг-май-чай-час;
превратить час в век: час-чёс-вес-век;
превратить век в эру: век-бек-бок-боа-бра-эра;
превратить козу в волка: коза-поза-пола-полк-волк;
превратить шах в мат: шах-мах-мат;
превратить муху в волка: муха-муза-луза-лоза-поза-пола-полк-волк;
превратить муху в удава: муха-мура-фура-фора-кора-корн-коан-клан-улан-улар-удар-удав;
превратить муху в тигра: муха-мура-мира-лира-лива-ливр-литр-титр-тигр;
превратить муху в жабу: муха-муза-буза-база-баба-жаба;
превратить муху в жену: муха-мура-мера-мена-жена;
превратить воду в вино: вода-вона-вина-вино;
превратить лису в лося: лиса-липа-лупа-лужа-ложа-ложь-лось;
превратить бра в раба: бра-боа-бой-рой-рай-раб;
превратить бар в раба: бар-бай-рай-раб;
превратить ГПУ в ЦРУ (шутка): ГПУ-ГРУ-ЦРУ.

Как сделать из мухи слона

Многим известна такая старая добрая игра со словами, сделать из мухи слона. Суть её в том, что нужно из начального слова сделать конечное, на каждом шаге меняя только одну букву, получая при этом на каждом шаге осмысленное существительное.

Известный автор книг по занимательной математике Е. Я. Гик в своей книге «Занимательные математические игры» опубликовал такое 16-ходовое решение, как из мухи сделать слона: муха-мура-тура-тара-кара-каре-кафе-кафр-каюр-каюк-крюк-урюк-урок-срок-сток-стон-слон.

И вот, в один прекрасный день мне довелось заняться решением этой задачи в программном виде.

Из мухи слона, первая версия

Честно признаться, слона из мухи получилось сделать довольно быстро.

Общая идея решения:
— взять словарь существительных
— итеративным алгоритмом пройти от исходного слова в сторону конечного, если получится достичь последнего
— выдать результирующую цепочку, и желательно чтоб она стремилась к минимальной длине

1) Словарь существительных

Оказалось, даже с первым пунктом есть проблемы, — найти стоящий словарь существительных оказалось уже отдельной подзадачей. Не помню где именно, но нашёл сносный готовый словарь. Формат по одному слову на строку, utf8, разделители \r\n — так и оставил в дальнейшем.

2) Алгоритм

Естественно, походя поинтересовался решали ли эту проблему мух и слонов, и как. Хороший вариант решения нашёл тут planetcalc.ru/544. Для только 4 буквенных слов, под яваскрипт (что на самом деле идея правильная для этого приложения — нет смысла гонять серверные мощности, когда поиском может заняться клиентское железо в браузере). Впрочем, исходники не смотрел, а смотрел на здравые рассуждения ниже в статье.

Действительно, если в качестве алгоритма использовать построение дерева со всеми вариантами, пока при прокладке очередного уровня не попадётся искомое слово, то никаких ресурсов не хватит.

Например, у слова КОРА есть 19 переходов только из распространённых слов, пришедших на ум, от «гора» до «корт».

Даже если дать очень оптимистичную оценку на среднее число вариантов модификаций в 5 (всего!), то если к какому-то слову минимальный путь составит 10 шагов, то в памяти должно уместиться дерево в 5 10

= 10 млн нодов. Учитывая накладные расходы на содержание структуры дерева (как минимум, 2 указателя на потомков из предка каждый по 4/8 байт) и на собственно хранение данных нод (языковая/структурная обёртка переменной + сами данные: символы строки в utf8 ещё более 10 байт) получим требование по ОЗУ для таких условий минимум порядка 200-300 Мб. А условия могут быть гораздо хуже.

Выбран генетический алгоритм.
Тем более он тут просто напрашивается — изменение буквы в слове это по сути мутация. Условие выживания потомка при «родах» — существование в словаре. Условие успешности конкуренции, приспособленности — степень схожести с искомым словом.

Весовую функцию честно взял с описания на том же planetcalc.ru/544. Обмыслил почему оно такое, для себя понял так:
— идентичность букв на верных позициях 3 балла: Без комментариев, максимальный балл тут логичен
— гласная, пусть и другая, в нужной позиции 2 балла: Гласную в нужное место гораздо труднее подтащить, зато она потом с помощью мутаций согласных, а таких вариантов больше, легче смутирует уже в нужную гласную. К тому же гласная «задаёт тон» — около неё легче крутятся согласные, в том числе нужные под искомое слово.
— наличие гласной вообще 1 балл: Схожие рассуждения с приведёнными выше, гласную мутировать значительно труднее чем согласные.

Отдельно замечу, что на всём этапе поиска эталонное слово, которое должно получиться и с которым идёт постоянное сравнение, одно и то же. Например тот же слон. Потому «разобранного на куски для сравнения слона» (бедная зверушка) логично в таком анатомическом виде и закэшировать.

Для простоты и недолго думая, соорудил простейший кэш прямо в функции оценки.

Поиск новых вариантов мутаций идёт по словарю и подсловарям, отталкиваясь от заданного слова. При этом есть несколько дополнительных логических ограничений.

Первое ограничение — это допустимые позиции букв для мутации. В самом деле, если на прошлом шаге мы, например, поменяли 3-ю буквы, сделав ход «муХа» — «муЗа», то на следующем шаге мутация «муЗа» — «муРа» лишена смысла. Ведь нам интересна максимально короткая цепочка. А так мы получается делаем заведомо лишний шаг, ведь можно было сразу сделать ход «муХа» — «муРа». Поэтому одним из параметров функции является позиция прошлой мутации.

Второе ограничение — это уникальность слов в цепочке. Объясняется тоже просто. Допустим, есть цепочка «муха» — «мука» — «бука» — «бура» — «мура» — «мука» — «рука». Очевидно, что кусок «мука» — «бука» — «бура» — «мура» был лишним в цепочке. И даже если она дойдёт до финального искомого «слона», то ровно такая же, но цепочка из уникальных слов с выкинутыми повторами будет короче. А значит лучше. Так что такие циклы из-за повторов нам не нужны. Поэтому ещё одним из параметров функции поиска вариантов мутаций делаем массив слов (в данном случае id слов), которые уже были использованы в цепочке.

Параметр длины слова — это я на спичках mb_strlen поэкономил. Так-то метод задумывался приватным, но для проб и тестов был опубличен. Не пускайте такие штуки в продакшн 🙂 Во всяком случае, без охватывающих проверок.

А конечное слово… может человеческая рефлексия какая-то, а может и интуиция, — оставил возможность использования на потом. Всё же логично ожидать от функции получения набора потомков какой-то зависимости от того, на кого похожими они должны получаться. Ничто не мешает делать первичный отсев прямо тут. Но пока — не используется.

3) Работа со словарём

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

При этом, конечно, следует понимать, что в «загруженном и разложенном» в структуру данных ввиде массива, в зависимости от языка словарь будет занимать больше памяти. Для PHP 5.4 получилось что словарь в загруженном виде весит около 6 Мб.

[Здесь же первая мысль о логичности использования БД. Но решил попробовать сделать сначала без неё.]

Однако:
— в PHP array_search тупой перебиратор, сказать ему «эй, массив же сортирован, ищи бинарно» возможности нет, других подходящих функций из коробки нет, играть костылём flip-keyexists не хотелось да и сложно было применить
— даже если б была функция быстрого бинарного поиска в сортированном массиве, имеется проблема поиска по маске с выбитым символом.

3.1) Быстрый поиск по сортированному массиву первого из неуникальных значений

Первое решается велосипедом бинарного поиска для PHP. Одолжил у товарища покататься, terenceyim.wordpress.com/2011/02/01/all-purpose-binary-search-in-php.

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

Использовал правда не как есть, а модифицировал поиск. В случае массива неуникальных элементов посик останавливался на первом попавшемся равном искомом. А мне нужно было чтоб он отдавал позицию самого первого по ключу из одинаковых элементов массива. Смысл — чтобы можно было упростить последующий алгоритм, и при переборе из набора равных просто следовать от найденного ключа вниз по массиву.

Пример: ищем МУА, есть массив (см. ниже) [… 99-МС(т)ИТЕЛЬ, 100-МУ(з)А, 101-МУ(к)А, 102-МУ(р)А, 103-МУ(т)А, 104-МУ(х)А, 105-МУ(р)АВЕЙ, 106-МУ(р)АВЕЙНИК… ] Обычный бинарный поиск попадает очередной итерацией допустим попадает в ключ 102. Значение элемента (МУА, получилось из слова МУРА) равно искомому (МУА, ищем потомков для МУХА) и этот ключ нам и пришёл бы. И потом загромождай логику перебором и вверх и вниз. Модифицированный алгоритм находит именно самый первый, ключ 100, и далее можно идти последовательно вниз по массиву, пока элемент == искомое.

3.2) Вспомогательные словари псевдослов

Второе — прикинул что «оперативка вполне выдержит» и решил сделать через подсловари. Где i-й подсловарь построен из основного словаря с вырезанием i-й буквы из слова. Типа МАШИНА => (i=2) МШИНА. По таким подсловарям можно применять тот же бинарный поиск для случаев выбитых букв на позициях, по которым есть подсловари.

В случае когда выбитая буква слишком далеко от начала слова, и подсловаря под такую позицию нет, то поступаем следующим образом:
— в основном словаре ищем «невыбитое начало»
— от найденной позиции простым перебором идём по массиву вниз, пока элемент (слово) начинается как ищем, имеет нужную длину и собираем в варианты все из таких слов, что и оканчиваются как надо.

Поскольку перебор идёт по ограниченной части словаря, где при старте первая позиция определяется бинарным поиском, уже при трёх подсловарях перебор при рассмотрении выбивания 4-й буквы и старше уже не является фатально узким местом.

Приемлемым компромиссом по память/скорость вышло использование 3-4 подсловарей.

Конечно, абсолютно логично что 5-й подсловарь (где из слов убрана 5-я буква и получившееся пересортировано) для превращения 4-буквенных мухи и слона не нужен, и является только обузой. Но посмотрим на другом примере:

Для сравнения, превращение из «сосна» в «белка»:
— для 4 подсловарей: загрузка 2,41 сек, поиск 1,07 сек, итого 3,48 сек
— для 5 подсловарей: загрузка 3,01 сек, поиск 0,36 сек, итого 3,37 сек

Т.е. 5-й подсловарь можно добавлять разве что после оптимизации хранения словарей, кэширования, алгоритма. А сейчас он только лишнее потребление оперативки.

Но… Но «просто как-то сносно работающий вариант на коленке» меня не устроил. И я продолжил совершенствовать превращение мух в слонов.

Версия вторая

Причесал многое.
Добавил проверок.
Добавил бросание исключений вместо тихо-непонятного умирания.
Выделил конфиг.
Приготовился к переключению на БД — вынес дата-логику в отдельный маппер.
И т.п. по архитектуре.

Но интересно не это. Самые интересные изменения тут это парсер, фактор случайности и функция оценки, основанная на частотных характеристиках букв.

1) Парсер

Я заметил что исходный словарь хоть и достаточно большой, но там почему-то нет даже некоторых общеупотребительных слов. И внимание ))) там не было слона! Слоненок был, слониха была, а слона упс. Дискриминация.

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

[И да, в этом словаре я наткнулся в первый раз (из последующих шишек php sort, несмотря на верную локаль для setlocale и mb_string) что слова на Ё, внезапно, были в конце словаря.]

Решил исправить этот момент, взяв дополнительные слова пусть и не из готового для тех.использования словаря, но хоть откуда.
Немало ссылок вело на chyjik.narod.ru/index.htm, но он внезапно оказался уже который год предан забвению злым Яндексом, купившим в своё время Народ.ру и сломавшим его в погоне за фертингами.

Но тут помог великий вебархив, за что ему спасибо.

Выкачал всё что было, весь сохранившийся «словарь кросвордиста», сохранил в data/psrc/, написал parse.php на регулярке (которую потом несколько раз поправлял, т.к. сайт был у человека, похоже, на MS Word написан, и странички были не совсем идентичны по вёрстке), — расширил словарь процентов на 50%.

2) Фактор случайности

Цепочка получалась всегда одна и та же, что, в общем, очевидно. Чтобы иметь возможность «игры» и «вдруг найти лучше», ввёл фактор случайности на mt_rand в функцию оценки. Стало получаться интереснее. Иногда действительно стали видны новые, более короткие цепочки, о которых раньше и не догадывался.

Есть конечно и обратная сторона — для неудобных пар бывает поиск и не находит цепочки. Или находит несколько длиннее обычной. Но всё же основной случай достаточно стабилен.

Более конкретно, случайность введена «очень слегка» — в функцию сравнения при упорядочивании по приспособленности нового поколения — слова, имеющие одинаковую оценку приспособленности стали располагаться в случайном порядке.

3) Функция оценки

Из МУХА СЛОН получался довольно живенько и симпатично, в пределах 10 переходов.
Но (!)
из МУХА слово СЛОГ получалось… упрямо переходов в 60-70 (!).
А ведь очевидно, что должно бы быть всего на 1 длиннее чем в СЛОНа. Человеку очевидно. Машине нет, она по алгоритму. Ошибка алгоритма. Ошибка функции оценки.

Экспирементировал немало, не скрою.

Получалось ну на 5 позиций укоротить цепочку при сомнительных изменениях в разбалловке. Но это же не тот результат который нужен.
Очевидно, с лёту с корректировки проблема не решалась, думал. В чём дело. В чём разница. Разница в последней букве, да, факт. Там слоН, а тут слоГ. Чем же эти буквы так отличаются, что всё так плохо…

Правильно. Частотой употребления! И соответственно числом связанных вариантов мутаций. То есть, «полный хит по Г=Г» может быть хуже, или по крайней мере не намного лучше для оценки «приспособленности», чем «не хит Н, М, К,… != Г». Но, конечно, гораздо лучше чем «не хиты Ы, Ъ, Щ,… != Г».

Взял таблицу частот употребления букв из вики. (На самом деле это не совсем корректно, надо по имеющемуся словарю существительных частоты считать, но вряд ли бы были кардинальные различия). Вбил как есть в код. Это не очень красиво, да, но это пока и пусть. Раскроил частоты букв на нормированные массивы по гласным и по согласным, с нормировкой по максимально употребительной гласной/согласной. Переписал функцию оценки. ЕСТЬ! СЛОН + 1!

Да и сам СЛОН стал получаться ещё на шаг-другой быстрее.

Новые цифры для трансформации «муха»-«слон»:

Конфигурация T загрузки словарей T поиска T итого Потребление ОЗУ
Только основной словарь 0,04 сек 210 сек 210 сек 9 Мб
1 подсловарь 0,98 сек 26,16 сек 27,14 сек 42 Мб
2 подсловаря 1,97 сек 9,97 сек 11,94 сек 72 Мб
3 подсловаря 2,98 сек 4,72 сек 7,70 сек 102 Мб
4 подсловаря 3,97 сек 1,37 сек 5,34 сек 130 Мб
5 подсловарей 4,96 сек 1,30 сек 6,26 сек 158 Мб

Цепочка: «муха» — «муна» — «мина» — «лина» — «линн» — «лион» — «сион» — «слон» (7 переходов).

Как видим, потяжелел словарь (с 0,68 Мб до 1,03 Мб, +51%), а с ним подсловари и итоговый жор оперативки. Комбинаторика улучшилась, и хоть и на каждом шаге мутаций стало рассыпаться больше, а значит шагать стали медленнее, — конечная цель, при достижимости, стала получаться по результату быстрее, за меньшее число шагов.

Однако, по времени поиск получился совсем не быстрее, даже для 4 подсловарей. Один фактор другой не компенсировал. Тем не менее, по сути расширить словарь абсолютно корректный и необходимый ход для приближения к реальным боевым условиям. И есть ещё множество справочников кроссвордиста и словарей, в том числе онлайновых, с которыми можно поработать для расширения нашего словаря.

Некий деятель науки
ДЕЛАТЬ стал СЛОНА из МУХИ:
Надувал, надувал,
Поглядеть народ позвал.

Удивить он всех хотел…
Ну а слон-то улетел!

Версия третья

Честно признаться, ожидал от версии большего. Всё-таки база (была под рукой MySQL 5.5) должна, ну должна же была обеспечить взлёт хотя бы в разы, если не на порядки.

1) База и скорость?

Судя по всему, в версии с файлами я фактически добился эффекта memcache — куча словарей в памяти, а алгоритм, в общем, един и для файл- и для mysql-версий. В построении базы вроде соображаю, все нужные индексы для работы были проставлены.

Сами файлы меня тормозили только на этапе их загрузки в оперативку — порядка 4 сек. А поиск из мухи слона происходил порядка 0,8 сек. Так что в общем зачёте на доступность побеждает версия MySQL, с «загрузкой» порядка 0,002 сек и поиском порядка 0.95 сек. Понятное дело, загружать ей ничего не требуется, после одного-двух прошлых обращений скрипта, кэш прогрет и всё уже загружено и ждёт.

Так или иначе, ответ за 1 сек лучше чем за 5 сек.

2) Кэширование очевидного узкого места

Изначально, правда, было под 2 сек, из-за обильных запросов SELECT слово ПО ид. Агрессивное кэширование в MySQL-маппере устранило эту проблему. Тоже конечно не оптимальным образом, но и это ещё далеко не хайлоад продакшн, а эксперимент. Вполне терпимо на данном этапе.

Скрипт при этом не потребляет так конски оперативку, как в версии с чисто PHP и файлами словарей (под 100 Мб), потребление самое обычное. Те же данные, хранящиеся в СУБД, ведут себя более пристойно по аппетитам к памяти.

Что дальше?

Безусловно, решение не идеально, я знаю. Многое ещё можно сделать:

  • Вместо одного процесса поиска от начального к искомому, сделать агоритм на двух параллельных процессах поиска: от начального к искомому и от искомого к начальному, с выходом и построением цепочки по первой коллизии пары слов из двух процессов. Насколько я знаю алгоритмы заливки, таклй ход помогает улучшить скорость получения результата в 2-4 раза. Да, генетический алгоритм другой случай, но есть ощущение что вот такое встречное движение и тут даст результат.
  • Сделать горизонтальное масштабирование словаря? Раскидать слова разной длины по разным подтаблицам. Для этой задачи это допустимый ход. Ввиде дополнительного поля длины слова и индекса по нему пробовал, — ничего. Значит только партиционирование. Будет ли от этого толк, впрочем, пока затрудняюсь сказать.
  • Redis? Memcached?
  • Распараллеливание процессов обсчёта поколений генетических мутаций до N штук параллельных процессов, в зависимости от числа ядер на сервере
  • Добавить юзер френдли? В цепочках попадаются такие слова, о которых и не слыхивал. Интересно бы в цепочке на клиенте показывать и значение этих слов.
  • CP1251? Utf-8 это безусловно прекрасно. Но если работать заведомо только с русскими словарями, или же в сущности словаря указывать кодировку, в которой на самом деле хранятся слова, то почему бы и нет. Строгий 1 байт сильно упрощает работу со строкой для железок, и в 2 раза меньше будет кушать памяти. Это явно неплохо.
  • JavaScript версия? В случае массового количества запросов, например хабраэффекта, это неплохая идея — зачем сервер такими вычислениями нагружать, пусть железо на клиенте пыль стряхнёт, кулеры погоняет.
  • Серверная версия на C++?
  • И наверняка другие ходы, которые пока ещё не приходили в голову.

PS:
Конечно, в этой статье нельзя не оставить ссылку на то, как делают из мухи слона художники.

Комментарии и замечания приветствуются! Может упустил какие-то простые и важные вещи. Благодарю за внимание.

Похожие статьи