Editing Graph theory

Jump to: navigation, search

Warning: You are not logged in. Your IP address will be publicly visible if you make any edits. If you log in or create an account, your edits will be attributed to your username, along with other benefits.

The edit can be undone. Please check the comparison below to verify that this is what you want to do, and then save the changes below to finish undoing the edit.
Latest revision Your text
Line 78: Line 78:
 
:* The '''bounded cost shortest path problem''' asks us to find the shortest path that does not exceed some fixed cost, where a cost is assigned to each edge in addition to its weight; this is like finding the shortest sequence of flights that fits within one's budget.
 
:* The '''bounded cost shortest path problem''' asks us to find the shortest path that does not exceed some fixed cost, where a cost is assigned to each edge in addition to its weight; this is like finding the shortest sequence of flights that fits within one's budget.
 
:* The problem of finding ''two'' paths between a given pair of vertices such that they have no common edges and the sum of their weights is minimized can be solved using [[Suurballe's algorithm]].
 
:* The problem of finding ''two'' paths between a given pair of vertices such that they have no common edges and the sum of their weights is minimized can be solved using [[Suurballe's algorithm]].
* '''Spanning tree''': A tree <math>T</math> is said to '''span''' a graph <math>G</math> when <math>T</math> is a subgraph of <math>G</math> and <math>T</math> contains all of <math>G</math>'s vertices. A spanning tree can be found in linear time using [[depth-first search]] or [[breadth-first search]].
+
* '''[[Minimum spanning tree]] problem''': The weight of a tree is the sum of the weights of the edges it contains. A tree <math>T</math> is said to '''span''' a graph <math>G</math> when <math>T</math> is a subgraph of <math>G</math> and <math>T</math> contains all of <math>G</math>'s vertices. Find a tree that spans <math>G</math>, while minimizing its weight.
:* '''[[Minimum spanning tree]] problem''': The weight of a tree is the sum of the weights of the edges it contains. Find a tree that spans <math>G</math>, while minimizing its weight. This can be accomplished using a priority-first search instead.
+
 
:* The '''[[minimum diameter spanning tree]] problem''' is analogous, but now we want a spanning tree with the lowest possible diameter.
 
:* The '''[[minimum diameter spanning tree]] problem''' is analogous, but now we want a spanning tree with the lowest possible diameter.
 
* The '''[[minimum spanning arborescence]] problem''' is analogous to the minimum spanning tree problem, but more difficult.
 
* The '''[[minimum spanning arborescence]] problem''' is analogous to the minimum spanning tree problem, but more difficult.
Line 88: Line 87:
 
:* '''Minimum vertex cut problem''': Find a subset of a flow graph's vertices, of minimum size, such that removing these vertices from the graph causes the sink to become unreachable from the source. (We are not allowed to remove the source or the sink.) This can be solved by replacing all nodes in the flow graph except the source and the sink by a pair of nodes, one for all the in-edges and one for all the out-edges, with an edge of cost 1 from the in-node to the out-node, and then finding a minimum edge cut, as above. (We set the costs of all other edges to infinity.)
 
:* '''Minimum vertex cut problem''': Find a subset of a flow graph's vertices, of minimum size, such that removing these vertices from the graph causes the sink to become unreachable from the source. (We are not allowed to remove the source or the sink.) This can be solved by replacing all nodes in the flow graph except the source and the sink by a pair of nodes, one for all the in-edges and one for all the out-edges, with an edge of cost 1 from the in-node to the out-node, and then finding a minimum edge cut, as above. (We set the costs of all other edges to infinity.)
 
:* '''[[Minimum cost maximum flow]] problem''': Maximize the flow, but also minimize the cost; the cost of sending flow along an edge is the product of the amount of flow along that edge and some constant specific to that edge.
 
:* '''[[Minimum cost maximum flow]] problem''': Maximize the flow, but also minimize the cost; the cost of sending flow along an edge is the product of the amount of flow along that edge and some constant specific to that edge.
* ''Finding strongly connected components'': Analogous to finding connected components, but in a directed graph. This is a bit trickier but can still be accomplished in linear time using [[Kosaraju's algorithm]], [[Tarjan's strongly connected components algorithm|Tarjan's algorithm]], or [[Gabow's algorithm]].
+
* ''Finding strongly connected components'': Analogous to finding connected components, but in a directed graph. This is a bit trickier but can still be accomplished in linear time using [[Kosaraju's algorithm]], [[Tarjan's algorithm]], or [[Gabow's algorithm]].
 
* ''Finding edge-connected and biconnected components'': We can identify all the cut vertices and cut edges of an undirected graph in linear time using [[Finding cut vertices and edges|a depth-first search algorithm due to Hopcroft and Tarjan]].
 
* ''Finding edge-connected and biconnected components'': We can identify all the cut vertices and cut edges of an undirected graph in linear time using [[Finding cut vertices and edges|a depth-first search algorithm due to Hopcroft and Tarjan]].
 
* ''Dominators'': These are like articulation points, but for directed graphs instead. In a control flow graph with source <math>s</math>, we say that a vertex <math>u</math> '''dominates''' a vertex <math>v</math> if every path from <math>s</math> to <math>v</math> must visit <math>u</math>. Every vertex dominates itself, but for all <math>v \neq s</math>, there is also an '''immediate dominator''' <math>u</math> such that <math>u \neq v</math>, <math>u</math> dominates <math>v</math>, and any other dominator of <math>v</math> that is not <math>v</math> itself also dominates <math>u</math>. Computing all immediate dominators gives a '''dominator tree''', which can be computed in linear time using the [[Lengauer–Tarjan algorithm]].
 
* ''Dominators'': These are like articulation points, but for directed graphs instead. In a control flow graph with source <math>s</math>, we say that a vertex <math>u</math> '''dominates''' a vertex <math>v</math> if every path from <math>s</math> to <math>v</math> must visit <math>u</math>. Every vertex dominates itself, but for all <math>v \neq s</math>, there is also an '''immediate dominator''' <math>u</math> such that <math>u \neq v</math>, <math>u</math> dominates <math>v</math>, and any other dominator of <math>v</math> that is not <math>v</math> itself also dominates <math>u</math>. Computing all immediate dominators gives a '''dominator tree''', which can be computed in linear time using the [[Lengauer–Tarjan algorithm]].

Please note that all contributions to PEGWiki are considered to be released under the Attribution 3.0 Unported (see PEGWiki:Copyrights for details). If you do not want your writing to be edited mercilessly and redistributed at will, then do not submit it here.
You are also promising us that you wrote this yourself, or copied it from a public domain or similar free resource. Do not submit copyrighted work without permission!

Cancel | Editing help (opens in new window)