Разделы презентаций


Структуры и алгоритмы обработки данных на ЭВМ АВЛ-дерево

Содержание

Дать определение АВЛ-дерева;Рассмотреть способы балансировки АВЛ-дерева;Научиться выполнять построение АВЛ-дерева;Научиться выполнять операции поиска, добавления, удаления узла из АВЛ-дерева.Задачи

Слайды и текст этой презентации

Слайд 1Структуры и алгоритмы обработки данных на ЭВМ АВЛ-дерево
Красиков И.А.



ТУСУР 2015

Структуры и алгоритмы обработки данных на ЭВМ  АВЛ-деревоКрасиков И.А.ТУСУР 2015

Слайд 2Дать определение АВЛ-дерева;
Рассмотреть способы балансировки АВЛ-дерева;
Научиться выполнять построение АВЛ-дерева;
Научиться выполнять

операции поиска, добавления, удаления узла из АВЛ-дерева.


Задачи

Дать определение АВЛ-дерева;Рассмотреть способы балансировки АВЛ-дерева;Научиться выполнять построение АВЛ-дерева;Научиться выполнять операции поиска, добавления, удаления узла из АВЛ-дерева.Задачи

Слайд 3АВЛ–дерево - это структура данных, изобретенная советскими математиками:
Г.М. Андельсон-Вельским и

Е.М. Ландисом. АВЛ – дерево является частным случаем двоичного дерева

поиска, для которого определено следующее условие: каждый узел дерева имеет коэффициент сбалансированности, который должен удовлетворять условию | h(Rtree) - h(Ltree) | ≤ 1, где h(Ltree) и h(Rtree) – высоты левого и правого поддеревьев соответственно. Т.е. коэффициент сбалансированности для каждого узла дерева должен принимать одно из трех значений {-1,0,1}. Если, хотя бы для одного узла это условие не выполняется, то дерево не является сбалансированным по АВЛ и необходима его балансировка. Кроме того, поскольку АВЛ-дерево является бинарным деревом поиска, то для каждого его узла должно выполняться условие: значения в левом поддереве должны быть меньше значения этого узла, а значения в правом поддереве должны быть больше значения данного узла.
Сложность операций поиска, добавления, удаления узла в АВЛ-дереве составляет порядка О(log N), где N – количество элементов дерева.

Определение

АВЛ–дерево - это структура данных, изобретенная советскими математиками:Г.М. Андельсон-Вельским и Е.М. Ландисом. АВЛ – дерево является частным

Слайд 4Пример АВЛ-дерева

Пример АВЛ-дерева

Слайд 5struct Tree
{
int Value;
Tree *Right, *Left;
};

Структура АВЛ-дерева
В рассматриваемых примерах программная структура

АВЛ-дерева будет иметь следующий вид:

struct Tree{	int Value;	Tree *Right, *Left;};Структура АВЛ-дереваВ рассматриваемых примерах программная структура АВЛ-дерева будет иметь следующий вид:

Слайд 6Балансировка АВЛ-дерева LL - вращение
Существует 4 вида ситуаций в которых необходима

балансировка АВЛ-дерева, как правило, такие ситуации возникают по причине добавления

или удаления узла из АВЛ-дерева. Рассмотрим первую из них.
Данная ситуация возникает когда дерево имеет «перевес» в левом поддереве левого потомка узла дерева, в этом случае необходимо провести балансировку малым левым вращением или LL-вращением (Left-Left Rotation).

Коэффициенты сбалансированности

Балансировка АВЛ-дерева LL - вращениеСуществует 4 вида ситуаций в которых необходима балансировка АВЛ-дерева, как правило, такие ситуации

Слайд 7 Tree* LL_Rotation(Tree* T2 ){
Tree* T1;
T1 = T2->Left;

T2->Left = T1->Right;
T1->Right = T2;
return T1; }

Балансировка

АВЛ-дерева LL - вращение

Существует 4 вида ситуаций в которых необходима балансировка АВЛ-дерева, как правило, такие ситуации возникают по причине добавления или удаления узла из АВЛ-дерева. Рассмотрим первую из них.
Данная ситуация возникает когда дерево имеет «перевес» в левом поддереве левого потомка узла дерева, в этом случае необходимо провести балансировку малым левым вращением или LL-вращением (Left-Left Rotation).

Коэффициенты сбалансированности

