Skip to main content

Longest Common Substring using recursion, memorization and dynamic programming

working example


https://stackblitz.com/edit/js-isyptv?file=index.js

running code

//Longest Common Substring using recursion 1
let r1=0;
let m1=0;
String.prototype.subStringR=function(str2,r=this.length,c=this.length,count=0)
{
     r1+=1;
    if(r===0 || c===0)
    {
      return count;
    }
 
    if(this[r-1]===str2[c-1])
    {
      count=this.subStringR(str2,r-1,c-1,count+1);
    }
      
    count=Math.max(count,this.subStringR(str2,r-1,c,0),this.subStringR(str2,r,c-1,0));
      return count;
}



let s1="zxabcdezy";

let s2="yzabcdezx";
console.time();
console.log(s1.subStringR(s2)+"---",r1);
console.timeEnd();



//2nd using using memorize
String.prototype.subStringM=function(str2,r=0,c=0,count=0,memo=[])
{
    m1+=1;
    if(r===0 || c===0)
    {
      return count;
    }
    if(this[r-1]===str2[c-1])
    {
      count=this.subStringM(str2,r-1,c-1,count+1,memo);
      memo[r-1][c-1]=count;
    }
    if( memo[r-1][c-1]!==-1)
      {
        return memo[r-1][c-1]
      }
      memo[r-1][c-1]=Math.max(count,this.subStringM(str2,r-1,c,0,memo),this.subStringM(str2,r,c-1,0,memo));
      return  memo[r-1][c-1];
}


let str1="zxabcdezy";

let str2="yzabcdezx";
let memo=Array(str1.length).fill(Array(str2.length).fill(-1));

console.time();
console.log(str1.subStringM(str2,r=str1.length,c=str2.length,0,memo)," "+m1);
console.timeEnd();



//dp using dynamic programming
String.prototype.subStringDP=function(str)
{
  let dp=Array(this.length+1).fill(Array(str.length+1).fill(0));
  let result=0;
  for(let i=1;i<dp.length;i++)
  {
    for(let j=1;j<dp[0].length;j++)
    {
         if(this[i]===str[j])
         {
            dp[i][j]=1+dp[i-1][j-1];
            result=Math.max(result, dp[i][j])
         }
          
    } 
  }
  return result;
}


let strdp1="manishex";

let strdp2="shex";
console.time();
console.log(strdp1.subStringDP(strdp2));
console.timeEnd();

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" : ...