2015-06-20 1 views
4

HyperLogLog оценивает мощность мультимножества. Можно ли расширить его для обработки нескольких мультимножеств? Например, вместо того, чтобы просто поддерживать оценку запроса cardinality(), он будет поддерживать оценку cardinality (multiset_id). Я стараюсь избегать использования словаря значений HyperLogLog для каждого файла multiset_id.Есть ли какая-либо структура HyperLogLog для нескольких мультимножеств?

Есть ли другой способ (структура данных), чтобы достичь этого?

ответ

2

Следующая идея может помочь, если у вас есть большое количество мультисетов с высокой дисперсией в их мощностях; то есть некоторые из них имеют большой размер, а некоторые имеют небольшой размер. Это не требует предварительной оценки, которая будет небольшой и будет большой.

Вы можете построить Linear Probabilistic Counter с небольшим изменением. Исходная структура данных имеет логическое логическое значение в каждой позиции. Здесь каждая позиция сама по себе была бы классическим набором. Вместо того, чтобы установка бита на

insert(element) 

оп, если он падает в таком положении, вы бы вставить id в набор на

insert(element, id) 

Есть некоторые здравого смысла трюков вы ульд сделать, чтобы сохранить пространство. Например, вы можете решить, что если id появляется в определенной части бункеров, то он не сохраняется в наборах битов, а скорее в отдельном битовом изображении по всем ячейкам.

В целом, то, если у вас есть как небольшие, так и большие наборы, вы бы в конечном итоге со следующим:

  • растровым для каждого большого набора (это та же стоимость за единицу для словаря счетчики идея)

  • записи в некоторых из наборов битов, для каждого небольшого набора (возможно, гораздо меньше, чем ваш словарь счетчиков идеи)

Поскольку ДАТ структура может переключать для определенного мультимножества от последнего к первому - это может сэкономить место относительно словаря идеи счетчиков, что может считаться преждевременной пессимизацией.

YMMV.

Смежные вопросы