Bộ nhớ Θ (1) có nghĩa là gì?


13

Tôi có định nghĩa về thuật toán tại chỗ từ giáo sư, nhưng tôi không hiểu nó.

Các thuật toán tại chỗ đề cập đến các thuật toán hoạt động với bộ nhớ Θ (1).

Điều đó nghĩa là gì?


3
Bạn có quen thuộc với ký hiệu Landau ?
David Richerby 28/03/2016

4
"Một thuật toán được gọi là thuật toán in situ hoặc thuật toán tại chỗ, nếu số lượng bộ nhớ cần thiết để thực hiện thuật toán là O (1), nghĩa là [bộ nhớ] không vượt quá hằng số cho dù lớn đến đâu đầu vào . Ví dụ, heapsort là một thuật toán sắp xếp tại chỗ. " vi.wikipedia.org/wiki/In_situ#Computer_science
Auberon

@Auberon, cần phải nói thêm rằng áp đặt một yêu cầu xa hơn : rằng tổng bộ nhớ được sử dụng trong bất kỳ lệnh gọi cụ thể nào không giảm xuống dưới một hằng số bất kể kích thước của đầu vào. O ( 1 )Θ(1)O(1)
Oledit

1
@ Công cụ Tôi chưa thấy một thuật toán sử dụng nhiều hơn 0 nhưng ít hơn một hằng số của bất kỳ tài nguyên nào
adrianN

@adrianN, mã hóa AES của các tệp được thực hiện với việc sử dụng RAM theo giới hạn trên không đổi. Bạn xử lý một khối tại một thời điểm, mỗi khối cần cùng một lượng RAM cần xử lý và RAM có thể được sử dụng lại từ khối này sang khối khác. Một ví dụ đơn giản hơn là chuyển đổi tất cả các chữ cái trong tệp được mã hóa ASCII thành chữ hoa. Bạn có thể đọc trong một khối, giả sử 4096 byte, của tệp, xử lý 4096 byte đó, ghi kết quả của khối đó và sử dụng lại cùng RAM cho khối tiếp theo.
Oledit

Câu trả lời:


13

Đầu tiên, hãy giải nén ý nghĩa của .Θ(1)

Big và big , là các lớp hàm. Có một định nghĩa chính thức ở đây , nhưng đối với mục đích của câu hỏi này, chúng ta nói rằng một hàm là nếu có một hằng số ở đâu, cho tất cả , . Đó là, phát triển nhanh nhất là một hàm hằng.Θ f O ( 1 ) c x f ( x ) C fOΘfO(1)cxf(x)Cf

Big- không có ý nghĩa nhiều đối với các hàm hằng, bởi vì khi mô tả thời gian sử dụng thuật toán hoặc sử dụng không gian, không có nhiều dưới hằng số. Nhưng để giải thích ý nghĩa của nó, nếu có một số hằng số sao cho tất cả , . Đó là, phát triển ít nhất là nhanh, và nhiều nhất là nhanh, như một hàm không đổi.f Θ ( 1 ) c , d x d f ( x ) c fΘfΘ(1)c,dxdf(x)cf

Bây giờ điều này có liên quan gì đến việc sử dụng bộ nhớ? Xem xét một số thuật toán . Có một số hàm (toán học), với đầu vào , cung cấp mức sử dụng bộ nhớ tối đa cho thuật toán của bạn trên bất kỳ đầu vào nào có kích thước . Hãy gọi hàm này là .n A n m e mAnAnmem

Vì vậy, bây giờ chúng tôi kết hợp hai khái niệm của chúng tôi. Nếu một thuật toán sử dụng bộ nhớ , thì chức năng sử dụng bộ nhớ của nó nằm trong , nghĩa là tồn tại một số sao cho, đối với mọi đầu vào, bộ nhớ được sử dụng nằm giữa và .Θ ( 1 ) d , c d cΘ(1)Θ(1)d,cdc

Nói tóm lại, điều này có nghĩa là việc sử dụng bộ nhớ của thuật toán nằm trong một phạm vi không đổi, bất kể đầu vào.

Thông thường, hàm bộ nhớ không chiếm bộ nhớ được sử dụng để lưu trữ đầu vào cho thuật toán, vì nếu không, việc sử dụng bộ nhớ sẽ luôn luôn ít nhất là .Θ(n)


"không hiệu quả phụ thuộc vào đầu vào của nó." - cho định nghĩa của "hiệu quả"?
Raphael

Như trong, bộ nhớ được sử dụng có thể thay đổi tùy thuộc vào đầu vào, nhưng chỉ trong một khoảng thời gian cố định. Hãy thoải mái chỉnh sửa nó nếu bạn có thể nghĩ ra một từ ngữ tốt hơn.
jmite

Tôi không nghĩ có một từ ngữ tốt hơn "bộ nhớ được sử dụng nằm giữa và cho bất kỳ đầu vào nào". Cũng không cần một cái. cdc
Raphael

ví dụ minh họa đơn giản sẽ hữu ích
vzn

8

Độ phức tạp không gian liên tục của thuật toán

Lượng bộ nhớ mà thuật toán của bạn sử dụng không phụ thuộc vào đầu vào.

Một thuật toán được cho là có độ phức tạp không gian không đổi nếu nó sử dụng lượng không gian cố định. Nó có thể là biến hoặc một mảng gồm phần tử chính xác .101010

Tuy nhiên, các thuật toán tại chỗ thực hiện chức năng dự định của chúng trên chính đầu vào và do đó đòi hỏi rất ít hoặc không có thêm không gian. Đầu vào thường được ghi đè bởi đầu ra khi thuật toán thực thi. (tham khảo )

Các thuật toán tại chỗ không xem xét không gian bị chiếm bởi đầu vào và chỉ tính đến không gian thừa, trong khi tính toán độ phức tạp của không gian.


3
Θ(1)

@Oledit Không gian bị chiếm dụng bởi mỗi đầu vào về số byte và số lượng đầu vào tính theo số lượng không phải là hai khái niệm khác nhau?
Prateek

0

Điều đó có nghĩa là lượng bộ nhớ bổ sung cần thiết cho thuật toán không lớn hơn một số lượng không đổi không phụ thuộc vào kích thước đầu vào cho đầu vào đủ lớn.


2
ΘOΩO(x2)f(x)=3x2 f(x)=xΘ(x2)f(x)=3x2f(x)=x
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.