Big O (logn) log có phải là cơ sở e không?


96

Đối với kiểu cấu trúc dữ liệu cây tìm kiếm nhị phân, tôi thấy ký hiệu Big O thường được ghi chú là O (logn). Với chữ 'l' viết thường trong log, điều này có ngụ ý cơ số log e (n) như được mô tả bởi logarit tự nhiên không? Xin lỗi vì câu hỏi đơn giản nhưng tôi luôn gặp khó khăn khi phân biệt giữa các logarit ngụ ý khác nhau.


58
Như những người khác đã đồng tình chỉ ra, điều đó không quan trọng. Tất cả các logarit khác nhau bởi một hằng số chỉ phụ thuộc vào các cơ số liên quan. Bởi vì những yếu tố này là hằng số, chúng không thích hợp cho mục đích của phân tích tiệm cận. Thứ hai, việc xác định cơ sở ngụ ý bao xa, nó phụ thuộc vào ngữ cảnh. Theo nguyên tắc chung, hãy sử dụng những điều sau: 1. Khi một nhà toán học viết log nông ta có nghĩa là lôgarit tự nhiên. 2. Khi một nhà khoa học máy tính viết log nanh ta có nghĩa là cơ số hai. 3. Khi một kỹ sư viết log n, anh ta có nghĩa là cơ sở-ten. Những điều này thường đúng.
jason

4
@Jason, một quy ước khác (trong toán học) là ln n có nghĩa là logarit tự nhiên và log n là cơ số mười. Think ln là viết tắt của từ 'logarit naturelle' trong tiếng Pháp.
Internet man

2
Cơ số của logarit là số nút con mà mỗi nút có. Nếu đó là một cây nhị phân thì đó là một bản ghi cơ sở 2.
Paul

3
Tôi đánh giá cao câu trả lời của bạn, Jason, và đây là điều cần suy nghĩ. Khi tôi nghiên cứu cơ sở của nhật ký (tôi giả định là 2), tôi đã thấy câu trả lời tương tự: rằng điều đó không quan trọng vì bạn có thể loại bỏ hằng số, log_10 (2). Vấn đề của tôi với điều này là, ví dụ: 5 log_10 (5) <5 trong khi 5 log_2 (5)> 5. Tôi đã nhanh chóng nhập chúng vào tính toán của mình để giúp hình thành khái niệm nơi O (n logn) có thời gian chạy tốt hơn hoặc kém hơn O (n). Tùy thuộc vào cơ sở nó CÓ vấn đề. Do đó, tôi thực sự nghĩ câu trả lời ĐÚNG cho điều này phải là log theo ngữ cảnh có nghĩa là cơ sở 2 trong hầu hết các ứng dụng khoa học máy tính.
Doug Mead

@jason, tôi muốn nói rằng sử dụng ln (cách giải thích của nhà toán học) sẽ dễ dàng hơn;). Hai ví dụ còn lại là hợp lý.
belford

Câu trả lời:


77

Sau khi được biểu thị bằng ký hiệu big-O (), cả hai đều đúng. Tuy nhiên, trong nguồn gốc của phần mềm O () đa thức, trong trường hợp nhị phân tìm kiếm, chỉ log 2 là đúng. Tôi cho rằng sự khác biệt này là nguồn cảm hứng trực quan cho câu hỏi của bạn bắt đầu.

Ngoài ra, theo quan điểm của tôi, viết O (log 2 N) sẽ tốt hơn cho ví dụ của bạn, bởi vì nó truyền đạt tốt hơn việc suy ra thời gian chạy của thuật toán.

Trong ký hiệu big-O (), các yếu tố hằng số bị loại bỏ. Chuyển đổi từ cơ số logarit này sang cơ số logarit khác bao gồm việc nhân với một hệ số không đổi.

Vậy O (log N) tương đương với O (log 2 N) do một hệ số không đổi.

Tuy nhiên, nếu bạn có thể dễ dàng sắp chữ nhật ký 2 N trong câu trả lời của mình, làm như vậy là sư phạm hơn. Trong trường hợp tìm kiếm cây nhị phân, bạn đúng là log 2 N được đưa vào trong quá trình dẫn xuất của thời gian chạy big-O ().

Trước khi biểu thị kết quả dưới dạng ký hiệu big-O (), sự khác biệt là rất quan trọng. Khi suy ra đa thức được truyền thông qua ký hiệu big-O, ví dụ này sẽ không chính xác nếu sử dụng một lôgarit khác với log 2 N, trước khi áp dụng ký hiệu O () -. Ngay sau khi đa thức được sử dụng để giao tiếp thời gian chạy trong trường hợp xấu nhất thông qua ký hiệu big-O (), thì lôgarit được sử dụng không quan trọng.


