Chapter 2 Paths and Searching

Transcription

1 Chapter 2 Paths and Searching Section 2.1 Distance Almost every day you face a problem: You must leave your home and go to school. If you are like me, you are usually a little late, so you want to take the shortest route. How do you find such a route? Figure models one such situation. Suppose vertex h represents your home, vertex s represents school and the other vertices represent intersections of the roads between home and school. Each edge represents a road and is labeled with its length (distance) s h Figure The model of routes to school. Earlier, we discussed the idea of paths and of walking from one vertex to another. We also have seen that there may be many different paths between two vertices. I m sure that ordinarily you feel it is best to take the shortest route between two places when you travel, and we are no different when it comes to graphs. But how do we measure the distance between two vertices in a graph? Certainly, following paths seems more efficient than following walks or trails since with paths we do not repeat any edges or vertices. Recall that we defined the length of a path to be the number of edges in the path. However, this definition treats each edge equally, as if each edge had length 1. This is inaccurate when the graph is modeling a road system, as in the problem just discussed. In order to adjust to more situations, we shall simply think of each edge as having a nonnegative label representing its length, and unless otherwise stated, that length will be 1. The length of a path, then, becomes the sum of the lengths of the edges in that path. The idea of distance stays the same no matter what the label; we merely let the distance from x to y, denoted d(x, y), be the minimum length of an x y path in the

2 2 Chapter 2: Paths and Searching graph. We now have a very general and flexible idea of distance that applies in many settings and is useful in many applications. But how do we go about finding the distance between two vertices? What do we do to find the distance between all pairs of vertices? What properties does distance have? Does graph distance behave as one usually expects distance to behave? For that matter, how does one expect distance functions to behave? Let s try to answer these questions. We restrict the length of any edge to a positive number, since this corresponds to our intuition of what length should be. In doing this, we can show that the following properties hold for the distance function d on a graph G (see exercises): 1. d(x, y) 0 and d(x, y) = 0 if, and only if, x = y. 2. d(x, y) = d(y, x). 3. d(x, y) + d(y, z) d(x, z). These three properties define what is normally called a metric function (or simply a metric) on the vertex set of a graph. Metrics are well-behaved functions that reflect the three properties usually felt to be fundamental to distance (namely, properties 1 3). Does each of these properties also hold for digraphs? The diameter, denoted diam(g), of a connected graph G equals max max d(u, v), u V v V while the radius of G, denoted rad(g), equals min max d(u, v). Theorem u V v V shows that these terms are related in a manner that is also consistent with our intuition about distance. Example We find the value of d(x, y) for each pair of vertices x, y in the graph of Figure These distances are shown in Table d(x, y) a b c d e a b c d e Table Table of distances in the graph of Figure

4 4 Chapter 2: Paths and Searching G 1 : u v G 2 : a b w x c d Figure The graph G 2 is isometric from G 1 but not conversely. Theorem The relation isometric from is not symmetric, that is, if G 2 is isometric from G 1, then G 1 need not be isometric from G 2. Proof. Graphs G 1 and G 2 of Figure show a graph G 2 that is isometric from G 1. To see that G 1 is not isometric from G 2, we note that each mapping F i in the definition must preserve distances from the vertex i and there can be no mapping F b with this property, because b has only one vertex at distance 1 from itself. We wish to develop efficient algorithms for computing distances in graphs. In order to do this, we begin by considering the simplest case, graphs with all edges of length 1. The first algorithm we present is from Moore [9] and is commonly called the breadthfirst search algorithm or BFS. The idea behind a breadth-first search is fairly simple and straightforward. Beginning at some vertex x, we visit each vertex dominated by (adjacent from) x. Then, in turn, from each of these vertices, we visit any vertex that has not yet been visited and is dominated by the vertex we are presently visiting. We continue in this fashion until we have reached all vertices possible. Algorithm Breadth-First Search. Input: An unlabeled graph G = (V, E) with distinguished vertex x. Output: The distances from x to all vertices reachable from x. Method: Use a variable i to measure the distance from x, and label vertices with i as their distance is found. 1. i 0.

5 Chapter 2: Paths and Searching 5 2. Label x with "i." 3. Find all unlabeled vertices adjacent to at least one vertex with label i. If none is found, stop because we have reached all possible vertices. 4. Label all vertices found in step 3 with i Let i i + 1, and go to step 3. Example As an example of the BFS algorithm, consider the graph of Figure If we begin our search at the vertex d, then the BFS algorithm will proceed as follows: 1. Set i = Label d with Find all unlabeled vertices adjacent to d, namely a and c. 4. Label a and c with Set i = 1 and go to step Find all unlabeled vertices adjacent to one labeled 1, namely b and e. 4. Label b and e with Set i = 2 and go to step There are no unlabeled vertices adjacent to one labeled 2; hence, we stop. In essence, we can view the search as producing a search tree, using some edge to reach each new vertex along a path from x. In Figure we picture two possible search trees for the previous example. d d a c a c b e b e Figure Two BFS search trees in the graph of Figure

6 6 Chapter 2: Paths and Searching Theorem When the BFS algorithm halts, each vertex reachable from x is labeled with its distance from x. Proof. Suppose vertex v = v k has been labeled k. Then, by BFS (steps 3 and 4), there must exist a vertex v k 1, which is labeled k 1 and is adjacent to v k, and similarly a vertex v k 2, which is labeled k 2 and is adjacent to v k 1. By repeating this argument, we eventually reach v 0, and we see that v 0 = x, because x is the only vertex labeled zero. Then x = v 0, v 1,..., v k 1, v k is a path of length k from x to v. Hence, d(x, v) k. In order to prove that the label on v is the distance from x to v, we apply induction on k, the distance from x to v. In step 2 of BFS, we label x with 0, and clearly d(x, x) = 0. Now, assume the result holds for vertices with labels less than k and let P: x = v 0, v 1,..., v k = v be a shortest path from x to v in G. By the inductive hypothesis, v 0, v 1,..., v k 1 is a shortest path from x to v k 1. By the inductive hypothesis, v k 1 is labeled k 1. By the algorithm, when i = k 1, v receives the label k. To see that v could not have been labeled earlier, suppose that indeed it had been labeled with h < k. Then there would be an x v path shorter than P, contradicting our choice of P. Hence, the result follows by induction. = v When the BFS algorithm is performed, any edge in the graph is examined at most two times, once from each of its end vertices. Thus, in step 3 of the BFS algorithm, the vertices labeled i are examined for unvisited neighbors. Using incidence lists for the data, the BFS algorithm has time complexity O( E ). In order to obtain the distances between any two vertices in the graph, we can perform the BFS algorithm, starting at each vertex. Thus, to find all distances, the algorithm has time complexity O( V E ). How does the BFS algorithm change for digraphs? Can you determine the time complexity for the directed version of BFS? Can you modify the BFS labeling process to make it easier to find the x v distance path? Next, we want to consider arbitrarily labeled (sometimes these labels are called weights) digraphs, that is, digraphs with arcs labeled l(e) 0. These labels could represent the length of the arc e, as in our home to school example, or the cost of traveling that route, or the cost of transmitting information between those locations, or transmission times, or any of many other possibilities. When we wish to determine the shortest path from vertex u to vertex v, it is clear that we must first gain information about distances to intermediate vertices. This information

