我正在分享我的逻辑。我需要知道它是否可以。
我创建了一个数组,用于存储每个页面的总出现次数。
对于ex - 如果页面要求序列是{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++;
但是,这个算法似乎不正确。我不明白为什么。我找到了正确的算法here,但我不明白为什么我的工作没有。
答案 0 :(得分:1)
让我们看看下面的页面出现:
1,2,3,2,3,2,3,1,1,1,1,1,1,1,1,1,1,1,1,1,1
让我们假设2页可以保存在内存中。根据你的算法,当3将第一次到达时,2将被替换,因为1的出现次数相当高,这不是最优的。
在最佳页面替换算法中,页面替换的标准基于再次引用页面之前的时间。
我建议您在问题http://www.codechef.com/AUG14/problems/CLETAB出版后仔细阅读此问题的编辑。