Форум программистов, компьютерный форум, киберфорум
C++ Builder
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.84/25: Рейтинг темы: голосов - 25, средняя оценка - 4.84
Ko
 Аватар для Ko
5 / 5 / 2
Регистрация: 23.12.2011
Сообщений: 282

Алгоритм перебора комбинаций

23.12.2011, 06:43. Показов 4995. Ответов 8
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Доброе время суток, хочу попросить помощи в создании алгоритма (возможно даже у кого то он есть) который перебирает комбинации, у меня есть массив из X элементов к примеру из 200 элементов, эти элементы представлены таким образом 0 1 2 3 4 5… 198 199 и я бы хотел получить на выходе комбинации размером Y но чтоб в комбинации не повторялось одно и тоже число. Хотелось бы, чтоб вид комбинаций был таков =>
(2 5 111 131 135) неважно, где какое будет число главное, чтоб в комбинации не повторялось и не было комбинаций (2 5 111 131 135) (135 111 131 2 5) это одно и тоже в моей задачи, условие чтоб все комбинации были уникальны. Спасибо большое заранее всем кто сможет помочь.
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
23.12.2011, 06:43
Ответы с готовыми решениями:

Алгоритм перебора комбинаций 1,2,3-х местных комнат
Помогите составить алгоритм для перебора возможных комбинаций одно-, двух- и трехместных комнат для заданного количества людей... ...

Алгоритм перебора разных комбинаций простых чисел
Доброго времени суток! Решаю разнообразные задачки по программированию, попалась вот такая: Определим функцию P(n,k) следующим...

Упростить код перебора комбинаций
Дан код перебора комбинаций 4 символов, его необходимо упростить, что бы была возможность перебора комбинаций из n-символов. ...

8
27 / 27 / 2
Регистрация: 25.01.2011
Сообщений: 45
23.12.2011, 10:07
Имхо, вам нужно просто перемешать исходный массив, а затем дёргать из него по пять элементов по порядку.
0
Ko
 Аватар для Ko
5 / 5 / 2
Регистрация: 23.12.2011
Сообщений: 282
23.12.2011, 16:48  [ТС]
Цитата Сообщение от arada Посмотреть сообщение
Имхо, вам нужно просто перемешать исходный массив, а затем дёргать из него по пять элементов по порядку.
Нужны комбинации в таком виде
(0 1 2 3 4)
(0 1 2 3 5)
(0 1 2 3 6)

главное чтоб были уникальны, спасибо что откликнулись)
0
Диссидент
Эксперт C
 Аватар для Байт
27714 / 17332 / 3810
Регистрация: 24.12.2010
Сообщений: 38,978
23.12.2011, 17:26
C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
int k[Y];
for(i=0;i<Y;i++) k[i] = i+1;  // Создали начальную комбинацию
while(1) {
  for(i=0; i<Y; i++) printf("%d ", k[i]); // Печать очередной комбинации
  printf("\n");
  for(i=0;i<Y;i++) {
     if (k[Y-i-1] < X-i) {  // Пытаемся сдвинуть...
        k[Y-i-1]++;
        for(j=Y-1; j<Y; j++) k[j] = k[j-1] +  1;
        break;
     }
  }
   if (i==Y) break; // Сдвинуть не удалось, перебор кончился
}
Вот как-то так. Не проверял.
Идея в том, что двигаем последний элемент до упора. 1 2 3 4 200
Теперь двигаем на 1 предпоследний элемент - 1 2 3 5 6. Опять до 1 2 3 5 200
Приходим в конце концов к ситуации 1 2 3 199 200 -> 1 2 4 5 6
И так пока не придем к 196 197 198 199 200. Все
1
Ko
 Аватар для Ko
