Biz hesaplayabilir


11

Sorun için etkili bir algoritma arıyorum:

Giriş : Pozitif tamsayı 3n (bit olarak saklanır) bazı tamsayısı için 0n0 .

Çıktı : sayısı n.

Soru : Biz hesaplayabilir n parçaları nedeniyle 3n içinde O(n) zaman?


Bu, bir matematiğe cevabımın motive ettiği teorik bir sorudur.SE sorusu Bu bağlanma için bir formül nasıl bulunur? . Bu soruda yazar,

{2n3m:n0 and m0}
ve doğal sayılarından bir bijection bulmak istedi N={1,2,}. 2 m 3 n2 m önerdim ( 2 n + 1 )
2m3n2m(2n+1)
bir çözüm olarak. Oradaki bir başka cevap da "basit bir formül yok" olduğunu öne sürdü, bu da benim önerdiğim çözümün ne kadar basit olduğunu (hesaplama olarak) merak ediyor.

Önerdiğim çözüm sayesinde bildiğimiz, eğer ve m , kolayca hesaplayabilir 2 m ( 2 n + 1 ) (ikili sayıyı yazmak n ardından 1 takiben m sıfır). Bu O ( n + m ) zaman alır.nm2m(2n+1)n1mO(n+m)

m2m3n3nO(m)

nn3nO(n)O(n2)O(n2)

3


2
O(1)log23

3
Downvoter downvote'u açıklayabilir mi? Hiç de önemsiz bir soru gibi görünmüyor. Bazı makul hesaplama modelleri altında en iyi çalışma süresi nedir?
Yuval Filmus

1
O(1)

Bir şekilde bu soru
J.-E.

Ω(n)

Yanıtlar:


9

Açık yaklaşım:

log2(3n)ϵO(log1ϵ)ϵ1/2

log2(3)O(logn)

(3) Cevabı (1) 'e (2) cevabına bölün ve en yakın tam sayıya yuvarlayın.

Bu nedenle ilk adım doğrusal zaman alır (çoğu hesaplama modelinde, tek kafalı Turing makineleri gibi bazı güçsüz olanlar için olmasa da ) ve kalan adımlar polilogaritmik olmalıdır.


3
log2(3)tO(M(t)logt)M(t)O(tlogt2logt)t

Referans için teşekkürler ve kendime bakmak için çok tembel olduğun için özür dilerim.
David Eppstein

9

n>03nL=log2(3n)+1

L2log23nL1log23.
L13L
n=L1log23.

4

k3n3nmod10k3nmod5k35k3φ(5k)=5k1×4

Bu nedenle, ayrık günlük ve Hensel kaldırma kullanarak , düşük basamaklarından çok verimli bir şekilde hesaplayabilmeniz gerektiğini düşünüyorum . Başka bir deyişle, düşük basamağından hesaplanarak , ayrık günlüğünü baz , modulo alarak ; bu ve zamanında yapılabilir. Daha sonra, ayrık günlüğünü , modulo tabanına ; bu venmodφ(5k)k3nnmod43n3nmod535nmod4O(1)3nmod25e25nmod20O(1) zaman ( bilgisinden faydalanarak, denemeniz gereken sadece olasılık vardır ). Uygulayın. Her adımda, ayrık günlüğünü etkili bir şekilde hesaplamanıza yardımcı olmak için bilgisini kullanırsınız. için olası değer .nmod45nmodφ(5k1)3nmod5kn mod φ ( 5 k )5nmodφ(5k)

Şimdi yeterince büyük olmasına izin verin ve bu .nkn

Çalışma süresinin olup olmadığını bulmanız gerekir , ancak bana öyle görünebilir. e izin yeterli olduğundan şüpheliyim ve her bir yinelemeyi sürede, toplam süre boyunca yapabileceğinizden şüpheleniyorum .k = O ( n ) O ( 1 ) O ( n )O(n)k=O(n)O(1)O(n)

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.