Data-driven Algorithm Design