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ì?
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ì?
Câu trả lời:
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.
"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.
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 đó.
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.
"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
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ớ :
Đó 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.
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 :)