powered by simpleCommunicator - 2.0.60     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / как лучше сделать запрос для определения похожести событий?
12 сообщений из 12, страница 1 из 1
как лучше сделать запрос для определения похожести событий?
    #35271361
horal
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Привет всем!

собственно, есть такая интересная задачка:

У объекта есть события в жизни

каждое событие характирезуется 12-ю параметрами.

нужно найти объекты у которых совпадает наибольшее число событий.

критерий похожести событий: наличие одинаковых параметров.

событие: 0|1 ( т.е. если или нет )
( 12 атрибутов ): 1 0 1 0 1 0 1 0 0 0 1 1

получается, что для каждого объекта нужно взять все события

и каждое событие сравнить с каждым событие других объектов.

как на данный момент решается вопрос:

SELECT MAX(t1+1+t2+1+t3+1+t4+1+t5+1+t6+1+t7+1+t8+1+t9+1+t10+1+t11+1+t12+1) as top
id FROM events where group_id=1 ...

наиболее похожие - там где сумма максимальна.


Можно ли как-то упростить это дело?

подскажите что покурить :-)
...
Рейтинг: 0 / 0
как лучше сделать запрос для определения похожести событий?
    #35271472
Gold_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
а может одно число и побитово устанвливать события. Затем побитово умножать и далеепринимать решение
...
Рейтинг: 0 / 0
как лучше сделать запрос для определения похожести событий?
    #35271479
Фотография Ёш
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
не совсем понятно, а отсутствие события - не является критерием похожести ? если является - то Вам нужно считать ещё и количество нулей.


--
„Истина — это вовсе не то, что можно убедительно доказать, это то, что
делает всё проще и понятнее“ — Антуан де Сент-Экзюпери
...
Рейтинг: 0 / 0
как лучше сделать запрос для определения похожести событий?
    #35271746
Фотография pamir
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Gold_а может одно число и побитово устанвливать события. Затем побитово умножать и далеепринимать решение+1. Каждое событие - число, составленное из битов - параметров события.
Для сравнения событий делаем XOR, у кого больше, тот более похож.
...
Рейтинг: 0 / 0
как лучше сделать запрос для определения похожести событий?
    #35271855
DAISER
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
pamirКаждое событие - число, составленное из битов - параметров события.
Для сравнения событий делаем XOR, у кого больше, тот более похож.
А может, всё-таки, у кого меньше, если XOR? Да и, например, 100000b > 000110b, а первое событие больше похоже.
...
Рейтинг: 0 / 0
как лучше сделать запрос для определения похожести событий?
    #35271931
Фотография pamir
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
DAISER pamirКаждое событие - число, составленное из битов - параметров события.
Для сравнения событий делаем XOR, у кого больше, тот более похож.
А может, всё-таки, у кого меньше, если XOR? Да и, например, 100000b > 000110b, а первое событие больше похоже.Ошибся я немного, после XOR нужно подсчитать количество бит в результате =1 (т.е. количество совпадений). И вот уже это число - у кого больше, тот и более похож.
...
Рейтинг: 0 / 0
как лучше сделать запрос для определения похожести событий?
    #35271935
Фотография pamir
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
pamir DAISER pamirКаждое событие - число, составленное из битов - параметров события.
Для сравнения событий делаем XOR, у кого больше, тот более похож.
А может, всё-таки, у кого меньше, если XOR? Да и, например, 100000b > 000110b, а первое событие больше похоже.Ошибся я немного, после XOR нужно подсчитать количество бит в результате =1 (т.е. количество совпадений). И вот уже это число - у кого больше, тот и более похож.Ну да, у кого МЕНЬШЕ!
Ибо единицы дадут несовпадающие события. Ну или подсчитывать количество нулевых битов.
...
Рейтинг: 0 / 0
как лучше сделать запрос для определения похожести событий?
    #35272100
Фотография Ёш
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
seb=> select * from events;
 id | t1 | t2 | t3 | t4 | group_id
----+----+----+----+----+----------
   1  |   1  |   0  |   1  |   0  |         1 
   2  |   0  |   0  |   0  |   0  |         1 
   3  |   0  |   1  |   0  |   0  |         1 
   4  |   0  |   1  |   1  |   0  |         1 
( 4  rows)

