powered by simpleCommunicator - 2.0.50     © 2025 Programmizd 02
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / Комбинаторика
25 сообщений из 25, страница 1 из 1
Комбинаторика
    #40100751
Djois
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Задача:
есть таблица (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
...
Рейтинг: 0 / 0
Комбинаторика
    #40100755
Djois
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Пока у меня, есть решение, где все возможные комбинации помещаются в отдельную таблицу, и "дубли" удаляются. Но получается громоздко, особенно там где нужно прогнать больше чем 2 числа)
...
Рейтинг: 0 / 0
Комбинаторика
    #40100786
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: vbnet
1.
2.
3.
SELECT *
FROM table AS tbl1
JOIN table AS tbl2 ON tbl1.p1 >= tbl2.p1
...
Рейтинг: 0 / 0
Комбинаторика
    #40101055
Djois
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Akina,

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

Сейчас мудрю с DISTINCT
пока нет результата
...
Рейтинг: 0 / 0
Комбинаторика
    #40101067
Фотография sdku
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Djois

....
1:2 или 2:1
...
Код: vbnet
1.
2.
?"1:2"="2:1"
False

Вопрос в том что и как сравнивать
...
Рейтинг: 0 / 0
Комбинаторика
    #40101071
Фотография sdku
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ПыСы:а тривиальная группировка,не?
...
Рейтинг: 0 / 0
Комбинаторика
    #40101293
ЦЦа
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
sdku,

тривиальный WHERE - да.
Код: sql
1.
2.
3.
4.
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 по вкусу)
...
Рейтинг: 0 / 0
Комбинаторика
    #40101366
