![]() |
Модераторы: Daevaorn |
![]() ![]() ![]() |
|
Веталька |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 338 Регистрация: 2.11.2008 Репутация: нет Всего: 6 |
появилась потребность перебрать массив из 7 элементов (1,2,3,4,5,6,7), нужно получить все варианты, но в количестве 1 штука, то есть
1 2 3 4 5 6 7 12 13 14 15 16 17 21 22 23 24 25 26 27 31.....1234567.....7777777, и замечание элемент 12 = 21, 13=31....2 = 22, 2=222, элементы после запуска цикла будут один на второго накладываться, поэтому те которые повторяются можно вычеркнуть (разумеется один все таки нужно оставить) пробовал сделать цикл в цикле(и так семь штук), но столкнулся с проблемой, количество переборов равно 7^7, а это очень не выгодно, так как комбинаций без повтора всего 7^2 = 128, что можете посоветовать? -------------------- Ради зачета студент идет на все, даже на лекции........................ |
|||
|
||||
mes |
|
|||
любитель ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 7954 Регистрация: 14.1.2006 Репутация: 144 Всего: 250 |
может 2^7 ? очередность вывода имеет значение ? Добавлено через 6 минут и 38 секунд вообщем ловите и допиливайте напильником под свои нужды :
|
|||
|
||||
Веталька |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 338 Регистрация: 2.11.2008 Репутация: нет Всего: 6 |
mes, спасибо, то что искал
![]() -------------------- Ради зачета студент идет на все, даже на лекции........................ |
|||
|
||||
Веталька |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 338 Регистрация: 2.11.2008 Репутация: нет Всего: 6 |
может ктото чтото попроще предложет, этот способ слишком заумный для меня
![]() -------------------- Ради зачета студент идет на все, даже на лекции........................ |
|||
|
||||
Dov |
|
|||
![]() аСинизатор ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1721 Регистрация: 10.5.2003 Где: Эрец-Исраэль Репутация: 15 Всего: 88 |
Рекурсия подойдёт?
Коряво, правда, написал. Но, вроде, работает. Если что, сам подправишь, где нужно..
-------------------- Тут вечности запах томительный, И свежие фрукты дешевые, А климат у нас – изумительный, И только соседи – #уевые. Игорь Губерман. |
|||
|
||||
Веталька |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 338 Регистрация: 2.11.2008 Репутация: нет Всего: 6 |
mes, Dov, спасибо за помощь, вопрос решен
![]() -------------------- Ради зачета студент идет на все, даже на лекции........................ |
|||
|
||||
artsb |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2280 Регистрация: 17.7.2007 Где: центр Вселенной Репутация: 1 Всего: 64 |
А если "расшифровать" его?
Это сообщение отредактировал(а) artsb - 31.1.2010, 00:47 -------------------- Чем отличается умный человек от мудрого? Умный - выпутается из любой ситуации. Мудрый - просто в неё не попадёт. |
|||
|
||||
mes |
|
|||
любитель ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 7954 Регистрация: 14.1.2006 Репутация: 144 Всего: 250 |
В общем происходит так - Просто перебираются все значения от нуля до 1<<arr_len (аналогично 2^arr_len, т.е 2^7 для нашего случая)
потом из битового представления значения итерации строится число, заменяя единичные биты на соответствующий ему элемент массива.. для десятичного сдвига используются *10 и сдвиг происходит только при установленном бите, чтоб не было позиций с нулем в результативном числе. . например 11 итерация 7,6,5,4,3,2,1 // наш массив справа налево, т.е индекс 0 справа 0 0 0 1 0 1 1 // 11 в битовом представлении 0 0 0 3 0 2 1 // позиция в результативном числе (слева направа), итого ((1*10)+2*10)*4 = 124 // еще есть 0*10, но это издержка, которая ни на что не влияет. ![]() Это сообщение отредактировал(а) mes - 31.1.2010, 11:29 |
|||
|
||||
zim22 |
|
|||
![]() depict1 ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2682 Регистрация: 15.1.2009 Где: Украина Репутация: 24 Всего: 69 |
std::next_permutation? Это сообщение отредактировал(а) zim22 - 31.1.2010, 11:54 |
|||
|
||||
mes |
|
|||
любитель ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 7954 Регистрация: 14.1.2006 Репутация: 144 Всего: 250 |
||||
|
||||
zim22 |
|
|||
![]() depict1 ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2682 Регистрация: 15.1.2009 Где: Украина Репутация: 24 Всего: 69 |
Веталька, то, что ты хотел найти - называется сочетания без повторений.
их количество вычисляется по формуле n! / (n - k)! * k! n - размер множества, k - размер выборки тогда подойдёт алгоритм next_combination, который является кандидатом на включение в буст
Это сообщение отредактировал(а) zim22 - 31.1.2010, 12:47 |
|||
|
||||
mes |
|
|||
любитель ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 7954 Регистрация: 14.1.2006 Репутация: 144 Всего: 250 |
тогда уж уж лучше так :
![]() |
|||
|
||||
artsb |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2280 Регистрация: 17.7.2007 Где: центр Вселенной Репутация: 1 Всего: 64 |
Ага. Так действительно лучше, проще и без вызова функции. Я просто даже не жумал о том как можно оптимизировать, просто переписал в более "понятный" вид, так сказать. ![]() -------------------- Чем отличается умный человек от мудрого? Умный - выпутается из любой ситуации. Мудрый - просто в неё не попадёт. |
|||
|
||||
Лешкин |
|
|||
![]() Новичок Профиль Группа: Участник Сообщений: 11 Регистрация: 24.1.2010 Репутация: 1 Всего: 1 |
А если мне нужно сделать перебор только по три элемента с этого же множества?
Добавлено через 2 минуты и 11 секунд З.Ы. С последующей передачей этих переборов в другую функцию... |
|||
|
||||
Веталька |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 338 Регистрация: 2.11.2008 Репутация: нет Всего: 6 |
тебе любые 3 нужно??? или именно для 3х элементов? это подойдет??? -------------------- Ради зачета студент идет на все, даже на лекции........................ |
|||
|
||||
![]() ![]() ![]() |
Правила форума "С++:Общие вопросы" | |
|
Добро пожаловать!
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn |
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | C/C++: Общие вопросы | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |