Во многих языках программирования ассоциативный массив является хеш-таблицей. Попробую объяснить именно на этом примере с парой упрощений.
Что мы умеем: создать массив и обращаться к его элементам по индексу за константное, очень маленькое время.
Что мы хотим уметь: обращаться к элементам так, чтобы вместо индексов мог быть любой тип данных и это было так же быстро.
Что мы делаем:
1. Разработаем хеш-функцию f(x), значение которой определено для любой строки (или других типов данных). Ее значением является некоторое число в диапазоне от 0 до N. Причем сделаем так, что распределение результирующих значений будет довольно равномерным.
Пример очень глупой хеш-функции: для строки s f(s) = (s[0] * 25 + s[1] * 47 + s[2] * 13) % N
2. Создадим массив длиной N + 1, пусть будет A. Пусть элементами массива будут векторы (для простоты).
3. При добавлении пары (ключ, значение) посчитаем хеш ключа, получим число от 0 до N, скажем, k. Добавим в k-тый элемент массива A нашу пару.
4. Если хотим достать элемент по какому-то ключу, посчитаем его хеш той же функцией. Посмотрим по адресу A[k], потому что умеем - просто обращаемся к элементу массива по индексу. И ищем нужную пару (ключ, значение) в этой ячейке. Если хеш-функция хорошая, то немного ключей будут иметь одинаковый хеш, поэтому поиск будет очень-очень быстрый. (кстати, если все-таки имеют, то это называется коллизией)
5. В итоге получаем структуру данных, которая позволяет вставлять и удалять элементы почти за константное время (в худшем случае за линейное, конечно, но это почти невозможно в нормальных условиях).
Другие языки программирования и технологии
Объясните наиболее доступно, как работает ассоциативный массив?
В качестве индексов ассоциативного массива используются не подряд идущие целые числа, а произвольные строки (а в некоторых языках индексом может быть не только строка, а значение практически любого типа).
И если обычный массив имеет фиксированный в момент создания размер, то в ассоциированном массиве можно добавлять и удалять элементы.
А вот внутреннее устройство в разных языках разное: для их реализации могут использоваться и деревья, и хеш-таблицы...
И если обычный массив имеет фиксированный в момент создания размер, то в ассоциированном массиве можно добавлять и удалять элементы.
А вот внутреннее устройство в разных языках разное: для их реализации могут использоваться и деревья, и хеш-таблицы...
По адресу находится дом
Адрес - ключ, дом - значение
Адрес - ключ, дом - значение
Похожие вопросы
- Аналог ассоциативного массива в Паскале.
- C++ многомерный ассоциативный массив
- как объяснить преподавателю по информатике, что такое массив ...
- Кто-нибудь может объяснить мне как это работает???
- Объясните пожалуйста, что означает эта строка WRITE('ВВЕДИTE ЭЛЕМЕНТ МАССИВА '); READLN(MAS[1])?
- C# Дан массив размера N. Найти 2 элемента массива, сумма которых наиболее близка к максимуму массива и поменять
- помогите пожалуйста сделать мне практическую по массивам, пожалуйста!!!
- Задачка на сортировку массивов
- 1.Заполнить массив случайными числами. Вывести элементы массива на экран. Заменить все его минимальные элементы нулями.
- Что такое массив. Что такое массив в программировании. Объясните / дайте пример.