Nói một cách lỏng lẻo, độ phức tạp thời gian là cách tóm tắt số lượng hoạt động hoặc thời gian chạy của thuật toán tăng lên khi kích thước đầu vào tăng.
Giống như hầu hết mọi thứ trong cuộc sống, một bữa tiệc cocktail có thể giúp chúng ta hiểu.
TRÊN)
Khi bạn đến bữa tiệc, bạn phải bắt tay mọi người (thực hiện thao tác trên mọi vật phẩm). Khi số lượng người tham dự N
tăng lên, thời gian / công việc sẽ khiến bạn bắt tay mọi người tăng lên O(N)
.
Tại sao O(N)
và không cN
?
Có sự khác biệt về thời gian cần thiết để bắt tay với mọi người. Bạn có thể lấy trung bình này ra và chụp nó trong một hằng số c
. Nhưng hoạt động cơ bản ở đây --- bắt tay với mọi người --- sẽ luôn tỷ lệ thuận O(N)
, bất kể c
là gì . Khi tranh luận về việc chúng ta có nên đi dự tiệc cocktail hay không, chúng ta thường quan tâm nhiều hơn đến việc chúng ta sẽ phải gặp mọi người hơn là chi tiết trong vài phút về những cuộc họp đó.
Ô (N ^ 2)
Chủ nhà của bữa tiệc cocktail muốn bạn chơi một trò chơi ngớ ngẩn, nơi mọi người gặp gỡ mọi người khác. Do đó, bạn phải gặp N-1
người khác và vì người tiếp theo đã gặp bạn, họ phải gặp N-2
người khác, v.v. Tổng của loạt bài này là x^2/2+x/2
. Khi số lượng người tham dự tăng lên, x^2
thuật ngữ này trở nên nhanh chóng , vì vậy chúng tôi chỉ cần bỏ mọi thứ khác.
Ô (3 ^)
Bạn phải gặp gỡ mọi người khác và trong mỗi cuộc họp, bạn phải nói về những người khác trong phòng.
Ô (1)
Chủ nhà muốn thông báo điều gì đó. Họ ding một ly rượu và nói to. Mọi người nghe họ. Hóa ra không quan trọng là có bao nhiêu người tham dự, hoạt động này luôn mất cùng một lượng thời gian.
O (log N)
Chủ nhà đã đặt tất cả mọi người ra bàn theo thứ tự bảng chữ cái. Đàn đâu rồi? Bạn lý do rằng anh ta phải ở đâu đó giữa Adam và Mandy (chắc chắn không phải giữa Mandy và Zach!). Cho rằng, anh ta là giữa George và Mandy? Không. Anh ta phải ở giữa Adam và Fred, và giữa Cindy và Fred. Và cứ thế ... chúng ta có thể định vị Dan một cách hiệu quả bằng cách nhìn vào một nửa tập hợp và một nửa tập hợp đó. Cuối cùng, chúng tôi xem xét các cá nhân O (log_2 N) .
O (N log N)
Bạn có thể tìm nơi ngồi xuống bàn bằng thuật toán trên. Nếu một số lượng lớn người đến bàn, từng người một và tất cả đã làm điều này, điều đó sẽ mất thời gian O (N log N) . Điều này hóa ra là mất bao lâu để sắp xếp bất kỳ bộ sưu tập các mặt hàng khi chúng phải được so sánh.
Trường hợp tốt nhất / tồi tệ nhất
Bạn đến bữa tiệc và cần tìm Inigo - sẽ mất bao lâu? Nó phụ thuộc vào khi bạn đến. Nếu mọi người xung quanh bạn gặp phải trường hợp xấu nhất: sẽ mất O(N)
thời gian. Tuy nhiên, nếu tất cả mọi người đang ngồi xuống bàn, sẽ chỉ mất O(log N)
thời gian. Hoặc có lẽ bạn có thể tận dụng sức mạnh la hét của chủ nhà và sẽ chỉ mất O(1)
thời gian.
Giả sử máy chủ không khả dụng, chúng tôi có thể nói rằng thuật toán tìm kiếm Inigo có giới hạn dưới O(log N)
và giới hạn trên O(N)
, tùy thuộc vào trạng thái của bữa tiệc khi bạn đến.
Không gian & Truyền thông
Những ý tưởng tương tự có thể được áp dụng để hiểu cách các thuật toán sử dụng không gian hoặc giao tiếp.
Knuth đã viết một bài báo hay về bài trước có tựa đề "Sự phức tạp của các bài hát" .
Định lý 2: Tồn tại các bài hát dài tùy ý có độ phức tạp O (1).
BÀI VIẾT: (do Casey và ban nhạc Ánh Dương). Hãy xem xét các bài hát Sk được xác định bởi (15), nhưng với
V_k = 'That's the way,' U 'I like it, ' U
U = 'uh huh,' 'uh huh'
cho tất cả k.