Фотография sdku
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
По-моему вся "проблема" в том что задача ТСа довольно абстрактна и я не представляю ситуации когда бы она применялась в реале, где бы стояла подобная задача. А для чего-то подобного необходимо еще на стадии проектирования БД разработать и хорошо продумать систему нумерации\обозначений товаров\продукции\услуг\да мало ли чего
Обычно это так: группа\подгруппа\подподгруппа.(1.1.1 и 2.1.1-3 таблицы) и вполне реально и логично условие типа:объединить записи 1 подгруппы из всех групп.Но мне совершенно не понятно по какому признаку (и с какой целью нужно совершать подобное действо-да и сравнивать текст дело крайне скользкое) ТС хочет объединять записи из разных групп и разных подгрупп-1:2 и 2:1(все это конечно можно разбить на числа и группы\подгруппы но мне все же непонятно по какому КРИТЕРИЮ\УСЛОВИЮ выполнять объединение:типа "поди туда-не знаю куда,принеси то-не знаю что"
как то так....
...
Рейтинг: 0 / 0
Комбинаторика
    #40101418
Фотография vmag
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Djois
Возможно ли? запросом составить уникальные комбинации без учёта последовательности, т. е. в итоге д. б. только три строки т. к. с таким условием строки:
1:2
и
2:1
одинаковые, и остаться должна одна любая строка.
1:1
1:2 или 2:1
2:2


Возможно и без запроса:
Код: vbnet
1.
2.
3.
4.
5.
6.
7.
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 допилить...
Можно тупо записать результат в пустую таблицу и получить редактируемый набор данных...
...
Рейтинг: 0 / 0
Комбинаторика
    #40101419
Фотография vmag
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
vmag
Djois
Возможно ли? запросом составить уникальные комбинации без учёта последовательности, т. е. в итоге д. б. только три строки т. к. с таким условием строки:
1:2
и
2:1
одинаковые, и остаться должна одна любая строка.
1:1
1:2 или 2:1
2:2


Возможно и без запроса:
Код: vbnet
1.
2.
3.
4.
5.
6.
7.
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 допилить...
Можно тупо записать результат в пустую таблицу и получить редактируемый набор данных...


ИМХО это ж КОМБИНАТОРИКА см. название топика...
...
Рейтинг: 0 / 0
Комбинаторика
    #40101468
ЦЦа
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
vmag
Код: vbnet
1.
2.
3.
For i = 1 To 2
 For j = 1 To 2
  If i <= j Then

Это даже школьники средних классов могут cоптимизировать.
...
Рейтинг: 0 / 0
Комбинаторика
    #40101479
Фотография vmag
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ЦЦа
Это даже школьники средних классов могут cоптимизировать.

И....
Не вижу продолжения мысли...
Нужно не просто сделать, а так чтоб за.баЦЦа ?
...
Рейтинг: 0 / 0
Комбинаторика
    #40101588
ИВП
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
sdku
По-моему вся "проблема" в том что задача ТСа довольно абстрактна и я не представляю ситуации когда бы она применялась в реале, где бы стояла подобная задача.

Задачу в реале можно трактовать так.
Числа - номера участников спортивных соревнований.
Например 1-Спартак,2-Динамо...
Тогда матчи
Спартак-Динамо и Динамо-Спартак - одно и то же.
...
Рейтинг: 0 / 0
Комбинаторика
    #40101603
Фотография sdku
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ИВП,
Спартак-Динамо и Динамо-Спартак это совсем не одно и то же.
(каков первый критерий для определения положения в турнирной таблице при равенстве очков??)
...
Рейтинг: 0 / 0
Комбинаторика
    #40101643
ИВП
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
sdku,
Например, нужен суммарный итог в матчах между двумя командами.
В календаре первым указывается хозяин поля.
В шахматах вроде первый играет белыми ЕМНИП.
Для подсчета баланса между участниками неважно, кто записан первым.

Если турнир проводится в одном месте, то порядок следования участников в расписании вообще не имеет значения.
А баланс нужен...
Сейчас играем с ветеранами-одногруппниками подобные турниры, задача актуальна.
...
Рейтинг: 0 / 0
Комбинаторика
    #40101655
Фотография sdku
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ИВП,
Дело в том что БД (то биш её таблицы) должна\ы максимально полно(в объеме определяемом при проектировании БД) описывать предмет(даже если для решения какой-то сиюминутной "хотелки" некоторые данные не понадобятся-т.к. обязательно(поверьте моему опыту) возникнет задача которую без этих данных,казалось бы не нужных, не решить.
Я бы просто сделал так:
-тбл.участники связанную с тбл.игры 1:М
-тбл.игры (результат,когда ну и т.д-в зависимости от нужной Вам информации)
-форма на таблице [игры], разместив на ней 2 поляСоСписком "участники"
и далее простыми запросами извлекать нужную инфу( кто сколько игр сыграл,с какими результатами,набранные очки-создать турнирную таблицу и т.д и т.п - короче все что хотите)
А покажите свою схему данных и вкратце опишите задачу стоящую перед Вами
...
Рейтинг: 0 / 0
Комбинаторика
    #40101737
ЦЦа
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
vmag
И....
Не вижу продолжения мысли...
Нужно не просто сделать, а так чтоб за.баЦЦа ?
Если мосХ готов за.баЦЦа от усилий перехода от
Код: vbnet
1.
2.
3.
For i = 1 To 2
 For j = 1 To 2
  If i <= j Then

к
Код: vbnet
1.
2.
For i = 1 To 2
 For j = i To 2

, то, возможно, ему стоит позанимаЦЦа чем-нибудь другим, чтобы отдохнуть.
...
Рейтинг: 0 / 0
Комбинаторика
    #40101821
Фотография Павел Воронцов
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Djois,

Djois
Akina,

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

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


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

Код: vbnet
1.
2.
3.
SELECT tbl1.p1, tbl2.p1 as p2
FROM table AS tbl1
JOIN table AS tbl2 ON tbl2.p1 >= tbl1.p1
...
Рейтинг: 0 / 0
Комбинаторика
    #40101853
Фотография vmag
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ЦЦа
, то, возможно, ему стоит позанимаЦЦа чем-нибудь другим, чтобы отдохнуть.

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

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

Так ширше смотриЦЦа
...
Рейтинг: 0 / 0
Комбинаторика
    #40101878
Фотография sdku
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вроде бы простая задача,но по-моему надо думать на структурой(я об этом уже говорил),без массива здесь не обойтись. Как-то так(ограничения:числа справа и слева от разделителя \кстати-а откуда он взялся? если его не будет задача решается иначе\-однозначные)
...
Рейтинг: 0 / 0
Комбинаторика
    #40101882
Фотография vmag
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
sdku
роде бы простая задача,но по-моему надо думать на структурой(я об этом уже говорил),без массива здесь не обойтись


так может он просто в какую-то лотерею играет, тупо комбинации, перекрытия, гарантии интересуют...
...
Рейтинг: 0 / 0
Комбинаторика
    #40101888
ЦЦа
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
vmag,

в это
Код: vbnet
1.
2.
3.
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, если хотите продолжать делать вид, что не понимаете о чём речь.
Порядок вывода устанавливаеЦЦа - та-дам! - в операторе вывода:
Код: vbnet
1.
MsgBox i & ":" & j

или
Код: vbnet
1.
MsgBox j & ":" & i

, но какая разниЦЦа, если оба варианта "по ТЗ"? (Отвечать не нужно, вопрос риторический.)
...
Рейтинг: 0 / 0
Комбинаторика
    #40101914
Фотография sdku
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
vmag

так может он просто в какую-то лотерею играет, тупо комбинации, перекрытия, гарантии интересуют...
Именно поэтому и говорилось:
sdku
.....А покажите свою схему данных и вкратце опишите задачу стоящую перед Вами
Ванговать надоело
...
Рейтинг: 0 / 0
Комбинаторика
    #40101958
Фотография vmag
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ЦЦа
Отвечать не нужно, вопрос риторический.

оптимизировать уже оптимизированное потом уже можно бесконечно (до определенной степени)...
я дал раскраску даже не для школьников, а для детсадовцев, а дальше кому как нравится, хоть фломастерами, хоть акварелью... хоть штаны с рубашкой, хоть комбинезон рисуй...
...
Рейтинг: 0 / 0
Комбинаторика
    #40102108
ИВП
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
sdku
Я бы просто сделал так:
-тбл.участники связанную с тбл.игры 1:М
-тбл.игры (результат,когда ну и т.д-в зависимости от нужной Вам информации)

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

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

А вообще про это ВСЁ я написал для того, чтобы показать, что задача, когда надо отобрать все записи вида
А,Б и Б,А
достаточно реальная.
...
Рейтинг: 0 / 0
25 сообщений из 25, страница 1 из 1
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / Комбинаторика
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]