3.5.1 · Coding › Graphs
Intuition 30-second picture
Ek graph bas dots connected by lines hota hai. Dots ko vertices (ya nodes ) kehte hain, lines ko edges . Baaki sab — direction, weight, "simple vs multi" — sirf yeh rules hain ki woh lines kya kar sakti hain . Pehle dots-and-lines wala mental model pakad lo; vocabulary toh bas variations ko label karti hai.
Ek graph ek pair G = ( V , E ) hota hai jahan:
V vertices (nodes) ka ek set hai.
E edges ka ek set hai, jahan har edge vertices ki ek pair ko connect karti hai.
Hum usually n = ∣ V ∣ (vertices ki sankhya) aur m = ∣ E ∣ (edges ki sankhya) likhte hain.
YEH abstraction KYO? Kyunki relationships har jagah hain: social network pe dost, roads se jude sheher, hyperlinks se jude web pages, aur tasks jo doosre tasks pe depend karte hain. Ek graph specifics hata deta hai aur sirf "kaun kis se connected hai" rakhta hai — toh ek hi set of algorithms (BFS, Dijkstra, ...) hazaaron alag-alag real problems solve kar deta hai.
Ek graph type ko char on/off switches ki tarah socho. Yeh independent hain — inhe freely mix kar sakte ho (jaise ek directed weighted multigraph).
Definition Directed / Undirected
Undirected edge : ek unordered pair { u , v } . Connection dono taraf jaata hai. Agar u , v se linked hai, toh v bhi u se linked hai.
Directed edge (ek arc ): ek ordered pair ( u , v ) . Yeh sirf u se v ki taraf point karta hai. ( u , v ) aur ( v , u ) alag edges hain.
YEH KYO maayane rakhta hai: Facebook friendship mutual hoti hai → undirected. Twitter "follow" ek-taraf hota hai → directed. Ek directed graph pe aap A → B ja sakte ho lekin B → A nahin bhi ho sakta.
Intuition Direction = arrows
Undirected = plain line —. Directed = arrow →. Woh akela arrowhead change kar deta hai ki kaunse algorithms use karne padenge (jaise topological sort sirf directed graphs ke liye exist karta hai).
Definition Weighted / Unweighted
Unweighted : har edge identical hoti hai; edge ya toh exist karti hai ya nahin.
Weighted : har edge ek number w ( u , v ) carry karti hai — ek weight (cost, distance, time, capacity...).
KYO: "Mere dost tak kitne hops?" weight ignore karta hai (unweighted, BFS). "Sabse sasta flight route?" weight chahiye (Dijkstra). Ek unweighted graph ko weighted treat karna theek hai — bas har weight = 1 set kar do.
Ek self-loop ek vertex se khud apne aap tak jaane wali edge hoti hai: ( v , v ) .
Definition Simple graph vs Multigraph
Ek simple graph mein no self-loops aur no parallel edges hote hain. Kisi bhi do vertices ke beech zyada se zyada ek edge hoti hai.
Ek multigraph parallel edges (aur usually self-loops) allow karta hai .
Multigraph KYO? Do sheher ke beech genuinely do alag roads ho sakti hain, har ek ki apni length ke saath. Ek simple graph tumhe sirf ek rakhne par majboor karega — information kho jaayegi.
Scratch se derive karo — KYO:
Ek edge distinct vertices ka ek unordered pair hoti hai (no self-loops → distinct; simple → zyada se zyada ek).
Toh max edges count karna = n mein se 2 vertices choose karne ke tarike count karna.
Pehli vertex pick karne ke tarike: n . Doosri (alag): n − 1 . Yeh n ( n − 1 ) ordered pairs deta hai.
Lekin { u , v } aur { v , u } same undirected edge hain → hum double-count kar rahe the. 2 se divide karo.
Result: 2 n ( n − 1 ) . ∎
KYO: ab ( u , v ) = ( v , u ) , toh hum 2 se divide nahin karte. n vertices mein se har ek baaki n − 1 vertices ki taraf point kar sakta hai → n ( n − 1 ) .
Ek vertex ka degree deg ( v ) (undirected) = usse touch karne wali edges ki sankhya. (Ek self-loop + 2 count hota hai.) Directed graphs ke liye: in-degree = andar aane wale arrows, out-degree = bahar jaane wale arrows.
Derive karo — KYO: jab tum sabhi vertices ke degrees add karte ho, har edge { u , v } do baar count hoti hai — ek baar u pe aur ek baar v pe. Toh total exactly edges ki sankhya ka do guna hota hai. ∎ (Corollary: odd degree wale vertices ki sankhya hamesha even hoti hai.)
Worked example Example 1 — Graph classify karo
V = { A , B , C } , edges: A − B , B − C , A − B (phir se).
Undirected? Haan (lines, koi arrows nahin). Kyo? Koi ordered pairs nahin diye gaye.
Simple? Nahin — A − B do baar aata hai ⇒ parallel edges ⇒ multigraph . Yeh step kyo: "simple" duplicates forbid karta hai.
m = 3 , toh ∑ deg = 2 ( 3 ) = 6 . Check: deg ( A ) = 2 , deg ( B ) = 3 , deg ( C ) = 1 ⇒ 6 . ✓
Worked example Example 3 — Weighted directed (real)
Flights: ( N Y C → L O N , ... ) 400), (LON \to NYC, $350)$.
Directed: haan, dono arcs ke alag costs hain. Kyo: ek direction book karna ≠ doosra.
Weighted: haan, weight = price. Yahan shortest-path = sabse sasta trip → Dijkstra (non-negative weights).
Common mistake Steel-man: "Ek undirected edge do directed edges ke barabar hai."
Kyo sahi lagta hai: "dono taraf" sunne mein do one-way arrows lagte hain, aur indeed tum undirected { u , v } ko directed ( u , v ) aur ( v , u ) se model kar sakte ho.
Fix / subtlety: modelling trick kaam karta hai, lekin conceptually yeh alag objects hain, aur edge count alag hota hai : ek undirected edge do directed arcs ban jaati hai. Toh m double ho jaata hai. Agar problem kehti hai "undirected, m edges" aur tum dono directions store karo, toh yaad rakho tumhari adjacency list mein 2 m entries hain.
Common mistake Steel-man: "Simple graph matlab easy / kam edges wala."
Kyo sahi lagta hai: "simple" sunne mein "chhota" lagta hai. Fix: simple ek structural rule hai (no self-loops, no parallel edges), size ka claim nahin. Ek simple graph mein phir bhi 2 n ( n − 1 ) edges ho sakti hain — yahi dense complete graph K n hai.
Common mistake Steel-man: "Unweighted graphs shortest-path algorithms use nahin kar sakte."
Kyo sahi lagta hai: Dijkstra weights ke saath padhaaya jaata hai. Fix: ek unweighted graph bas ek weighted graph hai jisme sabhi weights = 1 hain. Plain BFS wahan shortest paths dhundhta hai — aur Dijkstra se fast hai kyunki har edge ka cost same hai.
Recall Feynman: ek 12-saal ke bachche ko samjhao
Socho dots tumhare dost hain, aur jab bhi do log ek doosre ko jaante hain tum ek line kheenchte ho. Woh poori drawing ek graph hai.
Agar "jaanna" dono taraf jaata hai (dosti), ek plain line kheeencho — undirected .
Agar yeh ek-taraf hai ("main usse follow karti hoon, woh mujhe nahin"), ek arrow kheeencho — directed .
Agar kuch dostiyaan zyada mazboot hain, line pe ek number likho — weighted .
Simple matlab: koi dost khud apna dost nahin (no self-loop), aur tum kabhi ek hi pair ke beech do lines nahin kheenchte. Agar tum do lines kheenchte ho (shayad do sheher ke beech do alag roads), toh yeh multigraph hai.
Bas itna hai — "graph theory" ka baaki hissa sirf inhi lines pe chal ke chalne ke clever tarike hain.
Mnemonic 4 switches yaad karo:
"DWSP" → D irection (arrow?), W eight (number?), S elf-loop (allowed?), P arallel edges (allowed?). Aakhiri do milke decide karte hain Simple vs Multi .
Aur max edges ke liye: undirected 2 se divide karta hai ("ek handshake ke liye do log chahiye lekin yeh ek handshake hai").
What two sets define a graph G = ( V , E ) ? V = set of vertices (nodes), E = set of edges jo vertices ke pairs ko connect karti hain.
Difference between a directed and an undirected edge? Directed = ordered pair ( u , v ) , ek-taraf; undirected = unordered pair { u , v } , dono taraf.
What is a weighted graph? Ek graph jahan har edge ek number carry karti hai (cost/distance/time); unweighted mein sabhi edges equal hoti hain (weight 1).
Define a self-loop. Ek vertex se khud apne aap tak jaane wali edge, ( v , v ) .
What are parallel edges? Do ya zyada edges jo same pair of vertices ko connect karti hain.
Define a simple graph. Ek graph jisme no self-loops aur no parallel edges hain (kisi bhi pair ke beech ≤ 1 edge).
Define a multigraph. Ek graph jo parallel edges (aur usually self-loops) allow karta hai.
Max edges in a simple undirected graph on n vertices? ( 2 n ) = 2 n ( n − 1 ) .
Why divide by 2 for undirected max edges? Kyunki { u , v } = { v , u } — har unordered pair n ( n − 1 ) mein do baar count hui thi.
Max edges in a simple directed graph (no self-loops)? n ( n − 1 ) — 2 se divide nahin karte kyunki ( u , v ) = ( v , u ) .
State the Handshaking Lemma. ∑ v deg ( v ) = 2 m ; har edge do endpoints ke degrees mein contribute karti hai.
Corollary of the handshake lemma about odd degrees? Odd degree wale vertices ki sankhya hamesha even hoti hai.
How do you model one undirected edge with directed edges? Do arcs ( u , v ) aur ( v , u ) ke roop mein — toh edge count double ho jaata hai.
What is K n ? Complete graph: ek simple graph jahan vertices ka har pair connected hota hai; iske 2 n ( n − 1 ) edges hote hain.
For directed graphs, what replaces degree? In-degree (incoming arcs) aur out-degree (outgoing arcs).
Graph representations — adjacency list vs matrix (yeh definitions store kaise hoti hain)
BFS — breadth first search (unweighted graphs pe shortest path)
Dijkstra's algorithm (weighted , non-negative graphs pe shortest path)
Topological sort (sirf directed acyclic graphs pe)
Complete graph $K_n$ and dense vs sparse graphs
Handshaking lemma and degree sequences
Trees as special graphs (connected, acyclic, m = n − 1 )
arc is ordered pair enables
n = size of V and m = size of E
Four independent switches