AI EducademyAIEducademy
🌳

AI పునాదులు

🌱
AI Seeds

సున్నా నుండి ప్రారంభించండి

🌿
AI Sprouts

పునాదులు నిర్మించండి

🌳
AI Branches

ఆచరణలో అన్వయించండి

🏕️
AI Canopy

లోతుగా వెళ్ళండి

🌲
AI Forest

AI లో నిపుణత సాధించండి

🔨

AI నైపుణ్యం

✏️
AI Sketch

సున్నా నుండి ప్రారంభించండి

🪨
AI Chisel

పునాదులు నిర్మించండి

⚒️
AI Craft

ఆచరణలో అన్వయించండి

💎
AI Polish

లోతుగా వెళ్ళండి

🏆
AI Masterpiece

AI లో నిపుణత సాధించండి

🚀

కెరీర్ రెడీ

🚀
ఇంటర్వ్యూ లాంచ్‌ప్యాడ్

మీ ప్రయాణం ప్రారంభించండి

🌟
ప్రవర్తనా ఇంటర్వ్యూ నైపుణ్యం

సాఫ్ట్ స్కిల్స్ నేర్చుకోండి

💻
సాంకేతిక ఇంటర్వ్యూలు

కోడింగ్ రౌండ్ విజయం సాధించండి

🤖
AI & ML ఇంటర్వ్యూలు

ML ఇంటర్వ్యూ నైపుణ్యం

🏆
ఆఫర్ & అంతకు మించి

అత్యుత్తమ ఆఫర్ పొందండి

అన్ని ప్రోగ్రామ్‌లు చూడండి→

ల్యాబ్

7 ప్రయోగాలు లోడ్ అయ్యాయి
🧠న్యూరల్ నెట్‌వర్క్ ప్లేగ్రౌండ్🤖AI లేదా మనిషి?💬ప్రాంప్ట్ ల్యాబ్🎨ఇమేజ్ జనరేటర్😊సెంటిమెంట్ ఎనలైజర్💡చాట్‌బాట్ బిల్డర్⚖️ఎథిక్స్ సిమ్యులేటర్
🎯మాక్ ఇంటర్వ్యూల్యాబ్‌లోకి వెళ్ళండి→
nav.journeyబ్లాగ్
🎯
మా గురించి

ప్రతి చోటా, ప్రతి ఒక్కరికీ AI విద్యను అందుబాటులోకి తీసుకురావడం

❓
nav.faq

Common questions answered

✉️
Contact

Get in touch with us

⭐
ఓపెన్ సోర్స్

GitHub లో బహిరంగంగా నిర్మించబడింది

నేర్చుకోవడం ప్రారంభించండి - ఇది ఉచితం
AI EducademyAIEducademy

MIT లైసెన్స్ - ఓపెన్ సోర్స్

నేర్చుకోండి

  • ప్రోగ్రాములు
  • పాఠాలు
  • ల్యాబ్

సంఘం

  • GitHub
  • సహకరించండి
  • ప్రవర్తనా నియమావళి
  • మా గురించి
  • తరచుగా అడిగే ప్రశ్నలు

మద్దతు

  • కాఫీ కొనండి ☕
  • footer.terms
  • footer.privacy
  • footer.contact
AI & ఇంజనీరింగ్ ప్రోగ్రామ్‌లు›✏️ AI Sketch›పాఠాలు›రికర్షన్ మరియు బ్యాక్‌ట్రాకింగ్
🧩
AI Sketch • మధ్యస్థం⏱️ 20 నిమిషాల పఠన సమయం

రికర్షన్ మరియు బ్యాక్‌ట్రాకింగ్

Recursion పునాదులు

Recursive function base case చేరుకునే వరకు సమస్య యొక్క చిన్న రూపంతో తనను తాను call చేసుకుంటుంది.

ప్రతి recursion కి రెండు విషయాలు కావాలి:

  1. Base case - నేరుగా return చేసే సరళమైన input.
  2. Recursive case - సమస్యను విభజించి తనను తాను call చేసుకోవడం.
def factorial(n):
    if n <= 1:        # base case
        return 1
    return n * factorial(n - 1)  # recursive case

Call Stack - దృశ్యీకరణ

ప్రతి recursive call call stack పైకి frame push చేస్తుంది. Base case return అయినప్పుడు, frames రివర్స్ క్రమంలో pop అవుతాయి.

factorial(4)
  → factorial(3)
    → factorial(2)
      → factorial(1) → 1 return చేస్తుంది
    ← 2 return చేస్తుంది
  ← 6 return చేస్తుంది
← 24 return చేస్తుంది

Base case లేకపోతే, stack overflow అవుతుంది. Python default recursion limit 1,000 frames.

🤯
Python 1,000 recursion limit ఉద్దేశపూర్వకంగా conservative. sys.setrecursionlimit() తో పెంచవచ్చు, కానీ deep recursion కి iterative solutions సాధారణంగా ఇష్టపడతారు.

Fibonacci - క్లాసిక్ ఉచ్చు

Naïve recursive Fibonacci O(2ⁿ) ఎందుకంటే ఇది అదే sub-problems ను మళ్ళీ మళ్ళీ compute చేస్తుంది. Memoisation దీన్ని O(n) time మరియు space లో పరిష్కరిస్తుంది.

from functools import lru_cache

@lru_cache(maxsize=None)
def fib(n):
    if n < 2:
        return n
    return fib(n - 1) + fib(n - 2)
Fibonacci కోసం recursion tree, పునరావృత sub-problems చూపిస్తూ
Memoisation లేకుండా fib(5) 15 calls చేస్తుంది. Memoisation తో కేవలం 5.

