Онлайн-алгоритм обновления списков: различия между версиями

Перейти к навигации Перейти к поиску
Строка 27: Строка 27:




Сначала рассмотрим алгоритмы Move-To-Front, Transpose и Frequency-Count. Отметим, что Move-To-Front и Transpose – стратегии без памяти, то есть им не требуется дополнительная память для принятия решения о том, куда переместить запрошенный элемент. Таким образом, с практической точки зрения они более привлекательны, чем Frequency-Count. Слейтор и Тарьян [16] проанализировали коэффициенты конкурентоспособности этих трех алгоритмов.
Сначала рассмотрим алгоритмы Move-To-Front, Transpose и Frequency-Count. Отметим, что Move-To-Front и Transpose – стратегии ''без памяти'', то есть им не требуется дополнительная память для принятия решения о том, куда переместить запрошенный элемент. Таким образом, с практической точки зрения они более привлекательны, чем Frequency-Count. Слейтор и Тарьян [16] проанализировали коэффициенты конкурентоспособности этих трех алгоритмов.




Строка 33: Строка 33:




Алгоритмы Transpose и Frequency-Count не являются c-конкурентными для любого константного c.
Алгоритмы Transpose и Frequency-Count не являются <math>c</math>-конкурентными для любого константного <math>c</math>.




Строка 39: Строка 39:




'''Теорема 2 [13]. Пусть A – детерминированный онлайн-алгоритм для задачи обновления списков. Если A c-конкурентен, то с > 2.'''
'''Теорема 2 [13]. Пусть <math>A</math> – детерминированный онлайн-алгоритм для задачи обновления списков. Если A <math>c</math>-конкурентен, то <math>c \ge 2</math>.'''




Интересным вопросом является рандомизация в задаче обновления списков. При наличии адаптивных соперников ни один рандомизированный онлайн-алгоритм обновления списков не может быть лучше чем 2-конкурентный, см. [6, 14]. Поэтому основное внимание уделяется алгоритмам в присутствии рассеянных соперников. Было предложено множество рандомизированных алгоритмов обновления списков [1, 2, 12, 14]. В следующих параграфах описываются два наиболее важных. Райнголд и др. [ ] предложили очень простой алгоритм, названный Bit.
Интересным вопросом является рандомизация в задаче обновления списков. При наличии адаптивных соперников ни один рандомизированный онлайн-алгоритм обновления списков не может быть лучше чем 2-конкурентный, см. [6, 14]. Поэтому основное внимание уделяется алгоритмам в присутствии рассеянных соперников. Было предложено множество рандомизированных алгоритмов обновления списков [1, 2, 12, 14]. В следующих параграфах описываются два наиболее важных. Райнголд и др. [14] предложили очень простой алгоритм, названный Bit.




Строка 51: Строка 51:




Райнголд и др. [ ] обобщили алгоритм Bit и доказали верхнюю границу p3 fa 1,73 относительно рассеянных соперников. Лучший рандомизированный алгоритм из известных на данный момент представляет собой комбинацию алгоритма Bit и детерминированного 2-конкурентного онлайнового алгоритма Timestamp, предложенного в [1].
Райнголд и др. [14] обобщили алгоритм Bit и доказали верхнюю границу <math>\sqrt{3} \approx 1,73</math> относительно рассеянных соперников. Лучший рандомизированный алгоритм из известных на данный момент представляет собой комбинацию алгоритма Bit и детерминированного 2-конкурентного онлайнового алгоритма Timestamp, предложенного в [1].




'''Алгоритм «Временные метки» (Timestamp)''': вставляет запрашиваемый элемент, например x, перед первым элементом в списке, который предшествует x и который был запрошен не более одного раза с момента последнего запроса x. Если такого элемента нет или если x не был запрошен до сих пор, то позиция x остается без изменений.
'''Алгоритм «Временные метки» (Timestamp)''': вставляет запрашиваемый элемент, например <math>x</math>, перед первым элементом в списке, который предшествует <math>x</math> и который был запрошен не более одного раза с момента последнего запроса <math>x</math>. Если такого элемента нет или если <math>x</math> не был запрошен до сих пор, то позиция <math>x</math> остается без изменений.
   
   


В качестве примера рассмотрим список из шести элементов, расположенных в порядке L: x1!x2!x3!x4!x5! x6. Предположим, что алгоритм Timestamp должен обработать второй запрос к x5 в последовательности запросов a x5 ; x2 ; x2 ; x3 ; x1 ; x1 ; x5. Элементы x3 и x4 были запрошены не более одного раза с момента последнего запроса к x5, в то время как x1 и x2 были запрошены дважды. Таким образом, алгоритм Timestamp вставит x5 сразу перед x3 в списке. Комбинация алгоритмов Bit и Timestamp была предложена в работе [3].
В качестве примера рассмотрим список из шести элементов, расположенных в порядке <math>L: x_1 \to x_2 \to x_3 \to x_4 \to x_5 \to x_6</math>. Предположим, что алгоритм Timestamp должен обработать второй запрос к <math>x_5</math> в последовательности запросов <math>\sigma x_5, x_2, x_2, x_3, x_1, x_1, x_5</math>. Элементы <math>x_3</math> и <math>x_4</math> были запрошены не более одного раза с момента последнего запроса к <math>x_5</math>, в то время как <math>x_1</math> и <math>x_2</math> были запрошены дважды. Таким образом, алгоритм Timestamp вставит <math>x_5</math> сразу перед <math>x_3</math> в списке. Комбинация алгоритмов Bit и Timestamp была предложена в работе [3].