seb=> select *, (a.t1 # b.t1) + (a.t2 # b.t2) + (a.t3 # b.t3) + (a.t4 # b.t4) as d from events a cross join events b;
 id | t1 | t2 | t3 | t4 | group_id | id | t1 | t2 | t3 | t4 | group_id | d
----+----+----+----+----+----------+----+----+----+----+----+----------+---
   1  |   1  |   0  |   1  |   0  |         1  |   1  |   1  |   0  |   1  |   0  |         1  |  0 
   1  |   1  |   0  |   1  |   0  |         1  |   2  |   0  |   0  |   0  |   0  |         1  |  2 
   1  |   1  |   0  |   1  |   0  |         1  |   3  |   0  |   1  |   0  |   0  |         1  |  3 
   1  |   1  |   0  |   1  |   0  |         1  |   4  |   0  |   1  |   1  |   0  |         1  |  2 
   2  |   0  |   0  |   0  |   0  |         1  |   1  |   1  |   0  |   1  |   0  |         1  |  2 
   2  |   0  |   0  |   0  |   0  |         1  |   2  |   0  |   0  |   0  |   0  |         1  |  0 
   2  |   0  |   0  |   0  |   0  |         1  |   3  |   0  |   1  |   0  |   0  |         1  |  1 
   2  |   0  |   0  |   0  |   0  |         1  |   4  |   0  |   1  |   1  |   0  |         1  |  2 
   3  |   0  |   1  |   0  |   0  |         1  |   1  |   1  |   0  |   1  |   0  |         1  |  3 
   3  |   0  |   1  |   0  |   0  |         1  |   2  |   0  |   0  |   0  |   0  |         1  |  1 
   3  |   0  |   1  |   0  |   0  |         1  |   3  |   0  |   1  |   0  |   0  |         1  |  0 
   3  |   0  |   1  |   0  |   0  |         1  |   4  |   0  |   1  |   1  |   0  |         1  |  1 
   4  |   0  |   1  |   1  |   0  |         1  |   1  |   1  |   0  |   1  |   0  |         1  |  2 
   4  |   0  |   1  |   1  |   0  |         1  |   2  |   0  |   0  |   0  |   0  |         1  |  2 
   4  |   0  |   1  |   1  |   0  |         1  |   3  |   0  |   1  |   0  |   0  |         1  |  1 
   4  |   0  |   1  |   1  |   0  |         1  |   4  |   0  |   1  |   1  |   0  |         1  |  0 
( 16  rows)
d - количество различающихся полей в данной паре. соответственно - чем меньше число - тем более "похоже" (меньше битов в соответствующих позициях отличаются)

pamir , если я не путаюсь - то имхо нельзя хорить _число_ и смотреть результат, нужно хорить биты, каждый в отдельности. число нельзя потому-что результат будет зависить от _позиции_ различающихся битов. и он может быть как больше так и меньше :)

например:
Код: plaintext
1.
2.
In [3]: p int('10111', 2) ^ int('10001', 2)
6
разница - два бита
Код: plaintext
1.
2.
In [4]: p int('110111', 2) ^ int('10111', 2)
32
разница - один бит.


--
„Истина — это вовсе не то, что можно убедительно доказать, это то, что
делает всё проще и понятнее“ — Антуан де Сент-Экзюпери
...
Рейтинг: 0 / 0
как лучше сделать запрос для определения похожести событий?
    #35272134
Фотография Ёш
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
pamir pamirОшибся я немного, после XOR нужно подсчитать количество бит в результате =1 (т.е. количество совпадений). И вот уже это число - у кого больше, тот и более похож.Ну да, у кого МЕНЬШЕ!
Ибо единицы дадут несовпадающие события. Ну или подсчитывать количество нулевых битов.точно, что-то не внимательно я Вас прочитал, пропустил Ваш пост про "нужно подсчитать количество бит в результате" - всё правильно :)
...
Рейтинг: 0 / 0
как лучше сделать запрос для определения похожести событий?
    #35272166
horal
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
pamir pamir DAISER pamirКаждое событие - число, составленное из битов - параметров события.
Для сравнения событий делаем XOR, у кого больше, тот более похож.
А может, всё-таки, у кого меньше, если XOR? Да и, например, 100000b > 000110b, а первое событие больше похоже.Ошибся я немного, после XOR нужно подсчитать количество бит в результате =1 (т.е. количество совпадений). И вот уже это число - у кого больше, тот и более похож.Ну да, у кого МЕНЬШЕ!
Ибо единицы дадут несовпадающие события. Ну или подсчитывать количество нулевых битов.

да, нужно подсчитать количество единиц.

Т.е. надо функцию писать какую-то?

или как еще можно подсчитать кол-во единич в результате?

А как правильно использовать BIT_XOR (expr) ?

select * From where t1 XOR 100 = max - как это правильно напистаь?
...
Рейтинг: 0 / 0
как лучше сделать запрос для определения похожести событий?
    #35272208
horal
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Ёш[src]seb=> select * from events;
(4 rows)

seb=> select *, (a.t1 # b.t1) + (a.t2 # b.t2) + (a.t3 # b.t3) + (a.t4 # b.t4) as d from events a cross join events b;




--
„Истина — это вовсе не то, что можно убедительно доказать, это то, что
делает всё проще и понятнее“ — Антуан де Сент-Экзюпери


(a.t3 # b.t3) - Это умножение?
...
Рейтинг: 0 / 0
как лучше сделать запрос для определения похожести событий?
    #35272239
Фотография Ёш
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
horal(a.t3 # b.t3) - Это умножение?это xor
Код: plaintext
1.
2.
3.
4.
seb=> \do
. . .
 pg_catalog | #    | bigint                      | bigint                      | bigint                      | bitwise xor
. . .
...
Рейтинг: 0 / 0
12 сообщений из 12, страница 1 из 1
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / как лучше сделать запрос для определения похожести событий?
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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