Data Structures and (CS210A)

Lecture 38 • An interesting problem: shortest path from a source to destination • Sorting Integers

1 SHORTEST PATHS IN A GRAPH

A fundamental problem

2 Notations and Terminologies

A directed graph 푮 = (푽, 푬) • 흎: 푬 → 푹+ • Represented as Adjacency lists or Adjacency matrix • 풏 = |푽| , 풎 = |푬| Question: what is a path in 푮?

Answer: A sequence 풗ퟏ, 풗ퟐ,…, 풗풌 such that (풗풊,풗풊+ퟏ) ∈ 푬 for all ퟏ ≤ 풊 < 풌.

12 3 … 29 풗ퟏ 풗ퟐ 풗ퟑ 풗풌−ퟏ 풗풌

Length of a path 푷 = 풆∈푷 흎(풆)

3 Notations and Terminologies

Definition: The path from 풖 to 풗 of ? minimum length is called the shortest path from 풖 to 풗

Definition: Distance from 풖 to 풗 is the length of the shortest path from 풖 to 풗.

Notations: 휹(풖, 풗) : distance from 풖 to 풗. 푷(풖, 풗) : The shortest path from 풖 to 풗.

4 Problem Definition

Input: A directed graph 푮 = (푽, 푬) with 흎: 푬 → 푹+ and a source vertex 풔 ∈ 푽

Aim: • Compute 휹(풔, 풗) for all 풗 ∈ 푽\*풔+ • Compute 푷(풔, 풗) for all 풗 ∈ 푽\*풔+

What if 흎(풆) = 1 ? Do BFS from 풔 

5 Problem Definition

Input: A directed graph 푮 = (푽, 푬) with 흎: 푬 → 푹+ and a source vertex 풔 ∈ 푽

Aim: • Compute 휹(풔, 풗) for all 풗 ∈ 푽\*풔+ • Compute 푷(풔, 풗) for all 풗 ∈ 푽\*풔+

First : by Edsger Dijkstra in 1956 And still the best …

I am sure you will be able to re-invent it yourself if you are asked right questions  So get ready !

6 An Example

10 풗 12 7 G 풙 풔 3 5 풖 풚

Can you spot any vertex for which you are certain about its distance from 풔 ? Give Answer: vertex 풖. reasons.

7 An Example

10 풗 12 7 G 풙 풔 3 5 풖 풚 > ퟎ

8 An Example

10 풗 12 7 G 풙 풔 3 5 풖 풚

 Yes, the edge (풔, 풖) is indeed the shortest path to 풖. To Greedy form a Strategy.smaller instance Does it remind you How to use it to design an Right,of the so problem.what something from recent algorithm for shortest paths ? should be your Butpast how ?  ? next step ? 9 Pondering over the problem

Idea 1 : Remove 풖 since we have computed distance to 풖. & so its job is done.

So now there will be 풏 − ퟏ vertices. The new graph will preserve those shortest paths from 풔 in which 풖 is not present. But what about those shortest paths from 풔 that pass through 풖 ? We lost them with the removal of 풖. 

So we can’t afford to remove 풖. How can then we get a smaller instance ? Merging 풔 and 풖  But how ? 10 An Example

10 풗 12 7 2 21 G 풙 풔 풕 3 5 풖 3 8 풚 풓

Let us look carefully around 풖 ?

11 An Example

10 풗 12 7 2+3 21 +3 G’ 풙 풕 풔 5 3 +3 8 +3 풚 풓

12 An Example

10 풗 12 7 5 24 G’ 풙 풕 풔 5 6 11 풚 풓

13 How to compute instance 푮′

Let (풔,풖) be the least weight edge from 풔 in 푮=(푽, 푬). Transform 푮 into 푮′ as follows. 1. For each edge (풖,풙)ϵ 푬, add edge (풔,풙); 흎(풔,풙) ??흎 (풔,풖) + 흎(풖,풙); 2. In case of two edges from 풔 to any vertex 풙, keep only the lighter edge. 3. Remove vertex 풖.

Theorem: For each 풗 ∈ 푽\*풔, 풖+, 휹푮 풔, 풗 = 휹푮′ 풔, 풗

How efficient an algorithm for shortest paths can you design ?

14 No. of vertices

(푮, 풔) 풏

O(풏) time Building 푮′

(푮′, 풔) 풏 − ퟏ

 an algorithm for distances from 풔 with 푶(풏ퟐ) time complexity.

15 Integer sorting Algorithms for Sorting 풏 elements

: O(풏ퟐ) • : O (풏ퟐ) • : O (풏ퟐ) • : O (풏 log 풏) • Quick sort: worst case O(풏ퟐ), average case O(풏 log 풏) • Heap sort: O(풏 log 풏)

Question: What is common among these algorithms ? Answer: All of them use only comparison operation to perform sorting.

Theorem (to be proved in CS345): Every comparison based must perform at least 풏 log 풏 comparisons in the worst case.

Question: Can we sort in O(풏) time ?

The answer depends upon

• the model of computation.

• the domain of input.

Integer sorting : algorithm for sorting integers

Input: An array A storing 풏 integers in the range [0…풌 − ퟏ]. 풌 = O(풏) Output: Sorted array A. Running time: O(풏 + 풌) in word RAM model of computation. Extra space: O(풌)

Motivating example: Indian railways

There are 13 lacs employees. Aim : To sort them list according to DOB (date of birth) Observation: There are only 14600 different date of births possible.

Counting sort: algorithm for sorting integers

0 1 2 3 4 5 6 7

A 2 5 3 0 2 3 0 3 If A[풊]=풋, where should A[풊] be placed in B ? 0 1 2 3 4 5

Count 2 0 2 3 0 1 Certainly after all those elements in A which are smaller than 풋 0 1 2 3 4 5 Place 2 2 4 7 7 8

0 1 2 3 4 5 6 7 B 3 Final sorted output Counting sort: algorithm for sorting integers

0 1 2 3 4 5 6 7

A 2 5 3 0 2 3 0 3

0 1 2 3 4 5

Count 2 0 2 3 0 1

0 1 2 3 4 5 Place 2 2 4 6 7 8

0 1 2 3 4 5 6 7 B 0 3 Counting sort: algorithm for sorting integers

0 1 2 3 4 5 6 7

A 2 5 3 0 2 3 0 3

0 1 2 3 4 5

Count 2 0 2 3 0 1

0 1 2 3 4 5 Place 1 2 4 6 7 8

0 1 2 3 4 5 6 7 B 0 3 3 Counting sort: algorithm for sorting integers

Algorithm (A[ퟎ...풏 − ퟏ], 풌) For 풋=0 to 풌 − ퟏ do Count[풋] 0; For 풊=0 to 풏 − ퟏ do Count[ A[풊] ] Count[ A[풊] ] +1;

For 풋=0 to 풌 − ퟏ do Place[풋] Count[풋]; For 풋=1 to 풌 − ퟏ do Place[풋] Place [ 풋 −? ퟏ ] + Count [ 풋 ] ;

For 풊=풏 − ퟏ to ퟎ do

{ B[ Place ?[A[ 풊 ]] - 1 ] A[풊]; Place [A[ ? 풊 ]]  Place [A[ 풊 ]] - 1 ; ; What is the time complexity } of this algorithm in word RAM model ? return B;