Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
otvety_proga.docx
Скачиваний:
45
Добавлен:
08.08.2019
Размер:
51.93 Кб
Скачать
  1. Очередь

Очередь — структура данных с дисциплиной доступа к элементам «первый пришёл — первый вышел» (FIFO, First In — First Out). Добавление элемента (принято обозначать словом enqueue) возможно лишь в конец очереди, выборка — только из начала очереди (что принято называть dequeue, при этом выбранный элемент из очереди удаляется).

Способы реализации очереди

Существуют два основных способа реализации очереди на языке программирования.

Первый способ представляет очередь в виде массива и двух целочисленных переменных start и end.

Переменные start и end указывают на голову и хвост очереди соответственно. При добавлении элемента в очередь переменная end уменьшается на 1 и в q[end] записывается новый элемент очереди. Если значение end становится меньше 1, то мы как бы циклически обходим массив и значение переменной становится равным n. Извлечение элемента из очереди производится аналогично (при извлечении элемента q[start] из очереди, переменная start уменьшается на 1).

Преимущества данного метода: возможна незначительная экономия памяти по сравнению со вторым способом; проще в разработке.

Недостатки: ограничение на максимальное количество элементов в очереди размером массива (n).

Второй способ основан на работе с динамической памятью. Очередь представляется в качестве линейного списка, в котором добавление\удаление элементов идет строго с соответствующих его концов.

Преимущества данного метода: размер очереди ограничен лишь объемом памяти.

Недостатки: сложнее в разработке.

  1. Рекурсия

Рекурсия — метод определения класса объектов или методов предварительным заданием одного или нескольких (обычно простых) его базовых случаев или методов, а затем заданием на их основе правила построения определяемого класса.

Функция, которая вызывает саму себя.

В программировании рекурсия — вызов функции (процедуры) из неё же самой, непосредственно (простая рекурсия) или через другие функции (сложная рекурсия), например, функция A вызывает функцию B, а функция B — функцию A. Количество вложенных вызовов функции или процедуры называется глубиной рекурсии.

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

Условия, ограничивающие глубину рекурсии - терминальные, в случае, если не указаны условия, рекурсия будет происходить бесконечно. Ограничение - размер стека=ОС.

Примеры: факториал, фибоначчи, фракталы.

Реккурентность - это рекурсивное определение функции. Они широко распространены в математике. Возможно наиболее знакомая Вам из такого рода функций - это факториал. Факториал - это произведение натуральных чисел от единицы до какого - либо данного натурального числа.

  1. Деревья

Самые простые из деревьев считаются бинарные деревья.

Бинарное дерево-это конечное множество элементов, которое либо пусто, либо содержит один элемент, называемый корнем дерева, а остальные элементы множества делятся на два непересекающихся подмножества, каждое из которых само является бинарным деревом.

Корень (root)-связь-левое.правое поддерево.

Узлы-последующие элементы.

Все элементы, кот находятся на одной ступени иерархии наз уровнем.

Корень-0 уровень.

Дерево, не имеющее правого поддерева- вырожденное левое дерево. (и наоборот)

Узел, не имеющий потомков - лист.

Деревья:

бинарные (есть узлы с одним потомком)

полное бинарное дерево (нет узлов с одним потомком)

упорядоченные бинарные деревья (все элементы сленва меньше корня, все справа - больше корня)

сбалансированное (сумма значения левого поддерева = сумме значений правого поддерева)

Свойство 1. Строго бинарное дерево с n листами всегда содержит 2n-1 узлов.

Существует 3 способа обхода бинарного дерева.

В прямом порядке:

Попасть в корень

Пройти в прямом порядке левое поддерево

Пройти в прямом порядке правое поддерево

В симметричном порядке:

Пройти в симметричном порядке левое поддерево

Попасть в корень

Пройти в симметричном порядке правое поддерево

В обратном порядке:

Пройти в обратном порядке левое поддерево

Пройти в обратном порядке правое поддерево

Попасть в корень

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