Имя: Пароль:
1C
 
Алгоритм получения всех комбинаций значений
,
0 mzelensky
 
17.12.14
12:42
Доброго всем. Имею таблицу значенйи со следующими колонками:

Параметр - ссылка на некий справочник
МассивЗначенийПараметра - массив значений этого параметра. Тип данных элемента массива Строка(50)

Значения в колонке "Параметр" уникальны (не повторяются). Количество элементов в "МассивЗначенийПараметра" произвольно (на практике от 2 до 10). Количество Строк в таблице произвольно (на практике от 2 до 5).

Нужно получить все возможные комбинации значений параметров (порядок значения не имеет, только состав. Т.е. "1"+"2" = "2"+"1").
1 mzelensky
 
17.12.14
12:44
Понятно, что самое банальное - это вложенные циклы по количеству строк в таблице (что соответствует количеству параметров). Но их количество может быть относительно произвольным...

Может как-то рекурсию можно сделать?
2 quest
 
17.12.14
12:44
в ПТУ про цикл не рассказывают уже?
3 mzelensky
 
17.12.14
12:44
(2) Тебе виднее, я ВУЗ заканчивал.
4 quest
 
17.12.14
12:46
(3) Судя по вопросу ты диплом купил.
Теперь мучаешь мозг окружающим
5 mzelensky
 
17.12.14
12:46
Как вариант думаю сгенерировать текст запроса и полным соединением собрать все эти данные. По идее получится то, что нужно
6 mzelensky
 
17.12.14
12:48
(4) Чувак, вроде взрослый дядька, а херней страдаешь. Есть что по сути сказать - говори. А нет - не нужно тут свою обгаженую быдло душенку выворачивать.
7 Garykom
 
гуру
17.12.14
12:49
(5) меня убивают отчетактиповымдописыватели которые только запросы типа изучили и потом ими все делают даже пол подметают...
8 Garykom
 
гуру
17.12.14
12:50
(0) слабо кол-во допустимое элементов в комбинациях сразу сказать?
9 mzelensky
 
17.12.14
12:51
(7) -> (6)
10 quest
 
17.12.14
12:51
(6) еще и бараном обозвали... кастрированым... и просят еще и на халяву сделать.
Твоя задача - 11 класс общеобразовательной школы. Строить из себя тут деву с тонкой душевной организацией - не надо.  Если тупишь так и напиши - "туплю. Заплачу за решение"
11 mzelensky
 
17.12.14
12:52
(8) Слабо прочитать внимательно (0) ?

Количество элементов произвольно!
12 Garykom
 
гуру
17.12.14
12:52
(8)+ т.е. задача в (0) описана хреново, даже не понять что с чем комбинировать хочешь

то ли значения внутри по каждому параметру переставлять-сочетать, то ли значения между параметрами=ссылками уникальными на справочники
13 Garykom
 
гуру
17.12.14
12:53
(11) мда...

усть цыфры 1 2 и 3

сочетания уникальные это 1 и 2, 1 и 3, 2 и 3 и внимание 1-2-3 ну и еще 3 сочетания по 1 элементу 1, 2, 3
14 mzelensky
 
17.12.14
12:54
(12)Читаем внимательно. "Нужно получить все возможные комбинации значений параметров", затем читаем еще раз внимательно "МассивЗначенийПараметра ".

Ты сейчас сам из себя дурака делаешь. Ща пример напишу
15 Garykom
 
гуру
17.12.14
12:55
(14) ...
16 Alex S D
 
17.12.14
12:58
А зачем это нужно? Так.. интересно
17 mzelensky
 
17.12.14
12:58
Исходная таблица
Параметр      значения (через запятую)
П1            1, 2, 3
П2            4, 5
П3            6, 7, 8, 9

То, что нужно получить на выходе

1, 4, 6
1, 4, 7
1, 4, 8
1, 4, 9
1, 5, 6
1, 5, 7
1, 5, 8
1, 5, 9
2, 4, 6

И так далее
18 mzelensky
 
17.12.14
13:00
Заранее количество Параметров (П) не известно и оно может быть ЛЮБЫМ (от 2 до 1000000000). Количество Значенйи параметров (циферок) может быть ЛЮБЫМ (от 2 до 1000000000)
19 Alex S D
 
17.12.14
13:00
Цикл уже предлагали?
20 quest
 
17.12.14
13:00
(19) за цикл тут бараном называют. Чел хочет рекурсию
21 mzelensky
 
