Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft Access Новый топик    Ответить
 Комбинаторика  [new]
Djois
Member

Откуда: Минск
Сообщений: 28
Задача:
есть таблица (tbl1) с ключевым полем (р1) где венесены два числа:
1
2

Запрос:
Select tbl0.p1, tbl1.p1
From tbl1, tbl0 as tbl1;

Возвращает все возможные комбинации с учётом последовательности:
1:1
1:2
2:1
2:2

Возможно ли? запросом составить уникальные комбинации без учёта последовательности, т. е. в итоге д. б. только три строки т. к. с таким условием строки:
1:2
и
2:1
одинаковые, и остаться должна одна любая строка.
1:1
1:2 или 2:1
2:2
29 сен 21, 17:38    [22377519]     Ответить | Цитировать Сообщить модератору
 Re: Комбинаторика  [new]
Djois
Member

Откуда: Минск
Сообщений: 28
Пока у меня, есть решение, где все возможные комбинации помещаются в отдельную таблицу, и "дубли" удаляются. Но получается громоздко, особенно там где нужно прогнать больше чем 2 числа)

Сообщение было отредактировано: 29 сен 21, 17:36
29 сен 21, 17:45    [22377523]     Ответить | Цитировать Сообщить модератору
 Re: Комбинаторика  [new]
Akina
Member

Откуда: Зеленоград, Москва, Россия
Сообщений: 21483
SELECT *
FROM table AS tbl1
JOIN table AS tbl2 ON tbl1.p1 >= tbl2.p1


Сообщение было отредактировано: 29 сен 21, 19:40
29 сен 21, 19:51    [22377591]     Ответить | Цитировать Сообщить модератору
 Re: Комбинаторика  [new]
Djois
Member

Откуда: Минск
Сообщений: 28
Akina,

