Algoritmaların otomatik çalışma zamanı analizi için bir yöntem var mı?


10

Merak ediyorum, otomatik çalışma zamanı analizi için algoritmaların ilgili bir alt kümesinde (analiz edilebilen algoritmalar) çalışan bir yöntem var mı?

Bana bunu veren "Otomatik algoritma analizi" yi araştırdım ama bu çok fazla matiği. Sadece anlayabildiğim psuedocode'da basit bir örnek istiyorum. Çok spesifik olabilir, ama denemeye değer olduğunu düşündüm.


"Herhangi bir" ile "an" arasındaki stresin gerçekten neyin peşinde olduğunu nasıl netleştirdiğini göremiyorum. Bazı karar prosedürü belirli bir algoritma B'ye bağlıysa, gerçek bir girdi yoktur ve cevap her zaman aynıdır. Sormak istediğiniz şey, sınıfın bağlı olduğu / bilinen 'bazı algoritmalar sınıfındaki herhangi bir algoritma' olup olmadığını düşünüyorum. (değiştir: bu benim mhum'un yorumuna da işaret edildi).
Nicholas Mancuso

2
"An" ve "any" kullanımındaki belirsizlik tam olarak nicelik belirteçlerin icat edilmesidir.
Nate Eldredge

2
İlgili bölümlere odaklanmak için soruyu düzenledim. Sorunu doğru bir şekilde (şimdiye kadar sorunuzu belirttiğiniz kadar) ifade etmek için tam olarak sıfır matematiği nasıl kullandığımı ve özlü bir şekilde not edin. Şimdi, soru hala kötü durumda: tabii ki böyle algoritmalar var. Örneğin, içinde çalışan (çok ilgili) algoritma sınıfından tüm algoritmaları analiz eden basit bir algoritma vardır . Bu nedenle , girdi kümelerine bazı kısıtlamalar koymanız gerekir . ("Psuedocode'da anlayabileceğim basit bir örnek" olmayabilir.)Θ(nlogn)
Raphael

Yanıtlar:


12

COSTA tahmin edebileceğin gibi bunun nedeni, birçok durumda başarısız olsa aracı, sadece bunu yapar computability sorunlarına . Bununla ilgili birçok makale var; Java Bytecode'un E. Albert, P. Arenas, S. Genaim, G. Puebla, D. Zanardini tarafından Maliyet Analizi iyi bir başlangıç ​​noktasıdır.

Alınan yaklaşım, Javabyte kodundan bir çalışma zamanı yinelemesi çıkarmak, bunu kapalı bir forma dönüştürmektir. Araç aynı zamanda alan kullanım sınırlarını da hesaplar.


8
@Nathvi Gerçekten gerekli olmadığını kabul ediyorum bazı yorumlardan rahatsız olduğunuzu anlayabiliyorum, ama aynı zamanda çok saygın bilim adamlarının (ve bu arada cevabımı) çalışması için "bilgiç drivel" terimini kullanmamaya dikkat etmelisiniz. Matematiği sevmeme hakkına sahipsiniz, ancak onsuz çok uzağa gitme olasılığınız yok ve zahmetli aşağılayıcı kelimeler kimseye yardım etmiyor.
babou

12

Hiçbir algoritma belirli bir algoritmanın durup durmayacağına karar veremez, bu nedenle özellikle hiçbir algoritma belirli bir algoritmanın karmaşıklığını sıkı bir şekilde analiz edemez.


2
Sorum rastgele girilen bir algoritma ile ilgili değil, eğer öyleyse, durdurma sorunu nedeniyle cevabınız doğru olurdu. Sorum şu şekilde ifade edilirse doğru olur: "Herhangi bir B algoritmasını alan ve sonra B algoritmasının zaman karmaşıklığını çıkaran bir A algoritması var mı?"
Nathvi

6
B algoritması sabitse, A algoritması olduğundan emin olun. "O (n)" ya da karmaşıklık ölçüsü B'ye karşılık gelen herhangi bir şey yapmayan bir algoritmaya sahip olmak yeterlidir. A algoritmasına tek bir olası girdi varsa, o zaman sadece bir çıktıya ihtiyacımız var.
mhum

5
@Nathvi benim için de açık değildi - "Anladım başka bir algoritmanın karmaşıklığını bulmak için bir algoritma var" ve hala gerçek sorunuzu anlamıyorum . Eğer oyları saymaya çalışıyorsanız, görünüşe göre> 2 kişi bu şekilde yorumladı. Karışıklık durumunda, sorunuzu düzenlemek gerçekten iyi bir fikirdir, aksi takdirde sadece bu sohbeti okuyan insanlar (soruyu okuyan herkes yerine) ne istediğinizi anlayacak ve iyi cevaplar verecektir.
DW'nin

6
@ignis Cevap eksik olabilir ama Yuval'ın yazdığı cümle kesinlikle doğrudur. Ve durma problemi egzotik bir yan durum değildir: hesaplamanın özüdür.
David Richerby

