Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
TA1_2.DOC
Скачиваний:
11
Добавлен:
02.11.2018
Размер:
444.42 Кб
Скачать

Утверждение 2.

Умножение и деление (их можно выполнить с помощью сложений и вычитаний) совершаются за T2 (n). Грубая оценка временных затрат на всю программу составит O(T4 (n)).

O([T(n) lg T(n) lg lg T(n)]2) - более точная оценка.

§ 1. Структуры данных. Определение.

Список - это конечная последовательность элементов, взятых из некоторого подходящего множества.

Простейшей его реализацией является структура последовательно связанных компонент, изображенная на рис. 4.

Каждая компонента в этой структуре состоит из двух ячеек памяти. Первая ячейка содержит сам элемент (сам элемент тоже может быть сложной структурой), вторая - указатель следующего элемента. Это можно реализовать в виде двух массивов :

1) Вставка.

Ниже приведенная процедура позволяет вставить новую компоненту в список.

free - номер незанятой ячейки в массивах name и next, а pos - индекс той компоненты в списке, после которой надо вставить элемент:

procedure Add ( elem, free, pos )

begin

name[ free ]  elem;

next [ free ]  next [ pos ];

next [ pos ]  free;

end;

Любой разумный перевод в команды РАМ приведет к тому, что время выполнения процедуры Add не будет зависеть от размера списка.

Сложность O(1).

2) Удаление.

Для того, чтобы удалить компоненту, следующую за компонентой в ячейке I , можно положить next[I] = next [next [I] ]. Индекс удаленной компоненты можно поместить в список незанятых ячеек памяти.

Сложность O(1).

3) Конкатенация (сцепление) двух списков, в результате чего образуется единственный список.

Конкатенацию можно выполнить за ограниченное (постоянной величиной) число шагов, включив в представление списка еще один указатель. Этот указатель дает индекс последней компоненты списка и тем самым позволяет обойтись без просмотра всего списка для определения его последнего элемента.

4) Расцепление списка, стоящего после некоторого элемента, результатом которой будут два списка.

Расцепление можно выполнить за ограниченное (постоянной величиной) время, если известен индекс компоненты, непосредственно предшествующей месту расцепления.

Сложность O(1).

1.1. Очередь и стек. Определение.

Стеком (или магазином) называют список , элементы которого удаляют и добавляют только на конце списка, т.е. по принципу “последний вошел - первый вышел”.

Часто стек реализуется в виде одного массива. Например, список

Elem 1, Elem 2, Elem 3

м ожно хранить в массиве name (рис. 6).

Переменная top является указателем последнего элемента, добавленного к стеку. Чтобы добавить (ЗАТОЛКНУТЬ- PUSH) новый элемент в стек, значение top увеличивают на 1, а затем помещают новый элемент в name [ top ]. Т.к. массив name имеет конечную длину l, перед попыткой вставить новый элемент следует проверить, что top <l-1.

Чтобы удалить (ВЫТОЛКНУТЬ- POP) элемент из вершины стека, надо просто уменьшить значение top на 1. Не обязательно физически стирать элемент, удаляемый из стека.

Чтобы узнать, пуст ли стек, достаточно проверить, не имеет ли top значение, меньшее 0.

Время выполнения операций PUSH и POP и проверка пустоты не зависят от числа элементов в стеке - O(1).

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]