0 / 0 / 0
Регистрация: 29.02.2016
Сообщений: 10
1

Полный перебор

24.03.2016, 13:31. Показов 2564. Ответов 2
Метки нет (Все метки)

Всем привет. Когда у нас есть фиксированное количество переменных и для них есть фиксированная область значений очень легко организовать полный перебор использовав n циклов for для каждой переменной, что бы осуществить полный перебор вариантов. Например, имеем A = {a1,a2, ... , an} B = {b1, b2, ... ,bm}, тогда для перебора всех вариантов можно организовать что-то вроде:
C++
1
2
3
for (size_t i = 0; i < A.size(); ++i)
  for (size_t j = 0; j < B.size(); ++j)
  { /* Какое-то действие с A[i] и B[i] */ }
Но как можно организовать полный перебор, когда количество переменных динамически изменяется. Для примера можно взять такую задачу:
На вход подается произвольное арифметическое выражение вида:
A+B*C-3*D (Причем количество переменных заранее не известно). Во второй строке для каждой переменной задается область значений:
A 1, -4, 8
B 3, 7
C 0, 12, -4 , 4
D -1, 1
На выход нужно вывести, таблицу перебора и значение целевой функции:
A B C D Func
1 3 0 -1 ----
1 3 0 1 ----
1 3 12 -1 ----
.................

Что-то не могу никак врубится как-такое организовать по простому?
__________________
Помощь в написании контрольных, курсовых и дипломных работ здесь
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
24.03.2016, 13:31
Ответы с готовыми решениями:

Полный перебор
Добрый день. Возникла такая ситуация. Есть множество Х(други орграфа) и множество W(числа) и...

Как реализовать полный перебор?
Подскажите, можно реализовать полный перебор комбинаций символов? Понятно, что for (int i = 0; i...

полный перебор двоичного набора
Задача в следующем. Есть набор в котором строго N нулей и М единиц. Необходимо перебрать все...

Полный граф
Для заданного списком рёбер графа проверить, является ли он полным. Входные данные Первая...

2
Модератор
2832 / 1997 / 431
Регистрация: 26.03.2015
Сообщений: 7,684
24.03.2016, 16:53 2
Лучший ответ Сообщение было отмечено chezare13 как решение

Решение

Хранить списки переменных в массиве. Для организации циклов потребуется массив индексов.
C#
1
2
3
4
5
6
7
int[] indices = new int[vars.Length];
do
{
    // xi = vars[i][indices[i]]
}
while(Next(indices, vars));
// передаём vars чтобы использовать vars[i].Length для определения верхних границ индексов

Next устроена так же, как прибавление единицы столбиком:
1. находим первый индекс, который можно увеличить (не равен максимально возможному для данной переменной)
2. увеличиваем его на 1
3. все предшествующие индексы устанавливаем в 0
1
0 / 0 / 0
Регистрация: 29.02.2016
Сообщений: 10
24.03.2016, 18:00  [ТС] 3
Точно. Спасибо.
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
24.03.2016, 18:00

Перебор файлов
Этот вопрос не по языку.У меня в папке около 600 файлов без типа.Мне надо каждому из них присвоить...

Перебор матрицы
Как быстро перебрать все элименты вот такой матрици A ????

задача на перебор вариантов
входные данные два массива 1 массив содержит суммы к примеру array(6,6,8) 2-массив содержит...

Полный перебор и сокращенный перебор, путем исключения одного цикла
1) Разработать на основе метода полного перебора программу razmen1 для решения задачи о способах...


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

Или воспользуйтесь поиском по форуму:
3
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2021, vBulletin Solutions, Inc.