Книга: Программирование на языке Ruby
8.2.14. Хэш как разреженная матрица
8.2.14. Хэш как разреженная матрица
Часто в массиве или матрице заполнена лишь небольшая часть элементов. Можно хранить их как обычно, но такое расходование памяти неэкономно. Хэш позволяет хранить только реально существующие значения.
В следующем примере предполагается, что несуществующие значения по умолчанию равны нулю:
values = Hash.new(0)
values[1001] = 5
values[2010] = 7
values[9237] = 9
x = values[9237] # 9
y = values[5005] # 0
Ясно, что обычный массив в таком случае содержал бы более 9000 неиспользуемых элементов, что не всегда приемлемо.
А если нужно реализовать разреженную матрицу размерности два или более? В этом случае можно было бы использовать массивы в качестве ключей:
cube = Hash.new(0)
cube[[2000,2000,2000]] = 2
z = cube[[36,24,36]] # 0
Здесь обычная матрица содержала бы миллиарды элементов.
- 8.2.1. Создание нового хэша
- 8.2.2. Указание значения по умолчанию для хэша
- 8.2.3. Доступ к парам ключ-значение и добавление новых пар
- 8.2.4. Удаление пар ключ-значение
- 8.2.5. Обход хэша
- 8.2.6. Инвертирование хэша
- 8.2.7. Поиск ключей и значений в хэше
- 8.2.8. Копирование хэша в массив
- 8.2.9. Выборка пар ключ-значение по заданному критерию
- 8.2.10. Сортировка хэша
- 8.2.11. Объединение двух хэшей
- 8.2.12. Создание хэша из массива
- 8.2.13. Вычисление разности и пересечения хэшей
- 8.2.14. Хэш как разреженная матрица
- 8.2.15. Реализация хэша с повторяющимися ключами
- 8.2.10. Сортировка хэша
- 8.2.12. Создание хэша из массива
- 8.2.1. Создание нового хэша
- 8.2.8. Копирование хэша в массив
- Можно ли сделать командную строку цветной (как в фильме «Матрица»)?
- Алгоритмы хэширования
- Матрица Эйзенхауэра как инструмент расстановки приоритетов
- 14.4.2. Хранение переменных окружения в виде массива или хэша
- Матрица сайта
- 8.2.15. Реализация хэша с повторяющимися ключами
- Ассортиментная матрица и ассортиментный минимум
- 3.1. Матрица – «сердце» цифровой камеры