thuật toán phân tích thời gian đầu vào kích thước đầu vào


13

Tôi vẫn còn một chút bối rối với các thuật ngữ "độ dài đầu vào" và "kích thước đầu vào" khi được sử dụng để phân tích và mô tả giới hạn trên không có triệu chứng cho một thuật toán

Có vẻ như độ dài đầu vào cho thuật toán phụ thuộc rất nhiều loại dữ liệu và thuật toán mà bạn đang nói đến.

Một số tác giả đề cập đến độ dài đầu vào theo kích thước của các ký tự được yêu cầu để thể hiện đầu vào, vì vậy "abcde" nếu sử dụng làm đầu vào được đặt trong thuật toán sẽ có "độ dài đầu vào" là 6 ký tự.

Nếu thay vì các ký tự, chúng ta có số (ví dụ số nguyên) thì đôi khi biểu diễn nhị phân được sử dụng thay cho các ký tự để "độ dài đầu vào" được tính là (Là L số tối đa trong bộ đầu vào).Nlog(L)

Có một số vấn đề khác mà ngay cả khi bộ đầu vào là số, chúng mô tả "độ dài đầu vào" là "biến quyết định", do đó, đối với bộ đầu vào có độ dài N với các số trong phạm vi thì độ dài đầu vào là chỉ N (tổng hợp con chẳng hạn), hoặc thậm chí phức tạp hơn số lượng giá trị vị trí nhị phân cần thiết để nêu vấn đề (những gì tôi tin là giống như ) N l o g ( L )0232Nlog(L)

Vì thế:

  • nó phụ thuộc vào thuật toán?
  • Có nghĩa là gì và khi nào sử dụng mỗi "phiên bản" độ dài đầu vào
  • Có một số quy tắc tôi có thể sử dụng để quyết định nên sử dụng quy tắc nào?

Câu trả lời:


10

Theo nghĩa chính thức nhất, kích thước của đầu vào được đo theo tham chiếu đến việc triển khai thuật toán Turing Machine và đó là số ký hiệu bảng chữ cái cần thiết để mã hóa đầu vào.

Điều này tất nhiên là khá trừu tượng và rất khó để làm việc trong thực tế, hoặc ít nhất là rất khó chịu - chúng ta sẽ cần xem xét cách chúng ta sẽ chỉ định các phân số, v.v. Điều gì xảy ra bình thường trong thực tế là chúng ta tìm kiếm một phép đo proxy kích thước của đầu vào - một cái gì đó thuận tiện và dễ tiếp cận hơn, nhưng điều đó không gây ra bất kỳ vấn đề toán học nào trong phân tích của chúng tôi.

Sử dụng ví dụ "abcde" của bạn, thông thường, bảng chữ cái chúng ta sử dụng cho đầu vào là nhỏ, do đó, ngay cả khi sử dụng phép đo proxy gồm ký tự, chúng tôi biết rằng ngay cả trên Máy Turing, chúng tôi có thể, nếu chúng tôi làm phiền, chỉ định một mã hóa đầu vào sẽ chuyển đổi "abcde" thành một số dạng được mã hóa có độ dài tối đa cho một số hằng số . Sự mở rộng này bởi một hằng số thường sẽ không tạo ra sự khác biệt trong phân tích tiệm cận của chúng tôi, vì chúng tôi thường xuyên loại bỏ các yếu tố không đổi.55×c c

Trong một trường hợp khác, chúng ta thường đo kích thước của đồ thị đầu vào bằng số đỉnh . Rõ ràng nếu chúng ta muốn chỉ định các biểu đồ lớn tùy ý, kích thước của đầu vào được mã hóa không chỉ đơn giản là - ví dụ điều gì đã xảy ra với các cạnh? Những gì chúng ta biết là chúng ta có thể sử dụng sơ đồ mã hóa hợp lý đại diện cho biểu đồ trong các bit . Đây là một sự mở rộng nhiều hơn một chút so với hằng số, nhưng trong nhiều trường hợp thú vị, chúng ta chỉ giải quyết mọi thứ ở mức độ chi tiết của đa thức, và đa thức sáng tác độc đáo theo nhiều cách - cụ thể là, ví dụ, nếu chúng tôi xác định rằng thời gian chạy của chúng tôi là trong đó là một đa thức, sau đó chúng tôi biết rằng có một số đa thứcnnN=cn2lognO(p(n))pp sao cho , vì vậy khi chúng ta quay trở lại thước đo chính thức của đầu vào, chúng ta vẫn ở trong thời gian đa thức.O(p(n))=O(p(N))

Một nơi mà điều này có thể rơi xuống là khi bạn đang làm việc với những con số. Vì một số có độ lớn có thể được mã hóa theo bit , nếu thời gian chạy của chúng tôi là , thì đây sẽ là - theo cấp số nhân trong kích thước đầu vào thực tế - mà sẽ làm cho cường độ thành một lựa chọn tồi cho proxy cho kích thước đầu vào nếu chúng ta muốn nói về tư cách thành viên trong (khi bạn đến Strongly- -complete và Weakly- - hoàn thành, hãy nhớ điều này). Mặt khác, nếu tất cả những gì chúng ta quan tâm là tính quyết định, thì đó sẽ là một biện pháp proxy đủ tốt.mn=O(logm)O(m)O(2n)mPNPNP

Vì vậy, mặc dù không có quy tắc rõ ràng nào để chọn biện pháp proxy cho kích thước đầu vào, yêu cầu là việc mở rộng hoặc thu hẹp kích thước proxy so với kích thước đầu vào phải tương thích với những gì bạn đang cố gắng chứng minh. Theo nguyên tắc thông thường, yếu tố liên tục thay đổi hầu như không bao giờ quan trọng, các yếu tố đa thức nhỏ thường ổn và hoạt động đối với hầu hết các lý thuyết cơ bản mà bạn thấy, các yếu tố đa thức lớn vẫn có thể hoạt động trên lý thuyết, nhưng có thể là một bất ngờ khó chịu trong thực tế, và số lượng thay đổi theo cấp số nhân thường quá cực đoan.


Cảm ơn câu trả lời. Thực sự thú vị phần bạn nói về việc lựa chọn proxy phù hợp để nói về tư cách thành viên trong P hoặc NP cho đầu vào, đó có thể là một câu hỏi hoàn toàn mới! Bên cạnh đó, và trở lại câu hỏi trước đây. Theo bạn, cái nào sẽ là proxy tốt nhất cho thuật toán mà đầu vào của nó là một bộ số nguyên? Tôi đoán Có lẽ nó sẽ phụ thuộc vào thuật toán? Tôi thấy 3 tùy chọn tiềm năng: N (là độ dài của tập hợp) N * Log (L) (L là giá trị tối đa) và Log (Sum (set)).
Jesus Salas

@JesusSalas, nó chắc chắn có thể phụ thuộc vào những gì bạn làm với họ, nhưng sẽ là câu trả lời "đủ gần với mã hóa TM" đơn giản nhất, nhưng vẫn có thể thú vị khi xem xét thời gian chạy theo , hoặc có thể là độ lớn của số lớn nhất - tất nhiên đây chỉ là , nhưng đôi khi có thể dễ dàng hơn để phân tích mọi thứ bằng các biện pháp không rõ ràng. NlogLNN 2logL
Luke Mathieson

Điều này bao gồm các căn cứ nhưng có một số không chính xác. Đại diện cho "abcde" trên máy Turing không có ký tự : phải mất năm ký tự nếu bạn chọn đúng bảng chữ cái. Và bạn không cần bit để biểu diễn một đồ thị -vertex: ma trận kề là chính xác bit. 5ccn2lognnn2
David Richerby

Có lẽ khi nào sử dụng N hoặc N log L có thể phụ thuộc vào chi phí cho thuật toán hoạt động trên từng phần tử đầu vào. Tôi đoán rằng nếu chúng ta có một giả định rằng thuật toán sử dụng thời gian không đổi để thực hiện công việc của nó trên từng phần tử đầu vào độc lập với kích thước của nó theo bit (và điều này không bị lạm dụng), thì N có lẽ là đúng, dẫn đến O (N) . Mặt khác, nếu kích thước phần tử đầu vào tính bằng bit làm tăng chi phí vận hành thì N log L có vẻ chính xác hơn vì chúng ta nên thể hiện ở giới hạn trên những thuộc tính nào từ đầu vào có liên quan đến tăng trưởng
Jesus Salas

5c=1c=log255 O(n2logn)bit, nhưng nó là một giới hạn trên khá mạnh mẽ có thể xử lý cả mã hóa thông thường.
Luke Mathieson

8

Nó phụ thuộc vào mô hình tính toán của bạn và đôi khi không may đôi khi vào chính thuật toán.

  • ababcd
  • Nếu mô hình của bạn là RAM thì kích thước của đầu vào là số lượng thanh ghi / ô nhớ nơi đầu vào vẫn ở. Điều này có thể bị sử dụng sai vì về mặt kỹ thuật bạn có thể viết toàn bộ đầu vào trong một thanh ghi. Tuy nhiên, sau đó việc tính toán sẽ tốn kém hơn nếu bạn sử dụng mô hình chi phí logarit.
  • ww

Tuy nhiên, nhiều thuật toán không được đo đối với kích thước đầu vào "thực tế". Sau đó, bạn phải xem xét cẩn thận, những gì tuyên bố của phân tích đề cập đến.

  • O(nlogn)nO(1)n
  • n×n

n


1
nO(n3)nn
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.