Это не ответ на ваш первоначальный вопрос о компьютерной архитектуре, но может иметь отношение к вашей цели.
В этом обсуждении весь индекс массива начинается с нуля.
Предполагая, что n намного меньше size , измените ваш алгоритм так, чтобы он сохранял две части информации:
- Массив размер
- Массив n и счетчик, используемый для эмуляции установленного контейнера.Допускаются повторяющиеся значения.
Каждый раз, когда ненулевое значение записывается в индекс k в полноразмерном массиве, вставьте значение k вконтейнер set.
Когда необходимо очистить полноразмерный массив, получите каждое значение, хранящееся в контейнере набора (который будет содержать k , среди прочего), и установите каждый соответствующий индексв полноразмерном массиве к нулю.
Можно также использовать похожую технику, известную как двухуровневая гистограмма или радикальная гистограмма.
Сохраняются два фрагмента информации:
- Массив
size
- Логический массив
ceil(size / M)
, где M
это основа.ceil
- функция потолка.
Каждый раз, когда ненулевое значение записывается в индекс k в полноразмерном массиве, элементfloor(k / M)
в логическом массиве должен быть отмечен.
Допустим, bool_array[j]
отмечен.Это соответствует диапазону от j*M
до (j+1)*M-1
в полноразмерном массиве.
Когда необходимо очистить полноразмерный массив, отсканируйте логический массив для любых отмеченных элементов и соответствующий диапазон в полноразмерном массиве должен быть очищен.