свести задачу к мат.модели?
От: dunamo  
Дата: 08.02.17 11:55
Оценка:
Возможно-ли свести к какой-либо математической модели оптимизацию решения след. задачи —

Есть множество элементов. Элементы имеют набор атрибутов. Каждый атрибут может иметь одно или несколько значений.
Выбрать удовлетворяющие запросу.

Данные редко-изменяемые. Есть возможность выполнить какие-то предварительные расчеты, свести к системе уравнений, матрице и ТД.


Например:

Есть страны и языки. Есть список людей, для которых задано какие страны он посещал и какими языками владеет.

Запрос:

Выбрать людей которые посещали одну из заданных стран и владеют одним из заданных языков.


понятно, что есть прямой перебор, выбор по индексу с обработкой уже выбранных и ТД.

хотелось оптимизировать задачу математически.
например, сразу отбросить те элементы, которые не удовлетворяют заданному набору значений атрибутов (запросу).
Re: свести задачу к мат.модели?
От: Code Digger Грузия  
Дата: 08.02.17 12:13
Оценка: +3 :)
Здравствуйте, dunamo, Вы писали:

D>Возможно-ли свести к какой-либо математической модели оптимизацию решения след. задачи —


D>Есть множество элементов. Элементы имеют набор атрибутов. Каждый атрибут может иметь одно или несколько значений.

D>Выбрать удовлетворяющие запросу.

Есть такая мат. модель. Называется "реляционная алгебра". Очень рекомендую.
Re[2]: свести задачу к мат.модели?
От: dinama  
Дата: 08.02.17 12:32
Оценка:
CD>Есть такая мат. модель. Называется "реляционная алгебра". Очень рекомендую.

можно было просто написать "я умный".
у меня есть структура данных в памяти и язык программирования нереляционный. построить индексы атрибутов и организовать перебор не проблема. хочется красивого.
Re: свести задачу к мат.модели?
От: Буравчик Россия  
Дата: 08.02.17 15:27
Оценка:
Здравствуйте, dunamo, Вы писали:

D>Возможно-ли свести к какой-либо математической модели оптимизацию решения след. задачи —


D>Есть множество элементов. Элементы имеют набор атрибутов. Каждый атрибут может иметь одно или несколько значений.

D>Выбрать удовлетворяющие запросу.

Примеры запросов "в студию"
Best regards, Буравчик
Re[2]: свести задачу к мат.модели?
От: dinama  
Дата: 08.02.17 15:36
Оценка:
Б>Примеры запросов "в студию"


в первом сообщении-же пример.
это не база данных и не sql.
Re[3]: свести задачу к мат.модели?
От: Qulac Россия  
Дата: 08.02.17 15:50
Оценка:
Здравствуйте, dinama, Вы писали:

Б>>Примеры запросов "в студию"



D>в первом сообщении-же пример.

D>это не база данных и не sql.

Можно представить в виде множеств: множество тех кто бы в этой стране, множество тех кто знает такой-то язык и т.д. Ну операции с этими множествами. Это всё равно не далеко от реляционной алгебры.
Программа – это мысли спрессованные в код
Re[4]: свести задачу к мат.модели?
От: dinama  
Дата: 08.02.17 15:57
Оценка:
Q>Можно представить в виде множеств: множество тех кто бы в этой стране, множество тех кто знает такой-то язык и т.д. Ну операции с этими множествами. Это всё равно не далеко от реляционной алгебры.

ну это и есть последовательный перебор. только много множеств не нужно — выбираем А, из тех выбираем Б и тд.
это если не ошибаюсь — M*N*log(K) (M- число элеметнов, N число арибутов, К число значений атрибута)

а хочется какой-нибудь многомерной матрицы пространства и вычисление подпространства, или отбрасывание подпространства. в одно математическое действие )
Re[5]: свести задачу к мат.модели?
От: Qulac Россия  
Дата: 08.02.17 16:11
Оценка:
Здравствуйте, dinama, Вы писали:



Q>>Можно представить в виде множеств: множество тех кто бы в этой стране, множество тех кто знает такой-то язык и т.д. Ну операции с этими множествами. Это всё равно не далеко от реляционной алгебры.


D>ну это и есть последовательный перебор. только много множеств не нужно — выбираем А, из тех выбираем Б и тд.

D>это если не ошибаюсь — M*N*log(K) (M- число элеметнов, N число арибутов, К число значений атрибута)

D>а хочется какой-нибудь многомерной матрицы пространства и вычисление подпространства, или отбрасывание подпространства. в одно математическое действие )


Это типа данные представляются в виде точки в n-мерном пространстве, где координаты это значение одного из атрибутов? Тогда выборка это просто взятие n-мерного куба из этого пространства. Дело в том, что на бумаге это может выглядеть как одна простая операция, типа квадратного корня, а на деле требует много операций для своего вычисления.
Программа – это мысли спрессованные в код
Re[6]: свести задачу к мат.модели?
От: dinama  
Дата: 08.02.17 16:19
Оценка: +1
Q>Это типа данные представляются в виде точки в n-мерном пространстве, где координаты это значение одного из атрибутов? Тогда выборка это просто взятие n-мерного куба из этого пространства. Дело в том, что на бумаге это может выглядеть как одна простая операция, типа квадратного корня, а на деле требует много операций для своего вычисления.


да, что-нибудь эдакое. мозг совсем уже атрофировался от ширпотребных задач.
Отредактировано 08.02.2017 16:20 dinama . Предыдущая версия .
Re[7]: свести задачу к мат.модели?
От: Джеффри  
Дата: 08.02.17 18:36
Оценка: 8 (2)
Здравствуйте, dinama, Вы писали:

D>да, что-нибудь эдакое. мозг совсем уже атрофировался от ширпотребных задач.


Я думаю, что тут многое зависит от того, какого вида будут запросы. Например, только операции равенства / вхождение в множество или могут быть больше / меншье. Дальше, как запросы могут комбинироваться друг с другом — например, могут ли быть запросы вида "или ... или ...".

Как вариант, можно посмотреть на фильтры Блума:

Фильтр Блума (англ. Bloom filter) — это вероятностная структура данных, позволяющая компактно хранить множество элементов и проверять принадлежность заданного элемента к множеству:
...
Объединение и пересечение двух фильтров Блума одинакового размера и c одинаковым множеством хеш-функций может быть реализовано побитовыми операциями OR и AND над их битовыми массивами.

Re: свести задачу к мат.модели?
От: ksandro Мухосранск  
Дата: 09.02.17 13:30
Оценка:
Здравствуйте, dunamo, Вы писали:

D>Возможно-ли свести к какой-либо математической модели оптимизацию решения след. задачи —


D>Есть множество элементов. Элементы имеют набор атрибутов. Каждый атрибут может иметь одно или несколько значений.

D>Выбрать удовлетворяющие запросу.

D>Данные редко-изменяемые. Есть возможность выполнить какие-то предварительные расчеты, свести к системе уравнений, матрице и ТД.



D>

D>Например:

D>Есть страны и языки. Есть список людей, для которых задано какие страны он посещал и какими языками владеет.

D>Запрос:

D>Выбрать людей которые посещали одну из заданных стран и владеют одним из заданных языков.


D>понятно, что есть прямой перебор, выбор по индексу с обработкой уже выбранных и ТД.


D>хотелось оптимизировать задачу математически.

D>например, сразу отбросить те элементы, которые не удовлетворяют заданному набору значений атрибутов (запросу).

Обычная хэш таблица. В качестве ключа должна быть комбинация из страны и языка (ну или нужных атрибутов), в качестве значения человек. Сразу при создании кидаем человека в хэш таблицу, а потом по ключу быстро и легко вытаскиваем нужных людей из таблицы.

Тут только надо правильно скомбинировать атрибуты и придумать, что лучше использовать в качестве хэша. Но, думаю это детали реализации.
Re[7]: свести задачу к мат.модели?
От: ksandro Мухосранск  
Дата: 09.02.17 13:44
Оценка:
Здравствуйте, dinama, Вы писали:


Q>>Это типа данные представляются в виде точки в n-мерном пространстве, где координаты это значение одного из атрибутов? Тогда выборка это просто взятие n-мерного куба из этого пространства. Дело в том, что на бумаге это может выглядеть как одна простая операция, типа квадратного корня, а на деле требует много операций для своего вычисления.


