{
 "cells": [
  {
   "cell_type": "markdown",
   "id": "c974fa62",
   "metadata": {
    "id": "c974fa62"
   },
   "source": "# Quantum Algoritma Geliştirme Rehberi\n## Quantum Machine Learning Öğrencileri İçin Pratik Colab Defteri\n\n**Amaç:** Bu defter, quantum algoritmaların nasıl tasarlandığını, geliştirildiğini ve uygulandığını adım adım öğretir. Klasik algoritma düşüncesinden quantum paradigmaya geçişi, Qiskit ile somut örnekler üzerinden gösterir.\n\n**Hedef Kitle:** Quantum Machine Learning (QML) dersi öğrencileri  \n**Ön Koşullar:** Temel lineer cebir, olasılık, Python bilgisi  \n**Kullanılan Kütüphane:** Qiskit (IBM Quantum)\n\n---\n\n### Defter Yapısı\n1. Quantum Algoritma Nedir?\n2. Klasik vs Quantum Düşünce Farkı\n3. Quantum Algoritma Geliştirme Süreci (Adım Adım Metodoloji)\n4. Temel Bileşenler: Kapılar, Ölçüm, Superposition, Entanglement\n5. İlk Algoritma: Deutsch-Jozsa (Orakel tabanlı)\n6. Arama Algoritması: Grover\n7. QML'ye Köprü: Variational Quantum Algorithms (VQA / VQE / QAOA)\n8. Kendi Algoritmanızı Tasarlama Çerçevesi\n9. Hata, Gürültü ve NISQ Gerçekliği\n10. Alıştırmalar ve İleri Kaynaklar"
  },
  {
   "cell_type": "markdown",
   "id": "0407a08a",
   "metadata": {
    "id": "0407a08a"
   },
   "source": "## 0. Ortam Kurulumu\n\nColab'da çalıştırıyorsanız aşağıdaki hücreyi çalıştırın. Yerel ortamda da aynı şekilde kurabilirsiniz."
  },
  {
   "cell_type": "code",
   "execution_count": 1,
   "id": "504e1790",
   "metadata": {
    "colab": {
     "base_uri": "https://localhost:8080/"
    },
    "id": "504e1790",
    "executionInfo": {
     "status": "ok",
     "timestamp": 1786354868523,
     "user_tz": -180,
     "elapsed": 26872,
     "user": {
      "displayName": "Joseph Volkan ÖZCAN",
      "userId": "11389530967736397480"
     }
    },
    "outputId": "987d40d8-4e85-49a8-fdda-17e59faa8550"
   },
   "outputs": [
    {
     "output_type": "stream",
     "name": "stdout",
     "text": [
      "\u001b[2K   \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m9.7/9.7 MB\u001b[0m \u001b[31m71.7 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\n",
      "\u001b[2K   \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m12.4/12.4 MB\u001b[0m \u001b[31m64.7 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\n",
      "\u001b[2K   \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m2.0/2.0 MB\u001b[0m \u001b[31m45.8 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\n",
      "\u001b[2K   \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m137.5/137.5 kB\u001b[0m \u001b[31m6.2 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\n",
      "\u001b[2K   \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m412.6/412.6 kB\u001b[0m \u001b[31m15.2 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\n",
      "\u001b[2K   \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m120.7/120.7 kB\u001b[0m \u001b[31m7.1 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\n",
      "\u001b[2K   \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m94.7/94.7 kB\u001b[0m \u001b[31m4.8 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\n",
      "\u001b[2K   \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m2.4/2.4 MB\u001b[0m \u001b[31m49.3 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\n",
      "\u001b[2K   \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m224.2/224.2 kB\u001b[0m \u001b[31m10.1 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\n",
      "\u001b[2K   \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m54.5/54.5 kB\u001b[0m \u001b[31m3.0 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\n",
      "\u001b[2K   \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m76.6/76.6 kB\u001b[0m \u001b[31m4.4 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\n",
      "\u001b[2K   \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m130.2/130.2 kB\u001b[0m \u001b[31m7.5 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\n",
      "\u001b[2K   \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m541.5/541.5 kB\u001b[0m \u001b[31m25.2 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\n",
      "\u001b[?25hQiskit başarıyla yüklendi.\n"
     ]
    }
   ],
   "source": "# Qiskit ve görselleştirme paketlerini kuralım\n!pip install -q qiskit qiskit-aer qiskit-ibm-runtime matplotlib pylatexenc\n\nimport numpy as np\nfrom qiskit import QuantumCircuit, QuantumRegister, ClassicalRegister, transpile\nfrom qiskit.visualization import plot_histogram, plot_bloch_multivector, circuit_drawer\nfrom qiskit_aer import AerSimulator\nfrom qiskit.quantum_info import Statevector, Operator\nimport matplotlib.pyplot as plt\n\nprint(\"Qiskit başarıyla yüklendi.\")"
  },
  {
   "cell_type": "markdown",
   "id": "da3d2d80",
   "metadata": {
    "id": "da3d2d80"
   },
   "source": "## 1. Quantum Algoritma Nedir?\n\nBir **quantum algoritma**, kuantum mekaniğinin temel prensiplerini (süperpozisyon, dolanıklık, girişim) kullanarak bir problemi çözmek için tasarlanmış bir dizi kuantum işlemdir.\n\nKlasik bir algoritma:\n- Bitler üzerinde deterministik veya rastgele işlemler yapar.\n- Her adımda tek bir durum vardır.\n\nQuantum bir algoritma:\n- **Qubit**ler üzerinde unitery (tersinir) operatörler uygular.\n- Aynı anda birçok durumu **süperpozisyon**da tutabilir.\n- Ölçüm anında olasılıksal bir sonuç verir.\n- **Girişim** sayesinde istenmeyen sonuçların olasılığını azaltır, istenenleri artırır.\n\n### Temel Avantajlar\n- Bazı problemlerde üstel hızlanma (Shor, HHL)\n- Karekök hızlanma (Grover)\n- Klasik olarak zor olan örnekleme ve optimizasyon problemleri için umut verici yaklaşımlar (QAOA, VQE)\n\n> **Önemli Not:** Quantum avantajı her problem için geçerli değildir. Algoritma tasarımı, problemin yapısına uygun quantum özelliğini bulmaya bağlıdır."
  },
  {
   "cell_type": "markdown",
   "id": "21fb1086",
   "metadata": {
    "id": "21fb1086"
   },
   "source": "## 2. Klasik vs Quantum Düşünce Farkı\n\n| Özellik              | Klasik Algoritma                  | Quantum Algoritma                          |\n|----------------------|-----------------------------------|--------------------------------------------|\n| Bilgi birimi         | Bit (0 veya 1)                    | Qubit (α\\|0⟩ + β\\|1⟩)                      |\n| Durum                | Tek durum                         | Süperpozisyon                              |\n| İşlem                | Mantık kapıları (AND, OR...)      | Unitary kapılar (H, X, CNOT, Rx...)        |\n| Paralellik           | Explicit (çok işlemci)            | Implicit (süperpozisyon)                   |\n| Sonuç alma           | Doğrudan                          | Ölçüm (olasılıksal, durumu çökertir)       |\n| Tersinirlik          | Genellikle değil                  | Her zaman (ölçüm hariç)                    |\n| Hata                 | Bit flip                          | Bit + Faz + Dekoherans                     |\n\n**Ana fikir:** Quantum algoritma yazarken \"veriyi nasıl paralel işlerim?\" sorusu yerine **\"istenen sonucu nasıl güçlendiririm (amplify)?\"** sorusunu sorarız. Bu genellikle **quantum girişim** ile yapılır."
  },
  {
   "cell_type": "markdown",
   "id": "0fd8f7a7",
   "metadata": {
    "id": "0fd8f7a7"
   },
   "source": "## 3. Quantum Algoritma Geliştirme Süreci (Metodoloji)\n\nBaşarılı bir quantum algoritma geliştirmek için önerilen adımlar:\n\n### Adım 1: Problemi Formalize Et\n- Girdi / çıktı nedir?\n- Klasik karmaşıklık nedir? (P, NP, BQP?)\n- Quantum avantajı mümkün mü?\n\n### Adım 2: Quantum Veri Kodlaması (Encoding)\n- Basis encoding, Amplitude encoding, Angle encoding, Hamiltonian encoding...\n- Kaç qubit gerekiyor?\n\n### Adım 3: Orakel / Unitary Tasarımı\n- Problemi çözen unitary operatörü ($U_f$, $e^{-iHt}$ vb.) nasıl inşa edilecek?\n\n### Adım 4: Girişim ve Amplifikasyon Stratejisi\n- Hadamard transform, Quantum Phase Estimation, Amplitude Amplification, Variational ansatz...\n\n### Adım 5: Ölçüm ve Post-processing\n- Hangi bazda ölçülecek?\n- Kaç shot gerekli?\n- Klasik post-processing ile sonuç nasıl çıkarılacak?\n\n### Adım 6: Kaynak Analizi ve Optimizasyon\n- Circuit depth, width, gate count\n- NISQ cihazlarına uygun mu? (derinlik düşük mü?)\n\n### Adım 7: Simülasyon → Gerçek Donanım\n- Önce ideal simülatör, sonra gürültülü simülatör, en sonda gerçek quantum bilgisayar."
  },
  {
   "cell_type": "markdown",
   "id": "060e0428",
   "metadata": {
    "id": "060e0428"
   },
   "source": "## 4. Temel Bileşenler: Kapılar ve Durumlar\n\nKısa bir hatırlatma ve pratik örnekler."
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "id": "ab896dba",
   "metadata": {
    "colab": {
     "base_uri": "https://localhost:8080/",
     "height": 201
    },
    "id": "ab896dba",
    "executionInfo": {
     "status": "ok",
     "timestamp": 1786354873373,
     "user_tz": -180,
     "elapsed": 5001,
     "user": {
      "displayName": "Joseph Volkan ÖZCAN",
      "userId": "11389530967736397480"
     }
    },
    "outputId": "29ffe56e-352d-43b3-bd4a-466fc34e5fad"
   },
   "outputs": [
    {
     "output_type": "stream",
     "name": "stdout",
     "text": [
      "Devre:\n"
     ]
    },
    {
     "output_type": "display_data",
     "data": {
      "text/plain": [
       "<Figure size 185.453x117.056 with 1 Axes>"
      ],
      "image/png": "iVBORw0KGgoAAAANSUhEUgAAAKIAAABuCAYAAACk2MjUAAAAOnRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjEwLjAsIGh0dHBzOi8vbWF0cGxvdGxpYi5vcmcvlHJYcgAAAAlwSFlzAAAPYQAAD2EBqD+naQAABIBJREFUeJzt3c9L23ccx/FX0rLGH/FQXZeJrtXZsNqaCIrDwxg6PbjiadBLKT24o1iYmD+gly7QU+nF406SngYzV1kR2SASBHFSQYho9cv4ohetdUS/O22wNu00Wr/vfHk+jn4/8fM+PPl+EvWLIc/zPAE+C/s9ACARIowgRJhAiDCBEGECIcIEQoQJhAgTCBEmECJMIESYQIgwgRBhAiHCBEKECYQIEwgRJhAiTCBEmECIMIEQYQIhwgRChAmECBMIESYQIkwgRJhAiDCBEGECIcIEQoQJhAgTCBEmECJMIESYQIgwgRBhwkW/Bwgyz/OkgwO/xziZS5cUCoXOfVtC/JAODlS8c9/vKU7k4rOfpEjk3PflaIYJhAgTCBEmECJMIESYQIgwgRBhAiHCBEKECYQIEwgRJhAiTCBEmBC4EF3XVSqVUltbmyKRiJqbm/XgwQPt7e1pZGREoVBIT58+9XtMvCFQfwa2sLCgoaEhOY6jmpoatbe3a3NzU0+ePNHq6qq2t7clSZ2dnf4OekLP3T81+Nuv+rE9oR8+/6Lkmo9+eaZvr3yqn7/86pynOxuBuSO6rqvh4WE5jqPx8XFtbW0pn8/LcRyl02lls1nlcjmFQiElEgm/x8UbAhPi2NiYNjY2NDo6qsePHysajf57LZVKKZlMqlgs6tq1a6qrq/NxUpQSiBCXl5eVyWTU0NCgR48elVzT1dUlSUomk+c5Go4pEO8Rp6amdHR0pLt376q2trbkmqqqKkmVHeKrw0O5lfYMzDEFIsSZmRlJUl9f3zvXbGxsSKrsEB++WNLDF0t+j/FBBCLEtbU1SdLVq1dLXi8Wi5qbm5N0uhC7u7vlOM6x11eFw/qjs7fs/d70/Wet+q6xueS1od+fn8ke8Xhc+0dHZb02Fotpfn6+rNcGIsS9vT1J0v7+fsnrmUxGrusqGo2qpaWl7H0cx9HLly+Pvb76wgWps+zt3tJWW6tvPv7k7L5hCZubm3p1ePhB9yglECHGYjHt7Owon8+rt/e/d6CtrS1NTExIkhKJxKme2Y3FYidaXxWuvM+CjY2Np7ojlisQIQ4MDGh5eVnpdFqDg4OKx+OSpFwup3v37sl1XUmn/0H2SY8d7/XrinuueWVlRSGeay5PKpVSfX291tfXdfPmTXV0dOj69evq6elRa2ur+vv7JVX2B5WgC0SITU1Nmp2d1e3btxWJRFQoFHT58mVNTk4qm81qZWVFEiFaFoijWZJu3Lih6enpt76+u7urQqGgcDisW7du+TAZjiMwIb7L0tKSPM9TPB5XdXW13+OU5euGK/pr+M571/zfdesCcTS/z+LioiSOZesIESYQIkwI/HvEf34PDdsCf0dEZSBEmECIMIEQYQIhwgRChAmECBMIESYQIkwgRJhAiDAh5Hme5/cQQcU/hTw+QoQJHM0wgRBhAiHCBEKECYQIEwgRJhAiTCBEmECIMIEQYQIhwgRChAmECBMIESYQIkwgRJhAiDCBEGECIcIEQoQJhAgTCBEmECJMIESYQIgw4W9fgQlBZqKLbgAAAABJRU5ErkJggg==\n"
     },
     "metadata": {}
    },
    {
     "output_type": "stream",
     "name": "stdout",
     "text": [
      "\n",
      "Durum vektörü:\n"
     ]
    },
    {
     "output_type": "display_data",
     "data": {
      "text/plain": [
       "<IPython.core.display.Latex object>"
      ],
      "text/latex": "$$\\frac{\\sqrt{2}}{2} |0\\rangle+\\frac{\\sqrt{2}}{2} |1\\rangle$$"
     },
     "metadata": {}
    }
   ],
   "source": "# Tek qubit süperpozisyon oluşturma\nqc = QuantumCircuit(1)\nqc.h(0)  # Hadamard → |+⟩ = (|0⟩ + |1⟩)/√2\n\nprint(\"Devre:\")\ndisplay(qc.draw('mpl'))\n\nstate = Statevector.from_instruction(qc)\nprint(\"\\nDurum vektörü:\")\ndisplay(state.draw('latex'))"
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "id": "8b84ea05",
   "metadata": {
    "colab": {
     "base_uri": "https://localhost:8080/",
     "height": 231
    },
    "id": "8b84ea05",
    "executionInfo": {
     "status": "ok",
     "timestamp": 1786354873640,
     "user_tz": -180,
     "elapsed": 173,
     "user": {
      "displayName": "Joseph Volkan ÖZCAN",
      "userId": "11389530967736397480"
     }
    },
    "outputId": "e0b16155-2dcd-4c8c-cb45-aed04aa33d17"
   },
   "outputs": [
    {
     "output_type": "display_data",
     "data": {
      "text/plain": [
       "<Figure size 287.294x200.667 with 1 Axes>"
      ],
      "image/png": "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\n"
     },
     "metadata": {}
    },
    {
     "output_type": "stream",
     "name": "stdout",
     "text": [
      "Bell durumu (|Φ+⟩):\n"
     ]
    },
    {
     "output_type": "display_data",
     "data": {
      "text/plain": [
       "<IPython.core.display.Latex object>"
      ],
      "text/latex": "$$\\frac{\\sqrt{2}}{2} |00\\rangle+\\frac{\\sqrt{2}}{2} |11\\rangle$$"
     },
     "metadata": {}
    }
   ],
   "source": "# İki qubit dolanıklık (Bell state)\nqc_bell = QuantumCircuit(2)\nqc_bell.h(0)\nqc_bell.cx(0, 1)  # CNOT\n\ndisplay(qc_bell.draw('mpl'))\nstate_bell = Statevector.from_instruction(qc_bell)\nprint(\"Bell durumu (|Φ+⟩):\")\ndisplay(state_bell.draw('latex'))"
  },