Neyi ortalama?


15

Neyi ortalama?logO(1)n

Büyük-O notasyonunun farkındayım, ama bu notasyon benim için bir anlam ifade etmiyor. Ben de bu konuda bir şey bulamıyorum, çünkü bir arama motoru bunu doğru yorumlamak hiçbir yolu yoktur.

Biraz bağlam için, bulduğum cümle "[...] alanı kullanıyorsa ve çoğu zaman fonksiyonunu [verimli] olarak adlandırıyor madde başına."log O ( 1 ) nO(logn)logO(1)n


1
Ne anlama geldiği konusunda çok açık olmadığı (ve okuyucuya ne olduğunu söyleyemediği) ve aynı kuralları tutarlı bir şekilde kullanmadığı sürece, bunun gibi şeyler yazmaması gerektiğine katılıyorum.
Raphael

1
Evet, bunun yerine. (log(n))O(1)

1
@RickyDemer Raphael'in yaptığı şey bu değil. tam olarak anlamına gelir . ( log n ) b l a hlogblahn(logn)blah
David Richerby

4
@Raphael Bu alandaki standart gösterimdir. Bilen herkes bunun ne anlama geldiğini bilirdi.
Yuval Filmus

1
@YuvalFilmus Sanırım katılmıyorum cevapların çeşitliliği iddianızın yanlış olduğuna ve kişinin gerçekten böyle bir gösterimi kullanmaktan kaçınması gerektiğine dair kesin bir kanıt.
Raphael

Yanıtlar:


16

Bir an için " " nun yanlış yerde olduğu hissini göz ardı etmeli ve ne olursa olsun tanımla sabanlaman gerekir. f ( n ) = log O ( 1 ) n, orada sabit var olduğu anlamına gelir k ve n, 0 , herkes için, bu n n , 0 , .Of(n)=logO(1)nkn0nn0f(n)logk1n=logkn

Not o vasıta . Formun İşlevleri genellikle denir polylogarithmic ve demesini duyabilir " polylog olan  ."logkn(logn)klogO(1)nfn

Bunu kanıtlamak için kolay olduğunu göreceksiniz , çünkü herkes için , . olup olmadığını merak ediyor olabilirsiniz . Cevap evet, çünkü yeterince büyük , , bu yüzden yeterince büyük için  .2n=O(n)2nknn0k=22logn=logO(1)nnlogn22lognlog2nn

İlgili bir notta, genellikle polinomların olarak yazıldığını görürsünüz : aynı fikir.nO(1)


Bu, ortak yer tutucu sözleşmesi tarafından desteklenmemektedir.
Raphael

Yorumumu geri : tüm önemli yerlere yazıyorsunuz , bu yeterli.
Raphael

@Raphael Tamam. Henüz kontrol etmek için zamanım olmadı ama hislerim, nicelleştiricileri siparişimden farklı şekilde sipariş ediyor olabilirsiniz. Aslında aynı sınıfları tanımladığımızdan emin değilim.
David Richerby

Sanırım benim (2) yapıyorsun ve Tom c R > 0 { log c n } 'ı tanımlıyor . cR>0{logcn}
Raphael

9

Bu, genel olarak kabul edilen yer tutucu sözleşmesi tarafından anlaşılabilecek bir gösterimin kötüye kullanılmasıdır : bir Landau terimi bulduğunuzda , bunu (zihninizde veya kağıt üzerinde) rasgele bir işlev g O ( f ) .O(f)gO(f)

Yani bulursan

f(n)=logO(1)n

okuyacaksın

bazı g O ( 1 ) için log g ( n ) n .f(n)=logg(n)ngO(1).(1)

" Bazı sabitlerin gücüne " demenin farkına dikkat edin : g = n 1 / n belirgin bir olasılıktır.logg=n1/n

Uyarı: Yazar daha fazla gösterim kötüye kullanıyor olabilir ve okumanızı isteyebilir

bazı g O ( 1 ) .f(n)O(logg(n)n)gO(1).(2)

(1) ve (2) arasındaki farka dikkat edin; burada aynı pozitif değerli fonksiyonları tanımlamak için çalışırken, bu her zaman işe yaramaz. Dikkatsizce ifadelerde hareket etmeyin !O


3
Sanırım bunu işaretleyen şey, nin monotonik ve her sabit n için yeterince sezgisel olmasıdır . Monotonik, O eşdeğerini pozisyonlandırır ve size (2) ⇒ (1) verir; öbür tarafa gitmek, f ( n ) işlev aralığının dışındaysa başarısız olabilecek g'nin var olmasını gerektirir . O'nun etrafını hareket ettirmenin tehlikeli olduğunu ve “vahşi” işlevleri kapsamadığını belirtmek istiyorsanız , iyi, ancak bu özel durumda maliyetleri temsil eden işlevler için sorun değil. xlogx(n)nOgf(n)O
Gilles 'SO- kötü olmayı bırak'

@Gilles Bu ifadeyi genel bir uyarıyla zayıflattım.
Raphael

