{
 "cells": [
  {
   "cell_type": "markdown",
   "id": "16fdec66",
   "metadata": {},
   "source": "# Quantum Algoritmalar — Qiskit Study Companion\n### Mental modeller · Algoritma kartları · Çalışan örnekler\n\n**Colab uyumlu notebook**  \nÖnceki PDF rehberin pratik karşılığı: her aile için kısa teori + Qiskit kodu.\n\n| Aile | Slogan |\n|------|--------|\n| Search & Amplitude | Doğru cevabı büyüt |\n| Hidden Structure | Gizli periyodu / simetriyi ortaya çıkar |\n| Phase & Simulation | Fazı oku, evrimi taklit et |\n| Linear & Data / ML | Çöz / temsil et / tune et |\n| Yapıtaşları | QFT ve diğerleri |\n\n> VQC = learn by tuning &nbsp;|&nbsp; QSVC = classify through a better similarity map"
  },
  {
   "cell_type": "markdown",
   "id": "085710f8",
   "metadata": {},
   "source": "## 0. Kurulum (Colab)\nRuntime → **Restart session** sonrası bu hücreyi bir kez çalıştırın."
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "2ed04e99",
   "metadata": {},
   "outputs": [],
   "source": "!pip install -q \"qiskit>=1.0\" \"qiskit-aer>=0.13\"\n!pip install -q matplotlib numpy\nprint(\"Kurulum tamam.\")"
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "6cdf4dc4",
   "metadata": {},
   "outputs": [],
   "source": "import numpy as np\nimport matplotlib.pyplot as plt\n\nfrom qiskit import QuantumCircuit, transpile\nfrom qiskit.circuit import Parameter, ParameterVector\nfrom qiskit.circuit.library import QFT, ZZFeatureMap\nfrom qiskit.quantum_info import SparsePauliOp, Statevector\nfrom qiskit_aer import AerSimulator\nfrom qiskit.visualization import plot_histogram\nfrom qiskit.transpiler import CouplingMap\n\nsimulator = AerSimulator()\nprint(\"Kütüphaneler hazır.\")"
  },
  {
   "cell_type": "markdown",
   "id": "2bc8dc86",
   "metadata": {},
   "source": "---\n# 1. Hidden Structure Ailesi\n## Slogan: *Gizli periyodu veya simetriyi ortaya çıkar*\n\nBu aile oracle’daki global özelliği **interferans** ile az sorguda bulur."
  },
  {
   "cell_type": "markdown",
   "id": "1de17d42",
   "metadata": {},
   "source": "## 1.1 Deutsch–Jozsa\n**Soru:** Fonksiyon sabit mi, dengeli mi?  \n**Klasik:** en kötü ~2ⁿ⁻¹+1 sorgu · **Kuantum:** 1 sorgu"
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "1a2a77a4",
   "metadata": {},
   "outputs": [],
   "source": "def deutsch_jozsa_oracle(n: int, kind: str = \"balanced\") -> QuantumCircuit:\n    \"\"\"kind: 'constant0' | 'constant1' | 'balanced'\"\"\"\n    oracle = QuantumCircuit(n + 1, name=\"Oracle\")\n    if kind == \"constant1\":\n        oracle.x(n)  # hedef kübiti çevir → f=1\n    elif kind == \"balanced\":\n        # basit dengeli: ilk girdi bitine göre\n        oracle.cx(0, n)\n    # constant0: hiçbir şey yapma (f=0)\n    return oracle\n\n\ndef deutsch_jozsa(n: int = 3, kind: str = \"balanced\") -> dict:\n    qc = QuantumCircuit(n + 1, n)\n    # hedef |1⟩, girdiler |+...+⟩\n    qc.x(n)\n    qc.h(range(n + 1))\n    qc.append(deutsch_jozsa_oracle(n, kind).to_gate(), range(n + 1))\n    qc.h(range(n))\n    qc.measure(range(n), range(n))\n    return qc\n\n\nfor kind in [\"constant0\", \"constant1\", \"balanced\"]:\n    qc = deutsch_jozsa(3, kind)\n    counts = simulator.run(transpile(qc, simulator), shots=1024).result().get_counts()\n    # Hepsi 0 → sabit; değilse dengeli\n    zeros = counts.get(\"0\" * 3, 0)\n    verdict = \"SABİT\" if zeros > 512 else \"DENGELİ\"\n    print(f\"{kind:12s} → {verdict:8s}  counts={dict(sorted(counts.items()))}\")"
  },
  {
   "cell_type": "markdown",
   "id": "18f0ebb3",
   "metadata": {},
   "source": "**Sunum cümlesi:** *“Tek sorguda global özelliği ayırt etmek — kuantum paralellik + interferansın en temiz örneği.”*"
  },
  {
   "cell_type": "markdown",
   "id": "b704f4d6",
   "metadata": {},
   "source": "## 1.2 Bernstein–Vazirani\n**Soru:** Gizli bit string `s` nedir? (`f(x) = s·x mod 2`)  \n**Klasik:** n sorgu · **Kuantum:** 1 sorgu"
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "8cd506bf",
   "metadata": {},
   "outputs": [],
   "source": "def bernstein_vazirani(secret: str) -> QuantumCircuit:\n    n = len(secret)\n    qc = QuantumCircuit(n + 1, n)\n    qc.x(n)\n    qc.h(range(n + 1))\n    # Oracle: s_i=1 olan kübitler için CNOT → hedef\n    for i, bit in enumerate(secret):\n        if bit == \"1\":\n            qc.cx(i, n)\n    qc.h(range(n))\n    qc.measure(range(n), range(n))\n    return qc\n\n\nsecret = \"1011\"\nqc = bernstein_vazirani(secret)\ncounts = simulator.run(transpile(qc, simulator), shots=1024).result().get_counts()\nprint(f\"Gizli s = {secret}\")\nprint(f\"Ölçüm  = {counts}\")\nprint(f\"En sık  = {max(counts, key=counts.get)}  (ters bit sırasına dikkat: Qiskit little-endian)\")\nqc.draw(\"mpl\", fold=-1)"
  },
  {
   "cell_type": "markdown",
   "id": "45b0d599",
   "metadata": {},
   "source": "## 1.3 Simon (basitleştirilmiş)\n**Soru:** `f(x)=f(y) ↔ y = x ⊕ s` gizli `s` nedir?  \nÜstel ayrım örneği; Shor’a giden yolda önemli adım."
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "eb49bb07",
   "metadata": {},
   "outputs": [],
   "source": "def simon_oracle(n: int, s: str) -> QuantumCircuit:\n    \"\"\"Basit Simon oracle: s gizli string (ör. '11').\"\"\"\n    oracle = QuantumCircuit(2 * n, name=\"SimonOracle\")\n    # 1) kopyala: x → ikinci register\n    for i in range(n):\n        oracle.cx(i, n + i)\n    # 2) s'nin 1 olduğu yerlerde ek XOR (basit implementasyon)\n    # Eğitimsel: s='11' için özel küçük oracle\n    if s == \"11\" and n == 2:\n        oracle.cx(0, 2)\n        oracle.cx(0, 3)\n    return oracle\n\n\ndef simon_circuit(n: int = 2, s: str = \"11\") -> QuantumCircuit:\n    qc = QuantumCircuit(2 * n, n)\n    qc.h(range(n))\n    qc.append(simon_oracle(n, s).to_gate(), range(2 * n))\n    qc.h(range(n))\n    qc.measure(range(n), range(n))\n    return qc\n\n\nqc = simon_circuit(2, \"11\")\ncounts = simulator.run(transpile(qc, simulator), shots=512).result().get_counts()\nprint(\"Simon ölçümleri (s'ye dik vektörler beklenir):\", counts)\nprint(\"Not: Birden fazla koşu + klasik lineer cebir ile s çözülür.\")\nqc.draw(\"mpl\", fold=-1)"
  },
  {
   "cell_type": "markdown",
   "id": "84318e21",
   "metadata": {},
   "source": "---\n# 2. Search & Amplitude Ailesi\n## Slogan: *Doğru cevabı büyüt, yanlışları bastır*"
  },
  {
   "cell_type": "markdown",
   "id": "9e3935de",
   "metadata": {},
   "source": "## 2.1 Grover Algoritması\n**Klasik:** O(N) · **Kuantum:** O(√N)  \nAşağıda 2 kübit (N=4) örneği: işaretli durum `|11⟩`."
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "cac76f33",
   "metadata": {},
   "outputs": [],
   "source": "def grover_2qubit(marked: str = \"11\", iterations: int = 1) -> QuantumCircuit:\n    n = 2\n    qc = QuantumCircuit(n, n)\n    # Başlangıç: eşit süperpozisyon\n    qc.h(range(n))\n\n    for _ in range(iterations):\n        # --- Oracle: marked durumu işaretle (faz çevir) ---\n        if marked == \"11\":\n            qc.cz(0, 1)\n        elif marked == \"10\":\n            qc.x(1); qc.cz(0, 1); qc.x(1)\n        elif marked == \"01\":\n            qc.x(0); qc.cz(0, 1); qc.x(0)\n        else:  # 00\n            qc.x([0, 1]); qc.cz(0, 1); qc.x([0, 1])\n\n        # --- Diffusion (amplitüdleri ortalama etrafında yansıt) ---\n        qc.h(range(n))\n        qc.x(range(n))\n        qc.cz(0, 1)\n        qc.x(range(n))\n        qc.h(range(n))\n\n    qc.measure(range(n), range(n))\n    return qc\n\n\n# Optimal iterasyon ~ π/4 * √N ≈ 1 (N=4)\nqc = grover_2qubit(\"11\", iterations=1)\ncounts = simulator.run(transpile(qc, simulator), shots=1024).result().get_counts()\nprint(\"Grover sonuçları (hedef 11):\", dict(sorted(counts.items(), key=lambda x: -x[1])))\nplot_histogram(counts, title=\"Grover — marked=11\")"
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "8734325b",
   "metadata": {},
   "outputs": [],
   "source": "# İterasyon sayısı etkisi\nfig, axes = plt.subplots(1, 3, figsize=(12, 3))\nfor i, ax in enumerate(axes):\n    qc = grover_2qubit(\"11\", iterations=i)\n    counts = simulator.run(transpile(qc, simulator), shots=1024).result().get_counts()\n    ax.bar(counts.keys(), counts.values(), color=\"#2563eb\")\n    ax.set_title(f\"iter={i}\")\n    ax.set_ylim(0, 1100)\nplt.suptitle(\"Grover: iterasyon arttıkça |11⟩ baskınlaşır (sonra bozulabilir)\")\nplt.tight_layout()\nplt.show()"
  },
  {
   "cell_type": "markdown",
   "id": "72a6ad09",
   "metadata": {},
   "source": "**Sunum cümlesi:** *“Oracle işaretler, diffusion büyütür — √N adımda iğneyi bulursun.”*"
  },
  {
   "cell_type": "markdown",
   "id": "29fe244f",
   "metadata": {},
   "source": "---\n# 3. Yapıtaşı: Quantum Fourier Transform (QFT)\nShor ve QPE’nin kalbi. Aşağıda 3-kübit QFT."
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "f8e24916",
   "metadata": {},
   "outputs": [],
   "source": "def qft_circuit(n: int) -> QuantumCircuit:\n    qc = QuantumCircuit(n, name=\"QFT\")\n    for j in range(n):\n        qc.h(j)\n        for k in range(j + 1, n):\n            angle = np.pi / 2 ** (k - j)\n            qc.cp(angle, k, j)\n    # Qiskit little-endian için sıkça swap yapılır\n    for i in range(n // 2):\n        qc.swap(i, n - 1 - i)\n    return qc\n\n\nqft3 = qft_circuit(3)\nprint(qft3.draw(fold=-1))\n\n# Hazır kütüphane versiyonu\nqft_lib = QFT(3, do_swaps=True)\nprint(\"\\nKütüphane QFT derinlik:\", qft_lib.decompose().depth())"
  },
  {
   "cell_type": "markdown",
   "id": "6419b1b1",
   "metadata": {},
   "source": "---\n# 4. Phase Estimation (basit demo)\n## Slogan ailesi: *Fazı oku*\n\nAşağıda bilinen bir fazı (T kapısı: φ=1/8) tahmin ediyoruz."
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "ccfd9463",
   "metadata": {},
   "outputs": [],
   "source": "def simple_qpe_t_gate(counting_qubits: int = 3) -> QuantumCircuit:\n    \"\"\"T kapısı özfazı: T|1⟩ = e^{iπ/4}|1⟩ → φ = 1/8\"\"\"\n    n = counting_qubits\n    qc = QuantumCircuit(n + 1, n)\n    # Eigenstate |1⟩\n    qc.x(n)\n    # Counting register süperpozisyon\n    qc.h(range(n))\n    # Controlled-T^{2^k}\n    for k in range(n):\n        # T = P(π/4); T^{2^k} = P(π/4 * 2^k)\n        angle = (np.pi / 4) * (2 ** k)\n        qc.cp(angle, k, n)\n    # Ters QFT on counting register\n    qc.append(QFT(n, inverse=True, do_swaps=True).to_gate(), range(n))\n    qc.measure(range(n), range(n))\n    return qc\n\n\nqc = simple_qpe_t_gate(3)\ncounts = simulator.run(transpile(qc, simulator), shots=2048).result().get_counts()\n# En olası bitstring → faz tahmini\ntop = max(counts, key=counts.get)\nphase_est = int(top, 2) / 2 ** 3\nprint(f\"En sık ölçüm: {top}  →  φ ≈ {phase_est:.4f}  (beklenen 0.125)\")\nplot_histogram(counts, title=\"QPE — T kapısı fazı\")"
  },