Следующая идея может помочь, если у вас есть большое количество мультисетов с высокой дисперсией в их мощностях; то есть некоторые из них имеют большой размер, а некоторые имеют небольшой размер. Это не требует предварительной оценки, которая будет небольшой и будет большой.
Вы можете построить Linear Probabilistic Counter с небольшим изменением. Исходная структура данных имеет логическое логическое значение в каждой позиции. Здесь каждая позиция сама по себе была бы классическим набором. Вместо того, чтобы установка бита на
insert(element)
оп, если он падает в таком положении, вы бы вставить id
в набор на
insert(element, id)
Есть некоторые здравого смысла трюков вы ульд сделать, чтобы сохранить пространство. Например, вы можете решить, что если id
появляется в определенной части бункеров, то он не сохраняется в наборах битов, а скорее в отдельном битовом изображении по всем ячейкам.
В целом, то, если у вас есть как небольшие, так и большие наборы, вы бы в конечном итоге со следующим:
растровым для каждого большого набора (это та же стоимость за единицу для словаря счетчики идея)
записи в некоторых из наборов битов, для каждого небольшого набора (возможно, гораздо меньше, чем ваш словарь счетчиков идеи)
Поскольку ДАТ структура может переключать для определенного мультимножества от последнего к первому - это может сэкономить место относительно словаря идеи счетчиков, что может считаться преждевременной пессимизацией.
YMMV.