5 / 5 / 2
Регистрация: 23.12.2011
Сообщений: 282
23.12.2011, 21:39  [ТС]
Цитата Сообщение от Байт Посмотреть сообщение
C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
int k[Y];
for(i=0;i<Y;i++) k[i] = i+1;  // Создали начальную комбинацию
while(1) {
  for(i=0; i<Y; i++) printf("%d ", k[i]); // Печать очередной комбинации
  printf("\n");
  for(i=0;i<Y;i++) {
     if (k[Y-i-1] < X-i) {  // Пытаемся сдвинуть...
        k[Y-i-1]++;
        for(j=Y-1; j<Y; j++) k[j] = k[j-1] +  1;
        break;
     }
  }
   if (i==Y) break; // Сдвинуть не удалось, перебор кончился
}
Вот как-то так. Не проверял.
Идея в том, что двигаем последний элемент до упора. 1 2 3 4 200
Теперь двигаем на 1 предпоследний элемент - 1 2 3 5 6. Опять до 1 2 3 5 200
Приходим в конце концов к ситуации 1 2 3 199 200 -> 1 2 4 5 6
И так пока не придем к 196 197 198 199 200. Все
Огромное спасибо, сейчас попробую исправлю в начале ошибки а потом на С++ перепишу и попробую)
Кстати интересно что такое X, не объявляется даже)

Добавлено через 2 часа 4 минуты
[QUOTE=Байт;2320874]
C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
int k[Y];
for(i=0;i<Y;i++) k[i] = i+1;  // Создали начальную комбинацию
while(1) {
  for(i=0; i<Y; i++) printf("%d ", k[i]); // Печать очередной комбинации
  printf("\n");
  for(i=0;i<Y;i++) {
     if (k[Y-i-1] < X-i) {  // Пытаемся сдвинуть...
        k[Y-i-1]++;
        for(j=Y-1; j<Y; j++) k[j] = k[j-1] +  1;
        break;
     }
  }
   if (i==Y) break; // Сдвинуть не удалось, перебор кончился
}
Вот как-то так. Не проверял.

А Вам не сложно было бы рабочий код написать?) пожалуйста.
0
 Аватар для cpp_developer
20124 / 5691 / 417
Регистрация: 09.04.2010
Сообщений: 22,546
Записей в блоге: 1
23.12.2011, 21:54
Цитата Сообщение от Ko Посмотреть сообщение
А Вам не сложно было бы рабочий код написать?
Перебор комбинаций
подозреваю, что это не единственное подобное решение на форуме, дык, легче ждать, когда разжуют и в рот положат, чем самому сделать минимальное усилие для решения своего же вопроса.
0
Диссидент
Эксперт C
 Аватар для Байт
27714 / 17332 / 3810
Регистрация: 24.12.2010
Сообщений: 38,978
23.12.2011, 23:15
Цитата Сообщение от Ko Посмотреть сообщение
Кстати интересно что такое X, не объявляется даже)
Это твой Х, ты его объявил, это мощность перебираемого множества. Посмотри внимательно на свой стартовый пост.

Цитата Сообщение от Ko Посмотреть сообщение
А Вам не сложно было бы рабочий код написать?) пожалуйста.
Сложно. Я вообще-то не по этому делу. Идейку подкинуть - пожалуйста! А писать "рабочие коды", знаете, своего д-рьма хватает.


Цитата Сообщение от LK Посмотреть сообщение
подозреваю, что это не единственное подобное решение
Безусловно. У Кнута я нашел целых три. А у Витольда Липский - прямо свой. Но я эту штуку сочинял "на ходу". Просто было приятно поразмяться. А то от работы с компонентами VCL мозги начинают буквально ржаветь.

Не по теме:

.И еще. Поначалу мне мальчик показался симпатичным. Идейки ему нужны, видите ли. И я попался на крючок. Ан нет, ему еще нужней "рабочий код".Сорвался я с крючка.

2
 Аватар для cpp_developer
20124 / 5691 / 417
Регистрация: 09.04.2010
Сообщений: 22,546
Записей в блоге: 1
23.12.2011, 23:22
Цитата Сообщение от Байт Посмотреть сообщение
Безусловно. У Кнута я нашел целых три. А у Витольда Липский - прямо свой.

