百度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 }

 

posted @ 2016-08-31 18:52  zhangbaochong  阅读(718)  评论(0编辑  收藏  举报