Re_вольвер: ( гpаф в линейкy)
- From
- Oleg I. Khovayko ()
- To
- Juriy Tikhomirov
- Date
- 2003-01-07T00:17:08Z
- Area
- RU.ALGORITHMS
From: "Oleg I. Khovayko" <olegh@ncbi.nlm.nih.gov>
Juriy Tikhomirov wrote:
> JT>> кста, поясните особый смысл циклических списков.
> KA> А что в них такого особого? Беpем линейный список и конец связываем с
> KA> началом :)
>
> дык, это ясно. не ясно, нахpена это нyжно.
>
Ну, причины бывают разные.
Например, одна из последних задач, где я применял цикл. список,
была разработка подсистемы кеширования.
Каков простейший алгоритм кеширования? Стопка книг!
То есть, допустим, есть у тебя стопка книг. Ты произвольно берешь
книгу из стопки. Почитал - и положил наверх.
Самые часто используемые книги в ней будут всегда близко к вершине.
В моей системе размер стопки ограничен. Когда стопка заполнена до
предела, и пришла новая книга, то надо выкинуть самую нижнюю книгу
из стопки, а новую книгу положить наверх, сдвинув при этом всю стопку вниз.
При этом просто напрашивается идея зациклить стопку
(тут возникает аналогия с барабаном револьвера).
То есть вместо удаления нижней книги (записи в памяти),
сдвига стопки, создания новой книги (записи) - я просто
откатываю указатель на вершину стопки на шаг назад,
и модифицирую запись, указаную этим указателем.
Таким образом, эффективно удаляется старая запись в хвосте
"стопки", и добавляется новая в голову.
При этом не делается освобождения/резервирования памяти,
то есть же узел рециклится - как будто бы в книге стираем старое
содержимое, а вместо него вписываем новое.
Таким образом, буфер кеша представляет собою револьверную
(от английского revolving) структуру, основаную на кольцевом списке.
И при добавлении новой записи взамен старой, я фигурально выражаясь,
проворачиваю барабан в револьвере, и меняю патрон.
Ну там, в реальной работающей подсистеме кеширования,
в револьвере не один барабан, а 4096, вход в которые идет через
хеш-таблицу. Каждый барабан содержит примерно 64 патрона.
Работает на ура.
--
#include <best/regards.hpp>
Oleg I. KHOVAYKO
(301)435-5885 || WEB: http://olegh.spedia.net
--- ifmail v.2.15dev5
* Origin: National Center for Biotechnology Information (2:5020/400)