Thử thách này thực sự đơn giản (và là tiền thân cho một thử thách khó khăn hơn!).
Đưa ra một loạt các truy cập tài nguyên (được biểu thị đơn giản bằng các số nguyên không âm) và một tham số n
, trả về số lượng bộ nhớ cache mà nó sẽ giả sử bộ đệm của chúng tôi có dung lượng n
và sử dụng sơ đồ tống xuất trước xuất trước (FIFO) khi đầy .
Thí dụ:
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]
Vì vậy, trong ví dụ này đã có 9 lần bỏ lỡ. Có lẽ một ví dụ mã giúp giải thích nó tốt hơn. Trong 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
Một số thử nghiệm tiếp theo (trong đó có gợi ý về thử thách tiếp theo - có nhận thấy điều gì tò mò không?):
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
Mã ngắn nhất trong byte thắng.
notice anything curious?
một lúc rồi ... và chỉ cần chú ý, việc tăng dung lượng bộ đệm không nhất thiết phải giảm số lần bỏ lỡ?!