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

Автор YukatouArimotou, история, 5 месяцев назад, По-английски

I'm trying to do a problem and i have an idea, but it need to push_front a char to string in O(1) (and for each "push_front" I need to compare two new strings too)!

So...can you tell me how to do it please @@

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

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

Auto comment: topic has been updated by YukatouArimotou (previous revision, new revision, compare).

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

Auto comment: topic has been updated by YukatouArimotou (previous revision, new revision, compare).

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

use deque of chars. also there is rope which can insert and delete anywhere in O(logn) but with high constant factor.

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

    can I ask the complexity when comparing 2 deques please?

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

      O(n)

      And I forgot, if you use hashing you can compare equality in O(1). I think it's better if you post the problem so people can find a better solution

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

create array of length 10^6 or whatever and when you gotta do that operation, change the last element first, then the second last, third last, etc etc

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

    but i need to compare 2 strings after each "push_front()" @@

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

      I think you can keep a variable that stores the current position. So like say you have the array [0, 0, 0, 0, 0], your variable stores index 4, and then when you compare, you compare everything from index 5 onwards. You push front an "a", then it becomes [0, 0, 0, 0, "a"], variable becomes 3, and you compare everything from 4 onwards.

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

If you're comparing two strings after doing it, the comparison itself will take $$$\mathcal{O}(n)$$$ time anyway, unless the strings are guaranteed to not be too similar for whatever reason. So there is no point of pushing to the front in $$$\mathcal{O}(1)$$$ when it doesn't decrease the time complexity of performing both operations in the worst case.