Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
lec_inf.doc
Скачиваний:
61
Добавлен:
16.03.2015
Размер:
1.14 Mб
Скачать

6.4. Эффективность рекурсивных вычислений

Так как для хранения фреймов активации рекурсивной процедуры используется автоматическая память, при обработке данных нерекурсивной природы следует использовать итеративные алгоритмы, не требующие дополнительного расхода памяти, если только рекурсивные алгоритмы не оказываются более ясными и понятными. Примером алгоритма, обрабатывающего данные нерекурсивной природы, но имеющего гораздо более эффективную рекурсивную реализацию по сравнению с итеративной, яаляется алгоритм решения задачи о “ханойских башнях”. При вычислении же значения факториала натурального числа N несомненно следует предпочесть итеративную процедуру.

Если процедура содержит единственный рекурсивный вызов и он является последним действием процедуры, то говорят, что имеет место задняя рекурсия (tail recursion) (см. процедуру Print_Front). Этот рекурсивный вызов требует затрат на создание фреймов активации и запоминание их в стеке. Когда рекурсивный вычислительный процесс доходит до условия завершения, выполняется серия возвратов, выталкивающих фреймы активации из стека. Если при наличии задней рекурсии фреймы активации не используются для окончательных вычислений, следует предпочесть итеративную реализацию (см. процедуру Print из программного модуля!!! ). Рекурсивная процедура Print_Back, не содержащая задней рекурсии, имеет более эффективную реализацию, чем итеративная процедура, выполняющая те же действия.

7. ИерархическиеНелинейные структуры данных.Деревья

7.1. Деревья общего вида

Нелинейные структуры данных выражают более сложные отношения порядка между объектами, чем отношения предшествования и следования. Наиболее важным видом нелинейных структур являются деревья. Древовидные структуры позволяют определить такие отношения, как предок, потомок, брат и т.п.

Дерево– конечное множество объектов Т, состоящее из одного или более узлов, для которых выполняются следующие условия:

  • имеется один специально выделенный узел, называемый корнем данного дерева;

  • остальные узлы (исключая корень) содержатся вmпопарно непересекающихся множествах T1, …,Tm, каждое из которых в свою очередь является деревом. Деревья T1,...,Тm называются поддеревьямиданного корня. Структура дерева общего вида представлена на рис. 63.

Рис. 63. Дерево общего вида

Число поддеревьев данного корня (узла) называется степеньюэтогоузла. Максимальная степень всех узлов дерева называетсястепенью дерева, обозначимd. Узел с нулевой степенью называетсятерминальным узлом или листом.Уровень узла– выраженная в числе ребер длина пути, ведущего из узла в корень дерева плюс единица. Считается, что корень дерева находится на уровне 1. Если некоторый узел А располагается на уровнеi, то находящийся непосредственно ниже его на уровнеi+1узел В называетсянепосредственным потомкомузла А, а узел А называетсянепосредственным предкомузла В. Максимальный уровень всех узлов дерева называетсявысотой или глубиной дерева, обозначимh. Высота пустого дерева равна нулю, высота дерева, состоящего из одного корня, равна 1. Дерево, содержащее максимальное число узлов, называетсяполным. Количество узлов в полном дереве степениdвысотойh вычисляется по формуле (i – номер уровня)

Основные свойствадеревьев общего вида:

  • корень не имеет предков;

  • каждый узел, за исключением корня, имеет только одного предка;

  • каждый узел связан с корнем единственным путем, т.е. в деревьях отсутствуют замкнутые контуры (циклы).

Если в определении дерева имеет значение относительный порядок поддеревьев Т1,…,Тm, дерево являетсяупорядоченным. Поэтому два упорядоченных дерева на рис. 64 – это разные, отличные друг от друга объекты.

Рис. 64. Два различных дерева

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