Top Banner
64 Algorithms analysis and design BY Lecturer: Aisha Dawood
64

Algorithms analysis and design

Jan 01, 2016

Download

Documents

dolores-soto

Algorithms analysis and design. BY Lecturer: Aisha Dawood. 7. 10. i = [7,10]; i  low = 7; i  high = 10. 5. 11. 17. 19. 4. 8. 15. 18. 21. 23. Interval Trees. The problem: maintain a set of intervals E.g., time intervals for a scheduling program:. 7. 10. - PowerPoint PPT Presentation
Welcome message from author
This document is posted to help you gain knowledge. Please leave a comment to let me know what you think about it! Share it to your friends and learn new things together.
Transcript
Page 1: Algorithms analysis  and design

64

Algorithms analysis and design

BY

Lecturer: Aisha Dawood

Page 2: Algorithms analysis  and design

64

Interval Trees

● The problem: maintain a set of intervals■ E.g., time intervals for a scheduling program:

107

115

84 1815 2321

17 19

i = [7,10]; i low = 7; ihigh = 10

Page 3: Algorithms analysis  and design

64

Review: Interval Trees

● The problem: maintain a set of intervals■ E.g., time intervals for a scheduling program:

■ Query: find an interval in the set that overlaps a given query interval

○ [14,16] [15,18]○ [16,19] [15,18] or [17,19]○ [12,14] NULL

107

115

84 1815 2321

17 19

i = [7,10]; i low = 7; ihigh = 10

Page 4: Algorithms analysis  and design

64

Review: Interval Trees

● Following the methodology:■ Pick underlying data structure

○ Red-black trees will store intervals, keyed on ilow

■ Decide what additional information to store○ Store the maximum endpoint in the subtree rooted at i

■ Figure out how to maintain the information○ Update max as traverse down during insert○ Recalculate max after delete with a traversal up the tree

■ Develop the desired new operations

Page 5: Algorithms analysis  and design

64

max

maxmaxmax

rightx

leftx

highx

x

Review: Interval Trees

[17,19]23

[5,11]18

[21,23]23

[4,8]8

[15,18]18

[7,10]10

intmax

Note that:

Page 6: Algorithms analysis  and design

64

Review: Searching Interval Trees

IntervalSearch(T, i){ x = T->root; while (x != NULL && !overlap(i, x->interval)) if (x->left != NULL && x->left->max i->low) x = x->left; else x = x->right; return x}

● What will be the running time?

Page 7: Algorithms analysis  and design

64

Review: Correctness of IntervalSearch()

● Key idea: need to check only 1 of node’s 2 children■ Case 1: search goes right

○ Show that overlap in right subtree, or no overlap at all

■ Case 2: search goes left○ Show that overlap in left subtree, or no overlap at all

Page 8: Algorithms analysis  and design

64

Correctness of IntervalSearch()

● Case 1: if search goes right, overlap in the right subtree or no overlap in either subtree■ If overlap in right subtree, we’re done■ Otherwise:

○ xleft = NULL, or x left max < i low (Why?)○ Thus, no overlap in left subtree!

while (x != NULL && !overlap(i, x->interval))

if (x->left != NULL && x->left->max i->low) x = x->left;

else

x = x->right;

return x;

Page 9: Algorithms analysis  and design

64

Review: Correctness of IntervalSearch()

● Case 2: if search goes left, overlap in the left subtree or no overlap in either subtree■ If overlap in left subtree, we’re done■ Otherwise:

○ i low x left max, by branch condition○ x left max = y high for some y in left subtree○ Since i and y don’t overlap and i low y high,

i high < y low○ Since tree is sorted by low’s, i high < any low in right subtree○ Thus, no overlap in right subtree

while (x != NULL && !overlap(i, x->interval)) if (x->left != NULL && x->left->max i->low) x = x->left; else x = x->right; return x;

Page 10: Algorithms analysis  and design

64

Graphs

● A graph G = (V, E)■ V = set of vertices■ E = set of edges = subset of V V■ Thus |E| = O(|V|2)

Page 11: Algorithms analysis  and design

64

Graph Variations

● Variations:■ A connected graph has a path from every vertex to

every other■ In an undirected graph:

○ Edge (u,v) = edge (v,u)○ No self-loops

■ In a directed graph:○ Edge (u,v) goes from vertex u to vertex v, notated uv

Page 12: Algorithms analysis  and design

64

Graph Variations

● More variations:■ A weighted graph associates weights with either

the edges or the vertices○ E.g., a road map: edges might be weighted w/ distance

