Quantum algorithms: an overview