Những gì hiện


15

Những gì hiện logO(1)n trung bình?

Tôi biết về ký hiệu big-O, nhưng ký hiệu này không có ý nghĩa với tôi. Tôi cũng không thể tìm thấy bất cứ điều gì về nó, bởi vì không có cách nào công cụ tìm kiếm diễn giải điều này một cách chính xác.

Đối với một chút bối cảnh, câu mà tôi tìm thấy nó đọc "[...] chúng ta gọi một hàm [hiệu quả] nếu nó sử dụng không gian và nhiều nhất là log O ( 1 ) n cho mỗi mục."O(logn)logO(1)n


1
Tôi đồng ý rằng người ta không nên viết những thứ như thế này, trừ khi người ta rất rõ ràng về ý nghĩa của nó (và nói với người đọc đó là gì) và sử dụng nó cùng một quy tắc một cách nhất quán.
Raphael

1
Vâng, người ta nên viết nó như là (log(n))O(1).

1
@RickyDemer Đó không phải là điểm mà Raphael đang thực hiện. có nghĩa là chính xác ( log n ) b l a h . logblahn(logn)blah
David Richerby

4
@Raphael Đây là ký hiệu chuẩn trong lĩnh vực này. Bất cứ ai trong biết đều biết ý nghĩa của nó.
Yuval Filmus

1
@YuvalFilmus Tôi nghĩ rằng nhiều câu trả lời không đồng ý là bằng chứng thuyết phục cho thấy yêu cầu của bạn là sai và người ta thực sự không nên sử dụng ký hiệu đó.
Raphael

Câu trả lời:


16

Bạn cần bỏ qua một lúc cảm giác mạnh mẽ rằng chữ " " ở sai vị trí và tiếp tục với định nghĩa bất kể. f ( n ) = log O ( 1 ) n phương tiện đó có tồn tại các hằng số kn 0 như vậy mà, cho tất cả n n 0 , f ( n ) log k 1 n = log kOf(n)=logO(1)nkn0nn0 .f(n)logk1n=logkn

Lưu ý rằng có nghĩa là ( log n ) k . Các hàm của biểu mẫu nhật ký O ( 1 ) n thường được gọi là polylogarithmic và bạn có thể nghe người ta nói, " f là polylog  n ."logkn(logn)klogO(1)nfn

Bạn sẽ nhận thấy rằng thật dễ dàng để chứng minh rằng , vì 2 n k n với mọi n 0 , trong đó k = 2 . Bạn có thể tự hỏi nếu 2 log n = log O ( 1 ) n . Câu trả lời là có bởi vì, cho đủ lớn n , log n 2 , vì vậy 2 log n log 22n=O(n)2nknn0k=22logn=logO(1)nnlogn2 cho đủ lớn 2lognlog2n .n

Trên một lưu ý liên quan, bạn sẽ thường thấy các đa thức được viết là : cùng một ý tưởng.nO(1)


Điều này không được hỗ trợ bởi quy ước giữ chỗ chung.
Raphael

Tôi rút lại lời nhận xét của tôi: bạn viết ở tất cả các nơi quan trọng, đó là đủ.
Raphael

@Raphael OK. Tôi chưa có thời gian để kiểm tra nhưng cảm giác của tôi là bạn có thể đang đặt hàng các bộ lượng hóa khác với cách tôi đang làm. Tôi thực sự không chắc chắn chúng ta đang xác định cùng một lớp chức năng.
David Richerby

Tôi nghĩ rằng bạn đang xác định của tôi (2), và Tom định nghĩa . cR>0{logcn}
Raphael

9

Đây là sự lạm dụng ký hiệu có thể được hiểu theo quy ước giữ chỗ thường được chấp nhận : bất cứ khi nào bạn tìm thấy một thuật ngữ Landau , hãy thay thế nó (trong tâm trí của bạn hoặc trên giấy) bằng một hàm tùy ý g O ( f ) .O(f)gO(f)

Vì vậy, nếu bạn tìm thấy

f(n)=logO(1)n

bạn phải đọc

với một số g O ( 1 ) .f(n)=logg(n)ngO(1).(1)

Lưu ý sự khác biệt từ nói " với sức mạnh của một số liên tục": g = n 1 / n là một khả năng riêng biệt.logg=n1/n

Cảnh báo: Tác giả có thể đang sử dụng nhiều lạm dụng ký hiệu và muốn bạn đọc

đối với một số g O ( 1 ) .f(n)O(logg(n)n)gO(1).(2)

Note the difference between (1) and (2); while it works out to define the same set of positive-valued functions here, this does not always work. Do not move O around in expressions without care!


3
I think what makes it tick is that xlogx(n) is monotonic and sufficiently surjective for each fixed n. Monotonic makes the position of the O equivalent and gives you (2) ⇒ (1); going the other way requires g to exist which could fail if f(n) is outside the range of the function. If you want to point out that moving O around is dangerous and doesn't cover “wild” functions, fine, but in this specific case it's ok for the kind of functions that represent costs.
Gilles 'SO- stop being evil'

@Gilles I weakened the statement to a general warning.
Raphael

1
This answer has been heavily edited, and now I am confused: do you now claim that (1) and (2) are effectively the same?
Oebele

@Oebele As far as I can tell, they are not in general, but here.
Raphael

But, something like 3log2n does not match (1) but does match (2) right? or am I just being silly now?
Oebele

6

It means that the function grows at most as log to the power of some constant, i.e. log2(n) or log5(n) or log99999(n)...


This can be used when the function growth is known to be bounded by some constant power of the log, but the particular constant is unknown or left unspecified.
Yves Daoust

This is not supported by the common placeholder convention.
Raphael

2

"At most logO(1)n" means that there is a constant c such that what is being measured is O(logcn).

In a more general context, f(n)logO(1)n is equivalent to the statement that there exists (possibly negative) constants a and b such that f(n)O(logan) and f(n)Ω(logbn).

It is easy to overlook the Ω(logbn) lower bound. In a setting where that would matter (which would be very uncommon if you're exclusively interested in studying asymptotic growth), you shouldn't have complete confidence that the author actually meant the lower bound, and would have to rely on the context to make sure.


The literal meaning of the notation logO(1)n is doing arithmetic on the family of functions, resulting in the family of all functions logg(n)n, where g(n)O(1). This works in pretty much the same as how multiplying O(g(n)) by h(n) results in O(g(n)h(n)), except that you get a result that isn't expressed so simply.


Since the details of the lower bound are in probably unfamiliar territory, it's worth looking at some counterexamples. Recall that any g(n)O(1) is bounded in magnitude; that there is a constant c such that for all sufficiently large n, |g(n)|<c.

When looking at asymptotic growth, usually only the upper bound g(n)<c matters, since, e.g., you already know the function is positive. However, in full generality you have to pay attention to the lower bound g(n)>c.

This means, contrary to more typical uses of big-oh notation, functions that decrease too rapidly can fail to be in logO(1)n; for example,

1n=log(logn)/(loglogn)nlogO(1)n
because
lognloglognO(1)
The exponent here grows in magnitude too rapidly to be bounded by O(1).

A counterexample of a somewhat different sort is that 1logO(1)n.


Can't I just take b=0 and make your claimed lower bound go away?
David Richerby

1
@DavidRicherby No, b=0 still says that f is bounded below. Hurkyl: why isn't f(n)=1/n in logO(1)n?
Gilles 'SO- stop being evil'

@Gilles: More content added!

@Gilles OK, sure, it's bounded below by 1. Which is no bound at all for "most" applications of Landau notation in CS.
David Richerby

1) Your "move around O" rule does not always work, and I don't think "at most" usually has that meaning; it's just redundant. 2) Never does O imply a lower bound. That's when you use Θ. 3) If and how negative functions are dealt with by a given definition of O (even without abuse of notation) is not universally clear. Most definitions (in analysis of algorithms) exclude them. You seem to assume a definition that bounds the absolute value, which is fine.
Raphael
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.