Kolmogorov-Karmaşıklık tanımlarının denkliği


20

Kolmogorov-Karmaşıklığını tanımlamanın birçok yolu vardır ve genellikle tüm bu tanımlar bir katkı sabitine eşittir. Eğer ki ve Kolmogorov karmaşıklığı fonksiyonlardır (farklı dil ya da modeller aracılığıyla tanımlanır), sonra bir sabiti vardır öyle ki her dize için , . Bunun her Kolmogorov karmaşıklık fonksiyonu ve her için , bazı sabitler için .K 2 c x | K 1 ( x ) - K 2 ( x ) | < c K x K ( x ) | x | + c cK1K2cx|K1(x)K2(x)|<cKxK(x)|x|+cc

Turing-machines'e dayalı için aşağıdaki tanımlarla ilgileniyorumK

  1. durumların sayısı : tanımla en az bir sayı olarak bu şekilde olan bir TM ülkelerin çıkışları boş dize.q q xK1(x)qqx
  2. Programın uzunluğu : Define çıkışlar olduğunu en kısa "programı" olmayı . Yani, TM'leri ikili dizelere kodlamanın bir yolunu düzeltin; bir makine için (ikili) kodlaması . en az tüm burada M 'bu çıkış s x boş girişe.x E M K 2 ( x ) = dakika | M | M xK2(x)xMMK2(x)=min|M|Mx

Are K1 ve K2 eşdeğer? Aralarındaki ilişki nedir ve eğer eşdeğer değilse Kolmogorov karmaşıklığı kavramını daha iyi kavrar.

Özellikle beni rahatsız eden şey, K-2'nin xK2 ile artış hızıdır , bu da süper doğrusal değildir (veya en azından C> 1 sabitiyle doğrusaldır, öyle ki | x | + c yerine K_2 <C | x | ). En basit TM düşünün çıkışları o x - Bir bu sadece kodlar x onun devlet ve geçişler işlevinin bir parçası olarak. hemen K_1 (x) \ le | x | +1 olduğunu görürsünüz . Ancak aynı makinenin kodlaması çok daha büyük ve elde ettiğim önemsiz sınır K_2 (x) \ le | x | \ log | x | .xC>1K2<C|x||x|+cxxK1(x)|x|+1K2(x)|x|log|x|


durumuna sahip makine vardır ve ortalama boyutları en az , bu nedenle bunların yalnızca bir katkı sabitiyle farklılık göstermesi olası değildir. n n 22n2nn2
Kaveh

1
İyi olarak bağlanan şey bilinmektedir olduğubazı sabit için bağlı değildir . Bunun nedeni , her bitini ikiye katlayıp ile biterek öneksiz bir dile kodlayabilmemizdir . Bu bitleri temsil etmek için . Bu nedenle, evrensel makine açısından tanımlandığından, bazı sabit . Bu, öneksiz bir dile kodlamak için daha akıllı bir yol kullanarak geliştirilebilir . K2(x)c+2|x|x x x 01 2 | x | + 2 x K 2 K 2 ( x ) 2 | x | + 2 + c c xcxxx012|x|+2xK2K2(x)2|x|+2+ccx
Carl Mummert

Nasıl olduğunu göremiyorum. Ya görünüyor (ham veri olarak) kodlama parçası olarak verilir, ya da inşa etmek zorunda sizin devlet makine tarafından. İlk seçenek hile gibi görünüyor ve ikinci seçenekle ( anlamına gelir ) nasıl karşılaştırılabilir göremiyorumx K 1xxK1
Ran G.

@Ran G .: Kilit nokta en.wikipedia.org/wiki/Invariance_theorem adresinde açıklanan değişmezlik teoremidir . Büyüme oranıevrensel bir Turing makinesi ( için ) bunu bir katkı sabiti içinde karşılayacaktır. Genel makine alır biridir M giriş ve döner çıktısı olan M ise M durur. K 22|x|K2MMM
Carl Mummert

Yanıtlar:


6

Çok fazla ayrıntı verdiğim için şimdiden özür dilerim, ama insanlarla çelişmek üzereyim.

Hakkında K(x)K(x)+c

Aslında genellikle gelen tercüman açıklama dili 1. ve içine açıklama dili # 2 değil # 1 programlara # 2'nin programlarından bir çevirisinden.K1(x)K2(x)+c

Örneğin ve bu eşitsizliği şu şekilde elde edersiniz:KC(x)KPython(x)+cpy2c

void py_run(char * s) {
    // code of your Python interpreter
}

int main(void) {
    py_run("Put here your Python program of size Kpython(x)");
}