Поздравляю, вы изобрели хэш-функцию!!!! Надо еще немного напрячь мозги и подумать над структурой данных, как это все хранить и, может быть, изобретете хэш таблицу


D>да, что-нибудь эдакое. мозг совсем уже атрофировался от ширпотребных задач.


Народ, помоему вы все как-то сильно переусложнили, это одна из самых ширпотребных задач.
Отредактировано 09.02.2017 13:50 ksandro . Предыдущая версия .
Re[8]: свести задачу к мат.модели?
От: dinama  
Дата: 10.02.17 10:07
Оценка:
Д>Как вариант, можно посмотреть на фильтры Блума:

интересная идейка. надо только свести наборы атрибутов/запрос к данным которые будут хешироваться.
но эта тема для фильтрации запросов, которые точно ничего не найдут.
Отредактировано 10.02.2017 10:41 dinama . Предыдущая версия .
Re[2]: свести задачу к мат.модели?
От: dinama  
Дата: 10.02.17 10:12
Оценка:
K>Обычная хэш таблица.

не совсем обычная.
для каждого сочетания атрибутов элемента — одно значение. и для запроса аналогично.
E элементов
A атрибутов
N значений каждого атрибута
посчитайте сколько получится паросочетаний.
и с запросом придется то-же самое делать. и опять-же для каждого паросочетания атрибутов в запросе — множество, которое затем пересекать.
Re[3]: свести задачу к мат.модели?
От: ksandro Мухосранск  
Дата: 10.02.17 13:31
Оценка:
Здравствуйте, dinama, Вы писали:

K>>Обычная хэш таблица.


D>не совсем обычная.

D>для каждого сочетания атрибутов элемента — одно значение. и для запроса аналогично.
D>E элементов
D>A атрибутов
D>N значений каждого атрибута
D>посчитайте сколько получится паросочетаний.
D>и с запросом придется то-же самое делать. и опять-же для каждого паросочетания атрибутов в запросе — множество, которое затем пересекать.

Может я не совсем задачу понял задачу...

Атрибуты по которым делается запрос известны заранее. Из комбинации атрибутов создаем ключ.Все это засовывается в стандартный контейнер (unordered_map в с++, HashMap в java).
Ключ и такую коллекцию создаете для каждой комбинации атрибутов по которой может делаться запрос.

Или у вас комбинации атрибутов по котором будут делаться запросы неизвестна заранее и пользователь каждый раз задает набор из множества атрибутов для нового запроса?
Re[4]: свести задачу к мат.модели?
От: dinama  
Дата: 10.02.17 13:36
Оценка:
K>Может я не совсем задачу понял задачу...
K>Атрибуты по которым делается запрос известны заранее. Из комбинации атрибутов создаем ключ.Все это засовывается в стандартный контейнер (unordered_map в с++, HashMap в java).
K>Ключ и такую коллекцию создаете для каждой комбинации атрибутов по которой может делаться запрос.
K>Или у вас комбинации атрибутов по котором будут делаться запросы неизвестна заранее и пользователь каждый раз задает набор из множества атрибутов для нового запроса?


коллекция к которой делается запрос — неизменяема.
а запросы могут быть разные.
так-что если делать "ключ" из комбинаций атрибутов, то это могут быть десятки миллионов ключей.
если например, в коллекции 1000 элементов. по 10 атрибутов, которые имеют по 30 значений, то это
300000 тысяч ключей.

если пришел запрос, в котором для каждого атрибута задано по 10 допустимых значений, то это
100 запросов к хештаблице, с последующей вставкой в упорядоченый список.

сомнительная оптмизация.

лучше уж как выше написали отбросить фильтром Блума невалидные запросы, а дальше по старинке.
Re[5]: свести задачу к мат.модели?
От: ksandro Мухосранск  
Дата: 10.02.17 14:28
Оценка:
Здравствуйте, dinama, Вы писали:

D>коллекция к которой делается запрос — неизменяема.

