C++ 如何编写最佳页面替换算法?

C++ 如何编写最佳页面替换算法?,c++,arrays,algorithm,priority-queue,page-replacement,C++,Arrays,Algorithm,Priority Queue,Page Replacement,我分享我的逻辑。我想知道天气是否好 我创建了一个数组,用于存储每页出现的总次数 对于ex-If,页面要求的顺序为{1,2,3,1,2}。我们把它称为“seq”数组 然后数组={2,2,1}。我们把它称为“count”数组 现在,我遍历seq并为其分配一个帧,直到我没有耗尽所有帧,或者如果该帧不在内存中。然后我将帧号及其剩余的出现次数推送到最小优先级队列 for (int i = 1; i <= M; ++i) { if (frameAssigned[arr[

我分享我的逻辑。我想知道天气是否好

我创建了一个数组,用于存储每页出现的总次数

对于ex-If,页面要求的顺序为{1,2,3,1,2}。我们把它称为“
seq
”数组

然后数组={2,2,1}。我们把它称为“
count
”数组

现在,我遍历
seq
并为其分配一个帧,直到我没有耗尽所有帧,或者如果该帧不在内存中。然后我将帧号及其剩余的出现次数推送到最小优先级队列

    for (int i = 1; i <= M; ++i)
    {
        if (frameAssigned[arr[i]] != 0)    //frame already assigned
        {
            count[arr[i]]--;
            PQ.push(ii(count[arr[i]], arr[i]));
            continue;
        }

        if (freeFrames >= 1)
        {
            frameAssigned[arr[i]] = presentFrame++; //presentFrame=0 initially
            freeFrames--;
            noOfReplacements++;
            count[seq[i]]--;
            PQ.push(ii(count[seq[i]], seq[i]));
            continue;
        }

    //Now, if all free frames are exhausted, I do the following. Replace the page which is 
    //occurring the minimum number of times.

    ii temp = PQ.top(); // ii = pair<int,int>
    PQ.pop();
    int frameNumber = temp.second;
    count[seq[i]]--;
    if (seq[arr[i]] >= 0) PQ.push(ii(count[seq[i]], seq[i]));
    frameAssigned[arr[i]] = frameAssigned[custNumber];
    frameAssigned[custNumber] = 0;
    noOfReplacements++;
for(int i=1;i=1)
{
frameAssigned[arr[i]]=presentFrame++;//最初presentFrame=0
自由框架--;
noOfReplacements++;
计数[顺序[i]]-;
电能质量推送(ii(计数[顺序[i]],顺序[i]);
继续;
}
//现在,如果所有空闲帧都用完了,我将执行以下操作。替换已删除的页面
//发生的次数最少。
ii温度=PQ.top();//ii=对
PQ.pop();
int frameNumber=温度秒;
计数[顺序[i]]-;
如果(顺序[arr[i]>=0)PQ.push(ii(计数[seq[i]],顺序[i]);
frameAssigned[arr[i]]=frameAssigned[custNumber];
frameAssigned[custNumber]=0;
noOfReplacements++;

然而,这个算法似乎是不正确的。我不明白为什么。我找到了正确的算法,但我不明白为什么我的算法不起作用。

让我们看看下面的页面:

1,2,3,2,3,2,3,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1

让我们假设这两个页面可以保存在内存中。根据您的算法,当3第一次到达时,2将被替换,因为1的出现次数非常高,这不是最优的

在最优页面替换算法中,页面替换的标准基于页面再次被引用的时间


我建议你把这个问题发表后再看一遍社论