ประวัติศาสตร์ในช่วงต้นของผลลัพธ์บางอย่างเกี่ยวกับการแลกเปลี่ยนเวลาว่าง?


14

ฉันสนใจประวัติต้นของผลลัพธ์ที่เผยแพร่ในการแลกเปลี่ยนเวลาตามวัตถุประสงค์ทั่วไป โดยเฉพาะอย่างยิ่งฉันต้องการทราบว่าใครเป็นคนแรกอธิบายอัลกอริทึมชนิดต่อไปนี้สำหรับการประเมินการคำนวณที่มีกราฟดาต้าโฟลว์โดยพลการในระดับ O (1) โดยใช้พื้นที่ตามสัดส่วนความลึก (ไม่ใช่ความกว้าง) ของกราฟดาต้าโลว์ ของอินพุท) โดยการประเมินกราฟในระดับความลึกที่ตรงไปตรงมาก่อน รายละเอียดเพิ่มเติม:

ปล่อยให้กราฟข้อมูลเป็น 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) สำหรับจุดยอดอื่น ๆ v \ in 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 |.) ดังนั้นการใช้พื้นที่ทั้งหมดคือ O (d + | I |) ความกว้างสูงสุดของกราฟดาต้าโฟลว์สามารถมีขนาดใหญ่กว่าเลขชี้กำลังดังนั้นในกรณีที่ดีที่สุดเทคนิคนี้สามารถประหยัดพื้นที่ได้อย่างสุดขีดเมื่อเทียบกับการประเมินการโลภต่อไปของกราฟ (ซึ่งอาจเป็นในแต่ละครั้ง ขั้นตอนประเมินจุดยอดทั้งหมดที่ขึ้นอยู่กับจุดยอดที่มีค่าเป็นที่รู้จักกันแล้วโดยตรง

อย่างไรก็ตามมันเป็นเทคนิคที่ค่อนข้างชัดเจนอย่างน้อยในการหวนกลับและเป็นที่รู้จักกันมานาน แต่ฉันก็สงสัยว่าวรรณกรรมจะกลับมาได้อย่างไร ใครรู้ประวัติต้นของผลลัพธ์ของการจัดเรียงนี้ (ไม่ว่าจะอธิบายไว้ในข้อตกลงเหล่านี้หรืออื่น ๆ ที่คล้ายคลึงกัน) และสิ่งที่จะอ้างอิงที่ดีสำหรับการขุดในเรื่องนี้?

ขอบคุณมาก ๆ - ไมค์แฟรงค์

คำตอบ:


10

ฉันไม่รู้ว่ามันเป็นครั้งแรกหรือไม่ แต่สิ่งก่อสร้างปรากฏในบทพิสูจน์ของเลมม่า 1 ของ Borodin [Bor77] เกี่ยวกับความซับซ้อนของการประเมินวงจรบูลีน (มันมีมากกว่าแนวคิดการประเมินแบบเรียกซ้ำเพื่อลดความซับซ้อนของพื้นที่เพิ่มเติมจากบิตO ( D log S ) เป็น O ( D + บันทึกS ) บิตที่ DคือความลึกของวงจรและSคือขนาดของ วงจร)

[Bor77] อัลลันโบโรดิน ตามเวลาและพื้นที่ที่เกี่ยวข้องกับขนาดและความลึก สยามวารสารเกี่ยวกับคอมพิวเตอร์ , 6 (4): 733-744 ธันวาคม 1977 DOI: 10.1137 / 0,206,054

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.