Имя: Пароль:
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
Т.е. сначала получаешь выборку всех параметров, потом динамически строишь по выборке этот запрос.