Блог пользователя ilyaraz

Автор ilyaraz, 13 лет назад, По-русски

Пусть у нас есть множество A, которое состоит из m целых чисел от 1 до n (будем считать, что , например, что m = no(1)). Мы хотим построить структуру данных, которая по числу будет определять, лежит ли оно в A. При этом, у нас будет жесткое ограничение: на каждый запрос алгоритм должен смотреть лишь на один бит структуры.

Какого минимального размера структуры можно достичь:

  1. если алгоритм должен всегда выдавать верный ответ,

  2. если алгоритм может ошибаться с вероятностью 1 процент (но при этом должен выдавать верный ответ с вероятностью 99 процентов для любого запроса)?

  • Проголосовать: нравится
  • +23
  • Проголосовать: не нравится

»
13 лет назад, # |
Rev. 2   Проголосовать: нравится 0 Проголосовать: не нравится

В 1 ответ наверно 2^n. А 2 немного похоже на PCP теорему. Наверно в 2 ответ poly(m,n):)

»
13 лет назад, # |
  Проголосовать: нравится 0 Проголосовать: не нравится

Выбирая, на какой бит смотреть, алгоритм знает n и m?

»
13 лет назад, # |
Rev. 5   Проголосовать: нравится +16 Проголосовать: не нравится

Возможно, я что-то не понял. В первом наверное правда 2^n и непонятно, как использовать условие m << n. Во втором можно сделать что-то похожее на хэш-таблицу, не обращая внимание на коллизии (то есть, считая, что их нет). То есть все числа заменяем на хэши и сводим к первому пункту, взяв в качестве n длину диапазона значений хэш-функции. Если хэш будет принимать не меньше S = 1 / (1 — 0.99^(1/m)) значений, то вроде бы вероятность ошибки будет не больше 0.01. В качестве хэш-функции можно взять остаток по модулю S — она будет достаточно равномерной, поскольку m << n. Как-то так.

