Знайдіть елементи, які містять принаймні


11

Розглянемо наборів значень (представлених як відсортовані масиви без дублікатів, і з відомим розміром (тобто розмір можна отримати в O (1)). Значення можна перевірити на рівність за час O (1). Я хочу для отримання набору значень, присутніх принаймні різних множин серед .k nnkn

Очевидний алгоритм для цього полягає в тому, щоб пройти всі набори, порахувати кількість входів кожного значення і повернути ті, які мають кількість, вищу від . Тим не менш, у деяких випадках ви можете зробити краще: наприклад, коли і коли один набір набагато менший, ніж інший множина , ефективніше переглянути всі елементи і здійснити двійковий пошук для кожного з них у : підхід бінарного пошуку коштує тоді як наївний підхід коштує що гірше, коли.n = k = 2 S 1 S 2 S 1 S 2 O ( | S 1 | log ( | S 2 | ) ) O ( | S 1 | + | S 2 | ) | S 1 | < < | S 2 |kn=k=2S1S2S1S2O(|S1|log(|S2|))O(|S1|+|S2|)|S1|<<|S2|

Зважаючи на це, в яких ситуаціях ми можемо зробити краще, ніж наївний алгоритм? (Якщо це добре відома проблема, я би радий знати її звичайну назву та мати посилання.)


3
Це підпадає під загальну категорію результатів "топ-К", або "важких ударів". Останнє ближче до того, що ви шукаєте. Більшість робіт у цьому просторі зосереджена на великих наборах даних та обмеженнях підлінійної пам'яті.
Суреш Венкат

9
Метод "пошуку всіх локацій S1 в S2", який ви даєте, може бути виконаний у часі , завжди принаймні настільки ж хороший, як алгоритм наївного лінійного часу . O(|S1|log(|S2|/|S1|))
Девід Еппштейн

Відповіді:


2

Гаразд, я думаю, що я знайшов щось актуальне: у цьому документі згадується "проблема виникнення Т" у розділі III (стор. 2), яка є саме нашою проблемою (де - те, що ми називали ), прихованою за деяким жаргоном, характерним для домену. Алгоритм ScanCount, який вони пропонують, - це наївний підхід, який я запропонував у своєму питанні. Алгоритм MergeOpt - це узагальнення двійкового пошуку. Їх головна пропозиція (DivideSkip) - це комбінація цього двійкового пошукового трюку та іншого трюку (MergeSkip) для пропуску кількох значень. Навіть здається, що експериментально розумні підходи набагато кращі, ніж наївні підходи (дивіться у стовпці "Без фільтрів" на сторінці 8, фільтри - це евристика для конкретних доменних матеріалів).кTk

Це може поєднуватися з хитрістю Девіда Еппштейна, щоб зробити кілька бінарних пошуків у більш ефективними, а також із ідеєю використання інтерполяційного пошуку замість двійкового пошуку (ідея цього іншого документа з того ж поля ).S2


1

Ваша проблема схожа на проблему обміну даними щодо пошуку частих наборів предметів , також відомих як навчання правил асоціації . Якщо я правильно зрозумів, ваша проблема може бути зведена до пошуку частих наборів елементів кардинальності 1 (тобто одиночних клавіш) з підтримкою > = k . Звичайно, доступні алгоритми (такі як Apriori, Eclat, D-CLUB тощо) для проблеми також дозволяють визначити часті набори елементів кардинальності> 1.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.