O trong Big O là gì?


23

Big và O trong ký hiệu Big O là gì? Tôi đã đọc các định nghĩa và nó không cho biết O được phát âm là 'oh'. Ví dụ - Tôi hiểu rằng O (n) là độ phức tạp của thuật toán tuyến tính trong đó n có thể là số lượng các phép toán. nhưng chữ O là gì?


13
Đây là chữ cái thứ 15 của bảng chữ cái tiếng Anh. Đây cũng là chữ cái thứ 15 trong bảng chữ cái Hy Lạp.
Joel Etherton

1
Chỉ cần làm rõ: Bạn đang tìm lý do tại sao O là biểu tượng được sử dụng (thay vì Q hoặc E hoặc một cái gì khác), và nếu có, O có ý nghĩa gì hơn các ký hiệu khác?
Thất vọngWithFormsDesigner

6
@Joel: Thật ra, đó là Omicron, và đó là manh mối về lý do tại sao bức thư đặc biệt này được chọn.
Jörg W Mittag

câu trả lời này bác bỏ (chính xác, tôi nghĩ) lý thuyết Omicron.
Hawkeye Parker

Câu trả lời:


31

Chà, dự đoán của tôi sẽ là thứ tự, trùng khớp với wikipedia .

Chỉnh sửa: (bản thân tôi (bất kỳ cải tiến nào được đánh giá cao)) bản dịch từ bài viết trên wikipedia của Đức

Chữ in hoa chữ O (thực ra là chữ viết hoa vào thời điểm đó) như là một biểu tượng cho thứ tự (tiếng Đức: "Ordnung von") lần đầu tiên được sử dụng bởi nhà lý thuyết số Đức Paul Bachman trong số thứ hai của cuốn sách về lý thuyết số phân tích của ông xuất hiện vào năm 1894. Ký hiệu này đã trở nên phổ biến do công trình của Edmund Landau, một nhà lý thuyết số người Đức khác, người mà danh pháp này được liên kết rộng rãi với ngày nay, đặc biệt là trong thuật ngữ tiếng Đức.


5
Mặc dù nó có thể là trường hợp mà nhiều nhà toán học đã đề cập đến nó như vậy, nhưng ban đầu nó không phải như vậy. Nếu bạn đọc sách lý thuyết số từ đầu thế kỷ 20, bạn sẽ không tìm thấy lời giải thích nào như vậy. Đó là những gì nó được và tôi không thể đọc tiếng Đức để tìm hiểu suy nghĩ của anh ấy về ký hiệu.
Jonathan Henson

1
@Jonathan: Đăng cập nhật.
back2dos

Rất đẹp! Tôi đã xem tất cả các cuốn sách lý thuyết số của mình và tôi không thể tìm thấy lời giải thích về O ở bất cứ đâu. +1
Jonathan Henson

2
Tôi đã luôn luôn phát âm nó theo thứ tự như chỉ nói O không có nghĩa gì nhiều.
Newtopian

16

"Lớn" có nghĩa là "vốn" và "O" có nghĩa là trật tự, như "thứ tự phức tạp". Vì vậy, được đặt tên vì quy ước viết "thứ tự phức tạp" là O (f (x)), ví dụ, với chữ in hoa 'O' hoặc 'Big O'. Không ai nói về nó nhiều vì 'mọi người' hiểu ý nghĩa của nó và hiểu nó không thực sự giúp bạn hiểu phân tích phức tạp.

Để hiểu về phân tích phức tạp, tôi nghĩ rằng liên kết được đăng bởi topgun_ivard là một nơi tốt để bắt đầu. Một cuốn sách giáo khoa giới thiệu tốt bao gồm các cấu trúc dữ liệu hoặc thuật toán cũng có thể giúp ích.


5
Tôi xin lỗi, nhưng ký hiệu Bachmann-Landau được phát minh bởi một nhà toán học người Đức, vì vậy tôi khó nghĩ rằng anh ta sẽ đặt tên nó theo một từ tiếng Anh. Trên thực tế, ngay cả khi nó được phát minh bởi một nhà toán học người Mỹ, thì nó vẫn có thể được đặt theo tên của một từ tiếng Đức, bởi vì khi nó được phát minh (khoảng năm 1920, tôi nghĩ), ngôn ngữ toán học quốc tế là tiếng Đức. Thêm vào đó, nó không thậm chí từ xa có bất cứ điều gì để làm với độ phức tạp.
Jörg W Mittag

