ความท้าทายนี้ง่ายมาก (และเป็นปูชนียบุคคลที่ยากขึ้น!)
รับอาร์เรย์ของการเข้าถึงทรัพยากร (แสดงโดยเพียงแค่จำนวนเต็มไม่เป็นลบ) และพารามิเตอร์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 คิดถึง บางทีตัวอย่างรหัสช่วยอธิบายได้ดีกว่า ใน Python:
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?
ซักพักแล้วและเพิ่งสังเกตเห็นว่าการเพิ่มความจุแคชไม่จำเป็นต้องลดจำนวนการพลาดไปด้วย!