4种常见的
1、最佳置换算法(OPT)(理想置换算法)
2、先进先出置换算法(FIFO)
3、最近最久未使用(LRU)算法
4、时钟(CLOCK)置换算法
此方法是3的改进版,以下是思路的代码实现:
n代表任务数量,cnt代表物理分配内存数
#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
int x,n,m,k = 1,ans;
int h[10001],vis[10001];
bool cnt[10001];
void solve()
{
cin >> n >> m;
for(int i = 1;i <= m;i ++)
{
cin >> x;
h[i] = x,cnt[x] = 1;
}
ans = m;
for(int i = m + 1; i <= n;i ++)
{
cin >> x;
if(cnt[x]) continue;
ans ++;
if(k == m + 1)
{
for(int j = 2;j <= m;j ++) vis[j] = 0;
cnt[h[1]] = 0,h[1] = x,cnt[x] = 1;
k = 2;
}
else
{
cnt[x] = 1,cnt[h[k]] = 0;
h[k] = x,k ++;
}
}
cout << ans << "\n";
return;
}
int main()
{
solve();
return 0;
}
参考: