Рассмотрим наборов значений (представленных в виде отсортированных массивов без дубликатов и с известным размером (т. Е. Размер можно получить за O (1)). Значения можно проверить на равенство за O (1). Я хочу чтобы получить набор значений, которые присутствуют по меньшей мере в k различных наборах среди n .
Очевидный алгоритм для этого состоит в том, чтобы пройти через все наборы, посчитать количество вхождений каждого значения и вернуть те, у которых число больше . Тем не менее, в некоторых случаях вы можете добиться большего успеха: например, когда 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 | ,
Имея это в виду, в каких ситуациях мы можем добиться большего успеха, чем наивный алгоритм? (Если это общеизвестная проблема, я был бы рад узнать ее обычное имя и иметь ссылки.)