17.12.14
13:01
(19) И как ты тут цикл напишешь? Точнее какое количество циклов ты будешь делать?
22 Alex S D
 
17.12.14
13:02
по КоличествоЭлементов
23 ssh2QQ6
 
17.12.14
13:02
(17) а почему на выходе комбинации именно из трех значений?
24 mzelensky
 
17.12.14
13:03
(23) По количество параметров. Если параметров будет 5, то и комбинация будет из 5 значений.
25 palpetrovich
 
17.12.14
13:03
(23) 3 параметра
зы: имхо, цикл в цикле будет монстрячий
26 mzelensky
 
17.12.14
13:04
(22) Это понятно. Я спросил про количество циклов.
27 Йохохо
 
17.12.14
13:04
(21) один цикл с конца параметров, на след итерации спереди лепим текущий уровень
28 DirecTwiX
 
17.12.14
13:07
Добавить(Результат,ПодРез,Уровень) {
  if (Уровень == 0)
    ПодРез = Новый Массив();
  for (i=0; i<Параметры[Уровень].Количество; i++) {
    ПодРез.Добавить(Параметры[Уровень].Получить(i));
    if (Уровень == ЧислоПараметров - 1)
      Результат.Добавить(ПодРез)
    else
      Добавить(Результат, ПодРез, Уровень+1);  
  }
}
29 DirecTwiX
 
17.12.14
13:10
(22) (27) Там количество вложенных циклов должно равняться количеству параметров.

Но пока самая главная интрига затаилась в (16)
30 Йохохо
 
17.12.14
13:13
(29) как то это называется, то ли матрица параметров, то ли размерная сетка типа "цвет, м/ж, размер"
31 GROOVY
 
17.12.14
13:14
Как ДенисЧ продает СП, так я скоро буду торговать учебниками по информатике для 10-11 классов школы.
:)

Без обид.
32 ssh2QQ6
 
17.12.14
13:15
(26) раз порядок не важен, то число комбинаций на выходе можно посчитать по формуле

Если в выборках изn объектов поkобъектов порядок их следования по условию задачи не имеет значения, то размещения, отличающиеся лишь порядком следования, становятся одинаковыми. Число таких одинаковых выборок по k разных объектов, которые получаются друг из друга перестановкой, равно k!
Поэтому, число выборок из n поk без учета порядка следования определяется формулой
http://edu.tltsu.ru/er/book_view.php?book_id=1484&page_id=11156
33 quest
 
17.12.14
13:16
(31) не купит. все деньги на покупку диплома у ТС ушли.
34 mzelensky
 
17.12.14
13:16
(28) В целом суть понятна, но что-то сомнения по поводу работоспособности...Сейчас попробую воспроизвести.

Формирую таблицу обмена данными. Для некоторых параметров значеняи могут выступать в формате "или или" (значенйи может быть Н-ное количество) и таких параметров может быть Н-ное количество.

Например "Мячик красный\зеленый\синий\ размером 20\30\40 см". Соответственно на выходе я получаю
"Мячик красный размером 20 см"
"Мячик красный размером 30 см"
и так далее
35 МихаилМ
 
17.12.14
13:17
+(31)
фактически получается система счисления
для построения всех значений достаточно

знать размерность и порядок
и по ним в 2 циклах сделать построение все возможных значений
36 Михаил Козлов
 
17.12.14
13:19
Если правильно понял задачу, то это полиномиальный коэффициент в клмбинаторике
https://ru.wikipedia.org/wiki/%CC%F3%EB%FC%F2%E8%ED%EE%EC%E8%E0%EB%FC%ED%FB%E9_%EA%EE%FD%F4%F4%E8%F6%E8%E5%ED%F2
37 Михаил Козлов
 
17.12.14
13:20
(36)+ Алгоритм, кстати, можно получить из производящей функции.
38 Йохохо
 
17.12.14
13:21
(36) попал (37) контрольный
39 К_Дач
 
17.12.14
13:26
40 Salimbek
 
17.12.14
13:39
(0) Для N параметров:
Выбрать Т1.Элемент, Т2.Элемент, ..., ТN.Элемент из (Выбрать Элемент из Таблица Где Параметр=1 Сгруппировать По Элемент) Как Т1, (Выбрать Элемент из Таблица Где Параметр=2 Сгруппировать По Элемент) Как Т2, ..., (Выбрать Элемент из Таблица Где Параметр=N Сгруппировать По Элемент) Как ТN
Т.е. сначала получаешь выборку всех параметров, потом динамически строишь по выборке этот запрос.