最近最少使用(LRU)缓存首先丢弃最近最少使用的项目如何设计和实现这样的缓存类?设计要求如下:
1)尽可能快地找到项目
2)一旦缓存未命中并且缓存已满,我们需要尽快替换最近最少使用的项目.
如何在设计模式和算法设计方面分析和实现这个问题?
我正在制作一个小型地下城模拟游戏.游戏非常详细,我计划随着时间的推移,有一个代表"怪物"的类的+ 200k实例.它们包含该怪物的特权,技能和历史.像他使用了多少药水,他住在哪里,他的巡逻路线是什么等等.
我开始用SQLite实现它,并使用一个名为"monsters"的简单表,其中包含所有数据.这允许我使用SQL查询来查找每帧上模拟计算所需的怪物.例如:找到所有巡逻A点的怪物,或找到使用了药水X的所有怪物等等.不幸的是,在每一帧上多次查询SQLite会很快减慢游戏速度.即使它是2D游戏,我也需要宝贵的毫秒来进行模拟计算.
此外,我将来需要JOIN来制作图表:我需要知道怪物是否攻击了另一个怪物,或者怪物是否是另一个怪物团队的一部分.这会使事情进一步减缓.
有没有人对如何处理这个有任何建议?
我的数据类似于以下内容:
我正在尝试使用C++实现LRU Cache.我想知道实现它们的最佳设计是什么.我知道LRU应该提供find(),添加一个元素并删除一个元素.删除应删除LRU元素.实现此目的的最佳ADT是什么?例如:如果我使用带有元素的映射作为值和时间计数器作为键我可以在O(logn)时间内搜索,Inserting是O(n),删除是O(logn).
我们有一个C++应用程序,我们尝试提高性能.我们发现数据检索需要花费大量时间,并且想要缓存数据.我们无法将所有数据存储在内存中,因为它很大.我们希望在内存中存储多达1000个项目.这些项目可以通过long密钥编制索引.但是,当缓存大小超过1000时,我们想要删除最长时间未访问的项目,因为我们假设某种"引用位置",即我们假设最近访问的缓存中的项目可能会再次访问.
你能建议一种实现它的方法吗?
我最初的实现是拥有一个map<long, CacheEntry>存储缓存,并添加一个accessStamp成员,CacheEntry只要创建或访问条目,就会将其设置为增加的计数器.当缓存已满并需要新条目时,代码将扫描整个缓存映射并找到最低的条目accessStamp,并将其删除.这样做的问题是,一旦缓存已满,每次插入都需要对缓存进行全面扫描.
另一个想法是举行的名单CacheEntries,除了缓存地图,并在每个访问移动访问的条目到列表的顶部,但问题是如何快速地在列表中找到该条目.
你能建议一个更好的方法吗?
谢谢
splintor
我想知道是否有可能有一个像增强循环缓冲区一样工作的地图。这意味着它的大小有限,当它达到有限大小时,它将开始覆盖第一个插入的元素。我也希望能够通过这样的缓冲区进行搜索并find or create使用[name]. 是否有可能创造这样的东西以及如何做到?
我有一个关于std :: set容器的简短问题.现在我正在使用pushback功能来提供我的设置.对于每个push_back,该集合变得越来越大.我只对最新的30个元素感兴趣......可以删除旧元素.所以我的想法是将集合的大小限制为30个元素左右,并通过这样做摆脱不需要的旧元素.但是,默认情况下,该集不支持限制.我可以偶尔检查一下这个集的大小,然后手动删除多余的元素.有更聪明的方法吗?
关心Lumpi