आप इस तरह की चीज कैसे काम करते हैं यह समझने के लिए गणित कर सकते हैं।
एसिम्प्टोटिक विश्लेषण के साथ काम करने के लिए एक लोकप्रिय विधि बैंकर विधि है। आप जो भी करते हैं, वह आपके सभी परिचालनों को एक अतिरिक्त लागत के साथ मार्कअप करता है, बाद में एक महंगे ऑपरेशन के लिए भुगतान करने के लिए इसे "बचत" करता है।
चलो कुछ डंप मान्यताओं गणित आसान बनाने के लिए करते हैं:
- एक सरणी लागत
1
में लेखन। (सरणी के बीच डालने और आगे बढ़ने के लिए)
- एक बड़ी सरणी आवंटित करना निःशुल्क है।
function insert(x){
if n_elements >= maximum array size:
move all elements to a new array that
is K times larger than the current size
add x to array
n_elements += 1
जाहिर है, "सबसे खराब स्थिति" होता है हम नई सरणी के तत्वों को स्थानांतरित करने के लिए है जब:
और हमारे एल्गोरिथ्म तरह दिखता है। आइए सम्मिलन लागत में d
का निरंतर मार्कअप जोड़कर इसे संशोधित करने का प्रयास करें, इसे प्रति ऑपरेशन के कुल (1 + d)
पर लाएं।
एक सरणी का आकार बदलने के बाद, हमारे पास (1/के) भर गया है और कोई पैसा बचाया नहीं गया है। जब तक हम सरणी को भरते हैं, हम सुनिश्चित कर सकते हैं कि कम से कम d * (1 - 1/K) * N
सहेजा गया हो। चूंकि यह पैसा ले जाया जा रहा सब एन तत्वों के लिए भुगतान करने के लिए सक्षम होना चाहिए, हम K
और d
के बीच एक रिश्ता यह पता लगाने कर सकते हैं:
d*(1 - 1/K)*N = N
d*(K-1)/K = 1
d = K/(K-1)
एक सहायक तालिका:
k d 1+d(total insertion cost)
1.0 inf inf
1.1 11.0 12.0
1.5 3.0 4.0
2.0 2.0 3.0
3.0 1.5 2.5
4.0 1.3 2.3
inf 1.0 2.0
इस से
तो आप इस समस्या के लिए समय/मेमोरी ट्रेडऑफ कैसे काम करते हैं, इस बारे में एक मोटा गणितज्ञ का विचार प्राप्त कर सकते हैं। कुछ चेतावनी हैं, ज़ाहिर है: जब मैं कम तत्व प्राप्त करता हूं तो सरणी को कम करने पर नहीं जाता था, यह केवल सबसे बुरे मामले को कवर करता है जहां कोई तत्व कभी नहीं हटाया जाता है और अतिरिक्त मेमोरी आवंटित करने की समय लागत के लिए जिम्मेदार नहीं था।
वे संभवतः अंत में इसे समझने के लिए प्रयोगात्मक परीक्षणों का एक समूह चलाते हैं जो मैंने अप्रासंगिक लिखा है।
क्या आप वाकई * सम्मिलन * का मतलब रखते हैं? मुझे लगता है कि अंत में * प्रविष्टि *, या 'push_back', केवल am (1) amortized है; मनमाने ढंग से सम्मिलन उन तत्वों की संख्या में रैखिक है जिन्हें स्थानांतरित करने की आवश्यकता है। –
ओह, मुझे इसके बारे में संदेह था कि इसका उल्लेख करने के लिए धन्यवाद ... इसे संपादित करेगा – jemmanuel
पृथ्वी पर क्यों लोग "ऑफ-विषय" और "गैर-रचनात्मक" के रूप में बंद होने के लिए मतदान कर रहे हैं?"डुप्लिकेट" के रूप में बंद करने के लिए वोटिंग समझा जा सकता है, लेकिन दिए गए कारण नहीं। संभावित मतदाता: जब आप कोई प्रश्न नहीं समझते हैं, तो कृपया मतदान से बचें। –