■ A multigraph allows multiple edges between the same vertices

○ E.g., the call graph in a program (a function can get called from multiple points in another function)

Page 13: Algorithms analysis  and design

64

Graphs

● We will typically express running times in terms of |E| and |V| (often dropping the |’s)■ If |E| |V|2 the graph is dense■ If |E| |V| the graph is sparse

● If you know you are dealing with dense or sparse graphs, different data structures may make sense

Page 14: Algorithms analysis  and design

64

Representing Graphs

● Assume V = {1, 2, …, n}● An adjacency matrix represents the graph as a

n x n matrix A:■ A[i, j] = 1 if edge (i, j) E (or weight of

edge)= 0 if edge (i, j) E

Page 15: Algorithms analysis  and design

64

Graphs: Adjacency Matrix

● Example:

1

2 4

3

a

d

b c

A 1 2 3 4

1

2

3 ??4

Page 16: Algorithms analysis  and design

64

Graphs: Adjacency Matrix

● Example:

1

2 4

3

a

d

b c

A 1 2 3 4

1 0 1 1 0

2 0 0 1 0

3 0 0 0 0

4 0 0 1 0

Page 17: Algorithms analysis  and design

64

Graphs: Adjacency Matrix

● How much storage does the adjacency matrix require?

● A: O(V2)● What is the minimum amount of storage

needed by an adjacency matrix representation of an undirected graph with 4 vertices?

● A: 6 bits■ Undirected graph matrix is symmetric■ No self-loops don’t need diagonal

Page 18: Algorithms analysis  and design

64

Graphs: Adjacency List

● Adjacency list: for each vertex v V, store a list of vertices adjacent to v

● Example:■ Adj[1] = {2,3}■ Adj[2] = {3}■ Adj[3] = {}■ Adj[4] = {3}

● Variation: can also keep a list of edges coming into vertex

1

2 4

3

Page 19: Algorithms analysis  and design

64

Graphs: Adjacency List

● How much storage is required?■ The degree of a vertex v = # incident edges

○ Directed graphs have in-degree, out-degree

■ For directed graphs, # of items in adjacency lists is out-degree(v) = |E|For undirected graphs, # items in adj lists is

degree(v) = 2 |E| (handshaking lemma)

Page 20: Algorithms analysis  and design

64

Graph Searching

● Given: a graph G = (V, E), directed or undirected

● Goal: methodically explore every vertex and every edge

● Ultimately: build a tree on the graph■ Pick a vertex as the root■ Choose certain edges to produce a tree■ Note: might also build a forest if graph is not

connected

Page 21: Algorithms analysis  and design

64

Breadth-First Search

● “Explore” a graph, turning it into a tree■ One vertex at a time■ Expand frontier of explored vertices across the

breadth of the frontier

● Builds a tree over the graph■ Pick a source vertex to be the root■ Find (“discover”) its children, then their children,

etc.

Page 22: Algorithms analysis  and design

64

Breadth-First Search

● Again will associate vertex “colors” to guide the algorithm■ White vertices have not been discovered

○ All vertices start out white

■ Grey vertices are discovered but not fully explored○ They may be adjacent to white vertices

■ Black vertices are discovered and fully explored○ They are adjacent only to black and gray vertices

● Explore vertices by scanning adjacency list of grey vertices

Page 23: Algorithms analysis  and design

64

Breadth-First Search

BFS(G, s) { initialize vertices; Q = {s}; // Q is a queue (duh); initialize to

s while (Q not empty) { u = RemoveTop(Q); for each v u->adj { if (v->color == WHITE) v->color = GREY; v->d = u->d + 1; v->p = u; Enqueue(Q, v); } u->color = BLACK; }}

v->p is the parent v->d is the discovered

Page 24: Algorithms analysis  and design

64

Breadth-First Search: Example

r s t u

v w x y

Page 25: Algorithms analysis  and design

64

Breadth-First Search: Example

0

r s t u

v w x y

sQ:

Page 26: Algorithms analysis  and design

64

Breadth-First Search: Example

1

0

1

r s t u

v w x y

wQ: r

Page 27: Algorithms analysis  and design

64

Breadth-First Search: Example

1

0

1

2

2

r s t u

v w x y

rQ: t x

Page 28: Algorithms analysis  and design

64

Breadth-First Search: Example

1

2

0

1

2

2

r s t u

v w x y

Q: t x v

Page 29: Algorithms analysis  and design

64

Breadth-First Search: Example

1

2