3
@nikie Bu soru bu kadar yardımcı olmuyor; çalışma zamanı sınırları, her zaman sonlanan algoritmaların kümesinde bile kararsızdır .
Raphael

9

MaLiJAn ¹ (yarı) otomatik ortalama vaka analizine bir yaklaşım biliyorum . Knuth'un TAoCP'de kullandığı analiz türüne çok benziyor. Ana fikir

  • programı Markov Zinciri olarak modellemek,
  • bir dizi program çalışmasını sayarak ( maksimum olabilirlik tahmincisi veren ) bazı sabit girdi boyutları için geçiş olasılıklarını eğitmek ,n
  • Olasılık işlevlerine tahmin etmek den ve
  • ortalama maliyeti elde etmek için bilgisayar cebirini kullanır (bu fonksiyonlar).

Yalnızca ilave maliyet önlemlerinin (örneğin karşılaştırmalar, "zaman") çalıştığını ve yalnızca beklenen değerin doğru olduğunu (mükemmel olasılık işlevleri varsayarak), daha yüksek momentlerin elde edilemeyeceğini unutmayın.

Ekstrapolasyon haricindeki tüm adımlar titizdir [2] ve yöntemin elbette iyi rasgele örnek girişleri göz önüne alındığında iyi bilinen sonuçları yüksek hassasiyetle ürettiği gösterilmiştir. Sonuçlar üzerinde hiçbir kanıt veya hatta yaklaşık bir garanti olmasa da (ekstrapolasyon adımı şimdiye kadar tamamen sezgiseldir) araçla elde edilen sonuçlar, analiz edilmesi zor algoritmaları denemek ve hipotezleri formüle etmek için iyi bir deneyime hizmet etmektedir [3,4].


  1. Tam açıklama: Bu araştırma grubunun üyesiyim ve aracın geliştirilmesinde yer almıştım.
  2. U. Laube ve M. Nebel tarafından Algoritmaların ve Veri Yapılarının Maksimum Olabilirlik Analizi (2010) [ preprint ]
  3. Mühendislik Java 7'nin MaLiJAn Kullanarak Dual Pivot Quicksort'u S. Wild ve ark. (2012) [ preprint ]
  4. U. Laube und M. Nebel (2015) tarafından Özel Grafiklerde Ford-Fulkerson Metodunun Maksimum Olabilirlik Analizi [ preprint ]

Bu teknikler, ortalama vaka analizinin kesinliği hakkında bir tahminle geliyor mu?
Martin Berger

@MartinBerger Maalesef hayır. Bununla ilgili bazı fikirlerimiz var, ancak henüz uygulanmadığı sürece hiçbir şey sağlamlaşmadı. Sadece çok sayıda giriş boyutunu kontrol eden herhangi bir yöntemi kandırmanın kolay olduğunu unutmayın, bu nedenle genel olarak çok az umut vardır. Çalışma zamanı işlevleri ve / veya veri kümeleri üzerindeki varsayımlar ile bir şey mümkün olabilir. Araç en azından "daha fazla veriye ihtiyaç" diyebilmelidir.
Raphael

İlginç. Umarım bu ek işi yaparsınız.
Martin Berger

8

Tabii ki, Yuval Filmus tarafından belirtildiği gibi, bu tür sorunlara genel bir çözüm beklenmemelidir. Ancak genellikle olduğu gibi, genel davanın ilginç alt kümeleri için çözümler bulunabilir.

Hiçbir şekilde uzman değilim, hatta bu alanda önemli ölçüde bilgili değilim. Otomatik ortalama karmaşıklık analizi ile ilgilidir ve çalışma Philippe Flajolet ve meslektaşları tarafından yapılmıştır.

Bana açıklandığı zaman anladığım kadarıyla, yazarlar küçük bir dil tasarladılar (beklediğiniz gibi tam bir Turing değil, ancak yeterince önemli), böylece bu dilin kısıtlaması içinde yazılan herhangi bir algoritmanın ortalama karmaşıklığı otomatik olarak analiz edilebilir. Sistem Lambda-Upsilon-Omega, yani (bağlandım) olarak çağrıldı .λυ´ω

Web'de bulduğum bir makale 1990 tarihli bir makaledir: Philippe Flajolet, Paul Zimmermann ve Bruno Salvy tarafından algoritmaların otomatik ortalama durum analizi .

Daha sonraki yazıların bu çalışmayı uzatmasını beklerdim, ama gerçekten bilmiyorum. İş oldukça ağır bir şekilde atıfta bulunuldu ve web'de arama yapmak, aynı konuda daha yeni çalışmalar vermelidir.

Şimdi, Flajolet ve meslektaşlarının çalışmalarının çok matematiksel olduğundan korkuyorum ve çok kolay okuma beklemiyordum.

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.