1
@ Jörg: Có, nhưng đó không phải là Ordnung , mà bài viết wiki của Đức tuyên bố là nguồn gốc: de.wikipedia.org/wiki/Landau-Symbole#Geschichte
back2dos

1
@Ethel bạn có thể thay đổi nhỏ bài viết của mình để tôi có thể bình chọn cho bạn không? Bạn thực sự đúng. Bạn phải chỉnh sửa trước khi tôi có thể bỏ phiếu.
Jonathan Henson

1
@Jonathan, tôi không chắc chính xác những thay đổi nhỏ bạn muốn. Bạn có thể đi trước và thực hiện chỉnh sửa bạn muốn? Hoặc, chúng ta chỉ có thể để câu trả lời của back2dos, có vẻ như anh ta có thể đã kết thúc với câu trả lời tốt nhất dù sao do một số nghiên cứu xuất sắc :)
Ethel Evans

1
Hừm, thú vị. Ở Thụy Điển, Big Oh thường được gọi là "ordo" (tiếng Latin nghĩa là, tốt, trật tự) chứ không phải là "phong chức" (từ tiếng Thụy Điển cho đơn đặt hàng).
Vatine

11

O là viết tắt của trật tự.

Nó ban đầu được giới thiệu bởi nhà toán học người Đức Paul Bachmann trong tập thứ hai của cuốn sách về lý thuyết số Die Phân tích Zahlentheorie , xuất bản năm 1894 (trang 401) . Ông lưu ý, sau một công thức đầu tiên ông sử dụng ký hiệu:

(...) Wenn wir durch das Zeichen O (n) einde Grösse ausdrücken, deren Ordnung trong Bezug auf n die Ordnung von n nicht überschreitet (...)

Bản dịch của tôi:

(...) trong đó với ký hiệu O (n), chúng tôi chỉ ra cường độ mà thứ tự có tham chiếu đến n không vượt quá thứ tự của n (...)

Trái ngược với những gì người khác đã nói, không có gì trong văn bản của ông chỉ ra rằng đây thực tế là một omikron thủ đô của Hy Lạp. Anh ta sử dụng nhiều ký tự Hy Lạp và Latinh, vì vậy thực sự không có cách nào để nói. Với việc ông tiếp tục sử dụng "Ordnung n log n ", v.v. trong văn bản, rõ ràng nó là viết tắt của "Ordnung" (tiếng Đức nghĩa là "đặt hàng" nếu có bất kỳ nghi ngờ nào), nhưng vẫn có thể bỏ ngỏ việc sử dụng một O. Hy Lạp ưa thích

Tuy nhiên, nguồn gốc của omikron có nhiều khả năng một retronym do Donald Knuth đã giới thiệu những biểu tượng omega (Ω) và theta (Θ) cho các khái niệm có liên quan trong bài báo của mình Big Omicron và Big Omega và Big Theta , hoặc có thể Hardy và Littlewood người đã giới thiệu một biểu tượng omega trước đó.


2
Hấp dẫn. Tôi cho rằng bạn đúng. Tôi chỉ tra cứu các định nghĩa trong cả hai cuốn sách của Landau và Bachmann, và họ thực sự a) sử dụng tiếng Latin Oh, không phải tiếng Omikron của Hy Lạp, b) cả hai đều sử dụng từ "Ordnung" và c) Landau nói rõ rằng nó có nghĩa là "Ordnung" . Tôi đứng sửa.
Jörg W Mittag

Từ nào tốt hơn có thể được tìm thấy? Ý tôi là, từ một người Đức? Ordnung ist das halbe Leben!
JensG

Tôi nghĩ rằng câu đầu tiên trong câu trả lời (chính xác, nâng cao, tuyệt vời) của bạn nên đọc: 'O là viết tắt của "Ordnung" (tiếng Đức có nghĩa là "Đặt hàng").' Nó sẽ giúp câu trả lời này để thu hút sự chú ý của các độc giả khác.
Hawkeye Parker

5

Tôi thích bài viết này , hy vọng bạn cũng sẽ thấy nó hữu ích!

Trích dẫn một phần trong bài viết:
Chữ Hy Lạp lớn

Big O thường bị lạm dụng. Big O hay Big Oh thực sự là viết tắt của Big Omicron. Nó đại diện cho giới hạn trên của sự phức tạp tiệm cận. Vì vậy, nếu một thuật toán là O (n log n) tồn tại hằng số c sao cho giới hạn trên là cn log n.

