<?xml version="1.0" encoding="UTF-8"?>
<rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/"
    xmlns:atom="http://www.w3.org/2005/Atom" xmlns:media="http://search.yahoo.com/mrss/" version="2.0">
    <channel>
        
        <title>
            <![CDATA[ quantum computing - freeCodeCamp.org ]]>
        </title>
        <description>
            <![CDATA[ Browse thousands of programming tutorials written by experts. Learn Web Development, Data Science, DevOps, Security, and get developer career advice. ]]>
        </description>
        <link>https://www.freecodecamp.org/news/</link>
        <image>
            <url>https://cdn.freecodecamp.org/universal/favicons/favicon.png</url>
            <title>
                <![CDATA[ quantum computing - freeCodeCamp.org ]]>
            </title>
            <link>https://www.freecodecamp.org/news/</link>
        </image>
        <generator>Eleventy</generator>
        <lastBuildDate>Mon, 22 Jun 2026 05:47:11 +0000</lastBuildDate>
        <atom:link href="https://www.freecodecamp.org/news/tag/quantum-computing/rss.xml" rel="self" type="application/rss+xml" />
        <ttl>60</ttl>
        
            <item>
                <title>
                    <![CDATA[ Learn the Algorithms Behind Quantum Computing ]]>
                </title>
                <description>
                    <![CDATA[ Quantum computing leverages the principles of quantum mechanics to process information at incredible speeds. We just posted a Quantum Computing course on the freeCodeCamp.org YouTube channel. This course, created by Michael from Quantum Soar, is desi... ]]>
                </description>
                <link>https://www.freecodecamp.org/news/learn-the-algorithms-behind-quantum-computing/</link>
                <guid isPermaLink="false">6644db24c3045e03b45dc8f0</guid>
                
                    <category>
                        <![CDATA[ quantum computing ]]>
                    </category>
                
                    <category>
                        <![CDATA[ youtube ]]>
                    </category>
                
                <dc:creator>
                    <![CDATA[ Beau Carnes ]]>
                </dc:creator>
                <pubDate>Wed, 15 May 2024 15:56:20 +0000</pubDate>
                <media:content url="https://cdn.hashnode.com/res/hashnode/image/upload/v1715788225832/18aece93-fa0f-4650-a264-04bcb64ee75d.png" medium="image" />
                <content:encoded>
                    <![CDATA[ <p>Quantum computing leverages the principles of quantum mechanics to process information at incredible speeds.</p>
<p>We just posted a Quantum Computing course on the freeCodeCamp.org YouTube channel. This course, created by Michael from Quantum Soar, is designed to provide a solid foundation in quantum computing, guiding you from the basics to a thorough understanding of popular quantum algorithms.</p>
<p>Unlike classical computers, which use bits as the smallest unit of data (0 or 1), quantum computers use qubits. Qubits can represent and store data in multiple states simultaneously thanks to a property known as superposition. Additionally, quantum entanglement allows qubits that are entangled to be correlated in such a way that the state of one qubit can depend on the state of another, even across large distances. These properties enable quantum computers to solve certain types of problems much more efficiently than classical computers.</p>
<p>Here are some reasons you may want to learn about Quantum Computing:</p>
<ol>
<li><p><strong>Future Technology</strong>: Quantum computing is at the forefront of technological innovation. Learning about it now can place you ahead of the curve as the field grows.</p>
</li>
<li><p><strong>Problem-Solving</strong>: Quantum computers are capable of solving complex problems in areas such as cryptography, optimization, and simulations, which are currently beyond the reach of classical computers.</p>
</li>
<li><p><strong>Career Opportunities</strong>: As quantum computing technology evolves, there will be an increasing demand for professionals with expertise in this field.</p>
</li>
<li><p><strong>Intellectual Challenge</strong>: Understanding quantum computing involves grasping complex mathematical and physical concepts, which could be a rewarding intellectual challenge.</p>
</li>
</ol>
<p>The course is divided into two main sections: foundational mathematics and the mechanics of quantum computers. Here’s what you can expect:</p>
<h4 id="heading-section-1-essential-mathematics"><strong>Section 1: Essential Mathematics</strong></h4>
<ul>
<li><p>0.1 Introduction to Complex Numbers</p>
</li>
<li><p>0.2 Complex Numbers on the Number Plane</p>
</li>
<li><p>0.3 Introduction to Matrices</p>
</li>
<li><p>0.4 Matrix Multiplication to Transform a Vector</p>
</li>
<li><p>0.5 Unitary and Hermitian Matrices</p>
</li>
<li><p>0.6 Eigenvectors and Eigenvalues</p>
</li>
</ul>
<h4 id="heading-section-2-mechanics-of-quantum-computers"><strong>Section 2: Mechanics of Quantum Computers</strong></h4>
<ul>
<li><p>1.1 Introduction to Qubits and Superposition</p>
</li>
<li><p>1.2 Introduction to Dirac Notation</p>
</li>
<li><p>1.3 Representing a Qubit on the Bloch Sphere</p>
</li>
<li><p>1.4 Manipulating a Qubit with Single Qubit Gates</p>
</li>
<li><p>1.5 Introduction to Phase</p>
</li>
<li><p>1.6 The Hadamard Gate and +, -, i, -i States</p>
</li>
<li><p>1.7 The Phase Gates (S and T Gates)</p>
</li>
</ul>
<h4 id="heading-advanced-topics-and-algorithms"><strong>Advanced Topics and Algorithms</strong></h4>
<ul>
<li><p>2.1 Representing Multiple Qubits Mathematically</p>
</li>
<li><p>2.2 Quantum Circuits</p>
</li>
<li><p>2.3 Multi-Qubit Gates</p>
</li>
<li><p>2.4 Measuring Singular Qubits</p>
</li>
<li><p>2.5 Quantum Entanglement and the Bell States</p>
</li>
<li><p>2.6 Phase Kickback</p>
</li>
<li><p>3.1 Superdense Coding</p>
</li>
<li><p>3.2.A Classical Operations Prerequisites</p>
</li>
<li><p>3.2.B Functions on Quantum Computers</p>
</li>
<li><p>3.3 Deutsch's Algorithm</p>
</li>
<li><p>3.4 Deutsch-Jozsa Algorithm</p>
</li>
<li><p>3.5 Bernstein-Vazirani Algorithm</p>
</li>
<li><p>3.6 Quantum Fourier Transform (QFT)</p>
</li>
<li><p>3.7 Quantum Phase Estimation</p>
</li>
<li><p>3.8 Shor's Algorithm</p>
</li>
</ul>
<p>This comprehensive course is a great opportunity to get acquainted with the world of quantum computing. By the end of the course, you will have a strong understanding of both the theoretical and practical aspects of quantum computing.</p>
<p>Watch the full course <a target="_blank" href="https://www.youtube.com/watch?v=tsbCSkvHhMo">on the freeCodeCamp.org YouTube channel</a> (2-hour watch).</p>
<div class="embed-wrapper">
        <iframe width="560" height="315" src="https://www.youtube.com/embed/tsbCSkvHhMo" style="aspect-ratio: 16 / 9; width: 100%; height: auto;" title="YouTube video player" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" referrerpolicy="strict-origin-when-cross-origin" allowfullscreen="" loading="lazy"></iframe></div>
 ]]>
                </content:encoded>
            </item>
        
            <item>
                <title>
                    <![CDATA[ What is Quantum Computing? Google's Quantum Supremacy Claim Explained ]]>
                </title>
                <description>
                    <![CDATA[ Quantum Supremacy. It kind of sounds like the title of the ruler of the universe. In reality, it could be part of Google's plan to take over the universe. Google recently released a paper showing that its quantum processor, called Sycamore, solved a ... ]]>
                </description>
                <link>https://www.freecodecamp.org/news/what-is-quantum-computing-googles-quantum-supremacy-claim-explained/</link>
                <guid isPermaLink="false">66b20727903dc07a135166af</guid>
                
                    <category>
                        <![CDATA[ quantum computing ]]>
                    </category>
                
                <dc:creator>
                    <![CDATA[ Beau Carnes ]]>
                </dc:creator>
                <pubDate>Tue, 29 Oct 2019 16:38:22 +0000</pubDate>
                <media:content url="https://www.freecodecamp.org/news/content/images/2019/10/Googleplex_HQ.jpg" medium="image" />
                <content:encoded>
                    <![CDATA[ <p>Quantum Supremacy. It kind of sounds like the title of the ruler of the universe. In reality, it could be part of Google's plan to take over the universe.</p>
<p>Google recently released <a target="_blank" href="https://www.nature.com/articles/s41586-019-1666-5">a paper</a> showing that its quantum processor, called Sycamore, solved a computing problem in 200 seconds that would have taken the world's best supercomputer 10,000 years to solve.</p>
<p>And Google says this is just the beginning of what quantum computers will be able to do.</p>
<h2 id="heading-what-is-quantum-computing">What is quantum computing?</h2>
<p>Quantum computing is a theory of how to build computers. </p>
<p>Quantum computers perform operations on data using ideas from quantum mechanics, such as <a target="_blank" href="https://en.wikipedia.org/wiki/Quantum_superposition">superposition</a> and <a target="_blank" href="https://simple.wikipedia.org/wiki/Quantum_entanglement">entanglement</a>. </p>
<p>In quantum computation, quantum properties are used to perform operations on data and represent it. This allows quantum computers to process massive and complex datasets more quickly than classical computers like the one you're reading this article with.</p>
<h2 id="heading-bits-vs-qubits">Bits VS Qubits</h2>
<p>Classical computers store information in binary. It's always possible to know the exact state of a piece of data, or "bit."</p>
<p>Each bit can be either on or off. </p>
<p>Quantum computing, however, uses qubits instead of bits. Qubits can be either on or off. Or they can be on and off at the same time.</p>
<p>Quantum computation uses probabilities. You don't always know the exact state of the data. This uncertainty is what makes quantum computing so powerful.</p>
<p>Since quantum computers use the fundamentals of quantum mechanics, they can solve complex computations very quickly. While quantum computers are already used for some purposes such as cybersecurity, they have not been able to do much so far.</p>
<p>A lot of the ideas behind quantum computing are theoretical and it has been challenging to implement them on a large scale. However, this is starting to change.</p>
<div class="embed-wrapper">
        <iframe width="560" height="315" src="https://www.youtube.com/embed/JhHMJCUmq28" style="aspect-ratio: 16 / 9; width: 100%; height: auto;" title="YouTube video player" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" referrerpolicy="strict-origin-when-cross-origin" allowfullscreen="" loading="lazy"></iframe></div>
<h2 id="heading-so-what-did-google-actually-accomplish">So what did Google actually accomplish?</h2>
<p>First of all, this is not necessarily the first sign that robots are about to enslave humanity. The computing problem solved with quantum computing was not actually that useful but it was something that a standard computer could not do in a reasonable period of time. </p>
<p>This is the definition of "quantum supremacy": getting a quantum computer to do something that a standard classical computer cannot reasonably do.</p>
<p>This was basically the quantum computer equivalent to a "Hello World" program to test the capabilities. The Google researchers used their quantum computer to run a random circuit program a million times and record the outputs.</p>
<p>The problem that Google solved with quantum computing was specifically designed to be very difficult for a classical computer to solve. The problem was to determine the likelihood of different possible outcomes from a quantum version of a random-number generator. </p>
<p>Google controlled for errors in their system enough so the outputs were close to the theoretical results. This has been a hard problem to solve with quantum computers and made Google's achievement even more unique.</p>
<p><img src="https://www.freecodecamp.org/news/content/images/2019/10/image-90.png" alt="Image" width="600" height="400" loading="lazy">
<em>A part of Google's quantum computer. Source: <a target="_blank" href="https://www.youtube.com/watch?v=-ZNEzzDcllU">Google</a>.</em></p>
<h2 id="heading-ibm-on-googles-quantum-supremacy-really-though">IBM on Google's Quantum Supremacy: "Really, though?"</h2>
<p>Google competitor IBM wasn't so sure about Google's claims. According to IBM, Google overestimated the difficulty of the task.</p>
<p>While Google said the problem they solved would take 10,000 years on a classical supercomputer, IBM said it could be solved in 2.5 days. That's a pretty big difference.</p>
<p>In a <a target="_blank" href="https://www.ibm.com/blogs/research/2019/10/on-quantum-supremacy/">blog post</a>, IBM "urge[d] the community to treat claims that, for the first time, a quantum computer did something that a classical computer cannot with a large dose of skepticism."</p>
<p>Google representatives shot back at IBM with a challenge to prove their claim that the same problem their quantum computer had solved in 200 seconds could indeed be solved by a classical computer in 2.5 days.</p>
<h2 id="heading-whats-next">What's Next?</h2>
<p>This is still only the beginning. As Google said in a <a target="_blank" href="https://ai.googleblog.com/2019/10/quantum-supremacy-using-programmable.html">blog post</a>, "Achieving the necessary computational capabilities will still require years of hard engineering and scientific work. But we see a path clearly now, and we're eager to move ahead."</p>
<p>It's still difficult to correct for errors in quantum computing. Google's quantum team recently estimated that we still have at least 10 years before there is an error-corrected quantum computer.</p>
<p>In a <a target="_blank" href="https://www.technologyreview.com/s/614608/google-ceo-quantum-supremacy-interview-with-sundar-pichai/">recent interview</a>, Google CEO Sundar Pichai compared their quantum computing breakthrough to the Wright brothers’ first flight. “To borrow an analogy — the Wright brothers. The first plane flew only for 12 seconds, and so there is no practical application of that. But it showed the possibility that a plane could fly.”</p>
 ]]>
                </content:encoded>
            </item>
        
            <item>
                <title>
                    <![CDATA[ (Almost) everything you ever wanted to know about quantum computers ]]>
                </title>
                <description>
                    <![CDATA[ By Ashwani Kumar From Schrodinger’s Cat to finding a needle in a haystack _Source: [Wikimedia Commons](https://commons.wikimedia.org/wiki/File:Quantum_Computing;_IonTrapping(5941055642).jpg" rel="noopener" target="blank" title=") With the recent ann... ]]>
                </description>
                <link>https://www.freecodecamp.org/news/almost-everything-you-ever-wanted-to-know-about-quantum-computers-5ee6bc2f40ba/</link>
                <guid isPermaLink="false">66c343c00fa3812cdd5ea991</guid>
                
                    <category>
                        <![CDATA[ algorithms ]]>
                    </category>
                
                    <category>
                        <![CDATA[ Computer Science ]]>
                    </category>
                
                    <category>
                        <![CDATA[ data ]]>
                    </category>
                
                    <category>
                        <![CDATA[ quantum computing ]]>
                    </category>
                
                    <category>
                        <![CDATA[ technology ]]>
                    </category>
                
                <dc:creator>
                    <![CDATA[ freeCodeCamp ]]>
                </dc:creator>
                <pubDate>Thu, 07 Feb 2019 17:51:46 +0000</pubDate>
                <media:content url="https://cdn-media-1.freecodecamp.org/images/1*6LsnXziArHvmeGk4wSDw1A.jpeg" medium="image" />
                <content:encoded>
                    <![CDATA[ <p>By Ashwani Kumar</p>
<h4 id="heading-from-schrodingers-cat-to-finding-a-needle-in-a-haystack">From Schrodinger’s Cat to finding a needle in a haystack</h4>
<p><img src="https://cdn-media-1.freecodecamp.org/images/TxNdGUyk67ooAR1DCVtREwc9Sy1VOUGHrkaI" alt="Image" width="800" height="546" loading="lazy">
_Source: [Wikimedia Commons](https://commons.wikimedia.org/wiki/File:Quantum_Computing;_Ion<em>Trapping</em>(5941055642).jpg" rel="noopener" target="<em>blank" title=")</em></p>
<p>With the recent announcement of <a target="_blank" href="https://www.research.ibm.com/ibm-q/system-one/">IBM Q System One</a> — the first fully-integrated commercial quantum computer — by IBM at CES 2019, quantum computing is soon to enter mainstream computing. Housed in a nine-foot-tall, nine-foot-wide case of half-inch thick…</p>
 ]]>
                </content:encoded>
            </item>
        
            <item>
                <title>
                    <![CDATA[ What is a quantum computer? Explained with a simple example. ]]>
                </title>
                <description>
                    <![CDATA[ By YK Sugi Hi everyone! The other day, I visited D-Wave Systems in Vancouver, Canada. It’s a company that makes cutting-edge quantum computers. I got to learn a lot about quantum computers there, so I’d like to share some of what I learned there with... ]]>
                </description>
                <link>https://www.freecodecamp.org/news/what-is-a-quantum-computer-explained-with-a-simple-example-b8f602035365/</link>
                <guid isPermaLink="false">66c3659a02b05aca345bb19c</guid>
                
                    <category>
                        <![CDATA[ Computer Science ]]>
                    </category>
                
                    <category>
                        <![CDATA[ General Programming ]]>
                    </category>
                
                    <category>
                        <![CDATA[ Python ]]>
                    </category>
                
                    <category>
                        <![CDATA[ quantum computing ]]>
                    </category>
                
                <dc:creator>
                    <![CDATA[ freeCodeCamp ]]>
                </dc:creator>
                <pubDate>Mon, 22 Oct 2018 20:59:54 +0000</pubDate>
                <media:content url="https://cdn-media-1.freecodecamp.org/images/0*juPpwvGEsj0xky-d" medium="image" />
                <content:encoded>
                    <![CDATA[ <p>By YK Sugi</p>
<p>Hi everyone!</p>
<p>The other day, I visited <a target="_blank" href="https://www.dwavesys.com/"><strong>D-Wave Systems</strong></a> in Vancouver, Canada. It’s a company that makes cutting-edge quantum computers.</p>
<p>I got to learn a lot about quantum computers there, so I’d like to share some of what I learned there with you in this article.</p>
<p>The goal of this article is to give you an accurate intuition of what a quantum computer is using a simple example.</p>
<p>This article will not require you to have prior knowledge of either quantum physics or computer science to be able to understand it.</p>
<p>Okay, let’s get started.</p>
<p><strong><em>Edit (Feb 26, 2019):</em></strong> I recently published <a target="_blank" href="https://youtu.be/HdSmIUuGf-I">a video about the same topic</a> on <a target="_blank" href="https://www.youtube.com/csdojo">my YouTube channel</a>. I would recommend watching it (<a target="_blank" href="https://youtu.be/HdSmIUuGf-I">click here</a>) before or after reading this article because I have added some additional, more nuanced arguments in the video.</p>
<h3 id="heading-what-is-a-quantum-computer">What is a quantum computer?</h3>
<p>Here is a one-sentence summary of what a quantum computer is:</p>
<blockquote>
<p>A quantum computer is a type of computer that uses quantum mechanics so that it can perform certain kinds of computation more efficiently than a regular computer can.</p>
</blockquote>
<p>There is a lot to unpack in this sentence, so let me walk you through what it is exactly using a simple example.</p>
<p>To explain what a quantum computer is, I’ll need to first explain a little bit about regular (non-quantum) computers.</p>
<h3 id="heading-how-a-regular-computer-stores-information">How a regular computer stores information</h3>
<p>Now, a regular computer stores information in a series of 0’s and 1’s.</p>
<p>Different kinds of information, such as numbers, text, and images can be represented this way.</p>
<p>Each unit in this series of 0’s and 1’s is called a bit. So, a bit can be set to either 0 or 1.</p>
<h4 id="heading-now-what-about-quantum-computers">Now, what about quantum computers?</h4>
<p>A quantum computer <strong>does not</strong> use bits to store information. Instead, it uses something called qubits.</p>
<p>Each qubit can not only be set to 1 <strong>or</strong> 0, but it can also be set to 1 <strong>and</strong> 0. But what does that mean exactly?</p>
<p>Let me explain this with a simple example. This is going to be a somewhat artificial example. But it’s still going to be helpful in understanding how quantum computers work.</p>
<h3 id="heading-a-simple-example-for-understanding-how-quantum-computers-work"><strong>A simple example for understanding how quantum computers work</strong></h3>
<p>Now, suppose you’re running a travel agency, and you need to move a group of people from one location to another.</p>
<p>To keep this simple, let’s say that you need to move only 3 people for now — Alice, Becky, and Chris.</p>
<p>And suppose that you have booked 2 taxis for this purpose, and you want to figure out who gets into which taxi.</p>
<p>Also, suppose here that you’re given information about who’s friends with who, and who’s enemies with who.</p>
<p>Here, let’s say that:</p>
<ul>
<li>Alice and Becky are friends</li>
<li>Alice and Chris are enemies</li>
<li>Becky and Chris are enemies</li>
</ul>
<p>And suppose that your goal here is to divide this group of 3 people into the two taxis to achieve the following two objectives:</p>
<ul>
<li>Maximize the number of <strong>friend pairs</strong> that share the same car</li>
<li>Minimize the number of <strong>enemy pairs</strong> that share the same car</li>
</ul>
<p>Okay, so this is the basic premise of this problem. Let’s first think about how we would solve this problem using a regular computer.</p>
<h4 id="heading-solving-this-problem-with-a-regular-computer"><strong>Solving this problem with a regular computer</strong></h4>
<p>To solve this problem with a regular, non-quantum computer, you’ll need first to figure out how to store the relevant information with bits.</p>
<p>Let’s label the two taxis Taxi #1 and Taxi #0.</p>
<p>Then, you can represent who gets into which car with 3 bits.</p>
<p>For example, we can set the three bits to <strong>0</strong>, <strong>0</strong>, and <strong>1</strong> to represent:</p>
<ul>
<li>Alice gets into Taxi #0</li>
<li>Becky gets into Taxi #0</li>
<li>Chris gets into Taxi #1</li>
</ul>
<p>Since there are two choices for each person, there are 2<em>2</em>2 = 8 ways to divide this group of people into two cars.</p>
<p>Here’s a list of all possible configurations:</p>
<p>A | B | C<br>0 | 0 | 0<br>0 | 0 | 1<br>0 | 1 | 0<br>0 | 1 | 1<br>1 | 0 | 0<br>1 | 0 | 1<br>1 | 1 | 0<br>1 | 1 | 1</p>
<p>Using 3 bits, you can represent any one of these combinations.</p>
<h4 id="heading-computing-the-score-for-each-configuration">Computing the score for each configuration</h4>
<p>Now, using a regular computer, how would we determine which configuration is the best solution?</p>
<p>To do this, let’s define how we can compute the score for each configuration. This score will represent the extent to which each solution achieves the two objectives I mentioned earlier:</p>
<ul>
<li>Maximize the number of <strong>friend pairs</strong> that share the same car</li>
<li>Minimize the number of <strong>enemy pairs</strong> that share the same car</li>
</ul>
<p>Let’s simply define our score as follows:</p>
<p>(the score of a given configuration) = (# friend pairs sharing the same car) - (# enemy pairs sharing the same car)</p>
<p>For example, suppose that Alice, Becky, and Chris all get into Taxi #1. With three bits, this can be expressed as <strong>111</strong>.</p>
<p>In this case, there is only <strong>one friend pair</strong> sharing the same car — Alice and Becky.</p>
<p>However, there are <strong>two enemy pairs</strong> sharing the same car — Alice and Chris, and Becky and Chris.</p>
<p>So, the total score of this configuration is 1-2 = -1.</p>
<h4 id="heading-solving-the-problem">Solving the problem</h4>
<p>With all of this setup, we can finally go about solving this problem.</p>
<p>With a regular computer, to find the best configuration, you’ll need to essentially go through all configurations to see which one achieves the highest score.</p>
<p>So, you can think about constructing a table like this:</p>
<p>A | B | C | Score<br>0 | 0 | 0 | -1<br>0 | 0 | 1 | 1 &lt;- one of the best solutions<br>0 | 1 | 0 | -1<br>0 | 1 | 1 | -1<br>1 | 0 | 0 | -1<br>1 | 0 | 1 | -1<br>1 | 1 | 0 | 1 &lt;- the other best solution<br>1 | 1 | 1 | -1</p>
<p>As you can see, there are two correct solutions here — 001 and 110, both achieving the score of 1.</p>
<p>This problem is fairly simple. It quickly becomes too difficult to solve with a regular computer as we increase the number of people in this problem.</p>
<p>We saw that with 3 people, we need to go through 8 possible configurations.</p>
<p>What if there are 4 people? In that case, we’ll need to go through 2<em>2</em>2*2 = 16 configurations.</p>
<p>With n people, we’ll need to go through (2 to the power of n) configurations to find the best solution.</p>
<p>So, if there are 100 people, we’ll need to go through:</p>
<ul>
<li>2¹⁰⁰ ~= 10³⁰ = one million million million million million configurations.</li>
</ul>
<p>This is simply impossible to solve with a regular computer.</p>
<h4 id="heading-solving-this-problem-with-a-quantum-computer">Solving this problem with a quantum computer</h4>
<p>How would we go about solving this problem with a quantum computer?</p>
<p>To think about that, let’s go back to the case of dividing 3 people into two taxis.</p>
<p>As we saw earlier, there were 8 possible solutions to this problem:</p>
<p>A | B | C<br>0 | 0 | 0<br>0 | 0 | 1<br>0 | 1 | 0<br>0 | 1 | 1<br>1 | 0 | 0<br>1 | 0 | 1<br>1 | 1 | 0<br>1 | 1 | 1</p>
<p>With a regular computer, using 3 bits, we were able to represent only one of these solutions at a time — for example, 001.</p>
<p>However, with a quantum computer, using 3 <strong>qubits</strong>, we can represent <strong>all 8 of these solutions at the same time</strong>.</p>
<p>There are debates as to what it means exactly, but here’s the way I think about it.</p>
<p>First, examine the first qubit out of these 3 qubits. When you set it to <strong>both</strong> 0 and 1, it’s sort of like creating two parallel worlds. (Yes, it’s strange, but just follow along here.)</p>
<p>In one of those parallel worlds, the qubit is set to 0. In the other one, it’s set to 1.</p>
<p>Now, what if you set the second qubit to 0 <strong>and</strong> 1, too? Then, it’s sort of like creating 4 parallel worlds.</p>
<p>In the first world, the two qubits are set to 00. In the second one, they are 01. In the third one, they are 10. In the fourth one, they are 11.</p>
<p>Similarly, if you set all three qubits to both 0 and 1, you’d be creating 8 parallel worlds — 000, 001, 010, 011, 100, 101, 110, and 111.</p>
<p>This is a strange way to think, but it is one of the correct ways to interpret how the qubits behave in the real world.</p>
<p>Now, when you apply some sort of computation on these three qubits, you are actually applying the same computation in all of those 8 parallel worlds at the same time.</p>
<p>So, instead of going through each of those potential solutions sequentially, we can compute the scores of all solutions at the same time.</p>
<p>With this particular example, in theory, your quantum computer would be able to find one of the best solutions in a few milliseconds. Again, that’s 001 or 110 as we saw earlier:</p>
<p>A | B | C | Score<br>0 | 0 | 0 | -1<br><strong>0 | 0 | 1 | 1 &lt;- one of the best soluti</strong>ons<br>0 | 1 | 0 | -1<br>0 | 1 | 1 | -1<br>1 | 0 | 0 | -1<br>1 | 0 | 1 | <strong>-1</strong><br><strong>1 | 1 | 0 | 1 &lt;- the other best so</strong>lution<br>1 | 1 | 1 | -1</p>
<p>In reality, to solve this problem, you would need to give your quantum computer two things:</p>
<ul>
<li>All potential solutions represented with qubits</li>
<li>A function that turns each potential solution into a score. In this case, this is the function that counts the numbers of friend pairs and enemy pairs sharing the same car.</li>
</ul>
<p>Given these two things, your quantum computer will spit out one of the best solutions in a few milliseconds. In this case, that’s 001 or 110 with a score of 1.</p>
<p>Now, in theory, a quantum computer is able to find one of the best solutions every time it runs.</p>
<p>However, in reality, there are errors when running a quantum computer. So, instead of finding the best solution, it might find the second-best solution, the third best solution, and so on.</p>
<p>These errors become more prominent as the problem becomes more and more complex.</p>
<p>So, in practice, you will probably want to run the same operation on a quantum computer dozens of times or hundreds of times. Then pick the best result out of the many results you get.</p>
<h4 id="heading-how-a-quantum-computer-scales">How a quantum computer scales</h4>
<p>Even with the errors I mentioned, the quantum computer does not have the same scaling issue a regular computer suffers from.</p>
<p>When there are 3 people we need to divide into two cars, the number of operations we need to perform on a quantum computer is 1. This is because a quantum computer computes the score of all configurations at the same time.</p>
<p>When there are 4 people, the number of operations is still 1.</p>
<p>When there are 100 people, the number of operations is still 1. With a single operation, a quantum computer computes the scores of all <strong>2¹⁰⁰</strong> ~= <strong>10³⁰</strong> = <strong>one million million million million million</strong> configurations at the same time.</p>
<p>As I mentioned earlier, in practice, it’s probably best to run your quantum computer dozens of times or hundreds of times and pick the best result out of the many results you get.</p>
<p>However, it’s still much better than running the same problem on a regular computer and having to repeat the same type of computation one million million million million million times.</p>
<h4 id="heading-wrapping-up">Wrapping up</h4>
<p>Special thanks to everyone at D-Wave Systems for patiently explaining all of this to me.</p>
<p>D-Wave recently launched a cloud environment for interacting with a quantum computer.</p>
<p>If you’re a developer and would like actually to try using a quantum computer, it’s probably the easiest way to do so.</p>
<p>It’s called Leap, and it’s at <a target="_blank" href="https://cloud.dwavesys.com/leap">https://cloud.dwavesys.com/leap</a>. You can use it for free to solve thousands of problems, and they also have easy-to-follow tutorials on getting started with quantum computers once you sign up.</p>
<p><strong>Footnote:</strong></p>
<ul>
<li>In this article, I used the term “regular computer” to refer to a non-quantum computer. However, in the quantum computing industry, non-quantum computers are usually referred to as classical computers.</li>
</ul>
 ]]>
                </content:encoded>
            </item>
        
            <item>
                <title>
                    <![CDATA[ An introduction to Q# — Microsoft’s language for quantum computing ]]>
                </title>
                <description>
                    <![CDATA[ By Ankit Sharma In this article, I’ll introduce you to Q# — the new programming language from Microsoft for quantum computing. We will cover Q# data types, expressions, and statements with the help of code snippets. Prerequisites For an overview of q... ]]>
                </description>
                <link>https://www.freecodecamp.org/news/an-introduction-to-q-64beaff53a00/</link>
                <guid isPermaLink="false">66d45d9acc7f04d2549a3720</guid>
                
                    <category>
                        <![CDATA[ Microsoft ]]>
                    </category>
                
                    <category>
                        <![CDATA[ General Programming ]]>
                    </category>
                
                    <category>
                        <![CDATA[ quantum computing ]]>
                    </category>
                
                    <category>
                        <![CDATA[ tech  ]]>
                    </category>
                
                    <category>
                        <![CDATA[ technology ]]>
                    </category>
                
                <dc:creator>
                    <![CDATA[ freeCodeCamp ]]>
                </dc:creator>
                <pubDate>Thu, 03 May 2018 09:46:07 +0000</pubDate>
                <media:content url="https://cdn-media-1.freecodecamp.org/images/0*urFjQNWX1O2TNzmM." medium="image" />
                <content:encoded>
                    <![CDATA[ <p>By Ankit Sharma</p>
<p>In this article, I’ll introduce you to Q# — the new programming language from Microsoft for quantum computing. We will cover Q# data types, expressions, and statements with the help of code snippets.</p>
<h4 id="heading-prerequisites">Prerequisites</h4>
<p>For an overview of quantum computing, please visit my earlier article: <a target="_blank" href="http://ankitsharmablogs.com/introduction-quantum-computing/">An Introduction To Quantum Computing</a>. There, I also describe how to install Quantum Development Kit (QDK) in Visual Studio 2017.</p>
<h3 id="heading-what-is-q">What is Q#?</h3>
<p>According to Microsoft:</p>
<blockquote>
<p><em>Q# is a scalable, multi-paradigm, domain-specific programming language for quantum computing.</em></p>
</blockquote>
<p>So, what do these terms actually mean? Let us dive into the details.</p>
<ul>
<li><strong>Scalable</strong><br>Q# allows us to write code that can be executed on machines of varying computing abilities. We can use it to simulate a few Qubits on our local machine, or even thousands of Qubits for an enterprise level application.</li>
<li><strong>Multi-paradigm</strong><br>Q# is a multi-paradigm programming language. It supports both functional and imperative programming styles. If you are new to programming paradigms, I suggest you refer <a target="_blank" href="https://en.wikipedia.org/wiki/Programming_paradigm">here</a>.</li>
<li><strong>Domain-specific</strong><br>Q# is a programming language for quantum computing. It is to be used for writing algorithms and code snippets that are executed on quantum processors.</li>
</ul>
<h3 id="heading-getting-started-with-q-development">Getting started with Q# development</h3>
<p>This article will assume you have already installed QDK for Visual Studio 2017. If not, then you can <a target="_blank" href="http://ankitsharmablogs.com/introduction-quantum-computing/">check my earlier article</a> for instructions.</p>
<p>After you have successfully installed QDK, we need to verify if Visual Studio 2017 has all the required dependencies installed for Q# development. For this, we will clone and execute the quantum sample programs from GitHub provided by Microsoft.</p>
<p>Open VS 2017 and navigate to Team &gt;&gt; Manage Connections.</p>
<p><img src="https://www.freecodecamp.org/news/content/images/2019/06/image-24.png" alt="Image" width="600" height="400" loading="lazy"></p>
<p>Select Clone under Local Git Repositories and enter the URL: <a target="_blank" href="https://github.com/Microsoft/Quantum.git">https://github.com/Microsoft/Quantum.git</a> and click “Clone”.</p>
<p><img src="https://cdn-media-1.freecodecamp.org/images/krnmAb5hG5Aor-xiXb8QtQztnovD28z8vzPo" alt="Image" width="470" height="404" loading="lazy"></p>
<p>The repository will be cloned on your local computer and Visual Studio will switch to the Solution Explorer. It will display all the cloned libraries and samples.</p>
<p><img src="https://cdn-media-1.freecodecamp.org/images/d6Yc06IIXElFdgcFtm9Rbh90KGe51XTk6WYE" alt="Image" width="359" height="337" loading="lazy"></p>
<p>Now, open <em>QsharpLibraries.sln</em> solution.</p>
<p>If you are prompted with the “Install Missing Features<strong>”</strong> popup box, click “Install” to allow the installation of the necessary features. This will download and install F# and other tools used by some of the samples. Make sure that you are connected to the internet.</p>
<p><img src="https://www.freecodecamp.org/news/content/images/2019/06/image-25.png" alt="Image" width="600" height="400" loading="lazy"></p>
<p>To execute a sample program, right-click on the <em>TeleportationSample</em> project in “Samples &gt; 0.Introduction folder” _of QsharpLibrari_es solution, and then click on “Set as Startup Project” and press F5.</p>
<p><img src="https://www.freecodecamp.org/news/content/images/2019/06/image-26.png" alt="Image" width="600" height="400" loading="lazy"></p>
<p>If you can see an output screen similar to the one shown below, then congratulations, your VS 2017 is ready for Q# development.</p>
<p><img src="https://www.freecodecamp.org/news/content/images/2019/06/image-27.png" alt="Image" width="600" height="400" loading="lazy"></p>
<p>Note that your output screen may vary because the data being teleported is random. But it should send 8 rounds of data, with all being successfully teleported.</p>
<h3 id="heading-q-type-model">Q# Type model</h3>
<p>Let us understand what are the various type models provided by Q#:</p>
<h4 id="heading-primitive-type">Primitive Type</h4>
<ul>
<li>Int: — It represents the 64 -bit signed integer. Notice the upper case ‘I’. This is in contrast to <em>int</em> in C# with lower case ‘i’.</li>
<li>Double: — It represents double-precision floating point number. This also has a upper case ‘D’ in contrast to <em>double</em> in C#.</li>
<li>Bool: — It represents the Boolean type and can take two values — <em>true</em> or <em>false.</em></li>
<li>Qubit: — This represents the Quantum bit. Qubit is the fundamental unit of processing information in quantum computers, similar to a <em>bit</em> in classical computers<em>.</em></li>
<li>Pauli: — This type is used to denote the base operation for rotations and to specify the basis of a measurement.</li>
<li>Result: — This represents the result of a measurement. This can take two possible values <em>Zero</em> or <em>One</em></li>
<li>Range: — This represents a sequence of integers.</li>
<li>String: — It represents a sequence of Unicode characters.</li>
</ul>
<h4 id="heading-array-type">Array Type</h4>
<p>We can create an array type of any valid Q# primitive type. Q# does not support rectangular multi-dimensional arrays. Instead, it supports only jagged arrays.</p>
<p><code>Int[], Qubit[][]</code></p>
<p>By default, all variables in Q# are immutable. Their values cannot be changed after they are bound. So, to create an array whose values can be set, we will use the <code>mutable</code> keyword:</p>
<p><code>mutable myArr = new Int [5];</code></p>
<p>This will create an integer array <code>myArr</code> of size 5. The elements of a new array are initialized to a type-dependent default value. In this case it will be 0, the default value for an integer type.</p>
<p>Arrays passed as arguments are immutable. All arrays in Q# are zero-based. That is, the first element of an array <code>arr</code> is always <code>arr[0]</code>.</p>
<h4 id="heading-tuple-type">Tuple Type</h4>
<p>The tuple type represents a tuple of values of any given primitive type. It is represented as <code>(T1, T2, T3,…)</code> where <code>T1</code>, <code>T2</code>, <code>T3</code> are primitive types. The Q# tuple is immutable. We cannot change the contents of the tuple once it has been created.</p>
<p>A tuple expression can contain values of multiple primitive types. So, a tuple of type <code>(Int, Double, Result)</code> is a valid tuple.</p>
<p>We can create a tuple with single element also, like <code>(2)</code>. This is known as a singleton tuple, and it is considered equal to the value of the enclosed type. This property is called singleton tuple equivalence.</p>
<p>For example, <code>(2)</code> is a singleton tuple of type <code>Int</code>, but it is considered equivalent to an integer 2.</p>
<p>We can create a user defined type of any primitive type. We can also create an array of user defined types or can also include it in a tuple. User defined types cannot have cyclic dependency on each other. So, it is not possible to create a recursive type structure.</p>
<p>A user-defined type is a subtype of the <code>base</code> type. This means it can be used anywhere a value of the <code>base</code> type is expected.</p>
<h4 id="heading-operation-type">Operation Type</h4>
<p>A Q# <em>operation</em> is a callable routine, which contains Q# code to carry out a quantum operation. An operation is the basic unit of quantum execution in Q#. The <em>operation</em> can only take single value as input in the form of a tuple. It returns a single value as output, specified after a colon, and may be a tuple.</p>
<p>An operation has a body section which contains the implementation of the operation. It can also have adjoint, controlled, and controlled adjoint sections. These are used to specify specific variants of appropriate operations. The arguments to an operation are specified as a tuple, within parentheses. The return type of the operation is specified after the colon.</p>
<p>Refer to a sample operation below:</p>
<pre><code>operation AddInteger(a: Int, <span class="hljs-attr">b</span>: Int): Int {  
    body {  
        mutable c = <span class="hljs-number">0</span>;  
        set c = a + b;  
        <span class="hljs-keyword">return</span> (c);  
    }  
}
</code></pre><p>Here, we have an operation <code>AddInteger</code> which takes a tuple <code>(Int, Int)</code> as input. It returns an output of type <code>Int</code> after performing addition operations on input integers.</p>
<h4 id="heading-function-type">Function Type</h4>
<p>A Q# Function is classical subroutine used within a Quantum algorithm and can only contain classical code (but no quantum operations). Similar to Q# operations, a function will also take a single value as input and returns a single value as output. Both of them can be a tuple. Functions cannot allocate qubits or call operations.</p>
<p>Let’s look at a sample function.</p>
<pre><code><span class="hljs-function"><span class="hljs-keyword">function</span> <span class="hljs-title">ProductNumber</span>(<span class="hljs-params">a: Double, b: Double</span>): <span class="hljs-title">Double</span> </span>{  
    mutable c = <span class="hljs-number">0.0</span>;  
    set c = a * b;  
    <span class="hljs-keyword">return</span> (c);  
}
</code></pre><p>Here, we have defined a function <code>ProductNumber</code>, which takes a tuple <code>(Double, Double)</code> as input and returns an output of type <code>Double</code> after performing the product of input values. Also, notice that a <em>function</em> does not have a body section, as in the case of an <em>operation.</em></p>
<h3 id="heading-expressions-in-q">Expressions in Q</h3>
<p>Let’s take a look at various expressions provided in Q#.</p>
<h4 id="heading-numeric-expressions">Numeric Expressions</h4>
<p>There are two types of numeric expressions provided by Q#:</p>
<ul>
<li>Integer numbers: these are represented by Int</li>
<li>Floating point numbers: represented by Double</li>
</ul>
<p>To represent a hexadecimal integer, we use the “0x” prefix.</p>
<p>We can also perform binary operations on numeric expressions to form a new numeric expression. The type of the new expression will be <code>Double</code> if both input expressions are floating point numbers, or will be an <code>Int</code> if both are integers.</p>
<p>Apart from binary operations, the numeric expressions also support modulus, power, bitwise AND, bitwise OR, bitwise XOR, and bitwise complement operations.</p>
<h4 id="heading-qubit-expressions">Qubit Expressions</h4>
<p>Qubit expressions are the symbols that are bound to qubit values or the elements of a qubit array. Q# does not provide any support for qubit literals.</p>
<h4 id="heading-pauli-expressions">Pauli Expressions</h4>
<p>As we have discussed earlier, the primitive type <code>Pauli</code> can take four possible values: <code>PauliI</code>, <code>PauliX</code>, <code>PauliY</code> and <code>PauliZ</code>. These all are valid Pauli expressions. We can also create an array of Pauli types, and the array elements are considered as valid Pauli expressions.</p>
<p>The two possible result values <code>Zero</code> and <code>One</code> are valid Result expressions. One important point to note is that <code>One</code> is not the same as integer 1, and <code>Zero</code> is not same as integer 0. Also, there is no direct conversion between them.</p>
<p>This is in contrast to C# where, boolean <code>true</code> is considered the same as integer 1 and boolean <code>false</code> is considered the same as integer 0.</p>
<h4 id="heading-range-expressions">Range Expressions</h4>
<p>A range expression is represented as <code>start..step..stop</code> where <code>start</code>, <code>step</code>, <code>stop</code> are all integers. The range expression can take values as <code>start</code>, <code>start+step</code>, <code>start+step+step</code> and so on until <code>stop</code> is passed.</p>
<p>If only <code>start</code> and <code>stop</code> are mentioned in a range expression, then it will take the value of the step as set to 1 implicitly.</p>
<p>Let’s understand this with the help of an example:</p>
<ul>
<li><code>1..3</code> — this indicates the range <code>1,2,3</code>. This gives <code>1</code>, <code>1+1</code>, <code>1+1+1</code></li>
<li><code>1..2..6</code> indicates the range <code>1,3,5</code>, or <code>1</code>, <code>1+2</code>,<code>1+2+2</code></li>
<li><code>8..-2..3</code> indicates the range <code>8,6,4</code> or <code>8</code>, <code>8+(-2)</code>, <code>8+(-2)+(-2)</code></li>
</ul>
<h4 id="heading-array-expressions">Array Expressions</h4>
<p>In Q# an array can be represented as a set of element expressions separated by semicolons and enclosed within square brackets. Similar to C#, all elements of an array in Q# should have the same type.</p>
<p>So, <code>[1;2;3]</code> is a valid array, but <code>[1;2.5;Zero]</code> is an invalid array.</p>
<p>We can also use the ‘+’ operator to concatenate two arrays of the same type.</p>
<p>So, <code>[2;4;6] + [8;10;12]</code> will give <code>[2;4;6;8;10;12]</code> as output.</p>
<p>To find the length of an array, we use the <code>Length</code> built-in function.</p>
<p>As an example, if <code>myArr</code> is an integer array having 5 elements, then <code>Length(myArr</code>) will return <code>5</code> as the output.</p>
<h3 id="heading-q-statements">Q# Statements</h3>
<p>Symbols in Q# can be mutable or immutable.</p>
<p>An immutable symbol cannot be changed after it has been bound. We use the let keyword to define and bind an immutable symbol.</p>
<p><code>let i=8;</code></p>
<p>This will bind the symbol <code>i</code> as an integer with value 8. If we try to reset the value of an immutable expression, we will get a compile time error.</p>
<p>Hence <code>set i=10;</code> will give an error in this case.</p>
<p>A mutable symbol value can be changed after it has been bound. We use the <code>mutable</code> keyword to define and bind a mutable symbol.</p>
<p><code>mutable i=8;</code></p>
<p>This will bind the symbol <code>i</code> as an integer with value 8.</p>
<p>To change the value of a mutable symbol, we use the <code>set</code> keyword:</p>
<p><code>set i=10;</code></p>
<p>This will update the value of variable <code>i</code> to 10</p>
<h4 id="heading-for-loops">for-loops</h4>
<p>Q# allows a for-loop to iterate over an integer range. The for statement consists of the keyword <code>for</code>, followed by an identifier, the keyword <code>in</code>, a Range expression, and a statement block.</p>
<p>A range is specified by the first and last integers in the range, for example: <code>1..5</code> represents the range 1, 2, 3, 4, and 5. If a step other than +1 is needed, then three integers with .. between them are used.</p>
<p>So, <code>1..2..10</code> is the range 1, 3, 5, 7, and 9. The range is inclusive at both ends.</p>
<pre><code><span class="hljs-keyword">for</span>(num <span class="hljs-keyword">in</span> <span class="hljs-number">1.</span><span class="hljs-number">.2</span>.<span class="hljs-number">.10</span>)  
{  
   <span class="hljs-comment">//Do something  </span>
}
</code></pre><p>As the name suggests, this loop will repeat until successful operation occurs. This loop is based on the quantum “repeat until success” pattern. It consists of the keyword <code>repeat</code> and its statement block, the keyword <code>until</code>, a Boolean expression, the keyword <code>fixup</code>, and its statement block .</p>
<p>The statement inside the repeat block is executed, and then the boolean condition is evaluated. If the boolean condition evaluates to true, then the loop terminates. Otherwise, the fixup block is executed and the loop repeats once again.</p>
<p>The fixup block is always required — even if there is no fixup to be done — in which case it will be empty.</p>
<pre><code>repeat {  
    <span class="hljs-comment">//do something  </span>
}  
until boolean condition  
fixup {  
    <span class="hljs-comment">// do something  </span>
}
</code></pre><p>Q# supports if statements for conditional execution, similar to C#. The if statement consists of the keyword <code>if</code>, followed by a Boolean expression and the statement block. An if block may have an optional else block, which is represented by the keyword <code>else</code>.</p>
<pre><code><span class="hljs-keyword">if</span> (num % <span class="hljs-number">2</span> == <span class="hljs-number">0</span>) {  
    <span class="hljs-keyword">return</span> <span class="hljs-literal">true</span>;  
} <span class="hljs-keyword">else</span> {  
    <span class="hljs-keyword">return</span> <span class="hljs-literal">false</span>;  
}
</code></pre><p>A conditional statement can consist of a series of if-elseif-else chains. The else-if clause is represented by the keyword <code>elif</code>.</p>
<pre><code><span class="hljs-keyword">if</span> (num == <span class="hljs-number">1</span>) {  
    <span class="hljs-comment">//do something  </span>
}  
elif(num == <span class="hljs-number">2</span>) {  
    <span class="hljs-comment">//do something  </span>
}  
<span class="hljs-keyword">else</span> {  
    <span class="hljs-comment">//do something  </span>
}
</code></pre><h3 id="heading-conclusion">Conclusion</h3>
<p>In this article, we have learned the basics of the Q# programming language. We also installed QDK and verified the Q# execution environment with Visual Studio 2017. Please post your valuable feedback in the comments section and stay tuned for more on Quantum Computing.</p>
<p>You can always refer to my previous articles <a target="_blank" href="http://ankitsharmablogs.com/">here</a>.</p>
<p>You can also find this article at <a target="_blank" href="http://www.c-sharpcorner.com/article/an-introduction-to-q/">C# Corner</a></p>
<p><em>Originally published at <a target="_blank" href="http://ankitsharmablogs.com/an-introduction-to-q/">ankitsharmablogs.com</a> on Jan 16, 2018.</em></p>
 ]]>
                </content:encoded>
            </item>
        
            <item>
                <title>
                    <![CDATA[ Does Data Compression matter on a Quantum Internet? ]]>
                </title>
                <description>
                    <![CDATA[ By Colt McAnlis Disclaimer: This is a hypothetical think piece. It is a personal opinion and doesn’t represent the opinion of any of the companies (or secret societies) I may (..or may not) be involved with. If you tear a hole through space-time afte... ]]>
                </description>
                <link>https://www.freecodecamp.org/news/does-data-compression-matter-on-a-quantum-internet-f6b986473c1c/</link>
                <guid isPermaLink="false">66c349845ced6d98e4bd32c1</guid>
                
                    <category>
                        <![CDATA[ data compression ]]>
                    </category>
                
                    <category>
                        <![CDATA[ General Programming ]]>
                    </category>
                
                    <category>
                        <![CDATA[ quantum computing ]]>
                    </category>
                
                    <category>
                        <![CDATA[ Science  ]]>
                    </category>
                
                    <category>
                        <![CDATA[ technology ]]>
                    </category>
                
                <dc:creator>
                    <![CDATA[ freeCodeCamp ]]>
                </dc:creator>
                <pubDate>Wed, 28 Jun 2017 15:37:24 +0000</pubDate>
                <media:content url="https://cdn-media-1.freecodecamp.org/images/1*jB_VRVuG5z8Dtp2i4N1o9g.png" medium="image" />
                <content:encoded>
                    <![CDATA[ <p>By Colt McAnlis</p>
<p><em>Disclaimer: This is a hypothetical think piece. It is a personal opinion and doesn’t represent the opinion of any of the companies (or secret societies) I may (..or may not) be involved with. If you tear a hole through space-time after reading this article… that’s your own fault.</em></p>
<p>If you haven’t heard, a research team out of China just made a huge leap with respect to realization of using <a target="_blank" href="http://science.sciencemag.org/cgi/doi/10.1126/science.aan3211">Quantum Entanglement as a valid communication vessel</a>. Their process was to use a low-earth satellite to create a pair of entangled photons and then send them to locations very far apart from each other. Even at never-before-done distances, the photons retained their entanglement, which has set the internet a buzz about the future of communication, and when the new quantum internet will happen.</p>
<p>Now, looking at the math, <strong>I’m still a bit dubious that quantum entanglement</strong> could be viably used for communication. This math person <a target="_blank" href="https://www.forbes.com/sites/chadorzel/2016/05/04/the-real-reasons-quantum-entanglement-doesnt-allow-faster-than-light-communication/#1c0c3f153a1e">explains</a> it a <a target="_blank" href="https://medium.com/starts-with-a-bang/ask-ethan-can-we-use-quantum-entanglement-to-communicate-faster-than-light-e0d7097c0322">bit better than</a> I ever could. However, there’s lots of people hypothesizing that this is the first steps in a new quantum internet where things like <a target="_blank" href="http://spectrum.ieee.org/telecom/security/two-steps-closer-to-a-quantum-internet">Entanglement Swapping</a> and <a target="_blank" href="https://en.wikipedia.org/wiki/Orbital_angular_momentum_of_light">Twisted Light</a> could bridge those gaps.</p>
<p><strong>Then let’s propose a thought experiment</strong>: let’s assume there’s future where an internet exists, whose technology is based on quantum entanglement. This means that data can be transmitted between two locations, at close to speed-of-light without a physical connecting medium between the locations.</p>
<p>In such a world, does data compression matter any more?</p>
<h3 id="heading-a-small-idea-on-how-a-qe-internet-would-work">A small idea on how a QE internet would work</h3>
<p>We have to assume that due to current technology, the first realization of a QE Internet (QEI) would be very similar to the telegraph systems of the past. The cost to maintain and run these early QEI sites would limit their availability, meaning that communication could only occur between a handful of sites.</p>
<p>These sites would require two primary features:</p>
<ol>
<li>A non-centralized system which can distribute entangled photon pairs to the sites (a low-orbit satellite, for example).</li>
<li>A recording system which logs the results of the entanglement tests and can store / retrieve them.</li>
</ol>
<p><img src="https://cdn-media-1.freecodecamp.org/images/Xp0h0wKzejEnv3nQ4yA-OAbVQ0AZU064giIv" alt="Image" width="800" height="475" loading="lazy"></p>
<p>#2 would be most likely built on today’s modern technology. So you can expect a situation where a billion photon pairs are sent to a site, and sampled in unison, and stored as binary data at the location.</p>
<p>From that point, the data would be most likely distributed to it’s final destination using more conventional methods (e.g. fiber connection).</p>
<h3 id="heading-limitations-of-a-first-generation-qei">Limitations of a first generation QEI</h3>
<p>Obviously, we still end up with some data-based bottlenecks here:</p>
<ol>
<li>There is a physical limit to how many entangled pairs can be stored at a site, thus limiting it’s total bandwidth.</li>
<li>There is a physical limit to the speed in which entangled pairs can be sent from the distributor to the sites on a regular basis, thus limiting total system bandwidth.</li>
<li>Environmental factors will cause loss of data in the transfer of photons to the sites from the distributor system. Thus, there will be a need for redundancy in the process, limiting total system bandwidth.</li>
</ol>
<p>When observing the above, you can quickly seen that the overall bandwidth of a QEI would be limited by the above systems, regardless of the ability for information to travel between sites through quantum means. So obviously, reducing the size of the data being sent through the sites will be important, but will today’s data compression algorithms make sense?</p>
<h3 id="heading-data-compression-for-a-qei">Data compression for a QEI</h3>
<p>There’s a few definitions of “data” which represents it as a physical entity, and as the (potential) realization of a Quantum Internet is realized, the need for photon transferal makes this concept even more real.</p>
<p>In fact, that may be the largest ramification of a quantum entangled internet: your data now has a very physical manifestation and cost involved with it.</p>
<p>So it’s obvious that data compression, as a science, will still be needed in a QEI future, but the real question we should be asking ourselves is: <strong>Are today’s compression algorithms good enough to support a quantum internet?</strong></p>
<p>My opinion? Not even close.</p>
<p><img src="https://cdn-media-1.freecodecamp.org/images/muYjkNnMLxY6BjdD-TiW37VflNvJOFyizCaS" alt="Image" width="256" height="336" loading="lazy"></p>
<p>As explained in “<a target="_blank" href="https://www.amazon.com/Understanding-Compression-Data-Modern-Developers/dp/1491961538">Understanding Compression</a>” today’s systems are still grounded around Shannon’s basic architecture of ‘<em>the most frequent symbol gets the smallest bits.</em>’ There’s a lot of power in this process, but until we move out of symbol space, and start gaining the computational power to handle compression entirely in bit-vector space, <a target="_blank" href="http://ieeexplore.ieee.org/abstract/document/1054929/">we’re going to be leaving a lot of information on the table</a>. (But <em>that’s my own unpopular opinion...</em>)</p>
<p>Let’s look beyond that. Are there potential systems where, rather than applying <a target="_blank" href="https://github.com/google/brotli">Brotli</a> to a data set, we instead can apply in to entangled photons directly? Will we start talking about algorithms to do diff’s against the photons on a site, and the data being transmitted, so we can reduce the number of updated pairs? What happens when we start thinking in terms of <a target="_blank" href="https://en.wikipedia.org/wiki/Qubit">qubits</a>, rather than just bits? Do we have to start thinking about LZ encoding in 8 dimensional space?</p>
<p>Obviously, the realization and standardization of Quantum Computing will create a massive technological shift in how our world works. And I’ve got every reason to believe that Data Compression will be right there, too.</p>
 ]]>
                </content:encoded>
            </item>
        
    </channel>
</rss>
