Есть у нас книги, которые относятся к какой-то предметной области, у них есть автор и название.
Есть места, куда мы их кладем. Они имеют опциональные свойства: предметная область, автор, название.
Опциональные, потому что есть места, где к примеру лежит любая фантастика, а есть — где лежат книги на тему программирования авторства Рихтера, и все имеют название "CLR via C#".
Надо найти для недавно принесенной книги место, причем чем больше место соответствует свойствам книги (область, автор, название) — тем оно релевантнее.
Если места в наиболее оптимальном месте нет — проверяем другое, менее оптимальное.
Надо придумать алгоритм поиска места по релевантности
ЗЫ: На работе я подобную задачу уже решил, интересно что придумаете вы, ну и позже свое решение опубликую, если подобного не будет.
Здравствуйте, Tesh, Вы писали:
T>Встретился на работе с подобной задачкой:
T>Есть у нас книги, которые относятся к какой-то предметной области, у них есть автор и название. T>Есть места, куда мы их кладем. Они имеют опциональные свойства: предметная область, автор, название. T>Опциональные, потому что есть места, где к примеру лежит любая фантастика, а есть — где лежат книги на тему программирования авторства Рихтера, и все имеют название "CLR via C#". T>Надо найти для недавно принесенной книги место, причем чем больше место соответствует свойствам книги (область, автор, название) — тем оно релевантнее. T>Если места в наиболее оптимальном месте нет — проверяем другое, менее оптимальное.
T>Надо придумать алгоритм поиска места по релевантности
T>ЗЫ: На работе я подобную задачу уже решил, интересно что придумаете вы, ну и позже свое решение опубликую, если подобного не будет.
Какая-то фигня. Если тебе нужен способ хранения слабоструктурированной информации, для этого есть прекрасный формат RDF. Для данных пользователя вообще, самое оно. Мультимедиа, книги, статьи, все это можно хранить в rdf-базе, основанной, пусть и частично, на публичных словарях.
Можно составлять запросы по извлечению любых данных, имеющихся в базе данных (по факту это будет уже база знаний).
По идее, если сделать rdf-store с нормальным интерфейсом, то можно будет фактически отказаться от файловых хранилищ, выкинув нахрен всякие фары, точнее, используя их только по прямому назначению.
Социализм — это власть трудящихся и централизованная плановая экономика.
Здравствуйте, Tesh, Вы писали:
T>Здравствуйте, LaPerouse, Вы писали:
T>Это все конечно замечательно, но книги у нас вполне себе реальные, бумажные и найти для них надо вполне реальное место (например полку).
Добавлю еще, что найти место (например полку), куда ее поставить, а не где она находится
Здравствуйте, Tesh, Вы писали:
T>Здравствуйте, Tesh, Вы писали:
T>>Здравствуйте, LaPerouse, Вы писали:
T>>Это все конечно замечательно, но книги у нас вполне себе реальные, бумажные и найти для них надо вполне реальное место (например полку).
T>Добавлю еще, что найти место (например полку), куда ее поставить, а не где она находится
Я промахнулся мимо форума, думал это "философия программирования", выше в дереве
Социализм — это власть трудящихся и централизованная плановая экономика.
В общем я такое решение придумал:
Свойства "предметная область", "автор", "название" и возможные другие — опциональны.
Получается что признак указан, либо не указан и нам надо найти все уникальные перестановки этих значений.
В нашем случае это будет: 111, 101 и т.д.
Идея такая:
Получаем маску комбинации, в которой указаны все свойства. Для этого считаем ((2^n )- 1), где n — их количество.
После этого для каждого объекта создаем его личную маску (2^k, где k — индекс объекта в списке), а дальше идем по такому алгоритму: устанавливаем маску комбинации в 0 (ни одного признака);
конкатенируем маску каждого объекта с маской комбинации, чтобы определить задан он или нет, тем самым получаем набор свойств;
увеличиваем значение маски комбинации на 1, если она меньше, либо равна маски со всеми признаками — переходим к шагу 2;
для каждой комбинации объектов считаем ее вес, а затем сортируем по нему их список.
После этого берем комбинацию с самым большим весом, пробуем найти место для книги. Если места нет, либо оно занято, то переходим к менее релевантному набору свойств.
Каждый бумажное здание уже классифицировано это коды ББК(Библиотечно-библиографическая классификация), УДК(Универсальная десятичная классификация), ISBN(International Standard Book Number) эти коды написаны на тилульном или на последнем листе любой книги. Можно использовать их.
Здравствуйте, RadmirT, Вы писали:
RT>Каждый бумажное здание уже классифицировано это коды ББК(Библиотечно-библиографическая классификация), УДК(Универсальная десятичная классификация), ISBN(International Standard Book Number) эти коды написаны на тилульном или на последнем листе любой книги. Можно использовать их.
Свойства-то какие угодно можно использовать.
Мы ищем оптимальное место хранения для того, чтобы человеку не пришлось ходить в 10 мест, когда он к примеру хочет выдать книги одного автора.
Здравствуйте, Tesh, Вы писали:
T>Здравствуйте, RadmirT, Вы писали:
RT>>Каждый бумажное здание уже классифицировано это коды ББК(Библиотечно-библиографическая классификация), УДК(Универсальная десятичная классификация), ISBN(International Standard Book Number) эти коды написаны на тилульном или на последнем листе любой книги. Можно использовать их.
T>Свойства-то какие угодно можно использовать. T>Мы ищем оптимальное место хранения для того, чтобы человеку не пришлось ходить в 10 мест, когда он к примеру хочет выдать книги одного автора.
В таком случае нужны теги
Эдакое роботизированное хранилище книг
Так ББК как раз и предназначен для классификации книг, и их быстрого поиска.
Например берем код ББК 32.973.26-018.2 M15
Расшифровываем его:
32 — радиоэлектроника
973 — компьютеры
26 — персональные компьютеры
018 — программирование
2 — программное обеспечение
M — Фамилия автора начинается на M
15 — 15 изданная им книга
В итоге если мы заведем шкаф котором будут находится все книги о компьютерах (код 32-973)
Полки классифицируем по направлениям например ( полка №1 26-018-2)
А в полке книги отсортируем по первой букве автора. То поиск нужной книги займет очень мало времени.
По такому принципу организованы все книгохранилища.
Здравствуйте, Tesh, Вы писали:
T>Все правильно, только мы не книгу ищем, мы ищем как раз тот самый шкаф, либо полку, в
который положить эту книгу
Так в чем проблема. Все шкафу у нас имеет свой код (код раздела ББК), также все полки имеют свои идентификаторы(коды подраздела), все книги отсортирован по фамилии автора, для каждого автора книги отсортированы в порядке их издания.
Приходит новая книга, смотрим код раздела, находим нужный шкаф, далее в шкажу находим нужную полку, находим автора и ставим ее на место соответстущее номеру изданию книги.