汎用時空トレードオフに関する公開された結果の初期の歴史に興味があります。特に、データフローグラフの深さ(幅ではなく)に比例するスペース(およびサイズ入力の)グラフの単純な深さ優先評価を行うことによって。さらに詳細に:
データフローグラフをG =(V、E)とします。Vは計算頂点のセット(O(1)サイズのデータ値)、Eはエッジのセット(v_p、v_s)です。頂点v_s \ in Vは、直前の頂点v_p \ in Vの値にすぐに依存します。v_fを、計算の最終結果を表す後続のない頂点とします。i \ in Iの場合、その値x(i)が与えられているので、私は標準的な順序の入力頂点のセット(前任者なし)とします。Sの他の頂点vの場合、それらの値は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 |で実際に対数であるにもかかわらず、定数として扱います。)したがって、合計スペース使用量はO(d + | I |)です。データフローグラフの最大幅はこれよりも指数関数的に大きくなる可能性があるため、最良の場合、この手法は、グラフの貪欲な前方評価(たとえば、ステップ、値が既知の頂点のみに直接依存するすべての頂点を評価し、
とにかく、少なくとも振り返ってみると、それはかなり明白なテクニックであり、確かに長い間知られていますが、それに関する文献がどのように戻るのか疑問に思っていました。この種の結果の初期の歴史を知っている人は誰でも(これらの用語または他の類似の用語で説明されているかどうか)、この主題を掘り下げるための良い参考資料は何でしょうか?
どうもありがとう、マイク・フランク