0

1

2

2

3

r s t u

v w x y

Q: x v u

Page 30: Algorithms analysis  and design

64

Breadth-First Search: Example

1

2

0

1

2

2

3

3

r s t u

v w x y

Q: v u y

Page 31: Algorithms analysis  and design

64

Breadth-First Search: Example

1

2

0

1

2

2

3

3

r s t u

v w x y

Q: u y

Page 32: Algorithms analysis  and design

64

Breadth-First Search: Example

1

2

0

1

2

2

3

3

r s t u

v w x y

Q: y

Page 33: Algorithms analysis  and design

64

Breadth-First Search: Example

1

2

0

1

2

2

3

3

r s t u

v w x y

Q: Ø

Page 34: Algorithms analysis  and design

64

BFS: The Code Again

BFS(G, s) { initialize vertices; Q = {s}; while (Q not empty) { u = RemoveTop(Q); for each v u->adj { if (v->color == WHITE) v->color = GREY; v->d = u->d + 1; v->p = u; Enqueue(Q, v); } u->color = BLACK; }}

What will be the running time?

Touch every vertex: O(V)

u = every vertex, but only once : O(V)

So v = every vertex that appears in some other vert’s adjacency list: O(E)

Total running time: O(2V+E)

Page 35: Algorithms analysis  and design

64

Breadth-First Search: Properties

● BFS calculates the shortest-path distance to the source node■ Shortest-path distance (s,v) = minimum number

of edges from s to v.

● BFS builds breadth-first tree, in which paths to root represent shortest paths in G■ Thus can use BFS to calculate shortest path from

one vertex to another in O(2V+E) time

Page 36: Algorithms analysis  and design

64

Depth-First Search

● Depth-first search is another strategy for exploring a graph■ Explore “deeper” in the graph whenever possible■ Edges are explored out of the most recently

discovered vertex v that still has unexplored edges■ When all of v’s edges have been explored,

backtrack to the vertex from which v was discovered

Page 37: Algorithms analysis  and design

64

Depth-First Search

● Vertices initially colored white● Then colored gray when discovered● Then black when finished

Page 38: Algorithms analysis  and design

64

Depth-First Search: The Code

DFS(G){ for each vertex u G->V { u->color = WHITE; } time = 0; for each vertex u G->V { if (u->color == WHITE) DFS_Visit(u); }}

DFS_Visit(u){ u->color = GREY; time = time+1; u->d = time;

for each v u->Adj[] { if (v->color == WHITE) DFS_Visit(v); } u->color = BLACK; time = time+1; u->f = time;}

u->d : discovered , u -> f : finished

Page 39: Algorithms analysis  and design

64

Depth-First Search: The Code

DFS(G){ for each vertex u G->V { u->color = WHITE; } time = 0; for each vertex u G->V { if (u->color == WHITE) DFS_Visit(u); }}

DFS_Visit(u){ u->color = GREY; time = time+1; u->d = time;

for each v u->Adj[] { if (v->color == WHITE) DFS_Visit(v); } u->color = BLACK; time = time+1; u->f = time;}

Running time: O(n2) because call DFS_Visit on each vertex, and the loop over Adj[] can run as many as |V| times

Page 40: Algorithms analysis  and design

64

Depth-First Search: The Code

DFS(G){ for each vertex u G->V { u->color = WHITE; } time = 0; for each vertex u G->V { if (u->color == WHITE) DFS_Visit(u); }}

DFS_Visit(u){ u->color = GREY; time = time+1; u->d = time;

for each v u->Adj[] { if (v->color == WHITE) DFS_Visit(v); } u->color = BLACK; time = time+1; u->f = time;}

BUT, there is actually a tighter bound. How many times will DFS_Visit() actually be called?

Page 41: Algorithms analysis  and design

64

Depth-First Search: The Code

DFS(G){ for each vertex u G->V { u->color = WHITE; } time = 0; for each vertex u G->V { if (u->color == WHITE) DFS_Visit(u); }}

DFS_Visit(u){ u->color = GREY; time = time+1; u->d = time;

for each v u->Adj[] { if (v->color == WHITE) DFS_Visit(v); } u->color = BLACK; time = time+1; u->f = time;}

So, running time of DFS = O(V+E)

Page 42: Algorithms analysis  and design

64

Depth-First Sort Analysis

● This running time argument is an example of amortized analysis■ “Charge” the exploration of edge to the edge:

○ Each loop in DFS_Visit can be attributed to an edge in the graph