7 Chapter 2: Paths and Searching 7 is often recorded as a label assigned to the intermediate vertex. The label at intermediate vertex w usually takes one of two forms, the distance d(u, w) between u and w, or sometimes the pair d(u, w) and the predecessor of w on this path, pred(w). The predecessor aids in backtracking to find the actual path. Many distance algorithms have been proposed and most can be classified as one of two types, based upon how many times the vertex labels are updated (see [6]). In labelsetting methods, during each pass through the vertices, one vertex label is assigned a value which remains unchanged thereafter. In label-correcting methods, any label may be changed during processing. These methods have different limitations. Label-setting methods cannot deal with graphs having negative arc labels. Label-correcting methods can handle negative arc labels, provided no negative cycles exist, that is, a cycle with edge weight sum a negative value. Most label-setting or correcting algorithms can be recast into the same basic form which allows for finding the shortest paths from one vertex to all other vertices. Often what distinguishes these algorithms is how they select the next vertex from the candidate list C of vertices to examine. We now present a generic distance algorithm. Algorithm 2.1.2a Generic Distance Algorithm. Input: A labeled digraph D = (V, E) with initial vertex v 1. Output: The distance from v 1 to all other vertices. Method: Generic labeling of vertices with label (L(v), pred(v) ). 1. For all v V(D) set L(v). 2. Initialize C = the set of vertices to be checked. 3. While C ; Select v C and set C = C v. For all u adjacent from v; If L(u) > L(v) + l(vu); L(u) = L(v) + l(vu); pred(u) = v; Add u to C if it is not there. One of the earliest label-setting algorithms was given by Dijkstra [1]. In Dijkstra s algorithm, a number of paths from vertex v 1 are tried and each time the shortest among them is chosen. Since paths can lead to new vertices with potentially many outgoing arcs, the number of paths can increase as we go. Each vertex is tried once, all paths leading from it are added to the list and the vertex itself is labeled and no longer used (label-setting). After all vertices are visited the algorithm is finished. At any time during

8 8 Chapter 2: Paths and Searching execution of the algorithm, the value of L(v) attached to the vertex v is the length of the shortest v 1 v path presently known. Algorithm Dijkstra s Distance Algorithm. Input: A labeled digraph D = (V, E) with initial vertex v 1. Output: The distance from v 1 to all vertices. Method: Label each vertex v with (L(v), pred(v) ), which is the length of a shortest path from v 1 to v that has been found at that instant and the predecessor of v along that path. 1. L(v 1 ) 0 and for all v v 1 set L(v) and C V. 2. While C ; Find v C with minimum label L(v). C C { v } For every e = v w, if w C and L(w) > L(v) + l(e) then L(w) L(v) + l(e) and pred(w) = v. e a b 5.4 d f c Figure A digraph to test Dijkstra s algorithm. Example We now apply Dijkstra s algorithm to the digraph of Figure 2.1.5, finding the distances from vertex a. The steps performed and the actions taken are shown in the following table.

9 Chapter 2: Paths and Searching 9 iteration vertex distances currently to vertices a b c d e f initial 0 1 a b e c d f Table Distances from vertex a via Dijkstra s Algorithm. We next verify that upon completion, Dijkstra s algorithm has labeled the vertices with their proper distances from x. Theorem If L(v) is finite when Algorithm halts, then d(x, v) = L(v). Proof. First we show that if L(v) is finite, then there is a v 1 v path of length L(v) in D. Since L(v) is finite, its value must have changed during step 2 of the algorithm. Let u be the vertex used to label v, that is, e = u v and L(v) = L(u) + l(e). During this step, we delete u from C, and, hence, its label can never be changed again. Now find the vertex w used to label u (this is just pred(u)) and again repeat this backtracking search. Eventually, we will backtrack to v 1, and we will have found a v 1 v path whose length is exactly L(v). The backtracking search finds each time a vertex was deleted from C, and, thus, no vertex on the path can be repeated. Therefore, the path must backtrack to v 1, which has label 0. Next, to see that L(v) = d(v 1, v), we proceed by induction on the order in which we delete vertices from C. Clearly, v 1 is the first vertex deleted, and L(v 1 ) = 0 = d(v 1, v 1 ). Next, assume that L(u) = d(v 1, u) for all vertices u deleted from C before v. If L(v) =, let w be the first vertex chosen with an infinite label. Clearly, for every vertex v remaining in C, L(v) = and for all u V C (that is, those already deleted from C), L(u) must be finite. Therefore, there are no arcs from V C to C, and since v 1 V C and w C, there are no v 1 w paths. Next, suppose L(v) is finite. We already know there exists a v 1 v path P of length L(v) ; hence, it must be the case that L(v) d(v 1, v). In order to see that P is a shortest

10 10 Chapter 2: Paths and Searching path, suppose that P 1 : v 1, v 2,..., v k = v is a shortest v 1 v path and let e i = v i v +. Then i 1 d(v 1, v i ) = l(e j ). Suppose v i is the vertex of highest subscript on P 1 deleted from C before v. By the inductive hypothesis i 1 L(v i ) = d(v 1, v i ) = Σ l(e j ). If v i + 1 v, then L(v i + 1 ) L(v i ) + l(e i ) after v i is deleted from C. Since step 2 can only decrease labels, when v is chosen, L(v i + 1 ) still satisfies the inequality. Thus, Σ j = 1 j = 1 L(v i + 1 ) L(v i ) + l(e i ) = d(v 1, v i ) + l(e i ) = d(v 1, v i + 1 ) d(v 1, v). If d(v 1, v) < L(v), then v should not have been chosen. If v i + 1 argument shows that L(v) d(v 1, v), which completes the proof. = v, the same We now determine the time complexity of Dijkstra s algorithm. Note that in step 2, the minimum label of C must be found. This can certainly be done in C 1 comparisons. Initially, C = V, and step 4 reduces C one vertex at a time. Thus, the process is repeated V times. The time required in step 2 is then on the order of and therefore is O( V 2 ). V Σ i i = 1 Step 2 uses each arc once at most, so it requires at most O( E ) = O( V 2 ) time. The entire algorithm thus has time complexity O( V 2 ). If we want to obtain the distance between any two vertices, we can use this algorithm once with each vertex playing the role of the initial vertex x. This process requires O( V 3 ) time. Can you modify Dijkstra s algorithm to work on undirected graphs? What can we do to further generalize the problems we have been considering? One possibility is to relax our idea of what the edge labels represent. If we consider these labels as representing some general value and not merely distance, then we can permit these labels to be negative. We call these generalized labels weights, and we denote them as w(e). The "distance" between two vertices x and y will now correspond to the minimum sum of the edge weights along any x y path.

