कैशिंग और संस्मरण के बीच अंतर क्या है?


114

मैं क्या के बीच वास्तविक अंतर जानना चाहते हैं cachingऔर memoizationहै।
जैसा कि मैं इसे देखता हूं, दोनों को इसे संग्रहीत करके डेटा प्राप्त करने के लिए बार-बार फ़ंक्शन कॉल से बचना शामिल है

दोनों के बीच मुख्य अंतर क्या है?


मुझे आश्चर्य है कि अगर आप कह सकते हैं "संस्मरण कैशिंग के लिए है" के रूप में "सरणी विरल सरणी के लिए है"। दूसरे शब्दों में, आप हर संभव इनपुट संयोजन की गणना के बजाय केवल चीजों को "मांग पर" संग्रहीत करते हैं।
श्रीधर सरनोबत

जवाबों:


110

संस्मरण कैशिंग का एक विशिष्ट रूप है जिसमें इसके मापदंडों के आधार पर एक फ़ंक्शन के रिटर्न मूल्य को कैशिंग करना शामिल है ।

कैशिंग एक अधिक सामान्य शब्द है; उदाहरण के लिए, HTTP कैशिंग कैशिंग है, लेकिन संस्मरण नहीं।

विकिपीडिया कहता है :

हालांकि कैशिंग से संबंधित, संस्मरण इस अनुकूलन के एक विशिष्ट मामले को संदर्भित करता है, इसे कैशिंग के रूपों जैसे बफरिंग या पृष्ठ प्रतिस्थापन से अलग करता है।


2
लेकिन आप हमेशा उस हिस्से का उपयोग कर सकते हैं जहां कैश का उपयोग किसी फ़ंक्शन के साथ किया जाता है और इसे 'मेमोइज़ेशन' नाम दिया जाता है। हालांकि आप अपने कार्य में कैशिंग नीति के नियंत्रण में अंतर करते हैं, जबकि संस्मरण उच्च क्रम है और मेरे विचार से फ़ंक्शन के बाहर होता है।
निकोलस

HTTP कैशिंग संस्मरण क्यों नहीं है? वह भी पैरामीटर (अनुरोधित संसाधन का URL) पर आधारित है।
Topo Reinstate Monica

@topomorto: जैसी सुविधाओं If-Matchऔर समाप्ति के कारण। संस्मरण केवल शुद्ध कार्य के लिए समझ में आता है, जो HTTP शायद ही कभी हो।
SLaks

@nicolas, काफी नहीं, मुझे लगता है। मुझे लगता है कि संस्मरण में "फ़ंक्शन" शब्द का उपयोग शुद्ध / गणितीय अर्थ में किया जाता है। किसी दिए गए पते से वेब पेज डाउनलोड करना एक कार्य नहीं माना जा सकता है, क्योंकि ऐसा हो सकता है कि पृष्ठ बदल जाए।
एलेक्सी

@Alexey कैशिंग पर समान टिप्पणी लागू नहीं होती है? उन सभी रणनीतियों को एक ही फ़ंक्शन कॉल पर निर्भर करता है जो एक ही परिणाम देता है, उर्फ ​​कोई अपस्ट्रीम साइड इफेक्ट नहीं।
निकोलस

47

जैसा कि मैंने उन्हें इस्तेमाल करते हुए देखा है, "संस्मरण" "एक नियतात्मक कार्य के परिणाम को रोकना" है जिसे किसी भी समय एक ही फ़ंक्शन और इनपुट को देखते हुए पुन: प्रस्तुत किया जा सकता है।

"कैशिंग" में मूल रूप से किसी भी आउटपुट-बफ़रिंग रणनीति शामिल है, चाहे किसी निश्चित समय पर स्रोत मूल्य प्रतिलिपि प्रस्तुत करने योग्य हो या नहीं। वास्तव में, कैशिंग का उपयोग इनपुट बफरिंग रणनीतियों को संदर्भित करने के लिए भी किया जाता है , जैसे कि डिस्क या मेमोरी पर राइट-कैश। तो यह एक बहुत अधिक सामान्य शब्द है।


क्या आप सुनिश्चित हैं कि फ़ंक्शन को नियतात्मक होना चाहिए?
घर्मन

4
@ जर्मन, हाँ, संस्मरण निर्धारणवाद पर निर्भर करता है। क्लासिक उदाहरण एक पुनरावर्ती एल्गोरिदम है, जैसे कि फाइबोनैचि अनुक्रम या फैक्टरियल। बेस केस के सभी तरीकों को फिर से गणना करने के बजाय, पहले से गणना किए गए मानों के लिए पहले परिणामों का पुन: उपयोग करके एक ज्ञापन फ़ंक्शन शॉर्ट-सर्किट होगा। यह स्पष्ट रूप से उसी इनपुट पर निर्भर करता है जो हमेशा समान आउटपुट देता है, जो कि नियतत्ववाद की परिभाषा है। दूसरी ओर, कैशिंग का उपयोग अक्सर गैर-नियतात्मक (जैसे यादृच्छिक या टाइमस्टैम्प) प्रक्रियाओं के लिए किया जाता है, इस समझ के साथ कि परिणाम "ताज़ा" मूल्य से मेल नहीं खा सकते हैं।
harpo

6

मुझे लगता है कि टर्म कैशिंग का उपयोग आमतौर पर तब किया जाता है जब आप IO परिचालनों के परिणामों को संग्रहीत करते हैं, या मूल रूप से कोई भी डेटा जो आपके पास बाहर से आ रहा है (फाइल, नेटवर्क, डीबी क्वेरी)। शब्द संस्मरण आमतौर पर आपके स्वयं के संगणना के परिणामों पर लागू होता है, उदाहरण के लिए गतिशील प्रोग्रामिंग के संदर्भ में।


1

संस्मरण एक नियतात्मक कार्य के परिणाम को कैशिंग का एक विशेष रूप है। इसका मतलब यह है कि फ़ंक्शन के बाहर के परिणाम को रोकना संस्मरण नहीं है क्योंकि फ़ंक्शन को नए परिणाम की गणना करते समय कैश को म्यूट करना होगा (पहले से कैश में नहीं) इसलिए यह अब (शुद्ध) फ़ंक्शन नहीं होगा। संस्मरण का तात्पर्य कैश को एक अतिरिक्त तर्क (एक सहायक फ़ंक्शन में) के रूप में पारित करने से है। मेमोइज़ेशन उन फ़ंक्शंस को ऑप्टिमाइज़ करेगा, जिन्हें किसी एकल एक्सेस के लिए कई बार मानों की गणना करने की आवश्यकता होती है। कैशिंग उन कार्यों का अनुकूलन करेगा जो समान मापदंडों के साथ कई बार कॉल किए जाते हैं। दूसरे शब्दों में, संस्मरण पहली पहुंच का अनुकूलन करेगा कि क्या कैशिंग केवल आवर्तक पहुंच का अनुकूलन करेगा।


0

मैं अन्य महान जवाब है कि करने के लिए जोड़ना चाहते हैं Memoization के रूप में भी जाना जाता है पेश । मुझे लगता है कि यह जानना उन लोगों के लिए भी महत्वपूर्ण है जो सीखते हैं कि संस्मरण और कैशिंग क्या हैं।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.