Развёрнутый связный список

Материал из Википедии — свободной энциклопедии
Перейти к навигации Перейти к поиску
Пример развернутого связного списка.

Развёрнутый связный список — список, каждый физический элемент которого содержит несколько логических элементов (обычно в виде массива, что позволяет ускорить доступ к отдельным элементам).

Позволяет значительно уменьшить расход памяти и увеличить производительность по сравнению с обычным списком. Особенно большая экономия памяти достигается при малом размере логических элементов и большом их количестве — так, односвязный список из 10 тысяч четырёхбайтных целых чисел при четырёхбайтной же адресации памяти займет 40 тысяч байт под собственно значения, плюс 40 тысяч байт под адреса, итого 80 тысяч байт; если же объединить числа в 100 массивов по 100 элементов, расход памяти на адреса упадёт до 400 байт, и суммарный расход составит 40400 байт.

Прирост производительности достигается за счёт того, что большая часть операций проводится над относительно небольшими массивами, которые обычно целиком помещаются в кэш-памяти. Благодаря этому быстродействие программы может быть даже выше, чем при работе с обычными массивами. В развёрнутый список легко добавлять новые элементы — без необходимости переписывать весь массив, что является большой проблемой при работе с обычными массивами.

При реализации необходимо тщательно выбирать размер «блока» (количество элементов в массивах). При слишком большом размере блока список начинает страдать от тех же проблем, что и обыкновенный массив: долгая вставка элементов в начало или середину, долгое удаление элементов оттуда же, и т. п. При слишком маленьком — увеличивается расход памяти.

См. также[править | править код]

  • Кодирование CDR (en:CDR coding), сходная техника для уменьшения размеров списков и улучшения использования кешей.
  • Список с пропусками (skip list), вариация связных списков с быстрым обходом, но с медленной вставкой и удалением.
  • B-tree и T-tree, структуры данных, схожие с Р.с.с. (являются развернутыми бинарными деревьями)
  • XOR-связный список, двусвязный список, использующий 1 ячейку памяти для хранения двух указателей.

Ссылки[править | править код]