'''Алгоритм «Комбинация» (Combination)''': с вероятностью | алгоритм обрабатывает последовательность запросов, используя Bit, и с вероятностью ^ обрабатывает последовательность запросов, используя Timestamp.
'''Алгоритм «Комбинация» (Combination)''': с вероятностью <math>\frac{4}{5}</math> алгоритм обрабатывает последовательность запросов, используя Bit, и с вероятностью <math>\frac{1}{5}</math> обрабатывает последовательность запросов, используя Timestamp.




Строка 69: Строка 69:




Амбул и др. [4] представили нижнюю границу для рандомизированных алгоритмов обновления списков.
Амбюл и др. [4] представили нижнюю границу для рандомизированных алгоритмов обновления списков.




'''Теорема 5 [4]. Пусть A – рандомизированный онлайн-алгоритм для задачи обновления списков. Если A c-конкурентен относительно любого рассеянного соперника, то с > 1,50084.'''
'''Теорема 5 [4]. Пусть A – рандомизированный онлайн-алгоритм для задачи обновления списков. Если A <math>c</math>-конкурентен относительно любого рассеянного соперника, то с > 1,50084.'''




Используя методы теории обучения, Блам и др. [9] предложили рандомизированный онлайн-алгоритм, который при любом e > 0 является (1,6 + e)-конкурентным и в то же время (1+e)-конкурентным относительно оффлайнового алгоритма, ограниченного обработкой последовательности запросов со статическим списком.
Используя методы теории обучения, Блам и др. [9] предложили рандомизированный онлайн-алгоритм, который при любом <math>\epsilon > 0</math> является (1,6 + <math>\epsilon</math>)-конкурентным и в то же время (1 + <math>\epsilon</math>)-конкурентным относительно оффлайнового алгоритма, ограниченного обработкой последовательности запросов со статическим списком.




До сих пор в данной статье рассматривались онлайновые алгоритмы. В оффлайновом варианте задачи обновления списков вся последовательность запросов a известна заранее. Амбул [3] показал, что оффлайновый вариант является NP-трудным.
До сих пор в данной статье рассматривались онлайновые алгоритмы. В оффлайновом варианте задачи обновления списков вся последовательность запросов <math>\sigma</math> известна заранее. Амбюл [3] показал, что оффлайновый вариант является NP-трудным.




Райнголд и др. [ ] исследовали расширенную модель затрат, названную P-моделью, для задачи обновления списков. В модели Pd нет бесплатных обменов, а каждый платный обмен стоит d. Рейнгольд и коллеги проанализировали детерминированные и рандомизированные стратегии в этой модели.
Райнголд и др. [14] исследовали расширенную модель затрат, названную P-моделью, для задачи обновления списков. В модели <math>P^d</math> нет бесплатных обменов, а каждый платный обмен стоит <math>d</math>. Рейнгольд и коллеги проанализировали детерминированные и рандомизированные стратегии в этой модели.




Многие из концепций, показанных для самоорганизующихся линейных списков, могут быть распространены на бинарные деревья поиска. Наиболее популярной версией самоорганизующихся бинарных деревьев поиска являются косые деревья [https://ru.wikipedia.org/wiki/Splay-%D0%B4%D0%B5%D1%80%D0%B5%D0%B2%D0%BE], представленные Слейтором и Тарьяном; см. [17].
Многие из концепций, показанных для самоорганизующихся линейных списков, могут быть распространены на бинарные деревья поиска. Наиболее популярной версией самоорганизующихся бинарных деревьев поиска являются ''косые деревья'' [https://ru.wikipedia.org/wiki/Splay-%D0%B4%D0%B5%D1%80%D0%B5%D0%B2%D0%BE], представленные Слейтором и Тарьяном; см. [17].




Что касается истории задачи об обновлении списков, то до появления сравнительного анализа алгоритмы обновления списков изучались в сценариях, где последовательности запросов формируются в соответствии с вероятностными распределениями. Асимптотические ожидаемые затраты, понесенные онлайновым алгоритмом при обработке одного запроса, сравнивались с соответствующими затратами, понесенными при оптимальном статическом упорядочивании. Существует большой объем литературы по этой теме. Чанг и др. [ ] показали, что для любого распределения асимптотическая стоимость обработки алгоритма Move-To-Front не более чем в JT/2 раз превышает стоимость обработки оптимального упорядочения.
Что касается истории задачи об обновлении списков, то до появления сравнительного анализа алгоритмы обновления списков изучались в сценариях, где последовательности запросов формируются в соответствии с вероятностными распределениями. Асимптотические ожидаемые затраты, понесенные онлайновым алгоритмом при обработке одного запроса, сравнивались с соответствующими затратами, понесенными при оптимальном статическом упорядочивании. Существует большой объем литературы по этой теме. Чанг и др. [11] показали, что для любого распределения асимптотическая стоимость обработки алгоритма Move-To-Front не более чем в <math>\frac{\pi}{2}</math> раз превышает стоимость обработки оптимального упорядочения.




Эта граница является строгой. Ривест [ ] определил распределения, на которых Transpose работает лучше, чем Move-To-Front.
Эта граница является строгой. Ривест [15] определил распределения, на которых Transpose работает лучше, чем Move-To-Front.


== Применение ==
== Применение ==
4817

правок

Навигация