Оцените презентацию от 1 до 5 баллов!
Тип файла:
ppt / pptx (powerpoint)
Всего слайдов:
37 слайдов
Для класса:
1,2,3,4,5,6,7,8,9,10,11
Размер файла:
333.50 kB
Просмотров:
48
Скачиваний:
2
Автор:
неизвестен
Слайды и текст к этой презентации:
№1 слайд![Занятие . .](/documents_6/7cd759d615c965c1ee162c5e4f05f5c7/img0.jpg)
Содержание слайда: Занятие 16.12.17
№2 слайд![Основные пункты](/documents_6/7cd759d615c965c1ee162c5e4f05f5c7/img1.jpg)
Содержание слайда: Основные пункты
Вычислительная сложность
Базовые структуры данных и их использование в С++
№3 слайд![Вычислительная сложность](/documents_6/7cd759d615c965c1ee162c5e4f05f5c7/img2.jpg)
Содержание слайда: Вычислительная сложность
Нужно как-то сравнивать ресурсы, которые будут потрачены тем или иным алгоритмом
Они включают:
Время процессора
Занимаемая память
№4 слайд![Вычислительная сложность](/documents_6/7cd759d615c965c1ee162c5e4f05f5c7/img3.jpg)
Содержание слайда: Вычислительная сложность
Вариант #1 – точный подсчет, например, отдельных команд процессора
Проблемы:
Команды занимают разное время
У разных процессоров разные наборы команд
Громоздкость выражений и сложность подсчета
№5 слайд![Вычислительная сложность Как](/documents_6/7cd759d615c965c1ee162c5e4f05f5c7/img4.jpg)
Содержание слайда: Вычислительная сложность
Как правило, достаточно сравнивать поведение алгоритмов в целом
Вариант #2 – сравнивать общий вид зависимости использованного времени/памяти от входных данных
№6 слайд![О большое](/documents_6/7cd759d615c965c1ee162c5e4f05f5c7/img5.jpg)
Содержание слайда: «О» большое
№7 слайд![О большое Объяснение на](/documents_6/7cd759d615c965c1ee162c5e4f05f5c7/img6.jpg)
Содержание слайда: «О» большое
Объяснение на примерах:
мы говорим, что алгоритм имеет сложность O(n) операций, если с ростом размера входных данных затрачиваемое время/ресурсы растут линейно
№8 слайд![О большое O n n , операций n](/documents_6/7cd759d615c965c1ee162c5e4f05f5c7/img7.jpg)
Содержание слайда: «О» большое
O(n):
n = 10, операций 10
n = 20, операций 20
Но так же под О(n) подходит:
n = 1, операций 103
n = 2, операций 206
n = 1000, операций 112 910
главное – что в целом растет линейно
№9 слайд![О большое Мы говорим, что](/documents_6/7cd759d615c965c1ee162c5e4f05f5c7/img8.jpg)
Содержание слайда: «О» большое
Мы говорим, что алгоритм имеет сложность O(n^2) операций, если с ростом размера входных данных затрачиваемое время/ресурсы растут квадратично.
n = 10, операций около 100
n = 20, операций около 400
№10 слайд![О большое Часто можно увидеть](/documents_6/7cd759d615c965c1ee162c5e4f05f5c7/img9.jpg)
Содержание слайда: «О» большое
Часто можно увидеть:
O(1)
O(log n)
O(sqrt n)
O(n)
O(n * log n)
O(n ^ 2)
O(2 ^ n)
№11 слайд![О большое Что такое n?](/documents_6/7cd759d615c965c1ee162c5e4f05f5c7/img10.jpg)
Содержание слайда: «О» большое
Что такое n? Примеры:
Определение простоты числа n: n – само число
Сортировка массива: n – размер массива
Работа со строкой: n – размер строки
№12 слайд![Базовые структуры данных](/documents_6/7cd759d615c965c1ee162c5e4f05f5c7/img11.jpg)
Содержание слайда: Базовые структуры данных
Массив
Вектор
Множество
Стек
Очередь
Словарь
№13 слайд![Массив Последовательность](/documents_6/7cd759d615c965c1ee162c5e4f05f5c7/img12.jpg)
Содержание слайда: Массив
Последовательность элементов фиксированного размера.
Операции:
Получить элемент по индексу: О(1) времени
Записать элемент по индексу: O(1) времени
№14 слайд![Массив в С int arr arr](/documents_6/7cd759d615c965c1ee162c5e4f05f5c7/img13.jpg)
Содержание слайда: Массив в С++
int arr[100];
arr[0] = 123; // записали элемент
cout << arr[0]; // получили элемент
----------------------------------------------------------------
int *arr = new int[100];
arr[0] = 123;
delete[] arr;
№15 слайд![STL STL Standard Template](/documents_6/7cd759d615c965c1ee162c5e4f05f5c7/img14.jpg)
Содержание слайда: STL
STL (Standard Template Library) – набор алгоритмов, контейнеров и вспомогательных функций в языке С++.
Контейнеры – объекты для хранения данных. В виде них в C++ уже реализованы все базовые стуктуры.
Далее – общий обзор основных из этих стуктур.
№16 слайд![Вектор Массив имеет](/documents_6/7cd759d615c965c1ee162c5e4f05f5c7/img15.jpg)
Содержание слайда: Вектор
Массив имеет фиксированный размер, что не всегда удобно в практических ситуациях.
Операции:
Получить элемент по индексу: О(1) времени
Записать элемент по индексу: O(1)
Получить текущий размер вектора: O(1)
Добавить элемент в конец вектора: О(1)*
№17 слайд![Вектор в С include lt vector](/documents_6/7cd759d615c965c1ee162c5e4f05f5c7/img16.jpg)
Содержание слайда: Вектор в С++
#include <vector>
vector<int> tmp;
tmp.push_back(1);
tmp.push_back(2);
tmp.push_back(3);
cout << tmp [0] << tmp[1] << tmp[2]; // 1 2 3
№18 слайд![Вектор в С vector lt int gt](/documents_6/7cd759d615c965c1ee162c5e4f05f5c7/img17.jpg)
Содержание слайда: Вектор в С++
vector<int> numbers;
cin >> n;
for (int i = 0; i < n; i++)
{
int tmp;
cin >> tmp;
numbers.push_back(tmp);
}
№19 слайд![Вектор в С vector lt int gt](/documents_6/7cd759d615c965c1ee162c5e4f05f5c7/img18.jpg)
Содержание слайда: Вектор в С++
vector<int> numbers;
// …
for (int i = 0; i < number.size(); i++)
{
cout << numbers[i] << endl;
}
№20 слайд![Множество Структура данных, в](/documents_6/7cd759d615c965c1ee162c5e4f05f5c7/img19.jpg)
Содержание слайда: Множество
Структура данных, в которой каждый элемент хранится в единственном числе.
Операции:
Добавить элемент в множество
Удалить элемент из множества
Проверить наличие элемента во множестве
Получить размер множества
№21 слайд![Множество в С В С существует](/documents_6/7cd759d615c965c1ee162c5e4f05f5c7/img20.jpg)
Содержание слайда: Множество в С++
В С++ существует две реализации множества – set и unordered_set. Пока остановимся только на первой.
Занимаемая память – O(n log n)
Добавление элемента – O(log n)
Удаление элемента – О(log n)
Проверка элемента – O(log n)
№22 слайд![Множество в С include lt set](/documents_6/7cd759d615c965c1ee162c5e4f05f5c7/img21.jpg)
Содержание слайда: Множество в С++
#include <set>
set<int> my_set;
my_set.insert(3);
my_set.insert(4);
my_set.insert(3);
cout << my_set.size(); // 2
№23 слайд![Множество в С set lt int gt](/documents_6/7cd759d615c965c1ee162c5e4f05f5c7/img22.jpg)
Содержание слайда: Множество в С++
set<int> my_set;
my_set.insert(1);
my_set.insert(2);
my_set.erase(1);
my_set.erase(2);
cout << my_set.size(); // 0
№24 слайд![Множество в С set lt int gt](/documents_6/7cd759d615c965c1ee162c5e4f05f5c7/img23.jpg)
Содержание слайда: Множество в С++
set<int> my_set;
// Определим, есть ли там элемент 2
if (my_set.find(2) != my_set.end())
{
cout << "Element 2 exists!";
}
№25 слайд![Множество в С set lt int gt](/documents_6/7cd759d615c965c1ee162c5e4f05f5c7/img24.jpg)
Содержание слайда: Множество в С++
set<int> my_set;
// Вывести все элементы множества
for (auto it = my_set.begin();
it != my_set.end();
it++)
{
cout << *it << endl;
}
№26 слайд![Стек Структура данных LIFO](/documents_6/7cd759d615c965c1ee162c5e4f05f5c7/img25.jpg)
Содержание слайда: Стек
Структура данных «LIFO» (Last-In First-Out).
Операции:
Добавить элемент на вершину стека: O(1)
Получить элемент с вершины стека: O(1)
Удалить элемент с вершины стека: O(1)
Определить, не пустой ли стек: O(1)
№27 слайд![Стек Названия операций](/documents_6/7cd759d615c965c1ee162c5e4f05f5c7/img26.jpg)
Содержание слайда: Стек
Названия операций:
Добавить элемент: push
Получить элемент на вершине: top
Удалить элемент с вершины: pop
Проверить на пустоту: empty
№28 слайд![Стек в С stack lt int gt s](/documents_6/7cd759d615c965c1ee162c5e4f05f5c7/img27.jpg)
Содержание слайда: Стек в С++
stack<int> s;
s.push(1);
s.push(2);
s.push(3);
while (!s.empty())
{
cout << s.top() << " "; // 3 2 1
s.pop();
}
№29 слайд![Очередь Структура данных FIFO](/documents_6/7cd759d615c965c1ee162c5e4f05f5c7/img28.jpg)
Содержание слайда: Очередь
Структура данных «FIFO» (First-In First-Out).
Операции:
Добавить элемент в конец очереди: O(1)
Получить элемент с начала очереди: O(1)
Удалить элемент с начала очереди: O(1)
Определить, не пуста ли очередь: O(1)
№30 слайд![Очередь Названия операций](/documents_6/7cd759d615c965c1ee162c5e4f05f5c7/img29.jpg)
Содержание слайда: Очередь
Названия операций:
Добавить элемент в конец: push
Получить элемент в начале: front
Удалить элемент в начале: pop
Проверить на пустоту: empty
№31 слайд![Стек Очередь](/documents_6/7cd759d615c965c1ee162c5e4f05f5c7/img30.jpg)
Содержание слайда: Стек | Очередь
№32 слайд![Очередь в С queue lt int gt q](/documents_6/7cd759d615c965c1ee162c5e4f05f5c7/img31.jpg)
Содержание слайда: Очередь в С++
queue<int> q;
q.push(1);
q.push(2);
q.push(3);
while (!q.empty())
{
cout << q.front() << " "; // 1 2 3
q.pop();
}
№33 слайд![Словарь Структура данных, в](/documents_6/7cd759d615c965c1ee162c5e4f05f5c7/img32.jpg)
Содержание слайда: Словарь
Структура данных, в которой можно сохранять и получать значения по произвольным ключам
Операции:
Записать значение по ключу
Получить значение по ключу
Проверить наличие ключа в словаре
Получить размер словаря
№34 слайд![Словарь в С map Занимаемая](/documents_6/7cd759d615c965c1ee162c5e4f05f5c7/img33.jpg)
Содержание слайда: Словарь в С++ (map)
Занимаемая память: O(n log n)
Сложность операций:
Получить значение по ключу: O(log n)
Записать значение по ключу: O(log n)
Проверить наличие ключа: O(log n)
Получить размер словаря: O(1)
№35 слайд![Словарь в С map include lt](/documents_6/7cd759d615c965c1ee162c5e4f05f5c7/img34.jpg)
Содержание слайда: Словарь в С++ (map)
#include <map>
map<char, int> my_map;
my_map['A'] = 5;
my_map['B'] = 6;
cout << "A is " << my_map['A'];
№36 слайд![Словарь в С map include lt](/documents_6/7cd759d615c965c1ee162c5e4f05f5c7/img35.jpg)
Содержание слайда: Словарь в С++ (map)
#include <map>
map<char, int> my_map;
my_map['A'] = 5;
if (my_map.find('A') != my_map.end())
{
cout << "Key 'A' exists!";
}
№37 слайд![Итого Вектор vector Множество](/documents_6/7cd759d615c965c1ee162c5e4f05f5c7/img36.jpg)
Содержание слайда: Итого
Вектор (vector)
Множество (set)
Стек (stack)
Очередь (queue)
Словарь (map)