最佳置换算法
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
/*-------------最佳置换算法(OPtimal Replacement Algorithm,ORA)-------------*/
/*算法描述:所选择的淘汰页,是以后永不使用,或最长时间内不使用的页面*/
/*---------------------------------writen by Xu Zhuozhuo-----------------------------------*/
C++代码示例:
#include
#define MaxSize 20
#define Num_Block 3
using namespace std;
int max(int a,int b,int c) //返回三者的最大值
{
if(a
if(a return a; } int main() { int num_ref; //引用字符的数目 int ref_arr[MaxSize]; //引用字符串数组 int phy_blk[Num_Block]; //数组模拟“物理块” cout <<"-----Optimal Replacement Algorithms-----" < do { cout <<"Please input the number of reference chars:" < cin >>num_ref; //输入引用字符串的数目 }while(num_ref>MaxSize); cout <<"Please input the queue of reference chars:" < for(int i=0;i for(int j=0;j cout < cout < for(int p=0;p { if(!(phy_blk[0]==ref_arr[Num_Block+p] || phy_blk[1]==ref_arr[Num_Block+p] || phy_blk[2]==ref_arr[Num_Block+p])) {//寻找phy_blk[0]在引用字符串中的下一位置k1 for(int k1=Num_Block+p+1;k1 if(phy_blk[0]==ref_arr[k1]) break; //寻找phy_blk[1]在引用字符串中的下一位置k2 for(int k2=Num_Block+p+1;k2 if(phy_blk[1]==ref_arr[k2]) break; //寻找phy_blk[2]在引用字符串中的下一位置k3 for(int k3=Num_Block+p+1;k3 if(phy_blk[2]==ref_arr[k3]) break; int max_ref=max(k1,k2,k3); //返回k1,k2,k3中的最大者 if(max_ref==k1) //如果最大者为k1 phy_blk[0]=ref_arr[Num_Block+p]; else if(max_ref==k3) //如果最大者为k2 phy_blk[2]=ref_arr[Num_Block+p]; else if(max_ref==k2) //如果最大者为k3 phy_blk[1]=ref_arr[Num_Block+p]; } //输出本次替换后的“物理块”数组内容 cout < for(int loop=0;loop cout < } return 0; } VC++6.0下的运行结果见下页:(数据源自操作系统课本)