Bu fonksiyon neden hesaplanabilir


10

Ders kitabım şöyle diyor: "İşlevi tanımlarız f:NN aşağıdaki gibi: f(1)=2 ve f(i+1)=2f(i)1.2. Verilen notn, kolayca bulabiliriz O(n1.5) zaman numarası i öyle ki n arasında sandviç f(i) ve f(i+1)."

Kendimi aslında kolayca bulabileceğimize nasıl ikna edebilirim i içinde O(n1.5)Zaman? Gibif özyinelemeli olarak tanımlanır, bence hesaplamak zorundayız f(1),f(2),f(3)f(j) a kadar f(j)n. Bu hesaplamaların ne kadar zaman alacağını bulmak için, bence uygun bir üst sınır bulmak zorundayız.i bağımlı n ve işlevin yürütme süresinde bir üst sınır bulmalıyız x2x1.2. Sonunda, umarım alıntılanan teklifi gösterebiliriz. Ne yazık ki, ne bir şey ne de diğeri görmüyorum.

Söylemeyi unuttum: Belirsiz bir bağlamda olduğumuzu lütfen unutmayın. Yanif hesaplanabilir olduğu iddia ediliyor O(n1.5) Belirsiz bir Turing makinesi tarafından.


Çok az insan bu soruyu zaten okuduğundan, bazıları da yararlı ve ilginç buluyor, ancak kimse şimdiye kadar cevaplamadı, bağlam hakkında biraz daha bilgi vermek istiyorum: Alıntılanan iddia, kanıtın ayrılmaz bir parçasıdır. belirleyici olmayan zaman hiyerarşisi teoremi. Kanıt (iddia ile) örneğin Arora ve Barak'ın kitabında bulunabilir, ancak aynı kanıtı sunan Web'de de birkaç kaynak buldum. Bunların her biri iddiayı kolay veya önemsiz olarak nitelendirir ve nasıl bulunacağı konusunda ayrıntılı bilgi vermezi içinde O(n1.5)saati. Yani ya tüm bu kaynaklar Arora ve Barak'dan kopyalandı ya da iddia o kadar da zor değil.


1
Bu, Arora ve Barak'daki belirsiz zaman hiyerarşisi teorem kanıtı gibi görünüyor, değil mi? Eğer öyleyse, belirsizliğin burada bir rol oynadığını varsayıyorum.
G. Bach

Haklısın. Bunun için üzgünüm, belirsiz olmayan bağlamdan bahsetmeliydim. Belirsizliğin O (n ^ 1.5) sınırını göstermemize nasıl yardımcı olduğunu daha ayrıntılı olarak açıklayabilir misiniz?
user1494080

Yanıtlar:


4

Gösteren: |x| bir sayının uzunluğu x, yani log2x+1 (için x>0). Hesaplanıyor2x zaman gerektirir O(x) RAM modelinde, ve böylece f(i+1) itibaren f(i) zaman alır O(f(i)1.2)=O(|f(i+1)|). Dan berif(i) geometrik olarak daha hızlı büyüyor, toplam hesaplama süresi f(i+1) dır-dir O(|f(i+1)|). İşaret ettiğiniz gibi, bunu yapmanız gerekirf(i+1)nyani f(i)<n. Bu nedenle toplam çalışma süresiO(|f(i+1)|)=O(f(i)1.2)=O(n1.2).

Turing makinesi modelinde tek bir bantla, hesaplama 2x zaman alır O(xlogx)ve böylece toplam çalışma süresi O(n1.2logn)=O(n1.5). Hesaplama algoritması2x cümledeki [x] tarafından 1[[x]] (buraya [x] ikili temsili x, ve [[x]] farklı rakamları kullanan ikili gösterimdir 0,1) ve daha sonra dönüşümü tekrar tekrar çalıştırır [[x]]0[[x1]], bu zaman alır O(|x|)=O(logx).


Mükemmel teşekkürler! Bir soru daha: | f (i) | f'den daha hızlı büyür f (i) geometrik olarak daha hızlı büyür?
user1494080

Dan beri |f(i+1)|=f(i)1.2, aynı şey, ama haklısın. Gerçekten istediğimiz şeyji|f(j)|=O(|f(i)|).
Yuval Filmus
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.