UPD: в первом все-таки не 2^n а n бит. А во втором, соответственно, S бит.

  • »
    »
    13 лет назад, # ^ |
      Проголосовать: нравится +3 Проголосовать: не нравится

    "должен выдавать верный ответ с вероятностью 99 процентов для любого запроса"

    Для запроса, попадающего в коллизию, неверный ответ будет с вероятностью 100 процентов. Не подходит.

    "В качестве хэш-функции можно взять остаток по модулю S — она будет достаточно равномерной, поскольку m << n."

    Равномерность никак не следует из условия m << n. Хоть все элементы могут иметь одинаковый остаток от деления на S.

    • »
      »
      »
      13 лет назад, # ^ |
        Проголосовать: нравится +8 Проголосовать: не нравится

      Хм, да, вы правы. Я считал, что запрос случайный. Как и сами числа из множества.

    • »
      »
      »
      13 лет назад, # ^ |
        Проголосовать: нравится +13 Проголосовать: не нравится

      А что если так. Берем не один модуль, а 100: S1,..., S100. И пусть они все будут попарно взаимно простые и не меньше sqrt(n). Для всех чисел во множестве считаем остатки по каждому модулю. А для запроса считаем остаток по одному случайно выбранному модулю (из этих ста). Коллизия может быть максимум по одному модулю, поэтому попадем мы на нее с вероятностью 0.01. Вот только размер структуры получается довольно большой — чуть больше 100 * sqrt(n), и условие m << n никак не используется.

      • »
        »
        »
        »
        13 лет назад, # ^ |
          Проголосовать: нравится 0 Проголосовать: не нравится

        И есть такие запросы, для которых вероятность < 99%.

        • »
          »
          »
          »
          »
          13 лет назад, # ^ |
            Проголосовать: нравится +8 Проголосовать: не нравится

          Почему?

          • »
            »
            »
            »
            »
            »
            13 лет назад, # ^ |
              Проголосовать: нравится 0 Проголосовать: не нравится

            Что-то я похоже неправильно понял, и не заметил "Коллизия может быть максимум по одному модулю".

            А почему коллизия может быть максимум по одному модулю? )

            • »
              »
              »
              »
              »
              »
              »
              13 лет назад, # ^ |
              Rev. 2   Проголосовать: нравится +5 Проголосовать: не нравится

              Если коллизия хотя бы по двум, то по КТО коллизия так же и по их произведению. А оно больше n, так что равенство остатков значит равенство чисел. Противоречие.

            • »
              »
              »
              »
              »
              »
              »
              13 лет назад, # ^ |
                Проголосовать: нравится +5 Проголосовать: не нравится

              Потому что числа, сравнимые по двум взаимно простым модулям, сравнимы по модулю их произведения, которое в данном случае больше n.

      • »
        »
        »
        »
        13 лет назад, # ^ |
          Проголосовать: нравится +3 Проголосовать: не нравится

        Может получиться, что нам дали элемент не из А, но у него есть коллизии со всеми элементми из А, с каждым по своему модулю. Так что нам надо не 100 модулей, а 100*m. В остальном мне нравится :)

        • »
          »
          »
          »
          »
          13 лет назад, # ^ |
            Проголосовать: нравится 0 Проголосовать: не нравится

          Да, точно:) И тут как раз оказывается полезным то факт, что m << n

        • »
          »
          »
          »
          »
          13 лет назад, # ^ |
            Проголосовать: нравится 0 Проголосовать: не нравится

          А можно чуть подробнее решение расписать, чтобы понятно стало?

          • »
            »
            »
            »
            »
            »
            13 лет назад, # ^ |
              Проголосовать: нравится 0 Проголосовать: не нравится

            Выбираем натуральное число К > 1. Выбираем 100 * m * (K-1) попарно взаимно простых натуральных чисел S[], бОльших n^(1/K). Для каждого S[i] заводим S[i] бит, в которых запоминаем, какие вычеты по модулю S[i] встречаются во множестве.

            Пусть есть запрос Х. Берем его остаток по случайно выбранному из S[] модулю. Смотрим на бит, соответствующий этому остатоку и этому модулю. И отвечаем на запрос значением этого бита.

            Если X принадлежит множеству, то ответ будет верным в любом случае.

            Пусть Х не принадлежит. Тогда мы смотрим на один из 100 * m * (K-1) бит, соответствующих остаткам X по модулю каждого S[i]. Предположим, что среди них более чем m * (K-1) содержат значение True. Тогда найдется число из нашего множества, которое сравнимо с X по K попарно взаимно простым модулям (которые больше n^(1/K)), поэтому X само должно принадлежать множеству, а это неверно. Значит, у нас есть не больше m * (K-1) бит, содержащих значение True, поэтому положительный (т.е. неверный) ответ мы в этом случае дадим с вероятностью не больше 0.01.

            Получается около 100 * m * n^(1/K) * (K-1) бит. Как выбирать K al13n написал ниже.

            • »
              »
              »
              »
              »
              »
              »
              13 лет назад, # ^ |
                Проголосовать: нравится +16 Проголосовать: не нравится

              Если взять , то n1 / K = O(1) и тогда нам придется взять в качестве модулей первые простых. Их сумму можно оценить так: .

              Так что вроде ваше решение не работает.

            • »
              »
              »
              »
              »
              »
              »
              13 лет назад, # ^ |
                Проголосовать: нравится 0 Проголосовать: не нравится

              Впрочем, решение размера тоже вполне себе интересно. :)

      • »
        »
        »
        »
        13 лет назад, # ^ |
        Rev. 6   Проголосовать: нравится +8 Проголосовать: не нравится

        А если sqrt(n) заменить на n^(1/K), получится, что достаточно порядка 100 * m * n^(1/K) * (K-1) бит памяти. При К порядка log n получается ответ всего O(m * log n). Здорово. Осталось доказать, что меньше не бывает. UPD: это неверно, см. выше.

        • »
          »
          »
          »
          »
          13 лет назад, # ^ |
            Проголосовать: нравится +11 Проголосовать: не нравится

          Нижняя оценка очевидна: для разных множеств структуры должны быть различными.

  • »
    »
    13 лет назад, # ^ |
    Rev. 2   Проголосовать: нравится +2 Проголосовать: не нравится

    В 1-ом вроде кэп, там от m вообще ничего не зависит.

    Мы задаем какой-то вопрос структуре, она отвечает нам либо "Да", либо "Нет", посмотрев в какой-то соответствующий бит. Значит каждый бит должен отвечать за ровно одно число (иначе нам нужно > 2 вариантов ответа). Значит ответ — n.

    • »
      »
      »
      13 лет назад, # ^ |
        Проголосовать: нравится 0 Проголосовать: не нравится

      Думаю, фишка в том, что бит не обязательно отвечает за одно число. Например, чтобы поставить в соответствие запросу какой-то бит (на который мы будем смотреть), мы можем использовать какую-нибудь случайную величину. И тогда одному и тому же запросу не обязательно каждый раз будет соответствовать один и тот же бит

      • »
        »
        »
        »
        13 лет назад, # ^ |
        Rev. 3   Проголосовать: нравится 0 Проголосовать: не нравится

        Разве тогда мы сможем всегда получить правильный ответ?

        Ведь если да, то логично, что всегда можно смотреть на один и тот же бит.

        upd: Я может не совсем понятно написал. Я имел ввиду что только в 1-ой задаче от m ничего не зависит. Исправил.

        • »
          »
          »
          »
          »
          13 лет назад, # ^ |
            Проголосовать: нравится 0 Проголосовать: не нравится

          Правильный — нет. Правильный с вероятностью 99% — почему нет?

          • »
            »
            »
            »
            »
            »
            13 лет назад, # ^ |
              Проголосовать: нравится 0 Проголосовать: не нравится

            "1. если алгоритм должен всегда выдавать верный ответ". Я написал только про это, про 99% я ничего не утверждал :).

            • »
              »
              »
              »
              »
              »
              »
              13 лет назад, # ^ |
                Проголосовать: нравится 0 Проголосовать: не нравится

              А, все, я извиняюсь:) Я думал, второй абзац относится ко второму пункту

»
13 лет назад, # |
Rev. 2   Проголосовать: нравится +5 Проголосовать: не нравится

Не про это ли рассказывал Андрей Ромащенко на колмсеме в прошлом году (http://arxiv.org/pdf/1102.5538) ?

  • »
    »
    13 лет назад, # ^ |
      Проголосовать: нравится -7 Проголосовать: не нравится

    Offtopic: что за дурацкая привычки давать ссылки на pdf'ки Архива? :)

    • »
      »
      »
      13 лет назад, # ^ |
        Проголосовать: нравится 0 Проголосовать: не нравится

      offtopic: в данном случае это не моя привычка — ссылка скопирована из сьма. А править неудобно, ибо с планшета.