Kolmogorov karmaşıklığına yaklaşmak


22

Kolmogorov Karmaşıklığı hakkında bir şeyler okudum, Vitanyi ve Li'den bazı makaleler ve kitaplar okudum ve Yazarların stilometrisini doğrulamak için Normalize Sıkıştırma Mesafesi kavramını kullandım (her bir yazarın bazı metinleri ve grup belgelerini benzerliklerine göre nasıl yazdığını belirleyin).

Bu durumda, veri kompresörleri bir Kolingogo makinesi olarak kullanılabileceğinden, Kolmogorov karmaşıklığını yaklaşık olarak belirlemek için kullanıldı.

Veri sıkıştırma ve programlama dillerinin yanı sıra (bir tür kompresör yazacağınız), Kolmogorov karmaşıklığını belirlemek için başka ne kullanılabilir? Kullanılabilecek başka yaklaşımlar var mı?


Sorunuzu anladığımdan emin değilim: KC tanımı, programların örnek teşkil ettiği turing makinelerini içerir (bazı çeviriler için). "Dilleri programlamadan" Kolmogorv karmaşıklığına yaklaşmak ne anlama geliyor?
cody

1
GZip gibi herhangi bir sıkıştırma yazılımı kullanarak bir dize sıkıştırın. Çıktının boyutu, dizenin KC'sine bir üst sınırdır.
M Alaggan

@cody: tam olarak, araştırmamda veri sıkıştırıcılarını kullandım (zip, bzip, ppmd). Veri kompresörü tam olarak programlar değil. Bu nedenle, KC'de dillerin dışında ne kullanılabileceğine dair öneriler arıyorum (= C / prolog / ne olursa olsun bir program yazın) ve veri kompresörleri (= zip, gzip kullanın, ppmc, ppmd ...) :)
woliveirajr

1
Sanırım bana bir veri sıkıştırma programının tanımının tam olarak olduğu görünüyor: bir dizgenin KC'sine bir program ("sıkıştırıcı") ve başka bir dize (sıkıştırılmış dize) yaklaşan bir program.
cody,

Yanıtlar:


9

Sanırım sorunuzun olası bir cevabı şudur: Bir takma numara üreteci . Bazı güçlü olan bir jeneratör seçti çalışın saldırıları a: buna karşı rasgele sayı üreteci saldırı için (bizim için) 'dir, bir algoritma , bir imput dize verildiğinde , bir belirleyen tohum , bu tür . Sonra KC değeri :G A ler A ( s ) G ( A ( s ) ) = s lerGGAs A(s)G(A(s))=ss

input: s
Compute A(s);
if |A(s)| + |G| > |s| output: |s|
otherwise output: |A(s)| + |G|

Nerede hesaplayan programın uzunluğu ( doğrusal jeneratörlerde olduğu gibi genellikle oldukça kısa).G ( ler )|G|G(s)

Uygulamada, rasgele sayı üreteci saldırılarının açıklandığı gibi olmadığını unutmayın: başarısız olabilir veya eksik sonuçlar verebilir . Bu durumda, algoritmayıSaldırının sonucu yetersiz olduğunda. Aynı söz, sıkıştırma algoritmaları için de geçerlidir.|s|

Sıkıştırma algoritmaları aksine bu yaklaşıma ikaz bu sıkıştırma algoritmaları daha genel olarak da çalışma için özel olarak KC işlem için daha uygun olan ise herhangi bir hücum sadece çalışabilir ise, ip suretinde olması umulur ( çok düşük olasılıkla ).GsG


7

Herhangi bir olasılık dağılımı. Veri olasılığınızı , sonra da Kraft eşitsizliğini veren hesaplanabilir bir olasılık dağılımınız varsa, onu bitlerinde (kesirli bitlere itiraz ediyorsanız toparlayın) sıkıştıran hesaplanabilir bir kompresör vardır . Bu, hemen hemen herhangi bir üretici makine öğrenme algoritmasının kullanılabileceği anlamına gelir.- log p ( x )p(x)logp(x)

Bu yüzden Kolmogorov karmaşıklığı çok ilginçtir, çünkü nihai sıkıştırma algoritmasıdır (yine de sıkıştırmayı önemseyen), ancak nihai öğrenme algoritmasıdır. Sıkıştırma ve öğrenme temelde aynı şeydir: verilerinizdeki kalıpları bulmak. Bu fikir üzerine inşa edilen istatistiksel çerçeveye Minimum Açıklama Uzunluğu denir ve bu doğrudan Kolmogorov karmaşıklığından esinlenmiştir.

Ayrıca bu soruya cstheory StackExchange adresinden bakın .


5

dilbilgisi kodlaması sıkıştırma algoritmasının daha az kullanılan bir versiyonudur ve Kolmogorov karmaşıklığının "kaba" bir tahmini olarak alınabilir. Dilbilgisi kodlaması, diğer bazı yaygın yaklaşımlar kadar sık ​​kullanılan bir sıkıştırma algoritması kadar yaygın bir şekilde kullanılmaz, çünkü belki de esas olarak örneğin metin tabanlı-corpus'lardaki Lempel-Ziv'den gelen sıkıştırmayı daha fazla geliştirmez, ancak diğer veri türlerinde iyi yapabilir. Buradaki fikir, dilbilgisi kurallarını kullanarak bir dizgiyi "sıkıştırmak" tır. dilbilgisi türetmesi bir DAG (daha az karmaşık bir ağaç vs) ile sonuçlanabilir, bu nedenle önemli bir temsil karmaşıklığı mümkündür.

Başka bir seçenek, bir dizgeyi temsil eden en küçük / en küçük devreleri bulmaktır, ancak bunun çok yüksek hesaplama karmaşıklığına sahip olduğu ve sadece küçük tellerde başarılı olabileceği bilinmektedir.

Genellikle, herhangi bir yaklaşım ne kadar yakınsa , hesaplamasına gelir , o kadar etkileyicidir.K(x)

Gayri resmi bir anlamda, genellikle 'in herhangi bir "yaklaşımı" da bir "sıkıştırma algoritması" olmalıdır.K(x)

Lempel-Ziv "çalıştırma uzunluğu kodlaması" tipi yaklaşımların yanı sıra, örneğin vektör cebiri ve SVD'nin sıkıştırma algoritması olarak kullanılabileceği gibi başka sıkıştırma algoritması yöntemleri de vardır . ayrıca Fourier dönüşümü sık sık örneğin JPG standardındaki görüntüleri sıkıştırmak için kullanılır.


1
Tabii ki, sıkıştırma in bir yaklaşımı olarak saymak için kayıpsız olmalıdır . JPG'deki Fourier dönüşümünün kaybedildiğinden eminim (ama bir uzman değilim). K(x)
cody

Ancak, iyi olan nokta, kayıp algoritmalarının genellikle "kayıpsızlığı" belirleyen ayarlanabilir bir parametreye sahiptir ve teorik olarak, yeterince "terim" veya "frekans" ile kayıpsızlığa ulaşabildiği ve kayıpsız parametre değerinin bağlı olacağı şekilde girdi numunelerine bağlı olduğu anlamına gelir. sıkıştırma algoritmasının "objektifi" boyunca görülen "göreceli düzen ve rastgelelik" ile ilgili olarak ...
vzn

1
@ cody ve vzn: Cevabınız için teşekkürler, bana doktora için kayıpsız x kayıplı sıkıştırma hakkında iyi fikirler
verdin

JPEG, DCT'yi kullanır, DFT'yi değil.
Evil
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.