Skip to main content

Longest Common Subsequence | Introduction & LCS Length


Longest Common Subsequence | Introduction & LCS Length
all three solution.


1. first one is recursion

2. second one is Memorization using top down approach  


3. dynamic programming using a 2d matrix filling from top using bottom up approach 



complete example is here



really nice video




//longest comman subsequence 
//watch this video for more detail
//https://www.youtube.com/watch?v=sSno9rV8Rhg


let r=0;//check how many call happen using Recursion
let m=0;//check how many call happen using Memoization top down appoarch 
let d=0;//check how many call happen using dynamic programming bottom up appoarch


//using Recursion
String.prototype.subsequence=function(str2,len1=0,len2=0)
{
    r++;
  //check if either of them is undefined return 0 
  if(this[len1]===undefined || str2[len2]===undefined)
  {
     return 0;
  }
  //if matched move to next in both string
  else if(this[len1]===str2[len2])
  {
   return  1+this.subsequence(str2,++len1,++len2);
  }
  else
  {
    //get max value out of tewo and return it
    return Math.max(this.subsequence(str2,++len1,len2),this.subsequence(str2,len1,++len2))
  }


}
let str1="manishchauhanppq";
let str2="manchanq";

console.log(str1.subsequence(str2)+"===="+r);






//Memoization using top down appoarch 

String.prototype.subsequenceM=function(str2,tempArray,len1=this.length,len2=str2.length)
{
        m++;
  //check if either of them is undefined return 0 
  if(len1===0 || len2===0)
  {
     return 0;
  }
  
  if(tempArray[len1-1][len2-1]!==-1)
  {
    
    return tempArray[len1-1][len2-1];
  }
 
  if(this[len1-1]===str2[len2-1])
  {
   
     tempArray[len1-1][len2-1]=1+this.subsequenceM(str2,tempArray,len1-1,len2-1);
  }else
  {
    
     tempArray[len1-1][len2-1]=Math.max(this.subsequenceM(str2,tempArray,len1-1,len2),
    this.subsequenceM(str2,tempArray,len1,len2-1));
  }

  return tempArray[len1-1][len2-1];

}
//create a array of m*n length
let tempArray=Array(str1.length).fill(Array(str2.length).fill(-1));

console.log(str1.subsequenceM(str2,tempArray)+"==calls drops to==="+m);

//dynamic programming using top down appoarch 

String.prototype.subsequenceD=function(str2)
{

    let tempArray=Array(str1.length+1).fill(Array(str2.length+1).fill(0));
    for(let i=1;i<tempArray.length;i++)
    {
      for(let j=1;j<tempArray[0].length;j++)
      {
           if(this[i-1]===str2[j-1])
           {
              tempArray[i][j]=1+tempArray[i-1][j-1];
           }
           else
           {
             tempArray[i][j]=Math.max(tempArray[i-1][j],tempArray[i][j-1])
           }
           
      }
      
    }
    return tempArray[i-1][j-1];
}



console.log("XMJYAUZ".subsequenceD("MZJAWXU"));

Comments

Popular posts from this blog

Better Memory management with PixiJS or How to manage cpu and cpu memory in PixiJS.

PixiJS is my favorite framework when i am looking for a web games specially for mobile or desktop  PixiJS is fast blazing fast and you can get a decent FPS even on older device.   so here is my optimization techniques for PixiJs 1. manage your sprites in a better way use spritesheet to reduce the draw calls create big sprite sheet which contain multiple sprites can be draw in gpu with a single draw call. use TexturePacker  https://www.codeandweb.com/texturepacker  best tool when its comes to spritesheet 2. for floating point calculation round off calculation for example let  speed = 0.75 ; let  position = 100 ; console . log ( Math . round ( speed * position )) 3. don't create very big canvas when u need a big canvas size game just try to create a small canvas and translate it. 4. its very important one managing TextureCache in memory you can get all TextureCache list by using  Object.entries(PIXI.utils.TextureCache); so even you use ap...

adding particles Effect in pixijs using https://pixijs.io/pixi-particles-editor/

adding particle in pixijs is very easy using the below tool more information can be found below https://github.com/pixijs/pixi-particles https://pixijs.io/pixi-particles-editor/ required packages  /// < reference path = "node_modules/pixi-particles/ambient.d.ts" /> import 'pixi-particles' code of particle delcare a     global variable   private emitter ?: Emitter ; const img = PIXI . Texture . from ( "./assets/images/particle.png" ); this . emitter = new Emitter ( this ,[ img ],{ "alpha" : { "start" : 0.62 , "end" : 0.39 }, "scale" : { "start" : 0.1 , "end" : 0.9 , "minimumScaleMultiplier" : 1.25 }, "color" : { "start" : "#ffff8f" , "end" : ...