Quantum Computing Foundations, Algorithms, and Complexity