(N log n) (Big Theta) bị ràng buộc chặt chẽ hơn thế. Một thuật toán như vậy có nghĩa là tồn tại hai hằng số c1 và c2 sao cho c1n log n <f (n) <c2n log n.

(N log n) (Big Omega) nói rằng thuật toán có giới hạn dưới của cn log n.

Có những cái khác nhưng đây là những cái phổ biến nhất và Big O là phổ biến nhất trong tất cả. Một sự phân biệt như vậy thường không quan trọng nhưng nó đáng chú ý. Ký hiệu đúng là ký hiệu chính xác, sau tất cả.

Ôi lớn là gì?

Ký hiệu Big O tìm cách mô tả độ phức tạp tương đối của thuật toán bằng cách giảm tốc độ tăng trưởng xuống các yếu tố chính khi yếu tố chính có xu hướng vô cùng. Vì lý do này, bạn sẽ thường nghe thấy cụm từ phức tạp tiệm cận. Khi làm như vậy, tất cả các yếu tố khác được bỏ qua. Nó là một đại diện tương đối của sự phức tạp.

Cái gì không lớn O?

Big O không phải là một bài kiểm tra hiệu năng của một thuật toán. Nó cũng nổi tiếng hoặc trừu tượng ở chỗ nó có xu hướng bỏ qua các yếu tố khác. Độ phức tạp của thuật toán sắp xếp thường được giảm xuống theo số lượng phần tử được sắp xếp là yếu tố chính. Điều này tốt nhưng nó không tính đến các vấn đề như:

Sử dụng bộ nhớ: một thuật toán có thể sử dụng nhiều bộ nhớ hơn một thuật toán khác. Tùy thuộc vào tình huống, điều này có thể là bất cứ điều gì từ hoàn toàn không liên quan đến quan trọng; Chi phí so sánh: Có thể là so sánh các yếu tố thực sự tốn kém, điều này sẽ có khả năng thay đổi bất kỳ so sánh trong thế giới thực giữa các thuật toán; Chi phí của các yếu tố di chuyển: các yếu tố sao chép thường rẻ nhưng điều này không nhất thiết phải như vậy; v.v.


5
Đơn giản chỉ cần liên kết một bài viết không quá hữu ích. Nó thường là một ý tưởng tốt để diễn giải hoặc trích dẫn phần mà bạn thấy đặc biệt có liên quan đến chủ đề.
Demian Brecht

3
Là phiếu giảm thực sự cần thiết? Bài viết mà anh ấy liên kết rất phù hợp và IMHO khá hữu ích. Trong khi đó, câu trả lời được bình chọn hàng đầu là một liên kết đến một bài viết trên Wikipedia. +1 để bù đắp cho sự giả hình của tâm trí.
Brandon Moretz

1
-1, bởi vì bài viết, trong khi là một bài viết rất hay và được viết tốt, không liên quan gì đến câu hỏi.
Jörg W Mittag

@Jorg, tôi chưa bao giờ nói bài báo sẽ giải quyết vấn đề, nhưng tôi đã chia sẻ vì tôi thấy nó hữu ích khi tôi xem xét các khái niệm này.
topgun_ivard

3
@topgun_ivard: Vậy điều gì xảy ra nếu nó biến thành một liên kết chết? Paraphrasing cho phép 1) khán giả của chủ đề này có được phiên bản ghi chú Coles của liên kết của bạn (thời gian là tiền) và 2) đảm bảo rằng bài đăng của bạn không được hiển thị không liên quan trên liên kết chết.
Demian Brecht

2

"f (x) là lớn-oh của g (x)"

Đó là một cách toán học để dự đoán sự tăng trưởng của các chức năng.

Đặt f và g là các hàm từ tập hợp số nguyên hoặc tập hợp hoặc số thực đến tập hợp số thực. Ta nói rằng f (x) là O (g (x)) nếu có hằng số C và k sao cho | f (x) | <= C | g (x) | bất cứ nơi nào x> k.

Bạn sẽ đọc điều này vì "f (x) là big-oh của g (x)"

Chữ O lớn đôi khi được gọi là biểu tượng Landau theo tên nhà toán học người Đức Edmund Landau. Tôi không nghĩ nó đại diện cho bất cứ điều gì ngoài điều đó. Bạn cũng có các ký hiệu Omega lớn và Theta tương tự. Các biểu tượng là tùy ý như luôn luôn sử dụng theta để biểu thị các góc trong hình tam giác của bạn là trong lớp Hình học phẳng trung học của bạn.