Tree* LL_Rotation(Tree* T2 ){ Tree* T1; T1 = T2->Left; T2->Left = T1->Right; T1->Right = T2;

Слайд 8Балансировка АВЛ-дерева RR - вращение
Данная ситуация возникает когда дерево имеет «перевес»

в правом поддереве правого потомка узла дерева, в этом случае

необходимо провести балансировку малым правым вращением или RR-вращением (Right-Right Rotation).

0

1

2

Балансировка АВЛ-дерева RR - вращениеДанная ситуация возникает когда дерево имеет «перевес» в правом поддереве правого потомка узла

Слайд 9Балансировка АВЛ-дерева RR - вращение
Данная ситуация возникает когда дерево имеет «перевес»

в правом поддереве правого потомка узла дерева, в этом случае

необходимо провести балансировку малым правым вращением или RR-вращением (Right-Right Rotation).

0

1

2

Tree* RR_Rotation (Tree* T1 ){
Tree* T2;
T2 = T1->Right;
T1->Right = T2->Left;
T2->Left = T1;
return T2; }


Балансировка АВЛ-дерева RR - вращениеДанная ситуация возникает когда дерево имеет «перевес» в правом поддереве правого потомка узла

Слайд 10Балансировка АВЛ-дерева LR - вращение
Данная ситуация возникает когда дерево имеет «перевес»

в правом поддереве левого потомка узла дерева, в этом случае

необходимо провести балансировку комбинацией малого правого (RR) и малого левого (LL) вращений, такой способ балансировки называется лево-правым вращением (Left-Right-Rotation)

7

1

5

0

1

-2

7

5

1

0

-2

-1

Шаг 1: RR - вращение

Tree* LR_Rotation(Tree* T3)
{
T3->Left = RR_Rotation(T3->Left );
return LL_Rotation(T3);
}


Балансировка АВЛ-дерева LR - вращениеДанная ситуация возникает когда дерево имеет «перевес» в правом поддереве левого потомка узла

Слайд 11Балансировка АВЛ-дерева LR – вращение (продолжение)
Шаг 2: LL - вращение
Tree* LR_Rotation(Tree*

T3)
{
T3->Left = RR_Rotation(T3->Left );
return LL_Rotation(T3);
}


Балансировка АВЛ-дерева LR – вращение (продолжение)Шаг 2: LL - вращениеTree* LR_Rotation(Tree* T3) { T3->Left = RR_Rotation(T3->Left );

Слайд 12Балансировка АВЛ-дерева RL - вращение
Данная ситуация возникает когда дерево имеет «перевес»

в левом поддереве правого потомка узла дерева, в этом случае

необходимо провести балансировку комбинацией малого левого (LL) и малого правого (RR) вращений, такой способ балансировки называется право-левым вращением (Right-Left-Rotation)

1

7

5

0

-1

2

Шаг 1: LL - вращение

Tree* RL_Rotation(Tree* T1) {
T1->Right = LL_Rotation(T1->Right );
return RR_Rotation(T1);
}


Балансировка АВЛ-дерева RL - вращениеДанная ситуация возникает когда дерево имеет «перевес» в левом поддереве правого потомка узла

Слайд 13Балансировка АВЛ-дерева RL – вращение (продолжение)
Шаг 2: RR - вращение
Tree* RL_Rotation(Tree*

T1) {
T1->Right = LL_Rotation(T1->Right );
return RR_Rotation(T1);
}


Балансировка АВЛ-дерева RL – вращение (продолжение)Шаг 2: RR - вращениеTree* RL_Rotation(Tree* T1) { T1->Right = LL_Rotation(T1->Right );

Слайд 14Построение АВЛ-дерева
Рассмотрим процесс построения АВЛ-дерева, состоящего из последовательности чисел:
1, 15,

7, 2, 3, 4, 9, 8, 5, 6, 11, 13

Построение АВЛ-дереваРассмотрим процесс построения АВЛ-дерева, состоящего из последовательности чисел:1, 15, 7, 2, 3, 4, 9, 8, 5,

Слайд 15Построение АВЛ-дерева
1, 15, 7, 2, 3, 4, 9, 8, 5,

6, 11, 13

Построение АВЛ-дерева1, 15, 7, 2, 3, 4, 9, 8, 5, 6, 11, 13

Слайд 16Построение АВЛ-дерева
1, 15, 7, 2, 3, 4, 9, 8, 5,

6, 11, 13

Построение АВЛ-дерева1, 15, 7, 2, 3, 4, 9, 8, 5, 6, 11, 13

Слайд 17Построение АВЛ-дерева
1, 15, 7, 2, 3, 4, 9, 8, 5,

6, 11, 13

Построение АВЛ-дерева1, 15, 7, 2, 3, 4, 9, 8, 5, 6, 11, 13

Слайд 18Построение АВЛ-дерева
1, 15, 7, 2, 3, 4, 9, 8, 5,

6, 11, 13

Построение АВЛ-дерева1, 15, 7, 2, 3, 4, 9, 8, 5, 6, 11, 13

Слайд 19Построение АВЛ-дерева
1, 15, 7, 2, 3, 4, 9, 8, 5,

6, 11, 13

Построение АВЛ-дерева1, 15, 7, 2, 3, 4, 9, 8, 5, 6, 11, 13

Слайд 20Построение АВЛ-дерева
Разбалансировка в узле 1
Выполняем RL-поворот.

Построение АВЛ-дереваРазбалансировка в узле 1 Выполняем RL-поворот.

Слайд 21Построение АВЛ-дерева
1, 15, 7, 2, 3, 4, 9, 8, 5,

6, 11, 13

Построение АВЛ-дерева1, 15, 7, 2, 3, 4, 9, 8, 5, 6, 11, 13

Слайд 22Построение АВЛ-дерева
1, 15, 7, 2, 3, 4, 9, 8, 5,

6, 11, 13

Построение АВЛ-дерева1, 15, 7, 2, 3, 4, 9, 8, 5, 6, 11, 13

Слайд 23Построение АВЛ-дерева
1, 15, 7, 2, 3, 4, 9, 8, 5,

6, 11, 13

Построение АВЛ-дерева1, 15, 7, 2, 3, 4, 9, 8, 5, 6, 11, 13

Слайд 24Построение АВЛ-дерева
1, 15, 7, 2, 3, 4, 9, 8, 5,

6, 11, 13

Построение АВЛ-дерева1, 15, 7, 2, 3, 4, 9, 8, 5, 6, 11, 13

Слайд 25Построение АВЛ-дерева
1, 15, 7, 2, 3, 4, 9, 8, 5,

6, 11, 13

Построение АВЛ-дерева1, 15, 7, 2, 3, 4, 9, 8, 5, 6, 11, 13

Слайд 26Построение АВЛ-дерева
1, 15, 7, 2, 3, 4, 9, 8, 5,

6, 11, 13

Построение АВЛ-дерева1, 15, 7, 2, 3, 4, 9, 8, 5, 6, 11, 13

Слайд 27Построение АВЛ-дерева
1, 15, 7, 2, 3, 4, 9, 8, 5,

6, 11, 13

Построение АВЛ-дерева1, 15, 7, 2, 3, 4, 9, 8, 5, 6, 11, 13

Слайд 28Построение АВЛ-дерева
Разбалансировка в узле 1
Выполняем RR-поворот.

Построение АВЛ-дереваРазбалансировка в узле 1 Выполняем RR-поворот.

Слайд 29Построение АВЛ-дерева
1, 15, 7, 2, 3, 4, 9, 8, 5,

6, 11, 13

Построение АВЛ-дерева1, 15, 7, 2, 3, 4, 9, 8, 5, 6, 11, 13

Слайд 30Построение АВЛ-дерева
1, 15, 7, 2, 3, 4, 9, 8, 5,

6, 11, 13

Построение АВЛ-дерева1, 15, 7, 2, 3, 4, 9, 8, 5, 6, 11, 13

Слайд 31Построение АВЛ-дерева
1, 15, 7, 2, 3, 4, 9, 8, 5,

6, 11, 13

Построение АВЛ-дерева1, 15, 7, 2, 3, 4, 9, 8, 5, 6, 11, 13

Слайд 32Построение АВЛ-дерева
1, 15, 7, 2, 3, 4, 9, 8, 5,

6, 11, 13

Построение АВЛ-дерева1, 15, 7, 2, 3, 4, 9, 8, 5, 6, 11, 13

Слайд 33Построение АВЛ-дерева
Разбалансировка в узле 7
Выполняем LR-поворот.

Построение АВЛ-дереваРазбалансировка в узле 7 Выполняем LR-поворот.

Слайд 34Построение АВЛ-дерева
1, 15, 7, 2, 3, 4, 9, 8, 5,

6, 11, 13

Построение АВЛ-дерева1, 15, 7, 2, 3, 4, 9, 8, 5, 6, 11, 13

Слайд 35Построение АВЛ-дерева
1, 15, 7, 2, 3, 4, 9, 8, 5,

6, 11, 13

Построение АВЛ-дерева1, 15, 7, 2, 3, 4, 9, 8, 5, 6, 11, 13

Слайд 36Построение АВЛ-дерева
1, 15, 7, 2, 3, 4, 9, 8, 5,

6, 11, 13

Построение АВЛ-дерева1, 15, 7, 2, 3, 4, 9, 8, 5, 6, 11, 13

Слайд 37Построение АВЛ-дерева
1, 15, 7, 2, 3, 4, 9, 8, 5,

6, 11, 13

Построение АВЛ-дерева1, 15, 7, 2, 3, 4, 9, 8, 5, 6, 11, 13

Слайд 38Построение АВЛ-дерева
1, 15, 7, 2, 3, 4, 9, 8, 5,

6, 11, 13
8>3

Построение АВЛ-дерева1, 15, 7, 2, 3, 4, 9, 8, 5, 6, 11, 138>3

Слайд 39Построение АВЛ-дерева
1, 15, 7, 2, 3, 4, 9, 8, 5,

6, 11, 13
8>7

Построение АВЛ-дерева1, 15, 7, 2, 3, 4, 9, 8, 5, 6, 11, 138>7

Слайд 40Построение АВЛ-дерева
1, 15, 7, 2, 3, 4, 9, 8, 5,

6, 11, 13
8

Построение АВЛ-дерева1, 15, 7, 2, 3, 4, 9, 8, 5, 6, 11, 138

Слайд 41Построение АВЛ-дерева
1, 15, 7, 2, 3, 4, 9, 8, 5,

6, 11, 13
8

Построение АВЛ-дерева1, 15, 7, 2, 3, 4, 9, 8, 5, 6, 11, 138

Слайд 42Построение АВЛ-дерева
1, 15, 7, 2, 3, 4, 9, 8, 5,

6, 11, 13

Построение АВЛ-дерева1, 15, 7, 2, 3, 4, 9, 8, 5, 6, 11, 13

Слайд 43Построение АВЛ-дерева
Разбалансировка в узле 15
Выполняем LL-поворот.

Построение АВЛ-дереваРазбалансировка в узле 15 Выполняем LL-поворот.

Слайд 44Построение АВЛ-дерева
5>3
1, 15, 7, 2, 3, 4, 9, 8, 5,

6, 11, 13

Построение АВЛ-дерева5>31, 15, 7, 2, 3, 4, 9, 8, 5, 6, 11, 13

Слайд 45Построение АВЛ-дерева
5

6, 11, 13

Построение АВЛ-дерева5

Слайд 46Построение АВЛ-дерева
5>4
1, 15, 7, 2, 3, 4, 9, 8, 5,

6, 11, 13

Построение АВЛ-дерева5>41, 15, 7, 2, 3, 4, 9, 8, 5, 6, 11, 13

Слайд 47Построение АВЛ-дерева
1, 15, 7, 2, 3, 4, 9, 8, 5,

6, 11, 13

Построение АВЛ-дерева1, 15, 7, 2, 3, 4, 9, 8, 5, 6, 11, 13

Слайд 48Построение АВЛ-дерева
1, 15, 7, 2, 3, 4, 9, 8, 5,

6, 11, 13
6>3

Построение АВЛ-дерева1, 15, 7, 2, 3, 4, 9, 8, 5, 6, 11, 136>3

Слайд 49Построение АВЛ-дерева
1, 15, 7, 2, 3, 4, 9, 8, 5,

6, 11, 13
6

Построение АВЛ-дерева1, 15, 7, 2, 3, 4, 9, 8, 5, 6, 11, 136

Слайд 50Построение АВЛ-дерева
1, 15, 7, 2, 3, 4, 9, 8, 5,

6, 11, 13
6>4

Построение АВЛ-дерева1, 15, 7, 2, 3, 4, 9, 8, 5, 6, 11, 136>4

Слайд 51Построение АВЛ-дерева
1, 15, 7, 2, 3, 4, 9, 8, 5,

6, 11, 13
6>5

Построение АВЛ-дерева1, 15, 7, 2, 3, 4, 9, 8, 5, 6, 11, 136>5

Слайд 52Построение АВЛ-дерева
1, 15, 7, 2, 3, 4, 9, 8, 5,

6, 11, 13

Построение АВЛ-дерева1, 15, 7, 2, 3, 4, 9, 8, 5, 6, 11, 13

Слайд 53Построение АВЛ-дерева
Разбалансировка в узле 4
Выполняем RR-поворот.

Построение АВЛ-дереваРазбалансировка в узле 4 Выполняем RR-поворот.

Слайд 54Построение АВЛ-дерева
11>3
1, 15, 7, 2, 3, 4, 9, 8, 5,

6, 11, 13

Построение АВЛ-дерева11>31, 15, 7, 2, 3, 4, 9, 8, 5, 6, 11, 13

Слайд 55Построение АВЛ-дерева
11>7
1, 15, 7, 2, 3, 4, 9, 8, 5,

6, 11, 13

Построение АВЛ-дерева11>71, 15, 7, 2, 3, 4, 9, 8, 5, 6, 11, 13

Слайд 56Построение АВЛ-дерева
11>9
1, 15, 7, 2, 3, 4, 9, 8, 5,

6, 11, 13

Построение АВЛ-дерева11>91, 15, 7, 2, 3, 4, 9, 8, 5, 6, 11, 13

Слайд 57Построение АВЛ-дерева
11

6, 11, 13

Построение АВЛ-дерева11

Слайд 58Построение АВЛ-дерева
11

6, 11, 13

Построение АВЛ-дерева11

Слайд 59Построение АВЛ-дерева
Разбалансировка в узле 3
Выполняем RR-поворот.

Построение АВЛ-дереваРазбалансировка в узле 3 Выполняем RR-поворот.

Слайд 60Построение АВЛ-дерева
1, 15, 7, 2, 3, 4, 9, 8, 5,

6, 11, 13
13>7

Построение АВЛ-дерева1, 15, 7, 2, 3, 4, 9, 8, 5, 6, 11, 1313>7

Слайд 61Построение АВЛ-дерева
1, 15, 7, 2, 3, 4, 9, 8, 5,

6, 11, 13
13>9

Построение АВЛ-дерева1, 15, 7, 2, 3, 4, 9, 8, 5, 6, 11, 1313>9

Слайд 62Построение АВЛ-дерева
1, 15, 7, 2, 3, 4, 9, 8, 5,

6, 11, 13
13

Построение АВЛ-дерева1, 15, 7, 2, 3, 4, 9, 8, 5, 6, 11, 1313

Слайд 63Построение АВЛ-дерева
1, 15, 7, 2, 3, 4, 9, 8, 5,

6, 11, 13
13>11

Построение АВЛ-дерева1, 15, 7, 2, 3, 4, 9, 8, 5, 6, 11, 1313>11

Слайд 64Построение АВЛ-дерева
1, 15, 7, 2, 3, 4, 9, 8, 5,

6, 11, 13

Построение АВЛ-дерева1, 15, 7, 2, 3, 4, 9, 8, 5, 6, 11, 13

Слайд 65Построение АВЛ-дерева
Разбалансировка в узле 15
Выполняем LR-поворот.

Построение АВЛ-дереваРазбалансировка в узле 15 Выполняем LR-поворот.

Слайд 66Построение АВЛ-дерева
1, 15, 7, 2, 3, 4, 9, 8, 5,

6, 11, 13. Построение завершено.

Построение АВЛ-дерева1, 15, 7, 2, 3, 4, 9, 8, 5, 6, 11, 13. Построение завершено.

Слайд 67Алгоритм удаления узла из АВЛ-дерева схож с алгоритмом удаления узла

из обычного бинарного дерева поиска, с единственным отличием: в АВЛ-дереве,

после удаления узла может потребоваться дополнительная балансировка.
Существует 4 основных ситуации, возникающих при удаления узла из АВЛ – дерева, рассмотрим первую из них:
Случай 1: Удаление листа

Удаление узла из АВЛ-дерева

Алгоритм удаления узла из АВЛ-дерева схож с алгоритмом удаления узла из обычного бинарного дерева поиска, с единственным

Слайд 68Удаление узла из АВЛ-дерева (случай 1)
Если узел не имеет потомков, т.е.

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

Удалим узел 6.
Удаление узла из АВЛ-дерева (случай 1)Если узел не имеет потомков, т.е. является листом, то он просто удаляется,

Слайд 69Удаление узла из АВЛ-дерева (случай 2)
Если удаляемый узел имеет только одно

поддерево, то потомственный ему узел, включая все поддерево просто переносится

(перевешивается) на место удаляемого узла. Удалим узел 2.
Удаление узла из АВЛ-дерева (случай 2)Если удаляемый узел имеет только одно поддерево, то потомственный ему узел, включая

Слайд 70Удаление узла из АВЛ-дерева (случай 2)
Удаляем узел 2 и переносим на

его место узел 1.

Удаление узла из АВЛ-дерева (случай 2)Удаляем узел 2 и переносим на его место узел 1.

Слайд 71Удаление узла из АВЛ-дерева (случай 3)
Если удаляемый узел имеет два поддерева,

то в левом поддереве, удаляемого узла, ищется узел с наибольшим

значением (самый правый узел). Если найденный узел является листом, то он просто переносится на место удаляемого узла. Удалим узел 9.
.
Удаление узла из АВЛ-дерева (случай 3)Если удаляемый узел имеет два поддерева, то в левом поддереве, удаляемого узла,

Слайд 72Удаление узла из АВЛ-дерева (случай 3)
Самый правый узел в левом поддереве

узла 9 - это 8. Узел 8 является листом, поэтому

просто переносим узел 8 на место удаляемого узла 9.

Удаление узла из АВЛ-дерева (случай 3)Самый правый узел в левом поддереве узла 9 - это 8. Узел

Слайд 73Удаление узла из АВЛ-дерева (случай 3)
Необходимо устранить разбалансировку в узле 8,

выполнив RR-поворот.

Удаление узла из АВЛ-дерева (случай 3)Необходимо устранить разбалансировку в узле 8, выполнив RR-поворот.

Слайд 74Удаление узла из АВЛ-дерева (случай 4)
Те же условия, что и в

случае 3, только узел с наибольшим значением (самый правый узел)

имеет левое поддерево (правое поддерево он не может иметь, т.к. он является самым правым). Рассмотрим этот случай на примере удаления узла 7.

8

1

Удаление узла из АВЛ-дерева (случай 4)Те же условия, что и в случае 3, только узел с наибольшим

Слайд 75Удаление узла из АВЛ-дерева (случай 4)
1) Переместим найденный узел 5 на

место удаляемого узла 7, как мы это делали в случае

3. 2) Переместим (перевесим) узел 4 (левое поддерево узла 5) на место узла 5, как мы это делали в случае 2.

8

1

1)

