Longest increasing subsequence

hip-hop, educational · 2:54

Listen on 93

Lyrics

[Verse 1]
Got an array and I'm looking for the pattern
Numbers climbing up, that's what really matters
Not consecutive, just strictly increasing
Find the longest chain, that's what I'm seeking
Dynamic programming gonna solve this right
Building up solutions from left to right
Each position holds the best we've seen
Longest sequence ending at that scene

[Chorus]
LIS, LIS, longest increasing subsequence
Dynamic table, optimal reference
Bottom up, we build the solution clean
N squared time, but the logic's pristine
LIS, LIS, find the maximum length
Patience sorting gives us extra strength
Remember the path, trace it back with care
Longest climb is waiting for us there

[Verse 2]
Start with base case, every single stands alone
Length of one at every position shown
For each element, scan what came before
If it's smaller, we can add one more
Take the maximum from all valid picks
That's the recurrence relation that clicks
Fill the table left to right with grace
Each cell holds the best case for that place

[Chorus]
LIS, LIS, longest increasing subsequence
Dynamic table, optimal reference
Bottom up, we build the solution clean
N squared time, but the logic's pristine
LIS, LIS, find the maximum length
Patience sorting gives us extra strength
Remember the path, trace it back with care
Longest climb is waiting for us there

[Bridge]
Binary search can make it faster still
N log N time if you've got the skill
Active list of tails, replace with care
Patience game strategy, winners everywhere
But sometimes you need the actual sequence
Not just length, but full coherence
Parent pointers help you reconstruct
The path that made your algorithm struck

[Verse 3]
Applications everywhere you look around
Scheduling tasks where time constraints abound
Version control and file comparisons too
DNA sequencing, bioinformatics crew
Box stacking problems, nested rectangles
Investment planning, profit trajectles
Any time you need the optimal chain
LIS algorithm breaks the coding strain

[Chorus]
LIS, LIS, longest increasing subsequence
Dynamic table, optimal reference
Bottom up, we build the solution clean
N squared time, but the logic's pristine
LIS, LIS, find the maximum length
Patience sorting gives us extra strength
Remember the path, trace it back with care
Longest climb is waiting for us there

[Outro]
From the simple to the optimized
Every subsequence gets analyzed
Build your table, trace your path
LIS mastery, that's the aftermath

← Longest common subsequence | Knapsack (0/1 and unbounded) →