○ Runs once/edge if directed graph, twice if undirected○ Thus loop will run in O(E) time, algorithm O(V+E)

Page 43: Algorithms analysis  and design

64

DFS Example

sourcevertex

Page 44: Algorithms analysis  and design

64

DFS Example

1 | | |

| | |

| |

sourcevertex

d f

Page 45: Algorithms analysis  and design

64

DFS Example

1 | | |

| | |

2 | |

sourcevertex

d f

Page 46: Algorithms analysis  and design

64

DFS Example

1 | | |

| | 3 |

2 | |

sourcevertex

d f

Page 47: Algorithms analysis  and design

64

DFS Example

1 | | |

| | 3 | 4

2 | |

sourcevertex

d f

Page 48: Algorithms analysis  and design

64

DFS Example

1 | | |

| 5 | 3 | 4

2 | |

sourcevertex

d f

Page 49: Algorithms analysis  and design

64

DFS Example

1 | | |

| 5 | 63 | 4

2 | |

sourcevertex

d f

Page 50: Algorithms analysis  and design

64

DFS Example

1 | 8 | |

| 5 | 63 | 4

2 | 7 |

sourcevertex

d f

Page 51: Algorithms analysis  and design

64

DFS Example

1 | 8 | |

| 5 | 63 | 4

2 | 7 |

sourcevertex

d f

Page 52: Algorithms analysis  and design

64

DFS Example

1 | 8 | |

| 5 | 63 | 4

2 | 7 9 |

sourcevertex

d f

What is the structure of the grey vertices? What do they represent?

Page 53: Algorithms analysis  and design

64

DFS Example

1 | 8 | |

| 5 | 63 | 4

2 | 7 9 |10

sourcevertex

d f

Page 54: Algorithms analysis  and design

64

DFS Example

1 | 8 |11 |

| 5 | 63 | 4

2 | 7 9 |10

sourcevertex

d f

Page 55: Algorithms analysis  and design

64

DFS Example

1 |12 8 |11 |

| 5 | 63 | 4

2 | 7 9 |10

sourcevertex

d f

Page 56: Algorithms analysis  and design

64

DFS Example

1 |12 8 |11 13|

| 5 | 63 | 4

2 | 7 9 |10

sourcevertex

d f

Page 57: Algorithms analysis  and design

64

DFS Example

1 |12 8 |11 13|

14| 5 | 63 | 4

2 | 7 9 |10

sourcevertex

d f

Page 58: Algorithms analysis  and design

64

DFS Example

1 |12 8 |11 13|

14|155 | 63 | 4

2 | 7 9 |10

sourcevertex

d f

Page 59: Algorithms analysis  and design

64

DFS Example

1 |12 8 |11 13|16

14|155 | 63 | 4

2 | 7 9 |10

sourcevertex

d f

Page 60: Algorithms analysis  and design

64

DFS: Kinds of edges

● DFS introduces an important distinction among edges in the original graph:■ Tree edge: encounter new (white) vertex ■ Back edge: from descendent to ancestor■ Forward edge: from ancestor to descendent■ Cross edge: between a tree or subtrees

○ From a grey node to a black node

Page 61: Algorithms analysis  and design

64

DFS Example

1 |12 8 |11 13|16

14|155 | 63 | 4

2 | 7 9 |10

sourcevertex

d f

Tree edges Back edges Forward edges Cross edges

Page 62: Algorithms analysis  and design

64

DFS And Graph Cycles

● An undirected graph is acyclic iff a DFS yields no back edges■ If acyclic, no back edges (because a back edge

implies a cycle■ If no back edges, acyclic

○ No back edges implies only tree edges○ Only tree edges implies we have a tree or a forest○ Which by definition is acyclic

● Thus, can run DFS to find whether a graph has a cycle

Page 63: Algorithms analysis  and design

64

DFS

● What will be the running time?DFS(G){ for each vertex u G->V { u->color = WHITE; } time = 0; for each vertex u G->V { if (u->color == WHITE) DFS_Visit(u); }}

DFS_Visit(u){ u->color = GREY; time = time+1; u->d = time;

for each v u->Adj[] { if (v->color == WHITE) DFS_Visit(v); } u->color = BLACK; time = time+1; u->f = time;}

Page 64: Algorithms analysis  and design

64

DFS And Cycles

● What will be the running time?● O(V+E)● We can actually determine if cycles exist in

O(V) time:■ In an undirected acyclic forest, |E| |V| ■ So count the edges: if ever see |V| distinct edges,

must have seen a back edge along the way