11 Chapter 2: Paths and Searching 11 We noted earlier that label-setting methods failed when negative arc labels were allowed. To see why this happens in Dijkstra s Algorithm, consider the example below. Example a 4-10 b 1 d 7 e 2 2 c 5 11 f 4 g Figure A digraph with negative arc weights allowed. The chart below shows the changes made to the labels during the execution of Dijkstra s algorithm on the digraph of Figure As you can see, the label set at 2 for vertex c is never corrected to it s proper value. The fact it can actually decrease because of negative weights is the problem. iteration vertex current distances of vertices a b c d e f g init 0 1 a c b d e f 14 7 g However, the path a, b, c, d, e, g is never explored and has distance 8. Unfortunately, Dijkstra s algorithm can fail if we allow the edge weights to be negative. However, Ford [4, 5] gave an algorithm for finding the distance between a

12 12 Chapter 2: Paths and Searching distinguished vertex x and all other vertices when we allow negative weights. This algorithm features a label correcting method to record the distances found. Initially, x is labeled 0 and every other vertex is labeled. Ford s algorithm, then, successively refines the labels assigned to the vertices, as long as improvements can be made. Arcs are used to decrease the labels of the vertices they reach. There is a problem, however, when the digraph contains a cycle whose total length is negative (called a negative cycle). In this case, the algorithm continually traverses the negative cycle, decreasing the vertex labels and never halting. Thus, in order to properly use Ford s algorithm, we must restrict its application to digraphs without negative cycles. Algorithm Ford s Distance Algorithm. Input: A digraph with (possibly negative) arc weights w(e), but no negative cycles. Output: The distance from x to all vertices reachable from x. Method: Label correcting. 1. L(x) 0 and for every v x set L(v). 2. While there is an arc e = u v such that L(v) > L(u) + w(e) set L(v) L(u) + w(e) and pred(v) = u. Example Now we apply Ford s algorithm to the digraph of Figure 2.1.7, which has some negative weights, but no negative cycles. We will find the distances from vertex a. iteration arc current label a b c d e f init 0 1 a b b c c e c d d e d f

13 Chapter 2: Paths and Searching 13 e a b. 3 d f c Figure A digraph to test Ford s algorithm. The next result assures us that Ford s algorithm actually produces the desired distances. Theorem For a digraph D with no negative cycles, when Algorithm halts, L(v) = d(x, v) for every vertex v. In order to compute the time complexity of Ford s algorithm, we begin by ordering the arcs of D, say e 1, e 2,..., e E. We then perform step 2 of the algorithm by examining the arcs in this order. After examining all the arcs, we continue repeating this process until one entire pass through the arc list occurs without changing any label. If D contains no negative cycles, then it can be shown that if a shortest x v path contains k arcs, then v will have its final label by the end of the kth pass through the arc list (see exercises). Since k V, Ford s algorithm then has time complexity bounded by O( E V ). Further, we can detect a negative cycle by seeing if there is any improvement in the labels on pass V. Can you modify Ford s algorithm to make it easier to find the path? Unfortunately, Ford s algorithm can only be used on digraphs. The problem with graphs is that any edge e = xy with negative weight causes the algorithm to continually use this edge while decreasing the labels of x and y. We conclude this section with a O( V 3 ) algorithm from Floyd [3] for finding all distances in a digraph. Floyd s algorithm also allows negative weights. To accomplish Floyd s algorithm, we define for i j:

14 14 Chapter 2: Paths and Searching d 0 (v i,v j ) = l(e) if v i v j otherwise and let d k (v i,v j ) be the length of a shortest path from v i to v j among all paths from v i to v j that use only vertices from the set { v 1, v 2,..., v k }. The distances are then updated as we allow the set of vertices used to build paths to expand. Thus, the d 0 distances represent the arcs of the digraph, the d 1 distances represent paths of length at most two that include v 1, etc. Note that because there are no negative cycles, the d k (v i, v i ) values will remain at 0. Algorithm Floyd s Distance Algorithm. Input: A digraph D = (V, E) without negative cycles. Output: The distances from v i to v j. Method: Constant refinement of the distances as the set of excluded vertices is decreased. 1. k For every 1 i, j n, d k (v i, v j ) min { d k 1 (v i, v j ), d k 1 (v i, v k ) + d k 1 (v k, v j ) }. 3. If k = V, then stop; else k k + 1 and go to 2. Example We show one pass of Floyd s algorithm on the digraph of Figure The d 0 and d 1 distances are shown in Tables and 2.1.4: v v v 2 v 1 Figure A digraph for Floyd s Algorithm.

15 Chapter 2: Paths and Searching 15 d 0 v 1 v 2 v 3 v 4 v v v v Table The d 0 distances. We now find the d 1 distances as: d 1 (v i, v j ) min { d 0 (v i, v j ), d 0 (v i, v 1 ) + d 0 (v 1, v j ) }. d 1 v 1 v 2 v 3 v 4 v v v v Table The d 1 distances. Many other algorithms exist to find distances in graphs. However, the techniques used in these algorithms often depend upon higher data structures or sorting techniques and are beyond the scope of this text. The interested reader should see the fine article by Gallo and Pallottino [6]. Section 2.2 Connectivity In Chapter 1 we defined the idea of a connected graph, that is, a graph in which there is a path between any two vertices. In the last section, while constructing algorithms for finding distances, we actually developed algorithms for testing if a graph is connected. For example, if we apply BFS to a graph G = (V, E), and we are able to visit every vertex of V, then G is connected. This follows by observing that for an arbitrary pair of vertices u and w, there is a path from x to w and from x to u; so these two paths can be used together to form a path from u to w.

16 16 Chapter 2: Paths and Searching There are other techniques for determining if a graph is connected. Perhaps the best known of these is the approach of Tremaux [11] (see also [7]) known as the depth-first search. The idea is to begin at a vertex v 0 and visit any vertex adjacent to v 0, say v 1. Now visit any vertex that is adjacent to v 1 that has not yet been visited. Continue to perform this process as long as possible. If we reach a vertex v k with the property that all its neighbors have been visited, we backtrack to the last vertex visited prior to going to v k, say v k 1. We then try to visit new vertices neighboring v k 1. If we can find an unvisited neighbor of v k 1, we visit it. If we cannot find such a vertex, we again backtrack to the vertex visited immediately before v k 1, say v k 2. We continue visiting new vertices where possible and backtracking where necessary until we backtrack to v 0 and there are no unvisited neighbors at v 0. At this stage we have visited all possible vertices reachable from v 0, and we stop. The set of edges used in the depth-first search from v 0 are the edges of a tree. Upon returning to v 0, if we cannot continue the search and the graph still contains unvisited vertices, we may choose such a vertex and begin the algorithm again. When all vertices have been visited, the edges used in performing these visits are the edges of a forest (simply a tree when the graph is connected). The depth-first search algorithm actually partitions the edge set into two sets T and B: those edges T contained in the forest (and, hence, used in the search), which are usually called tree edges, and the remaining edges B = E T, called back edges. The set B of back edges can be further partitioned as follows: Let B 1 be the set of back edges that join two vertices x and y, along some path from v 0 to y in the depth-first search tree that begins at v 0. Let C be the set of edges in B that join two vertices joined by a unique tree path that contains v 0. The edges of C are called cross edges, since they are edges between vertices that are not descendents of one another in the depth-first search tree. Although it is not necessary in the search, we shall number the vertices v with an integer n(v). The values of n(v) represent the order in which the vertices are first encountered during the search. This numbering will be very useful in several problems that we will study later. Algorithm Depth-First Search. Input: A graph G = (V, E) and a distinguished vertex x. Output: A set T of tree edges and an ordering n(v) of the vertices. Method: Use a label m(e) to determine if an edge has been examined. Use p(v) to record the vertex previous to v in the search. 1. For each e E, do the following: Set m(e) "unused." Set T, i 0.

17 Chapter 2: Paths and Searching 17 For every v V, do the following: set n(v) Let v x. 3. Let i i + 1 and let n(v) i. 4. If v has no unused incident edges, then go to Find an unused edge e = uv and set m(e) "used." Set T T { e }. If n(u) 0, then go to 4; else p(u) v, v u and go to If n(v) = 1, then halt; else v p(v) and go to 4. There is an alternate way of expressing recursive algorithms that often simplifies their description. This method involves the use of procedures. The idea of a procedure is that it is a "process" that can be repeatedly used in an algorithm. It is started with certain values, and the variables determined within the procedure are local to it. The procedure may be halted at some stage by reference to another procedure or by reference to itself. Should this happen, another version of the procedure is invoked, with new parameters passed to it, and all values of the old procedure are saved, until this procedure once again begins its work. We now demonstrate such a procedural description of the depth-first search algorithm. Algorithm Recursive Version of the Depth-First Search. Input: A graph G = (V, E) and a starting vertex v. Output: A set T of tree edges and an ordering of the vertices traversed. 1. Let i 1 and let F. For all v V, do the following: Set n(v) While for some u, n(u) = 0, do the following: DFS(u). 3. Output T. (The recursive procedure DFS is now given.) Procedure DFS(v) 1. Let n(v) i and i i For all u N(v), do the following: if n(u) = 0, then T T { e = uv } DFS(u)

18 18 Chapter 2: Paths and Searching end DFS The depth-first search is an extremely important tool, with applications to many other algorithms. Often, an algorithm for determining a graph property or parameter is dependent on the structure of the particular graph under consideration, and we must search that graph to discover this structural dependence. We shall have occasion to make use of the depth-first search as we continue to build other more complicated algorithms. We now have a variety of ways of determining if a graph is connected. However, when dealing with graphs, you realize quickly that some graphs are "more connected" than others. For example, the path P n seems much less connected than the complete graph K n, in the sense that it is much easier to disconnect P n (remove one internal vertex or edge) than it is to disconnect K n (where removing a vertex merely reduces K n to K n 1 ). Denote by k(g) the connectivity of G, which is defined to be the minimum number of vertices whose removal disconnects G or reduces it to a single vertex K 1. Analogously, the edge connectivity, denoted k 1 (G), is the minimum number of edges whose removal disconnects G. If G is disconnected, then k(g) = 0 = k 1 (G). If G = K n, then k(g) = n 1 = k 1 (G), as we must remove n 1 vertices to reduce K n to K 1, and we can disconnect any vertex by removing the n 1 edges incident with it. We say G is n-connected if k(g) n and n-edge connected if k 1 (G) n. A set of vertices whose removal increases the number of components in a graph is called a vertex separating set (or vertex cut set) and a set of edges whose removal increases the number of components in a graph is called an edge separating set (or edge cut set). If the context is clear, we will simply use the term separating set (or cut set). If a cut set consists of a single vertex, it is called a cut vertex (some call it an articulation point), while if the cut set consists of a single edge, this edge is called a cut-edge or bridge. Paths can be used to describe both cut vertices and bridges. Theorem In a connected graph G: 1. A vertex v is a cut vertex if, and only if, there exist vertices u and w (u, w v) such that v is on every u w path of G. 2. An edge e is a bridge if, and only if, there exist vertices u and w such that e is on every u w path of G. Proof. To prove (1), let v be a cut vertex of G. If u and w are vertices in different components of G v, then there are no u w paths in G v. However, since G is

19 Chapter 2: Paths and Searching 19 connected, there are u w paths in G. Thus, v must lie on every u w path in G. Conversely, suppose that there exist vertices u and w in G such that v lies on every u w in G. Then in G v, there are no u w paths, and so G v is disconnected. Thus, v is a cut vertex of G. To prove (2), let e be a bridge of G. Then G e is disconnected. If u and w are vertices in different components of G e, then there are no u w paths in G e. But, since G is connected, there are u w paths in G. Thus, e must be on every u w path of G. Conversely, if there exist vertices u and w such that e is on every u w path in G, then clearly in G e there are no u w paths. Hence, G e is disconnected, and, hence, e is a bridge. The depth-first search algorithm can be modified to detect the blocks of a graph, that is, the maximal 2-connected subgraphs. The strategy of the algorithm is based on the following observations which are stated as a sequence of lemmas. Lemma Let G be a connected graph with DFS tree T. If vw is not a tree edge, then it is a back edge. Lemma For 1 i k, let G i = (V i, E i ) be the blocks of a connected graph G. Then 1. For all i j, V i V j contains at most one vertex. 2. Vertex x is a cut vertex if, and only if, x V i V j for some i j. Lemma Let G be a connected graph and T = (V, E 1 ) be a DFS search tree for G. Vertex x is a cut vertex of G if, and only if, 1. x is the root and x has more than one child in T, or 2. x is not the root and for some child s of x, there is no back edge between a descendant of s (including s itself) and a proper ancestor of x. Suppose we perform a DFS on G and number the vertices n(v) as usual. Further, suppose we define a lowpoint function LP(v) as the minimum number of a vertex reachable from v by a path in T followed by at most one back edge. Then we can use the lowpoint function to help us determine cut vertices.

20 20 Chapter 2: Paths and Searching Lemma If v is not a root of T (a DFS tree for G) then v is a cut vertex if, and only if, v has a child s in T with LP(s) n(v). These observations are illustrated in Figure 2.2.1, where tree edges are shown as dashed lines. r v Figure Cut vertex r as root and cut vertex v, not the root. In order to identify the blocks of a graph, we really must identify the cut vertices. In order to make use of our observations, we must employ a device called a stack to help us. We record values on a stack and retrieve these values in the reverse order of their placement on the stack. The name stack comes from the idea that this structure behaves much like a stack of trays in a cafeteria. The first trays placed on the stack are the last ones taken (from the top) for use. Thus, stacks are often described as first in-last out devices. Algorithm Finding Blocks of a Graph. Input: A connected graph G = (V, E). Output: The edges in each block of G. Method: A modified DFS. 1. Set T, i 1, and for all v V set n(v) Select v 0 V and call UDFS(v 0 ) 3. When vertex w is encountered in UDFS, push the edge vw on the stack (if it is not already there).

21 Chapter 2: Paths and Searching After discovering a pair vw such that w is a child of v and LP(w) n(v), pop from the stack all edges up to and including vw. These are the edges from a block of G Upgraded DFS - Procedure UDFS(v) 1. i 1 2. n(v) i, LP(v) n(v), i i For all w N(v), do the following: If n(w) = 0, then add uv to T p(w) v UDFS(w) If LP(w) n(v), then a block has been found. LP(v) min (LP(v), LP(w) ) Else If w p(v), then LP(v) min (LP(v), n(w) ) A simple inequality from Whitney [12] relates connectivity, edge connectivity and the minimum degree of a graph. Theorem For any graph G, k(g) k 1 (G) δ(g). Proof. If G is disconnected, then clearly k 1 (G) = 0. If G is connected, we can certainly disconnect it by removing all edges incident with a vertex of minimum degree. Thus, in either case, k 1 (G) δ(g). To verify that the first inequality holds, note that if G is disconnected or trivial, then clearly k(g) = k 1 (G) = 0. If G is connected and has a bridge, then k 1 (G) = 1 = k(g), as either G = K 2 or G is connected and contains cut vertices. Finally, if k 1 (G) 2, then the removal of k 1 (G) 1 of the edges in an edgeseparating set leaves a graph that contains a bridge. Let this bridge be e = uv. For each of the other edges, select an end vertex other than u or v and remove it from G. If the resulting graph is disconnected, then k(g) < k 1 (G). If the graph is connected, then it contains the bridge e and the removal of either u or v disconnects it. In either case, k(g) k 1 (G), and the result is verified.

22 22 Chapter 2: Paths and Searching Can you find a graph G for which k(g) < k 1 (G) < δ(g)? Bridges played an important role in the last proof. We can characterize bridges, again taking a structural view using cycles. Theorem G. In a graph G, the edge e is a bridge if, and only if, e lies on no cycle of Proof. Assume G is connected and let e = uv be an edge of G. Suppose e lies on a cycle C of G. Also let w 1 and w 2 be distinct arbitrary vertices of G. If e does not lie on a w 1 w 2 path P, then P is also a w 1 w 2 path in G e. If e does lie on a w 1 w 2 path P, then by replacing e by the u v (or v u) path of C not containing e produces a w 1 w 2 walk in G e. Thus, there is a w 1 w 2 path in G e and hence, e is not a bridge. Conversely, suppose e = uv is an edge of G that is on no cycle of G. Assume e is not a bridge. Then, G e is connected and hence there exists a u v path P in G e. Then P together with the edge e produces a cycle in G containing e, a contradiction. With the aid of Theorem 2.2.3, we can now characterize 2-connected graphs. Once again cycles play a fundamental role in the characterization. Before presenting the result, we need another definition. Two u v paths P 1 and P 2 are said to be internally disjoint if V(P 1 ) V(P 2 ) = { u, v }. Theorem (Whitney [12]). A graph G of order p 3 is 2-connected if, and only if, any two vertices of G lie on a common cycle. Proof. If any two vertices of G lie on a common cycle, then clearly there are at least two internally disjoint paths between these vertices. Thus, the removal of one vertex cannot disconnect G, that is, G is 2-connected. Conversely, let G be a 2-connected graph. We use induction on d(u, v) to prove that any two vertices u and v must lie on a common cycle. If d(u, v) = 1, then since G is 2-connected, the edge uv is not a bridge. Hence, by Theorem 2.2.3, the edge uv lies on a cycle. Now, assume the result holds for any two vertices at a distance less than d in G and consider vertices u and v such that d(u, v) = d 2. Let P be a u v path of length d in G and suppose w precedes v on P. Since d(u, w) = d 1, the induction hypothesis implies that u and w lie on a

23 Chapter 2: Paths and Searching 23 common cycle, say C. Since G is 2-connected, G w is connected and, hence, contains a u v path P 1. Let z (possibly z = u) be the last vertex of P 1 on C. Since u V(C), such a vertex must exist. Then G has two internally disjoint paths: one composed of the section of C from u to z not containing w together with the section of P 1 from z to v, and the other composed of the other section of C from u to w together with the edge wv. These two paths thus form a cycle containing u and v. A very powerful generalization of Whitney s theorem was proved by Menger [8]. Menger s theorem turns out to be related to many other results in several branches of discrete mathematics. We shall see some of these relationships later. Although a proof of Menger s theorem could be presented now, we postpone it until Chapter 4 in order to better point out some of these relationships to other results. Theorem (Menger s theorem). For nonadjacent vertices u and v in a graph G, the maximum number of internally disjoint u v paths equals the minimum number of vertices that separate u and v. Theorem has a generalization (Whitney [12]) to the k-connected case. This result should be viewed as the global version of Menger s theorem. Theorem A graph G is k-connected if, and only if, all distinct pairs of vertices are joined by at least k internally disjoint paths. It is natural to ask if there is an edge analog to Menger s theorem. This result was independently discovered much later by Ford and Fulkerson [5] and Elias, Feinstein and Shannon [2]. We postpone the proof of this result until Chapter 4. Theorem For any two vertices u and v of a graph G, the maximum number of edge disjoint paths joining u and v equals the minimum number of edges whose removal separates u and v.

24 24 Chapter 2: Paths and Searching Section 2.3 Digraph Connectivity The introduction of direction to the edges of a graph complicates the question of connectivity. In fact, we already know there are several levels of connectivity possible for digraphs. To help clarify the situation even further, we define a u v semiwalk to be a sequence u = v 1, v 2,..., v k = v, where for each i = 1, 2,..., k, either v i v i + 1 or v i v i + 1 is an arc of the digraph. Can you define a u v semipath? A semipath may be a directed path in the digraph, or it may not. However, a semipath would be a u v path in the underlying graph. We say a digraph D is 1. weakly connected if every two vertices of D are joined by a semipath 2. unilaterally connected (or unilateral) if for every two vertices u and v, there is a directed u v path or a directed v u path in D 3. strongly connected (or strong) if all pairs of vertices u and v are joined by both a u v and a v u directed path. If D satisfies none of these conditions, we say D is disconnected. As you might expect, each type of digraph connectivity can be characterized in terms of spanning semiwalks or paths. The proof of Theorem is similar in nature to that of connectivity in graphs, and so it is omitted. Theorem Let D be a digraph. Then 1. D is weakly connected if, and only if, D contains a spanning semiwalk 2. D is unilateral if, and only if, D contains a spanning walk 3. D is strong if, and only if, D contains a closed spanning walk. We say a vertex u is reachable from v if there exists a directed v u path in the digraph. The set of all vertices that are reachable from v is denoted as R(v). The relation "mutually reachable" is an equivalence relation (see exercises); hence, this relation partitions the vertex set into classes V 1, V 2,..., V k (k 1 ). Since the vertices u and v are in the same equivalence class if, and only if, D contains both a u v and v u directed path, the subgraphs S i = < V i > have come to be called the strong components of D. Despite the fact that the strong components of D partition the vertex set of D, they do not necessarily partition the arc set. This fact can be seen in the example in Figure

25 Chapter 2: Paths and Searching 25 The term strong component is still appropriate, even when D is weakly connected or unilateral, since if S 1 and S 2 are two strong components, all arcs between these strong components are directed in one way, from S 1 to S 2 or from S 2 to S 1. Thus, there will always be vertices in one of these components that cannot reach any vertex of the other component. Tarjan [10] developed an algorithm for finding the strongly connected components of a digraph. This algorithm makes use of the digraph S D = (V S, E S ), called the superstructure of D = (V, E), where V S = {S 1, S 2,..., S k } and E S = { e = S i S j i j and x y E where x S i and y S j }. Note that the digraph S D must be acyclic, for if it were not, then all strongly connected components on some cycle of S D would form one strongly connected component of D, contradicting the way the strong components were chosen. Now, we see that since S D is acyclic, some vertex, say S j, must have outdegree zero. Suppose that we perform a depth-first search on D. Let v be the first vertex of S j to be visited during this search. Since all the vertices of S j are reachable from v, the depthfirst search will never backtrack from v until all of the vertices in S j have been visited. Thus, the number n( u ) assigned to each vertex u as it is first reached during the DSF ensures that each vertex of S j has a number at least as large as n(v). Since there are no arcs out of S j, no vertex outside of S j is visited from the time we first encounter v until we finally backtrack from v. Our only remaining problem is to determine when we actually perform a backtrack on the first vertex encountered in that strong component. In order to solve this problem, we again turn to the bookkeeping lowpoint function. Here, the lowpoint of v, denoted LP(v), is the least number n(u) of a vertex u reachable from v using a (possibly empty) directed path consisting of tree arcs followed by at most one back arc or cross arc, provided u is in the same strong component as v. This definition seems circular. To find strong components, we need the lowpoint, and to find the lowpoint, we need to know the strong components. Tarjan [10] eliminated this problem by using a stack. The vertices visited are stored on a stack in the order in which they are reached during the search. For each vertex we also record whether it is on the stack, using the function onstack (with values of true or false). Again we traverse the digraph using a depth-first search.

26 26 Chapter 2: Paths and Searching D: S 1 : S 2 : Figure A digraph D and its strong components S 1 and S 2. Algorithm Finding Strongly Connected Components. Input: A digraph D. Output: The vertices of the strong components of D. 1. Set i 1 and empty the stack. 2. For all v V, do the following: n(v) 0 onstack(v) false. 3. While n(v) = 0 for some v, do the following: strongcomp(v). Procedure strongcomp(v) 1. Set n(v) i, LP(v) n(v) and i i Place v on the stack and set onstack(v) true. 3. For all u N(v), do the following: 4. If n(u) = 0, then do the following: 5. strongcomp(u)

27 Chapter 2: Paths and Searching LP(v) min { LP(v), LP(u) } 7. Else if n(u) < n(v) and onstack(u) = true, then LP(v) min { LP(v), n(u) }. 8. If LP(v) = n(v) then delete and output the stack from the top down through v, and for each such vertex w, set onstack(w) false. Can you determine the complexity of the strong component algorithm? Section 2.4 Problem Solving and Heuristics Suppose you are confronted with the following problem to solve (what else is new?). You have two water jugs, a 4-gallon jug and a 3-gallon jug. Neither jug has any measure markings on it. There is also a water pump that you can use to fill the jugs. Your problem, however, is that you want exactly 2 gallons of water in the larger jug so that you can make your secret recipe. How can you solve this problem? The solution of this particular problem can actually help us see what some of the general techniques for problem solving are like. These techniques revolve around a search (often on a computer) for the solution among all possible situations the problem can produce. We may not even be sure that a solution exists when we begin this search or even know what the structure of the graph model happens to be. There are many approaches one might take to problem solving, but any organized approach certainly encompasses the following points: Define the problem precisely. This includes precise specifications of what the initial situation will be as well as what constitutes an acceptable solution to the problem. Analyze the problem. Some feature or features can have a tremendous impact on the techniques we should use in solving the problem. Understand the "legal moves" you can make to try to find the solution. Choose the best technique and apply it. We have just defined the water jug problem. We know that in the initial situation, both jugs are empty. We also know that a solution is found when there are exactly 2 gallons of water in the 4-gallon jug. Next, we must analyze the problem to try to determine what techniques to apply.

28 28 Chapter 2: Paths and Searching We can perform several "legal" operations with the water jugs: We can fill either jug completely from the pump. We can pour all the water from one jug into the other jug. We can fill one jug from the other jug. We can dump all the water from either jug. Why have we restricted our operations in these ways? The answer is so that we can maintain control over the situation. By restricting operations in this way, we will always know exactly how much water is in either jug at any given time. Note that these operations also ensure that our search must deal with only a finite number of situations, since each jug can be filled to only a finite number of levels. We have just examined an important concept, the idea of "moving" from one situation to another by performing one of a set of legal moves. What we want to do is to move from our present state (the starting vertex in the state space model) to some other state via these legal moves. Just what constitutes a legal move is dependent on the problem at hand and should be the result of our problem analysis. The digraph model we have been building should now be apparent. Represent each state that we can reach by a vertex. There is an arc from vertex a to vertex b if we can move from state a to state b via some legal move. Our digraph and the collection of legal moves that define its arcs, constitute the state space (or the state graph) of the problem. Let s determine the state space of the water jug problem. Label the state we are in by the ordered pair ( j 1, j 2 ), which shows the amount of water in the 4-gallon and 3-gallon jugs, respectively. The initial state is then labeled ( 0, 0 ). From this state we can move to either ( 4, 0 ) or ( 0, 3 ). Since we can move from these states back to ( 0, 0 ), for simplicity we will join these vertices by one undirected edge representing the symmetric pair of arcs. We picture this in Figure (0, 0) (4, 0) (0, 3) Figure Early states we can reach.

29 Chapter 2: Paths and Searching 29 From ( 4, 0 ) we can move to ( 0, 0 ), ( 4, 3 ) or ( 1, 3 ); while from ( 0, 3 ) we can move to ( 0, 0 ), ( 4, 3 ) or ( 3, 0 ). Thus, we have the situation in Figure (0, 0) (4, 0) (0, 3) (1, 3) (4, 3) (3, 0) Figure Two levels of the search. It makes no sense for us to follow arcs that would return us to states we have already determined are not solutions; therefore, we will not bother to include arcs like the one from ( 3, 0 ) to ( 0, 0 ). As we continue to generate new states, we will eventually reach the graph in Figure We can see that this graph contains several possible solutions as well as several different paths from the initial vertex to these solutions. Thus, there are many ways to solve this particular problem. In fact, since any path from ( 0, 0 ) to any vertex ( 2, j 2 ) demonstrates a set of legal moves necessary to produce an acceptable solution, we will content ourselves with finding any one of these paths. Our diagram representing the development of the state space also serves to point out another important fact. Rarely would we be presented with the state space and asked to find a path from the initial vertex to the solution. Instead, we would begin at a start vertex s and generate those vertices reachable from s in one move. If no solution is present, we begin generating neighbors of these vertices as we search for a solution. Thus, our search amounts to a blind search, that is, we cannot see the entire graph, only the local neighbors of the vertex we are presently examining. Luckily, we have already learned two search techniques that are essentially blind searches. Both the breadth-first search and the depth-first search are designed to operate in exactly this fashion. There are some problems with using these search techniques on state spaces. The fundamental difficulty is that we have no idea how large the state space may actually be, and, therefore, we have no idea how many vertices we might have to examine. Especially in the case of the breadth-first search, where entire new levels of neighbors are being produced at one time, the amount of data we need to handle may increase exponentially. In the case of either search, there may simply be too many intermediate

raph Theory Problems and Solutions Tom Davis tomrdavis@earthlink.net http://www.geometer.org/mathcircles November, 005 Problems. Prove that the sum of the degrees of the vertices of any finite graph is

2.3 Scheduling jobs on identical parallel machines There are jobs to be processed, and there are identical machines (running in parallel) to which each job may be assigned Each job = 1,,, must be processed

GRAPH THEORY LECTURE 4: TREES Abstract. 3.1 presents some standard characterizations and properties of trees. 3.2 presents several different types of trees. 3.7 develops a counting method based on a bijection

Math 104, Graph Theory February 19, 2013 Measure of connectivity How connected are each of these graphs? > increasing connectivity > I G 1 is a tree, so it is a connected graph w/minimum # of edges. Every

Project and Production Management Prof. Arun Kanda Department of Mechanical Engineering Indian Institute of Technology, Delhi Lecture - 15 Limited Resource Allocation Today we are going to be talking about

136 TER 4. INDUCTION, GRHS ND TREES 4.3 Graphs In this chapter we introduce a fundamental structural idea of discrete mathematics, that of a graph. Many situations in the applications of discrete mathematics

Homework Exam 1, Geometric Algorithms, 2016 1. (3 points) Let P be a convex polyhedron in 3-dimensional space. The boundary of P is represented as a DCEL, storing the incidence relationships between the

Induction Margaret M. Fleck 10 October 011 These notes cover mathematical induction and recursive definition 1 Introduction to induction At the start of the term, we saw the following formula for computing

On the independence number of graphs with maximum degree 3 Iyad A. Kanj Fenghui Zhang Abstract Let G be an undirected graph with maximum degree at most 3 such that G does not contain any of the three graphs

Chapter 3 Cartesian Products and Relations The material in this chapter is the first real encounter with abstraction. Relations are very general thing they are a special type of subset. After introducing

On the k-path cover problem for cacti Zemin Jin and Xueliang Li Center for Combinatorics and LPMC Nankai University Tianjin 300071, P.R. China zeminjin@eyou.com, x.li@eyou.com Abstract In this paper we

2. METHODS OF PROOF 69 2. Methods of Proof 2.1. Types of Proofs. Suppose we wish to prove an implication p q. Here are some strategies we have available to try. Trivial Proof: If we know q is true then

3. Eulerian and Hamiltonian Graphs There are many games and puzzles which can be analysed by graph theoretic concepts. In fact, the two early discoveries which led to the existence of graphs arose from

Mathematical Induction (Handout March 8, 01) The Principle of Mathematical Induction provides a means to prove infinitely many statements all at once The principle is logical rather than strictly mathematical,

POWER SETS AND RELATIONS L. MARIZZA A. BAILEY 1. The Power Set Now that we have defined sets as best we can, we can consider a sets of sets. If we were to assume nothing, except the existence of the empty

COMBINATORIAL PROPERTIES OF THE HIGMAN-SIMS GRAPH ZACHARY ABEL 1. Introduction In this survey we discuss properties of the Higman-Sims graph, which has 100 vertices, 1100 edges, and is 22 regular. In fact

Triangle deletion Ernie Croot February 3, 2010 1 Introduction The purpose of this note is to give an intuitive outline of the triangle deletion theorem of Ruzsa and Szemerédi, which says that if G = (V,

222 CHAPTER 6. PROBABILITY 6.3 Conditional Probability and Independence Conditional Probability Two cubical dice each have a triangle painted on one side, a circle painted on two sides and a square painted

Large induced subgraphs with all degrees odd A.D. Scott Department of Pure Mathematics and Mathematical Statistics, University of Cambridge, England Abstract: We prove that every connected graph of order

INDISTINGUISHABILITY OF ABSOLUTELY CONTINUOUS AND SINGULAR DISTRIBUTIONS STEVEN P. LALLEY AND ANDREW NOBEL Abstract. It is shown that there are no consistent decision rules for the hypothesis testing problem

UPPER BOUNDS ON THE L(2, 1)-LABELING NUMBER OF GRAPHS WITH MAXIMUM DEGREE ANDREW LUM ADVISOR: DAVID GUICHARD ABSTRACT. L(2,1)-labeling was first defined by Jerrold Griggs [Gr, 1992] as a way to use graphs

Kings in Tournaments by Yu Yibo, i Junwei, Lin Min ABSTRACT. Landau, a mathematical biologist, showed in 1953 that any tournament T always contains a king. A king, however, may not exist. in the. resulting

CHAPTER 3 Numbers and Numeral Systems Numbers play an important role in almost all areas of mathematics, not least in calculus. Virtually all calculus books contain a thorough description of the natural,

Math 4310 Handout - Quotient Vector Spaces Dan Collins The textbook defines a subspace of a vector space in Chapter 4, but it avoids ever discussing the notion of a quotient space. This is understandable

A -factor in which each cycle has long length in claw-free graphs Roman Čada Shuya Chiba Kiyoshi Yoshimoto 3 Department of Mathematics University of West Bohemia and Institute of Theoretical Computer Science

GRAPH THEORY LECTURE STRUCTURE AND REPRESENTATION PART A Abstract. Chapter focuses on the question of when two graphs are to be regarded as the same, on symmetries, and on subgraphs.. discusses the concept

CS787: Advanced Algorithms Lecture 5: Applications of Network Flow In the last lecture, we looked at the problem of finding the maximum flow in a graph, and how it can be efficiently solved using the Ford-Fulkerson

Does the Simplex Algorithm Work? In this section we carefully examine the simplex algorithm introduced in the previous chapter. Our goal is to either prove that it works, or to determine those circumstances

1. Prove that the empty set is a subset of every set. Basic Topology Written by Men-Gen Tsai email: b89902089@ntu.edu.tw Proof: For any element x of the empty set, x is also an element of every set since

1 Distance J Muscat 1 Metric Spaces Joseph Muscat 2003 (Last revised May 2009) (A revised and expanded version of these notes are now published by Springer.) 1 Distance A metric space can be thought of

8 8 Introduction to Algorithms May 7, 2004 Massachusetts Institute of Technology 6.046J/18.410J Professors Erik Demaine and Shafi Goldwasser Handout 25 Problem Set 7 Solutions This problem set is due in

Mean Ramsey-Turán numbers Raphael Yuster Department of Mathematics University of Haifa at Oranim Tivon 36006, Israel Abstract A ρ-mean coloring of a graph is a coloring of the edges such that the average

An inequality for the group chromatic number of a graph Hong-Jian Lai 1, Xiangwen Li 2 and Gexin Yu 3 1 Department of Mathematics, West Virginia University Morgantown, WV 26505 USA 2 Department of Mathematics

A Fast Algorithm For Finding Hamilton Cycles by Andrew Chalaturnyk A thesis presented to the University of Manitoba in partial fulfillment of the requirements for the degree of Masters of Science in Computer

Data Structures and Algorithms Written Examination 22 February 2013 FIRST NAME STUDENT NUMBER LAST NAME SIGNATURE Instructions for students: Write First Name, Last Name, Student Number and Signature where

CMPSCI611: Approximating MAX-CUT Lecture 20 For the next two lectures we ll be seeing examples of approximation algorithms for interesting NP-hard problems. Today we consider MAX-CUT, which we proved to

Approximation Algorithms Chapter Approximation Algorithms Q Suppose I need to solve an NP-hard problem What should I do? A Theory says you're unlikely to find a poly-time algorithm Must sacrifice one of

INCIDENCE-BETWEENNESS GEOMETRY MATH 410, CSUSM. SPRING 2008. PROFESSOR AITKEN This document covers the geometry that can be developed with just the axioms related to incidence and betweenness. The full

Math212a1010 Lebesgue measure. October 19, 2010 Today s lecture will be devoted to Lebesgue measure, a creation of Henri Lebesgue, in his thesis, one of the most famous theses in the history of mathematics.

Distributed Computing over Communication Networks: Maximal Independent Set What is a MIS? MIS An independent set (IS) of an undirected graph is a subset U of nodes such that no two nodes in U are adjacent.

A NOTE ON EDGE GUARDS IN ART GALLERIES R. Nandakumar (nandacumar@gmail.com) Abstract: We study the Art Gallery Problem with Edge Guards. We give an algorithm to arrange edge guards to guard only the inward

Odd induced subgraphs in graphs of maximum degree three David M. Berman, Hong Wang, and Larry Wargo Department of Mathematics University of New Orleans New Orleans, Louisiana, USA 70148 Abstract A long-standing

Open and Closed Sets Definition: A subset S of a metric space (X, d) is open if it contains an open ball about each of its points i.e., if x S : ɛ > 0 : B(x, ɛ) S. (1) Theorem: (O1) and X are open sets.

3. EQUIVALENCE RELATIONS 33 3. Equivalence Relations 3.1. Definition of an Equivalence Relations. Definition 3.1.1. A relation R on a set A is an equivalence relation if and only if R is reflexive, symmetric,

CS2 Algorithms and Data Structures Note 11 Breadth-First Search and Shortest Paths In this last lecture of the CS2 Algorithms and Data Structures thread we will consider the problem of computing distances

Dynamic Programming Dynamic programming is an optimization approach that transforms a complex problem into a sequence of simpler problems; its essential characteristic is the multistage nature of the optimization

CHAPTER 2 American mathematician Paul Halmos (1916 2006), who in 1942 published the first modern linear algebra book. The title of Halmos s book was the same as the title of this chapter. Finite-Dimensional

1 Introduction to Counting 1.1 Introduction In this chapter you will learn the fundamentals of enumerative combinatorics, the branch of mathematics concerned with counting. While enumeration problems can