Bence Wikipedia makaleleri
, ve vs. oldukça iyi. Hala burada diyeceğim şey: Bölüm I , Bölüm IIPNPPNP
[İsterseniz atlayabileceğiniz bazı teknik ayrıntıları tartışmak için parantez içindeki açıklamaları kullanacağım.]
Bölüm I
Karar Sorunları
Çeşitli hesaplama problemleri vardır. Bununla birlikte, hesaplamalı karmaşıklık teorisi dersine giriş olarak karar sorununa odaklanmak daha kolaydır , yani cevabın YES veya NO olduğu problemler. Başka hesaplama problemleri de vardır, ancak çoğu zaman onlar hakkındaki sorular karar problemleriyle ilgili benzer sorulara indirgenebilir. Üstelik karar sorunları çok basit. Bu nedenle, hesaplamalı karmaşıklık teorisi dersine giriş olarak, dikkatimizi karar problemlerinin incelenmesine odaklıyoruz.
Bir karar problemini, YES'e cevap veren girdiler alt kümesi ile belirleyebiliriz. Bu notasyonu kolaylaştırır ve bize yazmak için izin veren
yerine ve
yerine .x∈QQ(x)=YESx∉QQ(x)=NO
Başka bir bakış açısı, bir kümedeki üyelik sorgularından bahsettiğimizdir . İşte bir örnek:
Karar Sorunu:
Giriş: Doğal sayı ,
Soru: çift sayı mı?x
x
Üyelik Sorunu:
Girdi: Bir doğal sayı ,
Soru: de ?x
xEven={0,2,4,6,⋯}
Girdiyi kabul eden bir girdideki YES cevabını ve girişi reddeden bir girdideki NO cevabını ifade ederiz .
Karar problemleri için algoritmalara bakacağız ve bu algoritmaların hesaplanabilir kaynakları kullanımında ne kadar etkili olduğunu tartışacağız . Bir algoritma ve hesaplamalı kaynaklar ile ne demek istediğimizi resmen tanımlamak yerine C gibi bir dilde programlama konusundaki sezginize güveneceğim.
[Notlar: 1. Her şeyi resmi ve kesin olarak yapmak isteseydik, bir algoritma ile ne demek istediğimizi tam olarak tanımlamak için standart Turing makine modeli gibi bir hesaplama modelini düzeltmemiz gerekir . 2. Modelin doğrudan kullanamayacağı nesneler üzerindeki hesaplama hakkında konuşmak istiyorsak, bunları makine modelinin kullanabileceği nesneler olarak kodlamamız gerekir, örneğin Turing makineleri kullanıyorsak, doğal sayılar ve grafikler gibi nesneleri kodlamamız gerekir İkili dizeler olarak.
P = Çözüm Bulma İçin Verimli Algoritmalar ile İlgili Sorunlar
Verimli algoritmaların , en fazla sayıda polinom hesaplama kaynağı kullanan algoritmalar anlamına geldiğini varsayalım . Önemsediğimiz ana kaynak , algoritmaların giriş büyüklüğüne göre en kötü çalışma süresi , yani bir algoritmanın büyüklüğündeki bir girdide aldığı temel adımların sayısıdır . Bir giriş büyüklüğü olan o alırsa mağaza bilgisayar belleğinin -bits biz yazmak bu durumda, . Dolayısıyla , verimli algoritmalar ile polinomun en kötü durumlu çalışma süresine sahip olan algoritmaları kastediyoruz .nxnnx|x|=n
Varsayım polinom zamanlı algoritmalar verimli algoritmaların sezgisel kavramını yakalamak olarak bilinir Cobham'ın tezi . Bu noktada in etkin bir şekilde çözülebilen problemler için doğru model olup olmadığını ve in pratikte ve ilgili konularda verimli bir şekilde hesaplanabilecekleri yakalayıp yakalamadığını tartışmayacağım. Şimdilik bu varsayımı yapmak için iyi nedenler var, bu yüzden amacımızın böyle olduğunu varsayıyoruz. Eğer Cobham'ın tezini kabul etmezseniz, aşağıda yazdıklarımı yanlış yapmaz, kaybedeceğimiz tek şey sezgidir.PPpratikte verimli hesaplama hakkında. Karmaşıklık teorisi hakkında bilgi edinmeye başlayan biri için yararlı bir varsayım olduğunu düşünüyorum.
P verimli bir şekilde çözülebilen
karar problemleri , yani polinom-zaman algoritmaları olan karar problemleri sınıfıdır .
Daha resmi olarak, kararın olduğunu iffQP
etkili bir algoritma var olan şekilde,
tüm girişler için ,A
x
- Eğer sonra , Q(x)=YESA(x)=YES
- Eğer sonra .Q(x)=NOA(x)=NO
Basitçe yazabilirimA(x)=Q(x) yazabilirim, ancak bu şekilde yazarım, böyleceNP tanımını karşılaştırabiliriz.
NP =Kanıtları / Sertifikaları / TanıklarıDoğrulamakiçin Verimli Algoritmalarla İlgili Sorunlar
Bazen bir karar sorununun cevabını bulmanın etkili bir yolunu bilmiyoruz, ancak birisi bize cevabı söyler ve bize bir kanıt verirse, geçerli bir kanıt olup olmadığını görmek için kanıtı kontrol ederek yanıtın doğru olduğunu
etkili bir şekilde doğrulayabiliriz . . Karmaşıklık sınıfı N P'nin ardındaki fikir budur .NP
Eğer kanıt çok uzunsa, gerçekten faydalı olmazsa, geçerli olup olmadığını kontrol etmek için sadece prova okumasını okumak çok uzun sürebilir. Doğrulama için gereken sürenin, verilen kanıtın boyutunda değil, orijinal girdi boyutunda makul olmasını istiyoruz! Bu, gerçekten istediğimiz şey isteğe bağlı uzun ispatlar değil, kısa ispatlar demektir. Doğrulayıcının çalışma süresi orijinal girişin boyutunda polinom ise, ispatın yalnızca polinom kısmını okuyabilir. Yani kısaca , polinom büyüklüğünü kastediyoruz .
Ne zaman "kanıt" kelimesini ne zaman kullanırsam "kısa kanıt" demek istiyorum.
Verimli bir şekilde nasıl çözeceğimizi bilmediğimiz ancak ispatları etkin bir şekilde doğrulayabildiğimiz bir problemin örneği :
Bölüm
Girdisi: sonlu bir S doğal sayı kümesi ,
Soru: SA ve B
( A∪B=S ve A∩B=∅ ) iki grubuna bölünmesi mümkün olur
, böylece A sayıların toplamı eşit olur B sayının toplamı ( ∑x∈Ax=∑x∈Bx )?
Size S verir ve size toplamları eşit olacak şekilde iki gruba ayırabilir miyiz diye sorarsam, çözmek için etkili bir algoritma bilmiyorsunuzdur. Muhtemelen, toplamların eşit olduğu bir bölüm bulana veya tüm olası bölümleri deneyene ve hiçbiri çalışmamış olana dek sayıları iki kümeye ayırmanın olası tüm yollarını deneyeceksiniz. Bunlardan herhangi biri işe yaradıysa, YES, aksi takdirde HAYIR diyeceksiniz.
Ancak katlanarak birçok olası bölüm var, bu yüzden çok zaman alacaktır. Ancak size iki A ve B verirseniz, toplamların eşit olup olmadığını ve A ve BS bir bölümü olup olmadığını kolayca kontrol edebilirsiniz . Toplamları verimli bir şekilde hesaplayabileceğimizi unutmayın.
Burada size verdiğim A ve B çifti, YES cevabı için bir kanıt. Talebimi verimli bir şekilde kanıtlarıma bakarak ve geçerli bir kanıt olup olmadığını kontrol ederek doğrulayabilirsiniz . Cevabınız EVET ise, geçerli bir kanıt var ve ben size verebilirim ve siz de bunu doğrulayabilirsiniz. Cevabınız HAYIR ise geçerli bir kanıt yoktur. Öyleyse size verdiğim her şeyi kontrol edip geçerli bir kanıt olmadığını görebilirsiniz. Cevabınız EVET olduğuna dair geçersiz bir kanıt ile sizi kandıramam. Eğer kanıt çok büyükse, bunu doğrulamak çok zaman alacaktır, bunun olmasını istemeyiz, bu yüzden sadece etkili kanıtları, yani polinom büyüklüğüne sahip kanıtları önemsiyoruz .
Bazen insanlar "ispat" yerine " sertifika " veya " tanık " kullanırlar.
Not Size verilen x girişinin cevabı hakkında yeterli bilgi veriyorum,
böylece cevabı verimli bir şekilde bulabilir ve doğrulayabilirsiniz. Örneğin, bölüm örneğimizde size cevabı söylemiyorum, sadece size bir bölüm veriyorum ve bunun geçerli olup olmadığını kontrol edebilirsiniz. Cevabı kendiniz doğrulamanız gerektiğine dikkat edin, söylediklerim konusunda bana güvenemezsiniz. Üstelik yalnızca doğruluğunu kontrol edebilirsiniz benim kanıtı. Kanıtım geçerliyse, cevabın EVET olduğu anlamına gelir. Benim kanıtı geçersiz Ama eğer yok değil cevabı HAYIR demek. Bir kanıtın geçersiz olduğunu, geçerli bir kanıt bulunmadığını gördünüz. EVET için kanıtlardan bahsediyoruz. NO için ispatlardan bahsetmiyoruz.
Bir örneğe bakalım:
A={2,4} ve B={1,5} , S={1,2,4,5} in eşit toplamlarla iki kümeye bölünebileceğinin bir kanıtıdır
. Sadece A sayıları ve B sayıları toplamamız ve sonuçların eşit olup olmadığına bakmamız ve A , BS bölümü olup olmadığını kontrol etmemiz gerekir .
Size A={2,5} ve B={1,4} verdiysem , kanıtımın geçersiz olup olmadığını kontrol edecek ve göreceksiniz. Cevabın HAYIR olduğu anlamına gelmez, sadece bu özel kanıtın geçersiz olduğu anlamına gelir. Buradaki göreviniz cevabı bulmak değil , yalnızca verdiğiniz kanıtın geçerli olup olmadığını kontrol etmek.
Bir sınavda bir soru çözen bir öğrenci ve cevabın doğru olup olmadığını kontrol eden bir profesör gibidir. :) (maalesef öğrenciler cevaplarının doğruluğunu doğrulamak için yeterli bilgi vermezler ve profesörler kısmi cevaplarının geri kalanını tahmin etmeli ve kısmi cevaplar için öğrencilere ne kadar puan vermeleri gerektiğine karar vermelidirler, aslında oldukça zor görev).
Şaşırtıcı olan, aynı durumun çözmek istediğimiz diğer birçok doğal sorun için
de geçerli olmasıdır: verilen kısa bir kanıtın geçerli olup olmadığını etkin bir şekilde doğrulayabiliriz , ancak cevabı bulmanın etkili bir yolunu bilmiyoruz . Bu karmaşıklık sınıf niçin motivasyon olduğunu NP ise son derece ilginç
(bu tanımlamadan için orjinal hareket olmamasına rağmen). Ne yaparsanız yapın (sadece CS'de değil, matematikte, biyolojide, fizikte, kimyada, ekonomide, yönetimde, sosyolojide, işletmede ...) bu sınıfa giren bilgisayar problemleriyle karşılaşırsınız. İçinde haline gelmek kaç problem bir fikir edinmek için NP check-out
NP optimizasyon problemlerinin bir özeti . Gerçekten de, NP olmayan doğal problemleri bulmakta zorlanacaksınız . Bu sadece şaşırtıcı.
NP , verimli doğrulayıcıları olan bir problem sınıfıdır, yani
verilen bir çözümün doğru olup olmadığını kontrol edebilen bir polinom zaman algoritması vardır.
Daha teorik bir karar problemi ki Q olduğu NP IFF
Doğrulayıcı olarak adlandırılan verimli bir algoritma V vardır, öyle ki
tüm girdiler için x ,
- Q(x)=YESyV(x,y)=YES
- Q(x)=NOyV(x,y)=NO
Doğrulama
NO ise, herhangi bir kanıt kabul etmiyorsa bir doğrulayıcının sesli olduğunu söylüyoruz . Başka bir deyişle, eğer cevap gerçekten HAYIR ise, bir ses doğrulayıcısının bir kanıtı kabul etmesi için kandırılamaz. Yanlış pozitif yok.
Benzer şekilde,
cevap YES olduğunda en az bir kanıt kabul ederse doğrulayıcının tamamlandığını söylüyoruz . Başka bir deyişle, eksiksiz bir doğrulayıcı cevabın EVET olduğuna ikna edilebilir.
Terminoloji mantık ve ispat sistemlerinden gelir . Herhangi bir yanlış ifadeyi kanıtlamak için ses geçirmez bir sistem kullanamayız. Tüm doğru beyanları kanıtlamak için eksiksiz bir kontrol sistemi kullanabiliriz.
Doğrulayıcı V iki giriş alır,
- x :Q için orijinal girişve
- y :Q(x)=YES için önerilen bir kanıt.
VxyyyVxVxyyx
QNP
NPVPNPNP
P⊆NP
PNPP=NP
PNP
Bunun nedeni, ihtiyacımızın olmadığı, doğrulayıcının cevabı kendi başına hesaplayabileceği, cevabın herhangi bir yardım almadan EVET veya HAYIR olup olmadığına karar verebilmesidir. Cevabınız HAYIR ise, kanıt bulunmaması gerektiğini biliyoruz ve doğrulayıcımız önerilen her kanıtı reddedecektir. Cevabınız EVET ise, bir kanıt olmalı ve aslında sadece bir kanıt olarak kabul edeceğiz.
[Doğrulayıcımızın yalnızca bazılarını kabul etmesini sağlayabilirdik, bu doğrulayıcıdır, doğrulayıcımız sorunun doğru olduğunu doğrulayan en az bir kanıtı kabul ettiği sürece.
İşte bir örnek:
n+1a1,⋯,ans
Σni=1ai=s
Ps
NPVP
NPPP⊆NP
için Brute-Force / Exosisive Search AlgoritmalarıNPNP⊆ExpTime
NPNP
Bölüm örneğimizde, olası tüm bölümleri dener ve toplamların herhangi birinde eşit olup olmadığını kontrol ederiz.
m2m
NPNP⊆ExpTimeNP⊆PSpace
NPPNPNP
NP=PNP
NPNP
NPNPNPP⊆NP
NPNP
Düşük Sınırların Kanıtlanması Zor Görünüyor
NP
Ne yazık ki, düşük sınırları kanıtlama görevi çok zor. Biz olamaz hatta bu sorunlar daha fazlasını gerektiren kanıtlamak lineer zaman ! Üstel zaman gerektiren yalnız bırak.
Doğrusal zaman alt sınırlarının kanıtlanması oldukça kolaydır: algoritmanın sonuçta girişi okuması gerekir. Süper lineer alt sınırları kanıtlamak tamamen farklı bir hikaye. Süper lineer alt sınırları, düşündüğümüz algoritmalar hakkında daha fazla kısıtlamayla kanıtlayabiliriz, örneğin karşılaştırma kullanarak algoritmaları sıralama, ancak bu kısıtlamalar olmadan alt sınırları tanımıyoruz.
Bir problemin üst sınırını kanıtlamak için sadece yeterince iyi bir algoritma tasarlamamız gerekir. Bu tür bir algoritmanın ortaya çıkması için genellikle bilgiye, yaratıcı düşünceye ve hatta ustalığa ihtiyaç duyar.
Bununla birlikte, görev daha düşük bir sınır kanıtlamaya kıyasla oldukça basittir. İyi bir algoritma olmadığını göstermeliyiz . Biz değil kalmamasıdır biliyor şu anda herhangi yeterince iyi algoritmalar, ama bu hiç iyi algoritmaları orada yok olduğunu, hiç kimse iyi bir algoritma ile gelecek . Daha önce yapmadıysanız, bir dakika için düşünün, böyle bir imkansızlık sonucunu nasıl gösterebiliriz ?
1=0
Bir sorun olduğunu göstermek için, yani bir alt sınır kanıtlamak için gereklidir çözmek için belli sürenin, bunu kanıtlamak için var demektir herhangiNPörneğin açgözlü ve uzantıları gibi problemler işe yaramaz ve dinamik programlama algoritmaları ile ilgili bazı işler vardır ve doğrusal programlamanın belirli yolları üzerinde bazı çalışmalar vardır. Ancak bunlar, bildiğimiz zekice fikirleri dışlamak için bile yakın değil (ilgileniyorsanız sınırlı hesaplama modellerinde daha düşük sınırları arayın).
Engeller: Alt Sınır Are kanıtlayın zor
Öte yandan
, düşük sınırlı bir kanıtın böyle olamayacağını söyleyen engeller denilen matematiksel sonuçlara sahibiz
ve böyle ve neredeyse daha düşük sınırları kanıtlamak için kullandığımız tüm teknikleri kapsar! Aslında birçok araştırmacı Alexander Razbarov ve Steven Rudich'in doğal kanıtlar engeli sonucundan sonra alt sınırlar üzerinde çalışmaktan vazgeçti
. Belirli türden alt sınır kanıtların varlığının kriptografik yalancı sayı üretici ve diğer birçok kriptografik araçların güvensizliği anlamına geldiği ortaya çıktı.
Neredeyse son yıllarda, temel olarak Ryan Williams'ın
bariyer sonuçlarını zekice engelleyebilen bir ilerleme kaydettiği için, şu ana kadar elde edilen sonuçlar çok zayıf hesaplama modelleri için ve genel polinom-zaman algoritmalarını dışlamaktan oldukça uzak. .
NP
[Diğer yandan, Ryan Williams'ın çalışması alt sınırları kanıtlamak ve üst sınırları kanıtlamak arasında yakın bağlantılar olduğunu göstermektedir. İlgileniyorsanız ICM 2014'teki konuşmasını görün .]
Azaltmalar: Başka Bir Sorunu Alt Rutin / Oracle / Kara Kutu Olarak Kullanarak Sorunu Çözme
Azaltma fikri çok basittir: bir sorunu çözmek için başka bir problem için bir algoritma kullanın.
nSumSum
Sorun:
nx1,…,xn
∑ni=1xi
Azaltma Algoritması:
- s=0
- i1n
s=Sum(s,xi)
- dönüşs
SumSumSumSum
Esasen bu, azaltmanın ne olduğudur: bir problem için algoritmaya sahip olduğumuzu ve başka bir sorunu çözmek için bir kehanet olarak kullandığımızı varsayalım. Burada verimli olan, kehanetin bir süre içinde cevap verdiğini varsaymak anlamına gelir; yani, kehanetin her uygulamasını tek bir adım olarak sayarız.
Oracle büyük cevabı dönerse okumamız gerekiyor ve bu biraz zaman alabilir, bu yüzden gereken süreyi saymak gerekir bize torpil bize verdiği cevabı okumak için. Benzer şekilde, soruyu kehanetten yazmak / sormak için. Fakat kehanet anında çalışır, yani kehaneden soru sorduğumuzda, kehanet bizim için cevabı tek bir zaman diliminde yazar. Oracle'ın yaptığı tüm işler tek bir adım olarak sayılır, ancak bu bize soruyu yazmamızın ve cevabı okumamız için gereken süreyi hariç tutar.
Oracle'ın nasıl çalıştığını umursamıyoruz, ancak yalnızca geri döndürdüğü cevaplarla ilgili bir sadeleştirme yapabilir ve bunun için bir algoritma yerine sorunun kendisi olduğunu düşünebiliriz. Başka bir deyişle, kahinenin bir algoritma olmaması umrunda değil, oracles'ın cevapları ile nasıl ortaya çıkacağı umrumda değil.
Sum
Bir kehanetten birden fazla soru sorabiliriz ve bu soruların önceden belirlenmiş olması gerekmez: bir soru sorabiliriz ve kehanetin geri döndürdüğü cevabına dayanarak bazı hesaplamaları kendimiz yaparız ve sonra elde ettiğimiz cevaba dayanarak başka bir soru sorabiliriz. önceki soru.
Buna bakmanın başka bir yolu da etkileşimli bir hesaplama olarak düşünmektir . İnteraktif hesaplamalar başlı başına büyük bir konudur, bu yüzden buraya girmeyeceğim, ancak bu indirgeme perspektifinden bahsetmek faydalı olabilir.
AOAO
Yukarıda tartıştığımız azaltma, en genel azaltma şeklidir ve kara kutu azaltma
(aka oracle azaltma , Turing azaltma ) olarak bilinir .
Daha resmi:
QOQ≤TO
Ax
Q(x)=AO(x)
AOQ
AQ≤PTOT
Bununla birlikte, indirgeme algoritmasının kahinle etkileşime girme şekline bazı kısıtlamalar koymak isteyebiliriz. Üzerinde çalışılan birkaç kısıtlama var, ancak en kullanışlı kısıtlama, bir -çok azaltma
( eşleme azaltma ).
xy
Daha resmi,
QOQ≤mO
Ax
Q(x)=O(A(x))
Q≤PmO
NPANPBANP
PNPNP
Gönderi çok uzadı ve cevap sınırını aşıyor (30000 karakter). Cevap Bölüm II'de devam edeceğim .