Backtracking - అన్నీ ప్రయత్నించు, తర్వాత రద్దు చేయి

Backtracking అనేది twist తో recursion: మీరు ఎంపిక చేసి, recurse చేసి, తదుపరి option ప్రయత్నించే ముందు ఎంపికను రద్దు చేస్తారు. Maze explore చేయడం అనుకోండి - ముందుకు నడవండి, dead end తగిలితే వెనక్కి, తదుపరి path ప్రయత్నించండి.

Backtracking Template

def backtrack(state, choices):
    if is_solution(state):
        result.append(state.copy())
        return
    for choice in choices:
        if is_valid(choice):
            state.add(choice)       # ఎంచుకో
            backtrack(state, ...)   # explore చేయి
            state.remove(choice)    # రద్దు చేయి

ఈ మూడు-దశల pattern - ఎంచుకో, explore చేయి, రద్దు చేయి - దాదాపు ప్రతి backtracking సమస్య యొక్క వెన్నెముక.

పాఠం 8 / 100% పూర్తి
←Binary Search పాటర్న్‌లు

Discussion

Sign in to join the discussion

lessons.suggestEdit
🧠త్వరిత తనిఖీ

Backtracking template లో, recursive call తర్వాత ఎంపికను ఎందుకు రద్దు చేస్తాం?

Permutations

[1, 2, 3] యొక్క అన్ని వరుసక్రమాలు generate చేయండి. ప్రతి level లో, ఉపయోగించని number ఎంచుకోండి, recurse చేయండి, తర్వాత un-pick చేయండి.

         []
      /   |   \
    [1]  [2]  [3]
    / \   ...
 [1,2] [1,3]
   |      |
[1,2,3] [1,3,2]  ... (6 మొత్తం)

n! permutations ఉంటాయి, కాబట్టి time complexity O(n × n!).

Combinations మరియు Subsets

Combinations (n choose k): ప్రతి element వద్ద, దాన్ని చేర్చండి లేదా skip చేయండి, duplicates నివారించడానికి ముందుకు మాత్రమే recurse చేయండి.

Subsets: size constraint లేకుండా అదే ఆలోచన - recursion tree లో ప్రతి node valid subset. 2ⁿ subsets ఉంటాయి.

🤔
Think about it:Permutations n! results ఇస్తాయి, subsets 2ⁿ ఇస్తాయి. n=10 కి, అది 3,628,800 vs 1,024 - భారీ తేడా. ఎందుకు?

N-Queens - వివరణ

N×N board పై N queens ను ఒకరినొకరు attack చేయకుండా ఉంచండి. N=4 కి:

. Q . .
. . . Q
Q . . .
. . Q .

వ్యూహం: ప్రతి row కి ఒక queen ఉంచండి. ప్రతి row కి ప్రతి column ప్రయత్నించండి. Column, main diagonal మరియు anti-diagonal conflicts తనిఖీ చేయండి. Safe అయితే ఉంచి తదుపరి row కి recurse చేయండి. Stuck అయితే backtrack.

మూడు sets తో conflicts track చేయండి: cols, diag (row − col) మరియు anti_diag (row + col).

🧠త్వరిత తనిఖీ

N-Queens సమస్యలో diagonal conflicts ను సమర్థవంతంగా ఎలా తనిఖీ చేస్తాం?

Sudoku Solver - భావన

ఖాళీ cell కనుగొని, 1–9 digits ప్రయత్నించండి. ప్రతి digit కి row, column మరియు 3×3 box constraints తనిఖీ చేయండి. Valid అయితే ఉంచి recurse చేయండి. ఏ digit పనిచేయకపోతే, undo చేసి backtrack. Constraints నుండి pruning భారీ search space ఉన్నప్పటికీ దీన్ని సాధ్యం చేస్తుంది.

Grid లో Word Search

2D letters board మరియు target word ఇచ్చినప్పుడు, ప్రతి cell నుండి ప్రారంభించి నాలుగు దిశలలో DFS చేయండి, ఒక character చొప్పున match చేస్తూ. Recursion సమయంలో cells ను visited గా mark చేసి, backtrack చేసేటప్పుడు unmark చేయండి.

Backtracking యొక్క Time Complexity

ఖర్చు branching factor (ప్రతి step లో choices) మరియు depth (solution కి steps) పై ఆధారపడుతుంది. b branches మరియు d depth కి: O(bᵈ).

| సమస్య | Branching | Depth | Complexity | |--------|-----------|-------|------------| | Permutations | n, n−1, … | n | O(n!) | | Subsets | 2 | n | O(2ⁿ) | | N-Queens | ~n | n | O(n!) worst case |

Pruning ద్వారా Optimisation

Pruning అంటే విఫలమవుతాయని తెలిసిన branches ను skip చేయడం. ఉదాహరణలు:

  • N-Queens: ఇప్పటికే occupied columns skip.
  • Sudoku: constraints ఉల్లంఘించే digits skip.
  • Combination sum: remaining sum < 0 అయితే skip.

మంచి pruning అసాధ్యమైన search ను వేగవంతమైనదిగా మార్చగలదు.

🧠త్వరిత తనిఖీ

Backtracking algorithm లో pruning ఏమి చేస్తుంది?

🤔
Think about it:చాలా backtracking సమస్యలు dynamic programming తో కూడా పరిష్కరించవచ్చు. రెండింటి మధ్య విధానంలో కీలక తేడా ఏమిటి?

📚 మరింత చదవండి

  • NeetCode - Backtracking playlist - video walkthroughs తో సమస్యలు
  • Tech Interview Handbook - Recursion - patterns మరియు సాధారణ pitfalls
  • LeetCode Backtracking study plan - క్రమానుగత సమస్యల సెట్