  The paper introduces the butterfly factorization as a data-sparse
approximation for the matrices that satisfy a complementary low-rank property.
The factorization can be constructed efficiently if either fast algorithms for
applying the matrix and its adjoint are available or the entries of the matrix
can be sampled individually. For an $N \times N$ matrix, the resulting
factorization is a product of $O(\log N)$ sparse matrices, each with $O(N)$
non-zero entries. Hence, it can be applied rapidly in $O(N\log N)$ operations.
Numerical results are provided to demonstrate the effectiveness of the
butterfly factorization and its construction algorithms.
