{ "cells": [ { "cell_type": "markdown", "id": "2e096950", "metadata": {}, "source": [ "# Learning Outcomes\n", "- Deutsch-Jozsa Algorithm\n", "- Berstein-Vazirani Algorithm\n", "- Constructing Oracles" ] }, { "cell_type": "markdown", "id": "e8c2ab06", "metadata": {}, "source": [ "This week we will be covering Chapter 3.2 Deutsch-Jozsa Algorithm and Chapter 3.3 Berstein-Vazirani Algorithm from the Qiskit Textbook. " ] }, { "cell_type": "markdown", "id": "2bf4a942", "metadata": { "tags": [ "remove_cell" ] }, "source": [ "# Deutsch-Jozsa Algorithm" ] }, { "cell_type": "markdown", "id": "386cdd63", "metadata": {}, "source": [ "In this section, we first introduce the Deutsch-Jozsa problem, and classical and quantum algorithms to solve it. We then implement the quantum algorithm using Qiskit, and run it on a simulator and device." ] }, { "cell_type": "markdown", "id": "dfa579c4", "metadata": { "tags": [ "contents" ] }, "source": [ "## Contents\n", "\n", "1. [Introduction](#introduction) \n", " 1.1 [Deutsch-Jozsa Problem](#djproblem) \n", " 1.2 [Deutsch-Jozsa Algorithm](#classical-solution) \n", " 1.3 [The Quantum Solution](#quantum-solution) \n", " 1.4 [Why Does This Work?](#why-does-this-work) \n", "2. [Worked Example](#example)\n", "3. [Creating Quantum Oracles](#creating-quantum-oracles) \n", "4. [Qiskit Implementation](#implementation) \n", " 4.1 [Constant Oracle](#const_oracle) \n", " 4.2 [Balanced Oracle](#balanced_oracle) \n", " 4.3 [The Full Algorithm](#full_alg) \n", " 4.4 [Generalised Circuit](#general_circs) \n", "5. [Running on Real Devices](#device) \n", "6. [Problems](#problems)\n", "7. [References](#references)" ] }, { "cell_type": "markdown", "id": "48e8d6b9", "metadata": {}, "source": [ "## 1. Introduction " ] }, { "cell_type": "markdown", "id": "04eb540a", "metadata": {}, "source": [ "The Deutsch-Jozsa algorithm, first introduced in Reference [1], was the first example of a quantum algorithm that performs better than the best classical algorithm. It showed that there can be advantages to using a quantum computer as a computational tool for a specific problem." ] }, { "cell_type": "markdown", "id": "1762b072", "metadata": {}, "source": [ "### 1.1 Deutsch-Jozsa Problem \n", "\n", "We are given a hidden Boolean function $f$, which takes as input a string of bits, and returns either $0$ or $1$, that is:\n", "\n", "$$\n", "f(\\{x_0,x_1,x_2,...\\}) \\rightarrow 0 \\textrm{ or } 1 \\textrm{ , where } x_n \\textrm{ is } 0 \\textrm{ or } 1$$\n", "\n", "The property of the given Boolean function is that it is guaranteed to either be balanced or constant. A constant function returns all $0$'s or all $1$'s for any input, while a balanced function returns $0$'s for exactly half of all inputs and $1$'s for the other half. Our task is to determine whether the given function is balanced or constant. \n", "\n", "Note that the Deutsch-Jozsa problem is an $n$-bit extension of the single bit Deutsch problem. \n", "\n", "### 1.2 The Classical Solution \n", "\n", "Classically, in the best case, two queries to the oracle can determine if the hidden Boolean function, $f(x)$, is balanced: \n", "e.g. if we get both $f(0,0,0,...)\\rightarrow 0$ and $f(1,0,0,...) \\rightarrow 1$, then we know the function is balanced as we have obtained the two different outputs. \n", "\n", "In the worst case, if we continue to see the same output for each input we try, we will have to check exactly half of all possible inputs plus one in order to be certain that $f(x)$ is constant. Since the total number of possible inputs is $2^n$, this implies that we need $2^{n-1}+1$ trial inputs to be certain that $f(x)$ is constant in the worst case. For example, for a $4$-bit string, if we checked $8$ out of the $16$ possible combinations, getting all $0$'s, it is still possible that the $9^\\textrm{th}$ input returns a $1$ and $f(x)$ is balanced. Probabilistically, this is a very unlikely event. In fact, if we get the same result continually in succession, we can express the probability that the function is constant as a function of $k$ inputs as:\n", "\n", "\n", "\n", "$$ P_\\textrm{constant}(k) = 1 - \\frac{1}{2^{k-1}} \\qquad \\textrm{for } 1 < k \\leq 2^{n-1}$$\n", "\n", "\n", "\n", "Realistically, we could opt to truncate our classical algorithm early, say if we were over x% confident. But if we want to be 100% confident, we would need to check $2^{n-1}+1$ inputs." ] }, { "attachments": { "image.png": { "image/png": "iVBORw0KGgoAAAANSUhEUgAAA9cAAAE5CAYAAACaptPyAAAgAElEQVR4Aey9B5wURfr/D4iInIiAgBETRhAQUTlFCYqngAp6IGJARU/MgphFz/ATRYJ4AgpySFL8G1DQUwkiQUWSgAqygGSQpOCyuyywPP/5lN9ae2cndM90z1R3f+r1GtiZqaqueldNd32qnnqqjDCQAAmQAAmQAAmQAAmQAAmQAAmQAAmkRaBMWqmZmARIgARIgARIgARIgARIgARIgARIQCiu2QlIgARIgARIgARIgARIgARIgARIIE0CFNdpAmRyEiABEiABEiABEiABEiABEiABEqC4Zh8gARIgARIgARIgARIgARIgARIggTQJUFynCZDJSYAESIAESIAESIAESIAESIAESIDimn2ABEiABEiABEiABEiABEiABEiABNIkQHGdJkAmJwESIAESIAESIAESIAESIAESIAGKa/YBEiABEiABEiABEiABEiABEiABEkiTAMV1mgCZnARIgARIgARIgARIgARIgARIgAQortkHSIAESIAESIAESIAESIAESIAESCBNAhTXaQJkchIgARIgARIgARIgARIgARIgARKguGYfIAESIAESIAESIAESIAESIAESIIE0CVBcpwmQyUmABEiABEiABEiABEiABEiABEiA4pp9gARIgARIgARIgARIgARIgARIgATSJEBxnSZAJicBEiABEiABEiABEiABEiABEiABimv2ARIgARIgARIgARIgARIgARIgARJIkwDFdZoAmZwESIAESIAESIAESIAESIAESIAEKK7ZB0iABEiABEiABEiABEiABEiABEggTQIU12kCZHISIAESIAESIAESIAESIAESIAESoLhmHyABEiABEiABEiABEiABEiABEiCBNAlQXKcJkMlJgARIgARIgARIgARIgARIgARIgOKafYAESIAESIAESIAESIAESIAESIAE0iRAcZ0mQCYnARIgARIgARIgARIgARIgARIgAYpr9gESIAESIAESIAESIAESIAESIAESSJMAxXWaAJmcBEiABEiABEiABEiABEiABEiABCiu2QdIgARIgARIgARIgARIgARIgARIIE0CFNdpAmRyEiABEiABEiABEiABEiABEiABEqC4Zh8gARIgAQMIFBYWyv79+w0oCYtAAiRAAskJ7NmzV/Di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XnutQGTHCytWrJC77rpLFi5cGC8KPyeBYgLYYoDz0SGu8br5lpvj9i+cp67jHXDAAZGjur4rzod/kIApBCiuTWkJloMESCCUBCiuQ9nsrDQJ+IpAbm6u9Hm5j3Tq1Enmzp0rW7ZsKfWCuTiE0ttvvy0333yz4KxiBhKwQ+DYY49Vx7nVq1dPPvroo1JbDXQeL730UrG4btKkiaxZs0Z/xf9JwBgCFNfGNAULQgIkEEYCOCMWM/CYjcc5ngwkQAIkYBqBQYMGSa1ataRRo0ZyzTX/jPlq3769XH755VKnTh25/vrrZevWraZVg+UxlED//v3lqKOOkvHjx0thYWHMUmLy5vjjj1fPShz9BpPweHFjZsAPSSBDBCiuMwSalyEBEiABEICzFuxFnDp1qowYMULOPffcYpO4U089VX2G7xBnyZIlhEYCJEACWSWAlcTKlSsXrxhqs9xE/z/44INSUFCQ1XLz4v4hsH37drn33nulTZs28vU3X5dauYblxD333KP6ICaje/XqpbYp+KeGLGmYCFBch6m1WVcSIIGsE4BH1OrVq6tZ+qOPPlqqVasmhx56qHphNh6f4XX44YdL69ats15eFoAESCDcBDDpl0hIR38Hp1Swwonl7CzcJFn7eATQV7Ay3bt3bznppJPUs2/o0KHy+eefy9ixY6Vly5bKbByr2xMmTBCIbfaveDT5ebYJUFxnuwV4fRIgARIgARIgARIgARIgAVm/fr0MGDBAbrjhBmnQoIGcffbZalV73Lhxkp+fT0IkYDwBimvjm4gFJAESIAESIAESIAESIAESIAESMJ0AxbXpLcTykQAJkAAJkAAJkAAJkAAJkAAJGE+A4tr4JmIBSYAESIAESIAESIAESIAESIAETCdAcW16C7F8JEACJEACJEACJEACJEACJEACxhOguDa+iVhAEiABEiABEiABEiABEiABEiAB0wlQXJveQiwfCZAACZAACZAACZAACZAACZCA8QQoro1vIhaQBEiABEiABEiABEiABEiABEjAdAIU16a3EMtHAiRAAiRAAiRAAiRAAiRAAiRgPAGKa+ObiAUkARIgARIgARIgARIgARIgARIwnQDFtektxPKRAAmQAAmQAAmQAAmQAAmQAAkYT4Di2vgmYgFJgARIgARIgARIgARIgARIgARMJ0BxbXoLsXwkQAIkQAIkQAIk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67wN62Re24Yyp2l1mduituSuWeXHLpyxMlNcZww1L+RTApkS1/q+Nb/9ebIzZ4kntLSIC6q4LiwslA0bNggEHnzK5EYsmPwQdLt4Ka737sqVBR2bqWfjvDYNJP/XTZ6gCbO4xr3izTfflPPOO09tyURftAaKaysN+3/7TlxDUEPwQuxed9116gUHWK+99pps3bo1Yc2XL18uLVu2lO+//15w3NONN94oX3/9ddzV6/fee0+uuuoqmTp1qlpRve+++2LmD3Plfv36KTPy559/XjZv/nMGF+UZMGCAdOvWTa655p/KxBzm5slCjx495PDDD5eFCxcmi+rr78HNavq9fv16ad68uXJWhlm06ADz/QsvvFAaNGigZtjgVXzx4sWlRHh0Oj+8D6q4xvYG/H5wfBp+p7feeqvcdttt0r59e7X9YdSoUUZvgaC4Nu/XQ3FtXpuwRGYRoLg2qz1ilQbjRIxbsZCCxR48F2+MLC784x//kO7duwtOUIleYIiVT7Y+o7jOFnl3rgvLXOiRjh07SqVKlZTFLBawovscxXVqvH0lrnFUE0zHa9eurQT2mjVr1H7piRMnKodkp512msyZMzcmCXQYDPBff/111Xkw6IdIx40NK2nRAebZyA8CF53wj4g5CoQfTJOjw8CBA5X4njBhguCYKAiInTt3KpNl5IPZyJUrV8q5556r9nUsingkTxQgIuERGyYaQQ2YJHnppZfkscceE4hqBMzgLvh+gYBPrFVNtCFWPCFEsccHK91BcWoWRHG9d99e6dWrV2QirL18OP5DweQWZkU3btwoq1atki+/nCr33nuvtG7dWvBbNjFQXJvXKhTX5rUJS2QWAYprs9rDWhpYMs76epayiHz630+r7YkY8+G5iLFQzvIcgcjp0KGDYGy5a9cua3Jj/qa4NqYpHBcE4++ePXtKxYoVldYoU6aMWrSK5euJ4toxXpXAF+IaogritFmzZnLggQfGdJ4A0QVnV9iPi9mY6NkXDN7hCRxC1xreeustgQODdevWqTQQdVixhrCOHvCPHDlSrZRb0+PGB7MYPMzQCRs2bKhmgLC6OmnyJGtUJcAhml955ZUSn8d6c+mllyoxj3oFMXwaMfs++uijFStYB/z+++9BrKbtOgVJXOO3B6/v9erVkzfeeCPmRIkVDOp+1llnyfjx442bLKG4traUGX9TXJvR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" } }, "cell_type": "markdown", "id": "5c8f8950", "metadata": {}, "source": [ "### 1.3 Quantum Solution \n", "\n", "Using a quantum computer, we can solve this problem with 100% confidence after only one call to the function $f(x)$, provided we have the function $f$ implemented as a quantum oracle, which maps the state $\\vert x\\rangle \\vert y\\rangle $ to $ \\vert x\\rangle \\vert y \\oplus f(x)\\rangle$, where $\\oplus$ is addition modulo $2$. Below is the generic circuit for the Deutsh-Jozsa algorithm.\n", "\n", "![image.png](attachment:image.png)\n", "\n", "Now, let's go through the steps of the algorithm:\n", "\n", "