“Bir sorunu çözmek için en basit program” cevabını verecek bir teori var mı?


10

"Hangi problemlerin hesaplama ile çözülebileceğini" yanıtlamak için hesaplanabilirlik teorisini geliştirdik. Hesaplanabilir problemler için, "En basit olanı aldığım program" sorusuna cevap verecek bir teori var mı?

Hesapsal karmaşıklığın soruyu cevapladığını düşünmüyorum. Sanırım ne kadar süreye ihtiyacımız olduğunu düşünüyor (soyut olarak ölçülmesine rağmen).

Algoritmik bilgi teorisinin soruyu cevaplayıp yanıtlamadığından emin değilim. Teori, asgari boyut ve en basit eşdeğerliğin benim için açık olmadığı boyuttan bahsediyor (en azından benim için farklı hissediyorlar).

Teorinin en azından "basit" veya "daha basit" ilişkisini tanımlaması gerektiğini düşünüyorum.


Şimdi Kolmogorov Karmaşıklığına bakmam gerektiğine ikna oldum. Ancak, soruyu sorduğumda aklımda ne olduğunu açıklamak istiyorum.

Bir programı geliştirdiğimde, programın farklı bölümleri arasındaki gereksiz bağlantıları azaltmaya çalışırım (belki daha az veya daha zayıf bağlantılar olabilmesi için parçaları yeniden bölerim). Bağlantılar azaldığı için program "daha basit" hissediyor. Bu yüzden soruyu ifade ederken "basit" kelimesinin seçimi. Büyük olasılıkla programın boyutu da azalır, ancak bu ana amaç değil, iyi bir yan etkidir. Açıkçası, iyileştirme süreci sonsuza dek süremez. Durmam gereken bir nokta var. Eğer sadece "yapı" (başka bir tanımlanmamış kavram için özür dilerim) veya "ilişki" yi göz önünde bulundurarak, kendimi başka bir şeyin yapılamayacağına ikna edebilir miyim?

Burada karmaşıklık kavramımın daha iyi bir açıklaması var.

Olaf Sporns (2007) Karmaşıklık . Scholarpedia , 2 (10): 1623



4
Bennett'in Mantıksal Derinlik kavramıyla ilgileniyor olabilirsiniz. Li ve Vitanyi's, Kolmogorov Karmaşıklığı hakkındaki kitaplarında bölüm 7.7'yi ayırdılar.
Martin Schwarz

2
@YuNing: Boyut olmasa da "en basit" ile ne demek istiyorsun?
Rob

1
@Yu Ning: Peki, bir çıktı üretmek için en küçük program olmaktan ziyade, en iyi Minimum Açıklama Uzunluğuna sahip Turing makinesidir - böylece 'küçüklük' ve 'yapı' arasında bir denge vardır?
Ross Snider

3
Sorunun biraz kötü tanımlandığını düşünüyorum. Ayrıca çok basit algoritmalar olduğunu, ancak doğru olduklarını kanıtlamanın zor olduğunu unutmayın. Ve basit ve açıkça doğru olan algoritmalar vardır, ancak hızlı olduklarını kanıtlamak zordur.
Jukka Suomela

Yanıtlar:


16

Bu problem Algoritmik Bilgi Teorisi'nde incelenmiştir. Tanımladığınız şeye Kolmogorov-Chaitin karmaşıklığı denir.

http://en.wikipedia.org/wiki/Kolmogorov_complexity

Ve ihtiyaç duyduğunuz basitlik kavramının, Blum aksiyomları tarafından resmileştirilen karmaşıklık ölçüsü kavramıyla resmileştirilebileceği anlaşılıyor.

http://en.wikipedia.org/wiki/Blum_axioms

Ayrıca, diğer karmaşıklık önlemlerini dikkate almak için Kolmogorov'un karmaşıklığını genelleştirmek mümkün görünüyor. Aşağıdaki referansa bakın. (Wikipedia'nın Kolmogorov karmaşıklığı ile ilgili makalesi bu sorunu ele almaktadır.)

Burgin1990- Genelleştirilmiş kolmogorov karmaşıklığı ve diğer ikili karmaşıklık ölçüleri Sibernetik ve Sistem Analizi Cilt 26, Sayı 4, 481-490


@Jukka Suomela'nın dediği gibi, soru biraz kötü tanımlanmış. Bu yüzden soruya tam bir cevap alamayacağımı merak ediyorum. Ancak, bu cevap oldukça bilgilendirici olduğundan ve sorunun önemli bir bölümünü vurduğundan, hala cevap olarak etiketliyorum.
Yuning

Bu arada, özellikle bir programın resmi bir spesifikasyonu varsa, konunun uygulanmasına daha fazla işaret edebilir misiniz, spesifikasyondan en küçük boyutu bulabilir mi?
Yuning

1

İlk sorunun cevabı Evet , bir teori var, Algoritmik bilgi teorisi ve bunlara Zarif Programlar (Gregory Chaitin tarafından) deniyor.

"En basit olanı aldım program" hakkında ikinci soru için?

Cevap yok , çünkü bu hesaplanamayan bir soru, bir programın Zarif bir program olduğunu kanıtlamak mümkün değil.

Zarif programlardan bahsetmek için bir cevap koydum .


-1

Neyin basit bir kod olduğuna ve neyin olmadığına karar vermek için farklı yaklaşımlar vardır.

Ancak ne yazık ki, bunu belirlemenin otomatik bir yolu yoktur, örneğin, Kolmogorov Karmaşıklığı özyinelemeli işlevlerle başarısız olur, bazı özyinelemeli işlevler (mantıksal derin) basittir, ancak bununla ilgili anlayış o kadar basit değildir.

Deneyimlerime göre, ekibimiz bir sistemde çalışıyordu ve Oracle'da (50 satırdan fazla değil) "basit" bir prosedür bulduk ... ve anlamaya çalıştık, tamamen anlamak için 2 ay (ve birkaç toplantı) sürdü. kodun karmaşıklığı ile değil, her değişkenin arkasındaki mantıkla.

Bir kod ne kadar basit olduğunu belirlemek için bir yol olduğunu düşünüyorum: "bir kodu okuyun ve anlamak için kullanılan zaman düşünün."

Yani "Bir sorunu çözmek için en basit program?" ayrılabilir:

a) kodun basitliği (açık kod) ama çok öznel.

b) fonksiyonun aşırı karmaşıklığı, eğer X problemim varsa, o zaman DX (Delta X) görevini çözmeliyim, burada DX X'e eğilim göstermelidir.

Örneğin, benim sorunum (bir) "bir elma soymak" ve ben bunu PHP (ve dil) yapmak gerekir

Eğer son derece şanslıyım ve PHP fonksiyon_peel_apple () fonksiyonuna sahipse, o zamana kadar en basit kod X = 1 DX = 1, sadece fonksiyonu çağırın ve hepsi bu kadar!

Tersi, eğer ben çok şanslı değilim ama function_peel () ve function_get_apple () fonksiyonunu varsa X = 1 (bir problem) ve DX = 2 (iki görev).

En kötü durumda, herhangi bir işlev yoksa, o zaman ben kendim bir (veya birden fazla) oluşturmak gerekir ve sorunu çözmek için birkaç görev eklemek gerekir, şimdi bu karmaşık bir program.

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.