Birkhoff algorithm
Birkhoff's algorithm (also called Birkhoff-von-Neumann algorithm) is an algorithm for decomposing a bistochastic matrix into a convex combination of permutation matrices. It was published by Garrett Birkhoff in 1946. It has many applications. One such application is for the problem of fair random assignment: given a randomized allocation of items, Birkhoff's algorithm can decompose it into a lottery on deterministic allocations. Terminology. A "bistochastic matrix" (also called: "doubly-stochastic") is a matrix in which all elements are greater than or equal to 0 and the sum of the elements in each row and column  equals 1. An example is the following 3-by-3 matrix: formula_1 A "permutation matrix" is a special case of a bistochastic matrix, in which each element is either 0 or 1 (so there is exactly one "1" in each row and each column). An example is the following 3-by-3 matrix: formula_2 A Birkhoff decomposition (also called: Birkhoff-von-Neumann decomposition) of a bistochastic matrix is a presentation of it as a sum of permutation matrices with non-negative weights. For example, the above matrix can be presented as the following sum: formula_3 Birkhoff's algorithm receives as input a  bistochastic matrix and returns as output a Birkhoff decomposition. Tools. A permutation set of an "n"-by-"n" matrix "X" is a set of "n" entries of "X" containing exactly one entry from each row and from each column. A theorem by Dénes Kőnig says that: "Every bistochastic matrix has a permutation-set in which all entries are positive."The positivity graph of an "n"-by-"n" matrix "X" is a bipartite graph with 2"n" vertices, in which the vertices on one side are "n" rows and the vertices on the other side are the "n" columns, and there is an edge between a  row and a column iff the entry at that row and column is positive. A permutation set with positive entries is equivalent to a perfect matching in the positivity graph. A perfect matching in a bipartite graph can be found in polynomial time, e.g. using any algorithm for maximum cardinality matching. Kőnig's theorem is equivalent to the following:"The positivity graph of any bistochastic matrix admits a perfect matching."A matrix is called scaled-bistochastic if all elements are weakly-positive, and the sum of each row and column equals "c", where "c" is some positive constant. In other words , it is "c" times a bistochastic matrix. Since the positivity graph is not affected by scaling:"The positivity graph of any scaled-bistochastic matrix admits a perfect matching." Algorithm. Using the tools above, Birkhoff's algorithm works as follows. The algorithm is correct because, after step 6, the sum in each row and each column drops by "z"["i"]. Therefore, the matrix "X" remains scaled-bistochastic. Therefore, in step 3, a perfect matching always exists. Run-time complexity. By the selection of "z"["i"] in step 4, in each iteration at least one element of "X" becomes 0. Therefore, the algorithm must end  after at most "n" steps. However, the last step must simultaneously make "n" elements 0, so the algorithm ends after at most "n" − "n" + 1 steps. In 1960, Joshnson, Dulmage and Mendelsohn showed that Birkhoff's algorithm actually ends after at most "n" − 2"n" + 2 steps, which is tight in general (that is, in some cases "n" − 2"n" + 2 permutation matrices may be required). Application in fair division. In the fair random assignment problem, there are "n" objects and "n" people with different preferences over the objects. It is required to give an object  to each person. To attain fairness, the allocation is randomized: for each (person,object) pair, a probability is calculated, such that the sum of probabilities for each person and for each object is 1. The probabilistic-serial procedure can compute the probabilities such that each agent, looking at the matrix of probabilities, prefers his row of probabilities over the rows of all other people (this property is called envy-freeness). This raises the question of how to implement this randomized allocation in practice? One cannot just randomize for each object separately, since this may result in allocations in which  some people get many objects while other people get no objects. Here, Birkhoff's algorithm is useful. The matrix of probabilities, calculated by the probabilistic-serial algorithm, is bistochastic. Birkhoff's algorithm can decompose it into a convex combination of permutation matrices. Each permutation matrix represents a deterministic assignment, in which every agent receives exactly one object. The coefficienct of each such matrix is interpreted as a probability; based on the calculated probabilities, it is possible to pick one assignment at random and implement it. Extensions. The problem of computing the Birkhoff decomposition with the minimum number of terms has  been shown to be NP-hard, but some heuristics for computing it are known. This theorem can be extended for the general stochastic matrix with deterministic transition matrices. Budish, Che, Kojima and Milgrom generalize Birkhoff's algorithm to non-square matrices, with some constraints on the feasible assignments. They also present a decomposition algorithm that minimizes the variance in the expected values.