LINUX.ORG.RU

Название типа данных


0

2

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

Интересует название такого типа - даже если написать его самому. Пока в голову приходит только романтичное holed_vector.

★★★★★

Последнее исправление: staseg (всего исправлений: 1)

Ответ на: комментарий от ttnl

Кэш, как я понимаю, предполагает фиксированный размер и вытеснение неиспользуемых элементов. Это совсем не то.

staseg ★★★★★
() автор топика
Ответ на: комментарий от Jetty

>что-то типа STL-ной очереди?

deque Очередь. Контейнер похож на vector, но с возможностью быстрой вставки и удаления элементов на обоих концах за O(1). Реализован в виде двусвязанного списка линейных массивов.

(с википедии). По-моему это что-то совсем не типа очереди. Другие кью - тоже.

staseg ★★★★★
() автор топика
Ответ на: комментарий от ttnl

>Назови его holed_stack

Это уже ближе к сути, спасибо. Но вопрос открыт, более вменяемые, а лучше стандартные, названия приветствуются.

staseg ★★★★★
() автор топика
Ответ на: комментарий от jtootf

>а в чём преимущество линейности при возможном наличии дырок?

В компактности в первую очередь. Будет храниться очень много мелких данных и нелинейные типы многократно сожрут память. Мне ее в данном случае очень жалко.

staseg ★★★★★
() автор топика
Ответ на: комментарий от jtootf

На том, что на каждый элемент необходимо хранить связи с соседями. В случае того же двусвязного списка при хранении данных int я на каждую ячейку потрачу 4+8+8 байт, 16 байт оверхеда, т.е. реально я могу хранить в пять (!) раза меньше данных, чем в случае с линейным вектором. С деревьями подобная же ситуация.

Но в целом я согласен, жесткая линейность необязательна. Нелинейная структура, состоящая из больших линейных блоков тоже подойдет.

staseg ★★★★★
() автор топика
Ответ на: комментарий от staseg

Интерфейс называется List. Дырки не позволяют считать это вектором.

Почитайте про Rope, B-tree, возможно будет в тему.

Legioner ★★★★★
()
Ответ на: комментарий от vladimir-vg

В современных реализациях куча хоть и называется кучей, но на самом деле является двусвязным списком.

Yareg ★★★
()
Ответ на: комментарий от ttnl

Назови его holed_stack

Уж больно на holy crap смахивает.

Miguel ★★★★★
()

Всем спасибо!

Появилась пища для размышлений. За айстек плюсик в карму:).

staseg ★★★★★
() автор топика

Опишите более точно интерфейс - тогда и название вам подберем. Пока интерфейс не ясен, не ясно даже требование трудоемкости вставки и удаления. Пока даже не понятно - после N вставок и K удалений вместимость (capacity) объекта должна стать какой? Вообщем - мало чего вы рассказали о типе.

anonymous
()
Ответ на: Всем спасибо! от staseg

Просто понятно пока только одно о типе - вы не хотите, чтоб он занимал памяти в разы больше, чем суммарно занимают элементы, хранящиеся в нем.

Даже если он будет занимать в 2 раза больше памяти - это вас не устравает. Кстати, отсюда и условие о числе «дырок», при которых нужно редуцировать объект возникнет, может быть.

anonymous
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.