Не по теме:

.И еще. Поначалу мне мальчик показался симпатичным. Идейки ему нужны, видите ли. И я попался на крючок. Ан нет, ему еще нужней "рабочий код".Сорвался я с крючка.

Байт, дык, это поискать надо, а мальчик требует рабочий код без лишних телодвижений . Здесь можно сорваться ... не только с крючка .
1
Диссидент
Эксперт C
 Аватар для Байт
27714 / 17332 / 3810
Регистрация: 24.12.2010
Сообщений: 38,978
23.12.2011, 23:36
LK,

Не по теме:

Где-то я видел такое определение.

Счастье, это когда тебя понимают

2
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
23.12.2011, 23:36
Помогаю со студенческими работами здесь

Оптимизировать код перебора комбинаций
Цель кода: перебор комбинаций символов из заданного набора и запись в файл. Примерно за полчаса сгенерировалось около 700 тыс. вариантов....

За какое минимальное количество перебора комбинаций можно открыть сейф?
Добрый день! Вот такая задача. Клара боится забыть секретную комбинацию цифр, открывающую сейф. Поэтому она решила в зашифрованном...

Нужно написать функцию перебора всех возможных комбинаций для решения головоломки
Дана головоломка как на фото в приложении. Нужно сделать программу которая поможет найти все возможные решения этой головоломки. Брут-форс...

Можно ли создать программу для перебора всех возможных комбинаций цифр заданного большого числа?
Здравствуйте. Я хочу узнать можно ли сделать программу для перебора всех возможных комбинаций из 30 чисел Пример:...

Алгоритм перебора
Делаю алгоритм для перебора символов из словаря переменной длинны строки. Нормально ли в таком случае использовать рекурсию? и можно ли...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
9
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Идентификация объектов на Box2D v3 - использование userData и событий коллизий
8Observer8 02.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-collision-events-sdl3-c. zip https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11680&amp;d=1772460536 Одним из. . .
Реалии
Hrethgir 01.03.2026
Нет, я не закончил до сих пор симулятор. Эта задача сложнее. Не получилось уйти в плавсостав, но оно и к лучшему, возможно. Точнее получалось - но сварщиком в палубную команду, а это значит, в моём. . .
Ритм жизни
kumehtar 27.02.2026
Иногда приходится жить в ритме, где дел становится всё больше, а вовлечения в происходящее — всё меньше. Плотный график не даёт вниманию закрепиться ни на одном событии. Утро начинается с быстрых,. . .
SDL3 для Web (WebAssembly): Сборка библиотек: SDL3, Box2D, FreeType, SDL3_ttf, SDL3_mixer и SDL3_image из исходников с помощью CMake и Emscripten
8Observer8 27.02.2026
Недавно вышла версия 3. 4. 2 библиотеки SDL3. На странице официальной релиза доступны исходники, готовые DLL (для x86, x64, arm64), а также библиотеки для разработки под Android, MinGW и Visual Studio. . . .
SDL3 для Web (WebAssembly): Реализация движения на Box2D v3 - трение и коллизии с повёрнутыми стенами
8Observer8 20.02.2026
Содержание блога Box2D позволяет легко создать главного героя, который не проходит сквозь стены и перемещается с заданным трением о препятствия, которые можно располагать под углом, как верхнее. . .
Конвертировать закладки radiotray-ng в m3u-плейлист
damix 19.02.2026
Это можно сделать скриптом для PowerShell. Использование . \СonvertRadiotrayToM3U. ps1 <path_to_bookmarks. json> Рядом с файлом bookmarks. json появится файл bookmarks. m3u с результатом. # Check if. . .
Семь CDC на одном интерфейсе: 5 U[S]ARTов, 1 CAN и 1 SSI
Eddy_Em 18.02.2026
Постепенно допиливаю свою "многоинтерфейсную плату". Выглядит вот так: https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11617&stc=1&d=1771445347 Основана на STM32F303RBT6. На борту пять. . .
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru