3.7.10 · HinglishAlgorithm Paradigms

DP problems — Longest Common Subsequence (LCS)

1,625 words7 min readRead in English

3.7.10 · Coding › Algorithm Paradigms


WHAT hai LCS (vs. substring)

WHY care? LCS diff tools, version control merges, DNA/protein alignment, aur plagiarism detection ko power karta hai. Yeh canonical 2-D dynamic-programming problem hai.


HOW derive karein recurrence (scratch se)

Maano do strings hain aur .

Define karo

Hume chahiye .

LAST characters aur ke baare mein socho. Ya toh woh match karte hain ya nahi.

Case 1 — woh match karte hain (). Yeh shared character safely LCS ko end kar sakta hai. Kyun? Kyunki agar in prefixes ka optimal LCS is matching pair ko use nahi karta, toh hum hamesha is pair ko swap in kar sakte hain bina length khoye (neeche steel-manned hai). Toh unhe pair karo aur chote prefixes pe recurse karo:

Case 2 — woh match nahi karte (). LCS DONO aur ko apna final character nahi bana sakta (woh differ karte hain). Toh unme se kam se kam ek endpoint ke roop mein useless hai — ek ko drop karo aur better option lo:

Base case. Ek empty prefix ka koi common subsequence nahi hota:


DP table

Hum ek table row by row fill karte hain. Har cell upper-left (diagonal) dekhti hai jab characters match karein, warna up aur left.

Figure — DP problems — Longest Common Subsequence (LCS)

Worked Example 1 — AGGTAB vs GXTXAYB


Worked Example 2 — actual string recover karna (traceback)


Chhota dry run jo tumhe mentally karna chahiye

Recall Forecast-then-verify

Padhne se pehle: ABC aur AC ki LCS length predict karo. Hidden answer: order mein characters A…C → length 2 (AC). Table corner = 2. ✅ Kya tumhara forecast match kiya?


Common mistakes (steel-manned)


Reference implementation

def lcs(X, Y):
    m, n = len(X), len(Y)
    L = [[0]*(n+1) for _ in range(m+1)]
    for i in range(1, m+1):
        for j in range(1, n+1):
            if X[i-1] == Y[j-1]:
                L[i][j] = 1 + L[i-1][j-1]   # match: diagonal + 1
            else:
                L[i][j] = max(L[i-1][j], L[i][j-1])
    return L[m][n]

Recall Ek 12-saal ke bachche ko explain karo (Feynman)

Socho do dost hain jinhone apni-apni list banayi un cartoons ki jo unhone order mein dekhe. Tumhe sabse lamba playlist chahiye un cartoons ka jo DONO ne same order mein dekhe hoon — tum cartoons skip kar sakte ho, par unhe reshuffle nahi kar sakte. Tum end se compare karte ho: agar dono lists ka last cartoon same hai, usse rakho aur choti lists dekho. Agar nahi, toh jis list ka last cartoon "worse" hai usse throw away karo aur check karte raho. Sabse bada matching playlist jo tum bana sako woh LCS hai.


Active recall

Subsequence kya hota hai (vs substring)?
Characters order mein rakhe jaate hain par contiguous hona zaroori nahi; substring contiguous honi chahiye.
Characters match karne pe LCS recurrence?
(diagonal +1).
Characters differ karne pe LCS recurrence?
.
LCS DP ka base case?
(empty prefix).
Standard LCS DP ki time aur space complexity?
time, space ( tak optimize ho sakti hai).
Table mein final answer kahan hota hai?
Bottom-right cell mein.
Actual LCS string kaise recover karte hain?
se traceback: match pe diagonal (char prepend karo), warna up/left mein se larger ki taraf jao.
Sirf match pe +1 kyun?
Ek naya shared character tabhi add hota hai jab dono strings same character supply karein sequence extend karne ke liye.
AGGTAB aur GXTXAYB ka LCS?
Length 4, e.g. GTAB.

Connections

  • Dynamic Programming — LCS textbook 2-D table DP hai.
  • Edit Distance — same grid; insert/delete/replace costs LCS ko generalize karte hain.
  • Longest Common Substring — contiguous variant; mismatch pe reset hoti hai.
  • Longest Increasing Subsequence — LIS, array aur uski sorted-unique copy ke LCS mein reduce hoti hai.
  • Diff Algorithmgit diff LCS-based hai.
  • Sequence Alignment — Needleman–Wunsch bioinformatics version.

Concept Map

defined via

contrast with

powers

formalized as

split on last chars

split on last chars

gives

gives

needs

fills

fills

initializes

read at corner

LCS longest common subsequence

Subsequence keeps order not contiguous

Substring contiguous

diff, VCS, DNA alignment

L i,j = LCS of prefixes

Case xi = yj

Case xi != yj

1 + L i-1,j-1

max of up and left

Base L 0,j = L i,0 = 0

m+1 x n+1 DP table

Answer L m,n, O mn time

Substring contiguous