другим способом может быть использование Set [Hash / Tree], размер которого будет выбираться динамически.каждый элемент находится в наборе тогда и только тогда, когда этот ресурс выделен.
проблемы с этим решением:
1.это будет медленнее.
2.когда количество элементов велико, это займет больше памяти, чем статический массив.
для 2k, я бы придерживался статического растрового массива.
еще одна возможность:
при использовании того же трюка Виртуальная память использует (страницы) .
разбейте ваш «массив» на N частей и создайте дополнительную таблицу размера N.
каждому элементу таблицы будет сопоставлена часть массива, к которой он относится.
теперь, когда вы выделяете ресурс k, вам нужно будет выделить часть массива, в которой находится k, [и установить все остальные значения в 0].
это все равно будет медленнее, чем порция, и когда все входы распределены, это потребует дополнительных N * 4 байта.
Я бы использовал это решение, только если данные намного больше, чем 2k.
больше информации: http://tldp.org/LDP/tlk/mm/memory.html