Kolmogorov karmaşıklığı bir dize ait S en kısa programı uzunluğudur P bazı programlama dili ile yazılmış, L , çıkış tam olarak, S .
(Evet, gerçek tanım daha formeldir, ancak bu meydan okuma için yeterli olacaktır.)
Bu meydan okuma Your iştir en kısa "Kolmogorov karmaşıklığı çözücüsü", yazılmış bir program yazmaktır L bir dize alır kendisi S ve getiri kısa P yazılmış L çıkışları olduğunu S .
Bunun naif yaklaşımı, tüm uzunluk 1 programlarını, sonra tüm uzunluk 2 programlarını, sonra tüm uzunluk 3 programlarını, vb. Yinelemektir, her birini çalıştırır ve S çıktısı olan bir program bulunana kadar çıktıyı ölçer . Bu yaklaşımla ilgili sorun, bu programların bazılarının çalışmayı asla durduramayacağı, yani çözücünün kendisinin asla durmayabileceği anlamına geliyor. Durma problemi nedeniyle, durmayan programlardan kaçınmanın kesin bir yolu yoktur.
Basit ama mükemmel olmayan bir çözüm, potansiyel P'lerin her birinin yürütme süresine bir zaman sınırı koymaktır . Zamanında durmayan programlar aktarılabilir, ancak çözücü kesinlikle duracaktır ( L' deki bir programın gerçekten S zaman sınırı içinde çıkabileceği varsayılarak ).
Meydan okuma
Çözücünüzü üç şey alan bir program veya işlev olarak yazın:
- S dizesi .
- Saniye cinsinden zaman sınırı veya daha küçük bir zaman aralığı olan pozitif bir tamsayı T (örneğin milisaniye).
- Bir dize A potansiyel kullanım karakter alfabe P 's.
Ve yalnızca A harflerini içeren en kısa P çıktısını verir, T zaman biriminden daha az bir sürede çalışır ve S çıktısını verir .
Bu genel sahte kod:
Function KolmogorovComplexitySolver(S, T, A):
Assign N to 0
Loop until function returns:
In any order, iterate over all strings of length N that only contain characters from *A*. Call the current string P:
Execute P, saving the output to O, stopping the execution if it takes longer than time T
If (P did not throw any errors) and (P did not timeout) and (O and S are identical):
Return P
Add 1 to N
ayrıntılar
- Her zaman olacağını varsayabiliriz P karakter yapılmış A süresi içinde çalışır o T çıkışları olduğunu S .
- Potansiyel yürütülmesi varsayabiliriz P 's çalışan ya da (çalısan kisinin ayrılan bellek ile karıştırmasını gibi) düzgün çalışmasını çözücüsü önlemek yan etkileri olmaz.
- Sen olabilir değil potansiyel farz P 'nin hata ücretsizdir.
try
/catch
Çağrıları veya yürütme çağrısının etrafına uygulanabilir her şeyi eklediğinizden emin olun . - Birden çok kısa P ' varsa , o zaman herhangi biri yeterli olacaktır. "Kısalık", bayt değil, karakter cinsinden ölçülür.
- Potansiyel çıkış P 'nin Stdout'a (veya dilinizin zamanki çıkış yüzölçümü) basılmış olan bu. Boş dize potansiyel bir P'dir .
- İdeal olarak çözücünüz A'nın herhangi bir karakter içermesine izin verecektir . A en azından yazdırılabilir ASCII karakterleri artı sekmeler ve yeni satırlar içerebilmelidir .
- Girdi, dosya / stdin / komut satırı / işlev argümanlarından gelebilir. Çıktı stdout veya benzerine gider veya bir işlev yazdıysanız dize olarak döndürülebilir.
puanlama
En az bayt içeren gönderim kazanır. Tiebreaker en erken gönderilen gönderime gider.