Độ phức tạp thời gian của 2 ^ sqrt (n)


11

Tôi đang giải một câu hỏi về thuật toán và phân tích của tôi là nó sẽ chạy trên O (2 ^ sqrt (n)). Nó lớn cỡ nào Nó có tương đương với O (2 ^ n) không? Vẫn là thời gian không đa thức?


3
Xin vui lòng bình luận lý do cho xuống bỏ phiếu câu hỏi. Cảm ơn!
Gaara

4
Thành thật mà nói, tôi nghi ngờ mọi người đang nhầm lẫn câu hỏi này với một câu hỏi cực kỳ tầm thường, nhưng tôi không rõ ràng ngay lập tức bằng cách nào để chứng minh điều đó, vì vậy tôi sẽ viết một câu trả lời và xem liệu điều đó có thay đổi suy nghĩ của mọi người không.
Ixrec

3
Theo thời gian theo cấp số nhân, định nghĩa thứ hai, theo bài viết trên Wikipedia (Tuyên bố miễn trừ trách nhiệm: Tôi không đánh giá thấp; và tôi không biết đủ về chủ đề này để nói liệu điều này có đúng hay không.)
rwong

1
Tuyệt quá! Thời gian phụ: "thời gian chạy của một số thuật toán có thể tăng nhanh hơn bất kỳ đa thức nào nhưng vẫn nhỏ hơn đáng kể so với số mũ". Điều này chắc chắn trả lời câu hỏi của tôi và mở rộng kiến ​​thức của tôi về phân tích Big O. Cảm ơn rất nhiều
Gaara

1
Đó là cách ít hơn O (2 ^ n), đặc biệt đối với số lượng lớn. Lấy một ví dụ về việc có một bộ sưu tập 10 000 phần tử. 2 ^ 10000 là một số có khoảng 3000 chữ số, đó là bao nhiêu chu kỳ để thực hiện thao tác O (2 ^ n) trên nó. Với O (2 ^ sqrt (n)), bạn xuống một số có 30 chữ số. Sự khác biệt là rất lớn đối với số lượng lớn ủng hộ giải pháp sqrt (cho 1 triệu phần tử đó (số có 300 000 chữ số) * chu kỳ cpu so với (số có 300 chữ số) * chu kỳ cpu).
Andy

Câu trả lời:


16

Đây là một câu hỏi thú vị. May mắn thay, một khi bạn biết cách giải quyết nó, nó không khó lắm.

Đối với chức năng f : NR +g : NR + , chúng ta có fO ( g ) khi và chỉ khi lim sup n → ∞ f ( n ) / g ( n ) ∈ R .

Hàm f : NR + có nhiều nhất là sự tăng trưởng đa thức khi và chỉ khi tồn tại hằng số kN sao cho fO ( nn k ). Hãy rèn luyện sức khỏe này cho tùy ý nhưng cố định kN .

lim sup n 2 ( n 1/2 ) / n k =
lim n 2 ( n 1/2 ) / n k =
lim n → ∞ e log (2) n 1/2 / e log ( n ) k =
lim n → ∞ e log (2) n 1/2 - log ( n ) k = ∞ R

Bình đẳng đầu tiên là đúng bởi vì cả hai, người đề cử và mẫu số, là các hàm ổn định tăng trưởng đơn điệu. Bình đẳng thứ hai sử dụng danh tính x y = e log ( x ) y . Giới hạn không hữu hạn vì số mũ trong biểu thức cuối cùng không bị giới hạn ở trên. Nếu không đưa ra một bằng chứng chính thức, có thể giả định rằng n 1/2 chi phối log ( n ) không có triệu chứng. Do đó, hàm trong câu hỏi vượt quá sự tăng trưởng đa thức.

Tuy nhiên, sự tăng trưởng của nó hoàn toàn ít hơn số mũ, theo đó hàm mũ được xác định (theo tôi, cho mục đích này) là O ( n ↦ 2 c n ) cho c > 0. Hiển thị điều này thậm chí còn thẳng hơn.

lim sup n 2 c n / 2 ( n 1/2 ) = lim n 2 c n - n 1/2 = ∞ R

với bất kỳ c > 0. cố định nào , do đó, độ phức tạp của hàm nằm ở đâu đó thực sự ở giữa đa thức và hàm mũ.


6

Nó lớn cỡ nào Chà, O (2 ^ sqrt (n)) chính xác là nó lớn như thế nào :-(

Để hiểu ý nghĩa của nó, hãy tưởng tượng thuật toán của bạn sẽ không chỉ là O (2 ^ sqrt (n)), mà thực sự phải mất chính xác 2 ^ sqrt (n) nano giây trên máy tính của bạn:

n = 100: 2 ^ 10 = 1024 nano giây. Không có thời gian nào cả. n = 1000: 2 ^ 31.xxx = 2 tỷ nano giây. Hai giây, đó là đáng chú ý. n = 10.000: 2 ^ 100 ≈ 10 ^ 30 nano giây = 10 ^ 21 giây = 30 nghìn tỷ năm.

Điều này tốt hơn rất nhiều so với 2 ^ n nano giây, trong đó n = 100 sẽ mất 30 nghìn tỷ năm, nhưng kích thước của các vấn đề mà bạn có thể giải quyết là khá hạn chế. Nếu bạn xem xét một vấn đề "có thể giải quyết" nếu máy tính của bạn có thể giải quyết vấn đề đó trong một tuần, thì đó là khoảng 6 x 10 ^ 14 nano giây, tức là khoảng n = 2.400. Mặt khác, có thể giải quyết tối đa n = 400 trong một phần nghìn giây.

(Trong thực tế, với n = 10.000 cả O (2 ^ sqrt (n)) và O (2 ^ n) mất chính xác cùng một thời gian: Quá lâu để chờ đợi nó.)

Nó không vượt quá bất kỳ đa thức. Lấy một thuật toán khác mất n ^ 1000 giây. Thực tế là không thể giải được cho n = 2. Thuật toán này mất nhiều thời gian hơn cho đến khi n khoảng 885 triệu. Nhưng thực sự, ai quan tâm? Tại thời điểm đó, số năm mà cả hai thuật toán thực hiện là một số 9.000 chữ số.

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.