এই চ্যালেঞ্জটি সত্যই সহজ (এবং আরও বেশি কঠিন সমস্যার পূর্ববর্তী!)।
রিসোর্স অ্যাক্সেসের একটি অ্যারে দেওয়া হয়েছে (কেবলমাত্র অণুগঠিত পূর্ণসংখ্যার দ্বারা চিহ্নিত করা হয়েছে) এবং একটি প্যারামিটার n
, আমাদের ক্যাশে ক্ষমতা আছে ধরে নিয়েছে এবং যে ক্যাশে মিস করেছে তার সংখ্যাটি ফিরিয়ে দিন n
এবং পূর্ণ হলে এটি ফার্স্ট-ইন-ফার্স্ট-আউট (ফিফো) ইজেকশন স্কিম ব্যবহার করে ।
উদাহরণ:
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?
এখন কিছুক্ষণের জন্য শেষ বিবৃতিটির দিকে চেয়ে ছিলাম ... এবং কেবল লক্ষ্য করেছি, ক্যাশে ক্ষমতা বাড়ানো অগত্যা মিসের সংখ্যা হ্রাস করে না ?!