Similar presentations:
АиСД_Лекция 3
1.
Алгоритмы и структуры данныхПреподаватель:
Ряскова Елена Борисовна
Кафедра АПУ СПбГЭТУ «ЛЭТИ»
1
2.
Тема 2. Нелинейные структуры данных.2
3.
ДеревоДерево – конечное множество Т, состоящее из одного или более узлов,
таких, что:
имеется один специально обозначенный узел, называемый корнем данного
дерева;
остальные узлы (исключая корень) содержатся в m 0 попарно не
пересекающихся множествах Т1, Т2, ..., Тm, каждое из которых, в свою
очередь, является деревом. Деревья Т1, Т2, ..., Тm называются
поддеревьями данного дерева.
a
b
i
c
j
h
d
e
f
g
k
АиСД
3
4.
Виды вершин дереваКорень
А
B
D
Узлы
E
C
F
H
G
Листья
АиСД
4
5.
Упорядоченное дерево. ЛесЕсли в определении дерева существен порядок перечисления поддеревьев
Т1, Т2, ..., Тm, то дерево называют упорядоченным и говорят о
«первом» (Т1), «втором» (Т2) и т. д. поддеревьях данного корня (старший брат и
т.п.).
В терминологии теории графов это «конечное ориентированное (корневое)
упорядоченное дерево».
Лес – это множество (обычно упорядоченное), состоящее из некоторого (быть
может, равного нулю) числа непересекающихся деревьев.
Тогда, следуя пункту 2 определения дерева: узлы дерева, за исключением
корня, образуют лес.
Дерево T = (корень, лес поддеревьев)
АиСД
5
6.
Представление деревьевГрафическое представление
a
Текстовое представление
(уступчатый список)
a ▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓
b
b ▓▓▓▓▓▓▓▓▓▓▓▓▓▓
i ▓▓▓▓▓▓▓▓▓▓
e f g
h
j
i
j ▓▓▓▓▓▓▓▓▓▓
c ▓▓▓▓▓▓▓▓▓▓▓▓▓▓
k
h ▓▓▓▓▓▓▓▓▓▓
d ▓▓▓▓▓▓▓▓▓▓▓▓▓▓
e ▓▓▓▓▓▓▓▓▓▓
f ▓▓▓▓▓▓▓▓▓▓
Текстовое представление (скобочное)
k ▓▓▓▓▓▓▓
< лес > ::= пусто | < дерево > < лес >,
g ▓▓▓▓▓▓▓▓▓▓
< дерево > ::= ( < корень > < лес > ).
c
d
(a (b (i) (j)) (c (h)) (d (e) (f (k)) (g))).
АиСД
6
7.
Двоичное деревоДвоичное дерево (бинарное дерево) — конечное множество узлов, которое:
либо пусто (пустое дерево),
либо состоит из трех непересекающихся множеств узлов: корневой узел —
корень, двоичное дерево, называемое левым поддеревом и двоичное
дерево, называемое правым поддеревом.
Корень
Пример:
А
Левое поддерево
Правое поддерево
B
D
G
АиСД
C
E
F
H
7
8.
Терминология, используемая в двоичных деревьяхЛюбой узел y на пути от корня к узлу
х — предок х
Если узел y — предок узла х, то узел х —
потомок узла y
родитель
левый
ребенок
D
Если левое поддерево узла х непустое, то его
корень называется левым ребенком узла x
Если правое поддерево узла х непустое, то его
корень называется правым ребенком узла x
Если узел х — ребенок узла y, то узел y —
родитель узла х
B
А
правый
ребенок
E
C
F
G
H
листья
B, A – предки узла D
D, E, G – потомки узла B
Узел, у которого отсутствуют оба ребенка - лист
АиСД
8
9.
Терминология, используемая в двоичных деревьяхглубина = 0
А
B
C
глубина = 1
высота= 3
D
E
G
глубина = 2
F
H
глубина = 3
Глубиной узла называется число ребер на пути от корня к узлу
Высотой узла называется число ребер в самом длинном пути от узла до листа
Высотой дерева называется высота корня
АиСД
9
10.
Полное двоичное деревоДвоичное дерево называется полным, если
все листья имеют одну и ту же глубину
все внутренние узлы имеют по два ребенка
Пример:
А
B
C
D
H
I
АиСД
F
E
J
K
L
G
M
N
O
10
11.
Реализация бинарного дереваСсылочная реализация бинарного дерева в связанной памяти
struct имя_типа {
информационное_поле;
адрес_родителя;
адрес_левого_поддерева;
адрес_правого_поддерева;
}
A
B
D
АиСД
a
C
E
b
F
d
c
e
f
11
12.
Реализация бинарного дереваРеализация бинарного дерева на базе вектора
0
A
1
B
2
C
3
D
4
E
B
D
5
6
A
C
E
F
F
7
…
n
АиСД
12
13.
Обходы бинарных деревьевОбход дерева – это упорядоченная последовательность вершин дерева, в
которой каждая вершина встречается только один раз.
Терминология в различных источниках:
прямой, обратный, концевой;
КЛП, ЛКП, ЛПК;
прямой, симметричный, обратный;
сверху вниз, слева направо, снизу вверх;
префиксный (PreOrder), инфиксный (InOrder), постфиксный (PostOrder).
АиСД
13
14.
Обходы бинарных деревьев1. Прямой обход: корень – обход левого поддерева – обход правого поддерева
(КЛП-обход)
A
B
D
Обход в глубину
C
E
F
A B DE CF
АиСД
14
15.
Обходы бинарных деревьев2. Обратный обход: обход левого поддерева – корень – обход правого
поддерева (ЛКП-обход)
A
B
D
C
E
F
D B E A CF
АиСД
15
16.
Обходы бинарных деревьев3. Концевой обход: обход левого поддерева – обход правого поддерева – корень
(ЛПК-обход)
A
B
D
Обход в ширину
C
E
F
D E B FCA
АиСД
16
17.
Прошитые бинарные деревьяРеализация бинарного дерева на базе вектора
0
A
→
2
1
B
→
4
2
C
→
6
3
D
→
1
4
E
→
0
5
6
АиСД
→
F
→
7
→
…
→
n
→
A
B
D
C
E
F
D B E A CF
17
18.
Тема 4. Алгоритмы сортировки, ихклассификация. Простые варианты
сортировки.
18
19.
Алгоритм сортировки по возрастаниюЗадача сортировки чисел в порядке возрастания:
Вход: последовательность из n чисел <a1, a2,…, an>
Выход: перестановка входной последовательности <a1‘, a2‘,…,
an‘>, такая что a1‘≤ a2‘≤…≤ an‘
Пример экземпляра задачи сортировки:
Вход: <10, 8, 2, 12, 5, 100>
Выход: <2, 5, 8, 10, 12, 100>
АиСД
19
20.
Виды сортировкиАиСД
20
21.
Виды сортировкиОсновные алгоритмы внутренних сортировок
Сортировка выбором
Сортировка обменами («пузырьковая»)
Сортировка вставкой
Поразрядная сортировка
Бинарная пирамидальная сортировка
Сортировка методом Шелла
Быстрая сортировка Хоара
Сортировка слиянием
Внешние сортировки
Сортировка простым слиянием
Сортировка естественным слиянием
АиСД
21
22.
Алгоритм сортировки вставками22
23.
Алгоритм сортировки вставкамиПример:
524613
InsertionSort(A)
1: for j ← 2 to n do
2:
i←j −1
3:
while i>0 and A[i] >A[i+1] do
4:
swap(A[i], A[i+1])
5:
i←i−1
АиСД
23
24.
Алгоритм сортировки вставкамиПример:
524613
InsertionSort(A)
1: for j ← 2 to n do
2:
i←j −1
3:
while i>0 and A[i] >A[i+1] do
4:
swap(A[i], A[i+1])
5:
i←i−1
АиСД
24
25.
Алгоритм сортировки вставкамиПример:
254613
InsertionSort(A)
1: for j ← 2 to n do
2:
i←j −1
3:
while i>0 and A[i] >A[i+1] do
4:
swap(A[i], A[i+1])
5:
temp ← A[i]
6:
A[i] ← A[i+1]
7:
A[i+1] ← temp
8:
АиСД
i←i−1
25
26.
Алгоритм сортировки вставкамиПример:
254613
InsertionSort(A)
1: for j ← 2 to n do
2:
i←j −1
3:
while i>0 and A[i] >A[i+1] do
4:
swap(A[i], A[i+1])
5:
i←i−1
АиСД
26
27.
Алгоритм сортировки вставкамиПример:
254613
InsertionSort(A)
1: for j ← 2 to n do
2:
i←j −1
3:
while i>0 and A[i] >A[i+1] do
4:
swap(A[i], A[i+1])
5:
i←i−1
АиСД
27
28.
Алгоритм сортировки вставкамиПример:
245613
InsertionSort(A)
1: for j ← 2 to n do
2:
i←j −1
3:
while i>0 and A[i] >A[i+1] do
4:
swap(A[i], A[i+1])
5:
i←i−1
АиСД
28
29.
Алгоритм сортировки вставкамиПример:
245613
InsertionSort(A)
1: for j ← 2 to n do
2:
i←j −1
3:
while i>0 and A[i] >A[i+1] do
4:
swap(A[i], A[i+1])
5:
i←i−1
АиСД
29
30.
Алгоритм сортировки вставкамиПример:
245613
InsertionSort(A)
1: for j ← 2 to n do
2:
i←j −1
3:
while i>0 and A[i] >A[i+1] do
4:
swap(A[i], A[i+1])
5:
i←i−1
АиСД
30
31.
Алгоритм сортировки вставкамиПример:
245613
InsertionSort(A)
1: for j ← 2 to n do
2:
i←j −1
3:
while i>0 and A[i] >A[i+1] do
4:
swap(A[i], A[i+1])
5:
i←i−1
АиСД
31
32.
Алгоритм сортировки вставкамиПример:
245613
InsertionSort(A)
1: for j ← 2 to n do
2:
i←j −1
3:
while i>0 and A[i] >A[i+1] do
4:
swap(A[i], A[i+1])
5:
i←i−1
АиСД
32
33.
Алгоритм сортировки вставкамиПример:
124563
InsertionSort(A)
1: for j ← 2 to n do
2:
i←j −1
3:
while i>0 and A[i] >A[i+1] do
4:
swap(A[i], A[i+1])
5:
i←i−1
АиСД
33
34.
Алгоритм сортировки вставкамиПример:
123456
InsertionSort(A)
1: for j ← 2 to n do
2:
i←j −1
3:
while i>0 and A[i] >A[i+1] do
4:
swap(A[i], A[i+1])
5:
i←i−1
АиСД
34
35.
Оценка времени работы сортировки вставкамиОценим время однократного выполнения каждой строки псевдокода
алгоритма сортировки вставками
Время
InsertionSort(A)
1: for j ← 2 to n do
2:
i←j −1
3:
while i>0 and A[i] >A[i+1] do
4:
swap(A[i], A[i+1])
5:
i←i−1
АиСД
с1
35
36.
Оценка времени работы сортировки вставкамиОценим время однократного выполнения каждой строки псевдокода
алгоритма сортировки вставками
Время
InsertionSort(A)
1: for j ← 2 to n do
с1
2:
i←j −1
с2
3:
while i>0 and A[i] >A[i+1] do
4:
swap(A[i], A[i+1])
5:
i←i−1
АиСД
36
37.
Оценка времени работы сортировки вставкамиОценим время однократного выполнения каждой строки псевдокода
алгоритма сортировки вставками
Время
InsertionSort(A)
1: for j ← 2 to n do
с1
2:
i←j −1
с2
3:
while i>0 and A[i] >A[i+1] do
с3
4:
swap(A[i], A[i+1])
5:
i←i−1
АиСД
37
38.
Оценка времени работы сортировки вставкамиОценим время однократного выполнения каждой строки псевдокода
алгоритма сортировки вставками
Время
InsertionSort(A)
1: for j ← 2 to n do
с1
2:
i←j −1
с2
3:
while i>0 and A[i] >A[i+1] do
с3
4:
swap(A[i], A[i+1])
5:
i←i−1
АиСД
с4
38
39.
Оценка времени работы сортировки вставкамиОценим время однократного выполнения каждой строки псевдокода
алгоритма сортировки вставками
Время
InsertionSort(A)
1: for j ← 2 to n do
с1
2:
i←j −1
с2
3:
while i>0 and A[i] >A[i+1] do
с3
4:
swap(A[i], A[i+1])
с4
5:
i←i−1
с5
АиСД
39
40.
Оценка времени работы сортировки вставкамиОценим общее число выполнений каждой строки
Время
Число раз
1: for j ← 2 to n do
с1
n
2:
i←j −1
с2
3:
while i>0 and A[i] >A[i+1] do
с3
InsertionSort(A)
4:
swap(A[i], A[i+1])
с4
5:
i←i−1
с5
АиСД
40
41.
Оценка времени работы сортировки вставкамиОценим общее число выполнений каждой строки
Время
Число раз
1: for j ← 2 to n do
с1
n
2:
i←j −1
с2
n−1
3:
while i>0 and A[i] >A[i+1] do
с3
InsertionSort(A)
4:
swap(A[i], A[i+1])
с4
5:
i←i−1
с5
АиСД
41
42.
Оценка времени работы сортировки вставкамиОценим общее число выполнений каждой строки
tj − число проверок условия while j-ой итерации цикла for
Время
Число раз
1: for j ← 2 to n do
с1
n
2:
i←j −1
с2
n−1
3:
while i>0 and A[i] >A[i+1] do
с3
σ
programming