Parallel Algorithms
A lot of problems that we might consider to be sequential are in fact candidates for
at least a partial parallelization. Trying to parallelize a sequential algorithm with the
least passible amount of work might not yield an efficient parallel program, though.
Quite often a different approach must be pursued, and whether a data-parallel or a
message-parallel algorithm works better is also not generally clear from the beginning.
Also, parallel algorithms are not only measured in their time complexity (like sequential
algorithms), but in their time-processor complexity. E.g., a sequential program may have
O(n lg n) time complexity, which means a O(n lg n) time-processor complexity (since we
have only one processor). If a parallel version of this algorithm runs in O(lg n) time
on n processors, it also has O(n lg n) time-processor complexity and is not a real
breakthrough (though it is quite a bit faster).
Algorithms for Irregular Problems
Chapter 7 of Gregors Introduction gives some examples and compares data-parallel and message-parallel
solutions to mathematical problems.