D>а запросы могут быть разные.
D>так-что если делать "ключ" из комбинаций атрибутов, то это могут быть десятки миллионов ключей.
D>если например, в коллекции 1000 элементов. по 10 атрибутов, которые имеют по 30 значений, то это
D>300000 тысяч ключей.

Мы оптимизируем память или время работы?

Похоже я все таки не понял задачу. Будет ли каждый запрос включать все 10 атрибутов, или в одном запросе может быть 1 атрибут, в другом например первый и третий атрибуты и тд.

Хэш таблица будет хранить не все 300000 ключей а их хеши, которых будет меньше. Но если коллекция порядка 1000 элементов то на практике все оптимизации только ухудшат скорость работы. Линейный поиск будет давать лучший результат. В изначальном примере было только 2 атрибута.


D>если пришел запрос, в котором для каждого атрибута задано по 10 допустимых значений, то это

D>100 запросов к хештаблице, с последующей вставкой в упорядоченый список.

Ну да, 10 атрибутов по 10 значений, в результате вы должны достать из таблицы 100 элементов, и да для этого надо 100 запросов. Если у вас хорошие хэш функции то можно считать что сложность запроса O(1)

Про последующую вставку в упорядоченный список ничего не говорилось. Можно поподробнее про это?
Отредактировано 10.02.2017 14:46 ksandro . Предыдущая версия . Еще …
Отредактировано 10.02.2017 14:30 ksandro . Предыдущая версия .
Re[6]: свести задачу к мат.модели?
От: dinama  
Дата: 10.02.17 14:50
Оценка:
K>И вообще если коллекция порядка 1000 элементов то на практике все оптимизации только ухудшат скорость работы. Линейный поиск будет давать лучший результат.

на самом дели три разные ситуации:

1. большинство запросов не имеют результат
2. каждый результативный запрос извлекает большинство элементов
3. каждый запрос извлекает минимальное количество элементов

в первом случае оптимизацией будет отбросить "заведомо нерезультативные запросы" (например, упомянутый тут фильтр Блума)
во-втором случае — оптимизации не требуются
в третьем случае — здорово было-бы извлекать быстро удовлетворяющие запросу элементы

K>Про последующую вставку в упорядоченный список ничего не говорилось. Можно поподробнее про это?


если элемент Е имеет значения атрибута A (a1, a2) и атрибута B (b1, b2)
то в хеш этот элемент должен быть вставлен 4 раза: a1b1 a2b1 a1b2 a2b2

для получения результирующей выборки нам нужно исключить дубликаты, т.е. это будет упорядоченое множество, вставка в которое — дополнительное логарифмическое время.
Отредактировано 10.02.2017 15:34 dinama . Предыдущая версия .
Re[7]: свести задачу к мат.модели?
От: ksandro Мухосранск  
Дата: 10.02.17 15:27
Оценка:
Здравствуйте, dinama, Вы писали:

D>если элемент Е имеет значения атрибута A (a1, a2) и атрибута B (b1, b2)

D>то в хеш этот элемент должен быть вставлен 4 раза: a1b1 a2b1 a1b2 a2b2

D>для получения результирующей выборки нам нужно исключить дубликаты, т.е. это будет упорядоченое множество, вставка в которое — дополнительное логарифмическое время.


Ну, тут можно придумать что-нибудь хитрое, например держать в хеш таблице указатели на элемент E и помечать его как уже выбранный после первой выборки, но это так, просто мысли.... я это не предлагаю.
Соглашусь что при больом количестве атрибутов и значеий атрибутов для каждого элемента, простая хэш таблица не лучший вариант.
Re[8]: свести задачу к мат.модели?
От: dinama  
Дата: 10.02.17 15:33
Оценка:
K>например держать в хеш таблице указатели на элемент E и помечать его как уже выбранный после первой выборки, но это так, просто мысли.... я это не предлагаю.

структура данных "неизменяемая", что позволяет разделять ее между процессами без синхронизаций. так что добавление
чего-либо изменяемого невозможно, а в контексте запроса это строить — опять аллокации, структуры и т.д. не комильфо.
тем-более на больших объемах.

у меня на самом деле "первый" случай — доля результативных запросов очень мала, так-что поиграюсь с фильтром блума.
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.