1
Bu cevap yoğun bir şekilde düzenlendi ve şimdi kafam karıştı: şimdi (1) ve (2) 'nin etkili bir şekilde aynı olduğunu iddia ediyor musunuz?
Oebele

@Oebele Görebildiğim kadarıyla, bunlar genel olarak değil, burada.
Raphael

Ancak, gibi bir şey eşleşmez (1) ama eşleşir (2) doğru mu? Yoksa şu an aptal mıyım? 3log2n
Oebele

6

Bu, fonksiyonun en fazla bir sabitin gücüne olarak büyüdüğü anlamına gelir , yani log 2 ( n ) veya log 5 ( n ) veya log 99999 ( n ) ...loglog2(n)log5(n)log99999(n)


Bu, fonksiyon büyümesinin sabit bir gücüyle sınırlandığı biliniyorsa , ancak belirli sabit bilinmediği veya belirtilmediğinde kullanılabilir. log
Yves Daoust

Bu, ortak yer tutucu sözleşmesi tarafından desteklenmemektedir.
Raphael

2

"En fazla " , ölçülen şeyin O ( log c n ) olacağı şekilde sabit bir c olduğu anlamına gelir .logO(1)ncO(logcn)

Daha genel bir bağlamda, vardır (muhtemelen negatif) ifadesine eşdeğer sabiteleri a ve b bu şekilde f ( n ) O ( log bir n ) ve f ( n ) Ω ( log b n ) .f(n)logO(1)nabf(n)O(logan)f(n)Ω(logbn)

alt sınırını gözden kaçırmak kolaydır . Bunun önemli olacağı bir ortamda (yalnızca asimptotik büyümeyi çalışmakla ilgileniyorsanız çok nadir olurdu ), yazarın aslında alt sınır anlamına geldiğine ve bağlamına güvenmek zorunda olacağına dair tam güveniniz olmamalıdır . emin olmak.Ω(logbn)


Gösterim gerçek anlamı, işlevler ailesi üzerinde aritmetik yapmaktır ve g ( n ) n tüm işlevler günlüğü ailesiyle sonuçlanır , burada g ( n ) O ( 1 ) . Olarak hemen hemen aynı olarak, bunun nasıl çarparak O ( g ( n ) ) ile h ( n ) ile sonuçlanır , O ( g ( n ), h (logO(1)nlogg(n)ng(n)O(1)O(g(n))h(n) , ancak bu kadar basit bir şekilde ifade edilmeyen bir sonuç elde etmeniz dışında.O(g(n)h(n))


Alt sınır ayrıntıları yana olan muhtemelen yabancı ülkesinde, 's değerinde bazı counterexamples bakarak. Herhangi bir büyüklüğünün sınırlı olduğunu hatırlayın ; öyle bir sabit c ki öyle ki, herkes için yeterince büyük n , | g ( n ) | < c .g(n)O(1)cn|g(n)|<c

Asimptotik büyümeye bakıldığında , genellikle sadece üst sınır önemlidir, çünkü örneğin, fonksiyonun pozitif olduğunu zaten biliyorsunuzdur. Bununla birlikte, tam genel olarak, alt sınır g ( n ) > - c'ye dikkat etmeniz gerekir .g(n)<cg(n)>c

Bu, büyük-oh notasyonunun daha tipik kullanımlarının aksine, çok hızlı azalan fonksiyonların başarısız olabileceği anlamına gelir ; örneğin, 1logO(1)n çünkü -logn

1n=log(logn)/(loglogn)nlogO(1)n
Buradaki üs,O(1)ile sınırlanmak için çok hızlı büyür.
lognloglognO(1)
O(1)

Biraz farklı bir türden bir karşı-olduğunu .1logO(1)n


Sadece alıp iddia ettiğiniz alt sınırınızı ortadan kaldıramaz mıyım ? b=0
David Richerby

1
@DavidRicherby Hayır, hala f'nin aşağıda sınırlandırıldığını söylüyor . Hurkyl: değil neden f ( n ) = 1 / n de günlük O ( 1 ) , n ? b=0ff(n)=1/nlogO(1)n
Gilles 'SO- kötü olmayı bırak'

@Gilles: Daha fazla içerik eklendi!

@Gilles Tamam, elbette, aşağıda 1 ile sınırlıdır. CS'deki Landau notasyonunun "çoğu" uygulamaları için hiç bir sınırlama yoktur.
David Richerby

1) " etrafında hareket et" kuralınız her zaman işe yaramaz ve "en fazla" nın genellikle bu anlama geldiğini düşünmüyorum; sadece gereksiz. 2) O asla alt sınır anlamına gelmez. O zaman Θ kullanırsınız . 3) Negatif fonksiyonların belirli bir O tanımıyla (gösterimi kötüye kullanmasa bile) ele alıp almadığı ve nasıl ele alındığı evrensel olarak açık değildir. Çoğu tanım (algoritmaların analizinde) bunları hariç tutar. Mutlak değeri sınırlayan bir tanım var gibi görünüyor, ki bu iyi. OOΘO
Raphael
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.