Re: [Q] Быстpый поиск в отсоpтиpованном спис ке

From
Andrey Belyakov ()
To
All
Date
2002-09-20T17:12:48Z
Area
RU.ALGORITHMS
From: "Andrey Belyakov" <andrejb@netmail.lv>

О, Холмс....

Видители, для списка определен ряд допустимых операций:
получить первый из элементов,
получить следующий элемент,
добавить элемент (за/перед текущим),
удалить (текущий) элемент

для двунаправленого списка еще пара операций:
получить последний элемент,
получить предыдущий элемент.

Понятие 'позиции' - отсутствует, так же как и понятие индекса.

Андрей.

Привет, Андрей!

> Создали и добавили 1, 2, 3 Удалили 2. Создали и добавили 4... и т.д.
> Отсортировали результат - требуется назвать _индекс_ бывшего третьего...

Ватсон, это же элементарно! (с)

1) Создали список.
2) Занесли 1,2,3 на позиции 1,2,3.
3) Удалили 2 с позиции 2. Получили список из двух элементов 1,3. При этом
элемент 3 сдвигается на одну позицию и занимает место элемента 2.
4) Добавили 4 на позицию 3. Получили список 1,3,4.
5) Добавили 10 на позицию 4. Получили список 1,3,4,10.
6) Добавили 2 на позицию 2. При этом элементы 3,4,10 сдвигаются на одно
позицию и получается список 1,2,3,4,10.

Ничего сортировать не надо, список и так отсортирован.
Поиск позиции, куда вставить новый элемент, производится все тем же
двоичным поиском.

При этом памяти нужно в три раза меньше чем для хранения двоичного дерева
(4 байта на индекс вместо 12 байт (индекс ветви и два указателя на левую и
правую дочерние ветви)).

Единственный минус, как я уже говорил выше, это сдвиг массива при вставке
внутрь или при удалении элемента внутри массива.

Пока,
Олег.



-- 
Отправлено через сервер Форумы@mail.ru - http://talk.mail.ru
--- ifmail v.2.15dev5
 * Origin: Talk.Mail.Ru (2:5020/400)