Damon's blog

By Damon, 8 years ago, In English

Hi :) We have two string with same size ! ( n = strings.size() )

I want an algorithm with O(n.lg n) , to find LCS of this strings .

What is best Order of this problem ? I can find it with O(n^2) by using dp !

sry 4 my bad English! :|

 
 
 
 
  • Vote: I like it
  • +1
  • Vote: I do not like it

»
8 years ago, # |
  Vote: I like it -16 Vote: I do not like it

How much do you pay for nlogn? and for linear?

»
8 years ago, # |
Rev. 3   Vote: I like it +8 Vote: I do not like it

Well, you can decrease it to a LIS problem. Lets say you have strings S1 and S2. You can take S1 and for every character put in a list for that character the indexes where the character occurs. These lists should be sorted in decreasing order. For example if you have string "abacba" you have these lists

  • 'a': 5,2,0
  • 'b': 1,4
  • 'c': 3

Now, if you look at S2 and for each character put in a sequence its list(note that it can be empty), you have a sequence in which you should search for LIS. Here's with the example if S2 is 'baaxac' you have sequence 1,4, 5,2,0, 5,2,0, ,5,2,0, 3. The LIS of this sequence is 3 as the answer would be. If you have to retrieve some string as an answer you can just retrieve the corresponding letters. Now that we have a LIS problem, it can be solved in nlogn. If you don't know how, there is a very recent post about that here. The only problem is that the sequence can get big, but it is in rare situations, so you have an average case of nlogn and a worst case of O(NM) or something like that, but it is still a good idea, which is worth the thoughts, especially if you have some restrictions about the type of the input

  • »
    »
    8 years ago, # ^ |
    Rev. 2   Vote: I like it +2 Vote: I do not like it

    Thanks a lot :) I want this too , ty for help :)

  • »
    »
    8 years ago, # ^ |
      Vote: I like it +1 Vote: I do not like it

    "These lists should be sorted in decreasing order".

    So shouldn't the list for b read [4, 1] rather than [1, 4] ?

    • »
      »
      »
      8 years ago, # ^ |
        Vote: I like it +1 Vote: I do not like it

      I thing this is a wrong on typing ! :)

      • »
        »
        »
        »
        8 years ago, # ^ |
          Vote: I like it +1 Vote: I do not like it

        Yes, it is! Thank you! :). The answer is still 3 though..

  • »
    »
    10 months ago, # ^ |
    Rev. 2   Vote: I like it 0 Vote: I do not like it

    Helpful post!

  • »
    »
    8 months ago, # ^ |
      Vote: I like it -8 Vote: I do not like it

    Could you please provide me the code, It would be very helpful. Thank you

  • »
    »
    7 months ago, # ^ |
      Vote: I like it -10 Vote: I do not like it

    Forming the final array would take N*M complexity i think.

  • »
    »
    3 weeks ago, # ^ |
      Vote: I like it 0 Vote: I do not like it

    nice idea