页面调度算法----百度2017暑期实习生编程题

论坛 期权论坛 编程之家     
选择匿名的用户   2021-6-2 20:58   1952   0

页面调度算法

在计算机中,页式虚拟存储器实现的一个难点是设计页面调度(置换)算法。其中一种实现方式是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
  


// ConsoleApplication3.cpp : 定义控制台应用程序的入口点。
//

#include "stdafx.h"
#include <iostream>
#include <vector>

bool vecfind(std::vector<int>& vec, int num) {
 int len = vec.size();
 for (int i = 0; i < len; ++i){
  if (num == vec[i])
   return true;
 }
 return false;
}

int main() {
 int n, m;
 while (std::cin >> n >> m) {
  std::vector<int> vecCache;
  std::vector<int> vecPage(m);
  int cnt = 0;
  for (int i = 0; i < m; ++i) {
   std::cin >> vecPage[i];
  }
  for (int i = 0; i < m; ++i) {
   if (vecfind(vecCache, vecPage[i])) {
    continue;
   }
   else {
    if (vecCache.size() < n) {
     vecCache.push_back(vecPage[i]);
    }
    else{
     vecCache.erase(vecCache.begin());
     vecCache.push_back(vecPage[i]);
    }
    ++cnt;
   }
  }

  std::cout << cnt << std::endl;
 }


 return 0;
}


第二次做:


// ConsoleApplication3.cpp : 定义控制台应用程序的入口点。
//

#include "stdafx.h"
#include <iostream>
#include <vector>

bool vecfind(std::vector<int>& vec, int num) {
 int len = vec.size();
 for (int i = 0; i < len; ++i){
  if (num == vec[i])
   return true;
 }
 return false;
}

int main() {
 int n, m;
 while (std::cin >> n >> m) {
  std::vector<int> vecCache;
  std::vector<int> vecPage(m);
  int cnt = 0;
  for (int i = 0; i < m; ++i) {
   std::cin >> vecPage[i];
  }
  for (int i = 0; i < m; ++i) {
   if (vecfind(vecCache, vecPage[i])) {
    continue;
   }
   else {
    if (vecCache.size() < n) {
     vecCache.push_back(vecPage[i]);
    }
    else{
     vecCache.erase(vecCache.begin());
     vecCache.push_back(vecPage[i]);
    }
    ++cnt;
   }
  }

  std::cout << cnt << std::endl;
 }


 return 0;
}


第三次做:

#include <iostream>
#include <queue>
#include <vector>

using namespace::std ;

bool isFind( deque<int>& dq, int target ) {
    for ( int i = 0; i < dq.size(); ++ i ) {
        if ( dq[i] == target ) return true ;
    }
    return false ;
}

int main() {
    int n, m ;
    
    while ( cin >> n >> m ) {
        if ( n <= 0 || m <= 0 ) continue ;
        
        vector<int> vec( m ) ;
        for ( int i = 0; i < m; ++ i ) {
            cin >> vec[i] ;
        }
        
        deque<int> cache ;
        int fail = 0 ;
        
        for ( int i = 0; i < m; ++ i ) {
            if ( isFind( cache, vec[i] ) == false ) {
                ++ fail ;
                if ( cache.size() == n ) {
                    cache.pop_front() ;
                    cache.push_back( vec[i] ) ;
                }
                else if ( cache.size() < n ) {
                    cache.push_back( vec[i] ) ;
                }
            }
            else continue ;
        }
        
        cout << fail << endl ;
    }
    
    return 0 ;
}


分享到 :
0 人收藏
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

积分:3875789
帖子:775174
精华:0
期权论坛 期权论坛
发布
内容

下载期权论坛手机APP