Jump to content

Сравнение структур данных

Это сравнение производительности известных структур данных , измеряемой сложностью их логических операций. Более полный список структур данных см. в разделе Список структур данных .

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

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

  • peek : доступ к элементу по заданному индексу.
  • Insert : вставить новый элемент по заданному индексу. Когда индекс равен нулю, это называется добавлением ; когда индекс является последним индексом в списке, это называется добавлением .
  • delete : удалить элемент по заданному индексу.
Сравнение структур данных списка
Пик
(индекс)
Изменить (вставить или удалить) в… Лишнее пространство,
средний
Начало Конец Середина
Связанный список Θ( п ) Я(1) Θ(1) — известный конечный элемент;
Θ( n ), неизвестный конечный элемент
Θ( п ) [1] [2] Θ( п )
Множество Я(1) 0
Динамический массив Я(1) Θ( п ) Θ(1) амортизировано Θ( п ) Θ( п ) [3]
Сбалансированное дерево Θ(логарифм n) Θ(логарифм n) Θ(логарифм n ) Θ(логарифм n ) Θ( п )
произвольного доступа Список Θ(логарифм n) [4] Я(1) [4] [4] Θ( п )
Дерево хешированного массива Я(1) Θ( п ) Θ(1) амортизировано Θ( п ) Θ(√ п )


Карты хранят коллекцию пар (ключ, значение), так что каждый возможный ключ появляется в коллекции не более одного раза. Обычно они поддерживают три операции: [5]

  • Вставить : добавить в коллекцию новую пару (ключ, значение), сопоставив ключ с его новым значением. Любое существующее сопоставление перезаписывается. Аргументами этой операции являются ключ и значение.
  • Удалить : удалить пару (ключ, значение) из коллекции, отменяя сопоставление данного ключа с его значением. Аргумент этой операции является ключевым.
  • Поиск : найдите значение (если оно есть), привязанное к данному ключу. Аргументом этой операции является ключ, а значение возвращается из операции.

Если не указано иное, все структуры данных в этой таблице требуют пространства O( n ).

Структура данных Поиск, удаление Вставка Заказал
средний худший случай средний худший случай
Список ассоциаций На ) На ) О(1) О(1) Нет
B-дерево [6] О( вход ) О( вход ) О( вход ) О( вход ) Да
Хэш-таблица О(1) На ) О(1) На ) Нет
Несбалансированное двоичное дерево поиска О( вход ) На ) О( вход ) На ) Да

Целочисленные ключи

[ редактировать ]

Некоторые структуры данных карты обеспечивают превосходную производительность в случае целочисленных ключей. В следующей таблице пусть m — количество битов в ключах.

Структура данных Поиск, удаление Вставка Космос
средний худший случай средний худший случай
Дерево слияния [ ? ] O(log m n ) [ ? ] [ ? ] На )
Дерево Ван Эмде Боаса O(журнал журнал м ) O(журнал журнал м ) O(журнал журнал м ) O(журнал журнал м ) О( м )
X-быстрая попытка О( п журнал м ) [а] [ ? ] O(журнал журнал м ) O(журнал журнал м ) О( п журнал м )
Y-быстрая попытка O(журнал журнал м ) [а] [ ? ] O(журнал журнал м ) [а] [ ? ] На )

Приоритетные очереди

[ редактировать ]

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

  • Insert : добавить элемент в очередь с соответствующим приоритетом.
  • find-max : вернуть элемент из очереди, имеющий наивысший приоритет.
  • delete-max : удалить элемент из очереди, имеющий наивысший приоритет.

Очереди с приоритетами часто реализуются с использованием кучи .

(Максимальная) куча это древовидная , структура данных которая удовлетворяет свойству кучи : для любого данного узла C, если P является родительским узлом C, то ключ ( значение ) P больше или равен ключу. из С.

Помимо операций очереди с абстрактным приоритетом, в следующей таблице указана сложность двух дополнительных логических операций:

  • увеличения-ключа : обновление ключа.
  • meld : объединение двух куч для формирования новой допустимой кучи, содержащей все элементы обеих, уничтожая исходные кучи.

Вот временные сложности [7] различных структур данных кучи. Аббревиатура ам. указывает, что данная сложность амортизируется, в противном случае это сложность наихудшего случая. Значение « O ( f )» и « Θ ( f )» см в обозначении Big O. . Имена операций предполагают максимальную кучу.

