กลับไปหน้าบทความ

อ่าน 3 นาที

แฮชคอนซิง

ใน วิทยาการคอมพิวเตอร์ โดยเฉพาะอย่างยิ่งใน การเขียนโปรแกรมเชิงฟังก์ชัน การ แฮชคอนซิง เป็นเทคนิคที่ใช้ในการแบ่งปันค่าที่มีโครงสร้างเท่ากัน [ 1 ] เมื่อมีการสร้างค่า เช่น เซลล์ คอนซิ...

แฮชคอนซิง

ในวิทยาการคอมพิวเตอร์โดยเฉพาะอย่างยิ่งในการเขียนโปรแกรมเชิงฟังก์ชันการแฮชคอนซิงเป็นเทคนิคที่ใช้ในการแบ่งปันค่าที่มีโครงสร้างเท่ากัน[ 1 ]เมื่อมีการสร้างค่า เช่น เซลล์ คอนซิง เทคนิคนี้จะตรวจสอบว่าค่าดังกล่าวเคยถูกสร้างขึ้นมาก่อนหรือไม่ และหากเคย ก็จะนำค่าก่อนหน้ามาใช้ซ้ำ หลีกเลี่ยงการจัดสรรหน่วยความจำ ใหม่ คุณสมบัติที่มีประโยชน์ของการแฮชคอนซิงคือ สามารถทดสอบความเท่าเทียมกันของโครงสร้างสองโครงสร้างได้ในเวลาคงที่ผ่านความเท่าเทียมกันของตัวชี้ ซึ่งในทางกลับกันสามารถปรับปรุงประสิทธิภาพของอัลกอริทึมแบบแบ่งและพิชิตเมื่อชุดข้อมูลมีบล็อกที่ทับซ้อนกัน[ 2 ]การแฮชคอนซิงได้รับการพิสูจน์แล้วว่าช่วยปรับปรุงประสิทธิภาพอย่างมาก ทั้งในด้านพื้นที่และเวลา สำหรับ อัลกอริทึมการเขียน โปรแกรม เชิงสัญลักษณ์และเชิงพลวัต

โดยทั่วไปแล้ว การแฮชคอนซิ่งจะถูกนำไปใช้ด้วยตารางแฮชที่จัดเก็บการอ้างอิงแบบอ่อนซึ่งอาจถูกเก็บกวาดโดยระบบจัดการขยะเมื่อข้อมูลที่จัดเก็บไว้ภายในไม่มีการอ้างอิงจากภายนอกตาราง[ 3 ] [ 4 ]

ตัวอย่าง

ต่อไปนี้เป็นตัวอย่างง่ายๆ (แม้จะไม่มีประสิทธิภาพ) ของการใช้เมโมไลเซอร์โดยใช้ตารางแฮชและตัวชี้แบบอ่อนในภาษา Schemeฟังก์ชันbwp-objectจะคืนค่า true หากตัวชี้ที่ให้มาเป็นตัวชี้แบบอ่อนที่เสียหาย กล่าวคือ เป้าหมายถูกเก็บกวาดโดยระบบจัดการหน่วยความจำแล้ว

;; แฮชแบบอ่อน;; ( ต้องใช้'hash-table ')( define ( make-weak-table . args ) ( apply make-hash-table args ))( define ( weak-table-set! table key data ) ( let (( w ( hash-table-ref table key #f ))) ( if w ( vector-set! w 0 data ) ( let (( w ( make-weak-vector 1 ))) ( vector-set! w 0 data ) ( hash-table-set! table key w )))))( define ( weak-table-ref table key ) ( let (( w ( hash-table-ref table key #f ))) ( if w ( vector-ref w 0 ) #f )));; โรงงานเมโมไรเซอร์: สำหรับขั้นตอนที่กำหนด (ปราศจากผลข้างเคียง) ;; ส่งคืนขั้นตอนที่ทำการเมโมไรเซอร์ผลลัพธ์บางส่วนเช่นเดียวกัน;; ในแง่ของความเท่าเทียมกัน? บนรายการอาร์กิวเมนต์ทั้งหมด;; ( define ( make-weak-memoizer proc ) ( let (( cache ( make-weak-table equal? ​​))) ( lambda args ( let (( x ( weak-table-ref cache args ))) ( if ( bwp-object? x ) ( let (( r ( apply proc args ))) ( weak-table-set! cache args r ) r ) x )))))

ประวัติศาสตร์

เทคนิคการคอมไพล์แบบแฮชคอนซิงได้รับการนำเสนอโดยAP Ershovในปี 1958 [ 5 ] [ 6 ]คำว่า "แฮชคอนซิง" มีที่มาจากการใช้งานในบริบทของLispในช่วงทศวรรษ 1970 [ 7 ] [ 8 ]

ดูเพิ่มเติม

ดึงข้อมูลมาจาก " https://en.wikipedia.org/w/index.php?title=Hash_consing&oldid=1314849526 "

สรุปเนื้อหา

ข้อมูลสำคัญจากบทความ

ข้อมูลสำคัญเกี่ยวกับ แฮชคอนซิง

ใน วิทยาการคอมพิวเตอร์ โดยเฉพาะอย่างยิ่งใน การเขียนโปรแกรมเชิงฟังก์ชัน การ แฮชคอนซิง เป็นเทคนิคที่ใช้ในการแบ่งปันค่าที่มีโครงสร้างเท่ากัน [ 1 ] เมื่อมีการสร้างค่า เช่น เซลล์ คอนซิ...

ตัวอย่าง

ต่อไปนี้เป็นตัวอย่างง่ายๆ (แม้จะไม่มีประสิทธิภาพ) ของการใช้ เมโมไลเซอร์ โดยใช้ตารางแฮชและตัวชี้แบบอ่อนใน ภาษา Scheme ฟังก์ชัน bwp-object จะคืนค่า true หากตัวชี้ที่ให้มาเป็นตัวชี้แบบอ่อนที่เสียหาย กล่าวคือ เป้าหมายถูกเก็บกวาดโดยระบบจัดการหน่วยความจำแล้ว

ประวัติศาสตร์

เทคนิคการคอมไพล์แบบแฮชคอนซิงได้รับการนำเสนอโดย AP Ershov ในปี 1958 [ 5 ] [ 6 ] คำว่า "แฮชคอนซิง" มีที่มาจากการใช้งานในบริบทของ Lisp ในช่วงทศวรรษ 1970 [ 7 ] [ 8 ]

ดูเพิ่มเติม

การฝึกงานด้านสตริง รูปแบบน้ำหนักเบา ต้นไม้เมอร์เคิล ชีวิตกัญชา การฝึกงาน ดึงข้อมูลมาจาก " https://en.wikipedia.org/w/index.php?title=Hash_consing&oldid=1314849526 "