Как написать оптимальный алгоритм замены страницы?

Я делюсь своей логикой. Мне нужно знать, хорошо ли это.

Я создал массив, который хранит общее количество вхождений для каждой страницы.

Например, последовательность требований к странице { 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++;

Однако этот алгоритм кажется неверным. Я не понимаю почему. Я нашел правильный алгоритм здесь, но я не понимаю, почему мой не работает.

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 только она исчезнет.

Другие вопросы по тегам