ШЕ>>2. Ошибка в сборе статистики.
ШЕ>>У нас есть деревья 3х уровней: 0,1,2
__>да, есть такое
стыки слов существенно увеличивают сложность пароля. я думаю это решится если добавить символ пробела и невидимый символ разрыва слов.
Ну я не только стыки имел ввиду.
Насколько я понял из исходников у вас сбор статистики идёт:
неоднозначность
012012012012012
а должно
неоднозначность
012222222222222
Т.к. именно так потом производится генерация паролей
__>мне еще очень нравится идея расширить буквенный алфивит слогами. буквенно-слоговый алфавит сделать или что-то в этом районе. слога брать из букваря за 1ый класс 
Жесть.
Я тоже хотел предложить анализировать слогами.
Не придумал как автоматически выделить их из слова.
То что можно взять готовые, как-то не подумал.
Здравствуйте, Шебеко Евгений, Вы писали:
ШЕ>Ну я не только стыки имел ввиду.
ШЕ>Насколько я понял из исходников у вас сбор статистики идёт:
ШЕ>ШЕ>неоднозначность
ШЕ>012012012012012
ШЕ>
ШЕ>а должно
ШЕ>ШЕ>неоднозначность
ШЕ>012222222222222
ШЕ>
ШЕ>Т.к. именно так потом производится генерация паролей
нееее. это было бы грубой ошибкой. сейчас перепроверил на всякий случай — и сбор статистика и генерация идет 01222222
генерация — вот двойки
while (true)
{
unsigned char ch = tree_2[Letter(ch0).index()*Letter::COUNT+Letter(ch1).index()].extractLetter(counter, bit);
сбор
if (s.length()>=3)
{
tree_0.inc(Letter(s[0])); // нолик
tree_1[Letter(s[0]).index()].inc(Letter(s[1])); // один
for (int i=0; i+2<int(s.length()); i++) // двойки
tree_2[Letter(s[0+i]).index()*Letter::COUNT+Letter(s[1+i]).index()].inc(Letter(s[2+i]));
s.clear(); // строка очищается!
}
однако тут нашел одну ошибку

нужно строку очищать не только когда ее длинна больше или равна 3, а всегда, а то эти одна-две буквы налипнут спереди слудующего слова, что чуть исказит статистику.