Saya tertarik pada sejarah awal hasil yang dipublikasikan tentang pertukaran ruang-waktu untuk tujuan umum. Secara khusus, saya ingin tahu siapa yang pertama kali menggambarkan jenis algoritma berikut untuk mengevaluasi perhitungan yang memiliki grafik aliran data acak dengan derajat O (1) menggunakan ruang yang sebanding dengan kedalaman (bukan lebar) grafik aliran data (plus ukurannya). dari input) dengan melakukan evaluasi kedalaman-pertama langsung dari grafik. Lebih detail:
Biarkan grafik aliran data menjadi G = (V, E) di mana V adalah himpunan simpul komputasi (O (1) -ukuran nilai data) dan E adalah himpunan tepi (v_p, v_s), sedemikian rupa sehingga nilai penerus vertex v_s \ dalam V segera tergantung pada nilai vertex pendahulunya v_p \ dalam V. Biarkan v_f menjadi vertex tanpa penerus yang mewakili hasil akhir dari perhitungan. Biarkan saya menjadi satu set simpul input yang dipesan secara kanonik (tanpa pendahulu), karena i \ in I nilainya x (i) diberikan. Untuk simpul lain v \ di S, nilainya ditentukan oleh x (v) = F_v (x (P (v))) di mana P (v) adalah daftar pendahulu v yang dipesan secara kanonik, x (P (v)) adalah daftar nilai-nilainya, dan F_v adalah fungsi vertex yang menentukan nilainya sebagai fungsi dari daftar nilai pendahulunya.
Dengan pengaturan ini, algoritma yang dimaksud cukup jelas & sepele:
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)
Ini membutuhkan O (d) level rekursi, di mana d adalah kedalaman grafik aliran data, dan ruang stack pada setiap level adalah konstan karena asumsi bahwa derajat grafik aliran data konstan, dan bahwa ukuran nilai data konstan. (Untuk kesederhanaan di sini, saya memperlakukan ukuran referensi titik sebagai konstan juga, meskipun mereka benar-benar logaritmik di | V |.) Jadi, total penggunaan ruang adalah O (d + | I |). Lebar maksimum grafik aliran data dapat secara eksponensial lebih besar dari ini, sehingga dalam kasus terbaik teknik ini dapat memberikan penghematan ruang yang cukup ekstrim, dibandingkan dengan, katakanlah, evaluasi ke depan rakus serakah dari grafik (yang mungkin, pada setiap langkah, mengevaluasi semua simpul yang secara langsung bergantung hanya pada simpul yang nilainya sudah diketahui,
Bagaimanapun, ini adalah teknik yang cukup jelas, setidaknya dalam retrospeksi, dan itu sudah lama diketahui, tetapi saya bertanya-tanya bagaimana kembali literatur yang ada. Adakah yang tahu sejarah awal hasil semacam ini (apakah dijelaskan dalam istilah-istilah ini, atau yang analog), dan apa yang akan menjadi referensi yang baik untuk menggali topik ini?
Terima kasih banyak, Mike