2)

Удаление узла из АВЛ-дерева (случай 4)1) Переместим найденный узел 5 на место удаляемого узла 7, как мы

Слайд 76Удаление узла из АВЛ-дерева (случай 4)
Удаление завершено.

8
1

Удаление узла из АВЛ-дерева (случай 4)Удаление завершено.81

Слайд 77Рассмотрели определение и программную структуру АВЛ-дерева;
Научились выполнять построение АВЛ-дерева;
Научились осуществлять

поиск элемента в АВЛ-дереве на примерах операций добавления, удаления элемента;
Научились

выполнять операции добавления, удаления узла из АВЛ-дерева.


Выводы

Рассмотрели определение и программную структуру АВЛ-дерева;Научились выполнять построение АВЛ-дерева;Научились осуществлять поиск элемента в АВЛ-дереве на примерах операций

Слайд 78Спасибо за внимание!

Спасибо за внимание!

Обратная связь

Если не удалось найти и скачать доклад-презентацию, Вы можете заказать его на нашем сайте. Мы постараемся найти нужный Вам материал и отправим по электронной почте. Не стесняйтесь обращаться к нам, если у вас возникли вопросы или пожелания:

Email: Нажмите что бы посмотреть 

Что такое TheSlide.ru?

Это сайт презентации, докладов, проектов в PowerPoint. Здесь удобно  хранить и делиться своими презентациями с другими пользователями.


Для правообладателей

Яндекс.Метрика