Добавил:
github.com Кофедра ВТ-помойка Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Скачиваний:
29
Добавлен:
17.11.2018
Размер:
78.42 Кб
Скачать

МИНОБРНАУКИ РОССИИ

Санкт-Петербургский государственный

электротехнический университет

«ЛЭТИ» им. В.И. Ульянова (Ленина)

Кафедра вычислительной техники

отчет

по лабораторной работе №4

по дисциплине «Алгоритмы и структуры данных»

Тема: «Деревья двоичного поиска (АВЛ дерево)»

Вариант №42

Студенты гр. 6307

Лазарев С.О.

Медведев Е.Р.

Преподаватель

Колинько П.Г.

Санкт-Петербург

2018

Y

ЦЕЛЬ 3

ЗАДАНИЕ 3

АВЛ дерево 4

Временная сложность 5

ВЫВОДЫ 6

СПИСОК ИСПОЛЬЗОВАННЫХ ИСТОЧНИКОВ 7

ПРИЛОЖЕНИЕ 8

СОДЕРЖА

ЗАДАНИЕ 3

ВЫВОДЫ 13

СПИСОК ИСПОЛЬЗОВАННЫХ ИСТОЧНИКОВ 14

ПРИЛОЖЕНИЕ 15

ЦЕЛЬ 3

ЗАДАНИЕ 3

АВЛ дерево 4

Временная сложность 5

ВЫВОДЫ 6

СПИСОК ИСПОЛЬЗОВАННЫХ ИСТОЧНИКОВ 7

ПРИЛОЖЕНИЕ 8

ЦЕЛЬ

Получить практические навыки по работе с ДДП, а именно с АВЛ деревом.

ЗАДАНИЕ

Составить и отладить программу для вычисления шестого множества по пяти заданным, представленным в форме АВЛ деревьев.

F = (A & B) \ (C & D) ^ E.

АВЛ дерево

Сбалансированное по высоте двоичное дерево поиска: для каждой его вершины высота ее двух поддеревьев различается не более чем на 1.

Пример:

Рис 1. Дерево А.

Рис. 2 Дерево В.

Рис 3. Дерево С.

Рис 4. Дерево D.

Рис 5. Дерево E.

Рис 6. Дерево – результат F.

Временная сложность

Таблица 1. Временная сложность

В среднем

В худшем случае

Расход памяти

O(n)

O(n)

Поиск

O(log n)

O(log n)

Вставка

O(log n)

O(log n)

XOR

O(n*log(n))

-

&

O(n*log(n))

-

\

O(n*log(n))

-

F

O(n*log(n))

-

ВЫВОДЫ

Мы получили практические навыки работы с ДДП (АВЛ дерево). Выбор АВЛ дерева удачен для нашего варианта задания на обработку множеств. Мы всегда используем операции поиска и вставки, которые имеют временную сложность O(log n).

СПИСОК ИСПОЛЬЗОВАННЫХ ИСТОЧНИКОВ

  1. Алгоритмы и структуры данных. – Методические указания к лабораторным работам, практическим занятиям и курсовому проектированию, часть 2, глава 1 «Работа с иерархией объектов: наследование и полиморфизм».

ПРИЛОЖЕНИЕ

Source.Cpp

/*

* C++ program to Implement AVL Tree

*/

#include<iostream>

#include<cstdio>

#include<sstream>

#include<algorithm>

#include "avl_tree.h"

#include <time.h>

#define pow2(n) (1 << (n))

using namespace std;

const int N = 10;

avlTree generate();

/*

* Main Contains Menu

*/

int main()

{

setlocale(LC_ALL, "RU");

srand(time(NULL));

avlTree

a = generate(),

b = generate(),

c = generate(),

d = generate(),

e = generate();

cout << endl << "------------------------------------- Дерево A: --------------------------------------------------" << endl;

a.display(a.root, 1);

cout << endl << endl << "//////////////////////////////////////////////////////////////////////////////////////////////////";

cout << endl << "------------------------------------- Дерево B: --------------------------------------------------" << endl;

b.display(b.root, 1);

cout << endl << endl << "//////////////////////////////////////////////////////////////////////////////////////////////////";

cout << endl << "------------------------------------- Дерево C: --------------------------------------------------" << endl;

c.display(c.root, 1);

cout << endl << endl << "//////////////////////////////////////////////////////////////////////////////////////////////////";

cout << endl << "------------------------------------- Дерево D: --------------------------------------------------" << endl;

d.display(d.root, 1);

cout << endl << endl << "//////////////////////////////////////////////////////////////////////////////////////////////////";

cout << endl << "------------------------------------- Дерево E: --------------------------------------------------" << endl;

e.display(e.root, 1);

avlTree f = ((a&b) / (c&d)) ^ e;

cout << endl << endl << "//////////////////////////////////////////////////////////////////////////////////////////////////";

cout << endl << "------------------------------ Дерево F = ( (A & B) / (C & D) ) ^ E: -----------------------------" << endl;

f.display(f.root, 1);

cout << endl << endl << "//////////////////////////////////////////////////////////////////////////////////////////////////";

printf("\n");

system("pause");

return 0;

}

avlTree generate() {

avlTree result = avlTree();

static char *uni = new char[N];

int k = 0;

for (int i = 0; i < N; i++) {

uni[i] = k;

k++;

}

int count = 1 + rand() % (N - 1);

int x;

for (int i = 0; i < count; i++)

{

int p = rand() % (N - i);

if (p)

{

result.root = result.insert(result.root, uni[p + i]);

x = uni[i];

uni[i] = uni[i + p];

uni[i + p] = x;

}

}

result.inorder(result.root);

return result;

}

Соседние файлы в папке Колинько 4 семестр 2018