На входе: строчка из n букв (в основном, русских), например: “абук”, и дополнительное число m, например, 3.
Задача: сгенерировать из букв той строки ВСЕ возможные комбинации длиной m.
Количество этих комбинаций может быть достаточно велико: на первом месте одна из n букв, потом на втором одна из остальных n-1, потом одна из остальных n-2, и т.д.
Всего получается n!/(n-m)! . В вышеуказанном примере – 24 варианта, а если, например, 10 букв, из которых надо сгенерировать 5-буквенные комбинации, то их будет уже 30240.
Ну, я всё-таки довольно квалифицированный программист, поэтому вполне быстро написал эту програмку на питоне. Если кому интересно, могу показать. Но кто тут программисты, попробуйте сначала сами..
Оригинал этой записи в личном блоге.
no subject
Что значит "одна из n букв"?
Если буквы повторяются, скажем, на входе "аабук", то "ааб" - должно появиться на выходе? Или нет? Это разные "а" или одинаковые?
"бук" и "куб" - должны обе появиться?
no subject
Да, если буквы повторяются, они могут совместно появляться на выходе - и "ааб", и "аау", и "аба", и "ака", и "каа", и т.д.
да, и "бук", и "куб", и "бак", и "каб", и всё остальное.
no subject
no subject
no subject
Видимо, более простое - параллельно с массивом букв держать массив bool, показывающий, доступна ли буква, или использована.
При итерации по массиву букв пропускать использованные. Перед передачей вниз - помечать текущую как использованную. ПОсле вызова рекурсии - помечать как доступную.
no subject