要查找长度为2的所有排列,可以使用以下简单程序:
#include <iostream>
using namespace std;
int main(int argc, const char *argv[])
{
int l[] = {0, 1, 2, 3, 4, 5};
const int length = sizeof(l)/sizeof(l[0]);
for(int i = 0; i + 1 < length; i++)
for(int j = i + 1; j < length; j++)
cout << "(" << l[i] << ", " << l[j] << ")" << endl;
return 0;
}
但是在我需要它的应用程序中,单个项目是BIG,需要在使用该集合之前构建。因此,我试图找到算法,它做同样但阻止。阻止应该允许我有一个可以用于缓存的银行。
以下说明了一个(手动)创建的带有银行的序列,它可以容纳4个项目:
SETS, Cache miss, bank
(0,1) * * 0, 1
(0,2) * 0, 1, 2
(0,3) * 0, 1, 2, 3
(1,2) 0, 1, 2, 3
(1,3) 0, 1, 2, 3
(2,3) 0, 1, 2, 3
(0,4) * 0, 1, 2, 4
(1,4) 0, 1, 2, 4
(2,4) 0, 1, 2, 4
(0,5) * 0, 1, 4, 5
(1,5) 0, 1, 4, 5
(4,5) 0, 1, 4, 5
(2,5) 0, 2, 4, 5
(3,4) * 3, 2, 4, 5
(3,5) 3, 2, 4, 5
你们有没有人知道解决这个问题的方法吗?或者你能指出正确的方向吗?
- 艾伦
答案 0 :(得分:0)
使用方法cache
创建一个类get(int ID)
,该方法返回具有相应ID的项目:
(1)如果相应的项已经被缓存,则返回缓存的副本(或指向它的指针)
(2)如果不是:创建它,从缓存中删除一个项目,将新项目添加到缓存中,然后继续(1)
困难的部分是决定从(2)中的缓存中删除哪个项目。最佳选择是删除最长时间不需要的项目。如果这不实用(例如因为您对访问模式不够了解),则有许多替代方案。
最常见的是:
有关更多示例,请参阅Wikipedia article about cache algorithms。