-
> Эту проблему решает наличие словаря
А вот и не решает, ибо что мешает из кубиков составлять не словарные слова? Мы так половину алфавита выкинем.
-
На основе словаря для каждой буквы посчитать вероятность встретить в одном слове другую букву.
вроде получится массив 32! элементов
Если в одном слове две буквы встречаются - вероятность их встречи плюс 1/X.
Где X - количество слов в словаре.
и так для каждого слова в словаре и каждой пары букв.
-
хотя всё сложнее :(
Кроме полного перебора не придумал решения.
-
> Kipor © (20.09.16 23:02) [22]
да. днем тож пришел к такому же выводу.
-
и решений будет несколько.
-
> [12] iop © (20.09.16 12:12)
> не длиннее 6 букв есть в русском
Я видел, но забыл. Напомнишь?
-
> Кроме полного перебора не придумал решения.
Количество вариантов при полном переборе в int64 не влезет.
С учетом времени на оценку каждого варианта - жизни точно не хватит.
-
Можно попробовать найти несколько хороших решений,
а потом выбрать из них лучшее.
Делим все буквы на 2 класса по 18 букв:
1 класс. Наиболее частые + наиболее редкие + 3 пустышки
2 класс. Буквы со средней частотой встречаемости.
Понятно, что таких разбиений несколько.
Для каждого из них мы найдем одно или несколько хороших решений.
Как ищем хорошее.
1. Сначала буквы первого класса разбрасываем по кубикам на основе их взаимной неприязни.
2. Затем для каждого полученного варианта проверяем 137.225.088.000 вариантов добавить буквы второго класса.
Думаю, это уже посчитать будет можно.
-
Идея решения [27] в том, что перебираются только те варианты разбросать второй класс,
которые соответствуют только небольшому числу лучших вариантов разбросать первый класс.
-
я б начал с анализа морфологии заданного словаря: приставки, корни, суффиксы...
и в задаче не указано: интересуют только 6-буквенные слова?
-
> картман © (21.09.16 11:18) [29]
При решения этой задачи мы со словами работать по существу не будем.
Слово можно представить как множество из 32 элементов,
т.е. работаем с 32-битными числами вместо слов.
Более того, нам абсолютно не важно, что слова из одинаковых букв
представляются одним и тем же числом, просто учтем их количество.
-
> Требуется разместить буквы на кубиках таким образом, чтобы
> была возможность составить из них наибольшее количество
> слов словаря.
А запрета собирать слова из словаря 2 нет? например требование обяхательно разместить буквы "Й", "Х", "У" на одном кубике?
-
> Sha © (21.09.16 11:39) [30]
думаю, мое предложение упростит перебор:
выбрали самый частый корень
приставки
суффиксы
окончания
посчитали наибольшее кол-во слов для конкретных сочетаний к, п и с - учитывая неповторяемость букв, числа будут весьма умеренными.
распихиваем буквы из полученных частей слов по разным кубикам. Следующий по частотности корень.
Не?
-
> Следующий по частотности корень.
>
ну, чуть сложнее
-
> [32] картман © (21.09.16 12:24)
> Не?
Не. Слова, где в "машинах дышит интеграл", - скукота, пардон.
-
> картман © (21.09.16 12:24) [32]
чем конкретно помогают части слова,
если все то же самое можно проделать с целым словом
и получить более достоверный результат?
-
> картман © (21.09.16 12:24) [32]
Каждый кубик - множество, слово - множество.
Слово не представимо набором кубиков,
если пересекается хотя бы с одним кубиком более, чем двумя элементами.
-
для каждой возможной пары букв (их чуть больше 1000) посчитаем по словарю количество попаданий этой пары в одно слово.
размещение конкретной пары на одном кубике сделает невозможным составление из набора кубиков соответствующего числа слов словаря. теперь есть что минимизировать.
6 букв на кубике - это 15 их пар, всего на 6 кубиках - 80 пар букв (считая без пустых).
пойдем по отсортированному по количеству нахождений списку пар от минимума по направлению к максимуму, строя граф полусовпадающих пар, пока он не поддастся разбиению на 6 частей по 15 ребер каждая.
(в алгоритмах графов не силен, но как-то так)
-
> если все то же самое можно проделать с целым словом
> и получить более достоверный результат?
более ли, учитывая предложенный в [27] алгоритм?
-
> картман © (21.09.16 14:17) [38]
по моим ощущениям - да )
Там фишка в том,
что и для класса среднечастотных букв будет выполнен полный перебор,
и для класса высокочастотных и низкочастотных - тоже полный.
Но раздельный. И раздел только один. Взаимное влияние минимально.
А в случае частей слов, пар, троек и т.п. таких разделов м.б. несколько
и, что самое страшное, взаимное влияние этих разделов никак не учитывается,
и оно, вероятно, может сильнее повлиять на результат.
Конечно, все это мои ощущения, и все надо проверять.
[27] довольно легко программируется.
При наличии готового словаря - за один вечерок можно и результат получить.
Я бы разбивал буквы на 2 множества по 16 штук, без 'ё' было бы проще.
А другие варианты пока только в теории )