<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="ru">
	<id>https://camokathomelab.servebeer.com/mediawiki/index.php?action=history&amp;feed=atom&amp;title=%D0%90%D1%81%D1%81%D0%BE%D1%86%D0%B8%D0%B0%D1%82%D0%B8%D0%B2%D0%BD%D1%8B%D0%B9_%D0%BC%D0%B0%D1%81%D1%81%D0%B8%D0%B2</id>
	<title>Ассоциативный массив - История изменений</title>
	<link rel="self" type="application/atom+xml" href="https://camokathomelab.servebeer.com/mediawiki/index.php?action=history&amp;feed=atom&amp;title=%D0%90%D1%81%D1%81%D0%BE%D1%86%D0%B8%D0%B0%D1%82%D0%B8%D0%B2%D0%BD%D1%8B%D0%B9_%D0%BC%D0%B0%D1%81%D1%81%D0%B8%D0%B2"/>
	<link rel="alternate" type="text/html" href="https://camokathomelab.servebeer.com/mediawiki/index.php?title=%D0%90%D1%81%D1%81%D0%BE%D1%86%D0%B8%D0%B0%D1%82%D0%B8%D0%B2%D0%BD%D1%8B%D0%B9_%D0%BC%D0%B0%D1%81%D1%81%D0%B8%D0%B2&amp;action=history"/>
	<updated>2026-07-18T23:15:12Z</updated>
	<subtitle>История изменений этой страницы в вики</subtitle>
	<generator>MediaWiki 1.45.3</generator>
	<entry>
		<id>https://camokathomelab.servebeer.com/mediawiki/index.php?title=%D0%90%D1%81%D1%81%D0%BE%D1%86%D0%B8%D0%B0%D1%82%D0%B8%D0%B2%D0%BD%D1%8B%D0%B9_%D0%BC%D0%B0%D1%81%D1%81%D0%B8%D0%B2&amp;diff=19728&amp;oldid=prev</id>
		<title>2A02:2698:182C:2006:B412:7012:9612:6E6C в 12:19, 16 июня 2025</title>
		<link rel="alternate" type="text/html" href="https://camokathomelab.servebeer.com/mediawiki/index.php?title=%D0%90%D1%81%D1%81%D0%BE%D1%86%D0%B8%D0%B0%D1%82%D0%B8%D0%B2%D0%BD%D1%8B%D0%B9_%D0%BC%D0%B0%D1%81%D1%81%D0%B8%D0%B2&amp;diff=19728&amp;oldid=prev"/>
		<updated>2025-06-16T12:19:39Z</updated>

		<summary type="html">&lt;p&gt;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Новая страница&lt;/b&gt;&lt;/p&gt;&lt;div&gt;&amp;#039;&amp;#039;&amp;#039;Ассоциативный массив&amp;#039;&amp;#039;&amp;#039; (словарь) — [[абстрактный тип данных]] ([[Программный интерфейс|интерфейс]] к хранилищу данных), позволяющий хранить пары вида «(ключ, значение)» и поддерживающий операции добавления пары, а также поиска и удаления пары по ключу:&lt;br /&gt;
* &amp;lt;tt&amp;gt;INSERT(ключ, значение)&amp;lt;/tt&amp;gt;&lt;br /&gt;
* &amp;lt;tt&amp;gt;FIND(ключ)&amp;lt;/tt&amp;gt;&lt;br /&gt;
* &amp;lt;tt&amp;gt;REMOVE(ключ)&amp;lt;/tt&amp;gt;&lt;br /&gt;
Предполагается, что ассоциативный массив не может хранить две пары с одинаковыми ключами.&lt;br /&gt;
&lt;br /&gt;
В паре &amp;lt;math&amp;gt;(k, v)&amp;lt;/math&amp;gt; значение &amp;lt;math&amp;gt;v&amp;lt;/math&amp;gt; называется значением, ассоциированным с ключом &amp;lt;math&amp;gt;k&amp;lt;/math&amp;gt;. Где &amp;lt;math&amp;gt;k&amp;lt;/math&amp;gt; — это &amp;#039;&amp;#039;key&amp;#039;&amp;#039;, a &amp;lt;math&amp;gt;v&amp;lt;/math&amp;gt; — &amp;#039;&amp;#039;value&amp;#039;&amp;#039;. Семантика и названия вышеупомянутых операций в разных реализациях ассоциативного массива могут отличаться.&lt;br /&gt;
&lt;br /&gt;
Операция &amp;lt;tt&amp;gt;FIND(ключ)&amp;lt;/tt&amp;gt; возвращает значение, ассоциированное с заданным ключом, или некоторый специальный объект UNDEF, означающий, что значения, ассоциированного с заданным ключом, нет. Две другие операции ничего не возвращают (за исключением, возможно, информации о том, успешно ли была выполнена данная операция).&lt;br /&gt;
&lt;br /&gt;
Ассоциативный массив с точки зрения интерфейса удобно рассматривать как обычный [[массив (программирование)|массив]], в котором в качестве индексов можно использовать не только целые числа, но и значения других типов — например, строки.&lt;br /&gt;
&lt;br /&gt;
Поддержка ассоциативных массивов есть во многих [[Интерпретируемый язык программирования|интерпретируемых]] [[Высокоуровневый язык программирования|языках программирования высокого уровня]], таких, как [[Perl]], [[PHP]], [[Python]], [[Ruby]], [[Tcl]], [[JavaScript]]&amp;lt;ref&amp;gt;В [[JavaScript]] объекты поддерживают создание свойств с произвольным (строковым) ключом, таким образом, они реализуют также базовые свойства ассоциативного массива. См.: {{cite web|url=http://learn.javascript.ru/object|title=Объекты как ассоциативные массивы|lang=ru|work=Учебник JavaScript|access-date=2024-07-13|url-status=live|archive-url=https://web.archive.org/web/20150915214617/http://learn.javascript.ru/object|archive-date=2015-09-15}}&amp;lt;/ref&amp;gt; и других. Для языков, которые не имеют встроенных средств работы с ассоциативными массивами, существует множество реализаций в виде [[Библиотека (программирование)|библиотек]]. [[Ассоциативная память]] это способ прямой поддержки ассоциативных массивов на аппаратном уровне.&lt;br /&gt;
&lt;br /&gt;
Примером ассоциативного массива является телефонный справочник: значением в данном случае является совокупность «{{nobr|Ф. И. О. +}} адрес», а ключом — номер телефона, один номер телефона имеет одного владельца, но один человек может иметь несколько номеров.&lt;br /&gt;
&lt;br /&gt;
Три основных операции часто дополняются другими, наиболее популярные расширения:&lt;br /&gt;
* &amp;lt;tt&amp;gt;CLEAR&amp;lt;/tt&amp;gt; — удалить все записи,&lt;br /&gt;
* &amp;lt;tt&amp;gt;EACH&amp;lt;/tt&amp;gt; — «пробежаться» по всем хранимым парам,&lt;br /&gt;
* &amp;lt;tt&amp;gt;MIN&amp;lt;/tt&amp;gt; — найти пару с минимальным значением ключа,&lt;br /&gt;
* &amp;lt;tt&amp;gt;MAX&amp;lt;/tt&amp;gt; — найти пару с максимальным значением ключа.&lt;br /&gt;
&lt;br /&gt;
В последних двух случаях необходимо, чтобы на ключах была определена операция сравнения.&lt;br /&gt;
&lt;br /&gt;
== Реализации ассоциативного массива ==&lt;br /&gt;
Существует множество различных реализаций ассоциативного массива.&lt;br /&gt;
&lt;br /&gt;
Самая простая реализация может быть основана на обычном массиве, элементами которого являются пары (ключ, значение). Для ускорения операции поиска можно упорядочить элементы этого массива по ключу и осуществлять нахождение методом [[Двоичный поиск|бинарного поиска]]. Но это увеличит время выполнения операции добавления новой пары, так как необходимо будет «раздвигать» элементы массива, чтобы в образовавшуюся пустую ячейку поместить новую запись.&lt;br /&gt;
&lt;br /&gt;
Наиболее популярны реализации, основанные на различных [[Двоичное дерево (структура данных)|деревьях поиска]]. Так, например, в стандартной библиотеке [[Стандартная библиотека шаблонов|STL]] языка [[C++]] контейнер &amp;lt;tt&amp;gt;map&amp;lt;/tt&amp;gt; реализован на основе [[Красно-чёрное дерево|красно-чёрного дерева]].&lt;br /&gt;
В языках [[D (язык программирования)|D]], [[Java]], [[Ruby]], [[Tcl]], [[Python]] используется один из вариантов [[Хеш-таблица|хеш-таблицы]].&lt;br /&gt;
Есть и другие реализации.&lt;br /&gt;
&lt;br /&gt;
У каждой реализации есть свои достоинства и недостатки. Важно, чтобы все три операции выполнялись как в среднем, так и в худшем случае за время &amp;lt;math&amp;gt;O(\log n)&amp;lt;/math&amp;gt;, где &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt; — текущее количество хранимых пар. Для сбалансированных деревьев поиска (в том числе для красно-чёрных деревьев) это условие выполнено.&lt;br /&gt;
&lt;br /&gt;
В реализациях, основанных на хеш-таблицах, среднее время оценивается как &amp;lt;math&amp;gt;O(1)&amp;lt;/math&amp;gt;, что лучше, чем в реализациях, основанных на деревьях поиска. Но при этом не гарантируется высокая скорость выполнения отдельной операции: время операции &amp;lt;tt&amp;gt;INSERT&amp;lt;/tt&amp;gt; в худшем случае оценивается как &amp;lt;math&amp;gt;O(n)&amp;lt;/math&amp;gt;. Операция &amp;lt;tt&amp;gt;INSERT&amp;lt;/tt&amp;gt; выполняется долго, когда коэффициент заполнения становится высоким и необходимо перестроить индекс хеш-таблицы.&lt;br /&gt;
&lt;br /&gt;
Хеш-таблицы плохи также тем, что на их основе нельзя реализовать быстро работающие дополнительные операции MIN, MAX и алгоритм обхода всех хранимых пар в порядке возрастания или убывания ключей.&lt;br /&gt;
&lt;br /&gt;
== Примечания ==&lt;br /&gt;
{{примечания}}&lt;br /&gt;
&lt;br /&gt;
== Ссылки ==&lt;br /&gt;
* [http://www.nist.gov/dads/HTML/assocarray.html NIST’s Dictionary of Algorithms and Data Structures: Associative Array]&lt;br /&gt;
* [http://www.nist.gov/dads/HTML/dictionary.html NIST’s Dictionary of Algorithms and Data Structures: Association List]&lt;br /&gt;
&lt;br /&gt;
{{rq|&lt;br /&gt;
{{нет источников|дата=2006-10-08}}&lt;br /&gt;
{{стиль статьи|дата=2020-02-02}}&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Типы данных}}&lt;br /&gt;
&lt;br /&gt;
[[Категория:Структуры данных]]&lt;br /&gt;
[[Категория:Составные типы данных]]&lt;/div&gt;</summary>
		<author><name>2A02:2698:182C:2006:B412:7012:9612:6E6C</name></author>
	</entry>
</feed>