
  {
   "cell_type": "markdown",
   "id": "b8860cdc",
   "metadata": {
    "id": "b8860cdc"
   },
   "source": "## 5. İlk Algoritma: Deutsch-Jozsa\n\n**Problem:** $f: \\{0,1\\}^n \\to \\{0,1\\}$ fonksiyonu ya **sabit** (constant) ya da **dengeli** (balanced). Tek bir sorguda hangisi olduğunu bul.\n\nKlasik: En kötü durumda $2^{n-1}+1$ sorgu gerekir.  \nQuantum: **1 sorgu** yeter.\n\n### Algoritma Adımları\n1. $n$ qubit + 1 ancilla qubit hazırla.\n2. Tüm qubitlere Hadamard uygula → süperpozisyon.\n3. Orakeli ($U_f$) uygula.\n4. İlk $n$ qubite tekrar Hadamard uygula.\n5. Ölç. Hepsi 0 ise sabit, değilse dengeli."
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "id": "940f85cc",
   "metadata": {
    "colab": {
     "base_uri": "https://localhost:8080/",
     "height": 401
    },
    "id": "940f85cc",
    "executionInfo": {
     "status": "ok",
     "timestamp": 1786354874157,
     "user_tz": -180,
     "elapsed": 515,
     "user": {
      "displayName": "Joseph Volkan ÖZCAN",
      "userId": "11389530967736397480"
     }
    },
    "outputId": "8ba9d732-6e1a-4e02-c0e3-4ce93d94feb3"
   },
   "outputs": [
    {
     "output_type": "stream",
     "name": "stdout",
     "text": [
      "Deutsch-Jozsa Devresi (balanced):\n"
     ]
    },
    {
     "output_type": "display_data",
     "data": {
      "text/plain": [
       "<Figure size 789.163x451.5 with 1 Axes>"
      ],
      "image/png": "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\n"
     },
     "metadata": {}
    }
   ],
   "source": "def deutsch_jozsa_oracle(n, case='balanced'):\n    \"\"\"Basit bir orakel oluşturur.\"\"\"\n    oracle = QuantumCircuit(n + 1)\n\n    if case == 'constant':\n        # f(x) = 0  (veya 1 için X ekleyebilirsiniz)\n        pass\n    else:  # balanced\n        # Örnek: f(x) = x_0  (ilk bit)\n        oracle.cx(0, n)\n\n    return oracle.to_gate(label='Oracle')\n\ndef deutsch_jozsa(n=3, case='balanced'):\n    qc = QuantumCircuit(n + 1, n)\n\n    # 1. Ancilla |1⟩ yap\n    qc.x(n)\n\n    # 2. Tüm qubitlere H\n    qc.h(range(n + 1))\n\n    # 3. Orakel\n    oracle = deutsch_jozsa_oracle(n, case)\n    qc.append(oracle, range(n + 1))\n\n    # 4. İlk n qubite H\n    qc.h(range(n))\n\n    # 5. Ölçüm\n    qc.measure(range(n), range(n))\n\n    return qc\n\n# Örnek: 3 qubit dengeli fonksiyon\ndj_circuit = deutsch_jozsa(3, 'balanced')\nprint(\"Deutsch-Jozsa Devresi (balanced):\")\ndisplay(dj_circuit.draw('mpl', fold=-1))"
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "id": "e2879300",
   "metadata": {
    "colab": {
     "base_uri": "https://localhost:8080/",
     "height": 504
    },
    "id": "e2879300",
    "executionInfo": {
     "status": "ok",
     "timestamp": 1786354879800,
     "user_tz": -180,
     "elapsed": 5651,
     "user": {
      "displayName": "Joseph Volkan ÖZCAN",
      "userId": "11389530967736397480"
     }
    },
    "outputId": "a4aa5fcd-47c7-49d8-cacf-88d72aa0110e"
   },
   "outputs": [
    {
     "output_type": "stream",
     "name": "stdout",
     "text": [
      "Ölçüm sonuçları: {'001': 1024}\n"
     ]
    },
    {
     "output_type": "display_data",
     "data": {
      "text/plain": [
       "<Figure size 640x480 with 1 Axes>"
      ],
      "image/png": "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\n"
     },
     "metadata": {}
    }
   ],
   "source": "# Simüle et\nsimulator = AerSimulator()\ncompiled = transpile(dj_circuit, simulator)\nresult = simulator.run(compiled, shots=1024).result()\ncounts = result.get_counts()\n\nprint(\"Ölçüm sonuçları:\", counts)\ndisplay(plot_histogram(counts))\n\n# Yorum: Eğer '000' dominant değilse → dengeli (balanced)\n# '000' dominant ise → sabit (constant)"
  },
  {
   "cell_type": "markdown",
   "id": "a0454bb3",
   "metadata": {
    "id": "a0454bb3"
   },
   "source": "## 6. Grover Arama Algoritması\n\n**Problem:** $N = 2^n$ elemanlı sırasız bir listede işaretli (marked) elemanı bul.\n\nKlasik: Ortalama $N/2$ sorgu.  \nQuantum: $O(\\sqrt{N})$ sorgu.\n\n### Temel Fikir: Amplitude Amplification\n1. Uniform süperpozisyon oluştur.\n2. **Oracle**: İşaretli durumun fazını çevir ($|w\\rangle \\to -|w\\rangle$).\n3. **Diffuser**: Ortalama etrafında yansıt (amplify).\n4. Bu iki adımı ~$\\frac{\\pi}{4}\\sqrt{N}$ kez tekrarla.\n5. Ölç."
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "id": "48845148",
   "metadata": {
    "colab": {
     "base_uri": "https://localhost:8080/",
     "height": 337
    },
    "id": "48845148",
    "executionInfo": {
     "status": "ok",
     "timestamp": 1786354880815,
     "user_tz": -180,
     "elapsed": 1012,
     "user": {
      "displayName": "Joseph Volkan ÖZCAN",
      "userId": "11389530967736397480"
     }
    },
    "outputId": "91495dd3-91bd-4726-c683-9cb08f5d8544"
   },
   "outputs": [
    {
     "output_type": "stream",
     "name": "stdout",
     "text": [
      "Grover devresi (n=3, marked=101, iterasyon=2):\n"
     ]
    },
    {
     "output_type": "display_data",
     "data": {
      "text/plain": [
       "<Figure size 1123.61x367.889 with 1 Axes>"
      ],
      "image/png": "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\n"
     },
     "metadata": {}
    }
   ],
   "source": "def grover_oracle(n, marked_state):\n    \"\"\"İşaretli durumu |marked_state> olan orakel.\"\"\"\n    oracle = QuantumCircuit(n)\n    # marked_state bitlerini X ile 1'e çevir, sonra multi-controlled Z\n    for i, bit in enumerate(reversed(marked_state)):\n        if bit == '0':\n            oracle.x(i)\n\n    # Multi-controlled Z (n-1 kontrol)\n    oracle.h(n-1)\n    oracle.mcx(list(range(n-1)), n-1)\n    oracle.h(n-1)\n\n    for i, bit in enumerate(reversed(marked_state)):\n        if bit == '0':\n            oracle.x(i)\n\n    return oracle.to_gate(label='Oracle')\n\ndef diffuser(n):\n    \"\"\"Grover diffuser operatörü.\"\"\"\n    diff = QuantumCircuit(n)\n    diff.h(range(n))\n    diff.x(range(n))\n    # Multi-controlled Z\n    diff.h(n-1)\n    diff.mcx(list(range(n-1)), n-1)\n    diff.h(n-1)\n    diff.x(range(n))\n    diff.h(range(n))\n    return diff.to_gate(label='Diffuser')\n\ndef grover(n=3, marked='101', iterations=None):\n    if iterations is None:\n        iterations = int(np.pi/4 * np.sqrt(2**n))\n\n    qc = QuantumCircuit(n, n)\n\n    # 1. Süperpozisyon\n    qc.h(range(n))\n\n    # 2. Amplification döngüsü\n    for _ in range(iterations):\n        qc.append(grover_oracle(n, marked), range(n))\n        qc.append(diffuser(n), range(n))\n\n    qc.measure(range(n), range(n))\n    return qc, iterations\n\nn = 3\nmarked = '101'\ngrover_qc, iters = grover(n, marked)\nprint(f\"Grover devresi (n={n}, marked={marked}, iterasyon={iters}):\")\ndisplay(grover_qc.draw('mpl', fold=-1))"
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "id": "e3ccd5ec",
   "metadata": {
    "colab": {
     "base_uri": "https://localhost:8080/",
     "height": 538
    },
    "id": "e3ccd5ec",
    "executionInfo": {
     "status": "ok",
     "timestamp": 1786354881651,
     "user_tz": -180,
     "elapsed": 830,
     "user": {
      "displayName": "Joseph Volkan ÖZCAN",
      "userId": "11389530967736397480"
     }
    },
    "outputId": "c9b7b44b-5412-428f-9d5a-031a29754f71"
   },
   "outputs": [
    {
     "output_type": "stream",
     "name": "stdout",
     "text": [
      "Ölçüm sonuçları:\n"
     ]
    },
    {
     "output_type": "display_data",
     "data": {
      "text/plain": [
       "<Figure size 640x480 with 1 Axes>"
      ],
      "image/png": "iVBORw0KGgoAAAANSUhEUgAAAnYAAAHWCAYAAAD6oMSKAAAAOnRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjEwLjAsIGh0dHBzOi8vbWF0cGxvdGxpYi5vcmcvlHJYcgAAAAlwSFlzAAAPYQAAD2EBqD+naQAAQqtJREFUeJzt3Xl8VNX9//H3TDYCJIEEQgiQhUXCvgkIKAqkBEyxKGoVimBRKwUtolSoCqIgihW0Fku1SFotWG2LUqAsghiRHRtZRAQMi0CQsCQEQkgy5/dHfpkvYxIgkcnAyev5eOTxYM49mfl8TobMO3fuveMwxhgBAADgmuf0dQEAAAC4Mgh2AAAAliDYAQAAWIJgBwAAYAmCHQAAgCUIdgAAAJYg2AEAAFiCYAcAAGAJf18XcK1yuVw6fPiwQkJC5HA4fF0OAACwlDFGp0+fVnR0tJzOi++TI9hV0OHDh9WoUSNflwEAAKqIgwcPqmHDhhedQ7CroJCQEElFixwaGurjagAAgK2ys7PVqFEjd/a4GIJdBRW//RoaGkqwAwAAXnc5h35x8gQAAIAlCHYAAACWINgBAABYgmAHALgmpaamasCAAYqOjpbD4dCHH37osf3o0aMaPny4oqOjVb16dfXr10+7d+8u9b6MMerfv3+p97Np0yb16dNHtWrVUu3atZWUlKQvv/zSS10BPw7BDgBwTTpz5ozatWunWbNmldhmjNHAgQP17bff6qOPPtL//vc/xcbGKjExUWfOnCkx/9VXXy31wPScnBz169dPMTEx2rBhg9asWaOQkBAlJSUpPz/fK30BPwZnxQIArkn9+/dX//79S922e/durV+/Xtu3b1erVq0kSX/6058UFRWl+fPn64EHHnDPTUtL0yuvvKLNmzerfv36Hvfz9ddf68SJE3ruuefc1y6dNGmS2rZtq/3796tp06Ze6g6oGPbYAQCsk5eXJ0mqVq2ae8zpdCooKEhr1qxxj509e1aDBw/WrFmzFBUVVeJ+mjdvroiICM2ZM0fnz59Xbm6u5syZoxYtWiguLs7rfQDlRbADAFgnISFBMTExmjBhgk6ePKnz58/rpZde0nfffacjR4645z322GPq3r27fvazn5V6PyEhIVq9erXeffddBQcHq2bNmlq6dKn++9//yt+fN71w9SHYAQCsExAQoH//+9/65ptvFB4erurVq+uTTz5R//793Z+1uXDhQq1atUqvvvpqmfeTm5urESNGqEePHlq/fr0+//xztW7dWsnJycrNza2kboDLx58bAAArderUSWlpacrKytL58+dVt25dde3aVddff70kadWqVdq7d69q1arl8X2DBg3STTfdpNWrV2vevHnat2+f1q1b5w6E8+bNU+3atfXRRx/pnnvuqey2gIsi2AEArBYWFiap6ISKzZs36/nnn5ckjR8/3uMkCklq06aNZs6cqQEDBkgqOgbP6XR6nDFbfNvlclVSB8DlI9gBAK5JOTk52rNnj/t2enq60tLSFB4erpiYGH3wwQeqW7euYmJitG3bNv3mN7/RwIED1bdvX0lSVFRUqSdMxMTEKD4+XpL0k5/8ROPGjdOoUaP0yCOPyOVy6cUXX5S/v7969epVOY0C5UCwAwBckzZv3uwRrsaOHStJGjZsmFJSUnTkyBGNHTtWR48eVf369XXffffpmWeeKddjJCQk6D//+Y8mT56sbt26yel0qkOHDlq6dGmJS6MAVwOHMcb4uohrUXZ2tsLCwpSVlaXQ0FBflwMAACxVnszBWbEAAACWINgBAABYgmAHAABgCYIdAACAJQh2AAAAliDYAQAAWOKqC3bTpk1T586dFRISosjISA0cOFC7du3ymHPu3DmNGjVKERERqlmzpgYNGqSjR496zDlw4ICSk5NVvXp1RUZGaty4cSooKPCYs3r1anXs2FFBQUFq2rSpUlJSvN0eAACA11x1we7TTz/VqFGjtH79eq1YsUL5+fnq27evzpw5457z2GOP6T//+Y8++OADffrppzp8+LDuuOMO9/bCwkIlJyfr/PnzWrt2rf76178qJSVFEydOdM9JT09XcnKyevXqpbS0NI0ZM0YPPPCAli1bVqn9AgAAXClX/QWKjx07psjISH366afq2bOnsrKyVLduXc2bN0933nmnJOnrr79WixYttG7dOt1www3673//q5/+9Kc6fPiw6tWrJ0maPXu2nnzySR07dkyBgYF68skntXjxYm3fvt39WPfcc49OnTqlpUuXXrIuLlAMAAAqQ3kyx1X/kWJZWVmSpPDwcEnSli1blJ+fr8TERPechIQExcTEuIPdunXr1KZNG3eok6SkpCSNHDlSO3bsUIcOHbRu3TqP+yieM2bMmFLryMvLU15envt2dna2JCk/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/f3lcrnkdFaNfF9YWCiHw1Fl+v2hs2fPav369frggw8UHh6uFi1aqGnTprruuusUHh7u6/IqVVV/LgClOX/+vAIDA31dBn4kgp3lnnjiCc2fP1+RkZE6efKkDhw4oPj4eA0ePFiPPvqo6tat6+sSvW7r1q1q27atx1hhYaGcTmeV2nP1wAMPaMWKFYqLi9Px48d14MABRUVFqWfPnvr1r3+tjh07+rpEr9uwYYO6du3qMVZQUCCn01mlQt7hw4c1f/58bdiwQc2aNVOrVq3UokULNWvWTDVr1pQxpkr936jKQX/Pnj16/fXX9b///U/NmjVTkyZN1Lp1a3Xp0kVRUVG+Lq/SuVwuORyOa/v5b2CtHTt2mJCQELN48WJz+PBhU1hYaPbt22cmTpxoGjRoYMLCwsw777zj6zK9avfu3cbf39/06NHDTJw40Wzbtq3EnPPnz5sNGzaYvLw8H1RYOXbs2GFq1qxp1qxZY86ePWuMMebEiRPmD3/4g2nVqpVxOp1m+vTpprCw0LhcLh9X6x1ff/21cTgcpkGDBmbEiBFm/fr1HttdLpfJy8szCxcuNBkZGT6q0vvS09NN586dTZMmTcydd95pmjdvbmrXrm3atGljnnzySXPs2DFfl1gpMjMzzdq1az3GXC6XKSgosPb/wA/t3bvXtGjRwnTp0sU8+uijpk+fPqZNmzamY8eOZvjw4Wbjxo2+LrFSHD161CxcuNAUFBR4jBcWFnrcPn/+fGWWVWEEO4tNmTLF9OzZ0337widtTk6O+c1vfmPatGljvv/+e1+UVymeffZZExMTYx5++GHTvXt307x5c5OUlGT++Mc/mkOHDhljjDl48KBxOBzm4MGDPq7We1555RVz4403um//MMS+/PLLJj4+3nz77beVXVqlef75502rVq3MxIkTzY033mjCwsLMddddZ5555hmTnp5ujDHmyJEjxuFwmAMHDvi2WC/61a9+ZZKTkz2e7+np6WbSpEmmbt26pn79+mbZsmU+rLByPProo8bhcJjrrrvOjBs3znz99dce2wsLC83+/fvN+++/X+IF3xYPP/ywGTBggDl58qR77NChQ+aNN94wHTp0MKGhoebdd9/1XYGVZNSoUcbhcJg6deqYYcOGmc8//9xju8vlMunp6ebll182586d81GVl4+3Yi3273//W0899ZSWLVummJgYSUVvO7lcLgUGBmr37t268847NXLkSD388MM+rtY7Bg8erHr16mncuHE6dOiQNmzYoA0bNmjHjh3Ky8tThw4ddObMGX3zzTfasWOHr8v1mpUrV+qBBx7QO++8oxtvvFFS0XMhPz9fwcHBOnr0qAYOHKjbbrtNEyZM8HG13vHrX/9a/v7+euaZZ5SXl6cvv/xSq1at0vLly7V//361bdtW1atX16FDh6x+LvTo0UODBg3S2LFjlZ+fL4fDIX9/f0lFb0PdcccdcjgcWrBggdVvyXbq1Ent27dXZGSkli1bpj179qhZs2b6xS9+oeHDh6t27dp67rnnlJKSom+//dbX5XpFv3791L17d02cOFGFhYWSJD8/P/f2kSNHaseOHVqxYoUCAwOtfS7ccMMN6tGjh+Li4vSPf/xD69evV4MGDTR48GA9+OCDaty4sSZPnqx33nlHe/bs8XW5l+bjYAkvyszMNAkJCaZly5bmn//8Z6l/abRt29b8+c9/9kF13pefn2/effddM23aNI/xjIwMs2LFCvPCCy+YgQMHGofDYd566y0fVVk5zp49axITE010dLR588033W/HXqhdu3Zm1qxZPqjO+woKCszixYtL9JeTk2N27txp5s+fb4YNG2YcDoeZM2eOj6qsHBMnTjTXX3+9x++D8+fPu58TK1euNE2bNrX6bbh9+/aZpKQk87e//c3k5eWZb775xnzwwQfmwQcfNE2aNDGhoaEmKSnJREREmBkzZvi6XK+ZMWOGiY+PN3v37nWP5eXluZ8baWlpJj4+3nz66ae+KtHrvvvuO3PnnXe6XwOys7PN5s2bzdNPP20SEhKMw+EwHTt2NCEhIWbmzJm+LfYyscfOcocPH9bYsWO1c+dONWzYUJ07d1avXr0UGxur119/XX/961+1f/9+1ahRw9elel1+fr4CAgI8xt577z0NHjxYOTk5ql69uo8qqxy5ubl66qmn9OGHH6p69erq2rWrbrvtNtWqVUtz5szRypUr9c0331SJ50JpZ4MvWrRIt912m/XPhc2bN2vAgAFq2LChJk2apJ/+9Kce27/55hu1bdtWJ06csHYdsrOztWDBAsXFxenmm292j2dlZWnfvn3asmWLUlJStHbtWp0+fVrBwcE+rNZ7vv32Ww0aNEjZ2dmaOHGihg0b5rF9x44d6tChg06dOmXtc+Hs2bNauXKlIiMjPU6scrlcOnnypL788kvNnDlT//3vf6+Z5wLBrgr4/vvvtWTJEn388cfav3+/du3apczMTN1yyy164IEHNHjwYF+X6BVlXcrlwrMgx40bp02bNmn16tWVX2AlKl6L06dPa82aNVqzZo02bdqkzZs3q6CgQImJiRoxYoSSk5N9XapXmKLjiS961uPkyZO1du1aLVu2rBIr8409e/boySef1ObNmxUREaEePXro1ltv1a5duzR//nw1atRI//znP31dZqUwxqiwsND9dnSxn//85/r+++/1ySef+KiyynH69GmNHz9e7733ngoKCvSTn/xE/fr10/bt27V69Wq1adNG77zzjq/LrDSmlMMPhg4dqv379ys1NdVHVZUPwc5SR48eVXp6uoKCghQcHKzGjRvL6XRq7969Onv2rGrUqKE6depYff2y4jUIDAyUMUZxcXGKiIhwbzfG6KOPPlKDBg3UuXNnH1bqXaUF3PPnz+vYsWMKDg7WuXPnFBYWZvWeusu5XuPq1atVt25dtWrVqpKq8q0zZ85o5cqVWrVqlTZt2qRt27YpIiJCI0aM0C9+8QvFxcX5usRKZYxxP09yc3N18803a/z48Ro0aJCvS/Oa4n7PnTunbdu2KTU1VatWrdKWLVvUuHFjDRkyRHfccYfq16/v61K95lKXN8nNzdXPfvYzjRw5UrfffnslV1cxBDsLvfXWW5o7d66++OIL+fv7q3nz5mrRooX69Omj2267zSPc2OqHa9CyZUslJCSoR48eSk5OVsOGDX1dYqUr3jPh5+dn7UHQl3I5e+5stmTJEp08eVKFhYVq1KiRunTpoho1aujs2bPy8/PT6dOnVadOHV+X6XXF61BQUKC6deuqa9euHr8X8/Ly9PHHH1u7B7ssF17fMysrS2FhYb4uyefy8/O1efNmdevWzdelXDaCnWWOHz+uZs2aadSoUXrwwQeVnZ2tJUuWaOXKldq9e7dat26t1157TfHx8dae8XaxNdizZ4/atGmjmTNnKj4+XgUFBSXegrHFyZMn1bFjRw0aNEj333+/x56oCy/IWnz8ZUhIiA+r9Y6LrcGFf6nv3LlT9evXV61atXxXrBedPn1aDz/8sFasWKGCggLVr19fNWrUUEREhPr27au77rrL/ceOzZ9G88N1iI6OVs2aNRUREaFbbrlFd999t2JjY31dplcVFBToxIkTioyM9HUpPmX1OlTqqRrwutdee8107dq11G2rVq0ynTt3Ni1btvS4bpFtWIMir732mnE4HKZt27bG4XCYFi1amOnTp3tcfPfgwYOmffv2HmfF2YQ1KDJlyhTTpk0bk5qaaowxZtu2bWb27NlmyJAhpm3btuauu+4yp06d8nGV3nexdWjXrp25++67rV+HmTNnmlq1apnRo0eb1NRUc+bMmRJzsrKyzJIlS66ZC/JWxOWuw6JFi665i9cT7CzzxhtvmFatWpmdO3caY4zJzc31eFLu3LnTXHfddeb999/3VYlexxoUGTFihHnooYfM/v37zeeff24eeeQR06hRI+N0Os3NN99s5s+fb1599VVTvXp1X5fqNaxBkR49ephXX321xHhhYaFZtmyZiYmJMQMHDvRBZZWLdTCmS5cupnv37qZz587G6XSahIQEM2nSJLNt2zb3hZjfeOONMv84toXN62Dn/vYq7K677pLT6dTrr7+uc+fOqVq1agoMDJTL5ZIkJSQkKCIiQvv37/dxpd7DGhQdI9SqVSvFxcUpJiZG3bt318yZM7Vhwwb961//UlRUlB555BE99thjevLJJ31drlewBkXy8/PVqlUrLViwQMePH5dU9DZU8fFUffv21axZs7Rnzx5t377dx9V6D+sgHTt2TIGBgRo5cqQ2btyo7du36/bbb1dKSorat2+vm2++WbNnz9Ybb7xR4jOVbWL9Ovg6WeLKKf6cz3/961+mYcOGJjQ01Dz44IPmiy++MMYYc/jwYTNv3jxTs2ZN90co2YY1+D/nzp1zf2xaaZ95uGTJEuNwOMx3333ni/IqBWtQZN26daZp06bm6aefNpmZmSW2Hzx40NSoUYN1sHwdDh8+bGbMmFHiI+MKCgpMamqqGT58uAkLC7P+IxZtXwdOnrBQXl6e9u7dq08//VQfffSR1qxZI4fDoQYNGig/P19DhgzRc8895+syvYo1KHLkyBEFBgaWeib0888/r7lz51r7cUnFqvoaGGNUUFCguXPn6ne/+50KCwt19913695771VsbKzS0tK0cOFCbdu2TZs3b/Z1uV7DOhTJzc2VJAUHB5d6At0TTzyhVatW6YsvvvBFeZXG5nUg2FkiMzNT//jHP/Tyyy8rIiJC4eHhql27trp06aIOHTro7Nmz+vbbb9W/f381a9bMyrNhWYMixevw+9//XnXr1lVoaKiio6N12223KTk5WcHBwXK5XPrLX/6i6OjoEp88YAPWoHSnTp1SSkqK5s2bp7S0NIWFhalatWrq2LGjJkyYoBtuuMHXJVYK1qF0586dU/v27XX//fdbfXjCpVzr60Cws8Qvf/lLffnll+rfv79q1qyp48ePa8+ePTp06JBiY2M1efJktWzZ0tdlehVrUOTCdQgJCdHx48e1c+dOHTx4UM2aNdPYsWOvqWsyVQRrUCQ3N7fERyAZY5Sbm6ucnBxt27ZNNWvWvDaPIyoH1qH0NShtzvvvv697771XgYGBlVRZ5aoK60Cws4AxRjVr1tSSJUvcn3tojNGePXv02Wef6S9/+YtOnDihf/7zn2rdurWPq/UO1qBIWeuwd+9effbZZ3rrrbeUlZWl999/39pPWGAN/s/jjz+uHj16qFOnToqKilJQUFCJOSdPnlTt2rWtva6lxDpIl7cGp06dsvZajsWqxDpU3uF88Jbt27eb1q1bm02bNpW6/ezZs6Zt27Zm0qRJlVtYJWINirAOrEGxv//978bhcJiAgAATHx9vHnvsMbNq1SqTkZHhvj5ZVlaW+dnPfma2bt3q42q9h3Uoew2OHj1q8vPzjTHG5OTkmAEDBpht27b5uFrvqSrrQLCzwNmzZ03v3r1Nz549zbfffmtcLleJOa+88orp1KmTD6qrHKxBEdaBNSg2YsQIM3LkSLN3714zZcoUExcXZxwOh+nYsaOZNm2a+eKLL8zbb79t/P39fV2qV7EOrEGxqrIOXMfOAsHBwZoyZYqys7M1dOhQzZs3T0eOHHGf9ZOXl6f169erefPmPq7Ue1iDIqwDayAVXZ+tcePGqlWrlho3bqynnnpK6enpSktL0/XXX68XX3xRPXv21K9+9SsNHTrU1+V6DevAGhSrUuvg62SJK2fr1q3mrrvuMtWqVTN16tQxAwcONA8//LCJj483nTt3Nl9++aWvS/Q61qAI68AanDx50nz99dfGGGPy8vJK7Ll89913jcPhMGlpab4or9KwDqxBsaqyDpw8YaHvv/9eixYt0ocffqjg4GC1bt1ad955p1q0aOHr0ioNa1CEdWANLuRyuWSMkZ+fn9566y395je/0dmzZ31dVqVjHViDYjauA8HOci6XS05n1X7HnTUowjqwBheaMWOGCgsLNW7cOF+X4lOsA2tQzJZ1INgBQBWUn58vPz+/Kh90WQfWoJgt60CwAwAAsMS1HUsBAADgRrADAACwBMEOAADAEgQ7AAAASxDsAAAALEGwAwAAsATBDgAAwBIEOwAAAEsQ7AAAACzx/wDn8eTR0ZI7XgAAAABJRU5ErkJggg==\n"
     },
     "metadata": {}
    },
    {
     "output_type": "stream",
     "name": "stdout",
     "text": [
      "En yüksek olasılıklı durum: 101\n",
      "Beklenen marked state: 101\n"
     ]
    }
   ],
   "source": "compiled_g = transpile(grover_qc, simulator)\nresult_g = simulator.run(compiled_g, shots=2048).result()\ncounts_g = result_g.get_counts()\n\nprint(\"Ölçüm sonuçları:\")\ndisplay(plot_histogram(counts_g))\nprint(f\"En yüksek olasılıklı durum: {max(counts_g, key=counts_g.get)}\")\nprint(f\"Beklenen marked state: {marked}\")"
  },
  {
   "cell_type": "markdown",
   "id": "220aac72",
   "metadata": {
    "id": "220aac72"
   },
   "source": "## 7. QML'ye Köprü: Variational Quantum Algorithms\n\nNISQ döneminde en pratik yaklaşım **hibrit klasik-quantum** algoritmalardır.\n\n### Genel Yapı (VQA)\n1. Parametreli bir quantum circuit (ansatz) tasarlanır: $U(\\boldsymbol{\\theta})$\n2. Beklenen değer ölçülür: $\\langle \\psi(\\boldsymbol{\\theta}) | H | \\psi(\\boldsymbol{\\theta}) \\rangle$\n3. Klasik optimizasyon algoritması $\\boldsymbol{\\theta}$ parametrelerini günceller.\n4. Yakınsayana kadar tekrarlanır.\n\nBu yapı:\n- **VQE** → Moleküler enerji\n- **QAOA** → Combinatorial optimizasyon\n- **Quantum Neural Networks / Variational Classifiers** → QML\n\nAşağıda basit bir **parametreli circuit** ve beklenen değer hesabı gösteriyoruz."
  },
  {
   "cell_type": "code",
   "execution_count": 8,
   "id": "d0d9a32e",
   "metadata": {
    "colab": {
     "base_uri": "https://localhost:8080/",
     "height": 269
    },
    "id": "d0d9a32e",
    "executionInfo": {
     "status": "ok",
     "timestamp": 1786354882447,
     "user_tz": -180,
     "elapsed": 793,
     "user": {
      "displayName": "Joseph Volkan ÖZCAN",
      "userId": "11389530967736397480"
     }
    },
    "outputId": "680f7342-744e-428a-a4d5-5c5ce426e648"
   },
   "outputs": [
    {
     "output_type": "stream",
     "name": "stdout",
     "text": [
      "Parametreli Ansatz:\n"
     ]
    },
    {
     "output_type": "display_data",
     "data": {
      "text/plain": [
       "<Figure size 370.906x200.667 with 1 Axes>"
      ],
      "image/png": "iVBORw0KGgoAAAANSUhEUgAAATEAAACuCAYAAABeIjpKAAAAOnRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjEwLjAsIGh0dHBzOi8vbWF0cGxvdGxpYi5vcmcvlHJYcgAAAAlwSFlzAAAPYQAAD2EBqD+naQAAFKtJREFUeJzt3XtYFOe9B/DvLvfLErmoC4JcFBRRkIgommg1SmO9EStVa03axmrSWNLWA2nOOT3GNEZJfJLGJFpMk8eTmBBy0CYKObE+0lSixEDQRAFv4Bouu5UVCHdwYc8fPuGR4xJY2N3Zd/b7+cdnZ96Z+eG8fJnLOzsKo9FoBBGRoJRSF0BENBIMMSISGkOMiITGECMioTHEiEhoDDEiEhpDjIiExhAjIqExxIhIaAwxIhIaQ4yIhMYQIyKhMcSISGgMMSISGkOMiITGECMioTHEiEhoDDEiEhpDjIiExhAjIqExxIhIaAwxIhIaQ4yIhMYQIyKhMcSISGgMMSISGkOMiITGECMioTHEiEhoDDEiEhpDjIiExhAjIqExxIhIaAwxIhIaQ4yIhMYQIyKhMcSISGjOUhdAdzMajTB0dEldhlmcPdygUCikLkM22AfM2K7Nt0iDMnR04d0JP5O6DLOsrzwIF093qcuQDfaBoePpJBEJjSFGREJjiBGR0BhiRCQ0hhgRCY0hRkRCY4gRkdA4TkxG1EkxePDw9n7TbrV1oLlKi8rck6h482MYe3olqo5swRH7AENMhqoOF6KmoBRQKOAxehQmps5H4vaf457IcShKz5K6PLIBR+oDDDEZunn+GqoOFfZ9vnTgGB4qfAVRP30Apbuy0XWzWcLqyBYcqQ/wmpgDMHR0ob70ChRKJXxCx0pdDklAzn2AIeYgVGG3O25XU6vElZBU5NoHeDopQ84ernDzU/VdD5n0cDL8p0WgvvQKmqu0UpdHNuBIfUD2IabX6/HCCy/g8OHDqKmpwejRo7Fq1So8//zzSEtLw1tvvYVXX30VW7ZskbpUi4nPWIv4jLX9pmnyP8eZp/8qUUXS677VgzNf1+Pmt51wd3VGzMRRCFF7S12W1ThSH5B1iJ07dw5LliyBTqeDl5cXpkyZgrq6OuzZsweVlZVoaGgAAEyfPl3aQi3s0jt/h+ZoEZQuzvCdPB5Tn0iBV6A/erq6+9rM3/c7QKnAPze/1DfNdZQ3Uj59GSXPvo2qw4WmVi0cbX079uZU4I1Dl/Cvmx190xUKYOn9IfjNT6cgeU6whBVahyP1AdleE9Pr9Vi+fDl0Oh22bt0KrVaL0tJS6HQ6ZGZmIj8/H8XFxVAoFIiNjZW6XItqrtJBW3getQVncWHvRzjxyC4ETJ+ApMzNfW2Knn4DY2ZOQnjK3L5ps5/fiBtfXBSm8w7mbIUe9675EM/tP9cvwADAaATyTlbjh48dQ8ZLX8BoNEpUpXU4Uh+QbYilpaWhpqYGW7Zswe7du6FSqfrmZWRkIC4uDgaDAWFhYfDx8ZGwUuurL7mEytyTCE+Zi9EJkwAA3U2tOL11H2bt2AiPsb4IXTob6jkxKHpKHmOIrn7TjOTHjkGn7xi07YsHzuOZvWdtUJV05NwHZBliFRUVyMnJQUBAAHbu3GmyzYwZMwAAcXFx/aZfu3YNK1asgEqlgq+vLx5++GHcvHnT6jVb21cv56LX0IP49DV902r/cQ6ao6cx77U0zN71K5zeug9djfK4c/X0K8XQN3YOuf2f9p+FprbFihVJT659QJYhlp2djd7eXqxfvx7e3qYv3np4eADoH2ItLS1YsGABampqkJ2djf3796OwsBDLli1Db6/Yj2q0aHS49tEpBM2LxZhZ0X3TS7a/DVW4GrUFZ1FzolTCCi2n7kYb/lZw3axljEYgK/eilSqyD3LtA7IMsYKCAgDAggULBmxTU1MDoH+I7d+/H7W1tfjwww+xbNkypKam4r333sPnn3+OI0eOWLdoG/j6lUPo7en/l9jQ0YXW6zfQWPGNhJVZ1nsfV6Gnx/xrXAc+umKFauyLHPuALO9OXr9++69waGioyfkGgwGnTp0C0D/E8vLycN9992H8+PF905KSkhAREYGjR48iJSVlWPUkJCRAp9MNub2LUYltSDR7O7qiMhwIXD3g/G+v1OLt4DUDzh+JqMgo3FLYx9Fqk+cSwH222cvp9B0YFzweCkj/czhaH1Cr1SgpKRnWsrIMsba2NgBAR4fpi7o5OTnQ6/VQqVQIDw/vm15eXo7U1NS72sfExKC8vHzY9eh0OtTW1g65vavCCRDsyZA6bR26jT1Sl3FbYAswzJfu1NXWAnYQYuwDQyfLEFOr1WhsbERpaSmSkpL6zdNqtUhPTwcAxMbG9ntPXmNjI0aNGnXX+vz8/HDp0qUR1WMOF6PSHn6PzBIUGGQ3R2It7r0YzuPNyt5mBI4LtHg9w+FofcDc35E7yTLEFi1ahIqKCmRmZmLx4sWIiooCABQXF2PDhg3Q6/UAbDfI1dzD5FvtnTZ95+AnP9424nVcvnLZbt47qa1vx/jk92Ew87rYHzbdjx1pv7NSVeZhHxg6WV7Yz8jIgL+/P6qrqxETE4Np06YhMjISiYmJiIiIwMKFCwHcPbzC19cXTU1Nd62voaEBfn5+tiidLCBwtCdWLQozaxmlUoFNqydZpyCyKlmGWHBwMAoLC7F06VK4u7tDo9HAz88PWVlZyM/Px+XLlwHcHWLR0dEmr32Vl5cjOjr6rulkv3Y9ORNj/IZ+VPDM4/EIDVIN3pDsjixDDLgdSHl5eWhpaUFLSwvOnDmDTZs2oa2tDRqNBkqlElOnTu23zLJly/DZZ5/1Db8AgDNnzqCyshLLly+39Y9AIxAerMLx/UsQNMZz0Lb/vjEO/7lpuvWLIquQbYgNpKysDEajEZGRkfD07N/BN23ahMDAQKxcuRJ5eXnIzc3FunXrkJiYiJUrV0pUMQ1XbJQfzuak4Nkn7sU4E2G26oEwFPx1CXakJfS7wUNicbgQO3/+PIC7TyUBwMfHBwUFBQgMDMTatWuxceNGzJkzB3l5eVAqHe6/ShbG+Hvgj5vjoflkDU6/swz+97gBANT+7jj08gNYkBgkcYU0UrK8O/l9vi/EAGDChAnIy8uzZUk24zslFHN2PwYXbw+01dTj5G9eldV3rX8fZ2clkuLGwt3NCQDg5OR4f5Tkuv8dbk8OFmJydt+ft6AoPQsfzvstrh0pwsz/eljqksiG5Lr/HS7ECgoKYDQasXTpUqlLsSm/qeEwtHeioUwDAKj84FOEJCdA6eJwB+MOSc77X/yfgIbEe/wY+E4ejxXHX+yb5uzhBk+1H1qrb0hYGdmCnPc/Q8yB1J+9guPrnuv7vPbCmxJWQ7Ym1/3vcKeTjqr1+r/gNS6g77OLtwecPd3RrmuQsCqyFTnvf4aYg2go06D3Vg8C591+n8Dkn/8Q1z46hd5bBokrI1uQ8/7n6aQDOfnEK7jvz0/Addev0KLR4eSWPVKXRDYk1/3PEHMgTRe/Qd6DT0ldBklErvufp5NEJDSGGBEJjSFGREJjiBGR0BhiRCQ03p20Q84eblhfeVDqMszi7OEmdQmywj5gxnYl2Sp9L4VCYTcv3SBpsA8MHU8niUhoDDEiEhpDjIiExhAjIqExxIhIaAwxIhIaQ4yIhMYQIyKhMcSISGgMMSISGkOMiITGECMioTHEiEhoDDEiEhpDjIiExhAjIqExxIhIaPxmVztkNBph6OiSugyzOHu4QaFQSF0GOSCGmB0ydHTh3Qk/k7oMs6yvPMivUyZJ8HSSiITGECMioTHEiEhoDDEiEhpDjIiExruTJGs6fTu+LNfjy/KbqKppQcO3t4euNLV0462/XcaMKf6YEuELFxf+PRcVQ4xkp7PLgNzjGuzNqUDRVzdMtmnrMODRbYUAAF8fV/wyJQqPr4nGhBAfW5ZKFqAwGo1GqYug/m61d3Kc2DAYjUYczLuKrbu/QH1j57DWsfbBCOz5w2yM9vOwcHVkLTwSkxF1UgwePLy937RbbR1ortKiMvckKt78GMaeXomqsy5tfTs2bf8MeSerR7Se9z+pwokzddj7H3OwOjncQtWRNTHEZKjqcCFqCkoBhQIeo0dhYup8JG7/Oe6JHIei9Cypy7O4iqomLN70v6i90W6R9dU3diL13wqw7bF4bHs8no9T2TmGmAzdPH8NVYcK+z5fOnAMDxW+gqifPoDSXdnoutksYXWWdVnzLX7wy3zcaBje6eP32f6XszAage1P3GvxdZPl8JaMAzB0dKG+9AoUSiV8QsdKXY7FtLbfwo+eOGaVAPvOs1ln8W7+Vautn0aOIeYgVGG3w6urqVXiSiznD38uRmV1i1nLFGevQPXxtSjOXjHkZX6zswjaesucqpLlOUSI6fV6ZGRkYOLEiXB3d0dISAiefPJJtLW14dFHH4VCocBrr70mdZkW4+zhCjc/Fdz8fTBq8njMen4j/KdFoL70CpqrtFKXZxH/LNHi9fcrzF5OHeCJ4LFeUAd4DnmZxuZuPPanU2Zvi2xD9tfEzp07hyVLlkCn08HLywtTpkxBXV0d9uzZg8rKSjQ0NAAApk+fLm2hFhSfsRbxGWv7TdPkf44zT/9Vooos79m/nLXp9o58+g3OXbyJ6ZP9bbpdGpysj8T0ej2WL18OnU6HrVu3QqvVorS0FDqdDpmZmcjPz0dxcTEUCgViY2OlLtdiLr3zdxz7yXYcX78DJX96B50NLfAK9EdPV3dfm/n7fof5Wb/vt5zrKG/85NwbiFh1v61LNsvFa00o+ML2R5T7PjD/yI+sT9YhlpaWhpqaGmzZsgW7d++GSqXqm5eRkYG4uDgYDAaEhYXBx0c+I7Wbq3TQFp5HbcFZXNj7EU48sgsB0ycgKXNzX5uip9/AmJmTEJ4yt2/a7Oc34sYXF1F1uNDUau3G/tyLkmz3YF4lWtq6B29INiXbEKuoqEBOTg4CAgKwc+dOk21mzJgBAIiLi+ub9l3oJSYmws1NHl+5XF9yCZW5JxGeMhejEyYBALqbWnF66z7M2rERHmN9Ebp0NtRzYlD0lP2PI/tHsTTX9do7DSi+oJdk2zQw2YZYdnY2ent7sX79enh7e5ts4+Fx+9GSO0Ps6tWrOHToENRqNWbOnGmTWm3hq5dz0WvoQXz6mr5ptf84B83R05j3Whpm7/oVTm/dh65G+7572dllwIWrjZJt/8tyhpi9kW2IFRQUAAAWLFgwYJuamhoA/UNs3rx50Gq1OHLkCBYtWmTdIm2oRaPDtY9OIWheLMbMiu6bXrL9bajC1agtOIuaE6USVjg0F642wmCQ7nHf0oqbkm2bTJPt3cnr168DAEJDQ03ONxgMOHXq9m3zO0NMqbR8rickJECn0w25vYtRiW1ItHgdX79yCOEpcxGfvgbHVj8D4PZA2NbrN9BY8c2I1h0VGYVbCus/l9npMhFQbTA5rzh7xaBDJ9QBHn3/Vh9fO2A7nb4dM9cduWv6344eR/B7prdPw6dWq1FSUjKsZWUbYm1tbQCAjo4Ok/NzcnKg1+uhUqkQHm7dB311Oh1qa2uH3N5V4QQMY2C9rqgMBwJXDzj/2yu1eDt4zYDzR6JOW4duY49V1t2PKgBQmZ713RiwoXB2Ug657Z26ugxm7UuyPtmGmFqtRmNjI0pLS5GUlNRvnlarRXp6OgAgNjbW6hfv1Wq1We1djEpAsC+bCAoMstGR2D0Y6IROpx98VL06wAPOTkoYenqh05v+A/d963Jzc0LAuHFDKZXMYO7vyJ1kG2KLFi1CRUUFMjMzsXjxYkRFRQEAiouLsWHDBuj1ty/Q2mKQq7mHySJ+n9jlK5dt8n1iF681IXrlIZPzTJ3+/X/Vx9cieKwXdPoOhCx+3+ztb1jzI7zxjOm73SQN2V7Yz8jIgL+/P6qrqxETE4Np06YhMjISiYmJiIiIwMKFCwH0vx7mqD758TaU/WXwALAHUaH3wNvTRbLtz5gSINm2yTTZhlhwcDAKCwuxdOlSuLu7Q6PRwM/PD1lZWcjPz8fly5cBMMREo1QqED/ZT7LtM8Tsj2xPJwEgOjoaeXl5d01vbW2FRqOBUqnE1KlTJaiMRmL5/PEoLP2XzbcbNMYT0yfx2Ul7I+sQG0hZWRmMRiOioqLg6Xn3Lfnc3FwAQHl5eb/PYWFhSEhIsF2hZNIvUqLwx9dL0dVtg7uhd9i8ejLfimSHHDLEzp8/D2DgU8nU1FSTnx955BEcOHDAqrXR4AJ83fGT5HC8k2e7Lyt0dlZg46oom22Pho4hZgJfAGX/tv/6Xhw+oUFbh8Em20t/JBZBY8wfV0bW55DHxoOFGNm/8GAVXvy95Z9qMGXKhFHY9ni8TbZF5nPII7Hvnqt0JBGr7kdIcgKaq7SYkDofdSe/RlF6Foy9go2qvcPm1MnIO/kNPi6sGfIy3w1iHcrAWABwd3PCfz83D26uTsOqkazPIY/EHI3HWF/M2vEovtzxLsJXzsWnm16Cd8gYTFzzA6lLGxGlUoEPXlyIufFDf0Zr5rojCFn8/pAGxrq6KHHopQeQEDN6JGWSlTHEHEDA9IloKNOgtfoGlC5O6O2+hepjxRiTOFnq0kbMy9MFn+z7IZLnWPZRIG9PF+S/nowf3R9i0fWS5THEHIDJU0YFZPM2cG9PF3z8ejJeTp8FD/eRn/Ytmh2EC4cfwqLZfEZSBAwxB6AvvQLfySHwDr59WqR0dUHY8jmo++dXEldmOU5OSvx2w1R89T8PIWVhKJRK8x/qjwhW4Y1t9+HvWQ8iNGiAr8ogu6MwcjyB3bHGA+AhyQmIf2od7pkYhHZdAzRHi/Dlcwcttv71lQdt8gD4UFXrWrE/9xIOn9Dg4rVv0dtrupv7j3LD/feqsXn1ZCTPGTes8CNpMcTskDW/xWL1F3tR8IsX0FCmseh67S3E7tTWfgvnLjWgsroZnd09cHFWwtfHFfGT/TE+0FsW71FwZA45xIIci5enC+bGjzXrLiaJgyHmYHITfy11CUQWxQv7RCQ0hhgRCY0hRkRC491JO2Q0GmHo6JK6DLM4e8jjbekkHoYYEQmNp5NEJDSGGBEJjSFGREJjiBGR0BhiRCQ0hhgRCY0hRkRCY4gRkdAYYkQkNIYYEQmNIUZEQmOIEZHQGGJEJDSGGBEJjSFGREJjiBGR0BhiRCQ0hhgRCY0hRkRCY4gRkdAYYkQkNIYYEQmNIUZEQmOIEZHQGGJEJLT/A4wYHhqhOZL+AAAAAElFTkSuQmCC\n"
     },
     "metadata": {}
    },
    {
     "output_type": "stream",
     "name": "stdout",
     "text": [
      "\n",
      "Örnek durum:\n"
     ]
    },
    {
     "output_type": "display_data",
     "data": {
      "text/plain": [
       "<IPython.core.display.Latex object>"
      ],
      "text/latex": "$$\\frac{9 \\cdot 2^{\\frac{121}{222}} \\cdot 3^{\\frac{5}{222}} \\cdot 5^{\\frac{175}{444}} \\cdot 7^{\\frac{68}{111}}}{140} |00\\rangle+0.5657583596 |01\\rangle+0.0560426911 |10\\rangle+0.5657583596 |11\\rangle$$"
     },
     "metadata": {}
    }
   ],
   "source": "from qiskit.circuit import Parameter\n\n# Basit 2-qubit variational ansatz\ntheta = Parameter('θ')\nphi = Parameter('φ')\n\nansatz = QuantumCircuit(2)\nansatz.ry(theta, 0)\nansatz.ry(phi, 1)\nansatz.cx(0, 1)\nansatz.ry(theta, 0)  # parametre paylaşımı da mümkün\n\nprint(\"Parametreli Ansatz:\")\ndisplay(ansatz.draw('mpl'))\n\n# Parametreleri bağla ve durum al\nbound = ansatz.assign_parameters({theta: np.pi/3, phi: np.pi/4})\nstate = Statevector.from_instruction(bound)\nprint(\"\\nÖrnek durum:\")\ndisplay(state.draw('latex'))"
  },
  {
   "cell_type": "markdown",
   "id": "33451a4d",
   "metadata": {
    "id": "33451a4d"
   },
   "source": "### Basit Bir Cost Function Örneği\n\nDiyelim ki $H = Z \\otimes Z$ operatörünün minimum özdeğerini arıyoruz (basit VQE)."
  },
  {
   "cell_type": "code",
   "execution_count": 9,
   "id": "1b9bc391",
   "metadata": {
    "colab": {
     "base_uri": "https://localhost:8080/"
    },
    "id": "1b9bc391",
    "executionInfo": {
     "status": "ok",
     "timestamp": 1786354883643,
     "user_tz": -180,
     "elapsed": 1172,
     "user": {
      "displayName": "Joseph Volkan ÖZCAN",
      "userId": "11389530967736397480"
     }
    },
    "outputId": "55444198-1ef0-4465-defd-ec45a5138391"
   },
   "outputs": [
    {
     "output_type": "stream",
     "name": "stdout",
     "text": [
      "En iyi parametreler: θ=0.000, φ=2.976\n",
      "Minimum beklenen değer ≈ -0.9864\n",
      "(Teorik minimum ZZ için -1'dir)\n"
     ]
    }
   ],
   "source": "from qiskit.quantum_info import SparsePauliOp\n\n# Hamiltonian: ZZ\nH = SparsePauliOp.from_list([(\"ZZ\", 1.0)])\n\ndef cost_function(params):\n    bound_circuit = ansatz.assign_parameters({theta: params[0], phi: params[1]})\n    state = Statevector.from_instruction(bound_circuit)\n    # Beklenen değer\n    return np.real(state.expectation_value(H))\n\n# Basit grid search (gerçekte klasik optimizer kullanılır: COBYLA, SPSA, Adam...)\nbest_cost = float('inf')\nbest_params = None\n\nfor t in np.linspace(0, 2*np.pi, 20):\n    for p in np.linspace(0, 2*np.pi, 20):\n        c = cost_function([t, p])\n        if c < best_cost:\n            best_cost = c\n            best_params = [t, p]\n\nprint(f\"En iyi parametreler: θ={best_params[0]:.3f}, φ={best_params[1]:.3f}\")\nprint(f\"Minimum beklenen değer ≈ {best_cost:.4f}\")\nprint(\"(Teorik minimum ZZ için -1'dir)\")"
  },
  {
   "cell_type": "markdown",
   "id": "2a3fab0f",
   "metadata": {
    "id": "2a3fab0f"
   },
   "source": "## 8. Kendi Quantum Algoritmanızı Tasarlama Çerçevesi\n\nAşağıdaki soruları sırayla cevaplayarak yeni bir algoritma tasarlayabilirsiniz:\n\n1. **Problem tanımı**  \n   - Ne girdi alıyorum, ne çıktı istiyorum?\n\n2. **Quantum avantaj kaynağı**  \n   - Süperpozisyon mu? Girişim mi? Dolanıklık mı? Quantum yürüyüş mü?\n\n3. **Encoding**  \n   - Veriyi qubit'lere nasıl kodlayacağım?\n\n4. **Unitary / Oracle**  \n   - Problemi çözen operatör nedir? Nasıl derlenecek?\n\n5. **Ölçüm stratejisi**  \n   - Hangi baz? Kaç shot? Post-processing?\n\n6. **Kaynak kısıtları**  \n   - NISQ mu, fault-tolerant mı? Derinlik limiti nedir?\n\n7. **Doğrulama**  \n   - Küçük örneklerde simülasyon + bilinen sonuçlarla karşılaştırma.\n\n### Pratik Tavsiyeler (QML Odaklı)\n- Önce **küçük qubit** sayılarıyla (2-6) prototip yapın.\n- Ansatz seçiminde **hardware-efficient** veya **problem-inspired** (QAOA, UCC) tercih edin.\n- Barren plateau riskini azaltmak için katman sayısını ve entanglement yapısını dikkatli seçin.\n- Veri re-uploading veya data encoding katmanlarını experiment edin.\n- Her zaman **klasik baseline** ile karşılaştırın."
  },
  {
   "cell_type": "markdown",
   "id": "1ae27880",
   "metadata": {
    "id": "1ae27880"
   },
   "source": "## 9. Hata, Gürültü ve NISQ Gerçekliği\n\nGerçek quantum bilgisayarlar **gürültülüdür**:\n- Dekoherans (T1, T2)\n- Gate hataları\n- Ölçüm hataları\n- Crosstalk\n\nBu yüzden:\n- Circuit depth mümkün olduğunca düşük tutulmalı.\n- Error mitigation teknikleri (ZNE, PEC, readout error mitigation) kullanılmalı.\n- Variational algoritmalar gürültüye kısmen dayanıklıdır çünkü optimizasyon gürültüyü \"öğrenebilir\".\n\nQiskit'te gürültülü simülasyon yapmak için `NoiseModel` kullanılabilir (ileri seviye)."
  },
  {
   "cell_type": "markdown",
   "id": "822199bf",
   "metadata": {
    "id": "822199bf"
   },
   "source": "## 10. Alıştırmalar\n\n1. **Deutsch-Jozsa**  \n   - `case='constant'` için orakeli değiştirip sonucu gözlemleyin.  \n   - n=4 için çalıştırın.\n\n2. **Grover**  \n   - n=4, iki işaretli durum için orakeli genişletin.  \n   - Optimal iterasyon sayısını deneysel bulun.\n\n3. **Variational**  \n   - Ansatz'a daha fazla katman ekleyin.  \n   - Farklı Hamiltonian'lar (XX+YY, XYZ...) deneyin.  \n   - `scipy.optimize` ile klasik optimizer bağlayın.\n\n4. **Kendi probleminiz**  \n   - Basit bir sınıflandırma veya optimizasyon problemini 2-4 qubit ile variational olarak çözmeye çalışın.\n\n---\n\n## İleri Kaynaklar\n\n- Qiskit Textbook: https://learning.quantum.ibm.com\n- Nielsen & Chuang – Quantum Computation and Quantum Information\n- Schuld & Petruccione – Machine Learning with Quantum Computers\n- PennyLane demoları (farklı framework denemek için)\n- arXiv: \"Quantum Algorithm Zoo\" ve \"Variational Quantum Algorithms\" survey'leri\n\n---\n\n**Bu defteri Colab'a yükleyip çalıştırabilirsiniz.**  \nHer hücreyi sırayla çalıştırın, parametrelerle oynayın ve kendi varyasyonlarınızı ekleyin.\n\nBaşarılar!  \n*Quantum Machine Learning yolculuğunuzda quantum algoritma tasarımı temel bir beceridir. Bol pratik yapın.*"
  }
 ],
 "metadata": {
  "colab": {
   "provenance": []
  },
  "kernelspec": {
   "display_name": "Python 3",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "name": "python",
   "version": "3.10.0"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 5
}