Algorithm engineering : Bridging the gap between algorithm theory and practice.