Bir algoritma, zaman karmaşıklığını ne kadar keyfi bir giriş programını öngörebilir?


23

Halting problemi o, başka bir program alıkoymalarla olmadığını belirlemek için bir program yazmak imkansız olduğunu belirten olası tüm giriş programlarında .

Bununla birlikte, kesinlikle, benzer bir programın çalışma süresini hesaplayabilen bir program yazabilirim:

for(i=0; i<N; i++)
    { x = 1; }

ve hiç çalıştırmadan zaman karmaşıklığını döndürün .N

Diğer tüm girdi programları için, zaman karmaşıklığını belirleyemediğini belirten bir bayrak getirecekti.

Sorum şu:

Belirli bir programın zaman karmaşıklığını algoritmik olarak belirleyebilmemiz için hangi şartları içermesi gerekir?

* Eğer bir kanonik referans veya inceleme makalesi varsa, yorumlardaki linke minnettar olurum.


1
(1) “O-notasyonu”, “zaman karmaşıklığı” anlamına gelmez. (2) “O (sonsuzluk)” ile ne demek istediğinizi açık değil. Lütfen mümkünse yeni bir gösterim yapmaktan kaçının. (3) Verilen bir programın durup durmayacağına karar vermek ve programın karmaşıklığı konusunda açık bir üst sınır vermek farklıdır.
Tsuyoshi Ito

1
Kısıtlı sınıflardaki programların zaman karmaşıklığını çıkarmaya aşina değilim, ancak kontrol edilmeye değer bir program sınıfı, zaman karmaşıklığını sınırlamanın kolay olduğu “sınırlı döngü programları” olarak adlandırılıyor. Sınırlı döngü programlarının Uwe Schöning ve Randall J. Pruim tarafından Teorik Bilgisayar Bilimleri Gems Bölüm 3'te iki programın denkliği kararlaştırılması bağlamında ele alındığını hatırlıyorum, ancak bölümün sorunuzla ne kadar alakalı olduğundan emin değilim.
Tsuyoshi Ito

4
Biraz kafam karıştı. Bu ne şekilde kapsam dışı? OP'nin sorusuna makul bir cevap, çalışma süresinin algoritmik olarak belirlenebileceği dil parçaları (hatta parça sınıfları) olacaktır.
Suresh Venkat 12:12


7
Bu yorum dizisine çok geç kaldım. Bir gönderinin acemi kokusu andırdığı anı fırlatıyor gibiyiz. Parmakları işaret etmiyorum. Bu içgüdüyü kendim hissediyorum. Belki daha kibar olmalıyız. OP, bölgeye veya şartlara aşina olmadığını kabul etti. Bir soru-cevap sitesinin amacı, yalnızca tam olarak ne istediklerini bilen ve bizim dilimizde soran insanlara tahammül edersek.
Vijay D

Yanıtlar:


23

TpT

input: n
run T for n steps
if T is in halting state, output: 0
otherwise, loop for n^2 steps and output: 0

pT

Bununla birlikte, programın karmaşıklığının etkili bir şekilde hesaplanması konusunda birçok çalışma yapılmıştır. Özel yapıları kullanarak veya disiplinler yazarak, sadece belirli bir iyi tanımlanmış karmaşıklık sınıfında yaşayan programlar yazmayı sağlayan diller yaratmayı amaçlayan Örtük Karmaşıklık Teorisi'ne özel bir düşkünlüğüm var . Bir mucize olduğunu düşündüğüm şeye göre, bu diller genellikle o sınıf için tamamlanıyor!

Bu makalede özellikle güzel bir örnek J.-Y. Algoritmaların bir karakterizasyonu sağlar bilgi akışı ve güvenlik analizi tekniklerinden esinlenerek bir tür disiplin ile küçücük bir zorunluluk dilini açıklar Marion P .


Bir yandan not olarak, ayrıca sonlandırmayı garanti edebilecek bir dil olan Epigram'a bakın.
Realz Slaw 14:12

Bu güzel bir başlangıç, ama söyleyecek daha çok şey var mı? (Örneğin, bana göre, belirli bir özyinelemeli özyinelemeli çalışma zamanının hesaplama için basit olması gerekir, ancak bu gibi fonksiyonlar üstel hiyerarşideki herhangi bir sorunu çözebilir ....)
usul

Giriş programının sınırlı bir dilde yazılmış olduğunu belirlemek mümkün olduğu sürece, zaman dilindeki karmaşıklığın o dilin ne kadar üst sınırlar getirdiğine bağlı olduğunu varsayabilirsiniz. Bununla birlikte, birçok ilkel özyinelemeli fonksiyonlar, daha verimli olan genel özyinelemeli
denklere sahiptir

1
(yanlışlıkla bu yorumu erken kaydettikten sonra 5 dakikalık sınırı aştı. İkinci cümle aşağıdaki şekilde okunmalı :) Ancak, bu sınırlı dillerdeki programlar daha etkili olan daha az sınırlı dillerde eşdeğerleri olabilir (özellikle, ilkel özyinelemeli fonksiyonlar pratikte kısıtlamasız, zor analiz edilen dillerin kullanımını teşvik eden genel özyinelemeli eşdeğerler.
Chris Pressey,

Bu çok ilginç Chris! Referansın var mı? Aslında karşı-inutitif görünüyor: İlkel özyinelemeli fonksiyonların belirli bir adım için genel özyinelemeli fonksiyonları simüle edebileceğinden şüpheliydim, bu da hızlanmayı bazı sabit faktörlerle sınırlandıracaktı.
cody

11

Ortaya koyduğunuz soru ve tanımladığınız özel sayma numarası program analizinde klasik bir sorundur. Karmaşıklık analizinin teorik sorunu var ve bir kod parçasının performansını otomatik olarak tahmin etme açısından pratik bir tezahürü. Böyle bir otomatik analizde, performans hatalarını tespit etmekten buluttaki bir hesaplama maliyetinin tahmin edilmesine kadar birçok uygulama vardır.

Cody, sorunun genel olarak çözülemez olduğuna dikkat çekti. Bu sorun sonlandırmayı kanıtlamaktan daha zordur, çünkü bağlı bir karmaşıklık elde etmek programın da sona ermesini gerektirir. Böyle bir soruna iki yaklaşım var. Biri program analizinden. Bir sayaç ekleme ve değerini tahmin etme fikri 70'lerden beri var. Bu kodlama, çalışma zamanını değişmeyen bir hesaplamanın süresine belirleme sorununu azaltır.

İkinci bir yaklaşım, yalnızca belirli bir sınırlı karmaşıklığa sahip programları kabul eden bir programlama dili tasarlamaktır. Bu, örtülü hesaplama karmaşıklığının alanıdır .

Her iki alan için bazı referanslar takip ediyor.

  1. SPEED Projesi , programa girdikten sonra sayaçların sınırlarının nasıl bulunacağına odaklanan belirli bir program analiz çalışmasıdır. Sayaçlar zaman veya alan tüketimini ölçebilir.
  2. Çok değişkenli itfa edilmiş kaynak analizi , Jan Hoffman, Klaus Aehlig, Martin Hoffman, ACM TOPLAS 2012
  3. Zorunlu Programların Karar Verilebilir Büyüme Hızı Özellikleri , Amir Ben Amram, Örtük Hesaplamalı ComplExity 2010'daki Gelişmeler Üzerine.
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.