Instructor(s):
Short description of the Course:
Quantum computing is no longer a theoretical domain of physics — it is possibly the next major paradigm shift in the IT industry. Breaking cryptosystems, solving optimization problems much faster than using classical computers. These are some of the headlines in the news about quantum computing. As a software engineer or data scientist, this course will empower you to identify complex computational bottlenecks where classical architectures hit their limits and teach you how to harness quantum algorithms to achieve even exponential speedups.
As one of the most dynamically developing branches of computer science today, the field offers skills that can give you a distinct competitive edge in high-demand areas like post-quantum cybersecurity, algorithmic optimization, and quantum machine learning (QML). Beyond core theoretical foundations, you will gain hands-on experience using industry-standard frameworks like Qiskit to execute code on real cloud-based quantum hardware, directly preparing you to navigate and build the future of computing infrastructure.
Importantly, these skills are not only relevant for future quantum-computing specialists. Understanding what quantum computers can (and cannot) accelerate will increasingly help computer scientists make informed architectural and security decisions.
We start with introducing some strange algorithmic consequences of the quantum world. Then we learn the most important basic quantum algorithms which are the building blocks of quantum computing.
After becoming familiar with the appropriate tools, we learn some more complicated methods, namely the two most famous quantum algorithms. These are Grover's search and Shor's algorithm to calculate the prime factors of a composite number. These can be used in several problems, the latter is the basis of breaking the most widely used public-key cryptosystem.
To complement these algorithms from a cryptographic point of view, we look at some simple ways of secure quantum key distribution. Finally, we take an outlook to a different model of quantum computation and get to know the basics of QUBOs.
Throughout the course we will implement and simulate quantum algorithms in Python, experiment with quantum circuits, and run selected programs on real quantum hardware through the cloud. The goal is not just to understand the theory, but to develop practical intuition about where quantum techniques may become useful alongside classical computing.
Aim of the Course:
The main aim of the course is to show the basics of the quantum computational world, and explain some potentially useful algorithms. This foundation should be strong enough to understand, and even create new quantum algorithms.
Prerequisites:
Basic linear algebra (vectors, matrices, their operations).
Equivalent of introductory computer science course.
Basic familiarity with Python is useful.
Detailed Program and Class Schedule:
- Basic definitions and theorems: qubit, computational model, non-cloning theorem, quantum teleportation
- Basic algorithms: Deutsch-Jozsa, Bernstein-Vazirani, Simon's
- Examples solved in Qiskit
- Grover's algorithm
- Amplitude amplification and its applications
- Number theory for primes: primality test, RSA algorithm, factorization
- Complex numbers, Fourier transformation, Quantum Fourier transformation, periodicity
- Classical part of Shor's algorithm, quantum part of Shor's algorithm
- QUBO: another quantum computation model
- Symmetric-key encryption, one-time pad, quantum key distribution: BB84, Ekert
Method of instruction:
Lectures, some hands-on exercises.
Grading:
Class Participation (20%): activity during classes.
Homework (20%): weekly tasks, theoretical or programming.
Midterm Test (30%)
Final Exam (30%)
Textbook:
Mika Hirvensalo: Quantum Computing, Springer, 2004
Instructors' bio:
Katalin Friedl (1959) is an associate professor of the Department of Computer Science and Information Theory, Faculty of Electrical Engineering and Informatics, Budapest University of Technology and Economics (BME). She graduated from Eötvös Loránd University as a mathematician in 1983, and received a Ph.D. in computer science at the University of Chicago. She has been teaching courses related to algorithms and complexity at BME for several years. Her Erdős number is 2.
László Kabódi (1987) is an assistant professor at the Budapest University of Technology and Economics (BME), at the Department of Computer Science and Information Theory. László started teaching during his masters studies, lecturing both in Hungarian and English. He has been teaching courses related to algorithms and programming at BME for several years. He is about to defend his PhD thesis.

