One of the most popular approaches to the flow calculation problem is to use diffusion based algorithms [6,14]. In a heat diffusion process, the initial uneven temperature distribution in space causes the movement of heat, and the system eventually reaches a steady-state temperature.
The diffusion algorithm, as described in , is given as follows.
At each iteration
of the algorithm, processor will send
an amount proportional to the difference between its load
and its neighbor's load,
, to its neighbor .
, the new load of the processor
is given by the combination of
its own load and contributions from/to its neighboring vertices, namely
The diffusion algorithm, being a stationary iterative method of the
form (11), can converge quite slowly on graphs with
small connectivity. Boillat 
proved that the worst case happens when the graph is, say, a line, and in such a case
the number of iterations
needed to reach a given tolerance is
with the number of vertices. There are other variations of the diffusion
algorithm (see [33,28]). For example instead of (11), a special case of
the following equation,
Many investigations of dynamic load balancing algorithms have used a diffusive approach, although the details vary. For example, in both the tiling algorithm and the iterative tree balancing algorithm [13,25,26], a processor selects amongst its neighbors the one with the highest load and posts a request. In the tiling algorithm the amount of load to be sent is decided by looking at the average of the loads in the neighborhood. In the iterative tree balancing algorithm the requests are viewed as a forest of trees. The flow along the branches of the tree is then calculated using a logarithmic time parallel scan operation.