Sonra sürekli gibi bir şey olacak 528 + 490240688 528 bu kodu bit ve sayısıdır 490240688 bit yalnızca olası içinde ne yorumlamak gerekir Tabii ki resmi Python yorumlayıcısı C ile yazılmış boyutudur 69 MB'den daha iyi yapabilmeniz için Python için açıklama dilinizi yazın :-)cpy2c528+490240688528490240688

Önemli olan Python programınızı doğrusal olarak C kodunuza yazabilmenizdir . Örneğin, her karakter arasına "BANANA" koymanız gereken bir dil çok iyi bir açıklama programı değildir ve özellik yanlıştır. (Ancak açıklama dili size ayrı bir dosyaya veya bir bloğa veri yazma yetkisi verirse, bu sorun kaybolur)

neden kusurlu?K1(x)=q

tanımınızla ilgili sorun, geçişleri kodlamanız gerektiğinden q durumlu bir Turing makinesini tanımlamak için q bitten fazlasına ihtiyacınız olabilir .K1qq

Hiçbir Yani ve K 2 muhtemelen eşdeğer değildir, ancak esas olarak, K 1 'in hatası. Hepimizin için ispat düşünüyorum a > 0 bir var c bir şekilde K 1 ( x ) a | x | + c a . Tabii ki, herhangi bir < 1 , K 1'in geçerli bir fonksiyon olmadığı gerçeğini kanıtlamak için yeterlidir , çünkü bu, 2 n olası uzunluk dizesinin tümünü daha fazla kodlayabileceğimiz anlamına gelir.K1K2K1a>0caK1(x)a|x|+caa<1K12n içine bir n + c bir bit.nan+ca

Ancak Turing makineleri inşa ederken boyut inanılmaz derecede sıkı bir sınır. Fikir, bir durum bloğunda, her bir durum için geçişleri bulmanın b 2 b yolları olduğu ve b bitlerini doldurabileceğiniz normal 2 b yollarından daha iyi olmasıdır . Sonra her blok içinde saklayabilirsiniz günlüğü 2 b bilgilerinin bit. ( 2 log 2 b değil, çünkü bloğu bir şekilde girip çıkarmanız gerekir)bb2b2bblog2b2log2b

Yani evet ... büyüklüğündeki bloklarla muhtemelen K 1 ( x ) a | x | + c a . Ama zaten devlet sayısının neden geçerli bir Kolmogorov karmaşıklık fonksiyonu olmadığı hakkında çok fazla yazdım. Eğer detaylandırmamı istiyorsan, yapacağım.21/aK1(x)a|x|+ca

Şimdi K2

Saf tanımlayıcı dil kabaca (yani her bir sonraki durum için log 2 q ve yazma ve sonlandırma ile ilgili ayrıntılar).K2(x)=q2(log2q+2)log2q

Eğer gibi görünüyor, ben, belki bir devlet ise olmadığını söylüyor açıklama dilinde bir ikili etiketi ekleyerek daha iyi / dolandırıcı yolu encode Turing makinesinin içine "veri" yetkilendirmek olacağını ikna ediyorum veri devlet ( sadece biraz yazar ve bir sonraki duruma gider) veya başka bir şey yaparsa. Bu şekilde size bir bit depolayabilir Açıklayıcı dil biri birazdan.x

Ancak aynı tutarsanız, birkaç bit kaydetmek için önceki bölümde kullandığım tekniği kullanabilirsiniz, ancak K 2 ( x ) a | x | günlüğü | x | + c (herhangi bir a > 0 için ) .. belki günlükten daha az | x | , hatta, ama O ( | x | ) elde etmek zor görünüyor. (Ve ben olması gerektiği bekliyoruz | x | , hatta Ç ( |K2K2(x)a|x|log|x|+ca>0log|x|O(|x|)|x| .)O(|x|)


kolmogorov-karmaşıklık fonksiyonu olmadığını iddia ediyor musunuz? Bu benim için çok şaşırtıcı, çünkü K 1 aslında bir zamanlar aldığım hesaplanabilirlik dersine bazı girişimlerde kullanılan tanımdır (doğruluğu hakkında bir şey söylemediğinden değil). K1K1
Ran G.

Peki oldukça rahatsız edicidir. Bunu düşünün:nbit2nolası kelime vardırve bunları kullanarak bir kodlayabilirsiniz1K1(x)12|x|+c2nnbit? Bu2n=O(2 1 anlamına gelir12n+c(siz kodlamanın2n=O(212n)
yerinde

Python programında C tarafından ayrılmış karakterler varsa ne olur?
PyRulez
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.