Myślę, że ta ahelwer
odpowiedź dotyczy niektórych sposobów myślenia o złożoności algorytmów. Jednak - biorąc pod uwagę, że dosłownie nie mamy „wyroczni” w prawdziwym świecie, które chcielibyśmy zapytać, możesz zastanawiać się, dlaczego martwilibyśmy się złożonością zapytań lub ideą wyroczni. Spróbuję rzucić na to pewną perspektywę, a w szczególności opisać, w jaki sposób możesz spróbować wymyślić „wyrocznię Deutsch-Josza” w sposób, który nie wydaje ci się, że oszukujesz.
(Jak Norbert Schuch
zaznaczono, w przypadku problemu Deutscha, który jest podstawowym przypadkiem Deutscha-Joszy, nie ma zbyt wiele miejsca na spostrzeżenia, ale spodziewam się, że twoje pytanie dotyczące wyroczni dotyczy również bardziej ogólnie. Właśnie o tym tutaj porozmawiam.)
Intuicja o wyroczniach
Koncepcja wyroczni jest sposobem na uproszczenie sposobu, w jaki mówimy o problemach obliczeniowych.
Pierwotnym zastosowaniem koncepcji wyroczni było rozważenie hipotetycznie, co moglibyśmy zrobić, gdybyśmy mogli rozwiązać trudne problemy, a nawet problemy niemożliwe, nie zobowiązując się do tego, w jaki sposób moglibyśmy to zrobić nawet w zasadzie. Ale obecnie w złożoności obliczeniowej - szczególnie w obliczeniach kwantowych, np. W przypadku Deutscha-Joszy, Bernsteina-Vazirani i innych problemów wyroczni - sytuacja jest inna: wyrocznia opisuje funkcję, która jest podstawą problemu. Fakt, że jest to „wyrocznia”, jest sposobem na ustrukturyzowanie, w jaki sposób opisujemy funkcję, która jest w centrum problemu: nie dlatego, że nigdy nie możemy zastanawiać się, w jaki sposób obliczana jest funkcja, ale że informacje te po prostu nie są dostarczane jako część problemu i że nie zajmujemy się czasem ani inną złożonością związaną z tą funkcją.
Przyjmując takie podejście, możemy faktycznie uzyskać odpowiedzi związane z bardzo trudnymi pytaniami w obliczeniach. Na przykład, abyście wiedzieli, że nie wiemy, jak to udowodnić albo P ≠ NP czy P = NP , ale które mogą pokazać, że istnieją wyrocznie takie, że możemy pokazać, że P A ≠ NP A . To, co robi tutaj wyrocznia A , nie pomaga komputerowi (a dokładniej deterministycznej maszynie Turinga lub niedeterministycznej maszynie Turinga) w rozwiązaniu problemu - reprezentuje problem, który komputer musi rozwiązać. Fakt, że możemy pokazać, że w niektórych przypadkach P ≠ NP , nie oznacza, że P jest naprawdę różni się od NP : To po prostu oznacza, że tylko przy użyciu nondeterminism jest naprawdę znaczny zasób dla modelu obliczeń mieć - to pozwala skutecznie rozwiązać pewne problemy, i nie ma sposobu, ogólnie, aby skutecznie symulować niedeterminizm na deterministycznym komputerze. Więc jeśli chcesz, aby rozwiązać problem związane z zawartością A oblicza, bezwzględnie wymaga trochę informacji o strukturze dowolnej funkcji, które mogłyby skutecznie obliczyć A .
Jest to jedna z głównych rzeczy, które dotyczą wyroczni: pozwalają mówić o sposobach, w których modele obliczeniowe mogą lub nie mogą rozwiązywać problemów, gdy masz ograniczone informacje na temat problemu.
Używanie algorytmów Oracle do rozwiązywania problemów niezwiązanych z Oracle
Algorytm Deutsch – Josza lub algorytm Bernsteina – Vazirani nie są w zasadzie algorytmami, które wykonuje się dla nich samych. (Cóż, niezupełnie - patrz następna sekcja.) Stanowią sposoby rozwiązania problemu . Jakie problemy rozwiązują? Pozwalają odkryć pewne cechy interesującej Cię funkcji - niezależnie od tego, czy jest ona stała / zrównoważona, czy jaki wektor jest powiązany z jakąś funkcją liniową o wartościach skalarnych na wektorach.
Na jakich funkcjach je wykonujesz? - Wykonujesz je na dowolnej funkcji, dla której jesteś zainteresowany odpowiedzią.
Opis tych algorytmów opartych na wyroczniach nie ma znaczenia. Problemy z wyrocznią w zasadzie pozwalają ci wiedzieć, że dzięki idealnemu komputerowi kwantowemu możesz rozwiązać problem, nawet jeśli wiesz bardzo mało o tej funkcji , pod warunkiem, że faktycznie możesz skutecznie ocenić funkcję w praktyce. Aby faktycznie ocenić taką funkcję, oczywiście potrzebujesz trochę opisu, jak to zrobić, a więc masz więcej informacji niż w ustawieniu Oracle; ale to nie przeszkadza w użyciu tego samego algorytmu.
Gdy masz więcej informacji niż w wyroczni, dzieje się tak , że nagle są inne sposoby rozwiązania problemu. W szczególności może okazać się możliwe skuteczne rozwiązanie problemu klasycznie . (Jest to ta sama obserwacja, co w przypadku P A ≠ NP A : dowodzi, że w NP występują problemy , które każdy skuteczny algorytm deterministyczny wymagałby co najmniej rzeczywistej informacji strukturalnej do rozwiązania - tak więc, gdy podasz opis o wydajnie obliczalnej funkcji zamiast „wyroczni”, możliwe, że problem się pojawiP. ) Oznacza to, że algorytm kwantowy może nie mieć takiej samej przewagi nad klasycznymi algorytmami przy rozwiązywaniu konkretnego problemu, który przedstawisz - i może być tak, że klasyczne podejście jest lepsze (szczególnie w przypadku urządzeń, które mamy obecnie).
W końcu to, że masz algorytm kwantowy do rozwiązania problemu, nie oznacza, że jest to najlepszy sposób na rozwiązanie problemu. Jest to z pewnością prawda w przypadku algorytmu Deutsch – Josza: nawet w ustawieniach Oracle użycie losowości jest prawie tak samo dobre, i jest o wiele lepsze, biorąc pod uwagę, że nie mamy jeszcze dużych niezawodnych komputerów kwantowych! Ale potem znowu...
„Wdrażanie” wyroczni
Cel implementacji algorytmu Deutsch – Josza jest taki sam jak implementacja „ Witaj, świecie! ” - nie po to, aby rozwiązać palący nierozwiązany problem, ale poćwiczyć używanie narzędzia, które, jak się spodziewasz, będzie przydatne do robienia innych rzeczy.
Aby ćwiczyć kodowanie, powinieneś czuć się całkowicie zrelaksowany i wygodny z pomysłem wdrożenia wyroczni oraz z pomysłem komputera oceniającego wyrocznię. Zasadniczo jest to punkt tego, co chcesz zrobić. Nawet jeśli używasz klasycznego emulatora, w którym klasyczny komputer faktycznie ocenia wszystkie gałęzie superpozycji i tak wyraźnie znajduje odpowiedź na problem, aby udawać, że jest to komputer kwantowy działający w nieco bardziej okrągły sposób, więc niech tak będzie - ćwiczysz, jak korzystać z narzędzia, które może być przydatne do innych rzeczy, a które pewnego dnia nie będzie działać na klasycznym komputerze.
Jak więc powinieneś wdrożyć swoją wyrocznię?
(i) Jeśli naprawdę jesteś przekonany, że dopiero zaczynasz ćwiczyć, nie musisz udawać, że robisz coś magicznego. Wymyśl jakikolwiek sposób na wdrożenie funkcji wyroczni, nawet jeśli zwykły obserwator jest rażąco oczywisty, czy wynik jest stały, czy zrównoważony. Po prostu próbujesz ćwiczyć realizowanie algorytmu - nie martw się, że ktoś oskarży cię o oszustwo, że udajesz, że leczysz raka, ale tak naprawdę bawisz się klockami Lego. Nigdy nie zostały udając leczyć raka, a są gry z Lego przez świadomego wyboru. Przyjmij to i po prostu zrób to.
f(x)=g(x,r)rg(x,r)xri gdzie nie jest oczywiste, jak rozwiązać to klasycznie, nie jest trywialne.
g(x,r)=x⋅rx,r∈{0,1}ng(x,r)f(x)f(x)r≠0
Można sobie wyobrazić, że powyższą konstrukcję można by nieco rozwinąć / zaciemnić, aby uzyskać konstrukcję, która gwarantuje ocenę funkcji stałej lub funkcji zrównoważonej, i gdzie która z tych dwóch wystąpi nie jest oczywista ani nawet trudna - ale ja mogę ” Pomyśl o tym, jak w tej chwili.
Pamiętaj, że tak naprawdę jest to bardzo trudne - ale jeśli potrafisz to zrobić, może być bardzo opłacalne: Bravyi, Gossett i Koening zrobili coś takiego w przypadku problemu Bernsteina-Vazirani i pozwoliło im to aby pokazać niewielki, ale bezwarunkowy rozdział złożoności kwantowej od klasycznej, co było jedną z bardziej interesujących rzeczy w złożoności kwantowej w ciągu ostatnich kilku lat.
TL; DR
Nie przejmuj się faktem, że „oceniasz” wyrocznię.
Jeśli się pocisz, martw się, że faktyczny opis funkcji może ułatwić rozwiązanie tego samego problemu bez komputera kwantowego.
Jeśli twoją motywacją jest tylko ćwiczenie z programowania kwantowego, nie przejmuj się tym. Oszczędzaj martwienia się o bardziej wartościowe problemy, takie jak globalne ocieplenie. W międzyczasie ciesz się grą z Legos, gdy budujesz coś więcej.