यह चुनौती वास्तव में सरल है (और अधिक कठिन एक अग्रदूत!)।
संसाधन पहुंच की एक सरणी को देखते हुए (केवल nonnegative पूर्णांकों द्वारा निरूपित) और एक पैरामीटर n
, कैश की संख्या को याद करते हैं जो यह मानती है कि हमारी कैश की क्षमता है n
और पहले-पहले-आउट (FIFO) इजेक्शन का उपयोग करता है जब यह पूर्ण होता है ।
उदाहरण:
4, [0, 1, 2, 3, 0, 1, 2, 3, 4, 0, 0, 1, 2, 3]
0 = not in cache (miss), insert, cache is now [0]
1 = not in cache (miss), insert, cache is now [0, 1]
2 = not in cache (miss), insert, cache is now [0, 1, 2]
3 = not in cache (miss), insert, cache is now [0, 1, 2, 3]
0 = in cache (hit), cache unchanged
1 = in cache (hit), cache unchanged
2 = in cache (hit), cache unchanged
3 = in cache (hit), cache unchanged
4 = not in cache (miss), insert and eject oldest, cache is now [1, 2, 3, 4]
0 = not in cache (miss), insert and eject oldest, cache is now [2, 3, 4, 0]
0 = in cache (hit), cache unchanged
1 = not in cache (miss), insert and eject oldest, cache is now [3, 4, 0, 1]
2 = not in cache (miss), insert and eject oldest, cache is now [4, 0, 1, 2]
3 = not in cache (miss), insert and eject oldest, cache is now [0, 1, 2, 3]
तो इस उदाहरण में 9 मिस थे। शायद एक कोड उदाहरण इसे बेहतर तरीके से समझाने में मदद करता है। पायथन में:
def num_misses(n, arr):
misses = 0
cache = []
for access in arr:
if access not in cache:
misses += 1
cache.append(access)
if len(cache) > n:
cache.pop(0)
return misses
कुछ और टेस्टेसिस (जिसमें अगली चुनौती के लिए एक संकेत होता है - कुछ भी ध्यान देने योग्य?)
0, [] -> 0
0, [1, 2, 3, 4, 1, 2, 3, 4] -> 8
2, [0, 0, 0, 0, 0, 0, 0] -> 1
3, [3, 2, 1, 0, 3, 2, 4, 3, 2, 1, 0, 4] -> 9
4, [3, 2, 1, 0, 3, 2, 4, 3, 2, 1, 0, 4] -> 10
बाइट्स में सबसे छोटा कोड जीतता है।
notice anything curious?
अब थोड़ी देर के लिए आखिरी बयान देख रहा था ... और बस देखा, कैश की क्षमता को बढ़ाने से जरूरी नहीं कि यादों की संख्या कम हो जाए?!