Lịch sử ban đầu của kết quả nhất định về sự đánh đổi không-thời gian?


14

Tôi quan tâm đến lịch sử ban đầu của các kết quả được công bố về sự đánh đổi không gian thời gian cho mục đích chung. Cụ thể, tôi muốn biết ai là người đầu tiên mô tả loại thuật toán sau để đánh giá một tính toán có biểu đồ dataflow tùy ý với độ O (1) sử dụng không gian tỷ lệ với độ sâu (không phải chiều rộng) của biểu đồ dataflow (cộng với kích thước của đầu vào) bằng cách thực hiện đánh giá chiều sâu đơn giản trước tiên của đồ thị. Chi tiết hơn:

Đặt biểu đồ dataflow là G = (V, E) trong đó V là tập hợp các đỉnh tính toán (giá trị dữ liệu cỡ O (1)) và E là tập hợp các cạnh (v_p, v_s), sao cho giá trị của kế tiếp đỉnh v_s \ in V phụ thuộc ngay vào giá trị của đỉnh tiền thân v_p \ in V. Gọi v_f là đỉnh không có người kế thừa biểu thị kết quả cuối cùng của phép tính. Đặt tôi là một tập hợp các đỉnh đầu vào theo thứ tự (không có tiền thân), với i \ in I, giá trị x (i) của nó được đưa ra. Đối với các đỉnh khác v \ in S, các giá trị của chúng được xác định bởi x (v) = F_v (x (P (v))) trong đó P (v) là danh sách được sắp xếp theo thứ tự của các tiền thân của v, x (P (v)) danh sách tương ứng của các giá trị của chúng và F_v là hàm của đỉnh xác định giá trị của nó như là một hàm của danh sách các giá trị của các giá trị trước.

Với thiết lập này, thuật toán được đề cập là khá rõ ràng & tầm thường:

def eval(v):     (v can be any vertex in the graph)
   let P := P(v), the list of v's predecessors  (has O(1) elements by assumption)
   let val[] := uninitialized array of |P| data values
   for each predecessor p[i] in P (i.e. for i from 1 to |P|):
      if p[i] is in I then
         val[i] = x(p)      (look up a given input)
      else
         val[i] = eval(p[i])   (recursive call)
   return F_v(val[])        (apply vertex's function to list of predecessor values)

Điều này có các mức đệ quy O (d), trong đó d là độ sâu của biểu đồ dataflow và không gian ngăn xếp ở mỗi cấp là không đổi do các giả định rằng mức độ của biểu đồ dataflow là không đổi và kích thước của các giá trị dữ liệu là không đổi. (Để đơn giản ở đây, tôi cũng coi kích thước của các tham chiếu đỉnh là không đổi, mặc dù chúng thực sự là logarit trong | V |.) Vì vậy, tổng sử dụng không gian là O (d + | I |). Độ rộng tối đa của biểu đồ dataflow có thể lớn hơn theo cấp số nhân, do đó, trong trường hợp tốt nhất, kỹ thuật này có thể cung cấp một khoản tiết kiệm không gian khá cực, so với, đánh giá về phía trước của biểu đồ (có thể là bước, đánh giá tất cả các đỉnh chỉ phụ thuộc trực tiếp vào các đỉnh có giá trị đã được biết đến,

Dù sao, đó là một kỹ thuật khá rõ ràng, ít nhất là khi nhìn lại, và nó chắc chắn đã được biết đến từ lâu, nhưng tôi đã tự hỏi làm thế nào các tài liệu về nó trở lại. Bất cứ ai cũng biết lịch sử ban đầu của kết quả của loại này (cho dù được mô tả trong các thuật ngữ này, hoặc các từ tương tự khác), và điều gì sẽ là một tài liệu tham khảo tốt để đào sâu vào chủ đề này?

Cảm ơn rất nhiều, -Mike Frank

Câu trả lời:


10

Tôi không biết đó có phải là lần xuất hiện đầu tiên hay không, nhưng việc xây dựng xuất hiện trong bằng chứng Bổ đề 1 của Borodin [Bor77] về độ phức tạp không gian của việc đánh giá mạch Boolean. (Nó chứa nhiều hơn một chút so với ý tưởng đánh giá đệ quy để giảm độ phức tạp không gian từ các bit O ( D log S ) thành các bit O ( D + log S ), trong đó D là độ sâu của mạch và S là kích thước của mạch.)

[Bor77] Allan Borodin. Về thời gian và không gian liên quan đến kích thước và độ sâu. Tạp chí SIAM về máy tính , 6 (4): 733 Từ744, tháng 12 năm 1977. DOI: 10.1137 / 0206054 .

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.