百度2017实习 页面调度算法
题目:
在计算机中,页式虚拟存储器实现的一个难点是设计页面调度(置换)算法。其中一种实现方式是FIFO算法。
FIFO算法根据页面进入内存的时间先后选择淘汰页面,先进入内存的页面先淘汰,后进入内存的后淘汰。
假设Cache的大小为2,有5个页面请求,分别为 2 1 2 3 1,则Cache的状态转换为:(2)->(2,1)->(2,1)->(1,3)->(1,3),其中第1,2,4次缺页,总缺页次数为3。
现在给出Cache的大小n和m个页面请求,请算出缺页数。
输入描述:
输入包含多组测试数据。
对于每组测试数据,第一行是整数n,第二行是整数m。
然后有m个整数,代表请求页编号。
保证:
2<=n<=20,1<=m<=100,1<=页编号<=200.
输出描述:
对于每组数据,输出一个整数,代表缺页数
输入例子:
2 5 2 1 2 3 1
输出例子:
3
思路:
页面置换算法:http://www.cnblogs.com/zhangbaochong/p/5827167.html
FIFO置换算法可以利用队列实现,要访问的页面不在队列中时即为缺页,如果队列容量小于cache容量直接push,否则先pop再push
代码:
1 #include <iostream> 2 #include <queue> 3 #include <algorithm> 4 5 using namespace std; 6 7 bool find(queue<int> q, int val) 8 { 9 while(!q.empty()) 10 { 11 int temp = q.front(); 12 if (temp == val) 13 return true; 14 q.pop(); 15 } 16 return false; 17 } 18 19 int main() 20 { 21 int n, m; 22 while (cin >> n >> m) 23 { 24 int temp,count = 0; 25 queue<int> que; 26 for (int i = 0; i < m; ++i) 27 { 28 cin >> temp; 29 if (!find(que,temp)) 30 { 31 ++count; 32 if (que.size() < n) 33 que.push(temp); 34 else 35 { 36 que.pop(); 37 que.push(temp); 38 } 39 } 40 } 41 cout << count << endl; 42 } 43 }