types of algorithms in quantum computing