[ d ] [ b / cu / dev ] [ r ] [ a / ts ] [ ci ] [ gnx / int ] [ misc ] [ dev / stat ]
[Burichan] [Futaba] [Gurochan] [Tomorrow] [Архив-Каталог] [Главная]

Файл: 138a2286853a548e9c3dd1fcfc8f2c76bb8d23b5.jpg -(484 KB, 886x1253, 138a2286853a548e9c3dd1fcfc8f2c76bb8d23b5.jpg)
484 No.25954  
Делаю свою буру и не понимаю, как сделать теги. Хочу за O(1) отвечать на вопрос вида "какие ID у картинок с тегами t1,...,tn, но без тегов e1,...,en, на странице с оффсетом 12000?" Ну или формально доказать, что я обнаглел и это невозможно. Как вы это делаете?
>> No.25955  
> какие ID у картинок с тегами t1,...,tn, но без тегов e1,...,en
Создаешь инвертированный индекс, где к каждому тегу привязана кишка с айдишниками соответствующих документов. Итерируешься по одной из кишок (ты можешь выбрать самую короткую), получаешь сложность O(длина кишки). Так делается в больших нагруженных поисковых системах.
> на странице с оффсетом 12000
Добавляешь еще один тег (поисковый литерал), означающий номер страницы.

Возможно, на маленькой буре можно сделать что-то более быстрое по времени, но за счет большего потребления памяти. Я не уверен, что это на самом деле нужно.
>> No.25957  
О, а мысль протегировать страницы мне не приходила в голову.
>> No.25958  
>>25954
Разве такое не должно быть уже решено в СУБД?
Но гляньте https://roaringbitmap.org/
Если в кратце, для каждого тэга храним сжатый битовый массив, для выполнения запроса and-аем чанки этих массивов между собой, делая popcnt по результату, пока не достигнем нужный offset.
>> No.26010  
Файл: 1418651108864.png -(28 KB, 225x239, 1418651108864.png)
28
Моя бура состоит из двух TSV текстовых файлов вида тэг|хэш и хэш|путь-к-файлу, которые я грепаю скритом.

What is O(1), is it tasty



[ d ] [ b / cu / dev ] [ r ] [ a / ts ] [ ci ] [ gnx / int ] [ misc ] [ dev / stat ]
[Burichan] [Futaba] [Gurochan] [Tomorrow] [Архив-Каталог] [Главная]