Çalışma zamanı sınırlarında ters Ackermann'dan daha yavaş büyüme gösteren işlevler görünüyor mu?


20

Bazı karmaşık algoritmalar ( birleşim bulma ), asimptotik zaman karmaşıklığında görünen neredeyse sabit ters Ackermann fonksiyonuna sahiptir ve neredeyse sabit ters Ackermann terimi göz ardı edilirse en kötü zaman optimumdur.

Ters Ackermann'dan temelde daha yavaş büyüyen fonksiyonları içeren çalışma sürelerine sahip bilinen algoritma örnekleri var mı (örneğin, en iyi bilinen en kötü zamanı veren Ackermann'a eşdeğer olmayan fonksiyonların tersi). altta yatan problemi çözmek için karmaşıklık?


2
O(1) zaman algoritmaları? Bilinen en iyi algoritması ω(1) ve o (\ alpha (n)) olan bilinen bir problem mi soruyorsunuz o(α(n))? İlk önce AĞA (n) gibi A (n) 'den "temelde daha hızlı" büyüyen bir işlev bulmalı ve sonra tersini almalı ve sonra ona uyan bir problem bulmalısın! A(n)(n)
Pål GD


2
@vzn: Herhangi bir f(n)=o(n) zamanla yapılandırılamaz ( α(n) ). Dolayısıyla zaman hiyerarşisi teoremi burada kullanılamaz.
mdxn

mdx birisi bunu işaret etti sevindim, sadece göz kırpıyor test. evet son zamanlarda sub- o(n) fonksiyonlar için zaman hiyerarşisinin genelleştirilmesinin olabileceğini düşünüyordu . ama yine de o(n) sınırı, zamanla yapılandırılabilir bir TM'nin tüm girdiyi okuması gerektiğidir, ancak bu diğer algoritmaları örneğin ters Ackermann zaman karmaşıklığı ile söylemiyoruz mu? görselleştirmekte sorun yaşıyorum! sorunun sub- o(n) dillerin varlığıyla ilgili olduğunu hissediyorum .... bir yerde bir tür anket veya açıklama olabilir ....
vzn

1
@vzn: OP'nin akıllarında hangi hesaplama modeline sahip olduklarını netleştirmesi gerekiyor. DLOGTIME ve LH rastgele erişimli TM'lerde (veya eşdeğerlerinde) tanımlanmalıdır. Mekaniklerimizi belirlerken, yanlışlıkla çok fazla güç ekleyebiliriz. Hatta hesaplama karmaşıklığı kavramının verimli olmadığı ölçüde olabilir. En temel terimlerle, zaman karmaşıklığı kavramımızı (itfa edilmiş çalışma zamanının yaptığı şey), böyle bir tanımın çok çelişebilme riskiyle (hesaplama modeli için de geçerlidir) değiştirmemiz gerekir.
mdxn

Yanıtlar:


8

Seth Pettie ile geldi hesaplanması için bir algoritma duyarlılığı ağaç kapsayan en az bir zaman içinde iyileştirilmesi, Tarjan bir algoritma zaman aynı hesaplar . (Bunu , minimum yayılan ağacın kendisini hesaplamak için Chazelle'nin algoritmasıyla karşılaştırın .) Hassasiyet sorunu, belirli bir grafik ve belirli bir minimum yayılan ağaç için her kenar ağırlığının ne kadarını hesaplamanızı ister minimum yayılma ağacını değiştirmeden değişebilir.O ( m α ( m , n ) ) O ( m α ( m , n ) )O(mlogα(m,n))O(mα(m,n))O(mα(m,n))

(Bu referans için Tsvi Kopelowitz'e teşekkürler.)


1
Giriş ters Ackermann'ın ters Ackermann'dan "temelde daha yavaş" olup olmadığını bilmiyorum, ancak bu tür bir çalışma süresini şaşırtıcı buldum.
Yuval Filmus


-1

Alan Turing bilgisayarı keşfettiğinde, önerilen bilgisayar için birkaç model vardı. Turing, bu modellerin bazılarının (3) birbirini simüle edebileceğini ve Ackermann işlevini hesaplayabildiğini kanıtlarken, diğer modeller Ackermann işlevini değil simüle edebilir (böylece 3'ü simüle edemediler). Bu nedenle, bu 3 model (Turing Machine, von Neumann ve bilmediğim) bir bilgisayar mimarisi olarak seçildi. Bu, Ackermann işlevinin bilgisayarın sınırı olduğu anlamına gelmez, ancak sanırım zor bilimdir. Ackermann fonksiyonundan daha hızlı büyüyen herhangi bir hesaplanabilir fonksiyonun farkında değilim.

Şimdi, sorunuzla eşleşen pratik bir sorun olduğunu düşünmüyorum, ama belki de bir tane oluşturabiliriz. Yine de girdiye kısıtlamalar koymamız gerekiyor. O (n) kullanamadığımız için tüm girdiyi kontrol edemeyiz. Aslında, girişin uzunluğunu O (log n) olacağı için bile kontrol edemeyiz. Bu nedenle, ilk parametre olarak, girişin geri kalanının uzunluğunun, örneğin Ackermann'ın (c) girişin uzunluğu olacağı şekilde bir temsiline ihtiyacımız var. Bu da uygun olmadığından, giriş parametremizde ilk değer olarak c parametresini istiyoruz, öyle ki bb (c) girişin uzunluğu hakkındadır, burada bb meşgul kunduz işlevidir. Bu işlev tutarsızdır ancak bb (c) kesinlikle vardır. Sonra algoritma şöyle gider:

for (int i=0; i<c; i++) {
    if (input[i] == null) {
        return false;
    }
}
return true;

Algoritmanın amacı, c'nin bb'nin tersi olması durumunda, giriş uzunluğunun bb (c) 'den büyük olup olmadığını kontrol etmektir.

Ackermann işlevinden daha hızlı büyüyen hesaplanabilir bir işlev varsa, herhangi bir girdide sorunuzu cevaplayan bir algoritma oluşturmak için tersini kullanabileceğimizi düşünüyorum.


Yorumlarda belirtildiği gibi Ackermann işlevinden daha hızlı büyüyen işlevler kesinlikle vardır (AĞAÇ (n)). Sorunun zor kısmı, bu işlevin tersine çalışma zamanı sınırına sahip bir algoritma oluşturmaktır. Böyle bir makine, ilk etapta fonksiyonun tersini hesaplamak için yeterli zamana sahip değildir, bu nedenle bunu başaran bir TM'nin inşası doğrudan ileri değildir.
mdxn
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.