
  {
   "cell_type": "markdown",
   "id": "54d2365e",
   "metadata": {},
   "source": "**Sunum cümlesi:** *“QPE birçok algoritmanın omurgasıdır: Shor, HHL, kimya simülasyonu.”*"
  },
  {
   "cell_type": "markdown",
   "id": "f00a5562",
   "metadata": {},
   "source": "---\n# 5. Variational Aile — VQE & QAOA\n## Slogan: *Parametreli devreyi tune ederek maliyeti düşür*\nNISQ döneminde en gerçekçi aile."
  },
  {
   "cell_type": "markdown",
   "id": "7f1e1572",
   "metadata": {},
   "source": "## 5.1 Mini VQE — tek kübit Hamiltonian\nH = Z → taban durumu |1⟩, enerji -1."
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "9b0538ea",
   "metadata": {},
   "outputs": [],
   "source": "# Mini VQE — manuel döngü (H = Z, taban enerjisi -1)\n# Ansatz: RY(θ)  →  ⟨Z⟩ = cos(θ)  →  minimum θ=π\n\ntheta = Parameter(\"θ\")\nansatz = QuantumCircuit(1)\nansatz.ry(theta, 0)\n\ndef energy(theta_val: float, shots: int = 2000) -> float:\n    qc = ansatz.assign_parameters({theta: theta_val})\n    qc_m = qc.measure_all(inplace=False)\n    counts = simulator.run(transpile(qc_m, simulator), shots=shots).result().get_counts()\n    # map bitstrings after measure_all (key like '0' / '1')\n    p0 = 0.0\n    p1 = 0.0\n    for k, v in counts.items():\n        bit = k[-1]  # last measured bit\n        if bit == \"0\":\n            p0 += v\n        else:\n            p1 += v\n    p0, p1 = p0 / shots, p1 / shots\n    return p0 - p1  # ⟨Z⟩\n\n# Kaba grid search + lokal iyileştirme (eğitimsel)\ngrid = np.linspace(0, 2 * np.pi, 24)\nenergies = [energy(t) for t in grid]\nbest_idx = int(np.argmin(energies))\nbest_theta, best_E = grid[best_idx], energies[best_idx]\n\nprint(f\"VQE-benzeri sonuç: θ ≈ {best_theta:.3f},  E ≈ {best_E:.4f}  (ideal θ=π, E=-1)\")\nplt.figure(figsize=(7, 3.5))\nplt.plot(grid, energies, \"o-\", color=\"#0d9488\")\nplt.axhline(-1, color=\"gray\", ls=\"--\", label=\"ideal -1\")\nplt.axvline(np.pi, color=\"gray\", ls=\":\", label=\"θ=π\")\nplt.xlabel(\"θ\"); plt.ylabel(\"⟨Z⟩\"); plt.title(\"Mini VQE: enerji vs parametre\")\nplt.legend(); plt.grid(True, alpha=0.3); plt.show()"
  },
  {
   "cell_type": "markdown",
   "id": "ef8c83f9",
   "metadata": {},
   "source": "## 5.2 Mini QAOA — 2 düğümlü MaxCut\nGraf: 0—1  →  optimal cut değeri 1."
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "5ed007b1",
   "metadata": {},
   "outputs": [],
   "source": "# Mini QAOA benzeri — 2 düğümlü MaxCut için tek katmanlı p=1 devresi\n# Cost: ZZ, Mixer: X\n\ngamma, beta = Parameter(\"γ\"), Parameter(\"β\")\nqaoa_qc = QuantumCircuit(2, 2)\nqaoa_qc.h([0, 1])                 # |++⟩\nqaoa_qc.cx(0, 1); qaoa_qc.rz(2 * gamma, 1); qaoa_qc.cx(0, 1)  # e^{-i γ ZZ/2} yapısı\nqaoa_qc.rx(2 * beta, [0, 1])      # mixer\nqaoa_qc.measure([0, 1], [0, 1])\n\n# Birkaç parametre dene\ncandidates = [(0.8, 0.4), (1.2, 0.6), (0.5, 0.9)]\nprint(\"QAOA p=1 örnek ölçümleri (MaxCut 0—1):\")\nfor g, b in candidates:\n    bound = qaoa_qc.assign_parameters({gamma: g, beta: b})\n    counts = simulator.run(transpile(bound, simulator), shots=1024).result().get_counts()\n    # 01 ve 10 iyi cut\n    good = counts.get(\"01\", 0) + counts.get(\"10\", 0)\n    print(f\"  γ={g:.1f}, β={b:.1f}  →  iyi cut oranı ≈ {good/1024:.2f}  {dict(sorted(counts.items()))}\")\n\nprint(\"\\n→ Gerçek QAOA’da classical optimizer (γ,β) çiftini tune eder.\")\nqaoa_qc.draw(\"mpl\", fold=-1)"
  },
  {
   "cell_type": "markdown",
   "id": "065ed72a",
   "metadata": {},
   "source": "**Sunum cümlesi:** *“VQE kimya enerjisi, QAOA kombinatoryal optimizasyon — ikisi de learn by tuning ailesi.”*"
  },
  {
   "cell_type": "markdown",
   "id": "20159bfc",
   "metadata": {},
   "source": "---\n# 6. Quantum ML — VQC & Kernel fikri\n## VQC = learn by tuning · QSVC = better similarity map"
  },
  {
   "cell_type": "markdown",
   "id": "cb18dd2c",
   "metadata": {},
   "source": "## 6.1 Basit Quantum Kernel (2 özellik, 2 nokta)\nKernel ≈ |⟨φ(x)|φ(y)⟩|²  — feature map overlap."
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "db349466",
   "metadata": {},
   "outputs": [],
   "source": "def zz_kernel_value(x1, x2, reps: int = 1) -> float:\n    \"\"\"İki veri noktası arasında ZZ feature map kernel değeri.\"\"\"\n    fm = ZZFeatureMap(feature_dimension=2, reps=reps)\n    qc = QuantumCircuit(2)\n    qc.compose(fm.assign_parameters(x1), inplace=True)\n    qc.compose(fm.assign_parameters(x2).inverse(), inplace=True)\n    # |⟨φ(x1)|φ(x2)⟩|² = |amp of |00⟩|² after U(x1)† U(x2) on |00⟩\n    # Daha doğru: bind x1, sonra adjoint(x2)\n    sv = Statevector.from_instruction(\n        fm.assign_parameters(x1).compose(fm.assign_parameters(x2).inverse())\n    )\n    # overlap with |00...⟩\n    return float(np.abs(sv.data[0]) ** 2)\n\n\nx_a = [0.2, 0.5]\nx_b = [0.3, 0.4]\nx_c = [2.5, 2.8]\n\nprint(f\"K(a,b) ≈ {zz_kernel_value(x_a, x_b):.4f}  (yakın noktalar → yüksek similarity)\")\nprint(f\"K(a,c) ≈ {zz_kernel_value(x_a, x_c):.4f}  (uzak noktalar → düşük)\")\nprint(\"\\n→ Bu matris classical SVM’e verilir = QSVC mantığı.\")"
  },
  {
   "cell_type": "markdown",
   "id": "0b5dad14",
   "metadata": {},
   "source": "## 6.2 Mini VQC fikri (parametreli devre + ölçüm)\nGerçek eğitim döngüsü için önceki Noise Resilience notebook’una bakın (SPSA, COBYLA, QEM)."
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "66584d90",
   "metadata": {},
   "outputs": [],
   "source": "# Tek örnek: 2 özellik → RY/RZ ansatz → <Z> skoru\ndef vqc_score(x, params):\n    \"\"\"x: 2D özellik, params: [θ0, θ1, θ2]\"\"\"\n    qc = QuantumCircuit(2)\n    # Basit angle encoding\n    qc.ry(x[0], 0)\n    qc.ry(x[1], 1)\n    # Trainable layer\n    qc.ry(params[0], 0)\n    qc.ry(params[1], 1)\n    qc.cx(0, 1)\n    qc.ry(params[2], 0)\n    sv = Statevector.from_instruction(qc)\n    # <Z on qubit 0>\n    z0 = SparsePauliOp.from_list([(\"ZI\", 1.0)])\n    return float(sv.expectation_value(z0).real)\n\n\nparams0 = np.array([0.3, 0.5, 0.1])\nprint(\"Örnek skor (x=[0.5,0.2]):\", round(vqc_score([0.5, 0.2], params0), 4))\nprint(\"→ Loss = f(skor, etiket); optimizer params’ı tune eder = VQC.\")"
  },
  {
   "cell_type": "markdown",
   "id": "7c2806a3",
   "metadata": {},
   "source": "---\n# 7. Hardware-Efficient Ansatz & SWAP maliyeti\n(Önceki noise notebook ile uyumlu mini demo)"
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "a002f6d7",
   "metadata": {},
   "outputs": [],
   "source": "from qiskit.transpiler import CouplingMap\nfrom qiskit.circuit import ParameterVector\n\ncoupling = CouplingMap([[0, 1], [1, 0], [1, 2], [2, 1], [1, 3], [3, 1]])\n\ndef naive_ansatz(n=4):\n    p = ParameterVector(\"θ\", n * 2)\n    qc = QuantumCircuit(n)\n    for i in range(n):\n        qc.ry(p[i], i)\n    for i in range(n):\n        for j in range(i + 1, n):\n            qc.cx(i, j)  # fully connected — pahalı\n    for i in range(n):\n        qc.ry(p[n + i], i)\n    return qc\n\ndef hea_ansatz(n=4):\n    p = ParameterVector(\"θ\", n * 2)\n    qc = QuantumCircuit(n)\n    for i in range(n):\n        qc.ry(p[i], i)\n    for i in range(n - 1):\n        qc.cx(i, i + 1)  # sadece komşu\n    for i in range(n):\n        qc.ry(p[n + i], i)\n    return qc\n\nbasis = [\"rz\", \"sx\", \"x\", \"cx\"]\nnaive_t = transpile(naive_ansatz(), coupling_map=coupling, basis_gates=basis, optimization_level=1)\nhea_t = transpile(hea_ansatz(), coupling_map=coupling, basis_gates=basis, optimization_level=1)\n\nprint(f\"Naif  → CNOT: {naive_t.count_ops().get('cx', 0):3d}  derinlik: {naive_t.depth()}\")\nprint(f\"HEA   → CNOT: {hea_t.count_ops().get('cx', 0):3d}  derinlik: {hea_t.depth()}\")\nprint(\"→ HEA, cihaz topolojisine uyduğu için SWAP / ekstra CNOT maliyetini düşürür.\")"
  },
  {
   "cell_type": "markdown",
   "id": "22096e61",
   "metadata": {},
   "source": "---\n# 8. Karar Rehberi (kod sonrası hatırlatma)\n\n| İhtiyacınız | Önce bakın | Bu notebook’ta |\n|-------------|------------|----------------|\n| Global özellik / gizli string | Deutsch–Jozsa, BV, Simon | Bölüm 1 |\n| Yapısal olmayan arama | Grover | Bölüm 2 |\n| Faz / özdeğer | QPE | Bölüm 4 |\n| Enerji / molekül | VQE | Bölüm 5.1 |\n| Kombinatoryal optimizasyon | QAOA | Bölüm 5.2 |\n| Similarity / segment | Quantum Kernel → QSVC | Bölüm 6.1 |\n| Decision logic öğren | VQC | Bölüm 6.2 + Noise notebook |\n| Cihaza uygun ansatz | HEA | Bölüm 7 |\n\n### Takeaway sloganları\n- **Grover** = İşaretli olanı daha az denemeyle bulabilir miyiz?\n- **VQE / QAOA** = Enerjiyi veya maliyeti tune ederek yaklaşabilir miyiz?\n- **VQC** = Bu davranışı öğrenebilir miyiz?\n- **QSVC** = Bu ürünleri daha anlamlı bir haritada ayırabilir miyiz?\n- **QPE / Shor** = Fazı / periyodu okuyabilir miyiz? (uzun vadeli FT)\n\n---\n*QML Study Companion · PDF rehber + bu notebook + Noise Resilience notebook birlikte kullanın.*"
  }
 ],
 "metadata": {
  "colab": {
   "provenance": [],
   "toc_visible": true
  },
  "kernelspec": {
   "display_name": "Python 3",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "name": "python",
   "version": "3.10.0"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 5
}