Skip to content

Latest commit

 

History

History
108 lines (86 loc) · 7.79 KB

File metadata and controls

108 lines (86 loc) · 7.79 KB

Network Delay Time - Dijkstra's algorithm - Leetcode 743

Disclaimer: This is a personal summary and interpretation based on a YouTube video. It is not official material and not endorsed by the original creator. All rights remain with the respective creators.

This document summarizes the key takeaways from the video. I highly recommend watching the full video for visual context and coding demonstrations.

Before You Get Started

  • I summarize key points to help you learn and review quickly.
  • Simply click on Ask AI links to dive into any topic you want.

AI-Powered buttons

Teach Me: 5 Years Old | Beginner | Intermediate | Advanced | (reset auto redirect)

Learn Differently: Analogy | Storytelling | Cheatsheet | Mindmap | Flashcards | Practical Projects | Code Examples | Common Mistakes

Check Understanding: Generate Quiz | Interview Me | Refactor Challenge | Assessment Rubric | Next Steps

Problem Introduction

  • Summary: The problem involves a network of n nodes with directed edges representing travel times. Starting from node k, calculate the maximum time for a signal to reach all nodes; return -1 if impossible.
  • Key Takeaway/Example: Nodes are labeled 1 to n, edges are triples [source, target, weight], where weight is the time to traverse the edge. It's a shortest path problem using Dijkstra's algorithm.
  • Link for More Details: Ask AI: Network Delay Time Problem

Example Walkthrough

  • Summary: Using the sample graph, start at node 2. Signal reaches node 1 and 3 in 1 unit each, then node 4 from 3 in total 2 units. The max time is 2.
  • Key Takeaway/Example: If a node is unreachable, return -1. The algorithm ensures we find the time for the last node to receive the signal.
  • Link for More Details: Ask AI: Network Delay Example

Dijkstra's Algorithm Overview

  • Summary: Dijkstra's finds the shortest path from a source in a weighted graph. It uses a priority queue (min-heap) to always expand the shortest path first, similar to BFS but with weights.
  • Key Takeaway/Example: Initialize heap with [0, source]. Pop the min distance node, update neighbors' distances if shorter, and add to heap. Track visited nodes to avoid cycles.
  • Link for More Details: Ask AI: Dijkstra's Algorithm

Algorithm Steps with Example

  • Summary: Start with source in heap at distance 0. While heap is not empty, pop min distance node, mark visited, update max time. For unvisited neighbors, push updated total distance to heap.
  • Key Takeaway/Example: In the example graph, paths are relaxed if a shorter route is found, like reaching node 2 via a longer path but updating to shorter 3 units.
  • Link for More Details: Ask AI: Dijkstra's Steps

Time Complexity Analysis

  • Summary: With E edges and V vertices, worst-case heap size is V^2, but operations are O(E log V) due to heap pushes/pops.
  • Key Takeaway/Example: Max edges are roughly V^2, but the log factor comes from heap operations per edge.
  • Link for More Details: Ask AI: Dijkstra's Time Complexity

Code Implementation

  • Summary: Build adjacency list from edges. Use heapq for min-heap, track visited set and max time. Loop pops from heap, updates max time, pushes unvisited neighbors with cumulative weight.
  • Key Takeaway/Example: After loop, if visited count equals n, return max time; else -1.
import heapq
from collections import defaultdict

def networkDelayTime(times, n, k):
    edges = defaultdict(list)
    for u, v, w in times:
        edges[u].append((v, w))
    
    min_heap = [(0, k)]
    visit = set()
    t = 0
    
    while min_heap:
        w1, n1 = heapq.heappop(min_heap)
        if n1 in visit:
            continue
        visit.add(n1)
        t = max(t, w1)
        
        for n2, w2 in edges[n1]:
            if n2 not in visit:
                heapq.heappush(min_heap, (w1 + w2, n2))
    
    return t if len(visit) == n else -1

About the summarizer

I'm Ali Sol, a Backend Developer. Learn more: