هاش كونسينغ
في علوم الحاسوب ، وخاصةً في البرمجة الوظيفية ، تُستخدم تقنية تجزئة البيانات (Hash consing) لمشاركة القيم المتساوية بنيويًا. [ 1 ] عند إنشاء قيمة، مثل خلية cons ، تتحقق هذه التقنية مما إذا كانت هذه القيمة قد أُنشئت سابقًا، وإذا كان الأمر كذلك، تُعيد استخدام القيمة السابقة، متجنبةً بذلك تخصيص ذاكرة جديدة . من الخصائص المفيدة لتقنية تجزئة البيانات إمكانية اختبار تساوي بنيتين في وقت ثابت عبر تساوي المؤشرات، مما يُحسّن بدوره كفاءة خوارزميات فرق تسد عندما تحتوي مجموعات البيانات على كتل متداخلة. [ 2 ] وقد أثبتت تقنية تجزئة البيانات أنها تُحسّن الأداء بشكل ملحوظ - من حيث المساحة والوقت - لخوارزميات البرمجة الرمزية والديناميكية .
تُنفَّذ عملية التجزئة عادةً باستخدام جداول التجزئة التي تخزن مراجع ضعيفة يمكن جمعها بواسطة جامع البيانات المهملة عندما لا تحتوي البيانات المخزنة فيها على أي مراجع من خارج الجدول. [ 3 ] [ 4 ]
مثال
فيما يلي عرض توضيحي بسيط (وإن كان غير فعال) لآلية تخزين مؤقتة باستخدام جدول تجزئة ومراجع ضعيفة في لغة Scheme . bwp-objectتُرجع الدالة القيمة "صحيح" إذا كان المرجع المُعطى مؤشرًا ضعيفًا تالفًا، أي أن الهدف قد تم جمعه بواسطة جامع البيانات المهملة.
;; التجزئة الضعيفة ;; ( يتطلب '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 )))))( تعريف ( مفتاح الجدول المرجعي للجدول الضعيف ) ( دع (( w ( مفتاح الجدول المرجعي لجدول التجزئة #f ))) ( إذا w ( مرجع المتجه 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 ))))تاريخ
قدّم أ.ب. إرشوف تقنية تجميع التجزئة (hash consing) في عام 1958. [ 5 ] [ 6 ] مصطلح "التجزئة" (hash consing) نشأ من تطبيقات في سياق لغة ليسب (Lisp) في سبعينيات القرن العشرين. [ 7 ] [ 8 ]
انظر أيضاً
مراجع
- ↑ غوتو، إيتشي (1974-05-01)، خوارزميات النسخ الأحادي والترابطية في لغة ليسب الموسعة ، تم الاطلاع عليه بتاريخ 2025-08-09
- ↑ ليليينزين، أولي (2013). "المجموعات والخرائط المستمرة بشكل متدفق". arXiv : 1301.3388 [ cs.DS ].
- ↑ ألين، جون (1978). تشريح اللثغة . ماكجرو هيل . ISBN 0-07-001115-X.
- ↑ فيلياتر، جان كريستوف؛ كونشون، سيلفان (2006). "التجزئة المعيارية الآمنة من حيث النوع". ورشة عمل حول ML . ACM .
- ↑ إرشوف، أ.ب. (1 أغسطس 1958). "حول برمجة العمليات الحسابية" . اتصالات رابطة آلات الحوسبة . 1 (8): 3-6 . doi : 10.1145/368892.368907 . ISSN 0001-0782 . S2CID 15986378 .
- ↑ "مشاركة وحذف التعبيرات الفرعية المشتركة في تجميع لغات البرمجة الخاصة بالمجالات المحدودة" . okmij.org . تم الاطلاع عليه بتاريخ 27 أبريل 2023 .
- ↑ دويتش، لورانس بيتر (1973). مدقق برامج تفاعلي (ملف PDF) (أطروحة دكتوراه). بالو ألتو: تقرير فني رقم CSL-73-1 صادر عن مركز أبحاث زيروكس بالو ألتو .
- ↑ غوتو، إيتشي (1974). خوارزميات النسخ الأحادي والترابطية في لغة ليسب الموسعة (ملف PDF) (تقرير فني). طوكيو: جامعة طوكيو، التقرير الفني TR 74-03.
للمزيد من القراءة
- غوتو، إيتشي (1974-05-01)، النسخ الأحادي والخوارزميات الترابطية في لغة ليسب الموسعة ، تم الاطلاع عليه بتاريخ 2025-08-09
- إرشوف، أ.ب. (1958). "حول برمجة العمليات الحسابية" . اتصالات رابطة آلات الحوسبة . 1 (8): 3-6 . doi : 10.1145/368892.368907 . S2CID 15986378 .
- جان غوبو. تنفيذ اللغات الوظيفية باستخدام المساواة السريعة والمجموعات والخرائط: تمرين في تجزئة Consing. في Journées Francophones des Languages Applicatifs (JFLA'93)، الصفحات 222-238، آنسي، فبراير 1993.
- تطبيق لغات البرمجة الوظيفية
- التجزئة
- مقالات قصيرة في علوم الحاسوب
