您将获得一系列的内存请求和一个缓存大小。在任何高速缓存替换策略下,您必须返回尽可能少的高速缓存未命中数。
最佳策略是Belady的算法,您可以根据需要使用它。
缓存系统的工作方式如下:缓存开始为空。内存请求进来。如果请求在高速缓存中请求一条数据,一切都很好。否则,您将导致缓存未命中。此时,您可以将请求的数据插入缓存中以备将来使用。如果缓存已满,并且您想插入新数据,则必须逐出缓存中先前的数据。您可能永远不会插入不仅在缓存中的数据。
您的目标是针对给定的内存请求序列和缓存大小,找到最少可能的缓存未命中数。
系统会为您提供缓存大小,正整数和内存请求序列(这是令牌列表)。这些令牌可以是您喜欢的任何类型的令牌,只要可以使用至少256个不同的令牌(字节就可以,布尔不是)。例如,整数,字符串,列表都可以。如果需要,请进行澄清。
测试用例:
3
[5, 0, 1, 2, 0, 3, 1, 2, 5, 2]
6
请参阅维基百科,以获取实现此目的的替代政策。
2
[0, 1, 2, 0, 1, 0, 1]
3
只需避免添加2
到缓存中。
3
[0, 1, 2, 1, 4, 3, 1, 0, 2, 3, 4, 5, 0, 2, 3, 4]
9
实现此目的的一种方法是永远不要逐出0
和2
,并且1
在最后一次使用后尽快将其逐出。
计分:这是代码高尔夫球。最少的字节数获胜。
我们是否可以假定该列表至少包含2个令牌?
—
Arnauld
@Arnauld我要说不,尽管如果只有1个解决方案,答案当然总是
—
1。– isaacg