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

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

Если возможно, как сравнить две строки за O(1)? Заранее спасибо!

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

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

Если нет никакой дополнительной информации, то на современных компьютерах никак, потому что меньше, чем за O(n) не убедиться, что они различаются.

Есть такая вещь, как хэши. Возможно, помогут.

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

    Стоит, правда, сказать, что там они написаны неоптимально. Например, существует тест, который, если считать хэши подстрок, "валит" решения с любым основанием и модулям вида 2k.

    Также там зачем-то предлагают делить на Pk. Это не нужно делать — просто считаем хэши не от префиксов, а от суффиксов. Тогда нам потребуется всего лишь домножить на Pk и выполнить вычитание.

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

Но с помощью хэшов нельзя сравнивать строки. Поэтому мне нужен оптимальный ответ.

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

    Можно сравнивать 2 захэшированные строки за O(logN)

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

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