Операция найти-макс удалить-макс клавиша увеличения вставлять сливаться помойка [б]
Двоичный [7] я (1) Θ (логарифм n ) Θ (логарифм n ) Θ (логарифм n ) Θ ( н ) Θ ( н )
Перекос [8] я (1) О (log n ) утра. О (log n ) утра. О (log n ) утра. О (log n ) утра. Θ ( н ) утра.
Левый [9] я (1) Θ (логарифм n ) Θ (логарифм n ) Θ (логарифм n ) Θ (логарифм n ) Θ ( н )
Биномиальный [7] [11] я (1) Θ (логарифм n ) Θ (логарифм n ) Θ (1) утра. Θ (логарифм n ) [с] Θ ( н )
Наклонный бином [12] я (1) Θ (логарифм n ) Θ (логарифм n ) я (1) Θ (логарифм n ) [с] Θ ( н )
2–3 кучи [14] я (1) О (log n ) утра. я (1) Θ (1) утра. О ( войти ) [с] Θ ( н )
Перекос снизу вверх [8] я (1) О (log n ) утра. О (log n ) утра. Θ (1) утра. Θ (1) утра. Θ ( н ) утра.
Сопряжение [15] я (1) О (log n ) утра. о (log n ) утра. [д] я (1) я (1) Θ ( н )
Сопряжение по рангам [18] я (1) О (log n ) утра. Θ (1) утра. я (1) я (1) Θ ( н )
Фибоначчи [7] [19] я (1) О (log n ) утра. Θ (1) утра. я (1) я (1) Θ ( н )
Строгий Фибоначчи [20] [и] я (1) Θ (логарифм n ) я (1) я (1) я (1) Θ ( н )
Мостовая долина [21] [и] я (1) Θ (логарифм n ) я (1) я (1) я (1) Θ ( н ) [22]
  1. ^ Jump up to: а б с Амортизированное время.
  2. ^ make-heap — это операция построения кучи из последовательности из n неотсортированных элементов. Это можно сделать за время Θ ( n ), когда объединение выполняется за время O (log n ) (при этом обе сложности могут быть амортизированы). [8] [9] Другой алгоритм достигает Θ ( n ) для двоичных куч. [10]
  3. ^ Jump up to: а б с Для постоянных куч (не поддерживающих увеличения-ключа ) общее преобразование снижает стоимость объединения до стоимости вставки , в то время как новая стоимость удаления-макс является суммой старых затрат удаления-макс и объединения . [13] Здесь он выполняет объединение за время Θ (1) (амортизируется, если стоимость вставки равна), в то время как delete-max все еще выполняется за O (log n ). Применительно к косым биномиальным кучам он дает очереди Бродала-Окасаки, постоянные кучи с оптимальной сложностью для наихудшего случая. [12]
  4. ^ Нижняя граница [16] верхняя граница [17]
  5. ^ Jump up to: а б Очереди Бродала и строгие кучи Фибоначчи обеспечивают оптимальную сложность кучи в наихудшем случае. Впервые они были описаны как императивные структуры данных. Очередь Бродала-Окасаки представляет собой постоянную структуру данных, обеспечивающую тот же оптимум, за исключением того, что ключ увеличения не поддерживается.

Примечания