Что-то не фурычит у меня этот вариант :(

Сейчас мудрю с DISTINCT
пока нет результата
30 сен 21, 17:31    [22378042]     Ответить | Цитировать Сообщить модератору
 Re: Комбинаторика  [new]
sdku
Member

Откуда: Краснодар
Сообщений: 7584
Djois

....
1:2 или 2:1
...
?"1:2"="2:1"
False
Вопрос в том что и как сравнивать

Сообщение было отредактировано: 30 сен 21, 17:52
30 сен 21, 18:01    [22378055]     Ответить | Цитировать Сообщить модератору
 Re: Комбинаторика  [new]
sdku
Member

Откуда: Краснодар
Сообщений: 7584
ПыСы:а тривиальная группировка,не?
30 сен 21, 18:07    [22378059]     Ответить | Цитировать Сообщить модератору
 Re: Комбинаторика  [new]
ЦЦа
Member

Откуда:
Сообщений: 81
sdku,

тривиальный WHERE - да.
SELECT t1.p1, t2.p1
FROM tbl1 AS t1, tbl1 AS t2
WHERE t1.p1<=t2.p1
ORDER BY t1.p1, t2.p1;
(ORDER BY по вкусу)
1 окт 21, 13:01    [22378404]     Ответить | Цитировать Сообщить модератору
 Re: Комбинаторика  [new]
sdku
Member

Откуда: Краснодар
Сообщений: 7584
По-моему вся "проблема" в том что задача ТСа довольно абстрактна и я не представляю ситуации когда бы она применялась в реале, где бы стояла подобная задача. А для чего-то подобного необходимо еще на стадии проектирования БД разработать и хорошо продумать систему нумерации\обозначений товаров\продукции\услуг\да мало ли чего
Обычно это так: группа\подгруппа\подподгруппа.(1.1.1 и 2.1.1-3 таблицы) и вполне реально и логично условие типа:объединить записи 1 подгруппы из всех групп.Но мне совершенно не понятно по какому признаку (и с какой целью нужно совершать подобное действо-да и сравнивать текст дело крайне скользкое) ТС хочет объединять записи из разных групп и разных подгрупп-1:2 и 2:1(все это конечно можно разбить на числа и группы\подгруппы но мне все же непонятно по какому КРИТЕРИЮ\УСЛОВИЮ выполнять объединение:типа "поди туда-не знаю куда,принеси то-не знаю что"
как то так....
1 окт 21, 15:33    [22378502]     Ответить | Цитировать Сообщить модератору
 Re: Комбинаторика  [new]
vmag
Member

Откуда: MP
Сообщений: 4229
Djois
Возможно ли? запросом составить уникальные комбинации без учёта последовательности, т. е. в итоге д. б. только три строки т. к. с таким условием строки:
1:2
и
2:1
одинаковые, и остаться должна одна любая строка.
1:1
1:2 или 2:1
2:2


Возможно и без запроса:
For i = 1 To 2
 For j = 1 To 2
  If i <= j Then
   MsgBox i & ":" & j
  End If
 Next j
Next i


Естественно To 2 это будет To N (если не два числа а больше)
И в теле циклов будет MsgBox m(i) & ":" & m(j) где m - массив чисел с N элементами...
Ну и If допилить...
Можно тупо записать результат в пустую таблицу и получить редактируемый набор данных...

Сообщение было отредактировано: 1 окт 21, 18:21
1 окт 21, 18:31    [22378574]     Ответить | Цитировать Сообщить модератору
 Re: Комбинаторика  [new]
vmag
Member

Откуда: MP
Сообщений: 4229
vmag
Djois
Возможно ли? запросом составить уникальные комбинации без учёта последовательности, т. е. в итоге д. б. только три строки т. к. с таким условием строки:
1:2
и
2:1
одинаковые, и остаться должна одна любая строка.
1:1
1:2 или 2:1
2:2


Возможно и без запроса:
For i = 1 To 2
 For j = 1 To 2
  If i <= j Then
   MsgBox i & ":" & j
  End If
 Next j
Next i



Естественно To 2 это будет To N (если не два числа а больше)
И в теле циклов будет MsgBox m(i) & ":" & m(j) где m - массив чисел с N элементами...
Ну и If допилить...
Можно тупо записать результат в пустую таблицу и получить редактируемый набор данных...


ИМХО это ж КОМБИНАТОРИКА см. название топика...
1 окт 21, 18:34    [22378575]     Ответить | Цитировать Сообщить модератору
 Re: Комбинаторика  [new]
ЦЦа
Member

Откуда:
Сообщений: 81
vmag
For i = 1 To 2
 For j = 1 To 2
  If i <= j Then
Это даже школьники средних классов могут cоптимизировать.
1 окт 21, 22:24    [22378638]     Ответить | Цитировать Сообщить модератору
 Re: Комбинаторика  [new]
vmag
Member

Откуда: MP
Сообщений: 4229
ЦЦа
Это даже школьники средних классов могут cоптимизировать.

И....
Не вижу продолжения мысли...
Нужно не просто сделать, а так чтоб за.баЦЦа ?

Сообщение было отредактировано: 1 окт 21, 23:41
1 окт 21, 23:49    [22378652]     Ответить | Цитировать Сообщить модератору
 Re: Комбинаторика  [new]
ИВП
Member

Откуда:
Сообщений: 466
sdku
По-моему вся "проблема" в том что задача ТСа довольно абстрактна и я не представляю ситуации когда бы она применялась в реале, где бы стояла подобная задача.

Задачу в реале можно трактовать так.
Числа - номера участников спортивных соревнований.
Например 1-Спартак,2-Динамо...
Тогда матчи
Спартак-Динамо и Динамо-Спартак - одно и то же.
3 окт 21, 11:58    [22378844]     Ответить | Цитировать Сообщить модератору
 Re: Комбинаторика  [new]
sdku
Member

Откуда: Краснодар
Сообщений: 7584
ИВП,
Спартак-Динамо и Динамо-Спартак это совсем не одно и то же.
(каков первый критерий для определения положения в турнирной таблице при равенстве очков??)
3 окт 21, 13:25    [22378866]     Ответить | Цитировать Сообщить модератору
 Re: Комбинаторика  [new]
ИВП
Member

Откуда:
Сообщений: 466
sdku,
Например, нужен суммарный итог в матчах между двумя командами.
В календаре первым указывается хозяин поля.
В шахматах вроде первый играет белыми ЕМНИП.
Для подсчета баланса между участниками неважно, кто записан первым.

Если турнир проводится в одном месте, то порядок следования участников в расписании вообще не имеет значения.
А баланс нужен...
+
Сейчас играем с ветеранами-одногруппниками подобные турниры, задача актуальна.


Сообщение было отредактировано: 3 окт 21, 20:28
3 окт 21, 20:37    [22378935]     Ответить | Цитировать Сообщить модератору
 Re: Комбинаторика  [new]
sdku
Member

Откуда: Краснодар
Сообщений: 7584
ИВП,
Дело в том что БД (то биш её таблицы) должна\ы максимально полно(в объеме определяемом при проектировании БД) описывать предмет(даже если для решения какой-то сиюминутной "хотелки" некоторые данные не понадобятся-т.к. обязательно(поверьте моему опыту) возникнет задача которую без этих данных,казалось бы не нужных, не решить.
Я бы просто сделал так:
-тбл.участники связанную с тбл.игры 1:М
-тбл.игры (результат,когда ну и т.д-в зависимости от нужной Вам информации)
-форма на таблице [игры], разместив на ней 2 поляСоСписком "участники"
и далее простыми запросами извлекать нужную инфу( кто сколько игр сыграл,с какими результатами,набранные очки-создать турнирную таблицу и т.д и т.п - короче все что хотите)
А покажите свою схему данных и вкратце опишите задачу стоящую перед Вами
3 окт 21, 22:20    [22378957]     Ответить | Цитировать Сообщить модератору
 Re: Комбинаторика  [new]
ЦЦа
Member

Откуда:
Сообщений: 81
vmag
И....
Не вижу продолжения мысли...
Нужно не просто сделать, а так чтоб за.баЦЦа ?
Если мосХ готов за.баЦЦа от усилий перехода от
For i = 1 To 2
 For j = 1 To 2
  If i <= j Then
к
For i = 1 To 2
 For j = i To 2
, то, возможно, ему стоит позанимаЦЦа чем-нибудь другим, чтобы отдохнуть.
4 окт 21, 11:29    [22379065]     Ответить | Цитировать Сообщить модератору
 Re: Комбинаторика  [new]
Павел Воронцов
Member

Откуда: Новосибирск
Сообщений: 2400
Блог
Djois,

Djois
Akina,

Что-то не фурычит у меня этот вариант :(

Сейчас мудрю с DISTINCT
пока нет результата


Это был правильный ответ. Почему он Вас не устроил?

SELECT tbl1.p1, tbl2.p1 as p2
FROM table AS tbl1
JOIN table AS tbl2 ON tbl2.p1 >= tbl1.p1
4 окт 21, 15:18    [22379179]     Ответить | Цитировать Сообщить модератору
 Re: Комбинаторика  [new]
vmag
Member

Откуда: MP
Сообщений: 4229
ЦЦа
, то, возможно, ему стоит позанимаЦЦа чем-нибудь другим, чтобы отдохнуть.

там в
If i <= j Then
Заложено это...
Djois
1:2
и
2:1
одинаковые, и остаться должна одна любая строка.

Если поменять <= на >= то получим не 1:2, а 2:1

Так ширше смотриЦЦа
4 окт 21, 16:31    [22379224]     Ответить | Цитировать Сообщить модератору
 Re: Комбинаторика  [new]
sdku
Member

Откуда: Краснодар
Сообщений: 7584
Вроде бы простая задача,но по-моему надо думать на структурой(я об этом уже говорил),без массива здесь не обойтись. Как-то так(ограничения:числа справа и слева от разделителя \кстати-а откуда он взялся? если его не будет задача решается иначе\-однозначные)

К сообщению приложен файл (tmp.rar - 16Kb) cкачать

Сообщение было отредактировано: 4 окт 21, 17:17
4 окт 21, 17:25    [22379261]     Ответить | Цитировать Сообщить модератору
 Re: Комбинаторика  [new]
vmag
Member

Откуда: MP
Сообщений: 4229
sdku
роде бы простая задача,но по-моему надо думать на структурой(я об этом уже говорил),без массива здесь не обойтись


так может он просто в какую-то лотерею играет, тупо комбинации, перекрытия, гарантии интересуют...
4 окт 21, 17:37    [22379268]     Ответить | Цитировать Сообщить модератору
 Re: Комбинаторика  [new]
ЦЦа
Member

Откуда:
Сообщений: 81
vmag,

в это
For i = 1 To 2
 For j = 1 To 2
  If i <= j Then
захардкодено (или захардкожено?) n*(n-1)/2 пустых итераций. Нет никаких "широких" смыслов, только трата ресурсов. И да, n*(n-1)/2 = 1 при n = 2, если хотите продолжать делать вид, что не понимаете о чём речь.
Порядок вывода устанавливаеЦЦа - та-дам! - в операторе вывода:
MsgBox i & ":" & j
или
MsgBox j & ":" & i
, но какая разниЦЦа, если оба варианта "по ТЗ"? (Отвечать не нужно, вопрос риторический.)
4 окт 21, 17:46    [22379276]     Ответить | Цитировать Сообщить модератору
 Re: Комбинаторика  [new]
sdku
Member

Откуда: Краснодар
Сообщений: 7584
vmag

так может он просто в какую-то лотерею играет, тупо комбинации, перекрытия, гарантии интересуют...
Именно поэтому и говорилось:
sdku
.....А покажите свою схему данных и вкратце опишите задачу стоящую перед Вами
Ванговать надоело
4 окт 21, 19:46    [22379316]     Ответить | Цитировать Сообщить модератору
 Re: Комбинаторика  [new]
vmag
Member

Откуда: MP
Сообщений: 4229
ЦЦа
Отвечать не нужно, вопрос риторический.

оптимизировать уже оптимизированное потом уже можно бесконечно (до определенной степени)...
я дал раскраску даже не для школьников, а для детсадовцев, а дальше кому как нравится, хоть фломастерами, хоть акварелью... хоть штаны с рубашкой, хоть комбинезон рисуй...
5 окт 21, 00:06    [22379392]     Ответить | Цитировать Сообщить модератору
 Re: Комбинаторика  [new]
ИВП
Member

Откуда:
Сообщений: 466
sdku
Я бы просто сделал так:
-тбл.участники связанную с тбл.игры 1:М
-тбл.игры (результат,когда ну и т.д-в зависимости от нужной Вам информации)

Схемы окончательной пока нет. Пока в Екселе есть табличка.
Но план примерно такой.
Тбл.игры (КодИгры, КомандаА, КомандаБ, ГолыА, ГолыБ, ДатаИгры.......)
Тбл.участники (КодУчастника, Участник....)
Две связи Тбл.Игры с Тбл.участники и Тбл.участники1
sdku
-форма на таблице [игры], разместив на ней 2 поляСоСписком "участники"
и далее простыми запросами извлекать нужную инфу( кто сколько игр сыграл,с какими результатами,набранные очки-создать турнирную таблицу и т.д и т.п - короче все что хотите)

Примерно такая форма на тбл.Игры пока в работе

А вообще про это ВСЁ я написал для того, чтобы показать, что задача, когда надо отобрать все записи вида
А,Б и Б,А
достаточно реальная.
5 окт 21, 14:40    [22379651]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft Access Ответить