Изменения

Перейти к: навигация, поиск

Лексикографический порядок

2097 байт убрано, 03:06, 12 ноября 2011
Нет описания правки
return >
return = //Длины строк и все символы равны
 
== Генерация слов в лексикографическом порядке ==
Попробуем сгенерировать все слова в лексикографическом порядке. Для этого воспользуемся рекурсией.
 
Параметром для рекурсии будет служить префикс, который мы уже записали. Тогда если наш префикс уже длины <tex> L </tex> (которую мы хотим получить), то запишем получившееся слово, и выйдем из рекурсии. Если длина меньше, то будем приписывать по символу, в порядке от меньшего к большему и снова запускать рекурсию от нового префикса.
 
Почему это будет работать? Ну давайте проверим определение: мы генерируем слова одинаковой длины, потому проверим пункт 2.
 
Пусть мы сейчас имеем префикс длины <tex> i </tex> и все строки, начинающихся с префиксов меньших, чем наш уже выведены. Тогда согласно алгоритму мы будем приписывать меньшие символы, и достраивать при помощи рекурсии их до полных строк, то есть перебирать все строки с новым префиксом. А так как мы приписываем символы по увеличению, то все слова с меньшим префиксом мы заведомо переберем, следовательно слова будут в лексикографическом порядке.
 
Приведем псевдокод генерации:
procedure generate(s : string)
if (len(s) == L)
write(s);
exit;
for i = 'a' .. 'z'
generate(s + i)
Анонимный участник

Навигация