[ редактировать ]
  1. ^ Основной доклад дня 1 — Бьерн Страуструп: Стиль C++11 на GoingNative 2012 на канале Channel9.msdn.com с 45-й минуты или с 44-й минуты.
  2. ^ Обработка чисел: почему вы никогда и НИКОГДА не должны снова использовать связанный список в своем коде на kjellkod.wordpress.com
  3. ^ Бродник, Андрей; Карлссон, Сванте; Седжвик, Роберт ; Манро, Дж.И.; Демейн, ED (1999), Массивы изменяемого размера в оптимальном времени и пространстве (технический отчет CS-99-09) (PDF) , факультет компьютерных наук, Университет Ватерлоо
  4. ^ Jump up to: а б с Крис Окасаки (1995). «Чисто функциональные списки произвольного доступа». Материалы седьмой международной конференции по языкам функционального программирования и компьютерной архитектуре : 86–95. дои : 10.1145/224164.224187 .
  5. ^ Мельхорн, Курт ; Сандерс, Питер (2008), «4 хэш-таблицы и ассоциативные массивы», Алгоритмы и структуры данных: базовый набор инструментов (PDF) , Springer, стр. 81–98, заархивировано (PDF) из оригинала 2 августа 2014 г.
  6. ^ Кормен и др. 2022 , с. 484
  7. ^ Jump up to: а б с д Кормен, Томас Х .; Лейзерсон, Чарльз Э .; Ривест, Рональд Л. (1990). Введение в алгоритмы (1-е изд.). MIT Press и McGraw-Hill. ISBN  0-262-03141-8 .
  8. ^ Jump up to: а б с Слитор, Дэниел Доминик ; Тарьян, Роберт Эндре (февраль 1986 г.). «Саморегулирующиеся кучи» . SIAM Journal по вычислительной технике . 15 (1): 52–69. CiteSeerX   10.1.1.93.6678 . дои : 10.1137/0215004 . ISSN   0097-5397 .
  9. ^ Jump up to: а б Тарьян, Роберт (1983). «3.3. Левые кучи». Структуры данных и сетевые алгоритмы . стр. 38–42. дои : 10.1137/1.9781611970265 . ISBN  978-0-89871-187-5 .
  10. ^ Хейворд, Райан; МакДиармид, Колин (1991). «Анализ среднего случая построения кучи путем повторной вставки» (PDF) . Дж. Алгоритмы . 12 : 126–153. CiteSeerX   10.1.1.353.7888 . дои : 10.1016/0196-6774(91)90027-в . Архивировано из оригинала (PDF) 5 февраля 2016 г. Проверено 28 января 2016 г.
  11. ^ «Биномиальная куча | Блестящая вики по математике и естественным наукам» . блестящий.орг . Проверено 30 сентября 2019 г.
  12. ^ Jump up to: а б Бродал, Герт Столтинг; Окасаки, Крис (ноябрь 1996 г.), «Оптимальные чисто функциональные очереди приоритетов», Journal of Functional Programming , 6 (6): 839–857, doi : 10.1017/s095679680000201x
  13. ^ Окасаки, Крис (1998). «10.2. Структурная абстракция». Чисто функциональные структуры данных (1-е изд.). стр. 158–162. ISBN  9780521631242 .
  14. ^ Такаока, Тадао (1999), Теория 2–3 куч (PDF) , стр. 12
  15. ^ Яконо, Джон (2000), «Улучшенные верхние границы для спаривания куч», Proc. 7-й скандинавский семинар по теории алгоритмов (PDF) , Конспекты лекций по информатике, том. 1851, Springer-Verlag, стр. 63–77, arXiv : 1110.4428 , CiteSeerX   10.1.1.748.7812 , doi : 10.1007/3-540-44985-X_5 , ISBN  3-540-67690-2
  16. ^ Фредман, Майкл Лоуренс (июль 1999 г.). «Об эффективности объединения куч и связанных структур данных» (PDF) . Журнал Ассоциации вычислительной техники . 46 (4): 473–501. дои : 10.1145/320211.320214 .
  17. ^ Петти, Сет (2005). К окончательному анализу парных куч (PDF) . FOCS '05 Материалы 46-го ежегодного симпозиума IEEE по основам информатики. стр. 174–183. CiteSeerX   10.1.1.549.471 . дои : 10.1109/SFCS.2005.75 . ISBN  0-7695-2468-0 .
  18. ^ Хёплер, Бернхард; Сен, Сиддхартха; Тарьян, Роберт Э. (ноябрь 2011 г.). «Кучи ранговых пар» (PDF) . СИАМ Дж. Компьютерные технологии . 40 (6): 1463–1485. дои : 10.1137/100785351 .
  19. ^ Фредман, Майкл Лоуренс ; Тарьян, Роберт Э. (июль 1987 г.). «Кучи Фибоначчи и их использование в улучшенных алгоритмах оптимизации сети» (PDF) . Журнал Ассоциации вычислительной техники . 34 (3): 596–615. CiteSeerX   10.1.1.309.8927 . дои : 10.1145/28869.28874 .
  20. ^ Бродал, Герт Столтинг ; Лагояннис, Джордж; Тарьян, Роберт Э. (2012). Строгие кучи Фибоначчи (PDF) . Материалы 44-го симпозиума по теории вычислений - STOC '12. стр. 1177–1184. CiteSeerX   10.1.1.233.1740 . дои : 10.1145/2213977.2214082 . ISBN  978-1-4503-1245-5 .
  21. ^ Бродал, Герт С. (1996), «Эффективные приоритетные очереди для наихудшего случая» (PDF) , Proc. 7-й ежегодный симпозиум ACM-SIAM по дискретным алгоритмам , стр. 52–58.
  22. ^ Гудрич, Майкл Т .; Тамассия, Роберто (2004). «7.3.6. Построение кучи снизу вверх». Структуры данных и алгоритмы в Java (3-е изд.). стр. 338–341. ISBN  0-471-46983-1 .
Arc.Ask3.Ru: конец переведенного документа.
Arc.Ask3.Ru
Номер скриншота №: 3667db88ac4c88acbc302aa1ff635cca__1678828320
URL1:https://arc.ask3.ru/arc/aa/36/ca/3667db88ac4c88acbc302aa1ff635cca.html
Заголовок, (Title) документа по адресу, URL1:
Comparison of data structures - Wikipedia
Данный printscreen веб страницы (снимок веб страницы, скриншот веб страницы), визуально-программная копия документа расположенного по адресу URL1 и сохраненная в файл, имеет: квалифицированную, усовершенствованную (подтверждены: метки времени, валидность сертификата), открепленную ЭЦП (приложена к данному файлу), что может быть использовано для подтверждения содержания и факта существования документа в этот момент времени. Права на данный скриншот принадлежат администрации Ask3.ru, использование в качестве доказательства только с письменного разрешения правообладателя скриншота. Администрация Ask3.ru не несет ответственности за информацию размещенную на данном скриншоте. Права на прочие зарегистрированные элементы любого права, изображенные на снимках принадлежат их владельцам. Качество перевода предоставляется как есть. Любые претензии, иски не могут быть предъявлены. Если вы не согласны с любым пунктом перечисленным выше, вы не можете использовать данный сайт и информация размещенную на нем (сайте/странице), немедленно покиньте данный сайт. В случае нарушения любого пункта перечисленного выше, штраф 55! (Пятьдесят пять факториал, Денежную единицу (имеющую самостоятельную стоимость) можете выбрать самостоятельно, выплаичвается товарами в течение 7 дней с момента нарушения.)