Ký hiệu O lớn lồng nhau


8

Hãy nói rằng tôi có một biểu đồvới các cạnh . Tôi muốn chạy BFS trên có thời gian chạy .|G||E|=O(V2)GO(V+E)

Cảm thấy tự nhiên khi viết rằng thời gian chạy trên biểu đồ này sẽ là và sau đó đơn giản hóa thành .O(O(V2)+V)O(V2)

Có bất kỳ cạm bẫy nào khi sử dụng phím tắt "remove-the-Nested-O" như vậy (không chỉ trong trường hợp này, mà nói chung hơn)?


4
Nếu bạn làm việc theo định nghĩa của big-O, bạn sẽ thấy Os lồng nhau là tự nhiên và dự phòng, và quy tắc bỏ O bên trong là chính xác.
Dave Clarke

Vì V ở trong O (V ^ 2) Tôi đoán bạn có thể thay thế O (V ^ 2) bằng V nếu bạn không biết bạn đang làm gì?
Mèo Unun

3
Nếu bạn không biết những gì bạn đang làm, bạn có thể làm những điều sai tùy tiện.
Dave Clarke

4
Thật. = không = ở vùng đất lớn.
Dave Clarke

3
Xem thêm câu hỏi xuất sắc này về math.SE about = trong ký hiệu Landau.
Raphael

Câu trả lời:


14

Hãy để tôi bắt đầu với một lời khuyên: hãy đối xử với ký hiệu Landau giống như bạn (nên) đối xử làm tròn số: vòng hiếm khi, vòng muộn. Nếu bạn biết một cái gì đó chính xác hơn , Hãy sử dụng nó cho đến khi bạn hoàn thành tất cả các tính toán và Landauify ở cuối.O(.)


Đối với câu hỏi, chúng ta hãy tìm hiểu về sự lạm dụng ký hiệu này¹. Làm thế nào chúng ta sẽ giải thích một cái gì đó như ? Chúng ta nên thay thế O với định nghĩa của nó từ trong ra ngoài. Vì vậy, chúng tôi nhận đượchO(f+O(g))O

gO(g).hO(f+g)

và sau đó

gO(g).d>0.n.h(n)d(f(n)+g(n))

tương đương với

.c>0.d>0.n.h(n)d(f(n)+cg(n))

Như chắc chắn² , chúng tôi thấy rằng điều này tương đương với h O ( f + g ) ; dù sao thì việc mất độ chính xác cũng bị O bỏ qua .d(f(n)+cg(n))cd(f(n)+g(n))hO(f+g)O


Thế còn kết hợp khác, nói ? Nếu chúng ta thử tương tự ở đây, chúng ta sẽ nhận đượchO(f+Ω(g))

.gΩ(g).hO(f+g)

Nhưng đây là một tautology: chắc chắn bị giới hạn ở trên bởi một cái gì đó lớn tùy ý. Vì vậy, kết hợp giới hạn trên và dưới trong thời trang này là không có ý nghĩa.h


  1. Và các biểu tượng Landau khác ánh xạ các hàm chức năng. Cho nó một lớp chức năng không có ý nghĩa ngay lập tức.O(.)
  2. Ít nhất nếu chúng ta chỉ xem xét các chức năng tích cực, mà chúng ta có thể giả định một cách an toàn khi nói về thời gian chạy. Tôi không chắc chắn điều này hoạt động nói chung.

2

Tôi chỉ muốn thêm điều này bởi vì gần đây tôi đã gặp nó. Mặc dù lối tắt này vẫn ổn với phép cộng và phép nhân (khi không trộn với Ω ; xem câu trả lời được chấp nhận), phải cẩn thận khi sử dụng số mũ. Ví dụ: O ( n O ( m ) ) O ( n m ) . Trong ví dụ này, n 2 m thuộc về lớp thứ nhất nhưng không thuộc về lớp thứ hai.OΩ

O(nO(m))O(nm).
n2m

1

O(g)

Định nghĩa của ký hiệu O

O(g)={f|c>0x0>0x>x0:|f(x)|c|g(x)|}

Lỗi lầm

O(O(n)+k)O(n)

Phiên bản chính xác

O(m+k),mO(n)


2
Có, nhưng ký hiệu Landau thường bị lạm dụng vì mục đích sử dụng (bị cáo buộc) dễ sử dụng, vì vậy chúng tôi đảm bảo rằng mọi người đều hiểu điều tương tự. Xem ở đây cho một cách tiếp cận có cấu trúc.
Raphael

0

OÔif(n)g(n)

(1).nm=O(nm),mm(3).f(n)=O(f(n))(5).O(O(f(n)))=O(f(n))(4).cO(f(n))=O(f(n))(2).O(f(n))+O(g(n))=O(f(n)+g(n))(6).O(f(n))O(g(n))=O(f(n)g(n))=f(n)O(g(n))

f(n)O

O+×

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.