Рассмотрим блоки постоянной длины, потом результаты не трудно обобщить для блоков разной длины.
Входящая запись размещается на любом свободном месте. Заранее эти места не известны, надо найти одно из них. Для памяти объёмом
при длине записи
мест для размещении будет
. Задача свелась к поиску элемента в массиве размерностью
. Предположим, что искомый элемент с равной вероятностью может находится в любом месте массива.
1. Для поиска в массиве нужного элемента простым перебором с начала массива в среднем потребуется
просмотров, состоящих из трёх операций: чтение элемента массива, проверка, переход к следующему элементу массива.
2. Можно освободившиеся места сдвигать в началу массива. Это потребует перемещения в массиве в среднем тоже
элементов. Этот вариант более затратен по операциям и времени, чем предыдуший.
3. Если использовать, списки свободных и занятых мест, то это вызовет перемещение поиска из исходного массива размерностью
в дополнительные два массива той же размерностьи
каждый, что не только не ускорит процесс, а вызовет дополнительный расход памяти и времени на реорганизацию списков.
Использовать дополнительные списки имеет смысл, если размерность списков значительно меньше размерности
исходного массива.
Один из возможный вариантов.
Создадим бинарную строку длиной
. Припишем
-тому элементу строки "1", если
-тый элемент в исходном массиве занят, и "0", если свободен. Поиск свободного места осуществляем поиском в строке места первого вхождения подстроки "0". В языках программирования есть такая функция. Время поиска при такой организации сократится больше, чем на порядок.