Quantum Algorithm Techniques