Correction @ back2dos đã cung cấp một lời giải thích thỏa đáng cho O khi đề cập đến đơn đặt hàng. Lam tôt lăm. Xem câu trả lời của anh ấy.

Donald Knuth đã áp dụng nó để nghiên cứu sự phức tạp của các chương trình máy tính.

Nếu bạn muốn tìm lý do ký hiệu được sử dụng, bạn nên đọc

"Phân tích Zahlentheorie" của Paul Bachmann từ năm 1892


2

EDIT: Hóa ra tôi sai. Tuy nhiên, có lẽ điều này giúp ai đó giữ biểu tượng của họ thẳng, vì vậy tôi sẽ không xóa nó.


Thật ra, đó không phải là chữ Latinh Oh , đó là chữ Hy Lạp Omicron . Thật không may, hai cái đó có cùng một glyph, vì vậy, theo thời gian, phiên bản gốc đã bị hỏng, và bây giờ nó chỉ là Oh .

Sự lựa chọn biểu tượng không thực sự có bất kỳ ý nghĩa cụ thể nào, nó được chọn là một thiết bị ghi nhớ :

  • Omicron có các chữ MICRO trong đó, và ngữ nghĩa của biểu tượng Omicron có nghĩa là "nhỏ hơn"
  • Omega có chữ MEGA trong đó, và ngữ nghĩa của biểu tượng Omega có nghĩa là "lớn hơn"
  • Theta (Θ) trông hơi giống một dấu bằng, và ngữ nghĩa của biểu tượng Theta có nghĩa gần như "bằng"

Đó là nó. Không có ý nghĩa thực sự với nó, nó chỉ là một cách chơi chữ, nếu bạn muốn, sẽ giúp bạn nhớ ngữ nghĩa dễ dàng hơn.


2
Mặc dù tôi rất muốn tin vào đề xuất ghi nhớ của bạn (đó là một ý tưởng thực sự hay), tôi sẽ cần phải xem một số bằng chứng cho thấy đây là ý định ban đầu thực sự của Bachmann. Cung cấp nó, và tôi sẽ +1 bạn.
Jonathan Henson

2
@Jonathan Henson: Rõ ràng, tôi đã bị giáo sư Knuth lừa dối :-)
Jörg W Mittag

-5

CẬP NHẬT: Cố gắng làm sạch câu trả lời của tôi và chính xác hơn

Ký hiệu Big O là một cách để mô tả các chức năng theo tốc độ tăng trưởng. Chữ O là viết tắt của thứ tự (thứ tự đầu tiên là n thứ hai là n bình phương, v.v.). Và nếu tôi không nhầm thì đây sẽ là trường hợp xấu nhất đối với thời gian chạy phương thức (hoặc lưu trữ) với N phần tử. Thứ tự càng lớn thì phương thức thực hiện càng tệ.
Ví dụ, tìm kiếm một bản ghi trong một mảng là O (1) (Tôi tin vào việc thực hiện một số bảng băm cũng là trường hợp đó). Thêm một giá trị vào cuối danh sách liên kết sẽ là O (N) vì bạn phải đến cuối danh sách trước khi bạn có thể thêm phần tử, v.v.

Câu trả lời này nên chính xác hơn một chút so với lần thử đầu tiên của tôi :)


2
-1 bởi vì đây chỉ là cũ không chính xác VÀ trả lời một câu hỏi riêng biệt hơn so với được hỏi. Câu hỏi đặt ra là tại sao chữ "O" được sử dụng chứ không phải "ký hiệu Big O hoạt động như thế nào?". Bạn không chính xác về cách Big-oh hoạt động tốt mặc dù ... lặp qua một mảng là O (n) trong đó n là kích thước của mảng, không phải O (1). Ký hiệu không liên quan gì đến "chu kỳ" của thuật toán ... đó là phép đo giới hạn trên của thời gian chạy của thuật toán.
Casey Patton

Không tranh luận với bạn ở đây, nhưng đó là những gì tôi muốn nói. Thời gian chạy có nghĩa là gì? Vâng, thời gian chạy được xác định bởi những gì phải được xử lý trên máy. Tôi đoán tôi loại sử dụng chu kỳ tự do ở đây. Theo chu kỳ tôi đoán tôi nên nói lặp đi lặp lại hoặc đại loại như thế. Bạn đúng về giới hạn trên mặc dù, Nó không xác định mức trung bình. Vì vậy, tôi chấp nhận hạ cấp.
SoftwareSavant
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.