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

      или чё ? sad.gif blink.gif
        нет
        всвозможные комбинации элементов массива..
        я ж вроде написал как
        первый элемент и второй
        второй и третий
        пятый , первый и третий
        и т.д.
        мне просто в зависимости от того скока элементов массива скомпонованы надо делать некоторые деиствия
          а.. дык тебе надо алгоритм брутефорса
            а вот алгоритмик не подскажте
            или хотя б где взять?
              тебе надо сгенерировать множество всех подномжеств из шести элементов.
              это легко понять, если взять шесть булевских элементов. если iый элемент 0, то соответсв. номер a[i] будет участвовать в &-операции, в противном случае нет.
              для реализации можешь организовать шесть вложенных циклов for, каждый из которых от 0 до 1 и отвечает за включение iого элемента, легче, если поймешь, организовать рекурсию.
                Выписываешь все числа от 0 до 2^N - 1. Переводишь их в двоичную систему счисления (длину оставляешь N бит). Если на i-том месте стоит 0, то элемента нет, если 1 - элемент есть.

                Или можно круче:
                {Генерация всех подмножеств данного множества}
                Const MaxN = 100; {Максимальное число элементов в множестве}
                Var Bits : Array[1..MaxN] Of Byte; {Массив битов}
                   N : Longint;
                   I : Longint;
                Begin
                ReadLn(N); {Считываем, какого размера множество}
                For I:=1 To N + 1 Do Bits[I]:=0; {Сначала у нас пустое подмножество}
                While (Bits[N + 1] = 0) Do {Пока не все множество состоит из 1}
                 Begin
                  Write('{ '); {Выводим текущее подмножество}
                  For I:=1 To N Do
                   If Bits[I] = 1 Then Write(I, ' ');
                  Writeln('}');
                  I:=1; {Ищем следующее подмножество}
                  While (Bits[I] = 1) Do
                   Begin
                    Bits[I]:=0;
                    Inc(I);
                   End;
                  Bits[I]:=1;
                 End;
                End.

                Принцип тот же, но без перевода чисел в "двоичку".
                  Вариант на С


                  void ExhaustiveSearch( unsigned *massiv, int msize, unsigned *variant, int vsize ){
                   // какой эл. в массиве переберается.
                   // допустим сформировали уже 010 и сейчас лепим все возможные комбинации к 4 элементу.
                   vsize++;
                   // перебеаем все эл. массива
                   for( int i=0;i<msize;i++ ){
                     // прилепляем к варианту текущий эл. массива
                     variant[ vsize-1 ] = massiv[i];
                     // если размер массива варианта еще не состоит из всех комбинаций запускаем себя же, ( префикс ростет )
                     if( vsize < msize )ExhaustiveSearch( massiv, msize, variant, vsize );
                     // вызаваем любую функцию, для того что бы сделать что либо с вариантом.
                     AnyFunction( variant, vsize );
                   }
                  }


                  запускается алгоритм следующим образом:
                   const int N = 4;
                   unsigned massiv[N] = { 0, 1, 0, 1 }, prefix[N];
                   ExhaustiveSearch( massiv, N, prefix );


                  а можно и так
                   const int N = 5;
                   unsigned massiv[N] = { 'p', 'a', 's', 's', 'w' }, prefix[N];
                   ExhaustiveSearch( massiv, N, prefix );


                  wink.gif
                  0 пользователей читают эту тему (0 гостей и 0 скрытых пользователей)
                  0 пользователей:


                  Рейтинг@Mail.ru
                  [ Script execution time: 0.0707 ]   [ 15 queries used ]   [ Generated: 5.10.26, 23:42 GMT ]