Browsing posts in: intro to qc

Introduction to quantum computing with Q# – Part 18, Quantum Fourier Transform

In today's post we will explore one of the important algorithm building blocks in quantum computing theory, called the Quantum Fourier Transform. It is a quantum variant of the classical Discrete Fourier Transform and is used in a number of algorithms such as Shor's factoring algorithm, quantum phase estimation or quantum algorithm for linear systems of equations.

Continue Reading


Introduction to quantum computing with Q# – Part 17, Grover’s algorithm

Last time we looked at the basic theory behind quantum search based on the Grover's algorithm. We went through the most basic case, a data set consisting of four items, and applied the algorithm to that, learning in the process that it managed to find the relevant entry we were looking for in a single step – compared to an average expected 2.25 steps required by the classical computation theory.

In this part, we will look at the more general theory behind Grover's algorithm, and implement the general Q# variant that can be used to find any number in an arbitrarily large data set.

Continue Reading


Introduction to quantum computing with Q# – Part 16, Quantum search

In this post we will start exploring the topic of quantum search – the ability to locate a specific qubit state in an unsorted data set represented in a qubit register. We will look at the mathematics behind this problem, at the Q# code illustrating some basic examples and explain how the different building blocks fit together. This will help us lay ground for a more comprehensive discussion of the so-called Grover’s algorithm next time.

Continue Reading


Introduction to quantum computing with Q# – Part 15, Deutsch-Jozsa algorithm

Last time, we discussed a problem originally stated by David Deutsch, focusing on determining whether a function is constant or balanced. We found out that for that specific problem, quantum computing provides a much better query complexity than classical computing – as it can solve the task in a single blackbox function evaluation, while classical computing requires two function evaluations to provide the same answer.

Today, we shall look at the generalization of that simple problem.

Continue Reading


Introduction to quantum computing with Q# – Part 14, Deutsch’s problem

Over the course of this series, we have developed a solid foundational understanding of quantum computing, as we learned about the basic paradigms, mathematics and various computational concepts that characterize this unique disciple. We are now well equipped to start exploring some of the most important quantum algorithms – starting with today’s part 14, which will be devoted to a simple oracle problem formulated by David Deutsch.

Continue Reading


Introduction to quantum computing with Q# – Part 13, CHSH Game

Last time we had an in-depth look at the original Bell’s inequality, and we wrote some Q# code that allowed us to quickly empirically test the predictions of quantum mechanics in that area.

In today’s post, we will continue with a generalization of Bell’s inequalities, called Clauser-Horne-Shimony-Holt inequality (in short CHSH), and discuss a simple game based on that. In the process, we will arrive at a remarkable conclusions – we will learn that for a certain class of simple boolean logic problems, they can be solved more efficiently when adopting a quantum strategy compared to a classical “common sense” approach.

Continue Reading



Introduction to quantum computing with Q# – Part 11, EPR Quantum Key Distribution

In the last two posts we covered quantum key exchange using the B92 and BB84 protocols. Both of those depended with their security on the no-cloning theorem. Today we are going to dedicate a third post to the topic of quantum key distribution, and this time around we will explore a variant of key distribution relying on the phenomenon of entanglement and quantum correlations.

Continue Reading


Introduction to quantum computing with Q# – Part 10, B92 Quantum Key Distribution

In the last part of this series we started talking about the area of quantum cryptography, or more accurately, quantum key distribution. We dissected, in considerable amount of detail, the BB84 protocol, and discussed how it can lead to effectively unbreakable cryptography.

Today we shall continue with quantum key distribution by looking at a sibling to BB84, the B92 protocol.

Continue Reading


Introduction to quantum computing with Q# – Part 9, BB84 Quantum Key Distribution

This is already part 9 of the series (time flies!). So far we have covered a wide array of topic around the nature of quantum computational units called qubits, superposition, entanglement, single-qubit gates, multi-qubit gates and some interesting concepts from the area of quantum information theory. In this post we will shift our attention to another interesting field in the quantum landscape – quantum cryptography. More specifically, we will explore a reference protocol for quantum key distribution, called BB884, discuss why it’s secure even when using a public channel to exchange qubits and realize a simple demonstrative implementation using Q#.

Continue Reading


Pages:12»