4
Nhưng nó rất dễ dàng để cho thấy log_2 nlà trong Θ(log_a n)đối với bất kỳ cơ sở a, vì vậy tôi không chắc là tôi thấy cách sử dụng cơ sở 2 là "chính xác hơn".
bcat

1
Kinopkio và bcat, cảm ơn vì đã giúp nó trở nên hữu ích. Ban đầu nó không được viết tốt lắm. :)
Heath Hunnicutt

2
Vâng, tôi đã nói rõ hơn nhưng tôi chắc chắn bị tổn thương khi bạn nghĩ rằng câu trả lời của tôi có thể khiến mọi người nhầm lẫn. Trên thực tế, hầu hết các câu trả lời ở đây không xem xét trực giác của OP và cố gắng dạy anh ta nhiều điều. Tôi không quá ngạc nhiên bởi sự cạnh tranh, tôi hơi buồn vì điểm thấp cho ngành sư phạm.
Heath Hunnicutt

11
"trong quá trình suy ra đa thức O (), trong trường hợp tìm kiếm nhị phân, chỉ log2 là đúng." -1 cho toán học kém. Định nghĩa của x (n) ~ O (f (n)) nói rằng tồn tại một hằng số c sao cho c * (f (n)) <x (n) với mọi n> n_0. Do đó hệ số hằng số hoàn toàn không liên quan trong quá trình phân tích.
rlbond

3
Vì log2 (x) bằng log10 (x) / log10 (2), bạn có thể suy ra nó theo một trong hai cách. Nhật ký không hoàn toàn là cơ sở 2 tại bất kỳ điểm nào.
rlbond

80

Kí hiệu Big O không bị ảnh hưởng bởi cơ số logarit, bởi vì tất cả các logarit trong các cơ số khác nhau đều liên quan đến một hệ số không đổi , O(ln n)tương đương với O(log n).

nhập mô tả hình ảnh ở đây


2
đồ họa thì gọn gàng nhưng hãy nghĩ về đạo hàm của O () - đa thức ... trước khi áp dụng O (), chỉ có log-base-2 là đúng cho tìm kiếm nhị phân.
Heath Hunnicutt

1
@Heath Hunnicutt: Không. log_2 xKhác với log_b xhệ số không đổi c(b)đối với bất kỳ cơ sở nào bđộc lập với x.
jason

4
Nhưng tại sao bạn lại nói về điều đó, khi nó không liên quan đến câu hỏi và chỉ nhằm mục đích gây nhầm lẫn?
hobbs

4
Hobbs: Bởi vì thực tế đó là lý do OP được truyền cảm hứng để tìm hiểu. Tôi đang cố gắng kết nối ý tưởng của anh ấy với câu trả lời, vì vậy anh ấy hiểu tại sao anh ấy có trực giác của mình, tại sao nó không áp dụng cho O (), nhưng không áp dụng quá mức những gì anh ấy học được ở đây vào phần dẫn xuất của phân tích. Những câu trả lời ngắn gọn không giải quyết được nguyên nhân gốc rễ của sự hiểu lầm có thể dẫn đến sự hiểu lầm thêm. Đó là phương pháp sư phạm tồi.
Heath Hunnicutt

4
@Heath Hunnicutt: Nếu bạn đang thực hiện phân tích tiệm cận, điều đó không thành vấn đề. Việc bạn đợi cho đến phút cuối cùng để ném một số big-O vào không thay đổi thực tế là tôi có thể nhân và chia tất cả các logarit của mình cho một số hằng số ngớ ngẩn và thay đổi cơ số ở tất cả các bước. Đó là, nếu tôi có một số phân tích liên quan đến log_2 n, tôi có thể đi vào và thay thế log_2 nmọi nơi log_pi 2 * log_2 n / log_pi 2và sau đó chỉ cần kết thúc với một phân tích có log_pi 2 * log_pi nở khắp mọi nơi. Bây giờ phân tích của tôi là về mặt log_pi n.
jason

9

Nó không thực sự quan trọng nó là cơ sở nào, vì ký hiệu big-O thường được viết chỉ hiển thị bậc cao nhất của tiệm cận n, vì vậy các hệ số không đổi sẽ giảm đi. Vì một cơ số logarit khác tương đương với một hệ số không đổi, nó là thừa.

Điều đó nói rằng, tôi có thể sẽ giả sử cơ sở nhật ký 2.


@Kinopiko: Điều gì sai về nó? Chính xác hơn, câu trả lời của tôi thực tế khác với câu trả lời của bạn và những người khác ở đây như thế nào?
Daniel Pryden

À, có lẽ sai lầm của tôi trong việc sử dụng "hệ số". Tôi sẽ chỉnh sửa để làm rõ.
Daniel Pryden

Đó là vấn đề chính của tôi với câu trả lời của bạn. Ngoài ra, không rõ ý bạn là "chúng vẫn sẽ có tác dụng". Một số ảnh hưởng đến những gì?
bcat

1
Câu trả lời của bạn thảo luận về hệ số thứ tự cao nhất. Những gì bạn nói là đúng khi nó đi, nhưng đó không phải là lý do mà cơ số logarit là không liên quan. Lý do là sự khác biệt giữa các logarit cơ sở khác nhau là một hằng số được hấp thụ bởi O ().

1
@Kinopiko: Được. Tôi nghĩ chúng ta đang nói điều tương tự. Tôi sẽ nói O (100) = O (1) vì O (100) = O (100 * 1) = O (C * 1) = O (1). Đó là ý của tôi khi các biểu thức hằng là không cần thiết. Đó là, thứ tự của bất kỳ liên tục là 1.
Daniel Pryden

7

Cả hai đều đúng. Nghĩ về điều này

log2(n)=log(n)/log(2)=O(log(n))
log10(n)=log(n)/log(10)=O(log(n))
logE(n)=log(n)/log(E)=O(log(n))

2

Vâng, khi nói về ký hiệu big-O, cơ sở không quan trọng. Tuy nhiên, về mặt tính toán khi đối mặt với một vấn đề tìm kiếm thực sự thì điều đó rất quan trọng.

Khi phát triển trực giác về cấu trúc cây, sẽ rất hữu ích khi hiểu rằng cây tìm kiếm nhị phân có thể được tìm kiếm trong thời gian O (n log n) vì đó là chiều cao của cây - nghĩa là trong cây nhị phân có n nút, cây độ sâu là O (n log n) (cơ số 2). Nếu mỗi nút có ba nút con, cây vẫn có thể được tìm kiếm trong thời gian O (n log n), nhưng với logarit cơ số 3. Về mặt tính toán, số lượng nút con của mỗi nút có thể có tác động lớn đến hiệu suất (xem ví dụ: văn bản liên kết )

Thưởng thức!

Paul


ý bạn muốn nói rằng chiều cao của cây nhị phân là log n, không phải n log n, phải không?
ô

1

Về mặt kỹ thuật, cơ sở không quan trọng, nhưng bạn có thể nghĩ nó là cơ sở 2.


1

Trước tiên, bạn phải hiểu ý nghĩa của hàm f (n) là O (g (n)).

Định nghĩa chính thức là: * Một hàm f (n) được cho là O (g (n)) iff | f (n) | <= C * | g (n) | bất cứ khi nào n> k, trong đó C và k là hằng số. *

vì vậy cho f (n) = log cơ số a của n, trong đó a> 1 và g (n) = log cơ sở b của n, trong đó b> 1

LƯU Ý: Điều này có nghĩa là các giá trị a và b có thể là bất kỳ giá trị nào lớn hơn 1, ví dụ a = 100 và b = 3

Bây giờ chúng ta nhận được như sau: log cơ sở a của n được cho là O (log cơ sở b của n) iff | log cơ sở a của n | <= C * | log cơ số b của n | bất cứ khi nào n> k

Chọn k = 0, và C = log cơ số a của b.

Bây giờ phương trình của chúng ta trông giống như sau: | log cơ số a của n | <= log cơ số a của b * | log cơ số b của n | bất cứ khi nào n> 0

Để ý phía bên tay phải, chúng ta có thể thao tác phương trình: = log cơ số a của b * | log cơ số b của n | = | log cơ số b của n | * log cơ số a của b = | log cơ số a của b ^ (log cơ số b của n) | = | log cơ số a của n |

Bây giờ phương trình của chúng ta trông giống như sau: | log cơ số a của n | <= | log cơ số a của n | bất cứ khi nào n> 0

Phương trình luôn đúng cho dù các giá trị n, b hoặc a là bao nhiêu, ngoài các giới hạn a, b> 1 và n> 0. Vì vậy log cơ số a của n là O (log cơ số b của n) và vì a, b không quan trọng nên chúng ta có thể đơn giản bỏ qua chúng.

Bạn có thể xem video YouTube về nó tại đây: https://www.youtube.com/watch?v=MY-VCrQCaVw

Bạn có thể đọc một bài báo về nó tại đây: https://medium.com/@randerson112358/omitting-bases-in-logs-in-big-o-a619a46740ca

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.