На главную Наши проекты:
Журнал   ·   Discuz!ML   ·   Wiki   ·   DRKB   ·   Помощь проекту
ПРАВИЛА FAQ Помощь Участники Календарь Избранное RSS
msm.ru
! правила раздела Алгоритмы
1. Помните, что название темы должно хоть как-то отражать ее содержимое (не создавайте темы с заголовком ПОМОГИТЕ, HELP и т.д.). Злоупотребление заглавными буквами в заголовках тем ЗАПРЕЩЕНО.
2. При создании темы постарайтесь, как можно более точно описать проблему, а не ограничиваться общими понятиями и определениями.
3. Приводимые фрагменты исходного кода старайтесь выделять тегами code.../code
4. Помните, чем подробнее Вы опишете свою проблему, тем быстрее получите вразумительный совет
5. Запрещено поднимать неактуальные темы (ПРИМЕР: запрещено отвечать на вопрос из серии "срочно надо", заданный в 2003 году)
6. И не забывайте о кнопочках TRANSLIT и РУССКАЯ КЛАВИАТУРА, если не можете писать в русской раскладке :)
Модераторы: Akina, shadeofgray
  
> множество слов
    Не подскажите ли алгоритм для решения следующей задачи:

    Пусть дан алфавит из n букв (символов) A = {a1,a2,...,an}. Нужно найти множество всех слов длины k, состоящих из букв алфавита A (число этих слов - n в степени k).

    Заранее спасибо!
    Сообщение отредактировано: Katz -
      ну, очень просто.

      запускаешь К вложенных циклов, каждый из которых пробегает все значения от a1 До an и каждый jый (j = 1,..k) цикл отвечает за jую букву в слове. так все и переберешь.
      на самом деле, вместо написания циклов я пишу рекурсивную функцию, что в принципе тоже самое, но немного более гибкче.
      вот, например,
      все слова из 2х букв
      ExpandedWrap disabled
        <br>char Alphabet[] = {'a', 'b', ... , 'z'};<br>const int N = 26;<br>for (int i1 = 0; i1 < N; i1++)<br> for (int i2 = 0; i2 < N; i2++)<br> cout<<"Word "<<Alphabet[i1]<<Alphabet[i2]<<endl;<br>

      ну, вообщем идея должна быть видна.
      c помощью рекурсии примерно так
      ExpandedWrap disabled
        <br>char Alphabet[] = {'a', 'b', ... , 'z'};<br>char Word[2];<br><br>int main(){<br>rec_fun(2,0); // вызов функ-ии<br>return 0;<br>}<br><br>void rec_fun(const int WordLen, int depth)<br>{<br>if(depth == WordLen)<br>{<br>cout<<Word<<endl;<br>return;<br>}<br><br>for(int i = 0;i < 26 ; i++)<br>{<br>Word[depth] = Alphabet[i];<br>rec_fun(WordLen,depth+1);<br>}<br>}<br>


      идея тоже должна быть видна.
      Сообщение отредактировано: experimenter -
        Действительно просто  :) :) :)
          Цитата Katz, 09.07.03, 20:23:28
          Действительно просто  :) :) :)

          ну, и что надо сказать?
            Ну спасибо, спасибо  :) :)

              Цитата Katz, 10.07.03, 17:07:05
              Ну спасибо, спасибо  :) :)


              пожалуйста!  ;D
              0 пользователей читают эту тему (0 гостей и 0 скрытых пользователей)
              0 пользователей:


              Рейтинг@Mail.ru
              [ Script execution time: 0,0213 ]   [ 15 queries used ]   [ Generated: 6.10.24, 10:18 GMT ]