मुझे सामान्य-उद्देश्य वाले अंतरिक्ष-समय के ट्रेडऑफ़ पर प्रकाशित परिणामों के शुरुआती इतिहास में दिलचस्पी है। विशेष रूप से, मैं यह जानना चाहता हूं कि पहले किसने एल्गोरिथ्म के निम्न प्रकार का वर्णन किया था, जिसमें डेटा मीटर ग्राफ की गहराई (चौड़ाई) के लिए आनुपातिक डेटा प्रवाह ग्राफ के साथ डिग्री ओ (1) के साथ एक मनमाना डेटाफ्लो ग्राफ का उपयोग किया गया (प्लस आकार) इनपुट का) ग्राफ का एक सीधा गहराई से पहला मूल्यांकन करके। विस्तृत रूप में:
बता दें कि डेटाफ्लो ग्राफ G = (V, E) है जहां V कम्प्यूटेशनल वर्टिकल (O (1) -साइज डेटा वैल्यूज) का सेट है और E किनारों का सेट (v_p, v_s) है, जैसे कि उत्तराधिकारी का मान वर्टेक्स v_s \ V में V के पूर्ववर्ती वर्टेक्स v_p \ के मान पर तुरंत निर्भर करता है। v_f वर्टेक्स हो, जिसमें कोई भी उत्तराधिकारी गणना के अंतिम परिणाम का प्रतिनिधित्व न करने वाला हो। चलो मैं एक कैनोनिक रूप से ऑर्डर किए गए इनपुट वर्टिज़ (बिना किसी पूर्ववर्ती) के सेट हो सकता हूं, क्योंकि i \ के लिए I में इसका मान x (i) दिया गया है। V में S के अन्य कोणों के लिए, उनके मानों को x (v) = F_v (x (P (v))) से परिभाषित किया जाता है, जहाँ P (v) v के पूर्ववर्तियों की सूची के लिए एक कैनोनिक रूप से आदेशित सूची है, x (P (v)) उनके मूल्यों की संगत सूची, और F_v वर्टेक्स फ़ंक्शन है जो अपने पूर्ववर्तियों के मूल्यों की सूची के फ़ंक्शन के रूप में इसके मूल्य को निर्धारित करता है।
इस सेटअप को देखते हुए, प्रश्न में एल्गोरिथ्म काफी स्पष्ट और तुच्छ है:
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)
यह रिकर्सन का O (d) स्तर लेता है, जहां d डेटाफ्लो ग्राफ की गहराई है, और प्रत्येक स्तर पर स्टैक स्पेस स्थिर है, इस धारणा के कारण कि डेटाफ्लो ग्राफ की डिग्री निरंतर है, और यह है कि आकार डेटा मान स्थिर है। (यहां सादगी के लिए, मैं शीर्ष संदर्भों के आकार को स्थिर मान रहा हूं, भले ही वे वास्तव में लॉजिकिथिमिक हैं - V |)। इस प्रकार, कुल अंतरिक्ष उपयोग हे (d + I |) | डेटाफ्लो ग्राफ की अधिकतम चौड़ाई इससे काफी अधिक हो सकती है, इसलिए सबसे अच्छी स्थिति में यह तकनीक ग्राफ की एक लालची फॉरवर्ड मूल्यांकन (जो प्रत्येक के लिए हो सकती है) की तुलना में एक बहुत चरम स्थान बचत प्रदान कर सकती है। चरण, उन सभी कोणों का मूल्यांकन करें जो सीधे केवल उन कोणों पर निर्भर करते हैं जिनके मूल्य पहले से ही ज्ञात हैं,
वैसे भी, यह काफी स्पष्ट तकनीक है, कम से कम पूर्वव्यापी में, और यह निश्चित रूप से लंबे समय से जाना जाता है, लेकिन मैं सोच रहा था कि इस पर साहित्य कैसे वापस आता है। किसी को भी इस प्रकार के परिणामों का प्रारंभिक इतिहास पता है (इन शब्दों में वर्णित है, या अन्य अनुरूप), और इस विषय में खुदाई के लिए एक अच्छा संदर्भ क्या होगा?
बहुत बहुत धन्यवाद, -माइक फ्रैंक