Difference between revisions of "Chapter 8"
Jump to navigation
Jump to search
m (Protected "Chapter 8" ([Edit=Allow only administrators] (indefinite) [Move=Allow only administrators] (indefinite))) |
|||
(10 intermediate revisions by the same user not shown) | |||
Line 3: | Line 3: | ||
===Simulating Graph Algorithms=== | ===Simulating Graph Algorithms=== | ||
− | :[[8.1]] | + | :[[8.1]]. For the graphs in Problem 7-1: |
− | + | :(a) Draw the spanning forest after every iteration of the main loop in Kruskal’s algorithm. | |
+ | :(b) Draw the spanning forest after every iteration of the main loop in Prim’s algorithm. | ||
+ | :(c) Find the shortest-path spanning tree rooted in <math>A</math>. | ||
+ | :(d) Compute the maximum flow from <math>A</math> to <math>H</math>. | ||
+ | [[8.1|Solution]] | ||
===Minimum Spanning Tree=== | ===Minimum Spanning Tree=== | ||
− | :8.2 | + | :8.2. Is the path between two vertices in a minimum spanning tree necessarily a shortest path between the two vertices in the full graph? Give a proof or a counterexample. |
− | |||
− | |||
+ | :[[8.3]]. Assume that all edges in the graph have distinct edge weights (i.e., no pair of edges have the same weight). Is the path between a pair of vertices in a minimum spanning tree necessarily a shortest path between the two vertices in the full graph? Give a proof or a counterexample. | ||
+ | [[8.3|Solution]] | ||
− | |||
+ | :8.4. Can Prim’s and Kruskal’s algorithms yield different minimum spanning trees? Explain why or why not. | ||
− | |||
+ | :[[8.5]]. Does either Prim’s or Kruskal’s algorithm work if there are negative edge weights? Explain why or why not. | ||
+ | [[8.5|Solution]] | ||
− | |||
+ | :8.6. (a) Assume that all edges in the graph have distinct edge weights (i.e., no pair of edges have the same weight). Is the ''minimum spanning tree'' of this graph unique? Give a proof or a counterexample. | ||
+ | :(b) Again, assume that all edges in the graph have distinct edge weights (i.e. no pair of edges have the same weight). Is the ''shortest-path spanning tree'' of this graph unique? Give a proof or a counterexample. | ||
− | |||
+ | :[[8.7]]. Suppose we are given the minimum spanning tree <math>T</math> of a given graph <math>G</math> (with <math>n</math> vertices and <math>m</math> edges) and a new edge <math>e = (u, v)</math> of weight <math>w</math> that we will add to <math>G</math>. Give an efficient algorithm to find the minimum spanning tree of the graph <math>G + e</math>. Your algorithm should run in <math>O(n)</math> time to receive full credit. | ||
+ | [[8.7|Solution]] | ||
− | |||
+ | :8.8. (a) Let <math>T</math> be a minimum spanning tree of a weighted graph <math>G</math>. Construct a new graph <math>G'</math> by adding a weight of <math>k</math> to every edge of <math>G</math>. Do the edges of <math>T</math> form a minimum spanning tree of <math>G'</math>? Prove the statement or give a counterexample. | ||
+ | :(b) Let <math>P = {s, . . . , t}</math> describe a shortest path between vertices <math>s</math> and <math>t</math> of a weighted graph <math>G</math>. Construct a new graph <math>G'</math> by adding a weight of <math>k</math> to every edge of <math>G</math>. Does <math>P</math> describe a shortest path from <math>s</math> to <math>t</math> in <math>G'</math>? Prove the statement or give a counterexample. | ||
− | |||
+ | :[[8.9]]. Devise and analyze an algorithm that takes a weighted graph <math>G</math> and finds the smallest change in the cost to a non-minimum spanning tree edge that would cause a change in the minimum spanning tree of <math>G</math>. Your algorithm must be correct and run in polynomial time. | ||
+ | [[8.9|Solution]] | ||
− | |||
+ | :8.10. Consider the problem of finding a minimum-weight connected subset <math>T</math> of edges from a weighted connected graph <math>G</math>. The weight of <math>T</math> is the sum of all the edge weights in <math>T</math>. | ||
+ | :(a) Why is this problem not just the minimum spanning tree problem? (Hint: think negative weight edges.) | ||
+ | :(b) Give an efficient algorithm to compute the minimum-weight connected subset <math>T</math>. | ||
− | |||
+ | :[[8.11]]. Let <math>T = (V, E')</math> be a minimum spanning tree of a given graph <math>G = (V, E)</math> with positive edge weights. Now suppose the weight of a particular edge <math>e \in E</math> is modified from <math>w(e)</math> to a new value <math>\hat{w}(e)</math>. We seek to update the minimum spanning tree <math>T</math> to reflect this change without recomputing the entire tree from scratch. For each of the following four cases, give a linear-time algorithm to update the tree: | ||
+ | :(a)<math>e \notin E'</math> and <math> \hat{w}(e) > w(e)</math> | ||
+ | :(b) <math>e \notin E'</math> and <math>\hat{w}(e) < w(e)</math> | ||
+ | :(c) <math>e \in E'</math> and <math>\hat{w}(e) < w(e)</math> | ||
+ | :(d) <math>e \in E' </math> and <math>\hat{w}(e) > w(e)</math> | ||
+ | [[8.11|Solution]] | ||
− | |||
+ | :8.12. Let <math>G=(V,E)</math> be an undirected graph. A set <math>F \subseteq E</math> of edges is called a ''feedback-edge set'' if every cycle of <math>G</math> has at least one edge in <math>F</math>. | ||
+ | :(a)Suppose that <math>G</math> is unweighted. Design an efficient algorithm to find a minimum-size feedback-edge set. | ||
+ | :(b)Suppose that <math>G</math> is a weighted undirected graph with positive edge weights. Design an efficient algorithm to find a minimum-weight feedback-edge set. | ||
===Union Find=== | ===Union Find=== | ||
− | :[[8.13]] | + | :[[8.13]]. Devise an efficient data structure to handle the following operations on a weighted directed graph: |
− | + | :(a)Merge two given components. | |
+ | :(b)Locate which component contains a given vertex <math>v</math>. | ||
+ | :(c)Retrieve a minimum edge from a given component. | ||
+ | [[8.13|Solution]] | ||
− | |||
+ | :8.14. Design a data structure that can perform a sequence of, <math>m</math> ''union'' and ''find'' operations on a universal set of <math>n</math> elements, consisting of a sequence of all ''unions'' followed by a sequence of all ''finds'', in time <math>O(m+n)</math>. | ||
===Shortest Paths=== | ===Shortest Paths=== | ||
− | :[[8 | + | :[[8.15]]. The ''single-destination shortest path'' problem for a directed graph seeks the shortest path ''from'' every vertex to a specified vertex <math>v</math>. Give an efficient algorithm to solve the single-destination shortest paths problem. |
− | + | [[8.15|Solution]] | |
− | |||
+ | :8.16. Let <math>G=(V,E)</math> be an undirected weighted graph, and let <math>T</math> be the shortest-path spanning tree rooted at a vertex <math>v</math>. Suppose now that all the edge weights in <math>G</math> are increased by a constant number <math>k</math>. Is <math>T</math> still the shortest-path spanning tree from <math>v</math>? | ||
− | |||
+ | :[[8.17]]. (a)Give an example of a weighted connected graph <math>G=(V,E)</math> and a vertex <math>v</math>, such that the minimum spanning tree of <math>G</math> is the same as the shortest-path spanning tree rooted at <math>v</math>. | ||
+ | :(b)Give an example of a weighted connected directed graph <math>G=(V,E)</math> and a vertex <math>v</math>, such that the minimum-cost spanning tree of <math>G</math> is very different from the shortest-path spanning tree rooted at <math>v</math>. | ||
+ | :(c)Can the two trees be completely disjointed? | ||
+ | [[8.17|Solution]] | ||
− | |||
+ | :8.18. Either prove the following or give a counterexample: | ||
+ | :(a)Is the path between a pair of vertices in a minimum spanning tree of an undirected graph necessarily the shortest (minimum weight) path? | ||
+ | :(b)Suppose that the minimum spanning tree of the graph is unique. Is the path between a pair of vertices in a minimum spanning tree of an undirected graph necessarily the shortest (minimum weight) path? | ||
− | |||
+ | :[[8.19]]. Give an efficient algorithm to find the shortest path from <math>x</math> to <math>y</math> in an undirected weighted graph <math>G = (V, E)</math> with positive edge weights, subject to the constraint that this path must pass through a particular vertex <math>z</math>. | ||
+ | [[8.19|Solution]] | ||
− | |||
+ | :8.20. In certain graph problems, vertices have can have weights instead of or in addition to the weights of edges. Let <math>C_v</math> be the cost of vertex <math>v</math>, and <math>C_{(x,y)}</math> the cost of the edge <math>(x,y)</math>. This problem is concerned with finding the cheapest path between vertices <math>a</math> and <math>b</math> in a graph <math>G</math>. The cost of a path is the sum of the costs of the edges and vertices encountered on the path. | ||
+ | :(a)Suppose that each edge in the graph has a weight of zero (while non-edges have a cost of <math>\infty</math>). Assume that <math>C_v = 1</math> for all vertices <math>1 \leq v \leq n</math> (i.e., all vertices have the same cost). Give an ''efficient'' algorithm to find the cheapest path from <math>a</math> to <math>b</math> and its time complexity. | ||
+ | :(b)Now suppose that the vertex costs are not constant (but are all positive) and the edge costs remain as above. Give an ''efficient'' algorithm to find the cheapest path from <math>a</math> to <math>b</math> and its time complexity. | ||
+ | :(c)Now suppose that both the edge and vertex costs are not constant (but are all positive). Give an ''efficient'' algorithm to find the cheapest path from <math>a</math> to <math>b</math> and its time complexity. | ||
− | |||
+ | :[[8.21]]. Give an <math>O(n^3)</math> algorithm that takes an <math>n</math>-vertex directed graph <math>G</math> with positive edge lengths, and returns the length of the shortest cycle in the graph. This length is <math>\infty</math> in the case of an acyclic graph. | ||
+ | [[8.21|Solution]] | ||
− | |||
+ | :8.22. A highway network is represented by a weighted graph <math>G</math>, with edges corresponding to roads and vertices corresponding to road intersections. Each road is labeled with the maximum possible height of vehicles that can pass through the road. Give an efficient algorithm to compute the maximum possible height of vehicles that can successfully travel from <math>s</math> to <math>t</math>. What is the runtime of your algorithm? | ||
− | |||
+ | :[[8.23]]. You are given a directed graph <math>G</math> with possibly negative weighted edges, in which the shortest path between any two vertices is guaranteed to have at most <math>k</math> edges. Give an algorithm that finds the shortest path between two vertices <math>u</math> and <math>v</math> in <math>O(k * (n + m))</math> time. | ||
+ | [[8.23|Solution]] | ||
− | |||
+ | :8.24. Can we solve the single-source ''longest''-path problem by changing ''minimum'' to ''maximum'' in Dijkstra’s algorithm? If so, then prove your algorithm correct. If not, then provide a counterexample. | ||
− | |||
+ | :[[8.25]]. Let <math>G = (V, E)</math> be a weighted acyclic directed graph with possibly negative edge weights. Design a linear-time algorithm to solve the single-source shortest-path problem from a given source <math>v</math>. | ||
+ | [[8.25|Solution]] | ||
− | |||
+ | :8.26. Let <math>G=(V,E)</math> be a directed weighted graph such that all the weights are positive. Let <math>v</math> and <math>w</math> be two vertices in <math>G</math> and <math>k \leq |V|</math> be an integer. Design an algorithm to find the shortest path from <math>v</math> to <math>w</math> that contains exactly <math>k</math> edges. Note that the path need not be simple. | ||
− | |||
+ | :[[8.27]]. ''Arbitrage'' is the use of discrepancies in currency-exchange rates to make a profit. For example, there may be a small window of time during which 1 U.S. dollar buys 0.75 British pounds, 1 British pound buys 2 Australian dollars, and 1 Australian dollar buys 0.70 U.S. dollars. At such a time, a smart trader can trade one U.S. dollar and end up with <math>0.75 \times 2 \times 0.7 = 1.05</math> U.S. dollars---a profit of 5%. Suppose that there are <math>n</math> currencies <math>c_1,...,c_n</math> and an <math>n \times n</math> table <math>R</math> of exchange rates, such that one unit of currency <math>c_i</math> buys <math>R[i,j]</math> units of currency <math>c_j</math>. Devise and analyze an algorithm to determine the maximum value of <math> R[c_1,c_{i1}] \cdot R[c_{i1},c_{i2}] \cdots R[c_{i{k-1}},c_{ik}] \cdot R[c_{ik},c_1] </math> Hint: think all-pairs shortest path. | ||
+ | [[8.27|Solution]] | ||
===Network Flow and Matching=== | ===Network Flow and Matching=== | ||
− | :8.28 | + | :8.28. A matching in a graph is a set of disjoint edges—that is, edges that do not have common vertices. Give a linear-time algorithm to find a maximum matching in a tree. |
− | :[[8.29]] | + | :[[8.29]]. An edge cover of an undirected graph <math>G = (V, E)</math> is a set of edges such that each vertex in the graph is incident to at least one edge from the set. Give an efficient algorithm, based on matching, to find the minimum-size edge cover for <math>G</math>. |
+ | [[8.29|Solution]] | ||
Back to [[Chapter List]] | Back to [[Chapter List]] |
Latest revision as of 18:09, 1 October 2020
Contents
Weighted Graph Algorithms
Simulating Graph Algorithms
- 8.1. For the graphs in Problem 7-1:
- (a) Draw the spanning forest after every iteration of the main loop in Kruskal’s algorithm.
- (b) Draw the spanning forest after every iteration of the main loop in Prim’s algorithm.
- (c) Find the shortest-path spanning tree rooted in [math]\displaystyle{ A }[/math].
- (d) Compute the maximum flow from [math]\displaystyle{ A }[/math] to [math]\displaystyle{ H }[/math].
Minimum Spanning Tree
- 8.2. Is the path between two vertices in a minimum spanning tree necessarily a shortest path between the two vertices in the full graph? Give a proof or a counterexample.
- 8.3. Assume that all edges in the graph have distinct edge weights (i.e., no pair of edges have the same weight). Is the path between a pair of vertices in a minimum spanning tree necessarily a shortest path between the two vertices in the full graph? Give a proof or a counterexample.
- 8.4. Can Prim’s and Kruskal’s algorithms yield different minimum spanning trees? Explain why or why not.
- 8.5. Does either Prim’s or Kruskal’s algorithm work if there are negative edge weights? Explain why or why not.
- 8.6. (a) Assume that all edges in the graph have distinct edge weights (i.e., no pair of edges have the same weight). Is the minimum spanning tree of this graph unique? Give a proof or a counterexample.
- (b) Again, assume that all edges in the graph have distinct edge weights (i.e. no pair of edges have the same weight). Is the shortest-path spanning tree of this graph unique? Give a proof or a counterexample.
- 8.7. Suppose we are given the minimum spanning tree [math]\displaystyle{ T }[/math] of a given graph [math]\displaystyle{ G }[/math] (with [math]\displaystyle{ n }[/math] vertices and [math]\displaystyle{ m }[/math] edges) and a new edge [math]\displaystyle{ e = (u, v) }[/math] of weight [math]\displaystyle{ w }[/math] that we will add to [math]\displaystyle{ G }[/math]. Give an efficient algorithm to find the minimum spanning tree of the graph [math]\displaystyle{ G + e }[/math]. Your algorithm should run in [math]\displaystyle{ O(n) }[/math] time to receive full credit.
- 8.8. (a) Let [math]\displaystyle{ T }[/math] be a minimum spanning tree of a weighted graph [math]\displaystyle{ G }[/math]. Construct a new graph [math]\displaystyle{ G' }[/math] by adding a weight of [math]\displaystyle{ k }[/math] to every edge of [math]\displaystyle{ G }[/math]. Do the edges of [math]\displaystyle{ T }[/math] form a minimum spanning tree of [math]\displaystyle{ G' }[/math]? Prove the statement or give a counterexample.
- (b) Let [math]\displaystyle{ P = {s, . . . , t} }[/math] describe a shortest path between vertices [math]\displaystyle{ s }[/math] and [math]\displaystyle{ t }[/math] of a weighted graph [math]\displaystyle{ G }[/math]. Construct a new graph [math]\displaystyle{ G' }[/math] by adding a weight of [math]\displaystyle{ k }[/math] to every edge of [math]\displaystyle{ G }[/math]. Does [math]\displaystyle{ P }[/math] describe a shortest path from [math]\displaystyle{ s }[/math] to [math]\displaystyle{ t }[/math] in [math]\displaystyle{ G' }[/math]? Prove the statement or give a counterexample.
- 8.9. Devise and analyze an algorithm that takes a weighted graph [math]\displaystyle{ G }[/math] and finds the smallest change in the cost to a non-minimum spanning tree edge that would cause a change in the minimum spanning tree of [math]\displaystyle{ G }[/math]. Your algorithm must be correct and run in polynomial time.
- 8.10. Consider the problem of finding a minimum-weight connected subset [math]\displaystyle{ T }[/math] of edges from a weighted connected graph [math]\displaystyle{ G }[/math]. The weight of [math]\displaystyle{ T }[/math] is the sum of all the edge weights in [math]\displaystyle{ T }[/math].
- (a) Why is this problem not just the minimum spanning tree problem? (Hint: think negative weight edges.)
- (b) Give an efficient algorithm to compute the minimum-weight connected subset [math]\displaystyle{ T }[/math].
- 8.11. Let [math]\displaystyle{ T = (V, E') }[/math] be a minimum spanning tree of a given graph [math]\displaystyle{ G = (V, E) }[/math] with positive edge weights. Now suppose the weight of a particular edge [math]\displaystyle{ e \in E }[/math] is modified from [math]\displaystyle{ w(e) }[/math] to a new value [math]\displaystyle{ \hat{w}(e) }[/math]. We seek to update the minimum spanning tree [math]\displaystyle{ T }[/math] to reflect this change without recomputing the entire tree from scratch. For each of the following four cases, give a linear-time algorithm to update the tree:
- (a)[math]\displaystyle{ e \notin E' }[/math] and [math]\displaystyle{ \hat{w}(e) \gt w(e) }[/math]
- (b) [math]\displaystyle{ e \notin E' }[/math] and [math]\displaystyle{ \hat{w}(e) \lt w(e) }[/math]
- (c) [math]\displaystyle{ e \in E' }[/math] and [math]\displaystyle{ \hat{w}(e) \lt w(e) }[/math]
- (d) [math]\displaystyle{ e \in E' }[/math] and [math]\displaystyle{ \hat{w}(e) \gt w(e) }[/math]
- 8.12. Let [math]\displaystyle{ G=(V,E) }[/math] be an undirected graph. A set [math]\displaystyle{ F \subseteq E }[/math] of edges is called a feedback-edge set if every cycle of [math]\displaystyle{ G }[/math] has at least one edge in [math]\displaystyle{ F }[/math].
- (a)Suppose that [math]\displaystyle{ G }[/math] is unweighted. Design an efficient algorithm to find a minimum-size feedback-edge set.
- (b)Suppose that [math]\displaystyle{ G }[/math] is a weighted undirected graph with positive edge weights. Design an efficient algorithm to find a minimum-weight feedback-edge set.
Union Find
- 8.13. Devise an efficient data structure to handle the following operations on a weighted directed graph:
- (a)Merge two given components.
- (b)Locate which component contains a given vertex [math]\displaystyle{ v }[/math].
- (c)Retrieve a minimum edge from a given component.
- 8.14. Design a data structure that can perform a sequence of, [math]\displaystyle{ m }[/math] union and find operations on a universal set of [math]\displaystyle{ n }[/math] elements, consisting of a sequence of all unions followed by a sequence of all finds, in time [math]\displaystyle{ O(m+n) }[/math].
Shortest Paths
- 8.15. The single-destination shortest path problem for a directed graph seeks the shortest path from every vertex to a specified vertex [math]\displaystyle{ v }[/math]. Give an efficient algorithm to solve the single-destination shortest paths problem.
- 8.16. Let [math]\displaystyle{ G=(V,E) }[/math] be an undirected weighted graph, and let [math]\displaystyle{ T }[/math] be the shortest-path spanning tree rooted at a vertex [math]\displaystyle{ v }[/math]. Suppose now that all the edge weights in [math]\displaystyle{ G }[/math] are increased by a constant number [math]\displaystyle{ k }[/math]. Is [math]\displaystyle{ T }[/math] still the shortest-path spanning tree from [math]\displaystyle{ v }[/math]?
- 8.17. (a)Give an example of a weighted connected graph [math]\displaystyle{ G=(V,E) }[/math] and a vertex [math]\displaystyle{ v }[/math], such that the minimum spanning tree of [math]\displaystyle{ G }[/math] is the same as the shortest-path spanning tree rooted at [math]\displaystyle{ v }[/math].
- (b)Give an example of a weighted connected directed graph [math]\displaystyle{ G=(V,E) }[/math] and a vertex [math]\displaystyle{ v }[/math], such that the minimum-cost spanning tree of [math]\displaystyle{ G }[/math] is very different from the shortest-path spanning tree rooted at [math]\displaystyle{ v }[/math].
- (c)Can the two trees be completely disjointed?
- 8.18. Either prove the following or give a counterexample:
- (a)Is the path between a pair of vertices in a minimum spanning tree of an undirected graph necessarily the shortest (minimum weight) path?
- (b)Suppose that the minimum spanning tree of the graph is unique. Is the path between a pair of vertices in a minimum spanning tree of an undirected graph necessarily the shortest (minimum weight) path?
- 8.19. Give an efficient algorithm to find the shortest path from [math]\displaystyle{ x }[/math] to [math]\displaystyle{ y }[/math] in an undirected weighted graph [math]\displaystyle{ G = (V, E) }[/math] with positive edge weights, subject to the constraint that this path must pass through a particular vertex [math]\displaystyle{ z }[/math].
- 8.20. In certain graph problems, vertices have can have weights instead of or in addition to the weights of edges. Let [math]\displaystyle{ C_v }[/math] be the cost of vertex [math]\displaystyle{ v }[/math], and [math]\displaystyle{ C_{(x,y)} }[/math] the cost of the edge [math]\displaystyle{ (x,y) }[/math]. This problem is concerned with finding the cheapest path between vertices [math]\displaystyle{ a }[/math] and [math]\displaystyle{ b }[/math] in a graph [math]\displaystyle{ G }[/math]. The cost of a path is the sum of the costs of the edges and vertices encountered on the path.
- (a)Suppose that each edge in the graph has a weight of zero (while non-edges have a cost of [math]\displaystyle{ \infty }[/math]). Assume that [math]\displaystyle{ C_v = 1 }[/math] for all vertices [math]\displaystyle{ 1 \leq v \leq n }[/math] (i.e., all vertices have the same cost). Give an efficient algorithm to find the cheapest path from [math]\displaystyle{ a }[/math] to [math]\displaystyle{ b }[/math] and its time complexity.
- (b)Now suppose that the vertex costs are not constant (but are all positive) and the edge costs remain as above. Give an efficient algorithm to find the cheapest path from [math]\displaystyle{ a }[/math] to [math]\displaystyle{ b }[/math] and its time complexity.
- (c)Now suppose that both the edge and vertex costs are not constant (but are all positive). Give an efficient algorithm to find the cheapest path from [math]\displaystyle{ a }[/math] to [math]\displaystyle{ b }[/math] and its time complexity.
- 8.21. Give an [math]\displaystyle{ O(n^3) }[/math] algorithm that takes an [math]\displaystyle{ n }[/math]-vertex directed graph [math]\displaystyle{ G }[/math] with positive edge lengths, and returns the length of the shortest cycle in the graph. This length is [math]\displaystyle{ \infty }[/math] in the case of an acyclic graph.
- 8.22. A highway network is represented by a weighted graph [math]\displaystyle{ G }[/math], with edges corresponding to roads and vertices corresponding to road intersections. Each road is labeled with the maximum possible height of vehicles that can pass through the road. Give an efficient algorithm to compute the maximum possible height of vehicles that can successfully travel from [math]\displaystyle{ s }[/math] to [math]\displaystyle{ t }[/math]. What is the runtime of your algorithm?
- 8.23. You are given a directed graph [math]\displaystyle{ G }[/math] with possibly negative weighted edges, in which the shortest path between any two vertices is guaranteed to have at most [math]\displaystyle{ k }[/math] edges. Give an algorithm that finds the shortest path between two vertices [math]\displaystyle{ u }[/math] and [math]\displaystyle{ v }[/math] in [math]\displaystyle{ O(k * (n + m)) }[/math] time.
- 8.24. Can we solve the single-source longest-path problem by changing minimum to maximum in Dijkstra’s algorithm? If so, then prove your algorithm correct. If not, then provide a counterexample.
- 8.25. Let [math]\displaystyle{ G = (V, E) }[/math] be a weighted acyclic directed graph with possibly negative edge weights. Design a linear-time algorithm to solve the single-source shortest-path problem from a given source [math]\displaystyle{ v }[/math].
- 8.26. Let [math]\displaystyle{ G=(V,E) }[/math] be a directed weighted graph such that all the weights are positive. Let [math]\displaystyle{ v }[/math] and [math]\displaystyle{ w }[/math] be two vertices in [math]\displaystyle{ G }[/math] and [math]\displaystyle{ k \leq |V| }[/math] be an integer. Design an algorithm to find the shortest path from [math]\displaystyle{ v }[/math] to [math]\displaystyle{ w }[/math] that contains exactly [math]\displaystyle{ k }[/math] edges. Note that the path need not be simple.
- 8.27. Arbitrage is the use of discrepancies in currency-exchange rates to make a profit. For example, there may be a small window of time during which 1 U.S. dollar buys 0.75 British pounds, 1 British pound buys 2 Australian dollars, and 1 Australian dollar buys 0.70 U.S. dollars. At such a time, a smart trader can trade one U.S. dollar and end up with [math]\displaystyle{ 0.75 \times 2 \times 0.7 = 1.05 }[/math] U.S. dollars---a profit of 5%. Suppose that there are [math]\displaystyle{ n }[/math] currencies [math]\displaystyle{ c_1,...,c_n }[/math] and an [math]\displaystyle{ n \times n }[/math] table [math]\displaystyle{ R }[/math] of exchange rates, such that one unit of currency [math]\displaystyle{ c_i }[/math] buys [math]\displaystyle{ R[i,j] }[/math] units of currency [math]\displaystyle{ c_j }[/math]. Devise and analyze an algorithm to determine the maximum value of [math]\displaystyle{ R[c_1,c_{i1}] \cdot R[c_{i1},c_{i2}] \cdots R[c_{i{k-1}},c_{ik}] \cdot R[c_{ik},c_1] }[/math] Hint: think all-pairs shortest path.
Network Flow and Matching
- 8.28. A matching in a graph is a set of disjoint edges—that is, edges that do not have common vertices. Give a linear-time algorithm to find a maximum matching in a tree.
- 8.29. An edge cover of an undirected graph [math]\displaystyle{ G = (V, E) }[/math] is a set of edges such that each vertex in the graph is incident to at least one edge from the set. Give an efficient algorithm, based on matching, to find the minimum-size edge cover for [math]\displaystyle{ G }[/math].
Back to Chapter List