<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/">
    <channel>
        <title>Algo Blog</title>
        <link>https://ajay-dhangar.github.io/algo/hi/blog</link>
        <description>Algo Blog</description>
        <lastBuildDate>Sun, 24 May 2026 06:35:01 GMT</lastBuildDate>
        <docs>https://validator.w3.org/feed/docs/rss2.html</docs>
        <generator>https://github.com/jpmonette/feed</generator>
        <language>hi</language>
        <item>
            <title><![CDATA[Graph Theory Basics]]></title>
            <link>https://ajay-dhangar.github.io/algo/hi/blog/graph-theory-basics</link>
            <guid>https://ajay-dhangar.github.io/algo/hi/blog/graph-theory-basics</guid>
            <pubDate>Sun, 24 May 2026 06:35:01 GMT</pubDate>
            <description><![CDATA[Graph theory is a branch of mathematics and computer science that studies]]></description>
            <content:encoded><![CDATA[<p>Graph theory is a branch of mathematics and computer science that studies
the properties and relationships of graphs — consisting of vertices (nodes)
and edges (links) connecting them.</p>
<h2 class="anchor anchorWithStickyNavbar_LWe7" id="1-vertices-and-edges">1. Vertices and Edges<a href="https://ajay-dhangar.github.io/algo/hi/blog/graph-theory-basics#1-vertices-and-edges" class="hash-link" aria-label="1. Vertices and Edges का सीधा लिंक" title="1. Vertices and Edges का सीधा लिंक">​</a></h2>
<ul>
<li><strong>Vertices (Nodes):</strong> Represent entities such as people in a social network or cities on a map.</li>
<li><strong>Edges:</strong> Represent relationships like friendships or roads between cities.</li>
</ul>
<p><strong>Types:</strong></p>
<ul>
<li><strong>Undirected Graphs:</strong> Edges have no direction — relationship is mutual.</li>
<li><strong>Directed Graphs (Digraphs):</strong> Edges have direction — relationship goes one way.</li>
</ul>
<h2 class="anchor anchorWithStickyNavbar_LWe7" id="2-types-of-graphs">2. Types of Graphs<a href="https://ajay-dhangar.github.io/algo/hi/blog/graph-theory-basics#2-types-of-graphs" class="hash-link" aria-label="2. Types of Graphs का सीधा लिंक" title="2. Types of Graphs का सीधा लिंक">​</a></h2>
<ul>
<li><strong>Simple Graph:</strong> No loops or multiple edges between the same pair of vertices.</li>
<li><strong>Weighted Graph:</strong> Edges have weights/costs — useful for shortest path problems.</li>
<li><strong>Complete Graph:</strong> Every pair of distinct vertices is connected.</li>
<li><strong>Cyclic vs Acyclic:</strong> Cyclic contains cycles; acyclic does not. A Directed Acyclic Graph (DAG) is key in task scheduling.</li>
</ul>
<h2 class="anchor anchorWithStickyNavbar_LWe7" id="3-key-graph-algorithms">3. Key Graph Algorithms<a href="https://ajay-dhangar.github.io/algo/hi/blog/graph-theory-basics#3-key-graph-algorithms" class="hash-link" aria-label="3. Key Graph Algorithms का सीधा लिंक" title="3. Key Graph Algorithms का सीधा लिंक">​</a></h2>
<p><strong>Breadth-First Search (BFS):</strong>
Explores level by level. Used for shortest path in unweighted graphs.
Time Complexity: O(V + E)</p>
<p><strong>Depth-First Search (DFS):</strong>
Explores as far as possible before backtracking. Used for cycle detection and topological sorting.
Time Complexity: O(V + E)</p>
<p><strong>Dijkstra's Algorithm:</strong>
Shortest path for weighted graphs from a single source.
Time Complexity: O((V + E) log V) with a priority queue.</p>
<p><strong>Kruskal's and Prim's Algorithms:</strong>
Find the Minimum Spanning Tree (MST) — connects all vertices with minimum total edge weight.
Time Complexity: O(E log V)</p>
<h2 class="anchor anchorWithStickyNavbar_LWe7" id="4-applications">4. Applications<a href="https://ajay-dhangar.github.io/algo/hi/blog/graph-theory-basics#4-applications" class="hash-link" aria-label="4. Applications का सीधा लिंक" title="4. Applications का सीधा लिंक">​</a></h2>
<ul>
<li><strong>Social Networks:</strong> Modeling relationships between users.</li>
<li><strong>Maps and Navigation:</strong> Finding shortest routes.</li>
<li><strong>Communication Networks:</strong> Designing efficient data transfer networks.</li>
<li><strong>Task Scheduling:</strong> Using DAGs to model tasks with dependencies.</li>
</ul>
<h2 class="anchor anchorWithStickyNavbar_LWe7" id="5-graph-representations">5. Graph Representations<a href="https://ajay-dhangar.github.io/algo/hi/blog/graph-theory-basics#5-graph-representations" class="hash-link" aria-label="5. Graph Representations का सीधा लिंक" title="5. Graph Representations का सीधा लिंक">​</a></h2>
<ul>
<li><strong>Adjacency Matrix:</strong> 2D array. Efficient for dense graphs but requires O(V²) space.</li>
<li><strong>Adjacency List:</strong> List of lists. More space-efficient for sparse graphs.</li>
</ul>
<h2 class="anchor anchorWithStickyNavbar_LWe7" id="conclusion">Conclusion<a href="https://ajay-dhangar.github.io/algo/hi/blog/graph-theory-basics#conclusion" class="hash-link" aria-label="Conclusion का सीधा लिंक" title="Conclusion का सीधा लिंक">​</a></h2>
<p>Graph theory provides a powerful framework for solving a wide variety
of problems in computer science — from social media and navigation
systems to task scheduling and network design.</p>]]></content:encoded>
            <category>graphs</category>
            <category>algorithms</category>
            <category>dsa</category>
            <category>bfs</category>
            <category>dfs</category>
            <category>dijkstra</category>
        </item>
        <item>
            <title><![CDATA[Top 5 Sorting Algorithms]]></title>
            <link>https://ajay-dhangar.github.io/algo/hi/blog/top-5-sorting-algorithms</link>
            <guid>https://ajay-dhangar.github.io/algo/hi/blog/top-5-sorting-algorithms</guid>
            <pubDate>Sun, 24 May 2026 06:35:01 GMT</pubDate>
            <description><![CDATA[Sorting is a fundamental operation in computer science, crucial for]]></description>
            <content:encoded><![CDATA[<p>Sorting is a fundamental operation in computer science, crucial for
efficiently organizing and retrieving data. Here are the top 5 sorting
algorithms you should know about.</p>
<h2 class="anchor anchorWithStickyNavbar_LWe7" id="1-bubble-sort">1. Bubble Sort<a href="https://ajay-dhangar.github.io/algo/hi/blog/top-5-sorting-algorithms#1-bubble-sort" class="hash-link" aria-label="1. Bubble Sort का सीधा लिंक" title="1. Bubble Sort का सीधा लिंक">​</a></h2>
<p><strong>Time Complexity:</strong> O(n²)</p>
<p>Bubble Sort repeatedly steps through the list, compares adjacent elements,
and swaps them if they are in the wrong order until the list is sorted.</p>
<p><strong>Use Case:</strong> Best used when the input list is small or nearly sorted.</p>
<h2 class="anchor anchorWithStickyNavbar_LWe7" id="2-selection-sort">2. Selection Sort<a href="https://ajay-dhangar.github.io/algo/hi/blog/top-5-sorting-algorithms#2-selection-sort" class="hash-link" aria-label="2. Selection Sort का सीधा लिंक" title="2. Selection Sort का सीधा लिंक">​</a></h2>
<p><strong>Time Complexity:</strong> O(n²)</p>
<p>Selection Sort divides the list into a sorted and unsorted section. It
repeatedly selects the smallest element from the unsorted section and
moves it to the end of the sorted section.</p>
<p><strong>Use Case:</strong> Good for small lists, but inefficient for larger datasets.</p>
<h2 class="anchor anchorWithStickyNavbar_LWe7" id="3-insertion-sort">3. Insertion Sort<a href="https://ajay-dhangar.github.io/algo/hi/blog/top-5-sorting-algorithms#3-insertion-sort" class="hash-link" aria-label="3. Insertion Sort का सीधा लिंक" title="3. Insertion Sort का सीधा लिंक">​</a></h2>
<p><strong>Time Complexity:</strong> O(n²) worst case, O(n) when nearly sorted</p>
<p>Insertion Sort builds the sorted list one element at a time, inserting
each element into its correct position within the sorted part of the array.</p>
<p><strong>Use Case:</strong> Best for small or mostly sorted datasets. Great for
real-time applications like sorting cards by hand.</p>
<h2 class="anchor anchorWithStickyNavbar_LWe7" id="4-merge-sort">4. Merge Sort<a href="https://ajay-dhangar.github.io/algo/hi/blog/top-5-sorting-algorithms#4-merge-sort" class="hash-link" aria-label="4. Merge Sort का सीधा लिंक" title="4. Merge Sort का सीधा लिंक">​</a></h2>
<p><strong>Time Complexity:</strong> O(n log n)</p>
<p>Merge Sort is a divide-and-conquer algorithm. It splits the list into
smaller sublists, sorts them, and merges them back together.</p>
<p><strong>Use Case:</strong> Great for large datasets where stability (preserving
relative order of equal elements) is important.</p>
<h2 class="anchor anchorWithStickyNavbar_LWe7" id="5-quick-sort">5. Quick Sort<a href="https://ajay-dhangar.github.io/algo/hi/blog/top-5-sorting-algorithms#5-quick-sort" class="hash-link" aria-label="5. Quick Sort का सीधा लिंक" title="5. Quick Sort का सीधा लिंक">​</a></h2>
<p><strong>Time Complexity:</strong> O(n log n) average, O(n²) worst case</p>
<p>Quick Sort selects a pivot element and partitions the array — elements
smaller than the pivot go left, greater go right. It recursively sorts
the sub-arrays.</p>
<p><strong>Use Case:</strong> Widely used due to its average-case efficiency. Highly
efficient for large datasets.</p>
<h2 class="anchor anchorWithStickyNavbar_LWe7" id="conclusion">Conclusion<a href="https://ajay-dhangar.github.io/algo/hi/blog/top-5-sorting-algorithms#conclusion" class="hash-link" aria-label="Conclusion का सीधा लिंक" title="Conclusion का सीधा लिंक">​</a></h2>
<p>Algorithms like Merge Sort and Quick Sort offer better performance for
larger datasets, while Bubble Sort, Selection Sort, and Insertion Sort
are simpler and suitable for smaller datasets. Understanding these
algorithms helps in optimizing the performance of data-intensive applications.</p>]]></content:encoded>
            <category>sorting</category>
            <category>algorithms</category>
            <category>dsa</category>
            <category>bubble-sort</category>
            <category>merge-sort</category>
            <category>quick-sort</category>
        </item>
        <item>
            <title><![CDATA[Understanding Time Complexity]]></title>
            <link>https://ajay-dhangar.github.io/algo/hi/blog/understanding-time-complexity</link>
            <guid>https://ajay-dhangar.github.io/algo/hi/blog/understanding-time-complexity</guid>
            <pubDate>Sun, 24 May 2026 06:35:01 GMT</pubDate>
            <description><![CDATA[Time complexity is a computational concept that helps us measure the]]></description>
            <content:encoded><![CDATA[<p>Time complexity is a computational concept that helps us measure the
efficiency of an algorithm. It describes the amount of time an algorithm
takes to run, as a function of the size of its input.</p>
<h2 class="anchor anchorWithStickyNavbar_LWe7" id="why-time-complexity-matters">Why Time Complexity Matters<a href="https://ajay-dhangar.github.io/algo/hi/blog/understanding-time-complexity#why-time-complexity-matters" class="hash-link" aria-label="Why Time Complexity Matters का सीधा लिंक" title="Why Time Complexity Matters का सीधा लिंक">​</a></h2>
<p>When designing algorithms, we are interested in how fast they can solve
a problem. Time complexity provides a way to estimate the performance of
an algorithm without having to test it on every possible input.</p>
<h2 class="anchor anchorWithStickyNavbar_LWe7" id="big-o-notation">Big-O Notation<a href="https://ajay-dhangar.github.io/algo/hi/blog/understanding-time-complexity#big-o-notation" class="hash-link" aria-label="Big-O Notation का सीधा लिंक" title="Big-O Notation का सीधा लिंक">​</a></h2>
<p>Time complexity is often expressed using Big-O notation, which describes
the upper bound of an algorithm's running time:</p>
<ul>
<li><strong>O(1)</strong> – Constant Time: Same time regardless of input size. Example: Accessing an array element by index.</li>
<li><strong>O(log n)</strong> – Logarithmic Time: Runtime increases logarithmically. Example: Binary search.</li>
<li><strong>O(n)</strong> – Linear Time: Runtime increases linearly. Example: Iterating through an array.</li>
<li><strong>O(n log n)</strong> – Log-Linear Time: Common in efficient sorting algorithms like Merge Sort and Quick Sort.</li>
<li><strong>O(n²)</strong> – Quadratic Time: Runtime increases quadratically. Example: Bubble Sort.</li>
<li><strong>O(2ⁿ)</strong> – Exponential Time: Runtime doubles with every additional input. Example: Fibonacci via simple recursion.</li>
</ul>
<h2 class="anchor anchorWithStickyNavbar_LWe7" id="practical-example">Practical Example<a href="https://ajay-dhangar.github.io/algo/hi/blog/understanding-time-complexity#practical-example" class="hash-link" aria-label="Practical Example का सीधा लिंक" title="Practical Example का सीधा लिंक">​</a></h2>
<p>Consider checking whether a number exists in a list:</p>
<ul>
<li><strong>Linear search</strong> scans each element one by one → O(n)</li>
<li><strong>Binary search</strong> (on a sorted list) halves the search space each step → O(log n)</li>
</ul>
<h2 class="anchor anchorWithStickyNavbar_LWe7" id="best-worst-and-average-cases">Best, Worst, and Average Cases<a href="https://ajay-dhangar.github.io/algo/hi/blog/understanding-time-complexity#best-worst-and-average-cases" class="hash-link" aria-label="Best, Worst, and Average Cases का सीधा लिंक" title="Best, Worst, and Average Cases का सीधा लिंक">​</a></h2>
<ul>
<li><strong>Best Case</strong>: Fastest execution (e.g., element found at start of array)</li>
<li><strong>Worst Case</strong>: Slowest execution (e.g., element not in array)</li>
<li><strong>Average Case</strong>: Expected time based on random input distribution</li>
</ul>
<h2 class="anchor anchorWithStickyNavbar_LWe7" id="conclusion">Conclusion<a href="https://ajay-dhangar.github.io/algo/hi/blog/understanding-time-complexity#conclusion" class="hash-link" aria-label="Conclusion का सीधा लिंक" title="Conclusion का सीधा लिंक">​</a></h2>
<p>Understanding time complexity helps in choosing the best algorithm for
the task and predicting how it will perform as data grows. Along with
space complexity, it forms the foundation for building scalable,
high-performance algorithms.</p>]]></content:encoded>
            <category>algorithms</category>
            <category>theory</category>
            <category>big-o</category>
            <category>time-complexity</category>
        </item>
        <item>
            <title><![CDATA[Demystifying Dynamic Programming: A Beginner-Friendly Guide]]></title>
            <link>https://ajay-dhangar.github.io/algo/hi/blog/dynamic-programming-introduction</link>
            <guid>https://ajay-dhangar.github.io/algo/hi/blog/dynamic-programming-introduction</guid>
            <pubDate>Fri, 22 May 2026 09:58:50 GMT</pubDate>
            <description><![CDATA[Dynamic Programming (DP) has a bit of a scary reputation in the coding world. If you’ve ever looked at a DP solution and thought, "How on earth did someone come up with that?"—you are definitely not alone.]]></description>
            <content:encoded><![CDATA[<p>Dynamic Programming (DP) has a bit of a scary reputation in the coding world. If you’ve ever looked at a DP solution and thought, <em>"How on earth did someone come up with that?"</em>—you are definitely not alone.</p>
<p>But stripped down to its core, DP isn't magic. It’s just an incredibly smart way of trading a little bit of memory to save a massive amount of time. It's the ultimate coding shortcut: solving a problem once, writing down the answer, and never doing the hard work twice.</p>
<p>Let’s break it down together, step-by-step, without the academic jargon.</p>
<h2 class="anchor anchorWithStickyNavbar_LWe7" id="what-exactly-is-dynamic-programming">What Exactly is Dynamic Programming?<a href="https://ajay-dhangar.github.io/algo/hi/blog/dynamic-programming-introduction#what-exactly-is-dynamic-programming" class="hash-link" aria-label="What Exactly is Dynamic Programming? का सीधा लिंक" title="What Exactly is Dynamic Programming? का सीधा लिंक">​</a></h2>
<p>To understand DP, look at this simple human example.</p>
<p>If I ask you:</p>
<p><em>What is <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mn>1</mn><mo>+</mo><mn>1</mn><mo>+</mo><mn>1</mn><mo>+</mo><mn>1</mn><mo>+</mo><mn>1</mn></mrow><annotation encoding="application/x-tex">1 + 1 + 1 + 1 + 1</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.7278em;vertical-align:-0.0833em"></span><span class="mord">1</span><span class="mspace" style="margin-right:0.2222em"></span><span class="mbin">+</span><span class="mspace" style="margin-right:0.2222em"></span></span><span class="base"><span class="strut" style="height:0.7278em;vertical-align:-0.0833em"></span><span class="mord">1</span><span class="mspace" style="margin-right:0.2222em"></span><span class="mbin">+</span><span class="mspace" style="margin-right:0.2222em"></span></span><span class="base"><span class="strut" style="height:0.7278em;vertical-align:-0.0833em"></span><span class="mord">1</span><span class="mspace" style="margin-right:0.2222em"></span><span class="mbin">+</span><span class="mspace" style="margin-right:0.2222em"></span></span><span class="base"><span class="strut" style="height:0.7278em;vertical-align:-0.0833em"></span><span class="mord">1</span><span class="mspace" style="margin-right:0.2222em"></span><span class="mbin">+</span><span class="mspace" style="margin-right:0.2222em"></span></span><span class="base"><span class="strut" style="height:0.6444em"></span><span class="mord">1</span></span></span></span>?</em><br>
<!-- -->You count them up and say, <strong>5</strong>.</p>
<p>Now, if I add another "<span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mo>+</mo><mn>1</mn></mrow><annotation encoding="application/x-tex">+ 1</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.7278em;vertical-align:-0.0833em"></span><span class="mord">+</span><span class="mord">1</span></span></span></span>" to the end and ask you what the total is, what do you do? You don't start counting from the beginning again. You remember that the previous total was 5, add 1 to it, and instantly say <strong>6</strong>.</p>
<p><strong>That is Dynamic Programming.</strong> It is an optimization technique where we solve complex problems by breaking them into smaller subproblems, remembering the answers to those subproblems, and using them so we never have to recompute them.</p>
<h2 class="anchor anchorWithStickyNavbar_LWe7" id="the-two-rules-when-can-you-use-dp">The Two Rules: When Can You Use DP?<a href="https://ajay-dhangar.github.io/algo/hi/blog/dynamic-programming-introduction#the-two-rules-when-can-you-use-dp" class="hash-link" aria-label="The Two Rules: When Can You Use DP? का सीधा लिंक" title="The Two Rules: When Can You Use DP? का सीधा लिंक">​</a></h2>
<p>You can't throw DP at every single problem. A problem has to pass two specific tests to be a good candidate for a DP solution:</p>
<ol>
<li><strong>Overlapping Subproblems:</strong> The problem can be broken down into smaller pieces, and those pieces keep repeating. (Like counting the same numbers over and over).</li>
<li><strong>Optimal Substructure:</strong> You can find the absolute best solution to the big problem simply by combining the best solutions of the smaller pieces.</li>
</ol>
<h2 class="anchor anchorWithStickyNavbar_LWe7" id="the-classic-playground-the-fibonacci-series">The Classic Playground: The Fibonacci Series<a href="https://ajay-dhangar.github.io/algo/hi/blog/dynamic-programming-introduction#the-classic-playground-the-fibonacci-series" class="hash-link" aria-label="The Classic Playground: The Fibonacci Series का सीधा लिंक" title="The Classic Playground: The Fibonacci Series का सीधा लिंक">​</a></h2>
<p>The absolute best way to see DP in action is the Fibonacci sequence (<span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mn>0</mn><mo separator="true">,</mo><mn>1</mn><mo separator="true">,</mo><mn>1</mn><mo separator="true">,</mo><mn>2</mn><mo separator="true">,</mo><mn>3</mn><mo separator="true">,</mo><mn>5</mn><mo separator="true">,</mo><mn>8</mn><mo separator="true">,</mo><mn>13...</mn></mrow><annotation encoding="application/x-tex">0, 1, 1, 2, 3, 5, 8, 13...</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.8389em;vertical-align:-0.1944em"></span><span class="mord">0</span><span class="mpunct">,</span><span class="mspace" style="margin-right:0.1667em"></span><span class="mord">1</span><span class="mpunct">,</span><span class="mspace" style="margin-right:0.1667em"></span><span class="mord">1</span><span class="mpunct">,</span><span class="mspace" style="margin-right:0.1667em"></span><span class="mord">2</span><span class="mpunct">,</span><span class="mspace" style="margin-right:0.1667em"></span><span class="mord">3</span><span class="mpunct">,</span><span class="mspace" style="margin-right:0.1667em"></span><span class="mord">5</span><span class="mpunct">,</span><span class="mspace" style="margin-right:0.1667em"></span><span class="mord">8</span><span class="mpunct">,</span><span class="mspace" style="margin-right:0.1667em"></span><span class="mord">13...</span></span></span></span>), where each number is the sum of the two preceding ones.</p>
<p>Mathematically, it looks like this:</p>
<p><span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>F</mi><mo stretchy="false">(</mo><mi>n</mi><mo stretchy="false">)</mo><mo>=</mo><mi>F</mi><mo stretchy="false">(</mo><mi>n</mi><mo>−</mo><mn>1</mn><mo stretchy="false">)</mo><mo>+</mo><mi>F</mi><mo stretchy="false">(</mo><mi>n</mi><mo>−</mo><mn>2</mn><mo stretchy="false">)</mo></mrow><annotation encoding="application/x-tex">F(n) = F(n-1) + F(n-2)</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:1em;vertical-align:-0.25em"></span><span class="mord mathnormal" style="margin-right:0.13889em">F</span><span class="mopen">(</span><span class="mord mathnormal">n</span><span class="mclose">)</span><span class="mspace" style="margin-right:0.2778em"></span><span class="mrel">=</span><span class="mspace" style="margin-right:0.2778em"></span></span><span class="base"><span class="strut" style="height:1em;vertical-align:-0.25em"></span><span class="mord mathnormal" style="margin-right:0.13889em">F</span><span class="mopen">(</span><span class="mord mathnormal">n</span><span class="mspace" style="margin-right:0.2222em"></span><span class="mbin">−</span><span class="mspace" style="margin-right:0.2222em"></span></span><span class="base"><span class="strut" style="height:1em;vertical-align:-0.25em"></span><span class="mord">1</span><span class="mclose">)</span><span class="mspace" style="margin-right:0.2222em"></span><span class="mbin">+</span><span class="mspace" style="margin-right:0.2222em"></span></span><span class="base"><span class="strut" style="height:1em;vertical-align:-0.25em"></span><span class="mord mathnormal" style="margin-right:0.13889em">F</span><span class="mopen">(</span><span class="mord mathnormal">n</span><span class="mspace" style="margin-right:0.2222em"></span><span class="mbin">−</span><span class="mspace" style="margin-right:0.2222em"></span></span><span class="base"><span class="strut" style="height:1em;vertical-align:-0.25em"></span><span class="mord">2</span><span class="mclose">)</span></span></span></span></p>
<h3 class="anchor anchorWithStickyNavbar_LWe7" id="1-the-naive-recursive-approach-the-slow-way">1. The Naive Recursive Approach (The Slow Way)<a href="https://ajay-dhangar.github.io/algo/hi/blog/dynamic-programming-introduction#1-the-naive-recursive-approach-the-slow-way" class="hash-link" aria-label="1. The Naive Recursive Approach (The Slow Way) का सीधा लिंक" title="1. The Naive Recursive Approach (The Slow Way) का सीधा लिंक">​</a></h3>
<p>If we write this formula directly into code using standard recursion, it looks clean, but it hides a massive performance issue.</p>
<div class="language-java codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-java codeBlock_bY9V thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token keyword" style="color:#00009f">class</span><span class="token plain"> </span><span class="token class-name">Main</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    </span><span class="token keyword" style="color:#00009f">static</span><span class="token plain"> </span><span class="token keyword" style="color:#00009f">int</span><span class="token plain"> </span><span class="token function" style="color:#d73a49">fib</span><span class="token punctuation" style="color:#393A34">(</span><span class="token keyword" style="color:#00009f">int</span><span class="token plain"> n</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">        </span><span class="token comment" style="color:#999988;font-style:italic">// Base cases</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">        </span><span class="token keyword" style="color:#00009f">if</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">(</span><span class="token plain">n </span><span class="token operator" style="color:#393A34">&lt;=</span><span class="token plain"> </span><span class="token number" style="color:#36acaa">1</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"> </span><span class="token keyword" style="color:#00009f">return</span><span class="token plain"> n</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">        </span><span class="token comment" style="color:#999988;font-style:italic">// Blinking blindly into the past</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">        </span><span class="token keyword" style="color:#00009f">return</span><span class="token plain"> </span><span class="token function" style="color:#d73a49">fib</span><span class="token punctuation" style="color:#393A34">(</span><span class="token plain">n </span><span class="token operator" style="color:#393A34">-</span><span class="token plain"> </span><span class="token number" style="color:#36acaa">1</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"> </span><span class="token operator" style="color:#393A34">+</span><span class="token plain"> </span><span class="token function" style="color:#d73a49">fib</span><span class="token punctuation" style="color:#393A34">(</span><span class="token plain">n </span><span class="token operator" style="color:#393A34">-</span><span class="token plain"> </span><span class="token number" style="color:#36acaa">2</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    </span><span class="token punctuation" style="color:#393A34">}</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    </span><span class="token keyword" style="color:#00009f">public</span><span class="token plain"> </span><span class="token keyword" style="color:#00009f">static</span><span class="token plain"> </span><span class="token keyword" style="color:#00009f">void</span><span class="token plain"> </span><span class="token function" style="color:#d73a49">main</span><span class="token punctuation" style="color:#393A34">(</span><span class="token class-name">String</span><span class="token punctuation" style="color:#393A34">[</span><span class="token punctuation" style="color:#393A34">]</span><span class="token plain"> args</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">        </span><span class="token class-name">System</span><span class="token punctuation" style="color:#393A34">.</span><span class="token plain">out</span><span class="token punctuation" style="color:#393A34">.</span><span class="token function" style="color:#d73a49">println</span><span class="token punctuation" style="color:#393A34">(</span><span class="token function" style="color:#d73a49">fib</span><span class="token punctuation" style="color:#393A34">(</span><span class="token number" style="color:#36acaa">6</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"> </span><span class="token comment" style="color:#999988;font-style:italic">// Output: 8</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    </span><span class="token punctuation" style="color:#393A34">}</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token punctuation" style="color:#393A34">}</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="क्लिपबोर्ड पर कोड कॉपी करें" title="कॉपी" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg viewBox="0 0 24 24" class="copyButtonIcon_y97N"><path fill="currentColor" d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg viewBox="0 0 24 24" class="copyButtonSuccessIcon_LjdS"><path fill="currentColor" d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div>
<div class="theme-admonition theme-admonition-note admonition_xJq3 alert alert--secondary"><div class="admonitionHeading_Gvgb"><span class="admonitionIcon_Rf37"><svg viewBox="0 0 14 16"><path fill-rule="evenodd" d="M6.3 5.69a.942.942 0 0 1-.28-.7c0-.28.09-.52.28-.7.19-.18.42-.28.7-.28.28 0 .52.09.7.28.18.19.28.42.28.7 0 .28-.09.52-.28.7a1 1 0 0 1-.7.3c-.28 0-.52-.11-.7-.3zM8 7.99c-.02-.25-.11-.48-.31-.69-.2-.19-.42-.3-.69-.31H6c-.27.02-.48.13-.69.31-.2.2-.3.44-.31.69h1v3c.02.27.11.5.31.69.2.2.42.31.69.31h1c.27 0 .48-.11.69-.31.2-.19.3-.42.31-.69H8V7.98v.01zM7 2.3c-3.14 0-5.7 2.54-5.7 5.68 0 3.14 2.56 5.7 5.7 5.7s5.7-2.55 5.7-5.7c0-3.15-2.56-5.69-5.7-5.69v.01zM7 .98c3.86 0 7 3.14 7 7s-3.14 7-7 7-7-3.12-7-7 3.14-7 7-7z"></path></svg></span>Why this hurts performance</div><div class="admonitionContent_BuS1"><ul>
<li>To calculate <code>fib(6)</code>, the computer calculates <code>fib(5)</code> and <code>fib(4)</code>. But to calculate <code>fib(5)</code>, it <em>also</em> has to calculate <code>fib(4)</code> and <code>fib(3)</code>.</li>
<li>Notice how <code>fib(4)</code> is being calculated completely from scratch multiple times? As <code>n</code> grows, this tree explodes. The time complexity is a brutal <strong><span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>O</mi><mo stretchy="false">(</mo><msup><mn>2</mn><mi>n</mi></msup><mo stretchy="false">)</mo></mrow><annotation encoding="application/x-tex">O(2^n)</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:1em;vertical-align:-0.25em"></span><span class="mord mathnormal" style="margin-right:0.02778em">O</span><span class="mopen">(</span><span class="mord"><span class="mord">2</span><span class="msupsub"><span class="vlist-t"><span class="vlist-r"><span class="vlist" style="height:0.6644em"><span style="top:-3.063em;margin-right:0.05em"><span class="pstrut" style="height:2.7em"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mathnormal mtight">n</span></span></span></span></span></span></span></span><span class="mclose">)</span></span></span></span></strong>. If you try to calculate <code>fib(50)</code>, your computer will likely freeze.</li>
</ul></div></div>
<h2 class="anchor anchorWithStickyNavbar_LWe7" id="dp-strategy-1-memoization-top-down-approach">DP Strategy 1: Memoization (Top-Down Approach)<a href="https://ajay-dhangar.github.io/algo/hi/blog/dynamic-programming-introduction#dp-strategy-1-memoization-top-down-approach" class="hash-link" aria-label="DP Strategy 1: Memoization (Top-Down Approach) का सीधा लिंक" title="DP Strategy 1: Memoization (Top-Down Approach) का सीधा लिंक">​</a></h2>
<p>Let's fix the recursive approach by giving our code a "notebook" (an array) to write down its answers. This is called <strong>Memoization</strong>.</p>
<p>We start from the top (<code>fib(6)</code>) and work our way down, but before calculating anything, we check our notebook to see if we already know the answer.</p>
<div class="language-java codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-java codeBlock_bY9V thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token keyword" style="color:#00009f">import</span><span class="token plain"> </span><span class="token import namespace" style="opacity:0.7">java</span><span class="token import namespace punctuation" style="opacity:0.7;color:#393A34">.</span><span class="token import namespace" style="opacity:0.7">util</span><span class="token import namespace punctuation" style="opacity:0.7;color:#393A34">.</span><span class="token import class-name">Arrays</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token keyword" style="color:#00009f">class</span><span class="token plain"> </span><span class="token class-name">Main</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    </span><span class="token keyword" style="color:#00009f">static</span><span class="token plain"> </span><span class="token keyword" style="color:#00009f">int</span><span class="token punctuation" style="color:#393A34">[</span><span class="token punctuation" style="color:#393A34">]</span><span class="token plain"> notebook</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    </span><span class="token keyword" style="color:#00009f">static</span><span class="token plain"> </span><span class="token keyword" style="color:#00009f">int</span><span class="token plain"> </span><span class="token function" style="color:#d73a49">fib</span><span class="token punctuation" style="color:#393A34">(</span><span class="token keyword" style="color:#00009f">int</span><span class="token plain"> n</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">        </span><span class="token keyword" style="color:#00009f">if</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">(</span><span class="token plain">n </span><span class="token operator" style="color:#393A34">&lt;=</span><span class="token plain"> </span><span class="token number" style="color:#36acaa">1</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"> </span><span class="token keyword" style="color:#00009f">return</span><span class="token plain"> n</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">        </span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">        </span><span class="token comment" style="color:#999988;font-style:italic">// Step 1: Check the notebook. If it's not -1, we already solved it!</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">        </span><span class="token keyword" style="color:#00009f">if</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">(</span><span class="token plain">notebook</span><span class="token punctuation" style="color:#393A34">[</span><span class="token plain">n</span><span class="token punctuation" style="color:#393A34">]</span><span class="token plain"> </span><span class="token operator" style="color:#393A34">!=</span><span class="token plain"> </span><span class="token operator" style="color:#393A34">-</span><span class="token number" style="color:#36acaa">1</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"> </span><span class="token keyword" style="color:#00009f">return</span><span class="token plain"> notebook</span><span class="token punctuation" style="color:#393A34">[</span><span class="token plain">n</span><span class="token punctuation" style="color:#393A34">]</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">        </span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">        </span><span class="token comment" style="color:#999988;font-style:italic">// Step 2: If we don't know it, calculate it and write it down</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">        </span><span class="token keyword" style="color:#00009f">return</span><span class="token plain"> notebook</span><span class="token punctuation" style="color:#393A34">[</span><span class="token plain">n</span><span class="token punctuation" style="color:#393A34">]</span><span class="token plain"> </span><span class="token operator" style="color:#393A34">=</span><span class="token plain"> </span><span class="token function" style="color:#d73a49">fib</span><span class="token punctuation" style="color:#393A34">(</span><span class="token plain">n </span><span class="token operator" style="color:#393A34">-</span><span class="token plain"> </span><span class="token number" style="color:#36acaa">1</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"> </span><span class="token operator" style="color:#393A34">+</span><span class="token plain"> </span><span class="token function" style="color:#d73a49">fib</span><span class="token punctuation" style="color:#393A34">(</span><span class="token plain">n </span><span class="token operator" style="color:#393A34">-</span><span class="token plain"> </span><span class="token number" style="color:#36acaa">2</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    </span><span class="token punctuation" style="color:#393A34">}</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    </span><span class="token keyword" style="color:#00009f">public</span><span class="token plain"> </span><span class="token keyword" style="color:#00009f">static</span><span class="token plain"> </span><span class="token keyword" style="color:#00009f">void</span><span class="token plain"> </span><span class="token function" style="color:#d73a49">main</span><span class="token punctuation" style="color:#393A34">(</span><span class="token class-name">String</span><span class="token punctuation" style="color:#393A34">[</span><span class="token punctuation" style="color:#393A34">]</span><span class="token plain"> args</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">        </span><span class="token keyword" style="color:#00009f">int</span><span class="token plain"> n </span><span class="token operator" style="color:#393A34">=</span><span class="token plain"> </span><span class="token number" style="color:#36acaa">6</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">        notebook </span><span class="token operator" style="color:#393A34">=</span><span class="token plain"> </span><span class="token keyword" style="color:#00009f">new</span><span class="token plain"> </span><span class="token keyword" style="color:#00009f">int</span><span class="token punctuation" style="color:#393A34">[</span><span class="token plain">n </span><span class="token operator" style="color:#393A34">+</span><span class="token plain"> </span><span class="token number" style="color:#36acaa">1</span><span class="token punctuation" style="color:#393A34">]</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">        </span><span class="token class-name">Arrays</span><span class="token punctuation" style="color:#393A34">.</span><span class="token function" style="color:#d73a49">fill</span><span class="token punctuation" style="color:#393A34">(</span><span class="token plain">notebook</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"> </span><span class="token operator" style="color:#393A34">-</span><span class="token number" style="color:#36acaa">1</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"> </span><span class="token comment" style="color:#999988;font-style:italic">// Initialize empty notebook</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">        </span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">        </span><span class="token class-name">System</span><span class="token punctuation" style="color:#393A34">.</span><span class="token plain">out</span><span class="token punctuation" style="color:#393A34">.</span><span class="token function" style="color:#d73a49">println</span><span class="token punctuation" style="color:#393A34">(</span><span class="token function" style="color:#d73a49">fib</span><span class="token punctuation" style="color:#393A34">(</span><span class="token plain">n</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    </span><span class="token punctuation" style="color:#393A34">}</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token punctuation" style="color:#393A34">}</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="क्लिपबोर्ड पर कोड कॉपी करें" title="कॉपी" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg viewBox="0 0 24 24" class="copyButtonIcon_y97N"><path fill="currentColor" d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg viewBox="0 0 24 24" class="copyButtonSuccessIcon_LjdS"><path fill="currentColor" d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div>
<ul>
<li><strong>Time Complexity:</strong> <strong><span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>O</mi><mo stretchy="false">(</mo><mi>n</mi><mo stretchy="false">)</mo></mrow><annotation encoding="application/x-tex">O(n)</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:1em;vertical-align:-0.25em"></span><span class="mord mathnormal" style="margin-right:0.02778em">O</span><span class="mopen">(</span><span class="mord mathnormal">n</span><span class="mclose">)</span></span></span></span></strong> — We only solve each number exactly once!</li>
<li><strong>Space Complexity:</strong> <strong><span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>O</mi><mo stretchy="false">(</mo><mi>n</mi><mo stretchy="false">)</mo></mrow><annotation encoding="application/x-tex">O(n)</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:1em;vertical-align:-0.25em"></span><span class="mord mathnormal" style="margin-right:0.02778em">O</span><span class="mopen">(</span><span class="mord mathnormal">n</span><span class="mclose">)</span></span></span></span></strong> — For our notebook and the recursion stack.</li>
</ul>
<h2 class="anchor anchorWithStickyNavbar_LWe7" id="dp-strategy-2-tabulation-bottom-up-approach">DP Strategy 2: Tabulation (Bottom-Up Approach)<a href="https://ajay-dhangar.github.io/algo/hi/blog/dynamic-programming-introduction#dp-strategy-2-tabulation-bottom-up-approach" class="hash-link" aria-label="DP Strategy 2: Tabulation (Bottom-Up Approach) का सीधा लिंक" title="DP Strategy 2: Tabulation (Bottom-Up Approach) का सीधा लिंक">​</a></h2>
<p>What if we avoided the recursive function calls altogether? Instead of starting at <code>fib(6)</code> and looking backward, let’s start at the very bottom (<code>fib(0)</code> and <code>fib(1)</code>) and build a table up to our answer. This is called <strong>Tabulation</strong>.</p>
<div class="language-java codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-java codeBlock_bY9V thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token keyword" style="color:#00009f">class</span><span class="token plain"> </span><span class="token class-name">Main</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    </span><span class="token keyword" style="color:#00009f">static</span><span class="token plain"> </span><span class="token keyword" style="color:#00009f">int</span><span class="token plain"> </span><span class="token function" style="color:#d73a49">fib</span><span class="token punctuation" style="color:#393A34">(</span><span class="token keyword" style="color:#00009f">int</span><span class="token plain"> n</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">        </span><span class="token keyword" style="color:#00009f">if</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">(</span><span class="token plain">n </span><span class="token operator" style="color:#393A34">&lt;=</span><span class="token plain"> </span><span class="token number" style="color:#36acaa">1</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"> </span><span class="token keyword" style="color:#00009f">return</span><span class="token plain"> n</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">        </span><span class="token comment" style="color:#999988;font-style:italic">// Create our table</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">        </span><span class="token keyword" style="color:#00009f">int</span><span class="token punctuation" style="color:#393A34">[</span><span class="token punctuation" style="color:#393A34">]</span><span class="token plain"> table </span><span class="token operator" style="color:#393A34">=</span><span class="token plain"> </span><span class="token keyword" style="color:#00009f">new</span><span class="token plain"> </span><span class="token keyword" style="color:#00009f">int</span><span class="token punctuation" style="color:#393A34">[</span><span class="token plain">n </span><span class="token operator" style="color:#393A34">+</span><span class="token plain"> </span><span class="token number" style="color:#36acaa">1</span><span class="token punctuation" style="color:#393A34">]</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">        </span><span class="token comment" style="color:#999988;font-style:italic">// Fill in what we absolutely know (Base cases)</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">        table</span><span class="token punctuation" style="color:#393A34">[</span><span class="token number" style="color:#36acaa">0</span><span class="token punctuation" style="color:#393A34">]</span><span class="token plain"> </span><span class="token operator" style="color:#393A34">=</span><span class="token plain"> </span><span class="token number" style="color:#36acaa">0</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">        table</span><span class="token punctuation" style="color:#393A34">[</span><span class="token number" style="color:#36acaa">1</span><span class="token punctuation" style="color:#393A34">]</span><span class="token plain"> </span><span class="token operator" style="color:#393A34">=</span><span class="token plain"> </span><span class="token number" style="color:#36acaa">1</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">        </span><span class="token comment" style="color:#999988;font-style:italic">// Build the rest of the table sequentially</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">        </span><span class="token keyword" style="color:#00009f">for</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">(</span><span class="token keyword" style="color:#00009f">int</span><span class="token plain"> i </span><span class="token operator" style="color:#393A34">=</span><span class="token plain"> </span><span class="token number" style="color:#36acaa">2</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"> i </span><span class="token operator" style="color:#393A34">&lt;=</span><span class="token plain"> n</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"> i</span><span class="token operator" style="color:#393A34">++</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">            table</span><span class="token punctuation" style="color:#393A34">[</span><span class="token plain">i</span><span class="token punctuation" style="color:#393A34">]</span><span class="token plain"> </span><span class="token operator" style="color:#393A34">=</span><span class="token plain"> table</span><span class="token punctuation" style="color:#393A34">[</span><span class="token plain">i </span><span class="token operator" style="color:#393A34">-</span><span class="token plain"> </span><span class="token number" style="color:#36acaa">1</span><span class="token punctuation" style="color:#393A34">]</span><span class="token plain"> </span><span class="token operator" style="color:#393A34">+</span><span class="token plain"> table</span><span class="token punctuation" style="color:#393A34">[</span><span class="token plain">i </span><span class="token operator" style="color:#393A34">-</span><span class="token plain"> </span><span class="token number" style="color:#36acaa">2</span><span class="token punctuation" style="color:#393A34">]</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">        </span><span class="token punctuation" style="color:#393A34">}</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">        </span><span class="token keyword" style="color:#00009f">return</span><span class="token plain"> table</span><span class="token punctuation" style="color:#393A34">[</span><span class="token plain">n</span><span class="token punctuation" style="color:#393A34">]</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    </span><span class="token punctuation" style="color:#393A34">}</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    </span><span class="token keyword" style="color:#00009f">public</span><span class="token plain"> </span><span class="token keyword" style="color:#00009f">static</span><span class="token plain"> </span><span class="token keyword" style="color:#00009f">void</span><span class="token plain"> </span><span class="token function" style="color:#d73a49">main</span><span class="token punctuation" style="color:#393A34">(</span><span class="token class-name">String</span><span class="token punctuation" style="color:#393A34">[</span><span class="token punctuation" style="color:#393A34">]</span><span class="token plain"> args</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">        </span><span class="token class-name">System</span><span class="token punctuation" style="color:#393A34">.</span><span class="token plain">out</span><span class="token punctuation" style="color:#393A34">.</span><span class="token function" style="color:#d73a49">println</span><span class="token punctuation" style="color:#393A34">(</span><span class="token function" style="color:#d73a49">fib</span><span class="token punctuation" style="color:#393A34">(</span><span class="token number" style="color:#36acaa">6</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    </span><span class="token punctuation" style="color:#393A34">}</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token punctuation" style="color:#393A34">}</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="क्लिपबोर्ड पर कोड कॉपी करें" title="कॉपी" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg viewBox="0 0 24 24" class="copyButtonIcon_y97N"><path fill="currentColor" d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg viewBox="0 0 24 24" class="copyButtonSuccessIcon_LjdS"><path fill="currentColor" d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div>
<p>This drops the risk of running into stack overflow errors because it's purely iterative, though it still takes <strong><span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>O</mi><mo stretchy="false">(</mo><mi>n</mi><mo stretchy="false">)</mo></mrow><annotation encoding="application/x-tex">O(n)</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:1em;vertical-align:-0.25em"></span><span class="mord mathnormal" style="margin-right:0.02778em">O</span><span class="mopen">(</span><span class="mord mathnormal">n</span><span class="mclose">)</span></span></span></span></strong> space for the array.</p>
<h2 class="anchor anchorWithStickyNavbar_LWe7" id="the-ultimate-boss-move-space-optimization">The Ultimate Boss Move: Space Optimization<a href="https://ajay-dhangar.github.io/algo/hi/blog/dynamic-programming-introduction#the-ultimate-boss-move-space-optimization" class="hash-link" aria-label="The Ultimate Boss Move: Space Optimization का सीधा लिंक" title="The Ultimate Boss Move: Space Optimization का सीधा लिंक">​</a></h2>
<p>Look closely at the Tabulation loop. To calculate <code>table[i]</code>, do we really need the entire history of the table?</p>
<p>No. We only ever look back at the <strong>last two numbers</strong>.</p>
<p>We can completely get rid of our array and just use two integer variables to track those last two values, dropping our space usage down to a absolute minimum.</p>
<div class="language-java codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-java codeBlock_bY9V thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token keyword" style="color:#00009f">class</span><span class="token plain"> </span><span class="token class-name">Main</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    </span><span class="token keyword" style="color:#00009f">static</span><span class="token plain"> </span><span class="token keyword" style="color:#00009f">int</span><span class="token plain"> </span><span class="token function" style="color:#d73a49">fib</span><span class="token punctuation" style="color:#393A34">(</span><span class="token keyword" style="color:#00009f">int</span><span class="token plain"> n</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">        </span><span class="token keyword" style="color:#00009f">if</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">(</span><span class="token plain">n </span><span class="token operator" style="color:#393A34">&lt;=</span><span class="token plain"> </span><span class="token number" style="color:#36acaa">1</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"> </span><span class="token keyword" style="color:#00009f">return</span><span class="token plain"> n</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">        </span><span class="token keyword" style="color:#00009f">int</span><span class="token plain"> prev2 </span><span class="token operator" style="color:#393A34">=</span><span class="token plain"> </span><span class="token number" style="color:#36acaa">0</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"> </span><span class="token comment" style="color:#999988;font-style:italic">// Represents F(n-2)</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">        </span><span class="token keyword" style="color:#00009f">int</span><span class="token plain"> prev1 </span><span class="token operator" style="color:#393A34">=</span><span class="token plain"> </span><span class="token number" style="color:#36acaa">1</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"> </span><span class="token comment" style="color:#999988;font-style:italic">// Represents F(n-1)</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">        </span><span class="token keyword" style="color:#00009f">for</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">(</span><span class="token keyword" style="color:#00009f">int</span><span class="token plain"> i </span><span class="token operator" style="color:#393A34">=</span><span class="token plain"> </span><span class="token number" style="color:#36acaa">2</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"> i </span><span class="token operator" style="color:#393A34">&lt;=</span><span class="token plain"> n</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"> i</span><span class="token operator" style="color:#393A34">++</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">            </span><span class="token keyword" style="color:#00009f">int</span><span class="token plain"> current </span><span class="token operator" style="color:#393A34">=</span><span class="token plain"> prev1 </span><span class="token operator" style="color:#393A34">+</span><span class="token plain"> prev2</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">            prev2 </span><span class="token operator" style="color:#393A34">=</span><span class="token plain"> prev1</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"> </span><span class="token comment" style="color:#999988;font-style:italic">// Move prev2 forward</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">            prev1 </span><span class="token operator" style="color:#393A34">=</span><span class="token plain"> current</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"> </span><span class="token comment" style="color:#999988;font-style:italic">// Move prev1 forward</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">        </span><span class="token punctuation" style="color:#393A34">}</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">        </span><span class="token keyword" style="color:#00009f">return</span><span class="token plain"> prev1</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    </span><span class="token punctuation" style="color:#393A34">}</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    </span><span class="token keyword" style="color:#00009f">public</span><span class="token plain"> </span><span class="token keyword" style="color:#00009f">static</span><span class="token plain"> </span><span class="token keyword" style="color:#00009f">void</span><span class="token plain"> </span><span class="token function" style="color:#d73a49">main</span><span class="token punctuation" style="color:#393A34">(</span><span class="token class-name">String</span><span class="token punctuation" style="color:#393A34">[</span><span class="token punctuation" style="color:#393A34">]</span><span class="token plain"> args</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">        </span><span class="token class-name">System</span><span class="token punctuation" style="color:#393A34">.</span><span class="token plain">out</span><span class="token punctuation" style="color:#393A34">.</span><span class="token function" style="color:#d73a49">println</span><span class="token punctuation" style="color:#393A34">(</span><span class="token function" style="color:#d73a49">fib</span><span class="token punctuation" style="color:#393A34">(</span><span class="token number" style="color:#36acaa">6</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    </span><span class="token punctuation" style="color:#393A34">}</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token punctuation" style="color:#393A34">}</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="क्लिपबोर्ड पर कोड कॉपी करें" title="कॉपी" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg viewBox="0 0 24 24" class="copyButtonIcon_y97N"><path fill="currentColor" d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg viewBox="0 0 24 24" class="copyButtonSuccessIcon_LjdS"><path fill="currentColor" d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div>
<ul>
<li><strong>Time Complexity:</strong> <strong><span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>O</mi><mo stretchy="false">(</mo><mi>n</mi><mo stretchy="false">)</mo></mrow><annotation encoding="application/x-tex">O(n)</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:1em;vertical-align:-0.25em"></span><span class="mord mathnormal" style="margin-right:0.02778em">O</span><span class="mopen">(</span><span class="mord mathnormal">n</span><span class="mclose">)</span></span></span></span></strong></li>
<li><strong>Space Complexity:</strong> <strong><span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>O</mi><mo stretchy="false">(</mo><mn>1</mn><mo stretchy="false">)</mo></mrow><annotation encoding="application/x-tex">O(1)</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:1em;vertical-align:-0.25em"></span><span class="mord mathnormal" style="margin-right:0.02778em">O</span><span class="mopen">(</span><span class="mord">1</span><span class="mclose">)</span></span></span></span></strong> — Constant space. We are using virtually no extra memory!</li>
</ul>
<h2 class="anchor anchorWithStickyNavbar_LWe7" id="your-5-step-game-plan-for-dp-problems">Your 5-Step Game Plan for DP Problems<a href="https://ajay-dhangar.github.io/algo/hi/blog/dynamic-programming-introduction#your-5-step-game-plan-for-dp-problems" class="hash-link" aria-label="Your 5-Step Game Plan for DP Problems का सीधा लिंक" title="Your 5-Step Game Plan for DP Problems का सीधा लिंक">​</a></h2>
<p>When you encounter a new optimization problem in an interview or coding challenge, don't try to guess the DP table right away. Follow this natural progression:</p>
<ol>
<li><strong>Write out the brute-force recursive solution first.</strong> Get it working, even if it's slow.</li>
<li><strong>Look for repetition.</strong> Notice if the same function inputs are being called multiple times.</li>
<li><strong>Add Memoization.</strong> Throw an array or a HashMap into your recursive solution to log the results.</li>
<li><strong>Try to flip it.</strong> Convert that logic into an iterative <code>for</code>-loop (Tabulation) starting from index 0.</li>
<li><strong>Trim the fat.</strong> Check if you can reduce your space complexity by only tracking the last few states using variables.</li>
</ol>
<h2 class="anchor anchorWithStickyNavbar_LWe7" id="classic-problems-to-practice-next">Classic Problems to Practice Next<a href="https://ajay-dhangar.github.io/algo/hi/blog/dynamic-programming-introduction#classic-problems-to-practice-next" class="hash-link" aria-label="Classic Problems to Practice Next का सीधा लिंक" title="Classic Problems to Practice Next का सीधा लिंक">​</a></h2>
<p>Once you feel comfortable with Fibonacci, try your hand at these staples:</p>
<ul>
<li><strong>Climbing Stairs</strong> (Very similar to Fibonacci!)</li>
<li><strong>Coin Change</strong> (An interview favorite)</li>
<li><strong>0/1 Knapsack</strong> (The ultimate test of understanding states)</li>
</ul>
<h2 class="anchor anchorWithStickyNavbar_LWe7" id="wrap-up">Wrap Up<a href="https://ajay-dhangar.github.io/algo/hi/blog/dynamic-programming-introduction#wrap-up" class="hash-link" aria-label="Wrap Up का सीधा लिंक" title="Wrap Up का सीधा लिंक">​</a></h2>
<p>Dynamic Programming isn't about being brilliant; it's about being lazy in the best way possible. By remembering our past mistakes and calculations, we build incredibly fast software.</p>
<p>Pick a problem on LeetCode or HackerRank, pull out a piece of paper, trace the subproblems manually, and watch the patterns emerge. Happy coding!</p>]]></content:encoded>
            <author>riyasjan01@gmail.community (Riya Sharma)</author>
            <category>dynamic-programming</category>
            <category>dp</category>
            <category>dsa</category>
            <category>java</category>
            <category>recursion</category>
            <category>algorithms</category>
        </item>
        <item>
            <title><![CDATA[Introduction to the Stack Data Structure]]></title>
            <link>https://ajay-dhangar.github.io/algo/hi/blog/stack-in-data-structures</link>
            <guid>https://ajay-dhangar.github.io/algo/hi/blog/stack-in-data-structures</guid>
            <pubDate>Wed, 20 May 2026 06:11:24 GMT</pubDate>
            <description><![CDATA[In data structures, a stack is a linear data structure that follows the LIFO (Last In First Out) principle. This means the element inserted last is removed first. Stacks are widely used in programming for recursion, expression evaluation, browser history, and many other applications.]]></description>
            <content:encoded><![CDATA[<p>In data structures, a stack is a linear data structure that follows the LIFO (Last In First Out) principle. This means the element inserted last is removed first. Stacks are widely used in programming for recursion, expression evaluation, browser history, and many other applications.</p>
<h2 class="anchor anchorWithStickyNavbar_LWe7" id="what-is-stack">What is Stack?<a href="https://ajay-dhangar.github.io/algo/hi/blog/stack-in-data-structures#what-is-stack" class="hash-link" aria-label="What is Stack? का सीधा लिंक" title="What is Stack? का सीधा लिंक">​</a></h2>
<p>A Stack is a linear data structure in which insertion and deletion take place only from one end called the <strong>top</strong>. It works on the <strong>LIFO (Last In First Out)</strong> principle.</p>
<p><strong>Below are Some Examples of Stack:</strong></p>
<div class="language-markdown codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-markdown codeBlock_bY9V thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token plain">Stack of Plates</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">Undo/Redo Operations</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">Browser History</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">Function Call Stack</span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="क्लिपबोर्ड पर कोड कॉपी करें" title="कॉपी" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg viewBox="0 0 24 24" class="copyButtonIcon_y97N"><path fill="currentColor" d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg viewBox="0 0 24 24" class="copyButtonSuccessIcon_LjdS"><path fill="currentColor" d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div>
<h2 class="anchor anchorWithStickyNavbar_LWe7" id="how-stack-is-represented">How Stack is Represented:<a href="https://ajay-dhangar.github.io/algo/hi/blog/stack-in-data-structures#how-stack-is-represented" class="hash-link" aria-label="How Stack is Represented: का सीधा लिंक" title="How Stack is Represented: का सीधा लिंक">​</a></h2>
<p>A stack can be implemented using arrays or linked lists. It follows the <strong>LIFO (Last In First Out)</strong> principle, where the last inserted element is removed first.</p>
<p>Here are some important stack operations:</p>
<ul>
<li>
<p><strong>Push Operation</strong>: Adds an element to the top of the stack.</p>
<div class="language-java codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-java codeBlock_bY9V thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token plain">stack</span><span class="token punctuation" style="color:#393A34">.</span><span class="token function" style="color:#d73a49">push</span><span class="token punctuation" style="color:#393A34">(</span><span class="token number" style="color:#36acaa">10</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">;</span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="क्लिपबोर्ड पर कोड कॉपी करें" title="कॉपी" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg viewBox="0 0 24 24" class="copyButtonIcon_y97N"><path fill="currentColor" d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg viewBox="0 0 24 24" class="copyButtonSuccessIcon_LjdS"><path fill="currentColor" d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div>
</li>
<li>
<p><strong>Pop Operation</strong>: Removes the top element from the stack.</p>
<div class="language-java codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-java codeBlock_bY9V thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token plain">stack</span><span class="token punctuation" style="color:#393A34">.</span><span class="token function" style="color:#d73a49">pop</span><span class="token punctuation" style="color:#393A34">(</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">;</span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="क्लिपबोर्ड पर कोड कॉपी करें" title="कॉपी" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg viewBox="0 0 24 24" class="copyButtonIcon_y97N"><path fill="currentColor" d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg viewBox="0 0 24 24" class="copyButtonSuccessIcon_LjdS"><path fill="currentColor" d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div>
</li>
<li>
<p><strong>Peek Operation</strong>: Returns the top element without removing it.</p>
<div class="language-java codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-java codeBlock_bY9V thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token plain">stack</span><span class="token punctuation" style="color:#393A34">.</span><span class="token function" style="color:#d73a49">peek</span><span class="token punctuation" style="color:#393A34">(</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">;</span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="क्लिपबोर्ड पर कोड कॉपी करें" title="कॉपी" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg viewBox="0 0 24 24" class="copyButtonIcon_y97N"><path fill="currentColor" d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg viewBox="0 0 24 24" class="copyButtonSuccessIcon_LjdS"><path fill="currentColor" d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div>
</li>
<li>
<p><strong>isEmpty Operation</strong>: Checks whether the stack is empty or not.</p>
<div class="language-java codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-java codeBlock_bY9V thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token plain">stack</span><span class="token punctuation" style="color:#393A34">.</span><span class="token function" style="color:#d73a49">isEmpty</span><span class="token punctuation" style="color:#393A34">(</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">;</span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="क्लिपबोर्ड पर कोड कॉपी करें" title="कॉपी" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg viewBox="0 0 24 24" class="copyButtonIcon_y97N"><path fill="currentColor" d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg viewBox="0 0 24 24" class="copyButtonSuccessIcon_LjdS"><path fill="currentColor" d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div>
</li>
</ul>
<p>Understanding these operations is important because stacks are widely used in recursion, expression evaluation, browser history, and many algorithmic problems.</p>
<h2 class="anchor anchorWithStickyNavbar_LWe7" id="how-stack-works">How Stack Works:<a href="https://ajay-dhangar.github.io/algo/hi/blog/stack-in-data-structures#how-stack-works" class="hash-link" aria-label="How Stack Works: का सीधा लिंक" title="How Stack Works: का सीधा लिंक">​</a></h2>
<p>A stack works on the <strong>LIFO (Last In First Out)</strong> principle. This means the most recently inserted element is removed first.</p>
<p>Consider the following example:</p>
<div class="language-text codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-text codeBlock_bY9V thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token plain">Top</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"> ┌───┐</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"> | 30|</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"> | 20|</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"> | 10|</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"> └───┘</span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="क्लिपबोर्ड पर कोड कॉपी करें" title="कॉपी" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg viewBox="0 0 24 24" class="copyButtonIcon_y97N"><path fill="currentColor" d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg viewBox="0 0 24 24" class="copyButtonSuccessIcon_LjdS"><path fill="currentColor" d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div>
<ul>
<li>10 is inserted first</li>
<li>20 is inserted after 10</li>
<li>30 is inserted last and becomes the top element</li>
</ul>
<p>If we perform a pop() operation, 30 will be removed first because it was inserted last.</p>
<p>This behavior makes stacks very useful in applications like recursion, undo operations, and function calls.</p>
<h2 class="anchor anchorWithStickyNavbar_LWe7" id="declaration-of-stack">Declaration of Stack:<a href="https://ajay-dhangar.github.io/algo/hi/blog/stack-in-data-structures#declaration-of-stack" class="hash-link" aria-label="Declaration of Stack: का सीधा लिंक" title="Declaration of Stack: का सीधा लिंक">​</a></h2>
<p>In different programming languages, a stack can be declared using built-in libraries or by implementing it manually using arrays or linked lists. The idea remains the same: elements are added and removed from one end called the <strong>top</strong>.</p>
<p>Here are some common ways to declare a stack:</p>
<ul>
<li><strong>C++</strong>:<!-- -->
<div class="language-cpp codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-cpp codeBlock_bY9V thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token macro property directive-hash" style="color:#36acaa">#</span><span class="token macro property directive keyword" style="color:#00009f">include</span><span class="token macro property" style="color:#36acaa"> </span><span class="token macro property string" style="color:#e3116c">&lt;stack&gt;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token keyword" style="color:#00009f">using</span><span class="token plain"> </span><span class="token keyword" style="color:#00009f">namespace</span><span class="token plain"> std</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">stack</span><span class="token operator" style="color:#393A34">&lt;</span><span class="token keyword" style="color:#00009f">int</span><span class="token operator" style="color:#393A34">&gt;</span><span class="token plain"> st</span><span class="token punctuation" style="color:#393A34">;</span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="क्लिपबोर्ड पर कोड कॉपी करें" title="कॉपी" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg viewBox="0 0 24 24" class="copyButtonIcon_y97N"><path fill="currentColor" d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg viewBox="0 0 24 24" class="copyButtonSuccessIcon_LjdS"><path fill="currentColor" d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div>
</li>
</ul>
<h3 class="anchor anchorWithStickyNavbar_LWe7" id="applications-of-stack">Applications of Stack:<a href="https://ajay-dhangar.github.io/algo/hi/blog/stack-in-data-structures#applications-of-stack" class="hash-link" aria-label="Applications of Stack: का सीधा लिंक" title="Applications of Stack: का सीधा लिंक">​</a></h3>
<p>Stacks are widely used in computer science and real-world applications. Some of the major uses are:</p>
<ul>
<li>
<p><strong>Function Calls and Recursion</strong>:<br>
<!-- -->The system uses a call stack to store function calls and execution context.</p>
</li>
<li>
<p><strong>Expression Evaluation</strong>:<br>
<!-- -->Used in evaluating postfix, prefix, and infix expressions.</p>
</li>
<li>
<p><strong>Balanced Parentheses Problem</strong>:<br>
<!-- -->Helps in checking whether brackets like (), <!-- -->, [] are properly matched.</p>
</li>
<li>
<p><strong>Undo/Redo Operations</strong>:<br>
<!-- -->Used in text editors and IDEs to reverse actions.</p>
</li>
<li>
<p><strong>Browser History</strong>:<br>
<!-- -->Back and forward navigation in browsers works using stacks.</p>
</li>
<li>
<p><strong>Depth First Search (DFS)</strong>:<br>
<!-- -->Graph traversal technique uses stack (explicitly or via recursion).</p>
</li>
</ul>
<h3 class="anchor anchorWithStickyNavbar_LWe7" id="java-example-of-stack">Java Example of Stack<a href="https://ajay-dhangar.github.io/algo/hi/blog/stack-in-data-structures#java-example-of-stack" class="hash-link" aria-label="Java Example of Stack का सीधा लिंक" title="Java Example of Stack का सीधा लिंक">​</a></h3>
<div class="language-java codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-java codeBlock_bY9V thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token keyword" style="color:#00009f">import</span><span class="token plain"> </span><span class="token import namespace" style="opacity:0.7">java</span><span class="token import namespace punctuation" style="opacity:0.7;color:#393A34">.</span><span class="token import namespace" style="opacity:0.7">util</span><span class="token import namespace punctuation" style="opacity:0.7;color:#393A34">.</span><span class="token import operator" style="color:#393A34">*</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token keyword" style="color:#00009f">class</span><span class="token plain"> </span><span class="token class-name">Main</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    </span><span class="token keyword" style="color:#00009f">public</span><span class="token plain"> </span><span class="token keyword" style="color:#00009f">static</span><span class="token plain"> </span><span class="token keyword" style="color:#00009f">void</span><span class="token plain"> </span><span class="token function" style="color:#d73a49">main</span><span class="token punctuation" style="color:#393A34">(</span><span class="token class-name">String</span><span class="token punctuation" style="color:#393A34">[</span><span class="token punctuation" style="color:#393A34">]</span><span class="token plain"> args</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">        </span><span class="token class-name">Stack</span><span class="token generics punctuation" style="color:#393A34">&lt;</span><span class="token generics class-name">Integer</span><span class="token generics punctuation" style="color:#393A34">&gt;</span><span class="token plain"> st </span><span class="token operator" style="color:#393A34">=</span><span class="token plain"> </span><span class="token keyword" style="color:#00009f">new</span><span class="token plain"> </span><span class="token class-name">Stack</span><span class="token generics punctuation" style="color:#393A34">&lt;</span><span class="token generics punctuation" style="color:#393A34">&gt;</span><span class="token punctuation" style="color:#393A34">(</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">        </span><span class="token comment" style="color:#999988;font-style:italic">// Push elements into stack</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">        st</span><span class="token punctuation" style="color:#393A34">.</span><span class="token function" style="color:#d73a49">push</span><span class="token punctuation" style="color:#393A34">(</span><span class="token number" style="color:#36acaa">10</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">        st</span><span class="token punctuation" style="color:#393A34">.</span><span class="token function" style="color:#d73a49">push</span><span class="token punctuation" style="color:#393A34">(</span><span class="token number" style="color:#36acaa">20</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">        st</span><span class="token punctuation" style="color:#393A34">.</span><span class="token function" style="color:#d73a49">push</span><span class="token punctuation" style="color:#393A34">(</span><span class="token number" style="color:#36acaa">30</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">        </span><span class="token class-name">System</span><span class="token punctuation" style="color:#393A34">.</span><span class="token plain">out</span><span class="token punctuation" style="color:#393A34">.</span><span class="token function" style="color:#d73a49">println</span><span class="token punctuation" style="color:#393A34">(</span><span class="token string" style="color:#e3116c">"Stack: "</span><span class="token plain"> </span><span class="token operator" style="color:#393A34">+</span><span class="token plain"> st</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">        </span><span class="token comment" style="color:#999988;font-style:italic">// Top element</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">        </span><span class="token class-name">System</span><span class="token punctuation" style="color:#393A34">.</span><span class="token plain">out</span><span class="token punctuation" style="color:#393A34">.</span><span class="token function" style="color:#d73a49">println</span><span class="token punctuation" style="color:#393A34">(</span><span class="token string" style="color:#e3116c">"Top Element: "</span><span class="token plain"> </span><span class="token operator" style="color:#393A34">+</span><span class="token plain"> st</span><span class="token punctuation" style="color:#393A34">.</span><span class="token function" style="color:#d73a49">peek</span><span class="token punctuation" style="color:#393A34">(</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">        </span><span class="token comment" style="color:#999988;font-style:italic">// Remove top element</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">        st</span><span class="token punctuation" style="color:#393A34">.</span><span class="token function" style="color:#d73a49">pop</span><span class="token punctuation" style="color:#393A34">(</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">        </span><span class="token class-name">System</span><span class="token punctuation" style="color:#393A34">.</span><span class="token plain">out</span><span class="token punctuation" style="color:#393A34">.</span><span class="token function" style="color:#d73a49">println</span><span class="token punctuation" style="color:#393A34">(</span><span class="token string" style="color:#e3116c">"After Pop: "</span><span class="token plain"> </span><span class="token operator" style="color:#393A34">+</span><span class="token plain"> st</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">        </span><span class="token comment" style="color:#999988;font-style:italic">// Check if stack is empty</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">        </span><span class="token class-name">System</span><span class="token punctuation" style="color:#393A34">.</span><span class="token plain">out</span><span class="token punctuation" style="color:#393A34">.</span><span class="token function" style="color:#d73a49">println</span><span class="token punctuation" style="color:#393A34">(</span><span class="token string" style="color:#e3116c">"Is Stack Empty? "</span><span class="token plain"> </span><span class="token operator" style="color:#393A34">+</span><span class="token plain"> st</span><span class="token punctuation" style="color:#393A34">.</span><span class="token function" style="color:#d73a49">isEmpty</span><span class="token punctuation" style="color:#393A34">(</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    </span><span class="token punctuation" style="color:#393A34">}</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token punctuation" style="color:#393A34">}</span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="क्लिपबोर्ड पर कोड कॉपी करें" title="कॉपी" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg viewBox="0 0 24 24" class="copyButtonIcon_y97N"><path fill="currentColor" d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg viewBox="0 0 24 24" class="copyButtonSuccessIcon_LjdS"><path fill="currentColor" d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div>
<h3 class="anchor anchorWithStickyNavbar_LWe7" id="output">Output:<a href="https://ajay-dhangar.github.io/algo/hi/blog/stack-in-data-structures#output" class="hash-link" aria-label="Output: का सीधा लिंक" title="Output: का सीधा लिंक">​</a></h3>
<div class="language-text codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-text codeBlock_bY9V thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token plain">Stack: [10, 20, 30]</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">Top Element: 30</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">After Pop: [10, 20]</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">Is Stack Empty? false</span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="क्लिपबोर्ड पर कोड कॉपी करें" title="कॉपी" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg viewBox="0 0 24 24" class="copyButtonIcon_y97N"><path fill="currentColor" d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg viewBox="0 0 24 24" class="copyButtonSuccessIcon_LjdS"><path fill="currentColor" d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div>
<h3 class="anchor anchorWithStickyNavbar_LWe7" id="conclusion">Conclusion:<a href="https://ajay-dhangar.github.io/algo/hi/blog/stack-in-data-structures#conclusion" class="hash-link" aria-label="Conclusion: का सीधा लिंक" title="Conclusion: का सीधा लिंक">​</a></h3>
<p>Stack is one of the most fundamental and widely used data structures in computer science. Its <strong>LIFO (Last In First Out)</strong> behavior makes it highly useful in solving many programming and real-world problems efficiently.</p>
<p>Stacks are used in recursion, expression evaluation, browser history, undo operations, graph traversal, and many important algorithms. Because of their simple implementation and fast operations, they are an essential topic for every programmer and competitive coder.</p>
<p>Understanding stacks also builds a strong foundation for learning advanced data structures and algorithms.</p>]]></content:encoded>
            <author>riyasjan01@gmail.community (Riya Sharma)</author>
            <category>stack</category>
            <category>algorithms</category>
            <category>dsa</category>
            <category>java</category>
            <category>python</category>
            <category>cpp</category>
            <category>data-structures</category>
        </item>
        <item>
            <title><![CDATA[Understanding Bloom Filters]]></title>
            <link>https://ajay-dhangar.github.io/algo/hi/blog/understanding-bloom-filters</link>
            <guid>https://ajay-dhangar.github.io/algo/hi/blog/understanding-bloom-filters</guid>
            <pubDate>Sun, 10 Nov 2024 08:07:57 GMT</pubDate>
            <description><![CDATA[A Bloom Filter is a probabilistic data structure that offers a space-efficient way to test if an element is part of a set. Bloom Filters are widely used in systems where space constraints are essential and occasional false positives are acceptable, but false negatives are not. In this article, we’ll explore how Bloom Filters work, their advantages and limitations, and the use cases where they shine.]]></description>
            <content:encoded><![CDATA[<p>A <strong>Bloom Filter</strong> is a probabilistic data structure that offers a space-efficient way to test if an element is part of a set. Bloom Filters are widely used in systems where space constraints are essential and occasional false positives are acceptable, but false negatives are not. In this article, we’ll explore how Bloom Filters work, their advantages and limitations, and the use cases where they shine.</p>
<h2 class="anchor anchorWithStickyNavbar_LWe7" id="what-is-a-bloom-filter">What is a Bloom Filter?<a href="https://ajay-dhangar.github.io/algo/hi/blog/understanding-bloom-filters#what-is-a-bloom-filter" class="hash-link" aria-label="What is a Bloom Filter? का सीधा लिंक" title="What is a Bloom Filter? का सीधा लिंक">​</a></h2>
<p>A Bloom Filter is a <strong>bit array</strong> of a fixed size combined with <strong>multiple hash functions</strong>. Each hash function maps elements to a position in the bit array. Bloom Filters do not store the data directly; instead, they only indicate the possible presence of an element with a certain probability of error. This trade-off between memory efficiency and accuracy is what makes Bloom Filters unique.</p>
<h3 class="anchor anchorWithStickyNavbar_LWe7" id="key-characteristics-of-bloom-filters">Key Characteristics of Bloom Filters:<a href="https://ajay-dhangar.github.io/algo/hi/blog/understanding-bloom-filters#key-characteristics-of-bloom-filters" class="hash-link" aria-label="Key Characteristics of Bloom Filters: का सीधा लिंक" title="Key Characteristics of Bloom Filters: का सीधा लिंक">​</a></h3>
<ol>
<li><strong>No False Negatives</strong>: If an element is reported as not present, it is guaranteed not to be in the set.</li>
<li><strong>Possible False Positives</strong>: It may sometimes indicate that an element is in the set when it is not.</li>
<li><strong>Space Efficiency</strong>: Compared to other structures like hash tables, Bloom Filters use less memory, especially with large datasets.</li>
</ol>
<hr>
<h2 class="anchor anchorWithStickyNavbar_LWe7" id="how-does-a-bloom-filter-work">How Does a Bloom Filter Work?<a href="https://ajay-dhangar.github.io/algo/hi/blog/understanding-bloom-filters#how-does-a-bloom-filter-work" class="hash-link" aria-label="How Does a Bloom Filter Work? का सीधा लिंक" title="How Does a Bloom Filter Work? का सीधा लिंक">​</a></h2>
<ol>
<li><strong>Initialization</strong>: Start with an array of bits, all set to 0.</li>
<li><strong>Inserting an Element</strong>:<!-- -->
<ul>
<li>Pass the element through multiple hash functions.</li>
<li>Each hash function returns a position in the bit array.</li>
<li>Set the bits at each of these positions to 1.</li>
</ul>
</li>
<li><strong>Checking for Membership</strong>:<!-- -->
<ul>
<li>For each hash function, check the positions in the bit array.</li>
<li>If all positions are set to 1, the element is likely in the set.</li>
<li>If any position is 0, the element is definitely not in the set.</li>
</ul>
</li>
</ol>
<h3 class="anchor anchorWithStickyNavbar_LWe7" id="example">Example<a href="https://ajay-dhangar.github.io/algo/hi/blog/understanding-bloom-filters#example" class="hash-link" aria-label="Example का सीधा लिंक" title="Example का सीधा लिंक">​</a></h3>
<p>If we want to add the word "hello" to a Bloom Filter:</p>
<ul>
<li>Pass "hello" through three hash functions.</li>
<li>Suppose the hash functions return positions 4, 9, and 15. We set bits at these positions to 1.</li>
<li>To check if "hello" exists, we check if positions 4, 9, and 15 are all 1. If they are, "hello" is likely in the set.</li>
</ul>
<hr>
<h2 class="anchor anchorWithStickyNavbar_LWe7" id="bloom-filter-parameters">Bloom Filter Parameters<a href="https://ajay-dhangar.github.io/algo/hi/blog/understanding-bloom-filters#bloom-filter-parameters" class="hash-link" aria-label="Bloom Filter Parameters का सीधा लिंक" title="Bloom Filter Parameters का सीधा लिंक">​</a></h2>
<ul>
<li><strong>Bit Array Size (m)</strong>: Larger arrays reduce the likelihood of collisions, lowering the probability of false positives.</li>
<li><strong>Number of Hash Functions (k)</strong>: Increasing the number of hash functions provides better accuracy but also increases processing time.</li>
</ul>
<p>The optimal values of <code>m</code> and <code>k</code> depend on the desired false positive rate and the expected number of elements.</p>
<hr>
<h2 class="anchor anchorWithStickyNavbar_LWe7" id="real-world-applications-of-bloom-filters">Real-World Applications of Bloom Filters<a href="https://ajay-dhangar.github.io/algo/hi/blog/understanding-bloom-filters#real-world-applications-of-bloom-filters" class="hash-link" aria-label="Real-World Applications of Bloom Filters का सीधा लिंक" title="Real-World Applications of Bloom Filters का सीधा लिंक">​</a></h2>
<h3 class="anchor anchorWithStickyNavbar_LWe7" id="1-web-caching">1. <strong>Web Caching</strong><a href="https://ajay-dhangar.github.io/algo/hi/blog/understanding-bloom-filters#1-web-caching" class="hash-link" aria-label="1-web-caching का सीधा लिंक" title="1-web-caching का सीधा लिंक">​</a></h3>
<p>Web caching systems use Bloom Filters to track URLs of previously cached pages. This helps quickly check if a page is in the cache without requiring large memory overhead, which speeds up the caching process.</p>
<h3 class="anchor anchorWithStickyNavbar_LWe7" id="2-database-query-optimization">2. <strong>Database Query Optimization</strong><a href="https://ajay-dhangar.github.io/algo/hi/blog/understanding-bloom-filters#2-database-query-optimization" class="hash-link" aria-label="2-database-query-optimization का सीधा लिंक" title="2-database-query-optimization का सीधा लिंक">​</a></h3>
<p>Databases use Bloom Filters to track large tables or datasets. For example, in distributed databases, Bloom Filters can be used to avoid querying partitions that do not contain a requested value, reducing read latency.</p>
<h3 class="anchor anchorWithStickyNavbar_LWe7" id="3-spam-detection">3. <strong>Spam Detection</strong><a href="https://ajay-dhangar.github.io/algo/hi/blog/understanding-bloom-filters#3-spam-detection" class="hash-link" aria-label="3-spam-detection का सीधा लिंक" title="3-spam-detection का सीधा लिंक">​</a></h3>
<p>Email systems use Bloom Filters to keep a set of known spam email signatures. When a new email arrives, it can be quickly checked against this set to determine if it’s spam.</p>
<h3 class="anchor anchorWithStickyNavbar_LWe7" id="4-blockchain-and-cryptocurrency">4. <strong>Blockchain and Cryptocurrency</strong><a href="https://ajay-dhangar.github.io/algo/hi/blog/understanding-bloom-filters#4-blockchain-and-cryptocurrency" class="hash-link" aria-label="4-blockchain-and-cryptocurrency का सीधा लिंक" title="4-blockchain-and-cryptocurrency का सीधा लिंक">​</a></h3>
<p>In blockchains, Bloom Filters help with lightweight clients by reducing bandwidth requirements. Clients can use Bloom Filters to request only relevant transactions, improving performance.</p>
<hr>
<h2 class="anchor anchorWithStickyNavbar_LWe7" id="bloom-filter-implementation-in-python">Bloom Filter Implementation in Python<a href="https://ajay-dhangar.github.io/algo/hi/blog/understanding-bloom-filters#bloom-filter-implementation-in-python" class="hash-link" aria-label="Bloom Filter Implementation in Python का सीधा लिंक" title="Bloom Filter Implementation in Python का सीधा लिंक">​</a></h2>
<p>Here’s a basic implementation of a Bloom Filter in Python, using three hash functions:</p>
<div class="language-python codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-python codeBlock_bY9V thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token keyword" style="color:#00009f">import</span><span class="token plain"> mmh3</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token keyword" style="color:#00009f">from</span><span class="token plain"> bitarray </span><span class="token keyword" style="color:#00009f">import</span><span class="token plain"> bitarray</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token keyword" style="color:#00009f">class</span><span class="token plain"> </span><span class="token class-name">BloomFilter</span><span class="token punctuation" style="color:#393A34">:</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    </span><span class="token keyword" style="color:#00009f">def</span><span class="token plain"> </span><span class="token function" style="color:#d73a49">__init__</span><span class="token punctuation" style="color:#393A34">(</span><span class="token plain">self</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"> size</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"> hash_count</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">:</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">        self</span><span class="token punctuation" style="color:#393A34">.</span><span class="token plain">size </span><span class="token operator" style="color:#393A34">=</span><span class="token plain"> size</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">        self</span><span class="token punctuation" style="color:#393A34">.</span><span class="token plain">hash_count </span><span class="token operator" style="color:#393A34">=</span><span class="token plain"> hash_count</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">        self</span><span class="token punctuation" style="color:#393A34">.</span><span class="token plain">bit_array </span><span class="token operator" style="color:#393A34">=</span><span class="token plain"> bitarray</span><span class="token punctuation" style="color:#393A34">(</span><span class="token plain">size</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">        self</span><span class="token punctuation" style="color:#393A34">.</span><span class="token plain">bit_array</span><span class="token punctuation" style="color:#393A34">.</span><span class="token plain">setall</span><span class="token punctuation" style="color:#393A34">(</span><span class="token number" style="color:#36acaa">0</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    </span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    </span><span class="token keyword" style="color:#00009f">def</span><span class="token plain"> </span><span class="token function" style="color:#d73a49">add</span><span class="token punctuation" style="color:#393A34">(</span><span class="token plain">self</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"> item</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">:</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">        </span><span class="token keyword" style="color:#00009f">for</span><span class="token plain"> i </span><span class="token keyword" style="color:#00009f">in</span><span class="token plain"> </span><span class="token builtin">range</span><span class="token punctuation" style="color:#393A34">(</span><span class="token plain">self</span><span class="token punctuation" style="color:#393A34">.</span><span class="token plain">hash_count</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">:</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">            index </span><span class="token operator" style="color:#393A34">=</span><span class="token plain"> mmh3</span><span class="token punctuation" style="color:#393A34">.</span><span class="token builtin">hash</span><span class="token punctuation" style="color:#393A34">(</span><span class="token plain">item</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"> i</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"> </span><span class="token operator" style="color:#393A34">%</span><span class="token plain"> self</span><span class="token punctuation" style="color:#393A34">.</span><span class="token plain">size</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">            self</span><span class="token punctuation" style="color:#393A34">.</span><span class="token plain">bit_array</span><span class="token punctuation" style="color:#393A34">[</span><span class="token plain">index</span><span class="token punctuation" style="color:#393A34">]</span><span class="token plain"> </span><span class="token operator" style="color:#393A34">=</span><span class="token plain"> </span><span class="token number" style="color:#36acaa">1</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    </span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    </span><span class="token keyword" style="color:#00009f">def</span><span class="token plain"> </span><span class="token function" style="color:#d73a49">check</span><span class="token punctuation" style="color:#393A34">(</span><span class="token plain">self</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"> item</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">:</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">        </span><span class="token keyword" style="color:#00009f">for</span><span class="token plain"> i </span><span class="token keyword" style="color:#00009f">in</span><span class="token plain"> </span><span class="token builtin">range</span><span class="token punctuation" style="color:#393A34">(</span><span class="token plain">self</span><span class="token punctuation" style="color:#393A34">.</span><span class="token plain">hash_count</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">:</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">            index </span><span class="token operator" style="color:#393A34">=</span><span class="token plain"> mmh3</span><span class="token punctuation" style="color:#393A34">.</span><span class="token builtin">hash</span><span class="token punctuation" style="color:#393A34">(</span><span class="token plain">item</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"> i</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"> </span><span class="token operator" style="color:#393A34">%</span><span class="token plain"> self</span><span class="token punctuation" style="color:#393A34">.</span><span class="token plain">size</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">            </span><span class="token keyword" style="color:#00009f">if</span><span class="token plain"> self</span><span class="token punctuation" style="color:#393A34">.</span><span class="token plain">bit_array</span><span class="token punctuation" style="color:#393A34">[</span><span class="token plain">index</span><span class="token punctuation" style="color:#393A34">]</span><span class="token plain"> </span><span class="token operator" style="color:#393A34">==</span><span class="token plain"> </span><span class="token number" style="color:#36acaa">0</span><span class="token punctuation" style="color:#393A34">:</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">                </span><span class="token keyword" style="color:#00009f">return</span><span class="token plain"> </span><span class="token boolean" style="color:#36acaa">False</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">        </span><span class="token keyword" style="color:#00009f">return</span><span class="token plain"> </span><span class="token boolean" style="color:#36acaa">True</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token comment" style="color:#999988;font-style:italic"># Example usage</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">bf </span><span class="token operator" style="color:#393A34">=</span><span class="token plain"> BloomFilter</span><span class="token punctuation" style="color:#393A34">(</span><span class="token number" style="color:#36acaa">1000</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"> </span><span class="token number" style="color:#36acaa">3</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">bf</span><span class="token punctuation" style="color:#393A34">.</span><span class="token plain">add</span><span class="token punctuation" style="color:#393A34">(</span><span class="token string" style="color:#e3116c">"hello"</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token keyword" style="color:#00009f">print</span><span class="token punctuation" style="color:#393A34">(</span><span class="token plain">bf</span><span class="token punctuation" style="color:#393A34">.</span><span class="token plain">check</span><span class="token punctuation" style="color:#393A34">(</span><span class="token string" style="color:#e3116c">"hello"</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain">   </span><span class="token comment" style="color:#999988;font-style:italic"># Likely True</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token keyword" style="color:#00009f">print</span><span class="token punctuation" style="color:#393A34">(</span><span class="token plain">bf</span><span class="token punctuation" style="color:#393A34">.</span><span class="token plain">check</span><span class="token punctuation" style="color:#393A34">(</span><span class="token string" style="color:#e3116c">"world"</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain">   </span><span class="token comment" style="color:#999988;font-style:italic"># Likely False</span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="क्लिपबोर्ड पर कोड कॉपी करें" title="कॉपी" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg viewBox="0 0 24 24" class="copyButtonIcon_y97N"><path fill="currentColor" d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg viewBox="0 0 24 24" class="copyButtonSuccessIcon_LjdS"><path fill="currentColor" d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div>
<p>In this example:</p>
<ul>
<li><code>mmh3.hash</code> provides a hash function.</li>
<li>We use a <code>bitarray</code> to store the bits for space efficiency.</li>
</ul>
<hr>
<h2 class="anchor anchorWithStickyNavbar_LWe7" id="advantages-and-limitations-of-bloom-filters">Advantages and Limitations of Bloom Filters<a href="https://ajay-dhangar.github.io/algo/hi/blog/understanding-bloom-filters#advantages-and-limitations-of-bloom-filters" class="hash-link" aria-label="Advantages and Limitations of Bloom Filters का सीधा लिंक" title="Advantages and Limitations of Bloom Filters का सीधा लिंक">​</a></h2>
<h3 class="anchor anchorWithStickyNavbar_LWe7" id="advantages">Advantages<a href="https://ajay-dhangar.github.io/algo/hi/blog/understanding-bloom-filters#advantages" class="hash-link" aria-label="Advantages का सीधा लिंक" title="Advantages का सीधा लिंक">​</a></h3>
<ul>
<li><strong>Memory Efficient</strong>: Bloom Filters are much smaller than hash tables or other lookup structures.</li>
<li><strong>Fast Operations</strong>: Insertion and lookup are both O(k) operations, where <code>k</code> is the number of hash functions.</li>
</ul>
<h3 class="anchor anchorWithStickyNavbar_LWe7" id="limitations">Limitations<a href="https://ajay-dhangar.github.io/algo/hi/blog/understanding-bloom-filters#limitations" class="hash-link" aria-label="Limitations का सीधा लिंक" title="Limitations का सीधा लिंक">​</a></h3>
<ul>
<li><strong>False Positives</strong>: Bloom Filters cannot guarantee absolute membership due to possible false positives.</li>
<li><strong>Not Removable</strong>: Elements cannot be deleted from a Bloom Filter without risking false negatives.</li>
</ul>
<hr>
<h2 class="anchor anchorWithStickyNavbar_LWe7" id="conclusion">Conclusion<a href="https://ajay-dhangar.github.io/algo/hi/blog/understanding-bloom-filters#conclusion" class="hash-link" aria-label="Conclusion का सीधा लिंक" title="Conclusion का सीधा �लिंक">​</a></h2>
<p>Bloom Filters are an ingenious solution for problems where approximate answers are acceptable in exchange for significant memory savings. From web caching to spam detection, Bloom Filters play an essential role in optimizing systems with limited memory or computational resources. By understanding and implementing Bloom Filters, developers can add powerful, space-efficient tools to their algorithm arsenal.</p>
<hr>]]></content:encoded>
            <author>aryanrameshjain@gmail.com (Aryan Jain)</author>
            <category>bloom-filter</category>
            <category>data-structures</category>
            <category>algorithms</category>
            <category>C++</category>
            <category>java</category>
            <category>python</category>
        </item>
        <item>
            <title><![CDATA[Comparing the different Sorting Algorithms]]></title>
            <link>https://ajay-dhangar.github.io/algo/hi/blog/comparing-sorting-algorithms</link>
            <guid>https://ajay-dhangar.github.io/algo/hi/blog/comparing-sorting-algorithms</guid>
            <pubDate>Fri, 08 Nov 2024 07:27:40 GMT</pubDate>
            <description><![CDATA[Sorting algorithms are essential for organizing data, making it easier to analyze, search, and manipulate. Here’s an overview of some commonly used sorting algorithms, comparing their time complexity, efficiency, and applications.]]></description>
            <content:encoded><![CDATA[<p>Sorting algorithms are essential for organizing data, making it easier to analyze, search, and manipulate. Here’s an overview of some commonly used sorting algorithms, comparing their time complexity, efficiency, and applications.</p>
<h2 class="anchor anchorWithStickyNavbar_LWe7" id="1-bubble-sort">1. Bubble Sort<a href="https://ajay-dhangar.github.io/algo/hi/blog/comparing-sorting-algorithms#1-bubble-sort" class="hash-link" aria-label="1. Bubble Sort का सीधा लिंक" title="1. Bubble Sort का सीधा लिंक">​</a></h2>
<p><strong>Description</strong>: Bubble Sort repeatedly steps through the list, compares adjacent elements, and swaps them if needed until the list is sorted.</p>
<ul>
<li><strong>Time Complexity</strong>: <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>O</mi><mo stretchy="false">(</mo><msup><mi>n</mi><mn>2</mn></msup><mo stretchy="false">)</mo></mrow><annotation encoding="application/x-tex">O(n^2)</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:1.0641em;vertical-align:-0.25em"></span><span class="mord mathnormal" style="margin-right:0.02778em">O</span><span class="mopen">(</span><span class="mord"><span class="mord mathnormal">n</span><span class="msupsub"><span class="vlist-t"><span class="vlist-r"><span class="vlist" style="height:0.8141em"><span style="top:-3.063em;margin-right:0.05em"><span class="pstrut" style="height:2.7em"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight">2</span></span></span></span></span></span></span></span><span class="mclose">)</span></span></span></span> average and worst-case; <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>O</mi><mo stretchy="false">(</mo><mi>n</mi><mo stretchy="false">)</mo></mrow><annotation encoding="application/x-tex">O(n)</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:1em;vertical-align:-0.25em"></span><span class="mord mathnormal" style="margin-right:0.02778em">O</span><span class="mopen">(</span><span class="mord mathnormal">n</span><span class="mclose">)</span></span></span></span> best-case (already sorted)</li>
<li><strong>Space Complexity</strong>: <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>O</mi><mo stretchy="false">(</mo><mn>1</mn><mo stretchy="false">)</mo></mrow><annotation encoding="application/x-tex">O(1)</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:1em;vertical-align:-0.25em"></span><span class="mord mathnormal" style="margin-right:0.02778em">O</span><span class="mopen">(</span><span class="mord">1</span><span class="mclose">)</span></span></span></span></li>
<li><strong>Pros</strong>: Simple and easy to implement</li>
<li><strong>Cons</strong>: Inefficient for large datasets</li>
<li><strong>Use Case</strong>: Suitable for small or nearly sorted datasets</li>
</ul>
<h2 class="anchor anchorWithStickyNavbar_LWe7" id="2-selection-sort">2. Selection Sort<a href="https://ajay-dhangar.github.io/algo/hi/blog/comparing-sorting-algorithms#2-selection-sort" class="hash-link" aria-label="2. Selection Sort का सीधा लिंक" title="2. Selection Sort का सीधा लिंक">​</a></h2>
<p><strong>Description</strong>: Selection Sort divides the list into sorted and unsorted parts, finding the minimum element in the unsorted part and placing it in order.</p>
<ul>
<li><strong>Time Complexity</strong>: <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>O</mi><mo stretchy="false">(</mo><msup><mi>n</mi><mn>2</mn></msup><mo stretchy="false">)</mo></mrow><annotation encoding="application/x-tex">O(n^2)</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:1.0641em;vertical-align:-0.25em"></span><span class="mord mathnormal" style="margin-right:0.02778em">O</span><span class="mopen">(</span><span class="mord"><span class="mord mathnormal">n</span><span class="msupsub"><span class="vlist-t"><span class="vlist-r"><span class="vlist" style="height:0.8141em"><span style="top:-3.063em;margin-right:0.05em"><span class="pstrut" style="height:2.7em"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight">2</span></span></span></span></span></span></span></span><span class="mclose">)</span></span></span></span> for all cases</li>
<li><strong>Space Complexity</strong>: <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>O</mi><mo stretchy="false">(</mo><mn>1</mn><mo stretchy="false">)</mo></mrow><annotation encoding="application/x-tex">O(1)</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:1em;vertical-align:-0.25em"></span><span class="mord mathnormal" style="margin-right:0.02778em">O</span><span class="mopen">(</span><span class="mord">1</span><span class="mclose">)</span></span></span></span></li>
<li><strong>Pros</strong>: Simple implementation; fewer swaps</li>
<li><strong>Cons</strong>: Inefficient for large datasets</li>
<li><strong>Use Case</strong>: Useful for small datasets or when memory writes are costly</li>
</ul>
<h2 class="anchor anchorWithStickyNavbar_LWe7" id="3-insertion-sort">3. Insertion Sort<a href="https://ajay-dhangar.github.io/algo/hi/blog/comparing-sorting-algorithms#3-insertion-sort" class="hash-link" aria-label="3. Insertion Sort का सीधा लिंक" title="3. Insertion Sort का सीधा लिंक">​</a></h2>
<p><strong>Description</strong>: Insertion Sort builds a sorted list by taking one item from the unsorted portion and inserting it into the correct position.</p>
<ul>
<li><strong>Time Complexity</strong>: <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>O</mi><mo stretchy="false">(</mo><msup><mi>n</mi><mn>2</mn></msup><mo stretchy="false">)</mo></mrow><annotation encoding="application/x-tex">O(n^2)</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:1.0641em;vertical-align:-0.25em"></span><span class="mord mathnormal" style="margin-right:0.02778em">O</span><span class="mopen">(</span><span class="mord"><span class="mord mathnormal">n</span><span class="msupsub"><span class="vlist-t"><span class="vlist-r"><span class="vlist" style="height:0.8141em"><span style="top:-3.063em;margin-right:0.05em"><span class="pstrut" style="height:2.7em"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight">2</span></span></span></span></span></span></span></span><span class="mclose">)</span></span></span></span> average and worst-case; <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>O</mi><mo stretchy="false">(</mo><mi>n</mi><mo stretchy="false">)</mo></mrow><annotation encoding="application/x-tex">O(n)</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:1em;vertical-align:-0.25em"></span><span class="mord mathnormal" style="margin-right:0.02778em">O</span><span class="mopen">(</span><span class="mord mathnormal">n</span><span class="mclose">)</span></span></span></span> best-case (already sorted)</li>
<li><strong>Space Complexity</strong>: <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>O</mi><mo stretchy="false">(</mo><mn>1</mn><mo stretchy="false">)</mo></mrow><annotation encoding="application/x-tex">O(1)</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:1em;vertical-align:-0.25em"></span><span class="mord mathnormal" style="margin-right:0.02778em">O</span><span class="mopen">(</span><span class="mord">1</span><span class="mclose">)</span></span></span></span></li>
<li><strong>Pros</strong>: Efficient for small or nearly sorted lists</li>
<li><strong>Cons</strong>: Not suitable for large unsorted datasets</li>
<li><strong>Use Case</strong>: Good for small or mostly sorted datasets</li>
</ul>
<h2 class="anchor anchorWithStickyNavbar_LWe7" id="4-merge-sort">4. Merge Sort<a href="https://ajay-dhangar.github.io/algo/hi/blog/comparing-sorting-algorithms#4-merge-sort" class="hash-link" aria-label="4. Merge Sort का सीधा लिंक" title="4. Merge Sort का सीधा लिंक">​</a></h2>
<p><strong>Description</strong>: Merge Sort is a divide-and-conquer algorithm that splits the list into halves, sorts each half, and then merges them.</p>
<ul>
<li><strong>Time Complexity</strong>: <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>O</mi><mo stretchy="false">(</mo><mi>n</mi><mi>log</mi><mo>⁡</mo><mi>n</mi><mo stretchy="false">)</mo></mrow><annotation encoding="application/x-tex">O(n \log n)</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:1em;vertical-align:-0.25em"></span><span class="mord mathnormal" style="margin-right:0.02778em">O</span><span class="mopen">(</span><span class="mord mathnormal">n</span><span class="mspace" style="margin-right:0.1667em"></span><span class="mop">lo<span style="margin-right:0.01389em">g</span></span><span class="mspace" style="margin-right:0.1667em"></span><span class="mord mathnormal">n</span><span class="mclose">)</span></span></span></span> for all cases</li>
<li><strong>Space Complexity</strong>: <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>O</mi><mo stretchy="false">(</mo><mi>n</mi><mo stretchy="false">)</mo></mrow><annotation encoding="application/x-tex">O(n)</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:1em;vertical-align:-0.25em"></span><span class="mord mathnormal" style="margin-right:0.02778em">O</span><span class="mopen">(</span><span class="mord mathnormal">n</span><span class="mclose">)</span></span></span></span></li>
<li><strong>Pros</strong>: Consistent performance; stable sort</li>
<li><strong>Cons</strong>: Requires extra space</li>
<li><strong>Use Case</strong>: Effective for large datasets and linked lists</li>
</ul>
<h2 class="anchor anchorWithStickyNavbar_LWe7" id="5-quick-sort">5. Quick Sort<a href="https://ajay-dhangar.github.io/algo/hi/blog/comparing-sorting-algorithms#5-quick-sort" class="hash-link" aria-label="5. Quick Sort का सीधा लिंक" title="5. Quick Sort का सीधा लिंक">​</a></h2>
<p><strong>Description</strong>: Quick Sort is a divide-and-conquer algorithm that selects a "pivot" element, partitions the array around it, and recursively sorts partitions.</p>
<ul>
<li><strong>Time Complexity</strong>: <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>O</mi><mo stretchy="false">(</mo><mi>n</mi><mi>log</mi><mo>⁡</mo><mi>n</mi><mo stretchy="false">)</mo></mrow><annotation encoding="application/x-tex">O(n \log n)</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:1em;vertical-align:-0.25em"></span><span class="mord mathnormal" style="margin-right:0.02778em">O</span><span class="mopen">(</span><span class="mord mathnormal">n</span><span class="mspace" style="margin-right:0.1667em"></span><span class="mop">lo<span style="margin-right:0.01389em">g</span></span><span class="mspace" style="margin-right:0.1667em"></span><span class="mord mathnormal">n</span><span class="mclose">)</span></span></span></span> average; <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>O</mi><mo stretchy="false">(</mo><msup><mi>n</mi><mn>2</mn></msup><mo stretchy="false">)</mo></mrow><annotation encoding="application/x-tex">O(n^2)</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:1.0641em;vertical-align:-0.25em"></span><span class="mord mathnormal" style="margin-right:0.02778em">O</span><span class="mopen">(</span><span class="mord"><span class="mord mathnormal">n</span><span class="msupsub"><span class="vlist-t"><span class="vlist-r"><span class="vlist" style="height:0.8141em"><span style="top:-3.063em;margin-right:0.05em"><span class="pstrut" style="height:2.7em"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight">2</span></span></span></span></span></span></span></span><span class="mclose">)</span></span></span></span> worst-case</li>
<li><strong>Space Complexity</strong>: <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>O</mi><mo stretchy="false">(</mo><mi>log</mi><mo>⁡</mo><mi>n</mi><mo stretchy="false">)</mo></mrow><annotation encoding="application/x-tex">O(\log n)</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:1em;vertical-align:-0.25em"></span><span class="mord mathnormal" style="margin-right:0.02778em">O</span><span class="mopen">(</span><span class="mop">lo<span style="margin-right:0.01389em">g</span></span><span class="mspace" style="margin-right:0.1667em"></span><span class="mord mathnormal">n</span><span class="mclose">)</span></span></span></span></li>
<li><strong>Pros</strong>: Fast in practice due to in-place sorting</li>
<li><strong>Cons</strong>: Worst-case time can be <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>O</mi><mo stretchy="false">(</mo><msup><mi>n</mi><mn>2</mn></msup><mo stretchy="false">)</mo></mrow><annotation encoding="application/x-tex">O(n^2)</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:1.0641em;vertical-align:-0.25em"></span><span class="mord mathnormal" style="margin-right:0.02778em">O</span><span class="mopen">(</span><span class="mord"><span class="mord mathnormal">n</span><span class="msupsub"><span class="vlist-t"><span class="vlist-r"><span class="vlist" style="height:0.8141em"><span style="top:-3.063em;margin-right:0.05em"><span class="pstrut" style="height:2.7em"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight">2</span></span></span></span></span></span></span></span><span class="mclose">)</span></span></span></span>; not stable</li>
<li><strong>Use Case</strong>: Suitable for large datasets, especially when optimizing for speed</li>
</ul>
<h2 class="anchor anchorWithStickyNavbar_LWe7" id="6-heap-sort">6. Heap Sort<a href="https://ajay-dhangar.github.io/algo/hi/blog/comparing-sorting-algorithms#6-heap-sort" class="hash-link" aria-label="6. Heap Sort का सीधा लिंक" title="6. Heap Sort का सीधा लिंक">​</a></h2>
<p><strong>Description</strong>: Heap Sort uses a binary heap to sort by repeatedly extracting the largest element (root) and adjusting the heap.</p>
<ul>
<li><strong>Time Complexity</strong>: <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>O</mi><mo stretchy="false">(</mo><mi>n</mi><mi>log</mi><mo>⁡</mo><mi>n</mi><mo stretchy="false">)</mo></mrow><annotation encoding="application/x-tex">O(n \log n)</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:1em;vertical-align:-0.25em"></span><span class="mord mathnormal" style="margin-right:0.02778em">O</span><span class="mopen">(</span><span class="mord mathnormal">n</span><span class="mspace" style="margin-right:0.1667em"></span><span class="mop">lo<span style="margin-right:0.01389em">g</span></span><span class="mspace" style="margin-right:0.1667em"></span><span class="mord mathnormal">n</span><span class="mclose">)</span></span></span></span></li>
<li><strong>Space Complexity</strong>: <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>O</mi><mo stretchy="false">(</mo><mn>1</mn><mo stretchy="false">)</mo></mrow><annotation encoding="application/x-tex">O(1)</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:1em;vertical-align:-0.25em"></span><span class="mord mathnormal" style="margin-right:0.02778em">O</span><span class="mopen">(</span><span class="mord">1</span><span class="mclose">)</span></span></span></span></li>
<li><strong>Pros</strong>: Efficient, in-place sorting</li>
<li><strong>Cons</strong>: Not stable; slower in practice than Quick Sort</li>
<li><strong>Use Case</strong>: Used when in-place sorting is preferred and stability isn't essential</li>
</ul>
<h2 class="anchor anchorWithStickyNavbar_LWe7" id="7-radix-sort">7. Radix Sort<a href="https://ajay-dhangar.github.io/algo/hi/blog/comparing-sorting-algorithms#7-radix-sort" class="hash-link" aria-label="7. Radix Sort का सीधा लिंक" title="7. Radix Sort का सीधा लिंक">​</a></h2>
<p><strong>Description</strong>: Radix Sort is a non-comparative algorithm that sorts integers by processing digits, usually using Counting Sort as a subroutine.</p>
<ul>
<li><strong>Time Complexity</strong>: <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>O</mi><mo stretchy="false">(</mo><mi>d</mi><mo>⋅</mo><mo stretchy="false">(</mo><mi>n</mi><mo>+</mo><mi>k</mi><mo stretchy="false">)</mo><mo stretchy="false">)</mo></mrow><annotation encoding="application/x-tex">O(d \cdot (n + k))</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:1em;vertical-align:-0.25em"></span><span class="mord mathnormal" style="margin-right:0.02778em">O</span><span class="mopen">(</span><span class="mord mathnormal">d</span><span class="mspace" style="margin-right:0.2222em"></span><span class="mbin">⋅</span><span class="mspace" style="margin-right:0.2222em"></span></span><span class="base"><span class="strut" style="height:1em;vertical-align:-0.25em"></span><span class="mopen">(</span><span class="mord mathnormal">n</span><span class="mspace" style="margin-right:0.2222em"></span><span class="mbin">+</span><span class="mspace" style="margin-right:0.2222em"></span></span><span class="base"><span class="strut" style="height:1em;vertical-align:-0.25em"></span><span class="mord mathnormal" style="margin-right:0.03148em">k</span><span class="mclose">))</span></span></span></span>, where <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>d</mi></mrow><annotation encoding="application/x-tex">d</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.6944em"></span><span class="mord mathnormal">d</span></span></span></span> is the digit count and <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>k</mi></mrow><annotation encoding="application/x-tex">k</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.6944em"></span><span class="mord mathnormal" style="margin-right:0.03148em">k</span></span></span></span> is the digit range</li>
<li><strong>Space Complexity</strong>: <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>O</mi><mo stretchy="false">(</mo><mi>n</mi><mo>+</mo><mi>k</mi><mo stretchy="false">)</mo></mrow><annotation encoding="application/x-tex">O(n + k)</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:1em;vertical-align:-0.25em"></span><span class="mord mathnormal" style="margin-right:0.02778em">O</span><span class="mopen">(</span><span class="mord mathnormal">n</span><span class="mspace" style="margin-right:0.2222em"></span><span class="mbin">+</span><span class="mspace" style="margin-right:0.2222em"></span></span><span class="base"><span class="strut" style="height:1em;vertical-align:-0.25em"></span><span class="mord mathnormal" style="margin-right:0.03148em">k</span><span class="mclose">)</span></span></span></span></li>
<li><strong>Pros</strong>: Fast for fixed-digit data; stable</li>
<li><strong>Cons</strong>: Limited to numbers or strings; extra space needed</li>
<li><strong>Use Case</strong>: Ideal for sorting large lists of integers or strings of uniform length</li>
</ul>
<h2 class="anchor anchorWithStickyNavbar_LWe7" id="8-counting-sort">8. Counting Sort<a href="https://ajay-dhangar.github.io/algo/hi/blog/comparing-sorting-algorithms#8-counting-sort" class="hash-link" aria-label="8. Counting Sort का सीधा लिंक" title="8. Counting Sort का सीधा लिंक">​</a></h2>
<p><strong>Description</strong>: Counting Sort counts occurrences of each element and calculates their sorted positions.</p>
<ul>
<li><strong>Time Complexity</strong>: <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>O</mi><mo stretchy="false">(</mo><mi>n</mi><mo>+</mo><mi>k</mi><mo stretchy="false">)</mo></mrow><annotation encoding="application/x-tex">O(n + k)</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:1em;vertical-align:-0.25em"></span><span class="mord mathnormal" style="margin-right:0.02778em">O</span><span class="mopen">(</span><span class="mord mathnormal">n</span><span class="mspace" style="margin-right:0.2222em"></span><span class="mbin">+</span><span class="mspace" style="margin-right:0.2222em"></span></span><span class="base"><span class="strut" style="height:1em;vertical-align:-0.25em"></span><span class="mord mathnormal" style="margin-right:0.03148em">k</span><span class="mclose">)</span></span></span></span>, where <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>k</mi></mrow><annotation encoding="application/x-tex">k</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.6944em"></span><span class="mord mathnormal" style="margin-right:0.03148em">k</span></span></span></span> is the input range</li>
<li><strong>Space Complexity</strong>: <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>O</mi><mo stretchy="false">(</mo><mi>n</mi><mo>+</mo><mi>k</mi><mo stretchy="false">)</mo></mrow><annotation encoding="application/x-tex">O(n + k)</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:1em;vertical-align:-0.25em"></span><span class="mord mathnormal" style="margin-right:0.02778em">O</span><span class="mopen">(</span><span class="mord mathnormal">n</span><span class="mspace" style="margin-right:0.2222em"></span><span class="mbin">+</span><span class="mspace" style="margin-right:0.2222em"></span></span><span class="base"><span class="strut" style="height:1em;vertical-align:-0.25em"></span><span class="mord mathnormal" style="margin-right:0.03148em">k</span><span class="mclose">)</span></span></span></span></li>
<li><strong>Pros</strong>: Fast and stable for specific data</li>
<li><strong>Cons</strong>: Limited to data with a small range; not for general-purpose sorting</li>
<li><strong>Use Case</strong>: Effective for lists with a limited value range</li>
</ul>
<h2 class="anchor anchorWithStickyNavbar_LWe7" id="comparison-summary">Comparison Summary<a href="https://ajay-dhangar.github.io/algo/hi/blog/comparing-sorting-algorithms#comparison-summary" class="hash-link" aria-label="Comparison Summary का सीधा लिंक" title="Comparison Summary का सीधा लिंक">​</a></h2>
<table><thead><tr><th>Algorithm</th><th>Best Time Complexity</th><th>Worst Time Complexity</th><th>Space Complexity</th><th>Stable</th><th>Use Cases</th></tr></thead><tbody><tr><td>Bubble Sort</td><td><span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>O</mi><mo stretchy="false">(</mo><mi>n</mi><mo stretchy="false">)</mo></mrow><annotation encoding="application/x-tex">O(n)</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:1em;vertical-align:-0.25em"></span><span class="mord mathnormal" style="margin-right:0.02778em">O</span><span class="mopen">(</span><span class="mord mathnormal">n</span><span class="mclose">)</span></span></span></span></td><td><span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>O</mi><mo stretchy="false">(</mo><msup><mi>n</mi><mn>2</mn></msup><mo stretchy="false">)</mo></mrow><annotation encoding="application/x-tex">O(n^2)</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:1.0641em;vertical-align:-0.25em"></span><span class="mord mathnormal" style="margin-right:0.02778em">O</span><span class="mopen">(</span><span class="mord"><span class="mord mathnormal">n</span><span class="msupsub"><span class="vlist-t"><span class="vlist-r"><span class="vlist" style="height:0.8141em"><span style="top:-3.063em;margin-right:0.05em"><span class="pstrut" style="height:2.7em"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight">2</span></span></span></span></span></span></span></span><span class="mclose">)</span></span></span></span></td><td><span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>O</mi><mo stretchy="false">(</mo><mn>1</mn><mo stretchy="false">)</mo></mrow><annotation encoding="application/x-tex">O(1)</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:1em;vertical-align:-0.25em"></span><span class="mord mathnormal" style="margin-right:0.02778em">O</span><span class="mopen">(</span><span class="mord">1</span><span class="mclose">)</span></span></span></span></td><td>Yes</td><td>Small or mostly sorted datasets</td></tr><tr><td>Selection Sort</td><td><span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>O</mi><mo stretchy="false">(</mo><msup><mi>n</mi><mn>2</mn></msup><mo stretchy="false">)</mo></mrow><annotation encoding="application/x-tex">O(n^2)</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:1.0641em;vertical-align:-0.25em"></span><span class="mord mathnormal" style="margin-right:0.02778em">O</span><span class="mopen">(</span><span class="mord"><span class="mord mathnormal">n</span><span class="msupsub"><span class="vlist-t"><span class="vlist-r"><span class="vlist" style="height:0.8141em"><span style="top:-3.063em;margin-right:0.05em"><span class="pstrut" style="height:2.7em"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight">2</span></span></span></span></span></span></span></span><span class="mclose">)</span></span></span></span></td><td><span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>O</mi><mo stretchy="false">(</mo><msup><mi>n</mi><mn>2</mn></msup><mo stretchy="false">)</mo></mrow><annotation encoding="application/x-tex">O(n^2)</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:1.0641em;vertical-align:-0.25em"></span><span class="mord mathnormal" style="margin-right:0.02778em">O</span><span class="mopen">(</span><span class="mord"><span class="mord mathnormal">n</span><span class="msupsub"><span class="vlist-t"><span class="vlist-r"><span class="vlist" style="height:0.8141em"><span style="top:-3.063em;margin-right:0.05em"><span class="pstrut" style="height:2.7em"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight">2</span></span></span></span></span></span></span></span><span class="mclose">)</span></span></span></span></td><td><span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>O</mi><mo stretchy="false">(</mo><mn>1</mn><mo stretchy="false">)</mo></mrow><annotation encoding="application/x-tex">O(1)</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:1em;vertical-align:-0.25em"></span><span class="mord mathnormal" style="margin-right:0.02778em">O</span><span class="mopen">(</span><span class="mord">1</span><span class="mclose">)</span></span></span></span></td><td>No</td><td>Small datasets, costly memory writes</td></tr><tr><td>Insertion Sort</td><td><span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>O</mi><mo stretchy="false">(</mo><mi>n</mi><mo stretchy="false">)</mo></mrow><annotation encoding="application/x-tex">O(n)</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:1em;vertical-align:-0.25em"></span><span class="mord mathnormal" style="margin-right:0.02778em">O</span><span class="mopen">(</span><span class="mord mathnormal">n</span><span class="mclose">)</span></span></span></span></td><td><span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>O</mi><mo stretchy="false">(</mo><msup><mi>n</mi><mn>2</mn></msup><mo stretchy="false">)</mo></mrow><annotation encoding="application/x-tex">O(n^2)</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:1.0641em;vertical-align:-0.25em"></span><span class="mord mathnormal" style="margin-right:0.02778em">O</span><span class="mopen">(</span><span class="mord"><span class="mord mathnormal">n</span><span class="msupsub"><span class="vlist-t"><span class="vlist-r"><span class="vlist" style="height:0.8141em"><span style="top:-3.063em;margin-right:0.05em"><span class="pstrut" style="height:2.7em"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight">2</span></span></span></span></span></span></span></span><span class="mclose">)</span></span></span></span></td><td><span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>O</mi><mo stretchy="false">(</mo><mn>1</mn><mo stretchy="false">)</mo></mrow><annotation encoding="application/x-tex">O(1)</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:1em;vertical-align:-0.25em"></span><span class="mord mathnormal" style="margin-right:0.02778em">O</span><span class="mopen">(</span><span class="mord">1</span><span class="mclose">)</span></span></span></span></td><td>Yes</td><td>Small or nearly sorted datasets</td></tr><tr><td>Merge Sort</td><td><span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>O</mi><mo stretchy="false">(</mo><mi>n</mi><mi>log</mi><mo>⁡</mo><mi>n</mi><mo stretchy="false">)</mo></mrow><annotation encoding="application/x-tex">O(n \log n)</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:1em;vertical-align:-0.25em"></span><span class="mord mathnormal" style="margin-right:0.02778em">O</span><span class="mopen">(</span><span class="mord mathnormal">n</span><span class="mspace" style="margin-right:0.1667em"></span><span class="mop">lo<span style="margin-right:0.01389em">g</span></span><span class="mspace" style="margin-right:0.1667em"></span><span class="mord mathnormal">n</span><span class="mclose">)</span></span></span></span></td><td><span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>O</mi><mo stretchy="false">(</mo><mi>n</mi><mi>log</mi><mo>⁡</mo><mi>n</mi><mo stretchy="false">)</mo></mrow><annotation encoding="application/x-tex">O(n \log n)</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:1em;vertical-align:-0.25em"></span><span class="mord mathnormal" style="margin-right:0.02778em">O</span><span class="mopen">(</span><span class="mord mathnormal">n</span><span class="mspace" style="margin-right:0.1667em"></span><span class="mop">lo<span style="margin-right:0.01389em">g</span></span><span class="mspace" style="margin-right:0.1667em"></span><span class="mord mathnormal">n</span><span class="mclose">)</span></span></span></span></td><td><span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>O</mi><mo stretchy="false">(</mo><mi>n</mi><mo stretchy="false">)</mo></mrow><annotation encoding="application/x-tex">O(n)</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:1em;vertical-align:-0.25em"></span><span class="mord mathnormal" style="margin-right:0.02778em">O</span><span class="mopen">(</span><span class="mord mathnormal">n</span><span class="mclose">)</span></span></span></span></td><td>Yes</td><td>Large datasets, stable sorting needed</td></tr><tr><td>Quick Sort</td><td><span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>O</mi><mo stretchy="false">(</mo><mi>n</mi><mi>log</mi><mo>⁡</mo><mi>n</mi><mo stretchy="false">)</mo></mrow><annotation encoding="application/x-tex">O(n \log n)</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:1em;vertical-align:-0.25em"></span><span class="mord mathnormal" style="margin-right:0.02778em">O</span><span class="mopen">(</span><span class="mord mathnormal">n</span><span class="mspace" style="margin-right:0.1667em"></span><span class="mop">lo<span style="margin-right:0.01389em">g</span></span><span class="mspace" style="margin-right:0.1667em"></span><span class="mord mathnormal">n</span><span class="mclose">)</span></span></span></span></td><td><span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>O</mi><mo stretchy="false">(</mo><msup><mi>n</mi><mn>2</mn></msup><mo stretchy="false">)</mo></mrow><annotation encoding="application/x-tex">O(n^2)</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:1.0641em;vertical-align:-0.25em"></span><span class="mord mathnormal" style="margin-right:0.02778em">O</span><span class="mopen">(</span><span class="mord"><span class="mord mathnormal">n</span><span class="msupsub"><span class="vlist-t"><span class="vlist-r"><span class="vlist" style="height:0.8141em"><span style="top:-3.063em;margin-right:0.05em"><span class="pstrut" style="height:2.7em"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight">2</span></span></span></span></span></span></span></span><span class="mclose">)</span></span></span></span></td><td><span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>O</mi><mo stretchy="false">(</mo><mi>log</mi><mo>⁡</mo><mi>n</mi><mo stretchy="false">)</mo></mrow><annotation encoding="application/x-tex">O(\log n)</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:1em;vertical-align:-0.25em"></span><span class="mord mathnormal" style="margin-right:0.02778em">O</span><span class="mopen">(</span><span class="mop">lo<span style="margin-right:0.01389em">g</span></span><span class="mspace" style="margin-right:0.1667em"></span><span class="mord mathnormal">n</span><span class="mclose">)</span></span></span></span></td><td>No</td><td>Large datasets, in-place and fast sort</td></tr><tr><td>Heap Sort</td><td><span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>O</mi><mo stretchy="false">(</mo><mi>n</mi><mi>log</mi><mo>⁡</mo><mi>n</mi><mo stretchy="false">)</mo></mrow><annotation encoding="application/x-tex">O(n \log n)</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:1em;vertical-align:-0.25em"></span><span class="mord mathnormal" style="margin-right:0.02778em">O</span><span class="mopen">(</span><span class="mord mathnormal">n</span><span class="mspace" style="margin-right:0.1667em"></span><span class="mop">lo<span style="margin-right:0.01389em">g</span></span><span class="mspace" style="margin-right:0.1667em"></span><span class="mord mathnormal">n</span><span class="mclose">)</span></span></span></span></td><td><span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>O</mi><mo stretchy="false">(</mo><mi>n</mi><mi>log</mi><mo>⁡</mo><mi>n</mi><mo stretchy="false">)</mo></mrow><annotation encoding="application/x-tex">O(n \log n)</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:1em;vertical-align:-0.25em"></span><span class="mord mathnormal" style="margin-right:0.02778em">O</span><span class="mopen">(</span><span class="mord mathnormal">n</span><span class="mspace" style="margin-right:0.1667em"></span><span class="mop">lo<span style="margin-right:0.01389em">g</span></span><span class="mspace" style="margin-right:0.1667em"></span><span class="mord mathnormal">n</span><span class="mclose">)</span></span></span></span></td><td><span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>O</mi><mo stretchy="false">(</mo><mn>1</mn><mo stretchy="false">)</mo></mrow><annotation encoding="application/x-tex">O(1)</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:1em;vertical-align:-0.25em"></span><span class="mord mathnormal" style="margin-right:0.02778em">O</span><span class="mopen">(</span><span class="mord">1</span><span class="mclose">)</span></span></span></span></td><td>No</td><td>Large datasets, stability not required</td></tr><tr><td>Radix Sort</td><td><span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>O</mi><mo stretchy="false">(</mo><mi>n</mi><mo>⋅</mo><mi>d</mi><mo stretchy="false">)</mo></mrow><annotation encoding="application/x-tex">O(n \cdot d)</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:1em;vertical-align:-0.25em"></span><span class="mord mathnormal" style="margin-right:0.02778em">O</span><span class="mopen">(</span><span class="mord mathnormal">n</span><span class="mspace" style="margin-right:0.2222em"></span><span class="mbin">⋅</span><span class="mspace" style="margin-right:0.2222em"></span></span><span class="base"><span class="strut" style="height:1em;vertical-align:-0.25em"></span><span class="mord mathnormal">d</span><span class="mclose">)</span></span></span></span></td><td><span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>O</mi><mo stretchy="false">(</mo><mi>n</mi><mo>⋅</mo><mi>d</mi><mo stretchy="false">)</mo></mrow><annotation encoding="application/x-tex">O(n \cdot d)</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:1em;vertical-align:-0.25em"></span><span class="mord mathnormal" style="margin-right:0.02778em">O</span><span class="mopen">(</span><span class="mord mathnormal">n</span><span class="mspace" style="margin-right:0.2222em"></span><span class="mbin">⋅</span><span class="mspace" style="margin-right:0.2222em"></span></span><span class="base"><span class="strut" style="height:1em;vertical-align:-0.25em"></span><span class="mord mathnormal">d</span><span class="mclose">)</span></span></span></span></td><td><span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>O</mi><mo stretchy="false">(</mo><mi>n</mi><mo>+</mo><mi>k</mi><mo stretchy="false">)</mo></mrow><annotation encoding="application/x-tex">O(n + k)</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:1em;vertical-align:-0.25em"></span><span class="mord mathnormal" style="margin-right:0.02778em">O</span><span class="mopen">(</span><span class="mord mathnormal">n</span><span class="mspace" style="margin-right:0.2222em"></span><span class="mbin">+</span><span class="mspace" style="margin-right:0.2222em"></span></span><span class="base"><span class="strut" style="height:1em;vertical-align:-0.25em"></span><span class="mord mathnormal" style="margin-right:0.03148em">k</span><span class="mclose">)</span></span></span></span></td><td>Yes</td><td>Large lists of numbers, fixed-length</td></tr><tr><td>Counting Sort</td><td><span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>O</mi><mo stretchy="false">(</mo><mi>n</mi><mo>+</mo><mi>k</mi><mo stretchy="false">)</mo></mrow><annotation encoding="application/x-tex">O(n + k)</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:1em;vertical-align:-0.25em"></span><span class="mord mathnormal" style="margin-right:0.02778em">O</span><span class="mopen">(</span><span class="mord mathnormal">n</span><span class="mspace" style="margin-right:0.2222em"></span><span class="mbin">+</span><span class="mspace" style="margin-right:0.2222em"></span></span><span class="base"><span class="strut" style="height:1em;vertical-align:-0.25em"></span><span class="mord mathnormal" style="margin-right:0.03148em">k</span><span class="mclose">)</span></span></span></span></td><td><span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>O</mi><mo stretchy="false">(</mo><mi>n</mi><mo>+</mo><mi>k</mi><mo stretchy="false">)</mo></mrow><annotation encoding="application/x-tex">O(n + k)</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:1em;vertical-align:-0.25em"></span><span class="mord mathnormal" style="margin-right:0.02778em">O</span><span class="mopen">(</span><span class="mord mathnormal">n</span><span class="mspace" style="margin-right:0.2222em"></span><span class="mbin">+</span><span class="mspace" style="margin-right:0.2222em"></span></span><span class="base"><span class="strut" style="height:1em;vertical-align:-0.25em"></span><span class="mord mathnormal" style="margin-right:0.03148em">k</span><span class="mclose">)</span></span></span></span></td><td><span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>O</mi><mo stretchy="false">(</mo><mi>n</mi><mo>+</mo><mi>k</mi><mo stretchy="false">)</mo></mrow><annotation encoding="application/x-tex">O(n + k)</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:1em;vertical-align:-0.25em"></span><span class="mord mathnormal" style="margin-right:0.02778em">O</span><span class="mopen">(</span><span class="mord mathnormal">n</span><span class="mspace" style="margin-right:0.2222em"></span><span class="mbin">+</span><span class="mspace" style="margin-right:0.2222em"></span></span><span class="base"><span class="strut" style="height:1em;vertical-align:-0.25em"></span><span class="mord mathnormal" style="margin-right:0.03148em">k</span><span class="mclose">)</span></span></span></span></td><td>Yes</td><td>Small integer range, limited data range</td></tr></tbody></table>
<h2 class="anchor anchorWithStickyNavbar_LWe7" id="conclusion">Conclusion<a href="https://ajay-dhangar.github.io/algo/hi/blog/comparing-sorting-algorithms#conclusion" class="hash-link" aria-label="Conclusion का सीधा लिंक" title="Conclusion का सीधा लिंक">​</a></h2>
<p>Each sorting algorithm has unique strengths and weaknesses, and the choice depends on the dataset's characteristics. Quick Sort and Merge Sort work well with large datasets, while Bubble Sort, Selection Sort, and Insertion Sort are best for smaller or partially sorted data. Radix and Counting Sort are efficient for data like integers in a limited range.</p>]]></content:encoded>
            <author>aryanrameshjain@gmail.com (Aryan Jain)</author>
            <category>ARYAN-JAIN</category>
            <category>algo</category>
            <category>dsa</category>
            <category>algorithms</category>
            <category>sorting</category>
            <category>time-complexity</category>
        </item>
        <item>
            <title><![CDATA[20 Most Essential Coding Patterns]]></title>
            <link>https://ajay-dhangar.github.io/algo/hi/blog/20-most-important-coding-pattern</link>
            <guid>https://ajay-dhangar.github.io/algo/hi/blog/20-most-important-coding-pattern</guid>
            <pubDate>Thu, 07 Nov 2024 17:28:29 GMT</pubDate>
            <description><![CDATA[Navigating through coding interviews requires more than just a good grasp of algorithms and data structures; it demands a strategic approach and a keen eye for patterns. In today's competitive world of tech job interviews, understanding and mastering coding patterns can significantly enhance your problem-solving skills and boost your performance.]]></description>
            <content:encoded><![CDATA[<p>Navigating through coding interviews requires more than just a good grasp of algorithms and data structures; it demands a strategic approach and a keen eye for patterns. In today's competitive world of tech job interviews, understanding and mastering coding patterns can significantly enhance your problem-solving skills and boost your performance.</p>
<p>Coding patterns, or as we like to call them, are recurring techniques that provide a structured approach to solving complex problems. Think of them as the building blocks of algorithms, helping you to break down problems into more manageable parts.</p>
<p>In this blog, we will explore 20 essential coding patterns that are pivotal for acing coding interviews. We will delve into the pros and cons of each pattern, providing you with a balanced view to help you make informed decisions during your interviews. And to top it off, we will equip you with real problem examples from the Grokking the Coding Interview course. I'm the author of this course, feel free to reach out to me if you have questions.</p>
<p>Let's go through each pattern one by one.</p>
<h2 class="anchor anchorWithStickyNavbar_LWe7" id="1-two-pointers">1. Two Pointers<a href="https://ajay-dhangar.github.io/algo/hi/blog/20-most-important-coding-pattern#1-two-pointers" class="hash-link" aria-label="1. Two Pointers का सीधा लिंक" title="1. Two Pointers का सीधा लिंक">​</a></h2>
<p><strong>Description</strong>: The Two Pointers technique is a clever strategy used in algorithm design, particularly when dealing with arrays or linked lists. Imagine you have two fingers, and you place each at different ends or positions of an array. These ‘fingers’ or pointers then traverse through the array, helping you to compare, search, or even manipulate the data efficiently.</p>
<p><strong>Usage</strong>:</p>
<ul>
<li>Ordered Data Structures: This pattern shines when applied to ordered arrays or lists, allowing for intelligent, position-based decisions that can significantly optimize the algorithm.</li>
<li>Efficiency: By reducing the need for nested loops, the Two Pointers technique helps in achieving linear time complexity, making your algorithm faster and more efficient.</li>
</ul>
<p><strong>Pros and Cons</strong>:</p>
<ul>
<li><strong>Pros</strong>:<!-- -->
<ul>
<li>Efficiency: Achieves O(n) time complexity for problems that might otherwise require O(n^2).</li>
<li>Simplicity: Once mastered, it provides a straightforward and elegant solution.</li>
</ul>
</li>
<li><strong>Cons</strong>:<!-- -->
<ul>
<li>Applicability: Mainly beneficial for problems involving sequences or intervals.</li>
<li>Initial Complexity: It might take some time to get the hang of this pattern and understand where and how to move the pointers.</li>
</ul>
</li>
</ul>
<p><strong>Example Problems from Grokking the Coding Interview</strong>:</p>
<ul>
<li>Pair with Target Sum: Find a pair in an array that adds up to a specific target sum.</li>
<li>Squaring a Sorted Array: Given a sorted array, create a new array containing squares of all the numbers of the input array in the sorted order.</li>
<li>Triplet Sum to Zero: Given an array of unsorted numbers, find all unique triplets in it that add up to zero.</li>
</ul>
<h2 class="anchor anchorWithStickyNavbar_LWe7" id="2-island-matrix-traversal-pattern">2. Island (Matrix Traversal) Pattern<a href="https://ajay-dhangar.github.io/algo/hi/blog/20-most-important-coding-pattern#2-island-matrix-traversal-pattern" class="hash-link" aria-label="2. Island (Matrix Traversal) Pattern का सीधा लिंक" title="2. Island (Matrix Traversal) Pattern का सीधा लिंक">​</a></h2>
<p><strong>Description</strong>: The Island pattern, also known as Matrix Traversal, is a technique used to navigate through a 2D array or matrix. The primary goal is to identify and process contiguous groups of elements, often referred to as ‘islands’. This pattern is particularly useful when you need to explore and manipulate grid-based data.</p>
<p><strong>Usage</strong>:</p>
<ul>
<li>Grid-Based Problems: Excelling in problems where you need to traverse a grid to find connected components or regions.</li>
<li>Contiguous Elements: Ideal for situations where you need to group together adjacent elements that share a common property.</li>
</ul>
<p><strong>Pros and Cons</strong>:</p>
<ul>
<li><strong>Pros</strong>:<!-- -->
<ul>
<li>Comprehensive: Provides a thorough way to explore all the elements in a grid.</li>
<li>Versatile: Can be used to solve a variety of problems related to 2D arrays.</li>
</ul>
</li>
<li><strong>Cons</strong>:<!-- -->
<ul>
<li>Complexity: Can be more complex to implement compared to linear data structure traversal.</li>
<li>Space Overhead: May require additional space for recursion or queue/stack for breadth-first/depth-first traversal.</li>
</ul>
</li>
</ul>
<p><strong>Example Problems from Grokking the Coding Interview</strong>:</p>
<ul>
<li>Number of Islands: Count the number of islands in a given 2D matrix.</li>
<li>Biggest Island: Find the largest island in terms of area or number of cells.</li>
<li>Flood Fill: Change the color of an image represented by a 2D array.</li>
</ul>
<h2 class="anchor anchorWithStickyNavbar_LWe7" id="3-fast--slow-pointers">3. Fast &amp; Slow Pointers<a href="https://ajay-dhangar.github.io/algo/hi/blog/20-most-important-coding-pattern#3-fast--slow-pointers" class="hash-link" aria-label="3. Fast &amp; Slow Pointers का सीधा लिंक" title="3. Fast &amp; Slow Pointers का सीधा लिंक">​</a></h2>
<p><strong>Description</strong>: The Fast &amp; Slow Pointers technique involves two pointers traversing through a data structure at different speeds. This ingenious approach is particularly useful in identifying cycles, finding middle elements, and solving various other problems related to linked lists and arrays.</p>
<p><strong>Usage</strong>:</p>
<ul>
<li>Cycle Detection: Perfect for identifying cycles in a linked list or array, which is a common interview question.</li>
<li>Finding Middle Elements: Efficiently find the middle element of a linked list without knowing the length beforehand.</li>
<li>Problem-Specific Solutions: Solve specific problems like finding the start of a cycle in a linked list.</li>
</ul>
<p><strong>Pros and Cons</strong>:</p>
<ul>
<li><strong>Pros</strong>:<!-- -->
<ul>
<li>Space Efficiency: Achieves solutions without the need for extra space, adhering to O(1) space complexity.</li>
<li>Versatility: Applicable to a variety of problems, making it a versatile pattern to know.</li>
</ul>
</li>
<li><strong>Cons</strong>:<!-- -->
<ul>
<li>Initial Complexity: Understanding how to move the pointers and at what speed can be tricky at first.</li>
<li>Specificity: While versatile, it is mostly beneficial for problems related to linked lists and certain array problems.</li>
</ul>
</li>
</ul>
<p><strong>Example Problems from Grokking the Coding Interview</strong>:</p>
<ul>
<li>LinkedList Cycle: Determine if a linked list has a cycle.</li>
<li>Middle of the LinkedList: Find the middle node of a linked list.</li>
<li>Palindrome LinkedList: Check if a linked list is a palindrome.</li>
</ul>
<h2 class="anchor anchorWithStickyNavbar_LWe7" id="4-sliding-window">4. Sliding Window<a href="https://ajay-dhangar.github.io/algo/hi/blog/20-most-important-coding-pattern#4-sliding-window" class="hash-link" aria-label="4. Sliding Window का सीधा लिंक" title="4. Sliding Window का सीधा लिंक">​</a></h2>
<p><strong>Description</strong>: The Sliding Window pattern involves creating a ‘window’ over a portion of data and sliding it across to solve problems efficiently. This technique is particularly useful for array or list-based problems where you need to find or calculate something among all the contiguous subarrays or sublists of a given size.</p>
<p><strong>Usage</strong>:</p>
<ul>
<li>Contiguous Subarrays: Ideal for problems that require you to deal with contiguous subarrays or sublists.</li>
<li>Variable Sized Window: Can be adapted for problems where the window size is not fixed and needs to be adjusted based on certain conditions.</li>
</ul>
<p><strong>Pros and Cons</strong>:</p>
<ul>
<li><strong>Pros</strong>:<!-- -->
<ul>
<li>Efficiency: Provides a way to reduce time complexity from O(n^2) to O(n) for specific problems.</li>
<li>Versatility: Can be used for a variety of problems, including maximum sum subarray, smallest subarray with a given sum, and longest substring with K distinct characters.</li>
</ul>
</li>
<li><strong>Cons</strong>:<!-- -->
<ul>
<li>Initial Complexity: Understanding how to adjust the window size and when to slide the window can be challenging initially.</li>
<li>Specificity: Mainly beneficial for problems involving contiguous subarrays or sublists.</li>
</ul>
</li>
</ul>
<p><strong>Example Problems from Grokking the Coding Interview</strong>:</p>
<ul>
<li>Maximum Sum Subarray of Size K: Given an array of positive numbers and a positive number ‘k’, find the maximum sum of any contiguous subarray of size ‘k’.</li>
<li>Fruits Into Baskets: Given an array of characters where each character represents a fruit tree, you are given two baskets, and your goal is to put maximum number of fruits in each basket.</li>
<li>Longest Substring with K Distinct Characters: Given a string, find the length of the longest substring in it with no more than K distinct characters.</li>
</ul>
<h2 class="anchor anchorWithStickyNavbar_LWe7" id="5-merge-intervals">5. Merge Intervals<a href="https://ajay-dhangar.github.io/algo/hi/blog/20-most-important-coding-pattern#5-merge-intervals" class="hash-link" aria-label="5. Merge Intervals का सीधा लिंक" title="5. Merge Intervals का सीधा लिंक">​</a></h2>
<p><strong>Description</strong>: The Merge Intervals pattern is a powerful technique used to deal with overlapping intervals or ranges. It involves sorting and then merging intervals based on specific conditions. This pattern is incredibly useful for time-based problems, scheduling, and range manipulation.</p>
<p><strong>Usage</strong>:</p>
<ul>
<li>Overlapping Intervals: Perfect for problems where you need to merge overlapping intervals or find if an interval overlaps with any other.</li>
<li>Interval Scheduling: Useful for problems that involve scheduling based on time intervals.</li>
</ul>
<p><strong>Pros and Cons</strong>:</p>
<ul>
<li><strong>Pros</strong>:<!-- -->
<ul>
<li>Clarity: Provides a clear and systematic way to deal with overlapping intervals.</li>
<li>Efficiency: Helps in reducing the problem complexity and achieving optimal solutions.</li>
</ul>
</li>
<li><strong>Cons</strong>:<!-- -->
<ul>
<li>Sorting Overhead: Requires the intervals to be sorted beforehand, which could add to the time complexity.</li>
<li>Specificity: Mainly beneficial for problems involving intervals and ranges.</li>
</ul>
</li>
</ul>
<p><strong>Example Problems from Grokking the Coding Interview</strong>:</p>
<ul>
<li>Merge Intervals: Given a list of intervals, merge all the overlapping intervals to produce a list that has only mutually exclusive intervals.</li>
<li>Insert Interval: Given a list of non-overlapping intervals sorted by their start time, insert a given interval at the correct position and merge all necessary intervals to produce a list that has only mutually exclusive intervals.</li>
<li>Intervals Intersection: Given two lists of intervals, find the intersection of these two lists. Each list consists of disjoint intervals sorted on their start time.</li>
</ul>
<h2 class="anchor anchorWithStickyNavbar_LWe7" id="6-cyclic-sort">6. Cyclic Sort<a href="https://ajay-dhangar.github.io/algo/hi/blog/20-most-important-coding-pattern#6-cyclic-sort" class="hash-link" aria-label="6. Cyclic Sort का सीधा लिंक" title="6. Cyclic Sort का सीधा लिंक">​</a></h2>
<p><strong>Description</strong>: Cyclic Sort is a unique and intuitive sorting algorithm, particularly well-suited for problems where you are given a range of numbers and asked to sort them. The beauty of this pattern lies in its ability to sort the numbers in-place, utilizing the fact that the numbers are consecutive or have a specific range.</p>
<p><strong>Usage</strong>:</p>
<ul>
<li>Consecutive Numbers: Ideal for scenarios where you have an array of numbers in a specific range, and you need to sort them or find missing/duplicate numbers.</li>
<li>In-Place Sorting: Provides a way to sort the numbers without using any extra space.</li>
</ul>
<p><strong>Pros and Cons</strong>:</p>
<ul>
<li><strong>Pros</strong>:<!-- -->
<ul>
<li>Space Efficiency: Achieves sorting without the need for additional space, adhering to O(1) space complexity.</li>
<li>Time Efficiency: Offers a linear time complexity solution for specific range-based sorting problems.</li>
</ul>
</li>
<li><strong>Cons</strong>:<!-- -->
<ul>
<li>Limited Applicability: Best suited for problems involving numbers in a specific range and may not be applicable for other types of sorting problems.</li>
<li>Initial Learning Curve: Understanding the cyclic sort pattern and knowing when to apply it can take some time.</li>
</ul>
</li>
</ul>
<p><strong>Example Problems from Grokking the Coding Interview</strong>:</p>
<ul>
<li>Find the Missing Number: Given an array containing n distinct numbers taken from 0, 1, 2, ..., n, find the one that is missing from the array.</li>
<li>Find all Duplicates: Find all the duplicate numbers (without using extra space and in O(n) runtime).</li>
<li>Duplicates In Array: Given an array of integers, 1 ≤ a[i] ≤ n (n = size of array), some elements appear twice and others appear once.</li>
</ul>
<h2 class="anchor anchorWithStickyNavbar_LWe7" id="7-in-place-reversal-of-a-linked-list">7. In-place Reversal of a Linked List<a href="https://ajay-dhangar.github.io/algo/hi/blog/20-most-important-coding-pattern#7-in-place-reversal-of-a-linked-list" class="hash-link" aria-label="7. In-place Reversal of a Linked List का सीधा लिंक" title="7. In-place Reversal of a Linked List का सीधा लिंक">​</a></h2>
<p><strong>Description</strong>: The In-place Reversal of a Linked List pattern is a technique used to reverse the elements of a linked list without using additional memory. This is achieved by manipulating the pointers of the nodes in the linked list to reverse their direction.</p>
<p><strong>Usage</strong>:</p>
<ul>
<li>Memory Efficiency: Since no additional data structures are used, this pattern is memory efficient.</li>
<li>Reversing Sub-lists: Can be extended to reverse sub-lists within a linked list, providing versatility in solving more complex problems.</li>
</ul>
<p><strong>Pros and Cons</strong>:</p>
<ul>
<li><strong>Pros</strong>:<!-- -->
<ul>
<li>Space Efficiency: Achieves in-place reversal, ensuring O(1) space complexity.</li>
<li>Versatility: Can be used to solve various problems related to linked lists, including reversing sub-lists and finding palindromes.</li>
</ul>
</li>
<li><strong>Cons</strong>:<!-- -->
<ul>
<li>Pointer Manipulation: Requires careful manipulation of pointers, which can be error-prone.</li>
<li>Initial Learning Curve: Understanding how to reverse the pointers without losing the rest of the linked list can be challenging initially.</li>
</ul>
</li>
</ul>
<p><strong>Example Problems from Grokking the Coding Interview</strong>:</p>
<ul>
<li>Reverse a LinkedList: Given the head of a Singly LinkedList, reverse the LinkedList.</li>
<li>Reverse a Sub-list: Given the head of a LinkedList and two positions ‘p’ and ‘q’, reverse the LinkedList from position ‘p’ to ‘q’.</li>
<li>Reverse Every K-element Sub-list: Given the head of a LinkedList and a number ‘k’, reverse every ‘k’ sized sub-list starting from the head.</li>
</ul>
<h2 class="anchor anchorWithStickyNavbar_LWe7" id="8-tree-breadth-first-search">8. Tree Breadth First Search<a href="https://ajay-dhangar.github.io/algo/hi/blog/20-most-important-coding-pattern#8-tree-breadth-first-search" class="hash-link" aria-label="8. Tree Breadth First Search का सीधा लिंक" title="8. Tree Breadth First Search का सीधा लिंक">​</a></h2>
<p><strong>Description</strong>: The Tree Breadth First Search (BFS) pattern involves traversing a tree level by level, ensuring that you visit all the nodes at the current depth before moving on to the nodes at the next depth level. This is usually implemented using a queue.</p>
<p><strong>Usage</strong>:</p>
<ul>
<li>Level Order Traversal: Ideal for problems that require you to traverse a tree in level order or when you need to perform operations on nodes at the same depth.</li>
<li>Minimum Depth: Useful for finding the minimum depth of a tree, as you can stop the traversal once you find the first leaf node.</li>
</ul>
<p><strong>Pros and Cons</strong>:</p>
<ul>
<li><strong>Pros</strong>:<!-- -->
<ul>
<li>Complete Traversal: Ensures that every node in the tree is visited.</li>
<li>Level Order Information: Provides information about the depth or level of each node.</li>
</ul>
</li>
<li><strong>Cons</strong>:<!-- -->
<ul>
<li>Space Overhead: Requires additional space for the queue, which can be as large as the number of nodes at the largest level.</li>
<li>Not as Efficient for Depth-Related Queries: For problems that depend on depth information, a depth-first search might be more efficient.</li>
</ul>
</li>
</ul>
<p><strong>Example Problems from Grokking the Coding Interview</strong>:</p>
<ul>
<li>Binary Tree Level Order Traversal: Traverse a tree in level order and return the values of the nodes at each level.</li>
<li>Reverse Level Order Traversal: Traverse a tree in reverse level order.</li>
<li>Zigzag Traversal: Traverse a tree in a zigzag order.</li>
</ul>
<h2 class="anchor anchorWithStickyNavbar_LWe7" id="9-tree-depth-first-search">9. Tree Depth First Search<a href="https://ajay-dhangar.github.io/algo/hi/blog/20-most-important-coding-pattern#9-tree-depth-first-search" class="hash-link" aria-label="9. Tree Depth First Search का सीधा लिंक" title="9. Tree Depth First Search का सीधा लिंक">​</a></h2>
<p><strong>Description</strong>: The Tree Depth First Search (DFS) pattern involves traversing a tree in a depth-first manner, meaning you go as deep as possible down one branch before backing up and exploring other branches. This is typically implemented using recursion or a stack.</p>
<p><strong>Usage</strong>:</p>
<ul>
<li>Path Finding: Ideal for problems where you need to find a path or check the existence of a path with certain properties.</li>
<li>Complex Tree Traversals: Useful for more complex tree traversal problems where you need to maintain state or perform operations as you traverse.</li>
</ul>
<p><strong>Pros and Cons</strong>:</p>
<ul>
<li><strong>Pros</strong>:<!-- -->
<ul>
<li>Space Efficiency: For a balanced tree, DFS uses less space than BFS.</li>
<li>Simplicity: Recursive implementations can be more straightforward and concise.</li>
</ul>
</li>
<li><strong>Cons</strong>:<!-- -->
<ul>
<li>Can Be Less Efficient for Wide Trees: For very wide trees, DFS can use more space than BFS.</li>
<li>May Not Find the Shortest Path: If you're looking for the shortest path in an unweighted tree, BFS is generally a better choice.</li>
</ul>
</li>
</ul>
<p><strong>Example Problems from Grokking the Coding Interview</strong>:</p>
<ul>
<li>Binary Tree Path Sum: Given a binary tree and a number ‘S’, find if the tree has a path from root-to-leaf such that the sum of all the node values of that path equals ‘S’.</li>
<li>All Paths for a Sum: Find all root-to-leaf paths in a binary tree that have a sum equal to a given number.</li>
<li>Count Paths for a Sum: Find the number of paths in a tree that sum up to a given value.</li>
</ul>
<h2 class="anchor anchorWithStickyNavbar_LWe7" id="10-two-heaps">10. Two Heaps<a href="https://ajay-dhangar.github.io/algo/hi/blog/20-most-important-coding-pattern#10-two-heaps" class="hash-link" aria-label="10. Two Heaps का सीधा लिंक" title="10. Two Heaps का सीधा लिंक">​</a></h2>
<p><strong>Description</strong>: The Two Heaps pattern involves using two priority queues (heaps) to maintain a running balance or median of a set of numbers. One heap keeps track of the smaller half of the numbers, and the other keeps track of the larger half.</p>
<p><strong>Usage</strong>:</p>
<ul>
<li>Running Median: Perfect for problems where you need to find the median of a set of numbers as new numbers are added.</li>
<li>Balanced Partition: Useful for problems where you need to maintain a balanced partition of numbers.</li>
</ul>
<p><strong>Pros and Cons</strong>:</p>
<ul>
<li><strong>Pros</strong>:<!-- -->
<ul>
<li>Efficiency: Provides a way to efficiently find the median or maintain balance in O(log N) time.</li>
<li>Dynamic: Can handle dynamic datasets where numbers are added over time.</li>
</ul>
</li>
<li><strong>Cons</strong>:<!-- -->
<ul>
<li>Complexity: Implementation can be more complex due to the need to balance the two heaps.</li>
<li>Space Overhead: Requires additional space to store the numbers in the heaps.</li>
</ul>
</li>
</ul>
<p><strong>Example Problems from Grokking the Coding Interview</strong>:</p>
<ul>
<li>Find the Median of a Number Stream: Design a class to calculate the median of a number stream.</li>
<li>Sliding Window Median: Find the median of all subarrays of size ‘K’ in the array.</li>
<li>Maximize Capital: Given a set of investment projects with their respective profits, we need to find the most profitable projects. We are given an initial capital and are allowed to invest only in a fixed number of projects. Our goal is to choose projects that give us the maximum profit.</li>
</ul>
<h2 class="anchor anchorWithStickyNavbar_LWe7" id="11-subsets">11. Subsets<a href="https://ajay-dhangar.github.io/algo/hi/blog/20-most-important-coding-pattern#11-subsets" class="hash-link" aria-label="11. Subsets का सीधा लिंक" title="11. Subsets का सीधा लिंक">​</a></h2>
<p><strong>Description</strong>: The Subsets pattern involves dealing with problems that require generating all possible combinations or subsets of a set. This pattern is particularly useful when you need to explore all the different ways to combine elements, which is a common scenario in many coding problems.</p>
<p><strong>Usage</strong>:</p>
<ul>
<li>Combinatorial Problems: Ideal for problems where you need to generate all possible combinations of elements.</li>
<li>Exhaustive Search: Useful when you need to perform an exhaustive search over all possible subsets of a set.</li>
</ul>
<p><strong>Pros and Cons</strong>:</p>
<ul>
<li><strong>Pros</strong>:<!-- -->
<ul>
<li>Comprehensive: Ensures that you consider all possible combinations of elements.</li>
<li>Versatile: Can be used to solve a variety of problems, including generating power sets, combinations, and permutations.</li>
</ul>
</li>
<li><strong>Cons</strong>:<!-- -->
<ul>
<li>Time Complexity: Can lead to exponential time complexity, as the number of subsets of a set is <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><msup><mn>2</mn><mi>N</mi></msup></mrow><annotation encoding="application/x-tex">2^N</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.8413em"></span><span class="mord"><span class="mord">2</span><span class="msupsub"><span class="vlist-t"><span class="vlist-r"><span class="vlist" style="height:0.8413em"><span style="top:-3.063em;margin-right:0.05em"><span class="pstrut" style="height:2.7em"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mathnormal mtight" style="margin-right:0.10903em">N</span></span></span></span></span></span></span></span></span></span></span>.</li>
<li>Space Complexity: Requires additional space to store all the subsets.</li>
</ul>
</li>
</ul>
<p><strong>Example Problems from Grokking the Coding Interview</strong>:</p>
<ul>
<li>Subsets: Given a set with distinct elements, find all of its distinct subsets.</li>
<li>Subsets With Duplicates: Given a set of numbers that might contain duplicates, find all of its distinct subsets.</li>
<li>Permutations: Given a set of distinct numbers, find all of its permutations.</li>
</ul>
<h2 class="anchor anchorWithStickyNavbar_LWe7" id="12-modified-binary-search">12. Modified Binary Search<a href="https://ajay-dhangar.github.io/algo/hi/blog/20-most-important-coding-pattern#12-modified-binary-search" class="hash-link" aria-label="12. Modified Binary Search का सीधा लिंक" title="12. Modified Binary Search का सीधा लिंक">​</a></h2>
<p><strong>Description</strong>: The Modified Binary Search pattern involves adapting the classic binary search algorithm to solve various problems, often related to searching in a sorted array or finding the boundary of a condition.</p>
<p><strong>Usage</strong>:</p>
<ul>
<li>Sorted Arrays: Perfect for problems involving searching or making decisions based on sorted arrays.</li>
<li>Finding Boundaries: Useful for finding the start or end of a condition in a sorted array.</li>
</ul>
<p><strong>Pros and Cons</strong>:</p>
<ul>
<li><strong>Pros</strong>:<!-- -->
<ul>
<li>Efficiency: Provides a logarithmic time complexity solution for searching problems, making it highly efficient.</li>
<li>Versatility: Can be adapted to solve a wide range of problems beyond simple searching.</li>
</ul>
</li>
<li><strong>Cons</strong>:<!-- -->
<ul>
<li>Applicability: Mainly beneficial for problems involving sorted arrays or conditions with clear boundaries.</li>
<li>Implementation Nuances: Requires careful implementation to handle edge cases and avoid infinite loops.</li>
</ul>
</li>
</ul>
<p><strong>Example Problems from Grokking the Coding Interview</strong>:</p>
<ul>
<li>Order-agnostic Binary Search: Given a sorted array of numbers, find the index of a given number. The array could be sorted in ascending or descending order.</li>
<li>Ceiling of a Number: Given an array of numbers sorted in ascending order, find the ceiling of a given number. The ceiling of a number is the smallest number in the given array greater than or equal to the given number.</li>
<li>Next Letter: Given an array of lowercase letters sorted in ascending order, find the smallest letter in the given array greater than a given ‘key’.</li>
</ul>
<h2 class="anchor anchorWithStickyNavbar_LWe7" id="13-bitwise-xor">13. Bitwise XOR<a href="https://ajay-dhangar.github.io/algo/hi/blog/20-most-important-coding-pattern#13-bitwise-xor" class="hash-link" aria-label="13. Bitwise XOR का सीधा लिंक" title="13. Bitwise XOR का सीधा लिंक">​</a></h2>
<p><strong>Description</strong>: The Bitwise XOR pattern involves using the XOR bitwise operator to solve problems, often related to finding missing numbers or duplicate numbers in an array. XOR is a binary operator that returns 1 when the two bits are different and 0 when they are the same.</p>
<p><strong>Usage</strong>:</p>
<ul>
<li>Finding Missing or Duplicate Numbers: Ideal for problems where you need to find a missing number or duplicate numbers</li>
</ul>
<h2 class="anchor anchorWithStickyNavbar_LWe7" id="14-top-k-elements">14. Top 'K' Elements<a href="https://ajay-dhangar.github.io/algo/hi/blog/20-most-important-coding-pattern#14-top-k-elements" class="hash-link" aria-label="14. Top 'K' Elements का सीधा लिंक" title="14. Top 'K' Elements का सीधा लिंक">​</a></h2>
<p><strong>Description</strong>: The Top 'K' Elements pattern involves finding the 'K' largest or smallest elements in an array or stream of data. This pattern is particularly useful when dealing with large datasets and you need to maintain a subset of the data based on certain criteria.</p>
<p><strong>Usage</strong>:</p>
<ul>
<li><strong>Priority Queue</strong>: Utilizes a min-heap or max-heap to efficiently keep track of the 'K' largest or smallest elements.</li>
<li><strong>Streaming Data</strong>: Ideal for scenarios where the data is streaming in, and you need to maintain the 'K' largest or smallest elements at any given time.</li>
</ul>
<p><strong>Pros and Cons</strong>:</p>
<ul>
<li><strong>Pros</strong>:<!-- -->
<ul>
<li><strong>Efficiency</strong>: Provides a way to find the 'K' largest or smallest elements in O(N log K) time.</li>
<li><strong>Space Efficiency</strong>: Only requires O(K) space, regardless of the size of the dataset.</li>
</ul>
</li>
<li><strong>Cons</strong>:<!-- -->
<ul>
<li><strong>Limited to 'K' Elements</strong>: Only maintains information about the top 'K' elements, not the entire dataset.</li>
<li><strong>Heap Maintenance</strong>: Requires careful maintenance of the heap to ensure efficiency.</li>
</ul>
</li>
</ul>
<p><strong>Example Problems from Grokking the Coding Interview</strong>:</p>
<ul>
<li><strong>Top 'K' Numbers</strong>: Given an unsorted array of numbers, find the ‘K’ largest numbers in it.</li>
<li><strong>Kth Smallest Number</strong>: Given an unsorted array of numbers, find the Kth smallest number in it.</li>
<li><strong>‘K’ Closest Points to the Origin</strong>: Given an array of points in the a 2D plane, find ‘K’ closest points to the origin.</li>
</ul>
<h2 class="anchor anchorWithStickyNavbar_LWe7" id="15-k-way-merge">15. K-way Merge<a href="https://ajay-dhangar.github.io/algo/hi/blog/20-most-important-coding-pattern#15-k-way-merge" class="hash-link" aria-label="15. K-way Merge का सीधा लिंक" title="15. K-way Merge का सीधा लिंक">​</a></h2>
<p><strong>Description</strong>: The K-way Merge pattern involves merging multiple sorted arrays or lists into a single sorted list. This pattern is highly useful in scenarios where you have multiple sorted datasets that you need to combine and maintain the sorted order.</p>
<p><strong>Usage</strong>:</p>
<ul>
<li><strong>Multiple Sorted Arrays</strong>: Ideal for merging multiple sorted arrays or lists.</li>
<li><strong>External Sorting</strong>: Useful in external sorting, where the data to be sorted does not fit into memory and is stored in sorted chunks.</li>
</ul>
<p><strong>Pros and Cons</strong>:</p>
<ul>
<li><strong>Pros</strong>:<!-- -->
<ul>
<li><strong>Efficiency</strong>: Provides a way to merge multiple sorted arrays in O(N log K) time, where ‘N’ is the total number of elements across all arrays, and ‘K’ is the number of arrays.</li>
<li><strong>Space Efficiency</strong>: Only requires O(K) space for the priority queue.</li>
</ul>
</li>
<li><strong>Cons</strong>:<!-- -->
<ul>
<li><strong>Dependent on Sorting</strong>: The efficiency of this pattern depends on the arrays being sorted.</li>
<li><strong>Priority Queue Overhead</strong>: Requires maintenance of a priority queue, which adds to the complexity.</li>
</ul>
</li>
</ul>
<p><strong>Example Problems from Grokking the Coding Interview</strong>:</p>
<ul>
<li><strong>Merge K Sorted Lists</strong>: Given an array of ‘K’ sorted LinkedLists, merge them into one sorted list.</li>
<li><strong>Kth Smallest Number in M Sorted Lists</strong>: Given ‘M’ sorted arrays, find the K’th smallest number among all the arrays.</li>
<li><strong>Find the Smallest Range Covering Elements from K Lists</strong>: Given ‘M’ sorted arrays, find the smallest range that includes at least one number from each of the ‘M’ lists.</li>
</ul>
<h2 class="anchor anchorWithStickyNavbar_LWe7" id="16-topological-sort">16. Topological Sort<a href="https://ajay-dhangar.github.io/algo/hi/blog/20-most-important-coding-pattern#16-topological-sort" class="hash-link" aria-label="16. Topological Sort का सीधा लिंक" title="16. Topological Sort का सीधा लिंक">​</a></h2>
<p><strong>Description</strong>: Topological Sort is a pattern used for linearly ordering the vertices of a directed graph in such a way that for every directed edge (U, V), vertex U comes before V. This pattern is particularly useful in scenarios where you have a set of tasks and some tasks depend on others.</p>
<p><strong>Usage</strong>:</p>
<ul>
<li><strong>Task Scheduling</strong>: Ideal for problems where tasks need to be scheduled in a specific order, respecting their dependencies.</li>
<li><strong>Course Scheduling</strong>: Useful in scenarios like course scheduling where some courses have prerequisites.</li>
</ul>
<p><strong>Pros and Cons</strong>:</p>
<ul>
<li><strong>Pros</strong>:<!-- -->
<ul>
<li><strong>Clarity</strong>: Provides a clear and systematic way to order tasks or vertices.</li>
<li><strong>Detecting Cycles</strong>: Helps in detecting cycles in a directed graph, which is important for understanding if a valid ordering is possible.</li>
</ul>
</li>
<li><strong>Cons</strong>:<!-- -->
<ul>
<li><strong>Applicability</strong>: Mainly beneficial for problems involving directed graphs and ordering of vertices.</li>
<li><strong>Complexity</strong>: Implementation can be complex, especially for beginners.</li>
</ul>
</li>
</ul>
<p><strong>Example Problems from Grokking the Coding Interview</strong>:</p>
<ul>
<li><strong>Topological Sort</strong>: Given a directed graph, find the topological ordering of its vertices.</li>
<li><strong>Tasks Scheduling</strong>: Find if it is possible to schedule all the tasks.</li>
<li><strong>Tasks Scheduling Order</strong>: Find the order of tasks we should pick to finish all tasks.</li>
</ul>
<h2 class="anchor anchorWithStickyNavbar_LWe7" id="17-trie">17. Trie<a href="https://ajay-dhangar.github.io/algo/hi/blog/20-most-important-coding-pattern#17-trie" class="hash-link" aria-label="17. Trie का सीधा लिंक" title="17. Trie का सीधा लिंक">​</a></h2>
<p><strong>Description</strong>: A Trie, also known as a prefix tree, is a tree-like data structure used to store a dynamic set of strings, where the keys are usually strings. It is particularly useful for retrieval of a key in a dataset of strings, which makes it highly efficient for solving word-based problems.</p>
<p><strong>Usage</strong>:</p>
<ul>
<li><strong>Autocomplete</strong>: Ideal for implementing autocomplete functionality in search engines or text editors.</li>
<li><strong>Spell Checker</strong>: Useful for building spell checkers in word processors.</li>
<li><strong>IP Routing</strong>: Used in IP routing to store and search routes.</li>
</ul>
<p><strong>Pros and Cons</strong>:</p>
<ul>
<li><strong>Pros</strong>:<!-- -->
<ul>
<li><strong>Efficiency</strong>: Provides fast retrieval of strings and is more efficient than hash tables or sets when it comes to string keys.</li>
<li><strong>Prefix Searching</strong>: Excellent for problems that require prefix searching or matching.</li>
</ul>
</li>
<li><strong>Cons</strong>:<!-- -->
<ul>
<li><strong>Space Overhead</strong>: Can use more space compared to other data structures when the dataset is sparse.</li>
<li><strong>Complexity</strong>: Implementation can be complex, especially when handling deletion of words from the Trie.</li>
</ul>
</li>
</ul>
<p><strong>Example Problems from Grokking the Coding Interview</strong>:</p>
<ul>
<li><strong>Insert into and Search in a Trie</strong>: Implement insertion and search in a Trie.</li>
<li><strong>Longest Common Prefix</strong>: Find the longest common prefix of a set of strings.</li>
<li><strong>Word Search</strong>: Given a 2D board and a word, find if the word exists in the grid.</li>
</ul>
<h2 class="anchor anchorWithStickyNavbar_LWe7" id="18-backtracking">18. Backtracking<a href="https://ajay-dhangar.github.io/algo/hi/blog/20-most-important-coding-pattern#18-backtracking" class="hash-link" aria-label="18. Backtracking का सीधा लिंक" title="18. Backtracking का सीधा लिंक">​</a></h2>
<p><strong>Description</strong> : Backtracking is a general algorithmic technique that considers searching through all the possible configurations of a search space in order to solve computational problems. It is particularly useful for optimization problems and when a complete search of the solution space is required. The main idea is to explore each possibility until the solution is found or all possibilities have been exhausted.</p>
<p><strong>Usage</strong></p>
<ul>
<li><strong>Combinatorial Problems</strong>:  Ideal for solving problems that require generating all possible configurations like permutations, combinations, and subsets.</li>
<li><strong>Puzzle Solving</strong>: Useful for solving puzzles such as Sudoku, crossword puzzles, and the N-Queens problem.</li>
</ul>
<p><strong>Pros and Cons</strong></p>
<ul>
<li><strong>Pros</strong>
<ul>
<li><strong>Completeness</strong>  Ensures that the entire solution space is explored, guaranteeing that the optimal solution will be found if it exists.</li>
<li><strong>Space Efficiency</strong> Uses less memory as it only needs to store the current state and the decision stack.</li>
</ul>
</li>
<li><strong>Cons</strong>
<ul>
<li><strong>Time Complexity</strong> Can lead to exponential time complexity, as it explores all possible configurations.</li>
<li><strong>Space Efficiency</strong> May require additional optimizations like pruning to be practical for larger instances.
<strong>Example Problems from Grokking the Coding Interview</strong>:</li>
</ul>
</li>
<li><strong>Subsets</strong> Given a set of numbers, find all of its subsets.</li>
<li><strong>Permutations</strong>  Given a set of distinct numbers, find all of its permutations.</li>
<li><strong>N-Queens</strong>  Place N queens on an N×N chessboard so that no two queens threaten each other.</li>
</ul>
<h2 class="anchor anchorWithStickyNavbar_LWe7" id="19-monotonic-stack">19. Monotonic Stack<a href="https://ajay-dhangar.github.io/algo/hi/blog/20-most-important-coding-pattern#19-monotonic-stack" class="hash-link" aria-label="19. Monotonic Stack का सीधा लिंक" title="19. Monotonic Stack का सीधा लिंक">​</a></h2>
<p><strong>Description</strong>: A Monotonic Stack is a specialized data structure that maintains elements in a sorted order while supporting stack operations. It is particularly useful for problems where you need to find the next greater or smaller element in an array or when you need to maintain a running maximum or minimum value efficiently.</p>
<p><strong>Usage</strong>:</p>
<ul>
<li><strong>Next Greater Element</strong>: Ideal for finding the next greater element for each element in an array.</li>
<li><strong>Maximum Area Histogram</strong>: Useful for problems like finding the largest rectangular area under a histogram.</li>
</ul>
<p><strong>Pros and Cons</strong>:</p>
<ul>
<li><strong>Pros</strong>:<!-- -->
<ul>
<li><strong>Efficiency</strong>: Provides a way to solve certain problems in linear time, making it highly efficient.</li>
<li><strong>Simplicity</strong>: Once understood, the monotonic stack can lead to concise and elegant solutions.</li>
</ul>
</li>
<li><strong>Cons</strong>:<!-- -->
<ul>
<li><strong>Specificity</strong>: Mainly beneficial for problems involving finding the next greater or smaller element and related problems.</li>
<li><strong>Learning Curve</strong>: Understanding how and when to use a monotonic stack can take some time.</li>
</ul>
</li>
</ul>
<p><strong>Example Problems</strong>:</p>
<ul>
<li><strong>Next Greater Element</strong>: Given an array, find the next greater element for each element in the array.</li>
<li><strong>Maximum Area Histogram</strong>: Given a histogram, find the largest rectangular area under the histogram.</li>
<li><strong>Largest Rectangle in Histogram</strong>: Given n non-negative integers representing the histogram's bar height where the width of each bar is 1, find the area of largest rectangle in the histogram.</li>
</ul>
<h2 class="anchor anchorWithStickyNavbar_LWe7" id="20-01-knapsack-dynamic-programming">20. 0/1 Knapsack (Dynamic Programming)<a href="https://ajay-dhangar.github.io/algo/hi/blog/20-most-important-coding-pattern#20-01-knapsack-dynamic-programming" class="hash-link" aria-label="20. 0/1 Knapsack (Dynamic Programming) का सीधा लिंक" title="20. 0/1 Knapsack (Dynamic Programming) का सीधा लिंक">​</a></h2>
<p><strong>Description</strong>: The 0/1 Knapsack problem is a classic optimization problem that falls under the category of Dynamic Programming. In this problem, you are given a set of items, each with a weight and a value, and a knapsack with a maximum capacity. The goal is to determine the maximum value that can be accommodated in the knapsack without exceeding its capacity. The "0/1" part of the name reflects the fact that you can't break an item, you either take it or leave it.</p>
<p><strong>Usage</strong>:</p>
<ul>
<li><strong>Resource Allocation</strong>: Ideal for problems where you need to optimally allocate limited resources to maximize profit or minimize cost.</li>
<li><strong>Budgeting</strong>: Useful for budgeting scenarios where you need to choose a subset of projects or investments to maximize return.</li>
</ul>
<p><strong>Pros and Cons</strong>:</p>
<ul>
<li><strong>Pros</strong>:<!-- -->
<ul>
<li><strong>Optimality</strong>: Ensures that the optimal solution is found, provided that the problem satisfies the principle of optimality.</li>
<li><strong>Generality</strong>: Can be adapted to solve a wide variety of optimization problems.</li>
</ul>
</li>
<li><strong>Cons</strong>:<!-- -->
<ul>
<li><strong>Time and Space Complexity</strong>: The naive implementation has a time and space complexity of O(nW), where n is the number of items and W is the capacity of the knapsack. This can be prohibitive for large inputs.</li>
<li><strong>Requires Integer Weights and Values</strong>: The classic 0/1 Knapsack problem requires weights and values to be integers.</li>
</ul>
</li>
</ul>
<p><strong>Example Problems from Grokking the Coding Interview</strong>:</p>
<ul>
<li><strong>0/1 Knapsack</strong>: Given the weights and profits of ‘N’ items, put these items in a knapsack which has a capacity ‘C’. The goal is to get the maximum profit out of the items in the knapsack.</li>
<li><strong>Equal Subset Sum Partition</strong>: Given a set of positive numbers, find if we can partition it into two subsets such that the sum of elements in both subsets is equal.</li>
<li><strong>Subset Sum</strong>: Given a set of positive numbers, determine if there exists a subset in the set whose sum is equal to a given number ‘S’.</li>
</ul>]]></content:encoded>
            <author>vrishi7654@gmail.com (Rishi Verma)</author>
            <category>coding</category>
            <category>interview</category>
            <category>dsa</category>
            <category>C++</category>
            <category>Rishi-Verma</category>
            <category>java</category>
            <category>python</category>
            <category>programming</category>
            <category>sliding window</category>
            <category>two pointers</category>
            <category>fast and slow pointers</category>
            <category>merge intervals</category>
            <category>cyclic sort</category>
        </item>
        <item>
            <title><![CDATA[Common Recursion Patterns in Algorithms]]></title>
            <link>https://ajay-dhangar.github.io/algo/hi/blog/common-recursion-patterns</link>
            <guid>https://ajay-dhangar.github.io/algo/hi/blog/common-recursion-patterns</guid>
            <pubDate>Thu, 07 Nov 2024 17:28:29 GMT</pubDate>
            <description><![CDATA[Recursion is a powerful technique in programming that allows functions to call themselves. It is widely used in various algorithms, especially when dealing with problems that can be broken down into smaller subproblems.]]></description>
            <content:encoded><![CDATA[<p>Recursion is a powerful technique in programming that allows functions to call themselves. It is widely used in various algorithms, especially when dealing with problems that can be broken down into smaller subproblems.</p>
<p>In this blog, we'll explore:</p>
<ul>
<li><strong>Tree Traversal</strong>: How to traverse tree structures using recursion.</li>
<li><strong>Backtracking</strong>: An approach to solve problems by trying multiple possibilities.</li>
</ul>
<hr>
<h2 class="anchor anchorWithStickyNavbar_LWe7" id="what-are-recursion-patterns">What are Recursion Patterns?<a href="https://ajay-dhangar.github.io/algo/hi/blog/common-recursion-patterns#what-are-recursion-patterns" class="hash-link" aria-label="What are Recursion Patterns? का सीधा लिंक" title="What are Recursion Patterns? का सीधा लिंक">​</a></h2>
<p>Recursion patterns are common techniques employed in recursive algorithms that can help solve various computational problems.</p>
<h3 class="anchor anchorWithStickyNavbar_LWe7" id="1-tree-traversal">1. Tree Traversal<a href="https://ajay-dhangar.github.io/algo/hi/blog/common-recursion-patterns#1-tree-traversal" class="hash-link" aria-label="1. Tree Traversal का सीधा लिंक" title="1. Tree Traversal का सीधा लिंक">​</a></h3>
<p>Tree traversal is a common use case for recursion, where we visit each node in a tree data structure. There are several methods of tree traversal:</p>
<ul>
<li><strong>Pre-order Traversal</strong>: Visit the root, then recursively visit the left subtree and the right subtree.</li>
<li><strong>In-order Traversal</strong>: Recursively visit the left subtree, the root, and then the right subtree.</li>
<li><strong>Post-order Traversal</strong>: Recursively visit the left subtree, the right subtree, and then the root.</li>
</ul>
<h4 class="anchor anchorWithStickyNavbar_LWe7" id="example-pre-order-traversal">Example: Pre-order Traversal<a href="https://ajay-dhangar.github.io/algo/hi/blog/common-recursion-patterns#example-pre-order-traversal" class="hash-link" aria-label="Example: Pre-order Traversal का सीधा लिंक" title="Example: Pre-order Traversal का सीधा लिंक">​</a></h4>
<div class="language-javascript codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-javascript codeBlock_bY9V thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token keyword" style="color:#00009f">function</span><span class="token plain"> </span><span class="token function" style="color:#d73a49">preOrder</span><span class="token punctuation" style="color:#393A34">(</span><span class="token parameter">node</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token keyword control-flow" style="color:#00009f">if</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">(</span><span class="token plain">node</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    </span><span class="token console class-name">console</span><span class="token punctuation" style="color:#393A34">.</span><span class="token method function property-access" style="color:#d73a49">log</span><span class="token punctuation" style="color:#393A34">(</span><span class="token plain">node</span><span class="token punctuation" style="color:#393A34">.</span><span class="token property-access">value</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    </span><span class="token function" style="color:#d73a49">preOrder</span><span class="token punctuation" style="color:#393A34">(</span><span class="token plain">node</span><span class="token punctuation" style="color:#393A34">.</span><span class="token property-access">left</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    </span><span class="token function" style="color:#d73a49">preOrder</span><span class="token punctuation" style="color:#393A34">(</span><span class="token plain">node</span><span class="token punctuation" style="color:#393A34">.</span><span class="token property-access">right</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token punctuation" style="color:#393A34">}</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token punctuation" style="color:#393A34">}</span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="क्लिपबोर्ड पर कोड कॉपी करें" title="कॉपी" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg viewBox="0 0 24 24" class="copyButtonIcon_y97N"><path fill="currentColor" d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg viewBox="0 0 24 24" class="copyButtonSuccessIcon_LjdS"><path fill="currentColor" d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div>
<h3 class="anchor anchorWithStickyNavbar_LWe7" id="2-backtracking">2. Backtracking<a href="https://ajay-dhangar.github.io/algo/hi/blog/common-recursion-patterns#2-backtracking" class="hash-link" aria-label="2. Backtracking का सीधा लिंक" title="2. Backtracking का सीधा लिंक">​</a></h3>
<p>Backtracking is a method for solving problems incrementally by trying partial solutions and then abandoning them if they do not lead to a valid solution.</p>
<h4 class="anchor anchorWithStickyNavbar_LWe7" id="example-n-queens-problem">Example: N-Queens Problem<a href="https://ajay-dhangar.github.io/algo/hi/blog/common-recursion-patterns#example-n-queens-problem" class="hash-link" aria-label="Example: N-Queens Problem का सीधा लिंक" title="Example: N-Queens Problem का सीधा लिंक">​</a></h4>
<div class="language-javascript codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-javascript codeBlock_bY9V thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token keyword" style="color:#00009f">function</span><span class="token plain"> </span><span class="token function" style="color:#d73a49">solveNQueens</span><span class="token punctuation" style="color:#393A34">(</span><span class="token parameter">n</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token keyword" style="color:#00009f">const</span><span class="token plain"> board </span><span class="token operator" style="color:#393A34">=</span><span class="token plain"> </span><span class="token known-class-name class-name">Array</span><span class="token punctuation" style="color:#393A34">(</span><span class="token plain">n</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">.</span><span class="token method function property-access" style="color:#d73a49">fill</span><span class="token punctuation" style="color:#393A34">(</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">.</span><span class="token method function property-access" style="color:#d73a49">map</span><span class="token punctuation" style="color:#393A34">(</span><span class="token punctuation" style="color:#393A34">(</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"> </span><span class="token arrow operator" style="color:#393A34">=&gt;</span><span class="token plain"> </span><span class="token known-class-name class-name">Array</span><span class="token punctuation" style="color:#393A34">(</span><span class="token plain">n</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">.</span><span class="token method function property-access" style="color:#d73a49">fill</span><span class="token punctuation" style="color:#393A34">(</span><span class="token string" style="color:#e3116c">'.'</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token keyword" style="color:#00009f">const</span><span class="token plain"> results </span><span class="token operator" style="color:#393A34">=</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">[</span><span class="token punctuation" style="color:#393A34">]</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  </span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token keyword" style="color:#00009f">function</span><span class="token plain"> </span><span class="token function" style="color:#d73a49">backtrack</span><span class="token punctuation" style="color:#393A34">(</span><span class="token parameter">row</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    </span><span class="token keyword control-flow" style="color:#00009f">if</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">(</span><span class="token plain">row </span><span class="token operator" style="color:#393A34">===</span><span class="token plain"> n</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">      results</span><span class="token punctuation" style="color:#393A34">.</span><span class="token method function property-access" style="color:#d73a49">push</span><span class="token punctuation" style="color:#393A34">(</span><span class="token plain">board</span><span class="token punctuation" style="color:#393A34">.</span><span class="token method function property-access" style="color:#d73a49">map</span><span class="token punctuation" style="color:#393A34">(</span><span class="token parameter">r</span><span class="token plain"> </span><span class="token arrow operator" style="color:#393A34">=&gt;</span><span class="token plain"> r</span><span class="token punctuation" style="color:#393A34">.</span><span class="token method function property-access" style="color:#d73a49">join</span><span class="token punctuation" style="color:#393A34">(</span><span class="token string" style="color:#e3116c">''</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">.</span><span class="token method function property-access" style="color:#d73a49">join</span><span class="token punctuation" style="color:#393A34">(</span><span class="token string" style="color:#e3116c">'\n'</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">      </span><span class="token keyword control-flow" style="color:#00009f">return</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    </span><span class="token punctuation" style="color:#393A34">}</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    </span><span class="token keyword control-flow" style="color:#00009f">for</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">(</span><span class="token keyword" style="color:#00009f">let</span><span class="token plain"> col </span><span class="token operator" style="color:#393A34">=</span><span class="token plain"> </span><span class="token number" style="color:#36acaa">0</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"> col </span><span class="token operator" style="color:#393A34">&lt;</span><span class="token plain"> n</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"> col</span><span class="token operator" style="color:#393A34">++</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">      </span><span class="token keyword control-flow" style="color:#00009f">if</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">(</span><span class="token function" style="color:#d73a49">isValid</span><span class="token punctuation" style="color:#393A34">(</span><span class="token plain">row</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"> col</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">        board</span><span class="token punctuation" style="color:#393A34">[</span><span class="token plain">row</span><span class="token punctuation" style="color:#393A34">]</span><span class="token punctuation" style="color:#393A34">[</span><span class="token plain">col</span><span class="token punctuation" style="color:#393A34">]</span><span class="token plain"> </span><span class="token operator" style="color:#393A34">=</span><span class="token plain"> </span><span class="token string" style="color:#e3116c">'Q'</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">        </span><span class="token function" style="color:#d73a49">backtrack</span><span class="token punctuation" style="color:#393A34">(</span><span class="token plain">row </span><span class="token operator" style="color:#393A34">+</span><span class="token plain"> </span><span class="token number" style="color:#36acaa">1</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">        board</span><span class="token punctuation" style="color:#393A34">[</span><span class="token plain">row</span><span class="token punctuation" style="color:#393A34">]</span><span class="token punctuation" style="color:#393A34">[</span><span class="token plain">col</span><span class="token punctuation" style="color:#393A34">]</span><span class="token plain"> </span><span class="token operator" style="color:#393A34">=</span><span class="token plain"> </span><span class="token string" style="color:#e3116c">'.'</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"> </span><span class="token comment" style="color:#999988;font-style:italic">// backtrack</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">      </span><span class="token punctuation" style="color:#393A34">}</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    </span><span class="token punctuation" style="color:#393A34">}</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token punctuation" style="color:#393A34">}</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  </span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token function" style="color:#d73a49">backtrack</span><span class="token punctuation" style="color:#393A34">(</span><span class="token number" style="color:#36acaa">0</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token keyword control-flow" style="color:#00009f">return</span><span class="token plain"> results</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token punctuation" style="color:#393A34">}</span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="क्लिपबोर्ड पर कोड कॉपी करें" title="कॉपी" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg viewBox="0 0 24 24" class="copyButtonIcon_y97N"><path fill="currentColor" d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg viewBox="0 0 24 24" class="copyButtonSuccessIcon_LjdS"><path fill="currentColor" d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div>
<h3 class="anchor anchorWithStickyNavbar_LWe7" id="why-are-recursion-patterns-important">Why are Recursion Patterns Important?<a href="https://ajay-dhangar.github.io/algo/hi/blog/common-recursion-patterns#why-are-recursion-patterns-important" class="hash-link" aria-label="Why are Recursion Patterns Important? का सीधा लिंक" title="Why are Recursion Patterns Important? का सीधा लिंक">​</a></h3>
<p>Understanding common recursion patterns can significantly enhance your problem-solving skills, allowing you to tackle complex problems more efficiently.</p>]]></content:encoded>
            <author>22wh1a12b5@bvrithyderabad.edu.in (Chiluka Akshitha)</author>
            <category>akshitha-chiluka</category>
            <category>algo</category>
            <category>dsa</category>
            <category>algorithms</category>
            <category>recursion</category>
        </item>
        <item>
            <title><![CDATA[Exploring Graph Algorithms: BFS vs DFS]]></title>
            <link>https://ajay-dhangar.github.io/algo/hi/blog/exploring-graph-algorithms-bfs-vs-dfs</link>
            <guid>https://ajay-dhangar.github.io/algo/hi/blog/exploring-graph-algorithms-bfs-vs-dfs</guid>
            <pubDate>Thu, 07 Nov 2024 17:28:29 GMT</pubDate>
            <description><![CDATA[Graph algorithms are fundamental in computer science, enabling us to navigate and analyze networks effectively. Two of the most prominent graph traversal algorithms are Breadth-First Search (BFS) and Depth-First Search (DFS). This blog post will delve into the key differences between these algorithms, their implementations, and their applications in real-world scenarios.]]></description>
            <content:encoded><![CDATA[<p>Graph algorithms are fundamental in computer science, enabling us to navigate and analyze networks effectively. Two of the most prominent graph traversal algorithms are Breadth-First Search (BFS) and Depth-First Search (DFS). This blog post will delve into the key differences between these algorithms, their implementations, and their applications in real-world scenarios.</p>
<p>In this blog, we'll explore:</p>
<ul>
<li><strong>Understanding Graphs</strong>: What are graphs and their components?</li>
<li><strong>Breadth-First Search (BFS)</strong>: How does it work?</li>
<li><strong>Depth-First Search (DFS)</strong>: A step-by-step explanation.</li>
<li><strong>Comparison of BFS and DFS</strong>: When to use which algorithm.</li>
<li><strong>Implementation</strong>: Code examples in Python and Java.</li>
<li><strong>Real-World Applications</strong>: How these algorithms are applied in practice.</li>
</ul>
<hr>
<h2 class="anchor anchorWithStickyNavbar_LWe7" id="understanding-graphs">Understanding Graphs<a href="https://ajay-dhangar.github.io/algo/hi/blog/exploring-graph-algorithms-bfs-vs-dfs#understanding-graphs" class="hash-link" aria-label="Understanding Graphs का सीधा लिंक" title="Understanding Graphs का सीधा लिंक">​</a></h2>
<p>Graphs consist of vertices (nodes) connected by edges (links). They can be directed or undirected, weighted or unweighted, and are used to model relationships and structures in various fields, from social networks to transportation systems.</p>
<h3 class="anchor anchorWithStickyNavbar_LWe7" id="graph-representation-example">Graph Representation Example:<a href="https://ajay-dhangar.github.io/algo/hi/blog/exploring-graph-algorithms-bfs-vs-dfs#graph-representation-example" class="hash-link" aria-label="Graph Representation Example: का सीधा लिंक" title="Graph Representation Example: का सीधा लिंक">​</a></h3>
<p>Consider the following undirected graph:</p>
<p>This graph can be represented using an adjacency list or matrix.</p>
<h2 class="anchor anchorWithStickyNavbar_LWe7" id="breadth-first-search-bfs">Breadth-First Search (BFS)<a href="https://ajay-dhangar.github.io/algo/hi/blog/exploring-graph-algorithms-bfs-vs-dfs#breadth-first-search-bfs" class="hash-link" aria-label="Breadth-First Search (BFS) का सीधा लिंक" title="Breadth-First Search (BFS) का सीधा लिंक">​</a></h2>
<p>BFS explores the graph level by level, starting from a source node and visiting all its neighbors before moving on to the next level of nodes.</p>
<h3 class="anchor anchorWithStickyNavbar_LWe7" id="the-algorithm">The Algorithm<a href="https://ajay-dhangar.github.io/algo/hi/blog/exploring-graph-algorithms-bfs-vs-dfs#the-algorithm" class="hash-link" aria-label="The Algorithm का सीधा लिंक" title="The Algorithm का सीधा लिंक">​</a></h3>
<ol>
<li><strong>Initialization</strong>: Use a queue to keep track of nodes to visit.</li>
<li><strong>Visit Nodes</strong>: Dequeue a node, mark it as visited, and enqueue its unvisited neighbors.</li>
<li><strong>Repeat</strong>: Continue until there are no more nodes to visit.</li>
</ol>
<h3 class="anchor anchorWithStickyNavbar_LWe7" id="time-complexity">Time Complexity<a href="https://ajay-dhangar.github.io/algo/hi/blog/exploring-graph-algorithms-bfs-vs-dfs#time-complexity" class="hash-link" aria-label="Time Complexity का सीधा लिंक" title="Time Complexity का सीधा लिंक">​</a></h3>
<p>BFS runs in O(V + E) time, where <code>V</code> is the number of vertices and <code>E</code> is the number of edges.</p>
<h2 class="anchor anchorWithStickyNavbar_LWe7" id="depth-first-search-dfs">Depth-First Search (DFS)<a href="https://ajay-dhangar.github.io/algo/hi/blog/exploring-graph-algorithms-bfs-vs-dfs#depth-first-search-dfs" class="hash-link" aria-label="Depth-First Search (DFS) का सीधा लिंक" title="Depth-First Search (DFS) का सीधा लिंक">​</a></h2>
<p>DFS explores as far as possible along each branch before backtracking. It can be implemented using recursion or an explicit stack.</p>
<h3 class="anchor anchorWithStickyNavbar_LWe7" id="the-algorithm-1">The Algorithm<a href="https://ajay-dhangar.github.io/algo/hi/blog/exploring-graph-algorithms-bfs-vs-dfs#the-algorithm-1" class="hash-link" aria-label="The Algorithm का सीधा लिंक" title="The Algorithm का सीधा लिंक">​</a></h3>
<ol>
<li><strong>Initialization</strong>: Use a stack to keep track of nodes.</li>
<li><strong>Visit Nodes</strong>: Pop a node, mark it as visited, and push its unvisited neighbors onto the stack.</li>
<li><strong>Repeat</strong>: Continue until the stack is empty.</li>
</ol>
<h3 class="anchor anchorWithStickyNavbar_LWe7" id="time-complexity-1">Time Complexity<a href="https://ajay-dhangar.github.io/algo/hi/blog/exploring-graph-algorithms-bfs-vs-dfs#time-complexity-1" class="hash-link" aria-label="Time Complexity का सीधा लिंक" title="Time Complexity का सीधा लिंक">​</a></h3>
<p>DFS also runs in O(V + E) time.</p>
<h2 class="anchor anchorWithStickyNavbar_LWe7" id="comparison-of-bfs-and-dfs">Comparison of BFS and DFS<a href="https://ajay-dhangar.github.io/algo/hi/blog/exploring-graph-algorithms-bfs-vs-dfs#comparison-of-bfs-and-dfs" class="hash-link" aria-label="Comparison of BFS and DFS का सीधा लिंक" title="Comparison of BFS and DFS का सीधा लिंक">​</a></h2>
<table><thead><tr><th>Feature</th><th>BFS</th><th>DFS</th></tr></thead><tbody><tr><td>Strategy</td><td>Level by level</td><td>Deep into the graph</td></tr><tr><td>Data Structure</td><td>Queue</td><td>Stack (or recursion)</td></tr><tr><td>Memory Usage</td><td>Higher (for wide graphs)</td><td>Lower (for deep graphs)</td></tr><tr><td>Shortest Path</td><td>Yes</td><td>No</td></tr><tr><td>Suitable for</td><td>Finding shortest paths</td><td>Solving puzzles (e.g., mazes)</td></tr></tbody></table>
<h2 class="anchor anchorWithStickyNavbar_LWe7" id="code-implementation">Code Implementation<a href="https://ajay-dhangar.github.io/algo/hi/blog/exploring-graph-algorithms-bfs-vs-dfs#code-implementation" class="hash-link" aria-label="Code Implementation का सीधा लिंक" title="Code Implementation का सीधा लिंक">​</a></h2>
<h3 class="anchor anchorWithStickyNavbar_LWe7" id="python-implementation">Python Implementation:<a href="https://ajay-dhangar.github.io/algo/hi/blog/exploring-graph-algorithms-bfs-vs-dfs#python-implementation" class="hash-link" aria-label="Python Implementation: का सीधा लिंक" title="Python Implementation: का सीधा लिंक">​</a></h3>
<div class="language-python codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-python codeBlock_bY9V thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token keyword" style="color:#00009f">from</span><span class="token plain"> collections </span><span class="token keyword" style="color:#00009f">import</span><span class="token plain"> deque</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token comment" style="color:#999988;font-style:italic"># BFS Implementation</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token keyword" style="color:#00009f">def</span><span class="token plain"> </span><span class="token function" style="color:#d73a49">bfs</span><span class="token punctuation" style="color:#393A34">(</span><span class="token plain">graph</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"> start</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">:</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    visited </span><span class="token operator" style="color:#393A34">=</span><span class="token plain"> </span><span class="token builtin">set</span><span class="token punctuation" style="color:#393A34">(</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    queue </span><span class="token operator" style="color:#393A34">=</span><span class="token plain"> deque</span><span class="token punctuation" style="color:#393A34">(</span><span class="token punctuation" style="color:#393A34">[</span><span class="token plain">start</span><span class="token punctuation" style="color:#393A34">]</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    </span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    </span><span class="token keyword" style="color:#00009f">while</span><span class="token plain"> queue</span><span class="token punctuation" style="color:#393A34">:</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">        vertex </span><span class="token operator" style="color:#393A34">=</span><span class="token plain"> queue</span><span class="token punctuation" style="color:#393A34">.</span><span class="token plain">popleft</span><span class="token punctuation" style="color:#393A34">(</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">        </span><span class="token keyword" style="color:#00009f">if</span><span class="token plain"> vertex </span><span class="token keyword" style="color:#00009f">not</span><span class="token plain"> </span><span class="token keyword" style="color:#00009f">in</span><span class="token plain"> visited</span><span class="token punctuation" style="color:#393A34">:</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">            visited</span><span class="token punctuation" style="color:#393A34">.</span><span class="token plain">add</span><span class="token punctuation" style="color:#393A34">(</span><span class="token plain">vertex</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">            </span><span class="token keyword" style="color:#00009f">print</span><span class="token punctuation" style="color:#393A34">(</span><span class="token plain">vertex</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"> end</span><span class="token operator" style="color:#393A34">=</span><span class="token string" style="color:#e3116c">' '</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">            queue</span><span class="token punctuation" style="color:#393A34">.</span><span class="token plain">extend</span><span class="token punctuation" style="color:#393A34">(</span><span class="token plain">neighbor </span><span class="token keyword" style="color:#00009f">for</span><span class="token plain"> neighbor </span><span class="token keyword" style="color:#00009f">in</span><span class="token plain"> graph</span><span class="token punctuation" style="color:#393A34">[</span><span class="token plain">vertex</span><span class="token punctuation" style="color:#393A34">]</span><span class="token plain"> </span><span class="token keyword" style="color:#00009f">if</span><span class="token plain"> neighbor </span><span class="token keyword" style="color:#00009f">not</span><span class="token plain"> </span><span class="token keyword" style="color:#00009f">in</span><span class="token plain"> visited</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token comment" style="color:#999988;font-style:italic"># Example usage</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">graph </span><span class="token operator" style="color:#393A34">=</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    </span><span class="token string" style="color:#e3116c">'A'</span><span class="token punctuation" style="color:#393A34">:</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">[</span><span class="token string" style="color:#e3116c">'B'</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"> </span><span class="token string" style="color:#e3116c">'C'</span><span class="token punctuation" style="color:#393A34">]</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    </span><span class="token string" style="color:#e3116c">'B'</span><span class="token punctuation" style="color:#393A34">:</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">[</span><span class="token string" style="color:#e3116c">'A'</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"> </span><span class="token string" style="color:#e3116c">'D'</span><span class="token punctuation" style="color:#393A34">]</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    </span><span class="token string" style="color:#e3116c">'C'</span><span class="token punctuation" style="color:#393A34">:</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">[</span><span class="token string" style="color:#e3116c">'A'</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"> </span><span class="token string" style="color:#e3116c">'D'</span><span class="token punctuation" style="color:#393A34">]</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    </span><span class="token string" style="color:#e3116c">'D'</span><span class="token punctuation" style="color:#393A34">:</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">[</span><span class="token string" style="color:#e3116c">'B'</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"> </span><span class="token string" style="color:#e3116c">'C'</span><span class="token punctuation" style="color:#393A34">]</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token punctuation" style="color:#393A34">}</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">bfs</span><span class="token punctuation" style="color:#393A34">(</span><span class="token plain">graph</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"> </span><span class="token string" style="color:#e3116c">'A'</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain">  </span><span class="token comment" style="color:#999988;font-style:italic"># Output: A B C D</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token comment" style="color:#999988;font-style:italic"># DFS Implementation</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token keyword" style="color:#00009f">def</span><span class="token plain"> </span><span class="token function" style="color:#d73a49">dfs</span><span class="token punctuation" style="color:#393A34">(</span><span class="token plain">graph</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"> start</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"> visited</span><span class="token operator" style="color:#393A34">=</span><span class="token boolean" style="color:#36acaa">None</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">:</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    </span><span class="token keyword" style="color:#00009f">if</span><span class="token plain"> visited </span><span class="token keyword" style="color:#00009f">is</span><span class="token plain"> </span><span class="token boolean" style="color:#36acaa">None</span><span class="token punctuation" style="color:#393A34">:</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">        visited </span><span class="token operator" style="color:#393A34">=</span><span class="token plain"> </span><span class="token builtin">set</span><span class="token punctuation" style="color:#393A34">(</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    </span><span class="token keyword" style="color:#00009f">if</span><span class="token plain"> start </span><span class="token keyword" style="color:#00009f">not</span><span class="token plain"> </span><span class="token keyword" style="color:#00009f">in</span><span class="token plain"> visited</span><span class="token punctuation" style="color:#393A34">:</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">        visited</span><span class="token punctuation" style="color:#393A34">.</span><span class="token plain">add</span><span class="token punctuation" style="color:#393A34">(</span><span class="token plain">start</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">        </span><span class="token keyword" style="color:#00009f">print</span><span class="token punctuation" style="color:#393A34">(</span><span class="token plain">start</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"> end</span><span class="token operator" style="color:#393A34">=</span><span class="token string" style="color:#e3116c">' '</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">        </span><span class="token keyword" style="color:#00009f">for</span><span class="token plain"> neighbor </span><span class="token keyword" style="color:#00009f">in</span><span class="token plain"> graph</span><span class="token punctuation" style="color:#393A34">[</span><span class="token plain">start</span><span class="token punctuation" style="color:#393A34">]</span><span class="token punctuation" style="color:#393A34">:</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">            dfs</span><span class="token punctuation" style="color:#393A34">(</span><span class="token plain">graph</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"> neighbor</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"> visited</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token comment" style="color:#999988;font-style:italic"># Example usage</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">dfs</span><span class="token punctuation" style="color:#393A34">(</span><span class="token plain">graph</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"> </span><span class="token string" style="color:#e3116c">'A'</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain">  </span><span class="token comment" style="color:#999988;font-style:italic"># Output: A B D C</span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="क्लिपबोर्ड पर कोड कॉपी करें" title="कॉपी" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg viewBox="0 0 24 24" class="copyButtonIcon_y97N"><path fill="currentColor" d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg viewBox="0 0 24 24" class="copyButtonSuccessIcon_LjdS"><path fill="currentColor" d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div>
<h3 class="anchor anchorWithStickyNavbar_LWe7" id="java-implementation">Java Implementation:<a href="https://ajay-dhangar.github.io/algo/hi/blog/exploring-graph-algorithms-bfs-vs-dfs#java-implementation" class="hash-link" aria-label="Java Implementation: का सीधा लिंक" title="Java Implementation: का सीधा लिंक">​</a></h3>
<div class="language-java codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-java codeBlock_bY9V thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token keyword" style="color:#00009f">import</span><span class="token plain"> </span><span class="token import namespace" style="opacity:0.7">java</span><span class="token import namespace punctuation" style="opacity:0.7;color:#393A34">.</span><span class="token import namespace" style="opacity:0.7">util</span><span class="token import namespace punctuation" style="opacity:0.7;color:#393A34">.</span><span class="token import operator" style="color:#393A34">*</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token keyword" style="color:#00009f">public</span><span class="token plain"> </span><span class="token keyword" style="color:#00009f">class</span><span class="token plain"> </span><span class="token class-name">Graph</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    </span><span class="token keyword" style="color:#00009f">private</span><span class="token plain"> </span><span class="token class-name">Map</span><span class="token generics punctuation" style="color:#393A34">&lt;</span><span class="token generics class-name">String</span><span class="token generics punctuation" style="color:#393A34">,</span><span class="token generics"> </span><span class="token generics class-name">List</span><span class="token generics punctuation" style="color:#393A34">&lt;</span><span class="token generics class-name">String</span><span class="token generics punctuation" style="color:#393A34">&gt;</span><span class="token generics punctuation" style="color:#393A34">&gt;</span><span class="token plain"> adjList</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    </span><span class="token keyword" style="color:#00009f">public</span><span class="token plain"> </span><span class="token class-name">Graph</span><span class="token punctuation" style="color:#393A34">(</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">        adjList </span><span class="token operator" style="color:#393A34">=</span><span class="token plain"> </span><span class="token keyword" style="color:#00009f">new</span><span class="token plain"> </span><span class="token class-name">HashMap</span><span class="token generics punctuation" style="color:#393A34">&lt;</span><span class="token generics punctuation" style="color:#393A34">&gt;</span><span class="token punctuation" style="color:#393A34">(</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    </span><span class="token punctuation" style="color:#393A34">}</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    </span><span class="token keyword" style="color:#00009f">public</span><span class="token plain"> </span><span class="token keyword" style="color:#00009f">void</span><span class="token plain"> </span><span class="token function" style="color:#d73a49">addEdge</span><span class="token punctuation" style="color:#393A34">(</span><span class="token class-name">String</span><span class="token plain"> source</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"> </span><span class="token class-name">String</span><span class="token plain"> destination</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">        adjList</span><span class="token punctuation" style="color:#393A34">.</span><span class="token function" style="color:#d73a49">putIfAbsent</span><span class="token punctuation" style="color:#393A34">(</span><span class="token plain">source</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"> </span><span class="token keyword" style="color:#00009f">new</span><span class="token plain"> </span><span class="token class-name">ArrayList</span><span class="token generics punctuation" style="color:#393A34">&lt;</span><span class="token generics punctuation" style="color:#393A34">&gt;</span><span class="token punctuation" style="color:#393A34">(</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">        adjList</span><span class="token punctuation" style="color:#393A34">.</span><span class="token function" style="color:#d73a49">putIfAbsent</span><span class="token punctuation" style="color:#393A34">(</span><span class="token plain">destination</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"> </span><span class="token keyword" style="color:#00009f">new</span><span class="token plain"> </span><span class="token class-name">ArrayList</span><span class="token generics punctuation" style="color:#393A34">&lt;</span><span class="token generics punctuation" style="color:#393A34">&gt;</span><span class="token punctuation" style="color:#393A34">(</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">        adjList</span><span class="token punctuation" style="color:#393A34">.</span><span class="token function" style="color:#d73a49">get</span><span class="token punctuation" style="color:#393A34">(</span><span class="token plain">source</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">.</span><span class="token function" style="color:#d73a49">add</span><span class="token punctuation" style="color:#393A34">(</span><span class="token plain">destination</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">        adjList</span><span class="token punctuation" style="color:#393A34">.</span><span class="token function" style="color:#d73a49">get</span><span class="token punctuation" style="color:#393A34">(</span><span class="token plain">destination</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">.</span><span class="token function" style="color:#d73a49">add</span><span class="token punctuation" style="color:#393A34">(</span><span class="token plain">source</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"> </span><span class="token comment" style="color:#999988;font-style:italic">// For undirected graph</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    </span><span class="token punctuation" style="color:#393A34">}</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    </span><span class="token comment" style="color:#999988;font-style:italic">// BFS Implementation</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    </span><span class="token keyword" style="color:#00009f">public</span><span class="token plain"> </span><span class="token keyword" style="color:#00009f">void</span><span class="token plain"> </span><span class="token function" style="color:#d73a49">bfs</span><span class="token punctuation" style="color:#393A34">(</span><span class="token class-name">String</span><span class="token plain"> start</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">        </span><span class="token class-name">Set</span><span class="token generics punctuation" style="color:#393A34">&lt;</span><span class="token generics class-name">String</span><span class="token generics punctuation" style="color:#393A34">&gt;</span><span class="token plain"> visited </span><span class="token operator" style="color:#393A34">=</span><span class="token plain"> </span><span class="token keyword" style="color:#00009f">new</span><span class="token plain"> </span><span class="token class-name">HashSet</span><span class="token generics punctuation" style="color:#393A34">&lt;</span><span class="token generics punctuation" style="color:#393A34">&gt;</span><span class="token punctuation" style="color:#393A34">(</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">        </span><span class="token class-name">Queue</span><span class="token generics punctuation" style="color:#393A34">&lt;</span><span class="token generics class-name">String</span><span class="token generics punctuation" style="color:#393A34">&gt;</span><span class="token plain"> queue </span><span class="token operator" style="color:#393A34">=</span><span class="token plain"> </span><span class="token keyword" style="color:#00009f">new</span><span class="token plain"> </span><span class="token class-name">LinkedList</span><span class="token generics punctuation" style="color:#393A34">&lt;</span><span class="token generics punctuation" style="color:#393A34">&gt;</span><span class="token punctuation" style="color:#393A34">(</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">        queue</span><span class="token punctuation" style="color:#393A34">.</span><span class="token function" style="color:#d73a49">add</span><span class="token punctuation" style="color:#393A34">(</span><span class="token plain">start</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">        </span><span class="token keyword" style="color:#00009f">while</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">(</span><span class="token operator" style="color:#393A34">!</span><span class="token plain">queue</span><span class="token punctuation" style="color:#393A34">.</span><span class="token function" style="color:#d73a49">isEmpty</span><span class="token punctuation" style="color:#393A34">(</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">            </span><span class="token class-name">String</span><span class="token plain"> vertex </span><span class="token operator" style="color:#393A34">=</span><span class="token plain"> queue</span><span class="token punctuation" style="color:#393A34">.</span><span class="token function" style="color:#d73a49">poll</span><span class="token punctuation" style="color:#393A34">(</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">            </span><span class="token keyword" style="color:#00009f">if</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">(</span><span class="token operator" style="color:#393A34">!</span><span class="token plain">visited</span><span class="token punctuation" style="color:#393A34">.</span><span class="token function" style="color:#d73a49">contains</span><span class="token punctuation" style="color:#393A34">(</span><span class="token plain">vertex</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">                visited</span><span class="token punctuation" style="color:#393A34">.</span><span class="token function" style="color:#d73a49">add</span><span class="token punctuation" style="color:#393A34">(</span><span class="token plain">vertex</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">                </span><span class="token class-name">System</span><span class="token punctuation" style="color:#393A34">.</span><span class="token plain">out</span><span class="token punctuation" style="color:#393A34">.</span><span class="token function" style="color:#d73a49">print</span><span class="token punctuation" style="color:#393A34">(</span><span class="token plain">vertex </span><span class="token operator" style="color:#393A34">+</span><span class="token plain"> </span><span class="token string" style="color:#e3116c">" "</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">                queue</span><span class="token punctuation" style="color:#393A34">.</span><span class="token function" style="color:#d73a49">addAll</span><span class="token punctuation" style="color:#393A34">(</span><span class="token plain">adjList</span><span class="token punctuation" style="color:#393A34">.</span><span class="token function" style="color:#d73a49">get</span><span class="token punctuation" style="color:#393A34">(</span><span class="token plain">vertex</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">            </span><span class="token punctuation" style="color:#393A34">}</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">        </span><span class="token punctuation" style="color:#393A34">}</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    </span><span class="token punctuation" style="color:#393A34">}</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    </span><span class="token comment" style="color:#999988;font-style:italic">// DFS Implementation</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    </span><span class="token keyword" style="color:#00009f">public</span><span class="token plain"> </span><span class="token keyword" style="color:#00009f">void</span><span class="token plain"> </span><span class="token function" style="color:#d73a49">dfs</span><span class="token punctuation" style="color:#393A34">(</span><span class="token class-name">String</span><span class="token plain"> start</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">        </span><span class="token class-name">Set</span><span class="token generics punctuation" style="color:#393A34">&lt;</span><span class="token generics class-name">String</span><span class="token generics punctuation" style="color:#393A34">&gt;</span><span class="token plain"> visited </span><span class="token operator" style="color:#393A34">=</span><span class="token plain"> </span><span class="token keyword" style="color:#00009f">new</span><span class="token plain"> </span><span class="token class-name">HashSet</span><span class="token generics punctuation" style="color:#393A34">&lt;</span><span class="token generics punctuation" style="color:#393A34">&gt;</span><span class="token punctuation" style="color:#393A34">(</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">        </span><span class="token function" style="color:#d73a49">dfsHelper</span><span class="token punctuation" style="color:#393A34">(</span><span class="token plain">start</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"> visited</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    </span><span class="token punctuation" style="color:#393A34">}</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    </span><span class="token keyword" style="color:#00009f">private</span><span class="token plain"> </span><span class="token keyword" style="color:#00009f">void</span><span class="token plain"> </span><span class="token function" style="color:#d73a49">dfsHelper</span><span class="token punctuation" style="color:#393A34">(</span><span class="token class-name">String</span><span class="token plain"> vertex</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"> </span><span class="token class-name">Set</span><span class="token generics punctuation" style="color:#393A34">&lt;</span><span class="token generics class-name">String</span><span class="token generics punctuation" style="color:#393A34">&gt;</span><span class="token plain"> visited</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">        </span><span class="token keyword" style="color:#00009f">if</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">(</span><span class="token operator" style="color:#393A34">!</span><span class="token plain">visited</span><span class="token punctuation" style="color:#393A34">.</span><span class="token function" style="color:#d73a49">contains</span><span class="token punctuation" style="color:#393A34">(</span><span class="token plain">vertex</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">            visited</span><span class="token punctuation" style="color:#393A34">.</span><span class="token function" style="color:#d73a49">add</span><span class="token punctuation" style="color:#393A34">(</span><span class="token plain">vertex</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">            </span><span class="token class-name">System</span><span class="token punctuation" style="color:#393A34">.</span><span class="token plain">out</span><span class="token punctuation" style="color:#393A34">.</span><span class="token function" style="color:#d73a49">print</span><span class="token punctuation" style="color:#393A34">(</span><span class="token plain">vertex </span><span class="token operator" style="color:#393A34">+</span><span class="token plain"> </span><span class="token string" style="color:#e3116c">" "</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">            </span><span class="token keyword" style="color:#00009f">for</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">(</span><span class="token class-name">String</span><span class="token plain"> neighbor </span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> adjList</span><span class="token punctuation" style="color:#393A34">.</span><span class="token function" style="color:#d73a49">get</span><span class="token punctuation" style="color:#393A34">(</span><span class="token plain">vertex</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">                </span><span class="token function" style="color:#d73a49">dfsHelper</span><span class="token punctuation" style="color:#393A34">(</span><span class="token plain">neighbor</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"> visited</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">            </span><span class="token punctuation" style="color:#393A34">}</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">        </span><span class="token punctuation" style="color:#393A34">}</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    </span><span class="token punctuation" style="color:#393A34">}</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    </span><span class="token keyword" style="color:#00009f">public</span><span class="token plain"> </span><span class="token keyword" style="color:#00009f">static</span><span class="token plain"> </span><span class="token keyword" style="color:#00009f">void</span><span class="token plain"> </span><span class="token function" style="color:#d73a49">main</span><span class="token punctuation" style="color:#393A34">(</span><span class="token class-name">String</span><span class="token punctuation" style="color:#393A34">[</span><span class="token punctuation" style="color:#393A34">]</span><span class="token plain"> args</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">        </span><span class="token class-name">Graph</span><span class="token plain"> g </span><span class="token operator" style="color:#393A34">=</span><span class="token plain"> </span><span class="token keyword" style="color:#00009f">new</span><span class="token plain"> </span><span class="token class-name">Graph</span><span class="token punctuation" style="color:#393A34">(</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">        g</span><span class="token punctuation" style="color:#393A34">.</span><span class="token function" style="color:#d73a49">addEdge</span><span class="token punctuation" style="color:#393A34">(</span><span class="token string" style="color:#e3116c">"A"</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"> </span><span class="token string" style="color:#e3116c">"B"</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">        g</span><span class="token punctuation" style="color:#393A34">.</span><span class="token function" style="color:#d73a49">addEdge</span><span class="token punctuation" style="color:#393A34">(</span><span class="token string" style="color:#e3116c">"A"</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"> </span><span class="token string" style="color:#e3116c">"C"</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">        g</span><span class="token punctuation" style="color:#393A34">.</span><span class="token function" style="color:#d73a49">addEdge</span><span class="token punctuation" style="color:#393A34">(</span><span class="token string" style="color:#e3116c">"B"</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"> </span><span class="token string" style="color:#e3116c">"D"</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">        g</span><span class="token punctuation" style="color:#393A34">.</span><span class="token function" style="color:#d73a49">addEdge</span><span class="token punctuation" style="color:#393A34">(</span><span class="token string" style="color:#e3116c">"C"</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"> </span><span class="token string" style="color:#e3116c">"D"</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">        g</span><span class="token punctuation" style="color:#393A34">.</span><span class="token function" style="color:#d73a49">bfs</span><span class="token punctuation" style="color:#393A34">(</span><span class="token string" style="color:#e3116c">"A"</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain">  </span><span class="token comment" style="color:#999988;font-style:italic">// Output: A B C D</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">        </span><span class="token class-name">System</span><span class="token punctuation" style="color:#393A34">.</span><span class="token plain">out</span><span class="token punctuation" style="color:#393A34">.</span><span class="token function" style="color:#d73a49">println</span><span class="token punctuation" style="color:#393A34">(</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">        g</span><span class="token punctuation" style="color:#393A34">.</span><span class="token function" style="color:#d73a49">dfs</span><span class="token punctuation" style="color:#393A34">(</span><span class="token string" style="color:#e3116c">"A"</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain">  </span><span class="token comment" style="color:#999988;font-style:italic">// Output: A B D C</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    </span><span class="token punctuation" style="color:#393A34">}</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token punctuation" style="color:#393A34">}</span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="क्लिपबोर्ड पर कोड कॉपी करें" title="कॉपी" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg viewBox="0 0 24 24" class="copyButtonIcon_y97N"><path fill="currentColor" d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg viewBox="0 0 24 24" class="copyButtonSuccessIcon_LjdS"><path fill="currentColor" d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div>
<h3 class="anchor anchorWithStickyNavbar_LWe7" id="real-world-applications">Real-World Applications<a href="https://ajay-dhangar.github.io/algo/hi/blog/exploring-graph-algorithms-bfs-vs-dfs#real-world-applications" class="hash-link" aria-label="Real-World Applications का सीधा लिंक" title="Real-World Applications का सीधा लिंक">​</a></h3>
<p>BFS and DFS are widely used in various domains, such as:</p>
<p>-<strong>Web Crawling</strong>: Exploring the web by visiting pages in breadth or depth.
-<strong>Social Networks</strong>: Finding friends of friends (BFS) or deep connections (DFS).
-<strong>Pathfinding</strong>: In games or robotics, to find routes or explore environments.</p>
<h3 class="anchor anchorWithStickyNavbar_LWe7" id="conclusion">Conclusion<a href="https://ajay-dhangar.github.io/algo/hi/blog/exploring-graph-algorithms-bfs-vs-dfs#conclusion" class="hash-link" aria-label="Conclusion का सीधा लिंक" title="Conclusion का सीधा लिंक">​</a></h3>
<p>Understanding BFS and DFS is crucial for solving complex problems in graph theory. Both algorithms have their strengths and are suited for different tasks. Mastering these traversal methods can significantly enhance your problem-solving skills in data structures and algorithms.</p>]]></content:encoded>
            <author>22wh1a1295@bvrithyderabad.edu.in (Grandhi Harshitha)</author>
            <category>Harshitha-Grandhi</category>
            <category>algo</category>
            <category>dsa</category>
            <category>algorithms</category>
            <category>graph-theory</category>
        </item>
        <item>
            <title><![CDATA[Getting Started With Array Data Structure]]></title>
            <link>https://ajay-dhangar.github.io/algo/hi/blog/Getting-started-with-array-data-structure</link>
            <guid>https://ajay-dhangar.github.io/algo/hi/blog/Getting-started-with-array-data-structure</guid>
            <pubDate>Thu, 07 Nov 2024 17:28:29 GMT</pubDate>
            <description><![CDATA[Array is a collection of items of the same variable type that are stored at contiguous memory locations. It is one of the most popular and simple data structures used in programming. In this article, we have decided to provide a complete guide for Arrays, which will help you to tackle any problem based on Arrays.]]></description>
            <content:encoded><![CDATA[<p>Array is a collection of items of the same variable type that are stored at contiguous memory locations. It is one of the most popular and simple data structures used in programming. In this article, we have decided to provide a complete guide for Arrays, which will help you to tackle any problem based on Arrays.</p>
<p>In this blog, we'll break down:</p>
<ul>
<li><strong>What is an Array</strong>: Array is a Linear Data Structure that Stores collection of items.</li>
<li><strong>Basic Terminologies of array</strong> like <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mo stretchy="false">(</mo><mi>A</mi><mi>r</mi><mi>r</mi><mi>a</mi><mi>y</mi><mi>I</mi><mi>n</mi><mi>d</mi><mi>e</mi><mi>x</mi><mo stretchy="false">)</mo></mrow><annotation encoding="application/x-tex">(Array Index)</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:1em;vertical-align:-0.25em"></span><span class="mopen">(</span><span class="mord mathnormal">A</span><span class="mord mathnormal" style="margin-right:0.02778em">rr</span><span class="mord mathnormal">a</span><span class="mord mathnormal" style="margin-right:0.03588em">y</span><span class="mord mathnormal" style="margin-right:0.07847em">I</span><span class="mord mathnormal">n</span><span class="mord mathnormal">d</span><span class="mord mathnormal">e</span><span class="mord mathnormal">x</span><span class="mclose">)</span></span></span></span>, <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mo stretchy="false">(</mo><mi>A</mi><mi>r</mi><mi>r</mi><mi>a</mi><mi>y</mi><mi>E</mi><mi>l</mi><mi>e</mi><mi>m</mi><mi>e</mi><mi>n</mi><mi>t</mi><mo stretchy="false">)</mo></mrow><annotation encoding="application/x-tex">(Array Element)</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:1em;vertical-align:-0.25em"></span><span class="mopen">(</span><span class="mord mathnormal">A</span><span class="mord mathnormal" style="margin-right:0.02778em">rr</span><span class="mord mathnormal">a</span><span class="mord mathnormal" style="margin-right:0.03588em">y</span><span class="mord mathnormal" style="margin-right:0.01968em">El</span><span class="mord mathnormal">e</span><span class="mord mathnormal">m</span><span class="mord mathnormal">e</span><span class="mord mathnormal">n</span><span class="mord mathnormal">t</span><span class="mclose">)</span></span></span></span>, and <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>O</mi><mo stretchy="false">(</mo><mi>A</mi><mi>r</mi><mi>r</mi><mi>a</mi><mi>y</mi><mi>L</mi><mi>e</mi><mi>n</mi><mi>g</mi><mi>t</mi><mi>h</mi><mo stretchy="false">)</mo></mrow><annotation encoding="application/x-tex">O(Array Length)</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:1em;vertical-align:-0.25em"></span><span class="mord mathnormal" style="margin-right:0.02778em">O</span><span class="mopen">(</span><span class="mord mathnormal">A</span><span class="mord mathnormal" style="margin-right:0.02778em">rr</span><span class="mord mathnormal">a</span><span class="mord mathnormal" style="margin-right:0.03588em">y</span><span class="mord mathnormal">L</span><span class="mord mathnormal">e</span><span class="mord mathnormal">n</span><span class="mord mathnormal" style="margin-right:0.03588em">g</span><span class="mord mathnormal">t</span><span class="mord mathnormal">h</span><span class="mclose">)</span></span></span></span>.</li>
<li><strong>Declaration and Intialization of Array</strong> and its time and Space Complexity.</li>
<li><strong>Operation on Array</strong></li>
<li><strong>Advantages and Disadvantages of Array</strong></li>
</ul>
<hr>
<h2 class="anchor anchorWithStickyNavbar_LWe7" id="what-is-array">What is Array?<a href="https://ajay-dhangar.github.io/algo/hi/blog/Getting-started-with-array-data-structure#what-is-array" class="hash-link" aria-label="What is Array? का सीधा लिंक" title="What is Array? का सीधा लिंक">​</a></h2>
<p>Array is a linear data structure that stores a collection of items of same data type in contiguous memory locations. Each item in an array is indexed starting with 0. We can directly access an array element by using its index value.</p>
<h3 class="anchor anchorWithStickyNavbar_LWe7" id="basic-terminologies-of-array">Basic Terminologies of Array:<a href="https://ajay-dhangar.github.io/algo/hi/blog/Getting-started-with-array-data-structure#basic-terminologies-of-array" class="hash-link" aria-label="Basic Terminologies of Array: का सीधा लिंक" title="Basic Terminologies of Array: का सीधा लिंक">​</a></h3>
<ol>
<li>
<p><strong><span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mo stretchy="false">(</mo><mi>A</mi><mi>r</mi><mi>r</mi><mi>a</mi><mi>y</mi><mi>I</mi><mi>n</mi><mi>d</mi><mi>e</mi><mi>x</mi><mo stretchy="false">)</mo></mrow><annotation encoding="application/x-tex">(Array Index)</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:1em;vertical-align:-0.25em"></span><span class="mopen">(</span><span class="mord mathnormal">A</span><span class="mord mathnormal" style="margin-right:0.02778em">rr</span><span class="mord mathnormal">a</span><span class="mord mathnormal" style="margin-right:0.03588em">y</span><span class="mord mathnormal" style="margin-right:0.07847em">I</span><span class="mord mathnormal">n</span><span class="mord mathnormal">d</span><span class="mord mathnormal">e</span><span class="mord mathnormal">x</span><span class="mclose">)</span></span></span></span> :</strong></p>
<ul>
<li>In an array, elements are identified by their indexes. Array index starts from 0.</li>
</ul>
</li>
<li>
<p><strong><span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mo stretchy="false">(</mo><mi>A</mi><mi>r</mi><mi>r</mi><mi>a</mi><mi>y</mi><mi>E</mi><mi>l</mi><mi>e</mi><mi>m</mi><mi>e</mi><mi>n</mi><mi>t</mi><mo stretchy="false">)</mo></mrow><annotation encoding="application/x-tex">(Array Element)</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:1em;vertical-align:-0.25em"></span><span class="mopen">(</span><span class="mord mathnormal">A</span><span class="mord mathnormal" style="margin-right:0.02778em">rr</span><span class="mord mathnormal">a</span><span class="mord mathnormal" style="margin-right:0.03588em">y</span><span class="mord mathnormal" style="margin-right:0.01968em">El</span><span class="mord mathnormal">e</span><span class="mord mathnormal">m</span><span class="mord mathnormal">e</span><span class="mord mathnormal">n</span><span class="mord mathnormal">t</span><span class="mclose">)</span></span></span></span> :</strong></p>
<ul>
<li>Elements are items stored in an array and can be accessed by their index.</li>
</ul>
</li>
<li>
<p><strong><span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mo stretchy="false">(</mo><mi>A</mi><mi>r</mi><mi>r</mi><mi>a</mi><mi>y</mi><mi>L</mi><mi>e</mi><mi>n</mi><mi>g</mi><mi>t</mi><mi>h</mi><mo stretchy="false">)</mo></mrow><annotation encoding="application/x-tex">(Array Length)</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:1em;vertical-align:-0.25em"></span><span class="mopen">(</span><span class="mord mathnormal">A</span><span class="mord mathnormal" style="margin-right:0.02778em">rr</span><span class="mord mathnormal">a</span><span class="mord mathnormal" style="margin-right:0.03588em">y</span><span class="mord mathnormal">L</span><span class="mord mathnormal">e</span><span class="mord mathnormal">n</span><span class="mord mathnormal" style="margin-right:0.03588em">g</span><span class="mord mathnormal">t</span><span class="mord mathnormal">h</span><span class="mclose">)</span></span></span></span> :</strong></p>
<ul>
<li>The length of an array is determined by the number of elements it can contain.</li>
</ul>
</li>
</ol>
<h3 class="anchor anchorWithStickyNavbar_LWe7" id="declaration-and-intialization-of-array">Declaration and Intialization of Array:<a href="https://ajay-dhangar.github.io/algo/hi/blog/Getting-started-with-array-data-structure#declaration-and-intialization-of-array" class="hash-link" aria-label="Declaration and Intialization of Array: का सीधा लिंक" title="Declaration and Intialization of Array: का सीधा लिंक">​</a></h3>
<p>Arrays can be declared in various ways in different languages. For better illustration, below are some language-specific array declarations:</p>
<div class="language-C++ language-c++ codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockTitle_Ktv7">main.cpp</div><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-c++ codeBlock_bY9V thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token plain">// This array will store integer type element</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">int arr[5];      </span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">// This array will store char type element</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">char arr[10];   </span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">// This array will store float type element</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">float arr[20];  </span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="क्लिपबो�र्ड पर कोड कॉपी करें" title="कॉपी" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg viewBox="0 0 24 24" class="copyButtonIcon_y97N"><path fill="currentColor" d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg viewBox="0 0 24 24" class="copyButtonSuccessIcon_LjdS"><path fill="currentColor" d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div>
<p>Arrays can be initialized in different ways in different languages. Below are some language-specific array initializations:</p>
<div class="language-C++ language-c++ codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockTitle_Ktv7">main.cpp</div><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-c++ codeBlock_bY9V thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token plain">int arr[] = { 1, 2, 3, 4, 5 };</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">char arr[5] = { 'a', 'b', 'c', 'd', 'e' };</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">float arr[10] = { 1.4, 2.0, 24, 5.0, 0.0 };</span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="क्लिपबोर्ड पर कोड कॉपी करें" title="कॉपी" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg viewBox="0 0 24 24" class="copyButtonIcon_y97N"><path fill="currentColor" d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg viewBox="0 0 24 24" class="copyButtonSuccessIcon_LjdS"><path fill="currentColor" d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div>
<hr>
<h2 class="anchor anchorWithStickyNavbar_LWe7" id="operation-on-array">Operation on Array<a href="https://ajay-dhangar.github.io/algo/hi/blog/Getting-started-with-array-data-structure#operation-on-array" class="hash-link" aria-label="Operation on Array का सीधा लिंक" title="Operation on Array का सीधा लिंक">​</a></h2>
<ol>
<li><strong>Array Traversal</strong></li>
</ol>
<p>Array traversal involves visiting all the elements of the array once. Below is the implementation of Array traversal in C++.</p>
<div class="language-C++ language-c++ codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockTitle_Ktv7">main.cpp</div><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-c++ codeBlock_bY9V thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token plain">int arr[] = { 1, 2, 3, 4, 5 };</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">int len = sizeof(arr) / sizeof(arr[0]);</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">// Traversing over arr[]</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">for (int i = 0; i &lt; len; i++) {</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    cout &lt;&lt; arr[i] &lt;&lt; " ";</span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="क्लिपबोर्ड पर कोड कॉपी करें" title="कॉपी" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg viewBox="0 0 24 24" class="copyButtonIcon_y97N"><path fill="currentColor" d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg viewBox="0 0 24 24" class="copyButtonSuccessIcon_LjdS"><path fill="currentColor" d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div>
<ol start="2">
<li><strong>Insertion in Array</strong></li>
</ol>
<p>We can insert one or multiple elements at any position in the array. Below is the implementation of Insertion in Array in C++.</p>
<div class="language-C++ language-c++ codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockTitle_Ktv7">main.cpp</div><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-c++ codeBlock_bY9V thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token plain">// Function to insert element</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">// at a specific position</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">void insertElement(int arr[], int n, int x, int pos)</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">{</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    // shift elements to the right</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    // which are on the right side of pos</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    for (int i = n - 1; i &gt;= pos; i--)</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">        arr[i + 1] = arr[i];</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"> </span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    arr[pos] = x;</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">}</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="क्लिपबोर्ड पर कोड कॉपी करें" title="कॉपी" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg viewBox="0 0 24 24" class="copyButtonIcon_y97N"><path fill="currentColor" d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg viewBox="0 0 24 24" class="copyButtonSuccessIcon_LjdS"><path fill="currentColor" d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div>
<ol start="2">
<li><strong>Deletion in Array</strong></li>
</ol>
<p>We can delete an element at any index in an array. Below is the implementation of Deletion of element in an array in different C++.</p>
<div class="language-C++ language-c++ codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockTitle_Ktv7">main.cpp</div><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-c++ codeBlock_bY9V thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token plain">// Function to insert element</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">// at a specific position</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">// To search a key to be deleted</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">int findElement(int arr[], int n, int key);</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">// Function to delete an element</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">int deleteElement(int arr[], int n, int key)</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">{</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    // Find position of element to be deleted</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    int pos = findElement(arr, n, key);</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    if (pos == -1) {</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">        cout &lt;&lt; "Element not found";</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">        return n;</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    }</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    // Deleting element</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    int i;</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    for (i = pos; i &lt; n - 1; i++)</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">        arr[i] = arr[i + 1];</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    return n - 1;</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">}</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">// Function to implement search operation</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">int findElement(int arr[], int n, int key)</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">{</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    int i;</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    for (i = 0; i &lt; n; i++)</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">        if (arr[i] == key)</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">            return i;</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    // Return -1 if key is not found</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    return -1;</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">}</span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="क्लिपबोर्ड पर कोड कॉपी करें" title="कॉपी" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg viewBox="0 0 24 24" class="copyButtonIcon_y97N"><path fill="currentColor" d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg viewBox="0 0 24 24" class="copyButtonSuccessIcon_LjdS"><path fill="currentColor" d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div>
<ol start="2">
<li><strong>Searching in Array</strong></li>
</ol>
<p>We can traverse over an array and search for an element. Below is the implementation of Deletion of element in an arrayin C++.</p>
<div class="language-C++ language-c++ codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockTitle_Ktv7">main.cpp</div><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-c++ codeBlock_bY9V thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token plain">// Function to implement search operation</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">int findElement(int arr[], int n, int key)</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">{</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    int i;</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    for (i = 0; i &lt; n; i++)</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">        if (arr[i] == key)</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">            return i;</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"> </span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    // If the key is not found</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    return -1;</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">}</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="क्लिपबोर्ड पर कोड कॉपी करें" title="कॉपी" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg viewBox="0 0 24 24" class="copyButtonIcon_y97N"><path fill="currentColor" d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg viewBox="0 0 24 24" class="copyButtonSuccessIcon_LjdS"><path fill="currentColor" d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div>
<h3 class="anchor anchorWithStickyNavbar_LWe7" id="advantages-of--array">Advantages of  Array<a href="https://ajay-dhangar.github.io/algo/hi/blog/Getting-started-with-array-data-structure#advantages-of--array" class="hash-link" aria-label="Advantages of  Array का सीधा लिंक" title="Advantages of  Array का सीधा लिंक">​</a></h3>
<ul>
<li>
<p>Arrays allow random access to elements. This makes accessing elements by position faster.</p>
</li>
<li>
<p>Arrays have better cache locality which makes a pretty big difference in performance.</p>
</li>
<li>
<p>Arrays represent multiple data items of the same type using a single name.</p>
</li>
<li>
<p>Arrays are used to implement the other data structures like linked lists, stacks, queues, trees, graphs, etc.</p>
</li>
</ul>
<h3 class="anchor anchorWithStickyNavbar_LWe7" id="disadvantages-of-array">Disadvantages of Array:<a href="https://ajay-dhangar.github.io/algo/hi/blog/Getting-started-with-array-data-structure#disadvantages-of-array" class="hash-link" aria-label="Disadvantages of Array: का सीधा लिंक" title="Disadvantages of Array: का सीधा लिंक">​</a></h3>
<ul>
<li>As arrays have a fixed size, once the memory is allocated to them, it cannot be increased or decreased, making it impossible to store extra data if required. An array of fixed size is referred to as a static array.</li>
<li>Allocating less memory than required to an array leads to loss of data.</li>
<li>An array is homogeneous in nature so, a single array cannot store values of different data types.</li>
</ul>
<hr>
<h2 class="anchor anchorWithStickyNavbar_LWe7" id="final-thoughts">Final Thoughts<a href="https://ajay-dhangar.github.io/algo/hi/blog/Getting-started-with-array-data-structure#final-thoughts" class="hash-link" aria-label="Final Thoughts का सीधा लिंक" title="Final Thoughts का सीधा लिंक">​</a></h2>
<p>We concluded that arrays are a simple method of accessing elements of the same type by grouping them and we can find the elements efficiently by their indexes and can perform different operations using them. Thus, they are more efficient when it comes to memory allocation and should be used in all modern programming languages.</p>]]></content:encoded>
            <author>vrishi7654@gmail.com (Rishi Verma)</author>
            <category>Rishi-Verma</category>
            <category>algo</category>
            <category>dsa</category>
            <category>algorithms</category>
            <category>array</category>
            <category>c++</category>
            <category>java</category>
            <category>python</category>
        </item>
        <item>
            <title><![CDATA[Kadane's Algorithm Explained: Efficient Maximum Subarray Sum]]></title>
            <link>https://ajay-dhangar.github.io/algo/hi/blog/kadanes-algorithm</link>
            <guid>https://ajay-dhangar.github.io/algo/hi/blog/kadanes-algorithm</guid>
            <pubDate>Thu, 07 Nov 2024 17:28:29 GMT</pubDate>
            <description><![CDATA[Kadane's Algorithm is a popular and efficient approach to solving the maximum subarray sum problem. It uses dynamic programming to find the contiguous subarray with the largest sum in linear time. This blog post will provide an in-depth look at how Kadane's Algorithm works, why it's useful, and how you can implement it in various programming languages.]]></description>
            <content:encoded><![CDATA[<p>Kadane's Algorithm is a popular and efficient approach to solving the maximum subarray sum problem. It uses dynamic programming to find the contiguous subarray with the largest sum in linear time. This blog post will provide an in-depth look at how Kadane's Algorithm works, why it's useful, and how you can implement it in various programming languages.</p>
<p>In this blog, we'll explore:</p>
<ul>
<li><strong>Understanding the Maximum Subarray Problem</strong>: What is the problem, and why is it important?</li>
<li><strong>Kadane's Algorithm</strong>: A step-by-step explanation of how it works.</li>
<li><strong>Implementation</strong>: Code examples in Java and Python.</li>
<li><strong>Real-World Applications</strong>: How this algorithm is useful in real-life scenarios.</li>
</ul>
<hr>
<h2 class="anchor anchorWithStickyNavbar_LWe7" id="the-maximum-subarray-problem">The Maximum Subarray Problem<a href="https://ajay-dhangar.github.io/algo/hi/blog/kadanes-algorithm#the-maximum-subarray-problem" class="hash-link" aria-label="The Maximum Subarray Problem का सीधा लिंक" title="The Maximum Subarray Problem का सीधा लिंक">​</a></h2>
<p>The maximum subarray problem is about finding the contiguous subarray within a one-dimensional numeric array that has the largest sum. Given an array of both positive and negative numbers, the goal is to find the subarray with the maximum possible sum.</p>
<h3 class="anchor anchorWithStickyNavbar_LWe7" id="problem-example">Problem Example:<a href="https://ajay-dhangar.github.io/algo/hi/blog/kadanes-algorithm#problem-example" class="hash-link" aria-label="Problem Example: का सीधा लिंक" title="Problem Example: का सीधा लिंक">​</a></h3>
<div class="language-python codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-python codeBlock_bY9V thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token plain">Input</span><span class="token punctuation" style="color:#393A34">:</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">[</span><span class="token operator" style="color:#393A34">-</span><span class="token number" style="color:#36acaa">2</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"> </span><span class="token number" style="color:#36acaa">1</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"> </span><span class="token operator" style="color:#393A34">-</span><span class="token number" style="color:#36acaa">3</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"> </span><span class="token number" style="color:#36acaa">4</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"> </span><span class="token operator" style="color:#393A34">-</span><span class="token number" style="color:#36acaa">1</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"> </span><span class="token number" style="color:#36acaa">2</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"> </span><span class="token number" style="color:#36acaa">1</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"> </span><span class="token operator" style="color:#393A34">-</span><span class="token number" style="color:#36acaa">5</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"> </span><span class="token number" style="color:#36acaa">4</span><span class="token punctuation" style="color:#393A34">]</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">Output</span><span class="token punctuation" style="color:#393A34">:</span><span class="token plain"> </span><span class="token number" style="color:#36acaa">6</span><span class="token plain">  </span><span class="token comment" style="color:#999988;font-style:italic"># Subarray: [4, -1, 2, 1]</span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="क्लिपबोर्ड पर कोड कॉपी करें" title="कॉपी" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg viewBox="0 0 24 24" class="copyButtonIcon_y97N"><path fill="currentColor" d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg viewBox="0 0 24 24" class="copyButtonSuccessIcon_LjdS"><path fill="currentColor" d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div>
<h2 class="anchor anchorWithStickyNavbar_LWe7" id="understanding-kadanes-algorithm">Understanding Kadane's Algorithm<a href="https://ajay-dhangar.github.io/algo/hi/blog/kadanes-algorithm#understanding-kadanes-algorithm" class="hash-link" aria-label="Understanding Kadane's Algorithm का सीधा लिंक" title="Understanding Kadane's Algorithm का सीधा लिंक">​</a></h2>
<p>The brilliance of Kadane's Algorithm lies in its simplicity. It processes the array in a single pass, maintaining two values: the current sum of the subarray (<code>currentSum</code>) and the maximum sum found so far (<code>maxSum</code>).</p>
<h3 class="anchor anchorWithStickyNavbar_LWe7" id="the-algorithm">The Algorithm<a href="https://ajay-dhangar.github.io/algo/hi/blog/kadanes-algorithm#the-algorithm" class="hash-link" aria-label="The Algorithm का सीधा लिंक" title="The Algorithm का सीधा लिंक">​</a></h3>
<ol>
<li><strong>Initialization</strong>: Start with the first element as both <code>currentSum</code> and <code>maxSum</code>.</li>
<li><strong>Iterate Through the Array</strong>: For each element, decide whether to add it to the current subarray or start a new subarray.</li>
<li><strong>Update Maximum</strong>: At each step, check if the current subarray sum is the highest so far.</li>
<li><strong>Result</strong>: After processing the entire array, the <code>maxSum</code> will contain the maximum subarray sum.</li>
</ol>
<h3 class="anchor anchorWithStickyNavbar_LWe7" id="step-by-step-breakdown">Step-by-Step Breakdown:<a href="https://ajay-dhangar.github.io/algo/hi/blog/kadanes-algorithm#step-by-step-breakdown" class="hash-link" aria-label="Step-by-Step Breakdown: का सीधा लिंक" title="Step-by-Step Breakdown: का सीधा लिंक">​</a></h3>
<ol>
<li>
<p>Initialize:</p>
<ul>
<li><code>currentSum = arr[0]</code></li>
<li><code>maxSum = arr[0]</code></li>
</ul>
</li>
<li>
<p>Loop through the array starting from index 1:</p>
<ul>
<li><code>currentSum = max(arr[i], currentSum + arr[i])</code></li>
<li><code>maxSum = max(maxSum, currentSum)</code></li>
</ul>
</li>
</ol>
<h3 class="anchor anchorWithStickyNavbar_LWe7" id="time-complexity">Time Complexity<a href="https://ajay-dhangar.github.io/algo/hi/blog/kadanes-algorithm#time-complexity" class="hash-link" aria-label="Time Complexity का सीधा लिंक" title="Time Complexity का सीधा लिंक">​</a></h3>
<p>Kadane’s Algorithm runs in O(n) time, where <code>n</code> is the number of elements in the array. This makes it highly efficient compared to brute force methods, which would require O(n²) time.</p>
<h2 class="anchor anchorWithStickyNavbar_LWe7" id="code-implementation">Code Implementation<a href="https://ajay-dhangar.github.io/algo/hi/blog/kadanes-algorithm#code-implementation" class="hash-link" aria-label="Code Implementation का सीधा लिंक" title="Code Implementation का सीधा लिंक">​</a></h2>
<h3 class="anchor anchorWithStickyNavbar_LWe7" id="python-implementation">Python Implementation:<a href="https://ajay-dhangar.github.io/algo/hi/blog/kadanes-algorithm#python-implementation" class="hash-link" aria-label="Python Implementation: का सीधा लिंक" title="Python Implementation: का सीधा लिंक">​</a></h3>
<div class="language-python codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-python codeBlock_bY9V thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token keyword" style="color:#00009f">def</span><span class="token plain"> </span><span class="token function" style="color:#d73a49">kadane</span><span class="token punctuation" style="color:#393A34">(</span><span class="token plain">arr</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">:</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    currentSum </span><span class="token operator" style="color:#393A34">=</span><span class="token plain"> maxSum </span><span class="token operator" style="color:#393A34">=</span><span class="token plain"> arr</span><span class="token punctuation" style="color:#393A34">[</span><span class="token number" style="color:#36acaa">0</span><span class="token punctuation" style="color:#393A34">]</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    </span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    </span><span class="token keyword" style="color:#00009f">for</span><span class="token plain"> i </span><span class="token keyword" style="color:#00009f">in</span><span class="token plain"> </span><span class="token builtin">range</span><span class="token punctuation" style="color:#393A34">(</span><span class="token number" style="color:#36acaa">1</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"> </span><span class="token builtin">len</span><span class="token punctuation" style="color:#393A34">(</span><span class="token plain">arr</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">:</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">        currentSum </span><span class="token operator" style="color:#393A34">=</span><span class="token plain"> </span><span class="token builtin">max</span><span class="token punctuation" style="color:#393A34">(</span><span class="token plain">arr</span><span class="token punctuation" style="color:#393A34">[</span><span class="token plain">i</span><span class="token punctuation" style="color:#393A34">]</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"> currentSum </span><span class="token operator" style="color:#393A34">+</span><span class="token plain"> arr</span><span class="token punctuation" style="color:#393A34">[</span><span class="token plain">i</span><span class="token punctuation" style="color:#393A34">]</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">        maxSum </span><span class="token operator" style="color:#393A34">=</span><span class="token plain"> </span><span class="token builtin">max</span><span class="token punctuation" style="color:#393A34">(</span><span class="token plain">maxSum</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"> currentSum</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    </span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    </span><span class="token keyword" style="color:#00009f">return</span><span class="token plain"> maxSum</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token comment" style="color:#999988;font-style:italic"># Example usage</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">arr </span><span class="token operator" style="color:#393A34">=</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">[</span><span class="token operator" style="color:#393A34">-</span><span class="token number" style="color:#36acaa">2</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"> </span><span class="token number" style="color:#36acaa">1</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"> </span><span class="token operator" style="color:#393A34">-</span><span class="token number" style="color:#36acaa">3</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"> </span><span class="token number" style="color:#36acaa">4</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"> </span><span class="token operator" style="color:#393A34">-</span><span class="token number" style="color:#36acaa">1</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"> </span><span class="token number" style="color:#36acaa">2</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"> </span><span class="token number" style="color:#36acaa">1</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"> </span><span class="token operator" style="color:#393A34">-</span><span class="token number" style="color:#36acaa">5</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"> </span><span class="token number" style="color:#36acaa">4</span><span class="token punctuation" style="color:#393A34">]</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token keyword" style="color:#00009f">print</span><span class="token punctuation" style="color:#393A34">(</span><span class="token plain">kadane</span><span class="token punctuation" style="color:#393A34">(</span><span class="token plain">arr</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain">  </span><span class="token comment" style="color:#999988;font-style:italic"># Output: 6</span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="क्लिपबोर्ड पर कोड कॉपी करें" title="कॉपी" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg viewBox="0 0 24 24" class="copyButtonIcon_y97N"><path fill="currentColor" d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg viewBox="0 0 24 24" class="copyButtonSuccessIcon_LjdS"><path fill="currentColor" d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div>
<h3 class="anchor anchorWithStickyNavbar_LWe7" id="java-implementation">Java Implementation:<a href="https://ajay-dhangar.github.io/algo/hi/blog/kadanes-algorithm#java-implementation" class="hash-link" aria-label="Java Implementation: का सीधा लिंक" title="Java Implementation: का सीधा लिंक">​</a></h3>
<div class="language-java codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-java codeBlock_bY9V thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token keyword" style="color:#00009f">public</span><span class="token plain"> </span><span class="token keyword" style="color:#00009f">class</span><span class="token plain"> </span><span class="token class-name">Kadane</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    </span><span class="token keyword" style="color:#00009f">public</span><span class="token plain"> </span><span class="token keyword" style="color:#00009f">static</span><span class="token plain"> </span><span class="token keyword" style="color:#00009f">int</span><span class="token plain"> </span><span class="token function" style="color:#d73a49">kadane</span><span class="token punctuation" style="color:#393A34">(</span><span class="token keyword" style="color:#00009f">int</span><span class="token punctuation" style="color:#393A34">[</span><span class="token punctuation" style="color:#393A34">]</span><span class="token plain"> arr</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">        </span><span class="token keyword" style="color:#00009f">int</span><span class="token plain"> currentSum </span><span class="token operator" style="color:#393A34">=</span><span class="token plain"> arr</span><span class="token punctuation" style="color:#393A34">[</span><span class="token number" style="color:#36acaa">0</span><span class="token punctuation" style="color:#393A34">]</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">        </span><span class="token keyword" style="color:#00009f">int</span><span class="token plain"> maxSum </span><span class="token operator" style="color:#393A34">=</span><span class="token plain"> arr</span><span class="token punctuation" style="color:#393A34">[</span><span class="token number" style="color:#36acaa">0</span><span class="token punctuation" style="color:#393A34">]</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">        </span><span class="token keyword" style="color:#00009f">for</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">(</span><span class="token keyword" style="color:#00009f">int</span><span class="token plain"> i </span><span class="token operator" style="color:#393A34">=</span><span class="token plain"> </span><span class="token number" style="color:#36acaa">1</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"> i </span><span class="token operator" style="color:#393A34">&lt;</span><span class="token plain"> arr</span><span class="token punctuation" style="color:#393A34">.</span><span class="token plain">length</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"> i</span><span class="token operator" style="color:#393A34">++</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">            currentSum </span><span class="token operator" style="color:#393A34">=</span><span class="token plain"> </span><span class="token class-name">Math</span><span class="token punctuation" style="color:#393A34">.</span><span class="token function" style="color:#d73a49">max</span><span class="token punctuation" style="color:#393A34">(</span><span class="token plain">arr</span><span class="token punctuation" style="color:#393A34">[</span><span class="token plain">i</span><span class="token punctuation" style="color:#393A34">]</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"> currentSum </span><span class="token operator" style="color:#393A34">+</span><span class="token plain"> arr</span><span class="token punctuation" style="color:#393A34">[</span><span class="token plain">i</span><span class="token punctuation" style="color:#393A34">]</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">            maxSum </span><span class="token operator" style="color:#393A34">=</span><span class="token plain"> </span><span class="token class-name">Math</span><span class="token punctuation" style="color:#393A34">.</span><span class="token function" style="color:#d73a49">max</span><span class="token punctuation" style="color:#393A34">(</span><span class="token plain">maxSum</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"> currentSum</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">        </span><span class="token punctuation" style="color:#393A34">}</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">        </span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">        </span><span class="token keyword" style="color:#00009f">return</span><span class="token plain"> maxSum</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    </span><span class="token punctuation" style="color:#393A34">}</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    </span><span class="token keyword" style="color:#00009f">public</span><span class="token plain"> </span><span class="token keyword" style="color:#00009f">static</span><span class="token plain"> </span><span class="token keyword" style="color:#00009f">void</span><span class="token plain"> </span><span class="token function" style="color:#d73a49">main</span><span class="token punctuation" style="color:#393A34">(</span><span class="token class-name">String</span><span class="token punctuation" style="color:#393A34">[</span><span class="token punctuation" style="color:#393A34">]</span><span class="token plain"> args</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">        </span><span class="token keyword" style="color:#00009f">int</span><span class="token punctuation" style="color:#393A34">[</span><span class="token punctuation" style="color:#393A34">]</span><span class="token plain"> arr </span><span class="token operator" style="color:#393A34">=</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">{</span><span class="token operator" style="color:#393A34">-</span><span class="token number" style="color:#36acaa">2</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"> </span><span class="token number" style="color:#36acaa">1</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"> </span><span class="token operator" style="color:#393A34">-</span><span class="token number" style="color:#36acaa">3</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"> </span><span class="token number" style="color:#36acaa">4</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"> </span><span class="token operator" style="color:#393A34">-</span><span class="token number" style="color:#36acaa">1</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"> </span><span class="token number" style="color:#36acaa">2</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"> </span><span class="token number" style="color:#36acaa">1</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"> </span><span class="token operator" style="color:#393A34">-</span><span class="token number" style="color:#36acaa">5</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"> </span><span class="token number" style="color:#36acaa">4</span><span class="token punctuation" style="color:#393A34">}</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">        </span><span class="token class-name">System</span><span class="token punctuation" style="color:#393A34">.</span><span class="token plain">out</span><span class="token punctuation" style="color:#393A34">.</span><span class="token function" style="color:#d73a49">println</span><span class="token punctuation" style="color:#393A34">(</span><span class="token function" style="color:#d73a49">kadane</span><span class="token punctuation" style="color:#393A34">(</span><span class="token plain">arr</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain">  </span><span class="token comment" style="color:#999988;font-style:italic">// Output: 6</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    </span><span class="token punctuation" style="color:#393A34">}</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token punctuation" style="color:#393A34">}</span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="क्लिपबोर्ड पर कोड कॉपी करें" title="कॉपी" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg viewBox="0 0 24 24" class="copyButtonIcon_y97N"><path fill="currentColor" d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg viewBox="0 0 24 24" class="copyButtonSuccessIcon_LjdS"><path fill="currentColor" d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div>
<h2 class="anchor anchorWithStickyNavbar_LWe7" id="real-world-applications">Real-World Applications<a href="https://ajay-dhangar.github.io/algo/hi/blog/kadanes-algorithm#real-world-applications" class="hash-link" aria-label="Real-World Applications का सीधा लिंक" title="Real-World Applications का सीधा लिंक">​</a></h2>
<p>Kadane's Algorithm is useful in various practical scenarios such as:</p>
<ul>
<li><strong>Stock Price Analysis</strong>: Finding the best time to buy and sell stocks to maximize profit over a series of days.</li>
<li><strong>Signal Processing</strong>: Identifying the largest continuous segment of high values in a signal or data stream.</li>
<li><strong>Game Development</strong>: Optimizing score tracking in continuous gameplay segments.</li>
</ul>
<h3 class="anchor anchorWithStickyNavbar_LWe7" id="conclusion">Conclusion<a href="https://ajay-dhangar.github.io/algo/hi/blog/kadanes-algorithm#conclusion" class="hash-link" aria-label="Conclusion का सीधा लिंक" title="Conclusion का सीधा लिंक">​</a></h3>
<p>Kadane’s Algorithm is a powerful tool for solving the maximum subarray problem efficiently. Its linear time complexity makes it a go-to solution in competitive programming and technical interviews. Understanding the algorithm, as well as its potential applications, can greatly enhance your problem-solving skills in dynamic programming.</p>]]></content:encoded>
            <author>lkbijarniya2@gmail.com (Lokesh Bijarniya)</author>
            <category>lokesh-bijarniya</category>
            <category>algo</category>
            <category>dsa</category>
            <category>algorithms</category>
            <category>dynamic-programming</category>
        </item>
        <item>
            <title><![CDATA[Recursion vs. Iteration: A Comparative Analysis]]></title>
            <link>https://ajay-dhangar.github.io/algo/hi/blog/recursion-vs-iteration</link>
            <guid>https://ajay-dhangar.github.io/algo/hi/blog/recursion-vs-iteration</guid>
            <pubDate>Thu, 07 Nov 2024 17:28:29 GMT</pubDate>
            <description><![CDATA[When designing algorithms, a common question arises: should you use recursion or iteration? Each approach has its strengths and weaknesses, and understanding these can help you choose the right one for your problem.]]></description>
            <content:encoded><![CDATA[<p>When designing algorithms, a common question arises: should you use recursion or iteration? Each approach has its strengths and weaknesses, and understanding these can help you choose the right one for your problem.</p>
<p>In this blog, we'll compare:</p>
<ul>
<li><strong>Performance</strong>: How recursion and iteration differ in execution time and space.</li>
<li><strong>Readability</strong>: The clarity of code in recursive vs. iterative solutions.</li>
</ul>
<hr>
<h2 class="anchor anchorWithStickyNavbar_LWe7" id="performance">Performance<a href="https://ajay-dhangar.github.io/algo/hi/blog/recursion-vs-iteration#performance" class="hash-link" aria-label="Performance का सीधा लिंक" title="Performance का सीधा लिंक">​</a></h2>
<h3 class="anchor anchorWithStickyNavbar_LWe7" id="recursion">Recursion<a href="https://ajay-dhangar.github.io/algo/hi/blog/recursion-vs-iteration#recursion" class="hash-link" aria-label="Recursion का सीधा लिंक" title="Recursion का सीधा लिंक">​</a></h3>
<ul>
<li><strong>Pros</strong>: Easier to implement for problems that naturally fit a recursive structure, like tree traversals.</li>
<li><strong>Cons</strong>: May lead to stack overflow errors due to deep recursion. Higher space complexity due to function call stack.</li>
</ul>
<h4 class="anchor anchorWithStickyNavbar_LWe7" id="example-recursive-fibonacci">Example: Recursive Fibonacci<a href="https://ajay-dhangar.github.io/algo/hi/blog/recursion-vs-iteration#example-recursive-fibonacci" class="hash-link" aria-label="Example: Recursive Fibonacci का सीधा लिंक" title="Example: Recursive Fibonacci का सीधा लिंक">​</a></h4>
<div class="language-javascript codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-javascript codeBlock_bY9V thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token keyword" style="color:#00009f">function</span><span class="token plain"> </span><span class="token function" style="color:#d73a49">fibonacci</span><span class="token punctuation" style="color:#393A34">(</span><span class="token parameter">n</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token keyword control-flow" style="color:#00009f">if</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">(</span><span class="token plain">n </span><span class="token operator" style="color:#393A34">&lt;=</span><span class="token plain"> </span><span class="token number" style="color:#36acaa">1</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"> </span><span class="token keyword control-flow" style="color:#00009f">return</span><span class="token plain"> n</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token keyword control-flow" style="color:#00009f">return</span><span class="token plain"> </span><span class="token function" style="color:#d73a49">fibonacci</span><span class="token punctuation" style="color:#393A34">(</span><span class="token plain">n </span><span class="token operator" style="color:#393A34">-</span><span class="token plain"> </span><span class="token number" style="color:#36acaa">1</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"> </span><span class="token operator" style="color:#393A34">+</span><span class="token plain"> </span><span class="token function" style="color:#d73a49">fibonacci</span><span class="token punctuation" style="color:#393A34">(</span><span class="token plain">n </span><span class="token operator" style="color:#393A34">-</span><span class="token plain"> </span><span class="token number" style="color:#36acaa">2</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token punctuation" style="color:#393A34">}</span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="क्लिपबोर्ड पर कोड कॉपी करें" title="कॉपी" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg viewBox="0 0 24 24" class="copyButtonIcon_y97N"><path fill="currentColor" d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg viewBox="0 0 24 24" class="copyButtonSuccessIcon_LjdS"><path fill="currentColor" d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div>
<h2 class="anchor anchorWithStickyNavbar_LWe7" id="iteration">Iteration<a href="https://ajay-dhangar.github.io/algo/hi/blog/recursion-vs-iteration#iteration" class="hash-link" aria-label="Iteration का सीधा लिंक" title="Iteration का सीधा लिंक">​</a></h2>
<p>Pros: More memory-efficient as it avoids the overhead of recursive function calls. Generally faster for most problems.
Cons: Can be less intuitive for problems that have a natural recursive structure.</p>
<h4 class="anchor anchorWithStickyNavbar_LWe7" id="example-iterative-fibonacci">Example: Iterative Fibonacci<a href="https://ajay-dhangar.github.io/algo/hi/blog/recursion-vs-iteration#example-iterative-fibonacci" class="hash-link" aria-label="Example: Iterative Fibonacci का सीधा लिंक" title="Example: Iterative Fibonacci का सीधा लिंक">​</a></h4>
<div class="language-javascript codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-javascript codeBlock_bY9V thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token keyword" style="color:#00009f">function</span><span class="token plain"> </span><span class="token function" style="color:#d73a49">fibonacci</span><span class="token punctuation" style="color:#393A34">(</span><span class="token parameter">n</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token keyword" style="color:#00009f">let</span><span class="token plain"> a </span><span class="token operator" style="color:#393A34">=</span><span class="token plain"> </span><span class="token number" style="color:#36acaa">0</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"> b </span><span class="token operator" style="color:#393A34">=</span><span class="token plain"> </span><span class="token number" style="color:#36acaa">1</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token keyword control-flow" style="color:#00009f">for</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">(</span><span class="token keyword" style="color:#00009f">let</span><span class="token plain"> i </span><span class="token operator" style="color:#393A34">=</span><span class="token plain"> </span><span class="token number" style="color:#36acaa">2</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"> i </span><span class="token operator" style="color:#393A34">&lt;=</span><span class="token plain"> n</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"> i</span><span class="token operator" style="color:#393A34">++</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    </span><span class="token punctuation" style="color:#393A34">[</span><span class="token plain">a</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"> b</span><span class="token punctuation" style="color:#393A34">]</span><span class="token plain"> </span><span class="token operator" style="color:#393A34">=</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">[</span><span class="token plain">b</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"> a </span><span class="token operator" style="color:#393A34">+</span><span class="token plain"> b</span><span class="token punctuation" style="color:#393A34">]</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token punctuation" style="color:#393A34">}</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token keyword control-flow" style="color:#00009f">return</span><span class="token plain"> b</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token punctuation" style="color:#393A34">}</span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="क्लिपबोर्ड पर कोड कॉपी करें" title="कॉपी" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg viewBox="0 0 24 24" class="copyButtonIcon_y97N"><path fill="currentColor" d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg viewBox="0 0 24 24" class="copyButtonSuccessIcon_LjdS"><path fill="currentColor" d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div>
<h2 class="anchor anchorWithStickyNavbar_LWe7" id="readability">Readability<a href="https://ajay-dhangar.github.io/algo/hi/blog/recursion-vs-iteration#readability" class="hash-link" aria-label="Readability का सीधा लिंक" title="Readability का सीधा लिंक">​</a></h2>
<p>Recursion often results in cleaner and more understandable code for problems that involve hierarchical structures, while iteration may require additional variables and conditions.</p>
<h2 class="anchor anchorWithStickyNavbar_LWe7" id="conclusion">Conclusion<a href="https://ajay-dhangar.github.io/algo/hi/blog/recursion-vs-iteration#conclusion" class="hash-link" aria-label="Conclusion का सीधा लिंक" title="Conclusion का सीधा लिंक">​</a></h2>
<p>Choosing between recursion and iteration depends on the specific problem you're tackling. Consider the trade-offs in performance and readability to make the best choice.</p>]]></content:encoded>
            <author>22wh1a12b5@bvrithyderabad.edu.in (Chiluka Akshitha)</author>
            <category>AKSHITHA-CHILUKA</category>
            <category>algo</category>
            <category>dsa</category>
            <category>algorithms</category>
            <category>recursion</category>
            <category>iteration</category>
        </item>
        <item>
            <title><![CDATA[Understanding Graph Representation: Adjacency Matrix vs Adjacency List]]></title>
            <link>https://ajay-dhangar.github.io/algo/hi/blog/understanding-graph-representation-adjacency-matrix-vs-adjacency-list</link>
            <guid>https://ajay-dhangar.github.io/algo/hi/blog/understanding-graph-representation-adjacency-matrix-vs-adjacency-list</guid>
            <pubDate>Thu, 07 Nov 2024 17:28:29 GMT</pubDate>
            <description><![CDATA[Graph representation is essential for effectively implementing graph algorithms and understanding the relationships between nodes. The two most common representations of graphs are the Adjacency Matrix and the Adjacency List. This blog post will compare these two representations, discussing their structures, advantages, and use cases.]]></description>
            <content:encoded><![CDATA[<p>Graph representation is essential for effectively implementing graph algorithms and understanding the relationships between nodes. The two most common representations of graphs are the <strong>Adjacency Matrix</strong> and the <strong>Adjacency List</strong>. This blog post will compare these two representations, discussing their structures, advantages, and use cases.</p>
<p>In this blog, we'll explore:</p>
<ul>
<li><strong>Understanding Graphs</strong>: What are graphs and their components?</li>
<li><strong>Adjacency Matrix</strong>: Structure and characteristics.</li>
<li><strong>Adjacency List</strong>: Structure and characteristics.</li>
<li><strong>Comparison of Adjacency Matrix and Adjacency List</strong>: When to use which representation.</li>
<li><strong>Implementation</strong>: Code examples in Python and Java.</li>
<li><strong>Real-World Applications</strong>: How these representations are applied in practice.</li>
</ul>
<hr>
<h2 class="anchor anchorWithStickyNavbar_LWe7" id="understanding-graphs">Understanding Graphs<a href="https://ajay-dhangar.github.io/algo/hi/blog/understanding-graph-representation-adjacency-matrix-vs-adjacency-list#understanding-graphs" class="hash-link" aria-label="Understanding Graphs का सीधा लिंक" title="Understanding Graphs का सीधा लिंक">​</a></h2>
<p>Graphs consist of vertices (nodes) connected by edges (links). They can be directed or undirected, weighted or unweighted, and are used to model relationships and structures in various fields, from social networks to transportation systems.</p>
<h3 class="anchor anchorWithStickyNavbar_LWe7" id="graph-representation-example">Graph Representation Example:<a href="https://ajay-dhangar.github.io/algo/hi/blog/understanding-graph-representation-adjacency-matrix-vs-adjacency-list#graph-representation-example" class="hash-link" aria-label="Graph Representation Example: का सीधा लिंक" title="Graph Representation Example: का सीधा लिंक">​</a></h3>
<p>Consider the following undirected graph:</p>
<p>This graph can be represented using an adjacency matrix or an adjacency list.</p>
<h2 class="anchor anchorWithStickyNavbar_LWe7" id="adjacency-matrix">Adjacency Matrix<a href="https://ajay-dhangar.github.io/algo/hi/blog/understanding-graph-representation-adjacency-matrix-vs-adjacency-list#adjacency-matrix" class="hash-link" aria-label="Adjacency Matrix का सीधा लिंक" title="Adjacency Matrix का सीधा लिंक">​</a></h2>
<p>An adjacency matrix is a 2D array where each cell at position (i, j) indicates whether there is an edge between vertex i and vertex j. If there is an edge, the cell contains a value (usually 1 for unweighted graphs or the weight of the edge for weighted graphs); otherwise, it contains 0.</p>
<h3 class="anchor anchorWithStickyNavbar_LWe7" id="characteristics">Characteristics:<a href="https://ajay-dhangar.github.io/algo/hi/blog/understanding-graph-representation-adjacency-matrix-vs-adjacency-list#characteristics" class="hash-link" aria-label="Characteristics: का सीधा लिंक" title="Characteristics: का सीधा लिंक">​</a></h3>
<ul>
<li><strong>Space Complexity</strong>: O(V²), where V is the number of vertices.</li>
<li><strong>Direct Access</strong>: Allows O(1) time complexity for checking if an edge exists between two vertices.</li>
<li><strong>Memory Inefficiency</strong>: Less efficient for sparse graphs (graphs with few edges compared to the number of vertices).</li>
</ul>
<h3 class="anchor anchorWithStickyNavbar_LWe7" id="example-implementation-python">Example Implementation (Python):<a href="https://ajay-dhangar.github.io/algo/hi/blog/understanding-graph-representation-adjacency-matrix-vs-adjacency-list#example-implementation-python" class="hash-link" aria-label="Example Implementation (Python): का सीधा लिंक" title="Example Implementation (Python): का सीधा लिंक">​</a></h3>
<div class="language-python codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-python codeBlock_bY9V thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token keyword" style="color:#00009f">class</span><span class="token plain"> </span><span class="token class-name">GraphAdjacencyMatrix</span><span class="token punctuation" style="color:#393A34">:</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    </span><span class="token keyword" style="color:#00009f">def</span><span class="token plain"> </span><span class="token function" style="color:#d73a49">__init__</span><span class="token punctuation" style="color:#393A34">(</span><span class="token plain">self</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"> vertices</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">:</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">        self</span><span class="token punctuation" style="color:#393A34">.</span><span class="token plain">V </span><span class="token operator" style="color:#393A34">=</span><span class="token plain"> vertices</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">        self</span><span class="token punctuation" style="color:#393A34">.</span><span class="token plain">matrix </span><span class="token operator" style="color:#393A34">=</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">[</span><span class="token punctuation" style="color:#393A34">[</span><span class="token number" style="color:#36acaa">0</span><span class="token punctuation" style="color:#393A34">]</span><span class="token plain"> </span><span class="token operator" style="color:#393A34">*</span><span class="token plain"> vertices </span><span class="token keyword" style="color:#00009f">for</span><span class="token plain"> _ </span><span class="token keyword" style="color:#00009f">in</span><span class="token plain"> </span><span class="token builtin">range</span><span class="token punctuation" style="color:#393A34">(</span><span class="token plain">vertices</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">]</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    </span><span class="token keyword" style="color:#00009f">def</span><span class="token plain"> </span><span class="token function" style="color:#d73a49">add_edge</span><span class="token punctuation" style="color:#393A34">(</span><span class="token plain">self</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"> u</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"> v</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">:</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">        self</span><span class="token punctuation" style="color:#393A34">.</span><span class="token plain">matrix</span><span class="token punctuation" style="color:#393A34">[</span><span class="token plain">u</span><span class="token punctuation" style="color:#393A34">]</span><span class="token punctuation" style="color:#393A34">[</span><span class="token plain">v</span><span class="token punctuation" style="color:#393A34">]</span><span class="token plain"> </span><span class="token operator" style="color:#393A34">=</span><span class="token plain"> </span><span class="token number" style="color:#36acaa">1</span><span class="token plain">  </span><span class="token comment" style="color:#999988;font-style:italic"># For undirected graph, add the reverse edge as well</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">        self</span><span class="token punctuation" style="color:#393A34">.</span><span class="token plain">matrix</span><span class="token punctuation" style="color:#393A34">[</span><span class="token plain">v</span><span class="token punctuation" style="color:#393A34">]</span><span class="token punctuation" style="color:#393A34">[</span><span class="token plain">u</span><span class="token punctuation" style="color:#393A34">]</span><span class="token plain"> </span><span class="token operator" style="color:#393A34">=</span><span class="token plain"> </span><span class="token number" style="color:#36acaa">1</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    </span><span class="token keyword" style="color:#00009f">def</span><span class="token plain"> </span><span class="token function" style="color:#d73a49">display</span><span class="token punctuation" style="color:#393A34">(</span><span class="token plain">self</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">:</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">        </span><span class="token keyword" style="color:#00009f">for</span><span class="token plain"> row </span><span class="token keyword" style="color:#00009f">in</span><span class="token plain"> self</span><span class="token punctuation" style="color:#393A34">.</span><span class="token plain">matrix</span><span class="token punctuation" style="color:#393A34">:</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">            </span><span class="token keyword" style="color:#00009f">print</span><span class="token punctuation" style="color:#393A34">(</span><span class="token plain">row</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token comment" style="color:#999988;font-style:italic"># Example usage</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">g_matrix </span><span class="token operator" style="color:#393A34">=</span><span class="token plain"> GraphAdjacencyMatrix</span><span class="token punctuation" style="color:#393A34">(</span><span class="token number" style="color:#36acaa">4</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">g_matrix</span><span class="token punctuation" style="color:#393A34">.</span><span class="token plain">add_edge</span><span class="token punctuation" style="color:#393A34">(</span><span class="token number" style="color:#36acaa">0</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"> </span><span class="token number" style="color:#36acaa">1</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain">  </span><span class="token comment" style="color:#999988;font-style:italic"># A - B</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">g_matrix</span><span class="token punctuation" style="color:#393A34">.</span><span class="token plain">add_edge</span><span class="token punctuation" style="color:#393A34">(</span><span class="token number" style="color:#36acaa">0</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"> </span><span class="token number" style="color:#36acaa">2</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain">  </span><span class="token comment" style="color:#999988;font-style:italic"># A - C</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">g_matrix</span><span class="token punctuation" style="color:#393A34">.</span><span class="token plain">add_edge</span><span class="token punctuation" style="color:#393A34">(</span><span class="token number" style="color:#36acaa">1</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"> </span><span class="token number" style="color:#36acaa">3</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain">  </span><span class="token comment" style="color:#999988;font-style:italic"># B - D</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">g_matrix</span><span class="token punctuation" style="color:#393A34">.</span><span class="token plain">add_edge</span><span class="token punctuation" style="color:#393A34">(</span><span class="token number" style="color:#36acaa">2</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"> </span><span class="token number" style="color:#36acaa">3</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain">  </span><span class="token comment" style="color:#999988;font-style:italic"># C - D</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">g_matrix</span><span class="token punctuation" style="color:#393A34">.</span><span class="token plain">display</span><span class="token punctuation" style="color:#393A34">(</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token comment" style="color:#999988;font-style:italic">#output</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token punctuation" style="color:#393A34">[</span><span class="token number" style="color:#36acaa">0</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"> </span><span class="token number" style="color:#36acaa">1</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"> </span><span class="token number" style="color:#36acaa">1</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"> </span><span class="token number" style="color:#36acaa">0</span><span class="token punctuation" style="color:#393A34">]</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token punctuation" style="color:#393A34">[</span><span class="token number" style="color:#36acaa">1</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"> </span><span class="token number" style="color:#36acaa">0</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"> </span><span class="token number" style="color:#36acaa">0</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"> </span><span class="token number" style="color:#36acaa">1</span><span class="token punctuation" style="color:#393A34">]</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token punctuation" style="color:#393A34">[</span><span class="token number" style="color:#36acaa">1</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"> </span><span class="token number" style="color:#36acaa">0</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"> </span><span class="token number" style="color:#36acaa">0</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"> </span><span class="token number" style="color:#36acaa">1</span><span class="token punctuation" style="color:#393A34">]</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token punctuation" style="color:#393A34">[</span><span class="token number" style="color:#36acaa">0</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"> </span><span class="token number" style="color:#36acaa">1</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"> </span><span class="token number" style="color:#36acaa">1</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"> </span><span class="token number" style="color:#36acaa">0</span><span class="token punctuation" style="color:#393A34">]</span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="क्लिपबोर्ड पर कोड कॉपी करें" title="कॉपी" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg viewBox="0 0 24 24" class="copyButtonIcon_y97N"><path fill="currentColor" d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg viewBox="0 0 24 24" class="copyButtonSuccessIcon_LjdS"><path fill="currentColor" d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div>
<h2 class="anchor anchorWithStickyNavbar_LWe7" id="adjacency-list">Adjacency List<a href="https://ajay-dhangar.github.io/algo/hi/blog/understanding-graph-representation-adjacency-matrix-vs-adjacency-list#adjacency-list" class="hash-link" aria-label="Adjacency List का सीधा लिंक" title="Adjacency List का सीधा लिंक">​</a></h2>
<p>An adjacency list is a collection of lists or arrays where each list corresponds to a vertex and contains a list of adjacent vertices. It is more space-efficient for sparse graphs.</p>
<h3 class="anchor anchorWithStickyNavbar_LWe7" id="characteristics-1">Characteristics:<a href="https://ajay-dhangar.github.io/algo/hi/blog/understanding-graph-representation-adjacency-matrix-vs-adjacency-list#characteristics-1" class="hash-link" aria-label="Characteristics: का सीधा लिंक" title="Characteristics: का सीधा लिंक">​</a></h3>
<p>-<strong>Space Complexity</strong>: O(V + E), where E is the number of edges.
-<strong>Memory Efficiency</strong>: More efficient for sparse graphs, as it only stores existing edges.
-<strong>Traversal</strong>: It may take longer to check if an edge exists between two vertices (O(V) in the worst case).</p>
<h3 class="anchor anchorWithStickyNavbar_LWe7" id="example-implementation-python-1">Example Implementation (Python):<a href="https://ajay-dhangar.github.io/algo/hi/blog/understanding-graph-representation-adjacency-matrix-vs-adjacency-list#example-implementation-python-1" class="hash-link" aria-label="Example Implementation (Python): का सीधा लिंक" title="Example Implementation (Python): का सीधा लिंक">​</a></h3>
<div class="language-python codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-python codeBlock_bY9V thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token keyword" style="color:#00009f">class</span><span class="token plain"> </span><span class="token class-name">GraphAdjacencyList</span><span class="token punctuation" style="color:#393A34">:</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    </span><span class="token keyword" style="color:#00009f">def</span><span class="token plain"> </span><span class="token function" style="color:#d73a49">__init__</span><span class="token punctuation" style="color:#393A34">(</span><span class="token plain">self</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">:</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">        self</span><span class="token punctuation" style="color:#393A34">.</span><span class="token plain">graph </span><span class="token operator" style="color:#393A34">=</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">{</span><span class="token punctuation" style="color:#393A34">}</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    </span><span class="token keyword" style="color:#00009f">def</span><span class="token plain"> </span><span class="token function" style="color:#d73a49">add_edge</span><span class="token punctuation" style="color:#393A34">(</span><span class="token plain">self</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"> u</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"> v</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">:</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">        </span><span class="token keyword" style="color:#00009f">if</span><span class="token plain"> u </span><span class="token keyword" style="color:#00009f">not</span><span class="token plain"> </span><span class="token keyword" style="color:#00009f">in</span><span class="token plain"> self</span><span class="token punctuation" style="color:#393A34">.</span><span class="token plain">graph</span><span class="token punctuation" style="color:#393A34">:</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">            self</span><span class="token punctuation" style="color:#393A34">.</span><span class="token plain">graph</span><span class="token punctuation" style="color:#393A34">[</span><span class="token plain">u</span><span class="token punctuation" style="color:#393A34">]</span><span class="token plain"> </span><span class="token operator" style="color:#393A34">=</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">[</span><span class="token punctuation" style="color:#393A34">]</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">        </span><span class="token keyword" style="color:#00009f">if</span><span class="token plain"> v </span><span class="token keyword" style="color:#00009f">not</span><span class="token plain"> </span><span class="token keyword" style="color:#00009f">in</span><span class="token plain"> self</span><span class="token punctuation" style="color:#393A34">.</span><span class="token plain">graph</span><span class="token punctuation" style="color:#393A34">:</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">            self</span><span class="token punctuation" style="color:#393A34">.</span><span class="token plain">graph</span><span class="token punctuation" style="color:#393A34">[</span><span class="token plain">v</span><span class="token punctuation" style="color:#393A34">]</span><span class="token plain"> </span><span class="token operator" style="color:#393A34">=</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">[</span><span class="token punctuation" style="color:#393A34">]</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">        self</span><span class="token punctuation" style="color:#393A34">.</span><span class="token plain">graph</span><span class="token punctuation" style="color:#393A34">[</span><span class="token plain">u</span><span class="token punctuation" style="color:#393A34">]</span><span class="token punctuation" style="color:#393A34">.</span><span class="token plain">append</span><span class="token punctuation" style="color:#393A34">(</span><span class="token plain">v</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain">  </span><span class="token comment" style="color:#999988;font-style:italic"># For undirected graph, add the reverse edge as well</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">        self</span><span class="token punctuation" style="color:#393A34">.</span><span class="token plain">graph</span><span class="token punctuation" style="color:#393A34">[</span><span class="token plain">v</span><span class="token punctuation" style="color:#393A34">]</span><span class="token punctuation" style="color:#393A34">.</span><span class="token plain">append</span><span class="token punctuation" style="color:#393A34">(</span><span class="token plain">u</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    </span><span class="token keyword" style="color:#00009f">def</span><span class="token plain"> </span><span class="token function" style="color:#d73a49">display</span><span class="token punctuation" style="color:#393A34">(</span><span class="token plain">self</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">:</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">        </span><span class="token keyword" style="color:#00009f">for</span><span class="token plain"> vertex</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"> edges </span><span class="token keyword" style="color:#00009f">in</span><span class="token plain"> self</span><span class="token punctuation" style="color:#393A34">.</span><span class="token plain">graph</span><span class="token punctuation" style="color:#393A34">.</span><span class="token plain">items</span><span class="token punctuation" style="color:#393A34">(</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">:</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">            </span><span class="token keyword" style="color:#00009f">print</span><span class="token punctuation" style="color:#393A34">(</span><span class="token string-interpolation string" style="color:#e3116c">f"</span><span class="token string-interpolation interpolation punctuation" style="color:#393A34">{</span><span class="token string-interpolation interpolation">vertex</span><span class="token string-interpolation interpolation punctuation" style="color:#393A34">}</span><span class="token string-interpolation string" style="color:#e3116c">: </span><span class="token string-interpolation interpolation punctuation" style="color:#393A34">{</span><span class="token string-interpolation interpolation">edges</span><span class="token string-interpolation interpolation punctuation" style="color:#393A34">}</span><span class="token string-interpolation string" style="color:#e3116c">"</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token comment" style="color:#999988;font-style:italic"># Example usage</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">g_list </span><span class="token operator" style="color:#393A34">=</span><span class="token plain"> GraphAdjacencyList</span><span class="token punctuation" style="color:#393A34">(</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">g_list</span><span class="token punctuation" style="color:#393A34">.</span><span class="token plain">add_edge</span><span class="token punctuation" style="color:#393A34">(</span><span class="token string" style="color:#e3116c">'A'</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"> </span><span class="token string" style="color:#e3116c">'B'</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain">  </span><span class="token comment" style="color:#999988;font-style:italic"># A - B</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">g_list</span><span class="token punctuation" style="color:#393A34">.</span><span class="token plain">add_edge</span><span class="token punctuation" style="color:#393A34">(</span><span class="token string" style="color:#e3116c">'A'</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"> </span><span class="token string" style="color:#e3116c">'C'</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain">  </span><span class="token comment" style="color:#999988;font-style:italic"># A - C</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">g_list</span><span class="token punctuation" style="color:#393A34">.</span><span class="token plain">add_edge</span><span class="token punctuation" style="color:#393A34">(</span><span class="token string" style="color:#e3116c">'B'</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"> </span><span class="token string" style="color:#e3116c">'D'</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain">  </span><span class="token comment" style="color:#999988;font-style:italic"># B - D</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">g_list</span><span class="token punctuation" style="color:#393A34">.</span><span class="token plain">add_edge</span><span class="token punctuation" style="color:#393A34">(</span><span class="token string" style="color:#e3116c">'C'</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"> </span><span class="token string" style="color:#e3116c">'D'</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain">  </span><span class="token comment" style="color:#999988;font-style:italic"># C - D</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">g_list</span><span class="token punctuation" style="color:#393A34">.</span><span class="token plain">display</span><span class="token punctuation" style="color:#393A34">(</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token comment" style="color:#999988;font-style:italic"># output</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">A</span><span class="token punctuation" style="color:#393A34">:</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">[</span><span class="token string" style="color:#e3116c">'B'</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"> </span><span class="token string" style="color:#e3116c">'C'</span><span class="token punctuation" style="color:#393A34">]</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">B</span><span class="token punctuation" style="color:#393A34">:</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">[</span><span class="token string" style="color:#e3116c">'A'</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"> </span><span class="token string" style="color:#e3116c">'D'</span><span class="token punctuation" style="color:#393A34">]</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">C</span><span class="token punctuation" style="color:#393A34">:</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">[</span><span class="token string" style="color:#e3116c">'A'</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"> </span><span class="token string" style="color:#e3116c">'D'</span><span class="token punctuation" style="color:#393A34">]</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">D</span><span class="token punctuation" style="color:#393A34">:</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">[</span><span class="token string" style="color:#e3116c">'B'</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"> </span><span class="token string" style="color:#e3116c">'C'</span><span class="token punctuation" style="color:#393A34">]</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="क्लिपबोर्ड पर कोड कॉपी करें" title="कॉपी" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg viewBox="0 0 24 24" class="copyButtonIcon_y97N"><path fill="currentColor" d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg viewBox="0 0 24 24" class="copyButtonSuccessIcon_LjdS"><path fill="currentColor" d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div>
<h3 class="anchor anchorWithStickyNavbar_LWe7" id="java-implementation-adjacency-matrix">Java Implementation (Adjacency Matrix):<a href="https://ajay-dhangar.github.io/algo/hi/blog/understanding-graph-representation-adjacency-matrix-vs-adjacency-list#java-implementation-adjacency-matrix" class="hash-link" aria-label="Java Implementation (Adjacency Matrix): का सीधा लिंक" title="Java Implementation (Adjacency Matrix): का सीधा लिंक">​</a></h3>
<div class="language-java codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-java codeBlock_bY9V thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token keyword" style="color:#00009f">public</span><span class="token plain"> </span><span class="token keyword" style="color:#00009f">class</span><span class="token plain"> </span><span class="token class-name">GraphMatrix</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    </span><span class="token keyword" style="color:#00009f">private</span><span class="token plain"> </span><span class="token keyword" style="color:#00009f">int</span><span class="token punctuation" style="color:#393A34">[</span><span class="token punctuation" style="color:#393A34">]</span><span class="token punctuation" style="color:#393A34">[</span><span class="token punctuation" style="color:#393A34">]</span><span class="token plain"> matrix</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    </span><span class="token keyword" style="color:#00009f">private</span><span class="token plain"> </span><span class="token keyword" style="color:#00009f">int</span><span class="token plain"> </span><span class="token class-name">V</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    </span><span class="token keyword" style="color:#00009f">public</span><span class="token plain"> </span><span class="token class-name">GraphMatrix</span><span class="token punctuation" style="color:#393A34">(</span><span class="token keyword" style="color:#00009f">int</span><span class="token plain"> vertices</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">        </span><span class="token class-name">V</span><span class="token plain"> </span><span class="token operator" style="color:#393A34">=</span><span class="token plain"> vertices</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">        matrix </span><span class="token operator" style="color:#393A34">=</span><span class="token plain"> </span><span class="token keyword" style="color:#00009f">new</span><span class="token plain"> </span><span class="token keyword" style="color:#00009f">int</span><span class="token punctuation" style="color:#393A34">[</span><span class="token class-name">V</span><span class="token punctuation" style="color:#393A34">]</span><span class="token punctuation" style="color:#393A34">[</span><span class="token class-name">V</span><span class="token punctuation" style="color:#393A34">]</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    </span><span class="token punctuation" style="color:#393A34">}</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    </span><span class="token keyword" style="color:#00009f">public</span><span class="token plain"> </span><span class="token keyword" style="color:#00009f">void</span><span class="token plain"> </span><span class="token function" style="color:#d73a49">addEdge</span><span class="token punctuation" style="color:#393A34">(</span><span class="token keyword" style="color:#00009f">int</span><span class="token plain"> u</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"> </span><span class="token keyword" style="color:#00009f">int</span><span class="token plain"> v</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">        matrix</span><span class="token punctuation" style="color:#393A34">[</span><span class="token plain">u</span><span class="token punctuation" style="color:#393A34">]</span><span class="token punctuation" style="color:#393A34">[</span><span class="token plain">v</span><span class="token punctuation" style="color:#393A34">]</span><span class="token plain"> </span><span class="token operator" style="color:#393A34">=</span><span class="token plain"> </span><span class="token number" style="color:#36acaa">1</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"> </span><span class="token comment" style="color:#999988;font-style:italic">// For undirected graph, also set matrix[v][u]</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">        matrix</span><span class="token punctuation" style="color:#393A34">[</span><span class="token plain">v</span><span class="token punctuation" style="color:#393A34">]</span><span class="token punctuation" style="color:#393A34">[</span><span class="token plain">u</span><span class="token punctuation" style="color:#393A34">]</span><span class="token plain"> </span><span class="token operator" style="color:#393A34">=</span><span class="token plain"> </span><span class="token number" style="color:#36acaa">1</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    </span><span class="token punctuation" style="color:#393A34">}</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    </span><span class="token keyword" style="color:#00009f">public</span><span class="token plain"> </span><span class="token keyword" style="color:#00009f">void</span><span class="token plain"> </span><span class="token function" style="color:#d73a49">display</span><span class="token punctuation" style="color:#393A34">(</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">        </span><span class="token keyword" style="color:#00009f">for</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">(</span><span class="token keyword" style="color:#00009f">int</span><span class="token punctuation" style="color:#393A34">[</span><span class="token punctuation" style="color:#393A34">]</span><span class="token plain"> row </span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> matrix</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">            </span><span class="token keyword" style="color:#00009f">for</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">(</span><span class="token keyword" style="color:#00009f">int</span><span class="token plain"> val </span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> row</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">                </span><span class="token class-name">System</span><span class="token punctuation" style="color:#393A34">.</span><span class="token plain">out</span><span class="token punctuation" style="color:#393A34">.</span><span class="token function" style="color:#d73a49">print</span><span class="token punctuation" style="color:#393A34">(</span><span class="token plain">val </span><span class="token operator" style="color:#393A34">+</span><span class="token plain"> </span><span class="token string" style="color:#e3116c">" "</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">            </span><span class="token punctuation" style="color:#393A34">}</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">            </span><span class="token class-name">System</span><span class="token punctuation" style="color:#393A34">.</span><span class="token plain">out</span><span class="token punctuation" style="color:#393A34">.</span><span class="token function" style="color:#d73a49">println</span><span class="token punctuation" style="color:#393A34">(</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">        </span><span class="token punctuation" style="color:#393A34">}</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    </span><span class="token punctuation" style="color:#393A34">}</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    </span><span class="token keyword" style="color:#00009f">public</span><span class="token plain"> </span><span class="token keyword" style="color:#00009f">static</span><span class="token plain"> </span><span class="token keyword" style="color:#00009f">void</span><span class="token plain"> </span><span class="token function" style="color:#d73a49">main</span><span class="token punctuation" style="color:#393A34">(</span><span class="token class-name">String</span><span class="token punctuation" style="color:#393A34">[</span><span class="token punctuation" style="color:#393A34">]</span><span class="token plain"> args</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">        </span><span class="token class-name">GraphMatrix</span><span class="token plain"> g_matrix </span><span class="token operator" style="color:#393A34">=</span><span class="token plain"> </span><span class="token keyword" style="color:#00009f">new</span><span class="token plain"> </span><span class="token class-name">GraphMatrix</span><span class="token punctuation" style="color:#393A34">(</span><span class="token number" style="color:#36acaa">4</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">        g_matrix</span><span class="token punctuation" style="color:#393A34">.</span><span class="token function" style="color:#d73a49">addEdge</span><span class="token punctuation" style="color:#393A34">(</span><span class="token number" style="color:#36acaa">0</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"> </span><span class="token number" style="color:#36acaa">1</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain">  </span><span class="token comment" style="color:#999988;font-style:italic">// A - B</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">        g_matrix</span><span class="token punctuation" style="color:#393A34">.</span><span class="token function" style="color:#d73a49">addEdge</span><span class="token punctuation" style="color:#393A34">(</span><span class="token number" style="color:#36acaa">0</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"> </span><span class="token number" style="color:#36acaa">2</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain">  </span><span class="token comment" style="color:#999988;font-style:italic">// A - C</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">        g_matrix</span><span class="token punctuation" style="color:#393A34">.</span><span class="token function" style="color:#d73a49">addEdge</span><span class="token punctuation" style="color:#393A34">(</span><span class="token number" style="color:#36acaa">1</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"> </span><span class="token number" style="color:#36acaa">3</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain">  </span><span class="token comment" style="color:#999988;font-style:italic">// B - D</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">        g_matrix</span><span class="token punctuation" style="color:#393A34">.</span><span class="token function" style="color:#d73a49">addEdge</span><span class="token punctuation" style="color:#393A34">(</span><span class="token number" style="color:#36acaa">2</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"> </span><span class="token number" style="color:#36acaa">3</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain">  </span><span class="token comment" style="color:#999988;font-style:italic">// C - D</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">        g_matrix</span><span class="token punctuation" style="color:#393A34">.</span><span class="token function" style="color:#d73a49">display</span><span class="token punctuation" style="color:#393A34">(</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    </span><span class="token punctuation" style="color:#393A34">}</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token punctuation" style="color:#393A34">}</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token comment" style="color:#999988;font-style:italic">//output:</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token number" style="color:#36acaa">0</span><span class="token plain"> </span><span class="token number" style="color:#36acaa">1</span><span class="token plain"> </span><span class="token number" style="color:#36acaa">1</span><span class="token plain"> </span><span class="token number" style="color:#36acaa">0</span><span class="token plain"> </span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token number" style="color:#36acaa">1</span><span class="token plain"> </span><span class="token number" style="color:#36acaa">0</span><span class="token plain"> </span><span class="token number" style="color:#36acaa">0</span><span class="token plain"> </span><span class="token number" style="color:#36acaa">1</span><span class="token plain"> </span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token number" style="color:#36acaa">1</span><span class="token plain"> </span><span class="token number" style="color:#36acaa">0</span><span class="token plain"> </span><span class="token number" style="color:#36acaa">0</span><span class="token plain"> </span><span class="token number" style="color:#36acaa">1</span><span class="token plain"> </span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token number" style="color:#36acaa">0</span><span class="token plain"> </span><span class="token number" style="color:#36acaa">1</span><span class="token plain"> </span><span class="token number" style="color:#36acaa">1</span><span class="token plain"> </span><span class="token number" style="color:#36acaa">0</span><span class="token plain"> </span><br></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="क्लिपबोर्ड पर कोड कॉपी करें" title="कॉपी" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg viewBox="0 0 24 24" class="copyButtonIcon_y97N"><path fill="currentColor" d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg viewBox="0 0 24 24" class="copyButtonSuccessIcon_LjdS"><path fill="currentColor" d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div>
<h3 class="anchor anchorWithStickyNavbar_LWe7" id="java-implementation-adjacency-list">Java Implementation (Adjacency List):<a href="https://ajay-dhangar.github.io/algo/hi/blog/understanding-graph-representation-adjacency-matrix-vs-adjacency-list#java-implementation-adjacency-list" class="hash-link" aria-label="Java Implementation (Adjacency List): का सीधा लिंक" title="Java Implementation (Adjacency List): का सीधा लिंक">​</a></h3>
<div class="language-java codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-java codeBlock_bY9V thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token keyword" style="color:#00009f">import</span><span class="token plain"> </span><span class="token import namespace" style="opacity:0.7">java</span><span class="token import namespace punctuation" style="opacity:0.7;color:#393A34">.</span><span class="token import namespace" style="opacity:0.7">util</span><span class="token import namespace punctuation" style="opacity:0.7;color:#393A34">.</span><span class="token import operator" style="color:#393A34">*</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token keyword" style="color:#00009f">public</span><span class="token plain"> </span><span class="token keyword" style="color:#00009f">class</span><span class="token plain"> </span><span class="token class-name">GraphList</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    </span><span class="token keyword" style="color:#00009f">private</span><span class="token plain"> </span><span class="token class-name">Map</span><span class="token generics punctuation" style="color:#393A34">&lt;</span><span class="token generics class-name">String</span><span class="token generics punctuation" style="color:#393A34">,</span><span class="token generics"> </span><span class="token generics class-name">List</span><span class="token generics punctuation" style="color:#393A34">&lt;</span><span class="token generics class-name">String</span><span class="token generics punctuation" style="color:#393A34">&gt;</span><span class="token generics punctuation" style="color:#393A34">&gt;</span><span class="token plain"> adjList</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    </span><span class="token keyword" style="color:#00009f">public</span><span class="token plain"> </span><span class="token class-name">GraphList</span><span class="token punctuation" style="color:#393A34">(</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">        adjList </span><span class="token operator" style="color:#393A34">=</span><span class="token plain"> </span><span class="token keyword" style="color:#00009f">new</span><span class="token plain"> </span><span class="token class-name">HashMap</span><span class="token generics punctuation" style="color:#393A34">&lt;</span><span class="token generics punctuation" style="color:#393A34">&gt;</span><span class="token punctuation" style="color:#393A34">(</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    </span><span class="token punctuation" style="color:#393A34">}</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    </span><span class="token keyword" style="color:#00009f">public</span><span class="token plain"> </span><span class="token keyword" style="color:#00009f">void</span><span class="token plain"> </span><span class="token function" style="color:#d73a49">addEdge</span><span class="token punctuation" style="color:#393A34">(</span><span class="token class-name">String</span><span class="token plain"> u</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"> </span><span class="token class-name">String</span><span class="token plain"> v</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">        adjList</span><span class="token punctuation" style="color:#393A34">.</span><span class="token function" style="color:#d73a49">putIfAbsent</span><span class="token punctuation" style="color:#393A34">(</span><span class="token plain">u</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"> </span><span class="token keyword" style="color:#00009f">new</span><span class="token plain"> </span><span class="token class-name">ArrayList</span><span class="token generics punctuation" style="color:#393A34">&lt;</span><span class="token generics punctuation" style="color:#393A34">&gt;</span><span class="token punctuation" style="color:#393A34">(</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">        adjList</span><span class="token punctuation" style="color:#393A34">.</span><span class="token function" style="color:#d73a49">putIfAbsent</span><span class="token punctuation" style="color:#393A34">(</span><span class="token plain">v</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"> </span><span class="token keyword" style="color:#00009f">new</span><span class="token plain"> </span><span class="token class-name">ArrayList</span><span class="token generics punctuation" style="color:#393A34">&lt;</span><span class="token generics punctuation" style="color:#393A34">&gt;</span><span class="token punctuation" style="color:#393A34">(</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">        adjList</span><span class="token punctuation" style="color:#393A34">.</span><span class="token function" style="color:#d73a49">get</span><span class="token punctuation" style="color:#393A34">(</span><span class="token plain">u</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">.</span><span class="token function" style="color:#d73a49">add</span><span class="token punctuation" style="color:#393A34">(</span><span class="token plain">v</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain">  </span><span class="token comment" style="color:#999988;font-style:italic">// For undirected graph, also add reverse edge</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">        adjList</span><span class="token punctuation" style="color:#393A34">.</span><span class="token function" style="color:#d73a49">get</span><span class="token punctuation" style="color:#393A34">(</span><span class="token plain">v</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">.</span><span class="token function" style="color:#d73a49">add</span><span class="token punctuation" style="color:#393A34">(</span><span class="token plain">u</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    </span><span class="token punctuation" style="color:#393A34">}</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    </span><span class="token keyword" style="color:#00009f">public</span><span class="token plain"> </span><span class="token keyword" style="color:#00009f">void</span><span class="token plain"> </span><span class="token function" style="color:#d73a49">display</span><span class="token punctuation" style="color:#393A34">(</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">        </span><span class="token keyword" style="color:#00009f">for</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">(</span><span class="token class-name">String</span><span class="token plain"> vertex </span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> adjList</span><span class="token punctuation" style="color:#393A34">.</span><span class="token function" style="color:#d73a49">keySet</span><span class="token punctuation" style="color:#393A34">(</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">            </span><span class="token class-name">System</span><span class="token punctuation" style="color:#393A34">.</span><span class="token plain">out</span><span class="token punctuation" style="color:#393A34">.</span><span class="token function" style="color:#d73a49">println</span><span class="token punctuation" style="color:#393A34">(</span><span class="token plain">vertex </span><span class="token operator" style="color:#393A34">+</span><span class="token plain"> </span><span class="token string" style="color:#e3116c">": "</span><span class="token plain"> </span><span class="token operator" style="color:#393A34">+</span><span class="token plain"> adjList</span><span class="token punctuation" style="color:#393A34">.</span><span class="token function" style="color:#d73a49">get</span><span class="token punctuation" style="color:#393A34">(</span><span class="token plain">vertex</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">        </span><span class="token punctuation" style="color:#393A34">}</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    </span><span class="token punctuation" style="color:#393A34">}</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    </span><span class="token keyword" style="color:#00009f">public</span><span class="token plain"> </span><span class="token keyword" style="color:#00009f">static</span><span class="token plain"> </span><span class="token keyword" style="color:#00009f">void</span><span class="token plain"> </span><span class="token function" style="color:#d73a49">main</span><span class="token punctuation" style="color:#393A34">(</span><span class="token class-name">String</span><span class="token punctuation" style="color:#393A34">[</span><span class="token punctuation" style="color:#393A34">]</span><span class="token plain"> args</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">        </span><span class="token class-name">GraphList</span><span class="token plain"> g_list </span><span class="token operator" style="color:#393A34">=</span><span class="token plain"> </span><span class="token keyword" style="color:#00009f">new</span><span class="token plain"> </span><span class="token class-name">GraphList</span><span class="token punctuation" style="color:#393A34">(</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">        g_list</span><span class="token punctuation" style="color:#393A34">.</span><span class="token function" style="color:#d73a49">addEdge</span><span class="token punctuation" style="color:#393A34">(</span><span class="token string" style="color:#e3116c">"A"</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"> </span><span class="token string" style="color:#e3116c">"B"</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain">  </span><span class="token comment" style="color:#999988;font-style:italic">// A - B</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">        g_list</span><span class="token punctuation" style="color:#393A34">.</span><span class="token function" style="color:#d73a49">addEdge</span><span class="token punctuation" style="color:#393A34">(</span><span class="token string" style="color:#e3116c">"A"</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"> </span><span class="token string" style="color:#e3116c">"C"</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain">  </span><span class="token comment" style="color:#999988;font-style:italic">// A - C</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">        g_list</span><span class="token punctuation" style="color:#393A34">.</span><span class="token function" style="color:#d73a49">addEdge</span><span class="token punctuation" style="color:#393A34">(</span><span class="token string" style="color:#e3116c">"B"</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"> </span><span class="token string" style="color:#e3116c">"D"</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain">  </span><span class="token comment" style="color:#999988;font-style:italic">// B - D</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">        g_list</span><span class="token punctuation" style="color:#393A34">.</span><span class="token function" style="color:#d73a49">addEdge</span><span class="token punctuation" style="color:#393A34">(</span><span class="token string" style="color:#e3116c">"C"</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"> </span><span class="token string" style="color:#e3116c">"D"</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain">  </span><span class="token comment" style="color:#999988;font-style:italic">// C - D</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">        g_list</span><span class="token punctuation" style="color:#393A34">.</span><span class="token function" style="color:#d73a49">display</span><span class="token punctuation" style="color:#393A34">(</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    </span><span class="token punctuation" style="color:#393A34">}</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token punctuation" style="color:#393A34">}</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token comment" style="color:#999988;font-style:italic">//output:</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token class-name">A</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">[</span><span class="token class-name">B</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"> </span><span class="token class-name">C</span><span class="token punctuation" style="color:#393A34">]</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token class-name">B</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">[</span><span class="token class-name">A</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"> </span><span class="token class-name">D</span><span class="token punctuation" style="color:#393A34">]</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token class-name">C</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">[</span><span class="token class-name">A</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"> </span><span class="token class-name">D</span><span class="token punctuation" style="color:#393A34">]</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token class-name">D</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">[</span><span class="token class-name">B</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"> </span><span class="token class-name">C</span><span class="token punctuation" style="color:#393A34">]</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="क्लिपबोर्ड पर कोड कॉपी करें" title="कॉपी" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg viewBox="0 0 24 24" class="copyButtonIcon_y97N"><path fill="currentColor" d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg viewBox="0 0 24 24" class="copyButtonSuccessIcon_LjdS"><path fill="currentColor" d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div>
<h3 class="anchor anchorWithStickyNavbar_LWe7" id="real-world-applications">Real-World Applications<a href="https://ajay-dhangar.github.io/algo/hi/blog/understanding-graph-representation-adjacency-matrix-vs-adjacency-list#real-world-applications" class="hash-link" aria-label="Real-World Applications का सीधा लिंक" title="Real-World Applications का सीधा लिंक">​</a></h3>
<p>Understanding how to represent graphs using adjacency matrices and adjacency lists is crucial in many applications, such as:
-<strong>Social Network Analysis</strong>: Modeling relationships between users.
-<strong>Routing Algorithms</strong>: Efficiently determining paths in networks.
-<strong>Computer Networks</strong>: Representing connections in a network topology.</p>
<h2 class="anchor anchorWithStickyNavbar_LWe7" id="conclusion">Conclusion<a href="https://ajay-dhangar.github.io/algo/hi/blog/understanding-graph-representation-adjacency-matrix-vs-adjacency-list#conclusion" class="hash-link" aria-label="Conclusion का सीधा लिंक" title="Conclusion का सीधा ��लिंक">​</a></h2>
<p>Choosing the right graph representation is essential for optimizing the performance of graph algorithms. Adjacency matrices and adjacency lists each have their strengths and weaknesses, making them suitable for different scenarios. Mastering these representations will enhance your understanding of graph theory and improve your problem-solving skills in computer science.</p>]]></content:encoded>
            <author>22wh1a1295@bvrithyderabad.edu.in (Grandhi Harshitha)</author>
            <category>Harshitha-Grandhi</category>
            <category>algo</category>
            <category>dsa</category>
            <category>algorithms</category>
            <category>graph-theory</category>
        </item>
        <item>
            <title><![CDATA[A Very Useful Data Structure - Linked Lists]]></title>
            <link>https://ajay-dhangar.github.io/algo/hi/blog/a-very-useful-data-structure-linked-lists</link>
            <guid>https://ajay-dhangar.github.io/algo/hi/blog/a-very-useful-data-structure-linked-lists</guid>
            <pubDate>Thu, 07 Nov 2024 17:28:29 GMT</pubDate>
            <description><![CDATA[A linked list is a linear data structure where elements are not stored in contiguous memory locations. Instead, each element, or node, contains data and a pointer to the next node in the sequence. This structure offers flexibility and dynamic memory allocation, making it a powerful tool for various programming tasks.]]></description>
            <content:encoded><![CDATA[<p>A linked list is a linear data structure where elements are not stored in contiguous memory locations. Instead, each element, or node, contains data and a pointer to the next node in the sequence. This structure offers flexibility and dynamic memory allocation, making it a powerful tool for various programming tasks.</p>
<p>In this blog, we'll explore:</p>
<ul>
<li><strong>Dynamic Size</strong>: How linked lists can grow or shrink dynamically as needed.</li>
<li><strong>Efficiency</strong>: The benefits of insertion and deletion operations.</li>
<li><strong>Flexibility</strong>: Representing different data structures.</li>
</ul>
<hr>
<h2 class="anchor anchorWithStickyNavbar_LWe7" id="why-use-linked-lists">Why Use Linked Lists?<a href="https://ajay-dhangar.github.io/algo/hi/blog/a-very-useful-data-structure-linked-lists#why-use-linked-lists" class="hash-link" aria-label="Why Use Linked Lists? का सीधा लिंक" title="Why Use Linked Lists? का सीधा लिंक">​</a></h2>
<ul>
<li><strong>Dynamic Size:</strong> Linked lists can grow or shrink dynamically as needed, unlike arrays which have a fixed size.</li>
<li><strong>Efficient Insertion and Deletion:</strong> Inserting or deleting elements in a linked list is efficient, especially when operations are performed at the beginning or end of the list.</li>
<li><strong>Flexibility:</strong> Linked lists can represent various data structures, such as stacks, queues, and trees.</li>
<li><strong>Memory Efficient:</strong> Linked lists can be more memory efficient than arrays in certain scenarios, as they don't require contiguous memory allocation.</li>
</ul>
<h2 class="anchor anchorWithStickyNavbar_LWe7" id="types-of-linked-lists">Types of Linked Lists<a href="https://ajay-dhangar.github.io/algo/hi/blog/a-very-useful-data-structure-linked-lists#types-of-linked-lists" class="hash-link" aria-label="Types of Linked Lists का सीधा लिंक" title="Types of Linked Lists का सीधा लिंक">​</a></h2>
<ol>
<li><strong>Singly Linked List:</strong> Each node points to the next node.</li>
<li><strong>Doubly Linked List:</strong> Each node points to both the next and previous nodes.</li>
<li><strong>Circular Linked List:</strong> The last node points back to the first node, forming a circular structure.</li>
</ol>
<h2 class="anchor anchorWithStickyNavbar_LWe7" id="common-operations-on-linked-lists">Common Operations on Linked Lists<a href="https://ajay-dhangar.github.io/algo/hi/blog/a-very-useful-data-structure-linked-lists#common-operations-on-linked-lists" class="hash-link" aria-label="Common Operations on Linked Lists का सीधा लिंक" title="Common Operations on Linked Lists का सीधा लिंक">​</a></h2>
<ul>
<li><strong>Traversal:</strong> Iterating through the list to access each node.</li>
<li><strong>Insertion:</strong> Adding a new node at a specific position.</li>
<li><strong>Deletion:</strong> Removing a node from a specific position.</li>
<li><strong>Searching:</strong> Finding a node with a specific value.</li>
<li><strong>Reversal:</strong> Reversing the order of nodes in the list.</li>
</ul>
<h2 class="anchor anchorWithStickyNavbar_LWe7" id="real-world-applications">Real-world Applications<a href="https://ajay-dhangar.github.io/algo/hi/blog/a-very-useful-data-structure-linked-lists#real-world-applications" class="hash-link" aria-label="Real-world Applications का सीधा लिंक" title="Real-world Applications का सीधा लिंक">​</a></h2>
<ul>
<li>Implementing data structures like stacks and queues</li>
<li>Managing dynamic memory</li>
<li>Creating undo/redo functionality in software</li>
<li>Implementing music players and video players</li>
<li>Implementing hash tables</li>
</ul>
<h2 class="anchor anchorWithStickyNavbar_LWe7" id="c-code-examples">C Code Examples<a href="https://ajay-dhangar.github.io/algo/hi/blog/a-very-useful-data-structure-linked-lists#c-code-examples" class="hash-link" aria-label="C Code Examples का सीधा लिंक" title="C Code Examples का सीधा लिंक">​</a></h2>
<h3 class="anchor anchorWithStickyNavbar_LWe7" id="singly-linked-list">Singly Linked List<a href="https://ajay-dhangar.github.io/algo/hi/blog/a-very-useful-data-structure-linked-lists#singly-linked-list" class="hash-link" aria-label="Singly Linked List का सीधा लिंक" title="Singly Linked List का सीधा लिंक">​</a></h3>
<div class="language-c codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-c codeBlock_bY9V thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token macro property directive-hash" style="color:#36acaa">#</span><span class="token macro property directive keyword" style="color:#00009f">include</span><span class="token macro property" style="color:#36acaa"> </span><span class="token macro property string" style="color:#e3116c">&lt;stdio.h&gt;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token macro property directive-hash" style="color:#36acaa">#</span><span class="token macro property directive keyword" style="color:#00009f">include</span><span class="token macro property" style="color:#36acaa"> </span><span class="token macro property string" style="color:#e3116c">&lt;stdlib.h&gt;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token keyword" style="color:#00009f">struct</span><span class="token plain"> </span><span class="token class-name">Node</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    </span><span class="token keyword" style="color:#00009f">int</span><span class="token plain"> data</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    </span><span class="token keyword" style="color:#00009f">struct</span><span class="token plain"> </span><span class="token class-name">Node</span><span class="token operator" style="color:#393A34">*</span><span class="token plain"> next</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token punctuation" style="color:#393A34">}</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token comment" style="color:#999988;font-style:italic">// Function to create a new node</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token keyword" style="color:#00009f">struct</span><span class="token plain"> </span><span class="token class-name">Node</span><span class="token operator" style="color:#393A34">*</span><span class="token plain"> </span><span class="token function" style="color:#d73a49">newNode</span><span class="token punctuation" style="color:#393A34">(</span><span class="token keyword" style="color:#00009f">int</span><span class="token plain"> data</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    </span><span class="token keyword" style="color:#00009f">struct</span><span class="token plain"> </span><span class="token class-name">Node</span><span class="token operator" style="color:#393A34">*</span><span class="token plain"> new_node </span><span class="token operator" style="color:#393A34">=</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">(</span><span class="token keyword" style="color:#00009f">struct</span><span class="token plain"> </span><span class="token class-name">Node</span><span class="token operator" style="color:#393A34">*</span><span class="token punctuation" style="color:#393A34">)</span><span class="token function" style="color:#d73a49">malloc</span><span class="token punctuation" style="color:#393A34">(</span><span class="token keyword" style="color:#00009f">sizeof</span><span class="token punctuation" style="color:#393A34">(</span><span class="token keyword" style="color:#00009f">struct</span><span class="token plain"> </span><span class="token class-name">Node</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    new_node</span><span class="token operator" style="color:#393A34">-&gt;</span><span class="token plain">data </span><span class="token operator" style="color:#393A34">=</span><span class="token plain"> data</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    new_node</span><span class="token operator" style="color:#393A34">-&gt;</span><span class="token plain">next </span><span class="token operator" style="color:#393A34">=</span><span class="token plain"> </span><span class="token constant" style="color:#36acaa">NULL</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    </span><span class="token keyword" style="color:#00009f">return</span><span class="token plain"> new_node</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token punctuation" style="color:#393A34">}</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token comment" style="color:#999988;font-style:italic">// Function to insert a new node at the beginning</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token keyword" style="color:#00009f">void</span><span class="token plain"> </span><span class="token function" style="color:#d73a49">insertAtBeginning</span><span class="token punctuation" style="color:#393A34">(</span><span class="token keyword" style="color:#00009f">struct</span><span class="token plain"> </span><span class="token class-name">Node</span><span class="token operator" style="color:#393A34">*</span><span class="token operator" style="color:#393A34">*</span><span class="token plain"> head_ref</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"> </span><span class="token keyword" style="color:#00009f">int</span><span class="token plain"> new_data</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    </span><span class="token keyword" style="color:#00009f">struct</span><span class="token plain"> </span><span class="token class-name">Node</span><span class="token operator" style="color:#393A34">*</span><span class="token plain"> new_node </span><span class="token operator" style="color:#393A34">=</span><span class="token plain"> </span><span class="token function" style="color:#d73a49">newNode</span><span class="token punctuation" style="color:#393A34">(</span><span class="token plain">new_data</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    new_node</span><span class="token operator" style="color:#393A34">-&gt;</span><span class="token plain">next </span><span class="token operator" style="color:#393A34">=</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">(</span><span class="token operator" style="color:#393A34">*</span><span class="token plain">head_ref</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    </span><span class="token punctuation" style="color:#393A34">(</span><span class="token operator" style="color:#393A34">*</span><span class="token plain">head_ref</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"> </span><span class="token operator" style="color:#393A34">=</span><span class="token plain"> new_node</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token punctuation" style="color:#393A34">}</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token comment" style="color:#999988;font-style:italic">// Function to print the linked list</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token keyword" style="color:#00009f">void</span><span class="token plain"> </span><span class="token function" style="color:#d73a49">printList</span><span class="token punctuation" style="color:#393A34">(</span><span class="token keyword" style="color:#00009f">struct</span><span class="token plain"> </span><span class="token class-name">Node</span><span class="token operator" style="color:#393A34">*</span><span class="token plain"> head</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    </span><span class="token keyword" style="color:#00009f">struct</span><span class="token plain"> </span><span class="token class-name">Node</span><span class="token operator" style="color:#393A34">*</span><span class="token plain"> temp </span><span class="token operator" style="color:#393A34">=</span><span class="token plain"> head</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    </span><span class="token keyword" style="color:#00009f">while</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">(</span><span class="token plain">temp </span><span class="token operator" style="color:#393A34">!=</span><span class="token plain"> </span><span class="token constant" style="color:#36acaa">NULL</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">        </span><span class="token function" style="color:#d73a49">printf</span><span class="token punctuation" style="color:#393A34">(</span><span class="token string" style="color:#e3116c">"%d "</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"> temp</span><span class="token operator" style="color:#393A34">-&gt;</span><span class="token plain">data</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">        temp </span><span class="token operator" style="color:#393A34">=</span><span class="token plain"> temp</span><span class="token operator" style="color:#393A34">-&gt;</span><span class="token plain">next</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    </span><span class="token punctuation" style="color:#393A34">}</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    </span><span class="token function" style="color:#d73a49">printf</span><span class="token punctuation" style="color:#393A34">(</span><span class="token string" style="color:#e3116c">"\n"</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token punctuation" style="color:#393A34">}</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token keyword" style="color:#00009f">int</span><span class="token plain"> </span><span class="token function" style="color:#d73a49">main</span><span class="token punctuation" style="color:#393A34">(</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    </span><span class="token keyword" style="color:#00009f">struct</span><span class="token plain"> </span><span class="token class-name">Node</span><span class="token operator" style="color:#393A34">*</span><span class="token plain"> head </span><span class="token operator" style="color:#393A34">=</span><span class="token plain"> </span><span class="token constant" style="color:#36acaa">NULL</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    </span><span class="token function" style="color:#d73a49">insertAtBeginning</span><span class="token punctuation" style="color:#393A34">(</span><span class="token operator" style="color:#393A34">&amp;</span><span class="token plain">head</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"> </span><span class="token number" style="color:#36acaa">3</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    </span><span class="token function" style="color:#d73a49">insertAtBeginning</span><span class="token punctuation" style="color:#393A34">(</span><span class="token operator" style="color:#393A34">&amp;</span><span class="token plain">head</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"> </span><span class="token number" style="color:#36acaa">2</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    </span><span class="token function" style="color:#d73a49">insertAtBeginning</span><span class="token punctuation" style="color:#393A34">(</span><span class="token operator" style="color:#393A34">&amp;</span><span class="token plain">head</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"> </span><span class="token number" style="color:#36acaa">1</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    </span><span class="token function" style="color:#d73a49">printList</span><span class="token punctuation" style="color:#393A34">(</span><span class="token plain">head</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    </span><span class="token keyword" style="color:#00009f">return</span><span class="token plain"> </span><span class="token number" style="color:#36acaa">0</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token punctuation" style="color:#393A34">}</span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="क्लिपबोर्ड पर कोड कॉपी करें" title="कॉपी" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg viewBox="0 0 24 24" class="copyButtonIcon_y97N"><path fill="currentColor" d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg viewBox="0 0 24 24" class="copyButtonSuccessIcon_LjdS"><path fill="currentColor" d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div>]]></content:encoded>
            <author>aryanrameshjain@gmail.com (Aryan Jain)</author>
            <category>linked-list</category>
            <category>data-structures</category>
            <category>algorithms</category>
            <category>C++</category>
            <category>java</category>
            <category>python</category>
        </item>
        <item>
            <title><![CDATA[A Very Useful Data Structure i.e. String]]></title>
            <link>https://ajay-dhangar.github.io/algo/hi/blog/a-very-useful-data-structure-string</link>
            <guid>https://ajay-dhangar.github.io/algo/hi/blog/a-very-useful-data-structure-string</guid>
            <pubDate>Thu, 07 Nov 2024 17:28:29 GMT</pubDate>
            <description><![CDATA[In data structures, a string is a sequence of characters used to represent text. Strings are commonly used for storing and manipulating textual data in computer programs. They can be manipulated using various operations like concatenation, substring extraction, and comparison.]]></description>
            <content:encoded><![CDATA[<p>In data structures, a string is a sequence of characters used to represent text. Strings are commonly used for storing and manipulating textual data in computer programs. They can be manipulated using various operations like concatenation, substring extraction, and comparison.</p>
<h2 class="anchor anchorWithStickyNavbar_LWe7" id="what-is-string">What is String?<a href="https://ajay-dhangar.github.io/algo/hi/blog/a-very-useful-data-structure-string#what-is-string" class="hash-link" aria-label="What is String? का सीधा लिंक" title="What is String? का सीधा लिंक">​</a></h2>
<p>In Data Structure, a string is a data type used to represent a sequence of characters. Strings can include letters, numbers, symbols, and spaces. They are often used to represent text, such as words, sentences, or any collection of readable characters.</p>
<p><strong>Below are Some Examples of String:</strong></p>
<div class="language-markdown codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-markdown codeBlock_bY9V thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token plain">"geeks","for","geeks""GeeksforGeeks" ,"Geeks for Geeks","123Geeks","@123 Geeks"</span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="क्लिपबोर्ड पर कोड कॉपी करें" title="कॉपी" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg viewBox="0 0 24 24" class="copyButtonIcon_y97N"><path fill="currentColor" d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg viewBox="0 0 24 24" class="copyButtonSuccessIcon_LjdS"><path fill="currentColor" d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div>
<h2 class="anchor anchorWithStickyNavbar_LWe7" id="how-string-is-represented">How String is Represented:<a href="https://ajay-dhangar.github.io/algo/hi/blog/a-very-useful-data-structure-string#how-string-is-represented" class="hash-link" aria-label="How String is Represented: का सीधा लिंक" title="How String is Represented: का सीधा लिंक">​</a></h2>
<p>In C, a string can be referred to either using a character pointer or as a character array. Here are some important points:</p>
<ul>
<li>
<p><strong>Character Array</strong>: When strings are declared as character arrays, they are stored like other types of arrays in C.</p>
<div class="language-c codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-c codeBlock_bY9V thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token keyword" style="color:#00009f">char</span><span class="token plain"> str</span><span class="token punctuation" style="color:#393A34">[</span><span class="token punctuation" style="color:#393A34">]</span><span class="token plain"> </span><span class="token operator" style="color:#393A34">=</span><span class="token plain"> </span><span class="token string" style="color:#e3116c">"Hello, World!"</span><span class="token punctuation" style="color:#393A34">;</span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="क्लिपबोर्ड पर कोड कॉपी करें" title="कॉपी" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg viewBox="0 0 24 24" class="copyButtonIcon_y97N"><path fill="currentColor" d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg viewBox="0 0 24 24" class="copyButtonSuccessIcon_LjdS"><path fill="currentColor" d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div>
<ul>
<li>If <code>str[]</code> is an auto variable, the string is stored in the stack segment.</li>
<li>If <code>str[]</code> is a global or static variable, it is stored in the data segment.</li>
</ul>
</li>
<li>
<p><strong>Character Pointer</strong>: Strings can also be referred to using a character pointer.</p>
<div class="language-c codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-c codeBlock_bY9V thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token keyword" style="color:#00009f">char</span><span class="token plain"> </span><span class="token operator" style="color:#393A34">*</span><span class="token plain">str </span><span class="token operator" style="color:#393A34">=</span><span class="token plain"> </span><span class="token string" style="color:#e3116c">"Hello, World!"</span><span class="token punctuation" style="color:#393A34">;</span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="क्लिपबोर्ड पर कोड कॉपी करें" title="कॉपी" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg viewBox="0 0 24 24" class="copyButtonIcon_y97N"><path fill="currentColor" d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg viewBox="0 0 24 24" class="copyButtonSuccessIcon_LjdS"><path fill="currentColor" d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div>
<ul>
<li>The string literal is stored in the read-only section of memory, and <code>str</code> points to this location.</li>
</ul>
</li>
</ul>
<p>Understanding these storage mechanisms is crucial for efficient memory management and avoiding common pitfalls like buffer overflows.</p>
<h3 class="anchor anchorWithStickyNavbar_LWe7" id="how-string-is-represented-in-memory">How String is represented in Memory:<a href="https://ajay-dhangar.github.io/algo/hi/blog/a-very-useful-data-structure-string#how-string-is-represented-in-memory" class="hash-link" aria-label="How String is represented in Memory: का सीधा लिंक" title="How String is represented in Memory: का सीधा लिंक">​</a></h3>
<p>In C, a string can be referred to either using a character pointer or as a character array. When strings are declared as character arrays, they are stored like other types of arrays in C. For example, if str[] is an auto variable then the string is stored in the stack segment, if it’s a global or static variable then stored in the data segment, etc.</p>
<hr>
<h3 class="anchor anchorWithStickyNavbar_LWe7" id="declaration-of-strings">Declaration of Strings:<a href="https://ajay-dhangar.github.io/algo/hi/blog/a-very-useful-data-structure-string#declaration-of-strings" class="hash-link" aria-label="Declaration of Strings: का सीधा लिंक" title="Declaration of Strings: का सीधा लिंक">​</a></h3>
<p>In various programming languages, strings can be declared in different ways. Here are some examples:</p>
<ul>
<li>
<p><strong>C++</strong>:</p>
<div class="language-cpp codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-cpp codeBlock_bY9V thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token plain">std</span><span class="token double-colon punctuation" style="color:#393A34">::</span><span class="token plain">string str </span><span class="token operator" style="color:#393A34">=</span><span class="token plain"> </span><span class="token string" style="color:#e3116c">"Hello, World!"</span><span class="token punctuation" style="color:#393A34">;</span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="क्लिपबोर्ड पर कोड कॉपी करें" title="कॉपी" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg viewBox="0 0 24 24" class="copyButtonIcon_y97N"><path fill="currentColor" d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg viewBox="0 0 24 24" class="copyButtonSuccessIcon_LjdS"><path fill="currentColor" d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div>
</li>
<li>
<p><strong>Java</strong>:</p>
<div class="language-java codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-java codeBlock_bY9V thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token class-name">String</span><span class="token plain"> str </span><span class="token operator" style="color:#393A34">=</span><span class="token plain"> </span><span class="token string" style="color:#e3116c">"Hello, World!"</span><span class="token punctuation" style="color:#393A34">;</span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="क्लिपबोर्ड पर कोड कॉपी करें" title="कॉपी" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg viewBox="0 0 24 24" class="copyButtonIcon_y97N"><path fill="currentColor" d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg viewBox="0 0 24 24" class="copyButtonSuccessIcon_LjdS"><path fill="currentColor" d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div>
</li>
<li>
<p><strong>Python</strong>:</p>
<div class="language-python codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-python codeBlock_bY9V thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token builtin">str</span><span class="token plain"> </span><span class="token operator" style="color:#393A34">=</span><span class="token plain"> </span><span class="token string" style="color:#e3116c">"Hello, World!"</span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="क्लिपबोर्ड पर कोड कॉपी करें" title="कॉपी" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg viewBox="0 0 24 24" class="copyButtonIcon_y97N"><path fill="currentColor" d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg viewBox="0 0 24 24" class="copyButtonSuccessIcon_LjdS"><path fill="currentColor" d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div>
</li>
</ul>
<p>Each language has its own syntax and methods for handling strings, but the fundamental concept remains the same: a string is a sequence of characters.</p>]]></content:encoded>
            <author>vrishi7654@gmail.com (Rishi Verma)</author>
            <category>string</category>
            <category>algorithms</category>
            <category>dsa</category>
            <category>C++</category>
            <category>narendra-dhangar</category>
            <category>java</category>
            <category>python</category>
            <category>data-structures</category>
        </item>
        <item>
            <title><![CDATA[Balancing Speed and Memory: A Guide to Time and Space Complexity]]></title>
            <link>https://ajay-dhangar.github.io/algo/hi/blog/balancing-speed-and-memory-A-Guide-to-Time-and-Space-Complexity</link>
            <guid>https://ajay-dhangar.github.io/algo/hi/blog/balancing-speed-and-memory-A-Guide-to-Time-and-Space-Complexity</guid>
            <pubDate>Thu, 07 Nov 2024 17:28:29 GMT</pubDate>
            <description><![CDATA[At its core, an algorithm is a step-by-step procedure or formula for solving a problem. From following a recipe to searching for a word in a dictionary or navigating the fastest route on Google Maps, algorithms are at work. In the realm of computer science, algorithms are the driving force behind how programs process data, make decisions, and deliver results efficiently.]]></description>
            <content:encoded><![CDATA[<p>At its core, an algorithm is a step-by-step procedure or formula for solving a problem. From following a recipe to searching for a word in a dictionary or navigating the fastest route on Google Maps, algorithms are at work. In the realm of computer science, algorithms are the driving force behind how programs process data, make decisions, and deliver results efficiently.</p>
<p>In this blog, we’ll cover:</p>
<ul>
<li><strong>Why Algorithms are Important</strong></li>
<li><strong>Time Complexity</strong></li>
<li><strong>Space Complexity</strong></li>
<li><strong>The Time-Space Trade-off</strong></li>
<li><strong>Conclusion</strong></li>
</ul>
<h2 class="anchor anchorWithStickyNavbar_LWe7" id="why-are-algorithms-important">Why are Algorithms Important?<a href="https://ajay-dhangar.github.io/algo/hi/blog/balancing-speed-and-memory-A-Guide-to-Time-and-Space-Complexity#why-are-algorithms-important" class="hash-link" aria-label="Why are Algorithms Important? का सीधा लिंक" title="Why are Algorithms Important? का सीधा लिंक">​</a></h2>
<p>Algorithms are crucial because they define how efficiently a task can be performed. The same problem can have multiple solutions, but some solutions are faster, use less memory, or are more scalable. Here's why algorithms matter:</p>
<ul>
<li><strong>Efficiency</strong>: Well-designed algorithms perform tasks faster, saving computing resources and time.</li>
<li><strong>Optimization</strong>: They help in choosing the best possible solution for problems.</li>
<li><strong>Scalability</strong>: Efficient algorithms are key when scaling applications to handle large amounts of data.</li>
</ul>
<p>Let’s imagine you’re searching for a book in a library. You could:</p>
<ul>
<li>Start looking at every shelf randomly until you find it (brute force method).</li>
<li>Or, you could follow the library’s categorization (like starting at the correct genre or alphabetically arranged sections) to minimize the search time.</li>
</ul>
<p>The second approach is more efficient and resembles an algorithm designed to optimize search time. This demonstrates how algorithms allow you to perform tasks in an optimized and structured way.</p>
<p>When evaluating algorithms, two key metrics come into play: <strong>time complexity</strong> and <strong>space complexity</strong>. These determine how efficient an algorithm is in terms of speed and memory usage.</p>
<h2 class="anchor anchorWithStickyNavbar_LWe7" id="time-complexity">Time Complexity<a href="https://ajay-dhangar.github.io/algo/hi/blog/balancing-speed-and-memory-A-Guide-to-Time-and-Space-Complexity#time-complexity" class="hash-link" aria-label="Time Complexity का सीधा लिंक" title="Time Complexity का सीधा लिंक">​</a></h2>
<p>Time complexity refers to how an algorithm’s runtime scales as the input size grows. It is expressed using Big O notation. Common examples include:</p>
<ul>
<li><strong>O(1)</strong>: Constant time—performance remains the same regardless of input size.</li>
<li><strong>O(n)</strong>: Linear time—the runtime increases proportionally to the input size.</li>
<li><strong>O(n²)</strong>: Quadratic time—common in nested loops, it slows down significantly as input size grows.</li>
</ul>
<p>For example, if you’re sorting a list, algorithms with <strong>O(n log n)</strong> (like Merge Sort) are more efficient than <strong>O(n²)</strong> (like Bubble Sort) for large datasets.</p>
<h2 class="anchor anchorWithStickyNavbar_LWe7" id="space-complexity">Space Complexity<a href="https://ajay-dhangar.github.io/algo/hi/blog/balancing-speed-and-memory-A-Guide-to-Time-and-Space-Complexity#space-complexity" class="hash-link" aria-label="Space Complexity का सीधा लिंक" title="Space Complexity का सीधा लिंक">​</a></h2>
<p>Space complexity measures how much memory an algorithm uses as the input size increases. Some algorithms might be fast but require extra memory, while others might be slower but use less memory. Common space complexities include:</p>
<ul>
<li><strong>O(1)</strong>: Constant space—no extra memory used.</li>
<li><strong>O(n)</strong>: Linear space—memory usage grows with the input size.</li>
</ul>
<p>For example, sorting algorithms like Merge Sort require additional memory, while Quick Sort can sort "in place," using less memory.</p>
<h2 class="anchor anchorWithStickyNavbar_LWe7" id="the-time-space-trade-off">The Time-Space Trade-off<a href="https://ajay-dhangar.github.io/algo/hi/blog/balancing-speed-and-memory-A-Guide-to-Time-and-Space-Complexity#the-time-space-trade-off" class="hash-link" aria-label="The Time-Space Trade-off का सीधा लिंक" title="The Time-Space Trade-off का सीधा लिंक">​</a></h2>
<p>In practice, developers often face a trade-off between time and space complexity. A faster algorithm may use more memory, while a memory-efficient algorithm might be slower. The key is to balance both, depending on the problem’s requirements.</p>
<h2 class="anchor anchorWithStickyNavbar_LWe7" id="conclusion">Conclusion<a href="https://ajay-dhangar.github.io/algo/hi/blog/balancing-speed-and-memory-A-Guide-to-Time-and-Space-Complexity#conclusion" class="hash-link" aria-label="Conclusion का सीधा लिंक" title="Conclusion का सीधा लिंक">​</a></h2>
<p>Understanding the balance between time and space complexity is crucial for developing efficient algorithms. By evaluating the trade-offs, you can choose the best approach for your specific problem. This knowledge not only enhances your coding skills but also prepares you to tackle larger datasets effectively. Embrace the principles of algorithm efficiency to optimize your applications and ensure scalable solutions.</p>]]></content:encoded>
            <author>adityajani616@gmail.com (Aditya Jani)</author>
            <category>ADITYA-JANI</category>
            <category>algorithms</category>
            <category>time-complexity</category>
            <category>dsa</category>
            <category>space-complexity</category>
            <category>big-o-notation</category>
            <category>efficiency</category>
            <category>optimization</category>
            <category>coding</category>
            <category>programming</category>
            <category>computer-science</category>
            <category>learning</category>
        </item>
        <item>
            <title><![CDATA[Language Matters: Your Path to DSA Success Starts Here]]></title>
            <link>https://ajay-dhangar.github.io/algo/hi/blog/language-matters-your-path-to-dsa-success-starts-here</link>
            <guid>https://ajay-dhangar.github.io/algo/hi/blog/language-matters-your-path-to-dsa-success-starts-here</guid>
            <pubDate>Thu, 07 Nov 2024 17:28:29 GMT</pubDate>
            <description><![CDATA[In the realm of computer science and software development, mastering Data Structures and Algorithms (DSA) is crucial for creating efficient and effective software solutions. However, a common question arises: Which programming language should one choose to learn DSA? This blog explores the factors to consider when choosing a language for DSA, highlights some of the most popular languages, and provides recommendations based on various scenarios.]]></description>
            <content:encoded><![CDATA[<p>In the realm of computer science and software development, mastering Data Structures and Algorithms (DSA) is crucial for creating efficient and effective software solutions. However, a common question arises: Which programming language should one choose to learn DSA? This blog explores the factors to consider when choosing a language for DSA, highlights some of the most popular languages, and provides recommendations based on various scenarios.</p>
<p>In this blog, we’ll cover:</p>
<ul>
<li><strong>Factors to Consider</strong></li>
<li><strong>Popular Languages for DSA</strong></li>
<li><strong>Conclusion</strong></li>
</ul>
<hr>
<h2 class="anchor anchorWithStickyNavbar_LWe7" id="factors-to-consider">Factors to Consider<a href="https://ajay-dhangar.github.io/algo/hi/blog/language-matters-your-path-to-dsa-success-starts-here#factors-to-consider" class="hash-link" aria-label="Factors to Consider का सीधा लिंक" title="Factors to Consider का सीधा लिंक">​</a></h2>
<ul>
<li>
<p><strong>Syntax</strong>: Choose a language with clear syntax to focus on concepts rather than complexity.</p>
</li>
<li>
<p><strong>Community</strong>: A strong community provides support and resources for learning.</p>
</li>
<li>
<p><strong>Performance</strong>: Consider the efficiency of the language, especially for computationally intensive tasks.</p>
</li>
<li>
<p><strong>Industry Relevance</strong>: Opt for languages in demand in the job market.</p>
</li>
<li>
<p><strong>Personal Preference</strong>: Select a language you enjoy and feel motivated to learn.</p>
</li>
</ul>
<h2 class="anchor anchorWithStickyNavbar_LWe7" id="popular-languages-for-dsa">Popular Languages for DSA<a href="https://ajay-dhangar.github.io/algo/hi/blog/language-matters-your-path-to-dsa-success-starts-here#popular-languages-for-dsa" class="hash-link" aria-label="Popular Languages for DSA का सीधा लिंक" title="Popular Languages for DSA का सीधा लिंक">​</a></h2>
<h3 class="anchor anchorWithStickyNavbar_LWe7" id="1-python">1. Python<a href="https://ajay-dhangar.github.io/algo/hi/blog/language-matters-your-path-to-dsa-success-starts-here#1-python" class="hash-link" aria-label="1. Python का सीधा लिंक" title="1. Python का सीधा लिंक">​</a></h3>
<ul>
<li><strong>Pros</strong>: Simple syntax, rich libraries, large community.</li>
<li><strong>Cons</strong>: Slower performance.</li>
<li><strong>Recommendation</strong>: Ideal for beginners and quick implementation.</li>
</ul>
<h3 class="anchor anchorWithStickyNavbar_LWe7" id="2-java">2. Java<a href="https://ajay-dhangar.github.io/algo/hi/blog/language-matters-your-path-to-dsa-success-starts-here#2-java" class="hash-link" aria-label="2. Java का सीधा लिंक" title="2. Java का सीधा लिंक">​</a></h3>
<ul>
<li><strong>Pros</strong>: Strong OOP features, high performance, extensive resources.</li>
<li><strong>Cons</strong>: More verbose syntax.</li>
<li><strong>Recommendation</strong>: Balanced choice for students and professionals.</li>
</ul>
<h3 class="anchor anchorWithStickyNavbar_LWe7" id="3-c">3. C++<a href="https://ajay-dhangar.github.io/algo/hi/blog/language-matters-your-path-to-dsa-success-starts-here#3-c" class="hash-link" aria-label="3. C++ का सीधा लिंक" title="3. C++ का सीधा लिंक">​</a></h3>
<ul>
<li><strong>Pros</strong>: Fast execution, efficient memory management, STL support.</li>
<li><strong>Cons</strong>: Complex syntax.</li>
<li><strong>Recommendation</strong>: Best for competitive programming and performance-focused projects.</li>
</ul>
<h3 class="anchor anchorWithStickyNavbar_LWe7" id="4-c">4. C#<a href="https://ajay-dhangar.github.io/algo/hi/blog/language-matters-your-path-to-dsa-success-starts-here#4-c" class="hash-link" aria-label="4. C# का सीधा लिंक" title="4. C# का सीधा लिंक">​</a></h3>
<ul>
<li><strong>Pros</strong>: Strong OOP, excellent tooling.</li>
<li><strong>Cons</strong>: Less popular in competitive programming.</li>
<li><strong>Recommendation</strong>: Great for Microsoft environments and game development.</li>
</ul>
<h3 class="anchor anchorWithStickyNavbar_LWe7" id="5-javascript">5. JavaScript<a href="https://ajay-dhangar.github.io/algo/hi/blog/language-matters-your-path-to-dsa-success-starts-here#5-javascript" class="hash-link" aria-label="5. JavaScript का सीधा लिंक" title="5. JavaScript का सीधा लिंक">​</a></h3>
<ul>
<li><strong>Pros</strong>: Widely used in web development, practical application of algorithms.</li>
<li><strong>Cons</strong>: Lower performance compared to compiled languages.</li>
<li><strong>Recommendation</strong>: Suitable for web developers.</li>
</ul>
<h2 class="anchor anchorWithStickyNavbar_LWe7" id="conclusion">Conclusion<a href="https://ajay-dhangar.github.io/algo/hi/blog/language-matters-your-path-to-dsa-success-starts-here#conclusion" class="hash-link" aria-label="Conclusion का सीधा लिंक" title="Conclusion का सीधा लिंक">​</a></h2>
<p>Your choice of language for DSA should align with your goals and preferences. Python is excellent for beginners, while C++ suits competitive programmers. Java and C# are ideal for application development. Focus on mastering DSA concepts, and the programming language will enhance your problem-solving abilities.</p>]]></content:encoded>
            <author>adityajani616@gmail.com (Aditya Jani)</author>
            <category>ADITYA-JANI</category>
            <category>programming</category>
            <category>dsa</category>
            <category>data-structures</category>
            <category>algorithms</category>
            <category>python</category>
            <category>java</category>
            <category>c++</category>
            <category>learning</category>
        </item>
        <item>
            <title><![CDATA[Mastering Recursion: Concepts, Problems, and Optimization]]></title>
            <link>https://ajay-dhangar.github.io/algo/hi/blog/mastering-recursion</link>
            <guid>https://ajay-dhangar.github.io/algo/hi/blog/mastering-recursion</guid>
            <pubDate>Thu, 07 Nov 2024 17:28:29 GMT</pubDate>
            <description><![CDATA[Recursion is a fundamental concept in programming and problem-solving. It provides an elegant solution to many problems, yet understanding recursion requires a solid grasp of the underlying principles. In this blog, we will dive deep into the concept of recursion, explore common recursive problems, and look at techniques for optimizing recursive algorithms.]]></description>
            <content:encoded><![CDATA[<p>Recursion is a fundamental concept in programming and problem-solving. It provides an elegant solution to many problems, yet understanding recursion requires a solid grasp of the underlying principles. In this blog, we will dive deep into the concept of recursion, explore common recursive problems, and look at techniques for optimizing recursive algorithms.</p>
<h2 class="anchor anchorWithStickyNavbar_LWe7" id="what-is-recursion">What is Recursion?<a href="https://ajay-dhangar.github.io/algo/hi/blog/mastering-recursion#what-is-recursion" class="hash-link" aria-label="What is Recursion? का सीधा लिंक" title="What is Recursion? का सीधा लिंक">​</a></h2>
<p>Recursion is a process where a function calls itself to solve a problem. A recursive function breaks down a problem into smaller, easier-to-solve sub-problems.</p>
<h3 class="anchor anchorWithStickyNavbar_LWe7" id="structure-of-a-recursive-function">Structure of a Recursive Function:<a href="https://ajay-dhangar.github.io/algo/hi/blog/mastering-recursion#structure-of-a-recursive-function" class="hash-link" aria-label="Structure of a Recursive Function: का सीधा लिंक" title="Structure of a Recursive Function: का सीधा लिंक">​</a></h3>
<p>A typical recursive function consists of two main parts:</p>
<ol>
<li><strong>Base Case</strong>: The condition under which the recursion ends. Without this, the function would call itself indefinitely, leading to a stack overflow.</li>
<li><strong>Recursive Case</strong>: The part where the function calls itself to solve smaller instances of the problem.</li>
</ol>
<h3 class="anchor anchorWithStickyNavbar_LWe7" id="example-of-recursion">Example of Recursion:<a href="https://ajay-dhangar.github.io/algo/hi/blog/mastering-recursion#example-of-recursion" class="hash-link" aria-label="Example of Recursion: का सीधा लिंक" title="Example of Recursion: का सीधा लिंक">​</a></h3>
<p>Here’s a simple example of recursion, calculating the factorial of a number <code>n</code>:</p>
<div class="language-javascript codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-javascript codeBlock_bY9V thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token keyword" style="color:#00009f">function</span><span class="token plain"> </span><span class="token function" style="color:#d73a49">factorial</span><span class="token punctuation" style="color:#393A34">(</span><span class="token parameter">n</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token keyword control-flow" style="color:#00009f">if</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">(</span><span class="token plain">n </span><span class="token operator" style="color:#393A34">===</span><span class="token plain"> </span><span class="token number" style="color:#36acaa">0</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    </span><span class="token keyword control-flow" style="color:#00009f">return</span><span class="token plain"> </span><span class="token number" style="color:#36acaa">1</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"> </span><span class="token comment" style="color:#999988;font-style:italic">// Base case: factorial of 0 is 1</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token punctuation" style="color:#393A34">}</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token keyword control-flow" style="color:#00009f">return</span><span class="token plain"> n </span><span class="token operator" style="color:#393A34">*</span><span class="token plain"> </span><span class="token function" style="color:#d73a49">factorial</span><span class="token punctuation" style="color:#393A34">(</span><span class="token plain">n </span><span class="token operator" style="color:#393A34">-</span><span class="token plain"> </span><span class="token number" style="color:#36acaa">1</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"> </span><span class="token comment" style="color:#999988;font-style:italic">// Recursive case</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token punctuation" style="color:#393A34">}</span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="क्लिपबोर्ड पर कोड कॉपी करें" title="कॉपी" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg viewBox="0 0 24 24" class="copyButtonIcon_y97N"><path fill="currentColor" d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg viewBox="0 0 24 24" class="copyButtonSuccessIcon_LjdS"><path fill="currentColor" d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div>
<p>In this example, the problem of calculating the factorial is broken down into multiplying <code>n</code> by the factorial of <code>n - 1</code>, until it reaches the base case.</p>
<hr>
<h2 class="anchor anchorWithStickyNavbar_LWe7" id="key-concepts-in-recursion">Key Concepts in Recursion:<a href="https://ajay-dhangar.github.io/algo/hi/blog/mastering-recursion#key-concepts-in-recursion" class="hash-link" aria-label="Key Concepts in Recursion: का सीधा लिंक" title="Key Concepts in Recursion: का सीधा लिंक">​</a></h2>
<ol>
<li>
<p><strong>Base Case and Recursive Case</strong>: These are the most critical components of any recursive function. Without a base case, your function will recurse infinitely.</p>
</li>
<li>
<p><strong>Stack Memory</strong>: Every time a recursive function is called, its execution is stored in the stack. When the base case is reached, the function starts returning, popping values off the stack.</p>
</li>
<li>
<p><strong>Recursive Tree</strong>: Visualizing recursion as a tree can help in understanding how recursive calls are executed. Each recursive call splits into further sub-calls until the base case is hit.</p>
</li>
</ol>
<h3 class="anchor anchorWithStickyNavbar_LWe7" id="common-pitfalls">Common Pitfalls:<a href="https://ajay-dhangar.github.io/algo/hi/blog/mastering-recursion#common-pitfalls" class="hash-link" aria-label="Common Pitfalls: का सीधा लिंक" title="Common Pitfalls: का सीधा लिंक">​</a></h3>
<ul>
<li><strong>Missing Base Case</strong>: Leads to infinite recursion.</li>
<li><strong>Redundant Computations</strong>: In some problems, recursive calls recompute the same values multiple times (like in the Fibonacci sequence).</li>
</ul>
<hr>
<h2 class="anchor anchorWithStickyNavbar_LWe7" id="recursion-problems">Recursion Problems:<a href="https://ajay-dhangar.github.io/algo/hi/blog/mastering-recursion#recursion-problems" class="hash-link" aria-label="Recursion Problems: का सीधा लिंक" title="Recursion Problems: का सीधा लिंक">​</a></h2>
<h3 class="anchor anchorWithStickyNavbar_LWe7" id="1-fibonacci-series">1. Fibonacci Series:<a href="https://ajay-dhangar.github.io/algo/hi/blog/mastering-recursion#1-fibonacci-series" class="hash-link" aria-label="1. Fibonacci Series: का सीधा लिंक" title="1. Fibonacci Series: का सीधा लिंक">​</a></h3>
<p>The Fibonacci series is a classic problem to demonstrate recursion. The nth Fibonacci number is the sum of the two preceding numbers.</p>
<p><strong>Recursive Fibonacci Solution</strong>:</p>
<div class="language-javascript codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-javascript codeBlock_bY9V thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token keyword" style="color:#00009f">function</span><span class="token plain"> </span><span class="token function" style="color:#d73a49">fibonacci</span><span class="token punctuation" style="color:#393A34">(</span><span class="token parameter">n</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token keyword control-flow" style="color:#00009f">if</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">(</span><span class="token plain">n </span><span class="token operator" style="color:#393A34">&lt;=</span><span class="token plain"> </span><span class="token number" style="color:#36acaa">1</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    </span><span class="token keyword control-flow" style="color:#00009f">return</span><span class="token plain"> n</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"> </span><span class="token comment" style="color:#999988;font-style:italic">// Base case</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token punctuation" style="color:#393A34">}</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token keyword control-flow" style="color:#00009f">return</span><span class="token plain"> </span><span class="token function" style="color:#d73a49">fibonacci</span><span class="token punctuation" style="color:#393A34">(</span><span class="token plain">n </span><span class="token operator" style="color:#393A34">-</span><span class="token plain"> </span><span class="token number" style="color:#36acaa">1</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"> </span><span class="token operator" style="color:#393A34">+</span><span class="token plain"> </span><span class="token function" style="color:#d73a49">fibonacci</span><span class="token punctuation" style="color:#393A34">(</span><span class="token plain">n </span><span class="token operator" style="color:#393A34">-</span><span class="token plain"> </span><span class="token number" style="color:#36acaa">2</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"> </span><span class="token comment" style="color:#999988;font-style:italic">// Recursive case</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token punctuation" style="color:#393A34">}</span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="क्लिपबोर्ड पर कोड कॉपी करें" title="कॉपी" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg viewBox="0 0 24 24" class="copyButtonIcon_y97N"><path fill="currentColor" d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg viewBox="0 0 24 24" class="copyButtonSuccessIcon_LjdS"><path fill="currentColor" d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div>
<p>While this solution is intuitive, it performs redundant computations and can be very slow for larger values of <code>n</code>.</p>
<hr>
<h2 class="anchor anchorWithStickyNavbar_LWe7" id="optimizing-recursive-algorithms">Optimizing Recursive Algorithms:<a href="https://ajay-dhangar.github.io/algo/hi/blog/mastering-recursion#optimizing-recursive-algorithms" class="hash-link" aria-label="Optimizing Recursive Algorithms: का सीधा लिंक" title="Optimizing Recursive Algorithms: का सीधा लिंक">​</a></h2>
<h3 class="anchor anchorWithStickyNavbar_LWe7" id="1-memoization">1. <strong>Memoization</strong>:<a href="https://ajay-dhangar.github.io/algo/hi/blog/mastering-recursion#1-memoization" class="hash-link" aria-label="1-memoization का सीधा लिंक" title="1-memoization का सीधा लिंक">​</a></h3>
<p>Memoization stores the results of expensive function calls and reuses them when the same inputs occur again, reducing the time complexity of the function.</p>
<p><strong>Optimized Fibonacci with Memoization</strong>:</p>
<div class="language-javascript codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-javascript codeBlock_bY9V thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token keyword" style="color:#00009f">function</span><span class="token plain"> </span><span class="token function" style="color:#d73a49">fibonacci</span><span class="token punctuation" style="color:#393A34">(</span><span class="token parameter">n</span><span class="token parameter punctuation" style="color:#393A34">,</span><span class="token parameter"> memo </span><span class="token parameter operator" style="color:#393A34">=</span><span class="token parameter"> </span><span class="token parameter punctuation" style="color:#393A34">{</span><span class="token parameter punctuation" style="color:#393A34">}</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token keyword control-flow" style="color:#00009f">if</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">(</span><span class="token plain">n </span><span class="token keyword" style="color:#00009f">in</span><span class="token plain"> memo</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    </span><span class="token keyword control-flow" style="color:#00009f">return</span><span class="token plain"> memo</span><span class="token punctuation" style="color:#393A34">[</span><span class="token plain">n</span><span class="token punctuation" style="color:#393A34">]</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"> </span><span class="token comment" style="color:#999988;font-style:italic">// Return stored result if available</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token punctuation" style="color:#393A34">}</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token keyword control-flow" style="color:#00009f">if</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">(</span><span class="token plain">n </span><span class="token operator" style="color:#393A34">&lt;=</span><span class="token plain"> </span><span class="token number" style="color:#36acaa">1</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    </span><span class="token keyword control-flow" style="color:#00009f">return</span><span class="token plain"> n</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"> </span><span class="token comment" style="color:#999988;font-style:italic">// Base case</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token punctuation" style="color:#393A34">}</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  memo</span><span class="token punctuation" style="color:#393A34">[</span><span class="token plain">n</span><span class="token punctuation" style="color:#393A34">]</span><span class="token plain"> </span><span class="token operator" style="color:#393A34">=</span><span class="token plain"> </span><span class="token function" style="color:#d73a49">fibonacci</span><span class="token punctuation" style="color:#393A34">(</span><span class="token plain">n </span><span class="token operator" style="color:#393A34">-</span><span class="token plain"> </span><span class="token number" style="color:#36acaa">1</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"> memo</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"> </span><span class="token operator" style="color:#393A34">+</span><span class="token plain"> </span><span class="token function" style="color:#d73a49">fibonacci</span><span class="token punctuation" style="color:#393A34">(</span><span class="token plain">n </span><span class="token operator" style="color:#393A34">-</span><span class="token plain"> </span><span class="token number" style="color:#36acaa">2</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"> memo</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"> </span><span class="token comment" style="color:#999988;font-style:italic">// Recursive call with memoization</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token keyword control-flow" style="color:#00009f">return</span><span class="token plain"> memo</span><span class="token punctuation" style="color:#393A34">[</span><span class="token plain">n</span><span class="token punctuation" style="color:#393A34">]</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token punctuation" style="color:#393A34">}</span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="क्लिपबोर्ड पर कोड कॉपी करें" title="कॉपी" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg viewBox="0 0 24 24" class="copyButtonIcon_y97N"><path fill="currentColor" d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg viewBox="0 0 24 24" class="copyButtonSuccessIcon_LjdS"><path fill="currentColor" d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div>
<p>This optimized version reduces the time complexity from <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>O</mi><mo stretchy="false">(</mo><msup><mn>2</mn><mi>n</mi></msup><mo stretchy="false">)</mo></mrow><annotation encoding="application/x-tex">O(2^n)</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:1em;vertical-align:-0.25em"></span><span class="mord mathnormal" style="margin-right:0.02778em">O</span><span class="mopen">(</span><span class="mord"><span class="mord">2</span><span class="msupsub"><span class="vlist-t"><span class="vlist-r"><span class="vlist" style="height:0.6644em"><span style="top:-3.063em;margin-right:0.05em"><span class="pstrut" style="height:2.7em"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mathnormal mtight">n</span></span></span></span></span></span></span></span><span class="mclose">)</span></span></span></span> to <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>O</mi><mo stretchy="false">(</mo><mi>n</mi><mo stretchy="false">)</mo></mrow><annotation encoding="application/x-tex">O(n)</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:1em;vertical-align:-0.25em"></span><span class="mord mathnormal" style="margin-right:0.02778em">O</span><span class="mopen">(</span><span class="mord mathnormal">n</span><span class="mclose">)</span></span></span></span>.</p>
<h3 class="anchor anchorWithStickyNavbar_LWe7" id="2-tail-recursion">2. <strong>Tail Recursion</strong>:<a href="https://ajay-dhangar.github.io/algo/hi/blog/mastering-recursion#2-tail-recursion" class="hash-link" aria-label="2-tail-recursion का सीधा लिंक" title="2-tail-recursion का सीधा लिंक">​</a></h3>
<p>Tail recursion is a specific form of recursion where the recursive call is the last thing executed by the function. Tail-recursive functions can be optimized by some compilers or interpreters to prevent stack overflow.</p>
<p><strong>Tail-Recursive Factorial</strong>:</p>
<div class="language-javascript codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-javascript codeBlock_bY9V thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token keyword" style="color:#00009f">function</span><span class="token plain"> </span><span class="token function" style="color:#d73a49">tailFactorial</span><span class="token punctuation" style="color:#393A34">(</span><span class="token parameter">n</span><span class="token parameter punctuation" style="color:#393A34">,</span><span class="token parameter"> accumulator </span><span class="token parameter operator" style="color:#393A34">=</span><span class="token parameter"> </span><span class="token parameter number" style="color:#36acaa">1</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token keyword control-flow" style="color:#00009f">if</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">(</span><span class="token plain">n </span><span class="token operator" style="color:#393A34">===</span><span class="token plain"> </span><span class="token number" style="color:#36acaa">0</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    </span><span class="token keyword control-flow" style="color:#00009f">return</span><span class="token plain"> accumulator</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"> </span><span class="token comment" style="color:#999988;font-style:italic">// Base case</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token punctuation" style="color:#393A34">}</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token keyword control-flow" style="color:#00009f">return</span><span class="token plain"> </span><span class="token function" style="color:#d73a49">tailFactorial</span><span class="token punctuation" style="color:#393A34">(</span><span class="token plain">n </span><span class="token operator" style="color:#393A34">-</span><span class="token plain"> </span><span class="token number" style="color:#36acaa">1</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"> n </span><span class="token operator" style="color:#393A34">*</span><span class="token plain"> accumulator</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"> </span><span class="token comment" style="color:#999988;font-style:italic">// Tail-recursive call</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token punctuation" style="color:#393A34">}</span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="क्लिपबोर्ड पर कोड कॉपी करें" title="कॉपी" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg viewBox="0 0 24 24" class="copyButtonIcon_y97N"><path fill="currentColor" d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg viewBox="0 0 24 24" class="copyButtonSuccessIcon_LjdS"><path fill="currentColor" d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div>
<h3 class="anchor anchorWithStickyNavbar_LWe7" id="3-recursion-to-iteration">3. <strong>Recursion to Iteration</strong>:<a href="https://ajay-dhangar.github.io/algo/hi/blog/mastering-recursion#3-recursion-to-iteration" class="hash-link" aria-label="3-recursion-to-iteration का सीधा लिंक" title="3-recursion-to-iteration का सीधा लिंक">​</a></h3>
<p>For some problems, recursion can be replaced with iteration to avoid deep recursion, which can lead to stack overflow. Converting recursive functions to iterative ones ensures better memory management.</p>
<hr>
<h2 class="anchor anchorWithStickyNavbar_LWe7" id="problem-solving-with-recursion">Problem-Solving with Recursion:<a href="https://ajay-dhangar.github.io/algo/hi/blog/mastering-recursion#problem-solving-with-recursion" class="hash-link" aria-label="Problem-Solving with Recursion: का सीधा लिंक" title="Problem-Solving with Recursion: का सीधा लिंक">​</a></h2>
<p>Recursion is widely used to solve various algorithmic problems, such as:</p>
<ol>
<li>
<p><strong>Binary Search</strong>:
A divide-and-conquer algorithm that works efficiently by dividing the array into halves.</p>
</li>
<li>
<p><strong>Towers of Hanoi</strong>:
A mathematical problem that requires moving disks between rods under certain conditions.</p>
</li>
<li>
<p><strong>Permutations and Combinations</strong>:
Recursion is used to generate all possible arrangements of a set of items.</p>
</li>
<li>
<p><strong>Tree Traversal</strong>:
Recursion is the natural way to traverse tree structures, such as in <strong>pre-order</strong>, <strong>in-order</strong>, and <strong>post-order</strong> traversals.</p>
</li>
</ol>
<hr>
<h2 class="anchor anchorWithStickyNavbar_LWe7" id="conclusion">Conclusion:<a href="https://ajay-dhangar.github.io/algo/hi/blog/mastering-recursion#conclusion" class="hash-link" aria-label="Conclusion: का सीधा लिंक" title="Conclusion: का सीधा लिंक">​</a></h2>
<p>Recursion is a powerful tool in a developer's arsenal. However, it is essential to understand when and how to use it effectively. Optimizing recursive algorithms with techniques like memoization, tail recursion, or converting them into iterative solutions ensures they remain efficient even for large inputs.</p>
<p>With practice, mastering recursion will open doors to solving complex problems in a more structured and elegant way.</p>]]></content:encoded>
            <author>narendradhangar63@gmail.com (Narendra Dhangar)</author>
            <category>recursion</category>
            <category>algorithms</category>
            <category>dsa</category>
            <category>optimization</category>
            <category>narendra-dhangar</category>
        </item>
        <item>
            <title><![CDATA[Omega Notation: The Key to Understanding Algorithm Efficiency]]></title>
            <link>https://ajay-dhangar.github.io/algo/hi/blog/omega-notation-the-key-to-understanding-algorithm-efficiency</link>
            <guid>https://ajay-dhangar.github.io/algo/hi/blog/omega-notation-the-key-to-understanding-algorithm-efficiency</guid>
            <pubDate>Thu, 07 Nov 2024 17:28:29 GMT</pubDate>
            <description><![CDATA[When working with algorithms, understanding their performance is crucial, especially in the best-case scenarios. Omega Notation is a mathematical concept that helps computer scientists and developers measure the lower bounds of an algorithm's efficiency. It allows us to analyze how the algorithm’s runtime or space requirements behave in the most favorable conditions.]]></description>
            <content:encoded><![CDATA[<p>When working with algorithms, understanding their performance is crucial, especially in the best-case scenarios. Omega Notation is a mathematical concept that helps computer scientists and developers measure the lower bounds of an algorithm's efficiency. It allows us to analyze how the algorithm’s runtime or space requirements behave in the most favorable conditions.</p>
<p>In this blog, we’ll cover:</p>
<ul>
<li><strong>Why Omega Notation is Important</strong></li>
<li><strong>Time Complexity</strong></li>
<li><strong>Space Complexity</strong></li>
<li><strong>The Omega-Time Trade-off</strong></li>
</ul>
<h2 class="anchor anchorWithStickyNavbar_LWe7" id="what-is-omega-notation">What is Omega Notation?<a href="https://ajay-dhangar.github.io/algo/hi/blog/omega-notation-the-key-to-understanding-algorithm-efficiency#what-is-omega-notation" class="hash-link" aria-label="What is Omega Notation? का सीधा लिंक" title="What is Omega Notation? का सीधा लिंक">​</a></h2>
<p>At its core, Omega Notation describes the best-case scenario for the growth of an algorithm’s runtime or memory usage. It focuses on two main aspects:</p>
<ul>
<li><strong>Time Complexity</strong>: The minimum time an algorithm takes to complete.</li>
<li><strong>Space Complexity</strong>: The minimum memory an algorithm requires.</li>
</ul>
<h3 class="anchor anchorWithStickyNavbar_LWe7" id="important-points">Important Points:<a href="https://ajay-dhangar.github.io/algo/hi/blog/omega-notation-the-key-to-understanding-algorithm-efficiency#important-points" class="hash-link" aria-label="Important Points: का सीधा लिंक" title="Important Points: का सीधा लिंक">​</a></h3>
<ul>
<li>Omega notation describes the asymptotic behavior of a function in the best-case scenario, not its exact value.</li>
<li>It can be used to provide a lower bound for the efficiency of different algorithms or data structures.</li>
</ul>
<h2 class="anchor anchorWithStickyNavbar_LWe7" id="why-is-omega-notation-important">Why is Omega Notation Important?<a href="https://ajay-dhangar.github.io/algo/hi/blog/omega-notation-the-key-to-understanding-algorithm-efficiency#why-is-omega-notation-important" class="hash-link" aria-label="Why is Omega Notation Important? का सीधा लिंक" title="Why is Omega Notation Important? का सीधा लिंक">​</a></h2>
<p>Understanding Omega Notation is essential for assessing the potential efficiency of algorithms. For instance, if you have a sorting algorithm that typically performs well but has a worst-case scenario that significantly slows down performance, knowing the best-case (Omega) can help you gauge its effectiveness.</p>
<p>By knowing the Omega of an algorithm, you can:</p>
<ul>
<li>Identify the best-performing algorithms for specific scenarios.</li>
<li>Make decisions based on optimal conditions.</li>
<li>Develop strategies to enhance algorithm performance under ideal circumstances.</li>
</ul>
<h2 class="anchor anchorWithStickyNavbar_LWe7" id="common-omega-notations">Common Omega Notations<a href="https://ajay-dhangar.github.io/algo/hi/blog/omega-notation-the-key-to-understanding-algorithm-efficiency#common-omega-notations" class="hash-link" aria-label="Common Omega Notations का सीधा लिंक" title="Common Omega Notations का सीधा लिंक">​</a></h2>
<p>Here are some common Omega notations you’ll encounter:</p>
<ul>
<li><strong>Ω(1)</strong>: Constant time—performance remains the same regardless of input size.</li>
<li><strong>Ω(n)</strong>: Linear time—the runtime increases proportionally to the input size.</li>
<li><strong>Ω(n log n)</strong>: Linearithmic time—typical for efficient algorithms that can perform well with larger datasets.</li>
<li><strong>Ω(n²)</strong>: Quadratic time—common in algorithms with nested loops, indicating performance in favorable conditions.</li>
<li><strong>Ω(2ⁿ)</strong>: Exponential time—although inefficient in general, it provides insight into the best-case scenario for certain algorithms.</li>
</ul>
<h2 class="anchor anchorWithStickyNavbar_LWe7" id="understanding-omega-with-a-real-life-example">Understanding Omega with a Real-Life Example<a href="https://ajay-dhangar.github.io/algo/hi/blog/omega-notation-the-key-to-understanding-algorithm-efficiency#understanding-omega-with-a-real-life-example" class="hash-link" aria-label="Understanding Omega with a Real-Life Example का सीधा लिंक" title="Understanding Omega with a Real-Life Example का सीधा लिंक">​</a></h2>
<p>Imagine you're searching for a specific book in a library:</p>
<ul>
<li><strong>Ω(1)</strong>: You ask the librarian, and they instantly tell you where the book is.</li>
<li><strong>Ω(n)</strong>: You find the book on the first shelf you check.</li>
<li><strong>Ω(log n)</strong>: You follow a structured approach, like dividing the library in half each time (binary search).</li>
</ul>
<h2 class="anchor anchorWithStickyNavbar_LWe7" id="conclusion">Conclusion<a href="https://ajay-dhangar.github.io/algo/hi/blog/omega-notation-the-key-to-understanding-algorithm-efficiency#conclusion" class="hash-link" aria-label="Conclusion का सीधा लिंक" title="Conclusion का सीधा लिंक">​</a></h2>
<p>Omega Notation is essential for understanding the efficiency of algorithms in optimal scenarios. By grasping its principles, you can write more effective code, choose the right algorithms, and design scalable applications. Whether you're optimizing your code or analyzing existing algorithms, Omega Notation will always be a crucial tool in your toolkit.</p>]]></content:encoded>
            <author>adityajani616@gmail.com (Aditya Jani)</author>
            <category>ADITYA-JANI</category>
            <category>algorithms</category>
            <category>dsa</category>
            <category>omega-notation</category>
            <category>time-complexity</category>
            <category>space-complexity</category>
            <category>efficiency</category>
            <category>optimization</category>
            <category>coding</category>
            <category>programming</category>
            <category>computer-science</category>
            <category>learning</category>
        </item>
    </channel>
</rss>