[TN100] Algorithms & Computer Science.pptx
- Количество слайдов: 39
Algorithms & Computer Science. Algorithm complexity. Basic data structures www. epam. com EPAM Systems
Базовые представления о сложности алгоритмов • Задача комивояжера (определение кратчайшего маршрута движения) – Полный перебор (N!) – Алгоритм ближайшего соседа 0 -2 www. epam. com 0 1 5 EPAM Systems
Сложность сортировок • Оптимизированный пузырек • Основная программа • Data. txt 1 1 1 2 2 www. epam. com EPAM Systems
Выводы • Оптимизация сложных алгоритмов имеет смысл только на реальных данных. • Надо понимать область применения алгоритмов и отсекать заведомо нерациональные решения www. epam. com «Преждевременная оптимизация — это корень всех бед» Д. Кнут EPAM Systems
Практические примеры • Необходимо организовать поиск по коллекции. Какую коллекцию лучше использоваться? 1. В коллекции 1000000 элементов. Однозначно хеш-таблица. 2. В коллекции всего 5 элементов. Самый лучший вариант – прямой перебор по массиву. www. epam. com EPAM Systems
Практические примеры • Вы увидели сложение строк в цикле. Надо ли «отрывать руки» автору? 1. При большом числе итераций – однозначно надо: нарастание фактических затрат памяти пропорционально квадрату числа элементов. 2. Примерно до 7 итераций вполне допустимо – «простое» сложение строк будет не хуже более сложного String. Builder. Но руки лучше оторвать для профилактики . www. epam. com EPAM Systems
Ключевая идея Надо хорошо знать то, чем и как можно пользоваться и не изобретать велосипед без необходимости www. epam. com 7 EPAM Systems
Алгоритмическая сложность • 6 5 4 3 2 1 1 www. epam. com 2 3 4 5 6 7 8 9 10 EPAM Systems
Алгоритмическая сложность • www. epam. com EPAM Systems
Примерные оценки времени выполнения алгоритмов • Время выполнения операции 10 нс. Операций Log(N) N N*log(N) N^2 2^N N! 10 Сразу Сразу 100 Сразу Сразу Никогда 10000 Сразу Доли секунды Сразу Секунды Никогда 100000 Сразу Минуты Никогда 1000000 Сразу Доли секунды Часы Никогда 10000000 Сразу 10 Суток Никогда www. epam. com Доли Секунды секунды EPAM Systems
Типичные объемы данных • Библиотека офиса: 200 записей. • Актуальных записей в UPSA: 10000. • Файлов на диске С: 135000. • Объем данных на диске C: 40 Gb • Суточный объем информации, который анализировался на проекте Reuters: 200 Gb. www. epam. com EPAM Systems
Виды данных • Случайные • Реальные • Тестовые • Ошибочные www. epam. com EPAM Systems
Структуры данных www. epam. com EPAM Systems
Массив • www. epam. com link EPAM Systems
Массив • Минусы: – Добавление в массив элемента ведет к пересозданию массива. При добавлении N элементов расходуется до O(N^2) памяти. – Вставка/удаление элемента требует сдвига хвоста массива (пропорционально O(N)) www. epam. com EPAM Systems
Массив с запасом (Array. List, List) • Идея: – Давайте выделять больше памяти. Тогда гарантированно не понадобятся частые пересоздания, хотя часть элементов не будет реально использоваться. • Реализация: – Память выделяется по степеням двойки 4, 8, 16, 32, … www. epam. com EPAM Systems
Массив с запасом (Array. List, List) • www. epam. com EPAM Systems
Массив с запасом (Array. List, List) • Минусы: – Относительно небольшой дополнительный объем памяти (ближайшая степень 2, не меньшая, чем N) – Вставка/удаление элемента требует сдвига хвоста массива (пропорционально O(N)) www. epam. com EPAM Systems
Массив с запасом (Array. List, List) • Полезные советы: – Используйте List вместо массивов. – Задавайте Capacity при инициализации, если заранее известен объем. www. epam. com EPAM Systems
Список • Идея: – Давайте откажемся от строго последовательного размещения элементов – это позволит добавлять и удалять элементы как угодно. • Реализация: – Есть ссылка на первый элемент – Каждый элемент ссылается на следующий за ним – Последний элемент ссылается на null www. epam. com EPAM Systems
Список • Плюсы: – Добавление элементов после текущего происходит за константное время. – Можно делать добавление перед текущим и удаление текущего элемента за константное время www. epam. com EPAM Systems
Список • Минусы: – На каждый элемент тратится дополнительно 4 байта памяти (размер ссылки) – Не известно положение элементов в памяти – необходим полный перебор – Невозможно движение в обратном направлении (вставка перед текущим, удаление текущего и т. д. ) www. epam. com EPAM Systems
Список • Полезные советы: – В. NET не реализован. Лучше использовать Linked. List – двунаправленный список. www. epam. com EPAM Systems
Двунаправленный список (Linked. List) • Идея – Для вставки и ряда других операций давайте добавим движение в обоих направлениях. www. epam. com EPAM Systems
Двунаправленный список (Linked. List) • Плюсы: – Добавление/удаление элементов происходит за константное время www. epam. com EPAM Systems
Двунаправленный список (Linked. List) • Минусы: – На каждый элемент тратится дополнительно 8 байт памяти (2 * размер ссылки) – Не известно положение элементов в памяти – необходим полный перебор www. epam. com EPAM Systems
Двунаправленный список (Linked. List) • Полезные советы: – При активном изменении набора данных может быть крайне полезен www. epam. com EPAM Systems
Хеш-таблица (Dictionary, Hash. Table) • Идея: – Давайте для ускорения поиска будем вычислять положение элемента в памяти по его значению www. epam. com EPAM Systems
Определение Хеширование (иногда хэширование, англ. hashing) — преобразование входного набора данных произвольной длины в выходное значение фиксированной длины. Такие преобразования также называются хешфункциями или функциями свёртки, а их результаты называют хешем, хеш-кодом или дайджестом сообщения (англ. message digest). www. epam. com EPAM Systems
Использование хеширования • Проверка целостности данных (контрольные суммы) • Проверка паролей • Быстрый поиск данных по ключу – Базы данных – Ассоциативные массивы www. epam. com EPAM Systems
Контрольные суммы ? ? ? 12845 Источник Приемник Среда передачи www. epam. com EPAM Systems
Контрольные суммы 12345 12845 Источник ? Приемник • Сбойный сектор на диске • Магнитная буря • Скачок напряжения Среда передачи www. epam. com EPAM Systems
Контрольные суммы 22 ≠ 15 12345 1+2+3+4+5 = 15 Источник ! 12845 контрольная сумма 1512345 1+2+8+4+5 = 22 Приемник значение Среда передачи www. epam. com EPAM Systems
Проверка паролей пароль www. epam. com EPAM Systems
Проверка паролей пароль Хеш-код www. epam. com Y = F(X) Хеш-код ? EPAM Systems
Хеш-таблица (Dictionary, Hash. Table) • Идея: – Давайте для ускорения поиска будем вычислять положение элемента в памяти по его значению www. epam. com EPAM Systems
Демонстрация www. epam. com EPAM Systems
Хеш-таблица (Dictionary, Hash. Table) • Полезные советы: – Часто используется для хранения пар ключ-значение. – Хеш-функция вычисляется долго – иногда (до 10 элементов) быстрее перебрать массив объектов. – Хеш-таблицы используют Get. Hash. Code и Equals – перегружайте их «с умом» . – Сессии, кэши и ряд других объектов строятся на базе Dictionary www. epam. com EPAM Systems
Спасибо за внимание! Контактная информация: Александр Кузнецов Инструктор EPAM Systems, Inc. Адрес: Саратов, Рахова, 181 Email: Alexander_Kuznetsov 1@epam. com http: //www. epam. com EPAM Systems 39
[TN100] Algorithms & Computer Science.pptx