SlideShare a Scribd company logo
1 of 50
Download to read offline
Algorithms and data
structures
Yaroslav Vorontsov
Senior Software engineer/Tech lead
M.Sc., PhD
yvorontsov@dataart.com
Agenda
´ Немного нудных определений
´ Переход дороги с некоторыми нюансами
´ Разные греческие буквы – омега, тета
´ Ещё нудные определения
´ Базовые структуры данных и их сложность
´ Базовые алгоритмы и их сложность
´ Немного веселья
2
Нудные определения
´ Алгоритм – набор инструкций,
описывающих порядок действий
исполнителя для достижения
результата решения задачи за
конечное число действий
´ Вычислительные процессы
алгоритмического характера
известны человечеству с
глубокой древности
´ Явное определение – начало 20
века
3
Попытки формализации понятия
алгоритма
´ А. Чёрч – лямбда-исчисление, тезис Чёрча
´ A. Тьюринг – машина Тьюринга
´ А. Марков – нормальный алгорифм (алгоритм)
´ Машина Поста (автоматное программирование)
´ Рекурсивная функция
´ Brainfuck
++++++++++[>+++++++>++++++++++>+++>+<<<<-]>++
.>+.+++++++..+++.>++.<<+++++++++++++++.>.+++. ------.--------.>+.>.
Hello World
4
Один из наиболее старых
алгоритмов
5
Кто считается первым
программистом?
6
Вместо дальнейшего введения
´ Как перейти дорогу?
´ Посмотрите налево
´ Посмотрите направо
´ Переходите
7
Но…
«Есть нюансы» (с)
В.И. Чапаев в известном анекдоте
8
Суслики – самые осторожные животные…
Они становятся на задние лапки
и смотрят вдаль: не бежит ли лиса? Не летит ли орел? Не ползет ли змея?
И самые наблюдательные из них получают бампером в лоб…
9
Нюанс 110
Он же11
Нюанс 212
Извините, вот правильный нюанс 213
Нюанс 314
Нюанс 4
´ «Эй, гражданина, ты туда не
ходи, ты сюда ходи. А то снег
башка попадёт, совсем
мёртвый будешь!»
´ Серьёзно, как вы вообще здесь
оказались?
15
Нюансы 5 и 616
А ещё…
´ Вы идёте с коляской/тележкой?
´ Находятся ли транспортные
средства на безопасном
расстоянии?
´ Правило «3Д», оно же «ДДД»
(особенно касается
воронежских дорог)
´ Посмотрели ли вы наверх?
(вдруг инопланетяне?)
´ А вдруг крокодилы?
17
К чему всё это было?
´ У алгоритмов есть формальные свойства
´ Дискретность
´ Детерминированность
´ Понятность
´ Конечность
´ Массовость/Универсальность
´ Результативность
´ Алгоритм не содержит ошибок, если он даёт правильные результаты
для любых допустимых исходных данных
18
Минутка К.О.
´ Среднестатистический случай
работы алгоритма никому не
интересен!
´ При анализе алгоритмов, в
первую очередь обращают
внимание на пограничные или
предельные ситуации
´ Анализ алгоритмов при малом
размере входных данных также
не представляет интереса!
19
Альфа, бета, эта, тета…20
Альфа, бета, эта, тета…21
Часто встречающиеся оценки22
Часто встречающиеся оценки23
Хорошо, а где же структуры
данных?
Название-то A&DS…
24
Снова нудная теория
´ Структура данных – программная единица, позволяющая хранить и
обрабатывать множество однотипных и/или логически связанных
данных в вычислительной технике. Для добавления, поиска, изменения и
удаления данных структура данных предоставляет некоторый набор
функций, составляющих её интерфейс
´ В большинстве современных языков программирования
«строительными блоками» для сложных структур данных являются
´ Массивы (array)
´ Записи (struct/record)
´ Объединения (union)
´ Ссылки (reference/pointer)
25
Какие бывают структуры данных?
´ Список (List)
´ Ассоциативный массив (Map)
´ Хэш-таблица (Hash table)
´ Дек (Deque)
´ Граф (Graph)
´ Дерево (Tree)
´ Пирамида/Куча (Heap)
´ Таблица (Table)
´ Система непересекающихся множеств (Union-Find)
26
Основные структуры данных27
Основные структуры данных28
Основные структуры данных29
А вот и основные алгоритмы30
А вот и основные алгоритмы31
Алгоритм умножения: русский
крестьянский метод
´ Не требует знания таблицы
умножения
´ Надо уметь умножать и делить
на 2
´ Умножение и деление на 2 –
сдвиг на 1 разряд налево-
направо
´ Аппаратная или низкоуровневая
реализация
32
Рандом не такой уж и рандом
´ rand()
´ srand()
´ arc4random()
´ arc4random_uniform()
´ …
´ X[N+1] = (A*X[N]+C) mod M
33
Divide et impera
´ Метод «разделяй и властвуй»
заключается в рекурсивном
разбиении задачи на две или
более подзадачи того же типа,
но меньшего размера, и
комбинации их решений для
получения ответа к исходной
задаче
´ Разбиения выполняются до тех
пор, пока все подзадачи не
окажутся элементарными
34
Алгоритм Штрассена для матриц
´ Эффективен при размере
матриц от 32 до 128
´ Работает за субкубическое
время
´ Оптимизируется для малых
матриц за счёт обычного
«кубического» перемножения
´ Необходимо, чтобы размер
матриц был степенью двойки.
Если это не так – матрица
дополняется нулями
35
Quicksort
´ Выбор опорного элемента
´ Разделение массива
´ Шаг рекурсии – запуск
вышеописанных действий для
подмассивов
´ Устойчивость метода
´ Хороший случай
´ Плохой случай
´ Оптимизации
36
Жадные алгоритмы
´ Жадный алгоритм принимает
локально оптимальные
решения на каждом этапе
выполнения, допуская, что и
конечное решение окажется
оптимальным
´ Наиболее известные алгоритмы
´ Алгоритм Хаффмана
´ Алгоритм Прима-Ярника
´ Алгоритм Краскала
´ Алгоритм Дейкстры
37
Алгоритм Дейкстры38
Дейкстра и Интернет (OSPF)
´ LSA – Link State Advertisement
´ При использовании протокола
OSPF маршрутизаторы
обмениваются информацией о
топологии сети.
´ Потом, на основании этой
информации с помощью
алгоритма
Дейкстры рассчитывают
таблицу маршрутизации
39
Вероятностные алгоритмы
´ Подразумевают обращение к ГСЧ на определённом этапе своей
работы
´ Позволяют пожертвовать абсолютной достоверностью ради
ускорения/экономии во времени
´ Таких алгоритмов не так-то и мало:
´ Фильтр Блума
´ Поиск минимальногоразреза в графе
´ Лас-Вегас (выполнить А с результатом r до тех пор, пока K(r) не истина)
´ Вероятностная раскраска графа
´ С натяжкой – марковские цепи, метод Монте-Карло, алгоритмы сжатия
40
Фильтр Блума41
Нет, не этого Блума
´ Можно получить ложноположительное срабатывание, но никогда –
ложноотрицательное
´ Основан на битовом массиве и хэш-функции
42
Алгоритм Каргера
´ Минимальный разрез графа –
разбиение множества вершин
на две непустые части, при
котором рассекается
минимальное число рёбер
´ Repeat until just two nodes
remain:
´ – Pick an edge of G at random
and collapse its two endpoints
into a single node
´ For the two remaining nodes u1
and u2, set V1 = {nodes that went
into u1} and V2 = {nodes in u2}
´ Вероятность: 2/(n*(n-1))
43
Как выйти из лабиринта?
´ Одним из самых простых
правил для прохождения
лабиринта является правило
"одной руки": двигаясь по
лабиринту, надо все время
касаться правой или левой
рукой его стены.
´ Этот алгоритм, вероятно, был
известен еще древним грекам.
Придется пройти долгий путь,
заходя во все тупики, но в итоге
цель будет достигнута
44
FAIL
´ Алгоритм «правой руки» не работает
для т.н. многосвязных лабиринтов
´ Односвязными называются
лабиринты, не содержащие
замкнутых маршрутов и не
имеющие отдельно стоящих стенок.
´ Лабиринты с отдельно стоящими
стенками и с замкнутыми
маршрутами называются
многосвязными
45
Тесей-продуман46
Алгоритм Люка-Тремо
´ 1882 – Э. Люка, указал на первенство Тремо
´ Выйдя из любой точки лабиринта, надо сделать отметку на его стене
(крест) и двигаться в произвольном направлении до тупика или
перекрестка
´ В первом случае вернуться назад, поставить второй крест,
свидетельствующий, что путь пройден дважды - туда и назад, и идти в
направлении, не пройденном ни разу, или пройденном один раз;
´ Во втором - идти по произвольному направлению, отмечая каждый
перекресток на входе и на выходе одним крестом
´ Если на перекресте один крест уже имеется, то следует идти новым
путем, если нет - то пройденным путем, отметив его вторым крестом.
47
Что дальше?
´ Классика Computer Science
´ Т. Кормен, Ч. Лейзерсон, Р. Ривест, К. Штайн «Алгоритмы: построение и
анализ»
´ Р. Седжвик, К. Уэйн «Алгоритмы на Java»
´ Д. Кнут «Искусство программирования»
´ Веб-ресурсы
´ http://algolist.ru
´ http://e-maxx.ru
´ http://habr.ru
´ http://rsdn.ru
48
Что дальше?
´ Онлайн-курсы (на английском)
´ Coursera: Algorithms: Design and Analysis, part 1 & 2 by Tim Roughgarden
´ Coursera: Algorithms, part 1 & 2 by Kevin Wayne and Robert Sedgewick
´ Stanford: CS103 – Mathematical foundations of computing
´ Stanford: CS161 – Design and Analysis of Algorithms
´ Онлайн-курсы (на русском)
´ Lektorium.tv
´ ШАД
49
Thnx!
Yaroslav Vorontsov
Senior Software engineer/Tech lead
M.Sc., PhD
yvorontsov@dataart.com

More Related Content

Viewers also liked

Jkd indoor & outdoor signage catalog
Jkd indoor & outdoor signage catalogJkd indoor & outdoor signage catalog
Jkd indoor & outdoor signage catalogSatyendra Gupta
 
Макс Волошин «Микросервисы на практике»
Макс Волошин «Микросервисы на практике»Макс Волошин «Микросервисы на практике»
Макс Волошин «Микросервисы на практике»DataArt
 
Zed innovation intro
Zed innovation introZed innovation intro
Zed innovation introZiv Kohav
 
«Экстремальный менеджмент», Лидия Котлярова, Plarium
«Экстремальный менеджмент», Лидия Котлярова, Plarium«Экстремальный менеджмент», Лидия Котлярова, Plarium
«Экстремальный менеджмент», Лидия Котлярова, PlariumDataArt
 
«Azure Mobile Apps: и снова о мобильных сервисах», Анастасия Белокурова (.NE...
 «Azure Mobile Apps: и снова о мобильных сервисах», Анастасия Белокурова (.NE... «Azure Mobile Apps: и снова о мобильных сервисах», Анастасия Белокурова (.NE...
«Azure Mobile Apps: и снова о мобильных сервисах», Анастасия Белокурова (.NE...DataArt
 
Benefits for Millennials
Benefits for MillennialsBenefits for Millennials
Benefits for MillennialsUrbanBound
 
Леонид Шевцов «Clojure в деле»
Леонид Шевцов «Clojure в деле»Леонид Шевцов «Clojure в деле»
Леонид Шевцов «Clojure в деле»DataArt
 
«Чем занимается Google Life Sciences, и почему биотехнологии ожидает прорыв» ...
«Чем занимается Google Life Sciences, и почему биотехнологии ожидает прорыв» ...«Чем занимается Google Life Sciences, и почему биотехнологии ожидает прорыв» ...
«Чем занимается Google Life Sciences, и почему биотехнологии ожидает прорыв» ...DataArt
 
180 blue dining room training
180 blue dining room training180 blue dining room training
180 blue dining room trainingBill Buffalo
 
«”Продажа” технических идей: как сделать возможным внедрение новых технологий...
«”Продажа” технических идей: как сделать возможным внедрение новых технологий...«”Продажа” технических идей: как сделать возможным внедрение новых технологий...
«”Продажа” технических идей: как сделать возможным внедрение новых технологий...DataArt
 
Bit trade labs sovereign identity fintech summit 2016
Bit trade labs sovereign identity   fintech summit 2016Bit trade labs sovereign identity   fintech summit 2016
Bit trade labs sovereign identity fintech summit 2016Glen Frost
 
A Conversation with HR PDAS Perez
A Conversation with HR PDAS PerezA Conversation with HR PDAS Perez
A Conversation with HR PDAS PerezIIPCONX
 
Textual analysis of seven
Textual analysis of sevenTextual analysis of seven
Textual analysis of sevenAbbey Cotterill
 
Thriller powerpoint finished
Thriller powerpoint finishedThriller powerpoint finished
Thriller powerpoint finishedAbbey Cotterill
 
8 Things Business Owners Wish They Knew
8 Things Business Owners Wish They Knew8 Things Business Owners Wish They Knew
8 Things Business Owners Wish They KnewUrbanBound
 
Лилия Зданевич "Automation testing save time and money"
Лилия Зданевич "Automation testing save time and money"Лилия Зданевич "Automation testing save time and money"
Лилия Зданевич "Automation testing save time and money"DataArt
 

Viewers also liked (20)

Christmas eve
Christmas eveChristmas eve
Christmas eve
 
Jkd indoor & outdoor signage catalog
Jkd indoor & outdoor signage catalogJkd indoor & outdoor signage catalog
Jkd indoor & outdoor signage catalog
 
ARCHVENTURE
ARCHVENTUREARCHVENTURE
ARCHVENTURE
 
Макс Волошин «Микросервисы на практике»
Макс Волошин «Микросервисы на практике»Макс Волошин «Микросервисы на практике»
Макс Волошин «Микросервисы на практике»
 
Zed innovation intro
Zed innovation introZed innovation intro
Zed innovation intro
 
«Экстремальный менеджмент», Лидия Котлярова, Plarium
«Экстремальный менеджмент», Лидия Котлярова, Plarium«Экстремальный менеджмент», Лидия Котлярова, Plarium
«Экстремальный менеджмент», Лидия Котлярова, Plarium
 
«Azure Mobile Apps: и снова о мобильных сервисах», Анастасия Белокурова (.NE...
 «Azure Mobile Apps: и снова о мобильных сервисах», Анастасия Белокурова (.NE... «Azure Mobile Apps: и снова о мобильных сервисах», Анастасия Белокурова (.NE...
«Azure Mobile Apps: и снова о мобильных сервисах», Анастасия Белокурова (.NE...
 
Benefits for Millennials
Benefits for MillennialsBenefits for Millennials
Benefits for Millennials
 
E-Guardian Plus Kit Brochure
E-Guardian Plus Kit BrochureE-Guardian Plus Kit Brochure
E-Guardian Plus Kit Brochure
 
Леонид Шевцов «Clojure в деле»
Леонид Шевцов «Clojure в деле»Леонид Шевцов «Clojure в деле»
Леонид Шевцов «Clojure в деле»
 
«Чем занимается Google Life Sciences, и почему биотехнологии ожидает прорыв» ...
«Чем занимается Google Life Sciences, и почему биотехнологии ожидает прорыв» ...«Чем занимается Google Life Sciences, и почему биотехнологии ожидает прорыв» ...
«Чем занимается Google Life Sciences, и почему биотехнологии ожидает прорыв» ...
 
180 blue dining room training
180 blue dining room training180 blue dining room training
180 blue dining room training
 
«”Продажа” технических идей: как сделать возможным внедрение новых технологий...
«”Продажа” технических идей: как сделать возможным внедрение новых технологий...«”Продажа” технических идей: как сделать возможным внедрение новых технологий...
«”Продажа” технических идей: как сделать возможным внедрение новых технологий...
 
Bit trade labs sovereign identity fintech summit 2016
Bit trade labs sovereign identity   fintech summit 2016Bit trade labs sovereign identity   fintech summit 2016
Bit trade labs sovereign identity fintech summit 2016
 
A Conversation with HR PDAS Perez
A Conversation with HR PDAS PerezA Conversation with HR PDAS Perez
A Conversation with HR PDAS Perez
 
Textual analysis of seven
Textual analysis of sevenTextual analysis of seven
Textual analysis of seven
 
Thriller powerpoint finished
Thriller powerpoint finishedThriller powerpoint finished
Thriller powerpoint finished
 
Thriller's best villains
Thriller's best villainsThriller's best villains
Thriller's best villains
 
8 Things Business Owners Wish They Knew
8 Things Business Owners Wish They Knew8 Things Business Owners Wish They Knew
8 Things Business Owners Wish They Knew
 
Лилия Зданевич "Automation testing save time and money"
Лилия Зданевич "Automation testing save time and money"Лилия Зданевич "Automation testing save time and money"
Лилия Зданевич "Automation testing save time and money"
 

Similar to Ярослав Воронцов - Алгоритмы и структуры данных

тема множество для загрузки 2013
тема множество для загрузки 2013тема множество для загрузки 2013
тема множество для загрузки 2013AliyaAringazinova
 
Yuriy Sherstyuk - Algorithms in Front End: from V8 to VDOM
Yuriy Sherstyuk - Algorithms in Front End: from V8 to VDOMYuriy Sherstyuk - Algorithms in Front End: from V8 to VDOM
Yuriy Sherstyuk - Algorithms in Front End: from V8 to VDOMOdessaJS Conf
 
Big Data - первые шаги
Big Data - первые шагиBig Data - первые шаги
Big Data - первые шагиAnton Gorokhov
 
практика 7
практика 7практика 7
практика 7student_kai
 
Интерпретация моделей машинного обучения
Интерпретация моделей машинного обученияИнтерпретация моделей машинного обучения
Интерпретация моделей машинного обученияДмитрий Колодезев
 
чернякова г.в.
чернякова г.в.чернякова г.в.
чернякова г.в.sharikdp
 
Технологии анализа бинарного кода приложений: требования, проблемы, инструменты
Технологии анализа бинарного кода приложений: требования, проблемы, инструментыТехнологии анализа бинарного кода приложений: требования, проблемы, инструменты
Технологии анализа бинарного кода приложений: требования, проблемы, инструментыPositive Development User Group
 
Методы поиска уязвимостей
Методы поиска уязвимостейМетоды поиска уязвимостей
Методы поиска уязвимостейsolertia
 
Методы поиска уязвимостей в программах
Методы поиска уязвимостей в программахМетоды поиска уязвимостей в программах
Методы поиска уязвимостей в программахVasiliy Shapovalov
 
static - defcon russia 20
static  - defcon russia 20static  - defcon russia 20
static - defcon russia 20DefconRussia
 
1 встреча — Параллельное программирование (А. Свириденков)
1 встреча — Параллельное программирование (А. Свириденков)1 встреча — Параллельное программирование (А. Свириденков)
1 встреча — Параллельное программирование (А. Свириденков)Smolensk Computer Science Club
 
Tomato Engine: Как мы создавали онлайн шутер с авторитарным сервером
Tomato Engine: Как мы создавали онлайн шутер с авторитарным серверомTomato Engine: Как мы создавали онлайн шутер с авторитарным сервером
Tomato Engine: Как мы создавали онлайн шутер с авторитарным серверомDevGAMM Conference
 
разработка серверов и серверных приложений лекция №3
разработка серверов и серверных приложений лекция №3разработка серверов и серверных приложений лекция №3
разработка серверов и серверных приложений лекция №3Eugeniy Tyumentcev
 
разработка серверов и серверных приложений лекция №3
разработка серверов и серверных приложений лекция №3разработка серверов и серверных приложений лекция №3
разработка серверов и серверных приложений лекция №3etyumentcev
 
Принципы работы статического анализатора кода PVS-Studio
Принципы работы статического анализатора кода PVS-StudioПринципы работы статического анализатора кода PVS-Studio
Принципы работы статического анализатора кода PVS-StudioAndrey Karpov
 

Similar to Ярослав Воронцов - Алгоритмы и структуры данных (20)

тема множество для загрузки 2013
тема множество для загрузки 2013тема множество для загрузки 2013
тема множество для загрузки 2013
 
Yuriy Sherstyuk - Algorithms in Front End: from V8 to VDOM
Yuriy Sherstyuk - Algorithms in Front End: from V8 to VDOMYuriy Sherstyuk - Algorithms in Front End: from V8 to VDOM
Yuriy Sherstyuk - Algorithms in Front End: from V8 to VDOM
 
Big Data - первые шаги
Big Data - первые шагиBig Data - первые шаги
Big Data - первые шаги
 
Алгоритм
АлгоритмАлгоритм
Алгоритм
 
практика 7
практика 7практика 7
практика 7
 
1 тема
1 тема1 тема
1 тема
 
2020 03-31-lection
2020 03-31-lection2020 03-31-lection
2020 03-31-lection
 
Интерпретация моделей машинного обучения
Интерпретация моделей машинного обученияИнтерпретация моделей машинного обучения
Интерпретация моделей машинного обучения
 
чернякова г.в.
чернякова г.в.чернякова г.в.
чернякова г.в.
 
11
1111
11
 
Технологии анализа бинарного кода приложений: требования, проблемы, инструменты
Технологии анализа бинарного кода приложений: требования, проблемы, инструментыТехнологии анализа бинарного кода приложений: требования, проблемы, инструменты
Технологии анализа бинарного кода приложений: требования, проблемы, инструменты
 
Методы поиска уязвимостей
Методы поиска уязвимостейМетоды поиска уязвимостей
Методы поиска уязвимостей
 
Методы поиска уязвимостей в программах
Методы поиска уязвимостей в программахМетоды поиска уязвимостей в программах
Методы поиска уязвимостей в программах
 
static - defcon russia 20
static  - defcon russia 20static  - defcon russia 20
static - defcon russia 20
 
1 встреча — Параллельное программирование (А. Свириденков)
1 встреча — Параллельное программирование (А. Свириденков)1 встреча — Параллельное программирование (А. Свириденков)
1 встреча — Параллельное программирование (А. Свириденков)
 
Tomato Engine: Как мы создавали онлайн шутер с авторитарным сервером
Tomato Engine: Как мы создавали онлайн шутер с авторитарным серверомTomato Engine: Как мы создавали онлайн шутер с авторитарным сервером
Tomato Engine: Как мы создавали онлайн шутер с авторитарным сервером
 
разработка серверов и серверных приложений лекция №3
разработка серверов и серверных приложений лекция №3разработка серверов и серверных приложений лекция №3
разработка серверов и серверных приложений лекция №3
 
разработка серверов и серверных приложений лекция №3
разработка серверов и серверных приложений лекция №3разработка серверов и серверных приложений лекция №3
разработка серверов и серверных приложений лекция №3
 
Принципы работы статического анализатора кода PVS-Studio
Принципы работы статического анализатора кода PVS-StudioПринципы работы статического анализатора кода PVS-Studio
Принципы работы статического анализатора кода PVS-Studio
 
85004
8500485004
85004
 

More from DataArt

DataArt Custom Software Engineering with a Human Approach
DataArt Custom Software Engineering with a Human ApproachDataArt Custom Software Engineering with a Human Approach
DataArt Custom Software Engineering with a Human ApproachDataArt
 
DataArt Healthcare & Life Sciences
DataArt Healthcare & Life SciencesDataArt Healthcare & Life Sciences
DataArt Healthcare & Life SciencesDataArt
 
DataArt Financial Services and Capital Markets
DataArt Financial Services and Capital MarketsDataArt Financial Services and Capital Markets
DataArt Financial Services and Capital MarketsDataArt
 
About DataArt HR Partners
About DataArt HR PartnersAbout DataArt HR Partners
About DataArt HR PartnersDataArt
 
Event management в IT
Event management в ITEvent management в IT
Event management в ITDataArt
 
Digital Marketing from inside
Digital Marketing from insideDigital Marketing from inside
Digital Marketing from insideDataArt
 
What's new in Android, Igor Malytsky ( Google Post I|O Tour)
What's new in Android, Igor Malytsky ( Google Post I|O Tour)What's new in Android, Igor Malytsky ( Google Post I|O Tour)
What's new in Android, Igor Malytsky ( Google Post I|O Tour)DataArt
 
DevOps Workshop:Что бывает, когда DevOps приходит на проект
DevOps Workshop:Что бывает, когда DevOps приходит на проектDevOps Workshop:Что бывает, когда DevOps приходит на проект
DevOps Workshop:Что бывает, когда DevOps приходит на проектDataArt
 
IT Talk Kharkiv: «‎Soft skills в IT. Польза или вред? Максим Бастион, DataArt
IT Talk Kharkiv: «‎Soft skills в IT. Польза или вред? Максим Бастион, DataArtIT Talk Kharkiv: «‎Soft skills в IT. Польза или вред? Максим Бастион, DataArt
IT Talk Kharkiv: «‎Soft skills в IT. Польза или вред? Максим Бастион, DataArtDataArt
 
«Ноль копеек. Спастись от выгорания» — Сергей Чеботарев (Head of Design, Han...
 «Ноль копеек. Спастись от выгорания» — Сергей Чеботарев (Head of Design, Han... «Ноль копеек. Спастись от выгорания» — Сергей Чеботарев (Head of Design, Han...
«Ноль копеек. Спастись от выгорания» — Сергей Чеботарев (Head of Design, Han...DataArt
 
Communication in QA's life
Communication in QA's lifeCommunication in QA's life
Communication in QA's lifeDataArt
 
Нельзя просто так взять и договориться, или как мы работали со сложными людьми
Нельзя просто так взять и договориться, или как мы работали со сложными людьмиНельзя просто так взять и договориться, или как мы работали со сложными людьми
Нельзя просто так взять и договориться, или как мы работали со сложными людьмиDataArt
 
Знакомьтесь, DevOps
Знакомьтесь, DevOpsЗнакомьтесь, DevOps
Знакомьтесь, DevOpsDataArt
 
DevOps in real life
DevOps in real lifeDevOps in real life
DevOps in real lifeDataArt
 
Codeless: автоматизация тестирования
Codeless: автоматизация тестированияCodeless: автоматизация тестирования
Codeless: автоматизация тестированияDataArt
 
Selenoid
SelenoidSelenoid
SelenoidDataArt
 
Selenide
SelenideSelenide
SelenideDataArt
 
A. Sirota "Building an Automation Solution based on Appium"
A. Sirota "Building an Automation Solution based on Appium"A. Sirota "Building an Automation Solution based on Appium"
A. Sirota "Building an Automation Solution based on Appium"DataArt
 
Эмоциональный интеллект или как не сойти с ума в условиях сложного и динамичн...
Эмоциональный интеллект или как не сойти с ума в условиях сложного и динамичн...Эмоциональный интеллект или как не сойти с ума в условиях сложного и динамичн...
Эмоциональный интеллект или как не сойти с ума в условиях сложного и динамичн...DataArt
 
IT talk: Как я перестал бояться и полюбил TestNG
IT talk: Как я перестал бояться и полюбил TestNGIT talk: Как я перестал бояться и полюбил TestNG
IT talk: Как я перестал бояться и полюбил TestNGDataArt
 

More from DataArt (20)

DataArt Custom Software Engineering with a Human Approach
DataArt Custom Software Engineering with a Human ApproachDataArt Custom Software Engineering with a Human Approach
DataArt Custom Software Engineering with a Human Approach
 
DataArt Healthcare & Life Sciences
DataArt Healthcare & Life SciencesDataArt Healthcare & Life Sciences
DataArt Healthcare & Life Sciences
 
DataArt Financial Services and Capital Markets
DataArt Financial Services and Capital MarketsDataArt Financial Services and Capital Markets
DataArt Financial Services and Capital Markets
 
About DataArt HR Partners
About DataArt HR PartnersAbout DataArt HR Partners
About DataArt HR Partners
 
Event management в IT
Event management в ITEvent management в IT
Event management в IT
 
Digital Marketing from inside
Digital Marketing from insideDigital Marketing from inside
Digital Marketing from inside
 
What's new in Android, Igor Malytsky ( Google Post I|O Tour)
What's new in Android, Igor Malytsky ( Google Post I|O Tour)What's new in Android, Igor Malytsky ( Google Post I|O Tour)
What's new in Android, Igor Malytsky ( Google Post I|O Tour)
 
DevOps Workshop:Что бывает, когда DevOps приходит на проект
DevOps Workshop:Что бывает, когда DevOps приходит на проектDevOps Workshop:Что бывает, когда DevOps приходит на проект
DevOps Workshop:Что бывает, когда DevOps приходит на проект
 
IT Talk Kharkiv: «‎Soft skills в IT. Польза или вред? Максим Бастион, DataArt
IT Talk Kharkiv: «‎Soft skills в IT. Польза или вред? Максим Бастион, DataArtIT Talk Kharkiv: «‎Soft skills в IT. Польза или вред? Максим Бастион, DataArt
IT Talk Kharkiv: «‎Soft skills в IT. Польза или вред? Максим Бастион, DataArt
 
«Ноль копеек. Спастись от выгорания» — Сергей Чеботарев (Head of Design, Han...
 «Ноль копеек. Спастись от выгорания» — Сергей Чеботарев (Head of Design, Han... «Ноль копеек. Спастись от выгорания» — Сергей Чеботарев (Head of Design, Han...
«Ноль копеек. Спастись от выгорания» — Сергей Чеботарев (Head of Design, Han...
 
Communication in QA's life
Communication in QA's lifeCommunication in QA's life
Communication in QA's life
 
Нельзя просто так взять и договориться, или как мы работали со сложными людьми
Нельзя просто так взять и договориться, или как мы работали со сложными людьмиНельзя просто так взять и договориться, или как мы работали со сложными людьми
Нельзя просто так взять и договориться, или как мы работали со сложными людьми
 
Знакомьтесь, DevOps
Знакомьтесь, DevOpsЗнакомьтесь, DevOps
Знакомьтесь, DevOps
 
DevOps in real life
DevOps in real lifeDevOps in real life
DevOps in real life
 
Codeless: автоматизация тестирования
Codeless: автоматизация тестированияCodeless: автоматизация тестирования
Codeless: автоматизация тестирования
 
Selenoid
SelenoidSelenoid
Selenoid
 
Selenide
SelenideSelenide
Selenide
 
A. Sirota "Building an Automation Solution based on Appium"
A. Sirota "Building an Automation Solution based on Appium"A. Sirota "Building an Automation Solution based on Appium"
A. Sirota "Building an Automation Solution based on Appium"
 
Эмоциональный интеллект или как не сойти с ума в условиях сложного и динамичн...
Эмоциональный интеллект или как не сойти с ума в условиях сложного и динамичн...Эмоциональный интеллект или как не сойти с ума в условиях сложного и динамичн...
Эмоциональный интеллект или как не сойти с ума в условиях сложного и динамичн...
 
IT talk: Как я перестал бояться и полюбил TestNG
IT talk: Как я перестал бояться и полюбил TestNGIT talk: Как я перестал бояться и полюбил TestNG
IT talk: Как я перестал бояться и полюбил TestNG
 

Ярослав Воронцов - Алгоритмы и структуры данных

  • 1. Algorithms and data structures Yaroslav Vorontsov Senior Software engineer/Tech lead M.Sc., PhD yvorontsov@dataart.com
  • 2. Agenda ´ Немного нудных определений ´ Переход дороги с некоторыми нюансами ´ Разные греческие буквы – омега, тета ´ Ещё нудные определения ´ Базовые структуры данных и их сложность ´ Базовые алгоритмы и их сложность ´ Немного веселья 2
  • 3. Нудные определения ´ Алгоритм – набор инструкций, описывающих порядок действий исполнителя для достижения результата решения задачи за конечное число действий ´ Вычислительные процессы алгоритмического характера известны человечеству с глубокой древности ´ Явное определение – начало 20 века 3
  • 4. Попытки формализации понятия алгоритма ´ А. Чёрч – лямбда-исчисление, тезис Чёрча ´ A. Тьюринг – машина Тьюринга ´ А. Марков – нормальный алгорифм (алгоритм) ´ Машина Поста (автоматное программирование) ´ Рекурсивная функция ´ Brainfuck ++++++++++[>+++++++>++++++++++>+++>+<<<<-]>++ .>+.+++++++..+++.>++.<<+++++++++++++++.>.+++. ------.--------.>+.>. Hello World 4
  • 5. Один из наиболее старых алгоритмов 5
  • 7. Вместо дальнейшего введения ´ Как перейти дорогу? ´ Посмотрите налево ´ Посмотрите направо ´ Переходите 7
  • 8. Но… «Есть нюансы» (с) В.И. Чапаев в известном анекдоте 8
  • 9. Суслики – самые осторожные животные… Они становятся на задние лапки и смотрят вдаль: не бежит ли лиса? Не летит ли орел? Не ползет ли змея? И самые наблюдательные из них получают бампером в лоб… 9
  • 15. Нюанс 4 ´ «Эй, гражданина, ты туда не ходи, ты сюда ходи. А то снег башка попадёт, совсем мёртвый будешь!» ´ Серьёзно, как вы вообще здесь оказались? 15
  • 17. А ещё… ´ Вы идёте с коляской/тележкой? ´ Находятся ли транспортные средства на безопасном расстоянии? ´ Правило «3Д», оно же «ДДД» (особенно касается воронежских дорог) ´ Посмотрели ли вы наверх? (вдруг инопланетяне?) ´ А вдруг крокодилы? 17
  • 18. К чему всё это было? ´ У алгоритмов есть формальные свойства ´ Дискретность ´ Детерминированность ´ Понятность ´ Конечность ´ Массовость/Универсальность ´ Результативность ´ Алгоритм не содержит ошибок, если он даёт правильные результаты для любых допустимых исходных данных 18
  • 19. Минутка К.О. ´ Среднестатистический случай работы алгоритма никому не интересен! ´ При анализе алгоритмов, в первую очередь обращают внимание на пограничные или предельные ситуации ´ Анализ алгоритмов при малом размере входных данных также не представляет интереса! 19
  • 24. Хорошо, а где же структуры данных? Название-то A&DS… 24
  • 25. Снова нудная теория ´ Структура данных – программная единица, позволяющая хранить и обрабатывать множество однотипных и/или логически связанных данных в вычислительной технике. Для добавления, поиска, изменения и удаления данных структура данных предоставляет некоторый набор функций, составляющих её интерфейс ´ В большинстве современных языков программирования «строительными блоками» для сложных структур данных являются ´ Массивы (array) ´ Записи (struct/record) ´ Объединения (union) ´ Ссылки (reference/pointer) 25
  • 26. Какие бывают структуры данных? ´ Список (List) ´ Ассоциативный массив (Map) ´ Хэш-таблица (Hash table) ´ Дек (Deque) ´ Граф (Graph) ´ Дерево (Tree) ´ Пирамида/Куча (Heap) ´ Таблица (Table) ´ Система непересекающихся множеств (Union-Find) 26
  • 30. А вот и основные алгоритмы30
  • 31. А вот и основные алгоритмы31
  • 32. Алгоритм умножения: русский крестьянский метод ´ Не требует знания таблицы умножения ´ Надо уметь умножать и делить на 2 ´ Умножение и деление на 2 – сдвиг на 1 разряд налево- направо ´ Аппаратная или низкоуровневая реализация 32
  • 33. Рандом не такой уж и рандом ´ rand() ´ srand() ´ arc4random() ´ arc4random_uniform() ´ … ´ X[N+1] = (A*X[N]+C) mod M 33
  • 34. Divide et impera ´ Метод «разделяй и властвуй» заключается в рекурсивном разбиении задачи на две или более подзадачи того же типа, но меньшего размера, и комбинации их решений для получения ответа к исходной задаче ´ Разбиения выполняются до тех пор, пока все подзадачи не окажутся элементарными 34
  • 35. Алгоритм Штрассена для матриц ´ Эффективен при размере матриц от 32 до 128 ´ Работает за субкубическое время ´ Оптимизируется для малых матриц за счёт обычного «кубического» перемножения ´ Необходимо, чтобы размер матриц был степенью двойки. Если это не так – матрица дополняется нулями 35
  • 36. Quicksort ´ Выбор опорного элемента ´ Разделение массива ´ Шаг рекурсии – запуск вышеописанных действий для подмассивов ´ Устойчивость метода ´ Хороший случай ´ Плохой случай ´ Оптимизации 36
  • 37. Жадные алгоритмы ´ Жадный алгоритм принимает локально оптимальные решения на каждом этапе выполнения, допуская, что и конечное решение окажется оптимальным ´ Наиболее известные алгоритмы ´ Алгоритм Хаффмана ´ Алгоритм Прима-Ярника ´ Алгоритм Краскала ´ Алгоритм Дейкстры 37
  • 39. Дейкстра и Интернет (OSPF) ´ LSA – Link State Advertisement ´ При использовании протокола OSPF маршрутизаторы обмениваются информацией о топологии сети. ´ Потом, на основании этой информации с помощью алгоритма Дейкстры рассчитывают таблицу маршрутизации 39
  • 40. Вероятностные алгоритмы ´ Подразумевают обращение к ГСЧ на определённом этапе своей работы ´ Позволяют пожертвовать абсолютной достоверностью ради ускорения/экономии во времени ´ Таких алгоритмов не так-то и мало: ´ Фильтр Блума ´ Поиск минимальногоразреза в графе ´ Лас-Вегас (выполнить А с результатом r до тех пор, пока K(r) не истина) ´ Вероятностная раскраска графа ´ С натяжкой – марковские цепи, метод Монте-Карло, алгоритмы сжатия 40
  • 42. Нет, не этого Блума ´ Можно получить ложноположительное срабатывание, но никогда – ложноотрицательное ´ Основан на битовом массиве и хэш-функции 42
  • 43. Алгоритм Каргера ´ Минимальный разрез графа – разбиение множества вершин на две непустые части, при котором рассекается минимальное число рёбер ´ Repeat until just two nodes remain: ´ – Pick an edge of G at random and collapse its two endpoints into a single node ´ For the two remaining nodes u1 and u2, set V1 = {nodes that went into u1} and V2 = {nodes in u2} ´ Вероятность: 2/(n*(n-1)) 43
  • 44. Как выйти из лабиринта? ´ Одним из самых простых правил для прохождения лабиринта является правило "одной руки": двигаясь по лабиринту, надо все время касаться правой или левой рукой его стены. ´ Этот алгоритм, вероятно, был известен еще древним грекам. Придется пройти долгий путь, заходя во все тупики, но в итоге цель будет достигнута 44
  • 45. FAIL ´ Алгоритм «правой руки» не работает для т.н. многосвязных лабиринтов ´ Односвязными называются лабиринты, не содержащие замкнутых маршрутов и не имеющие отдельно стоящих стенок. ´ Лабиринты с отдельно стоящими стенками и с замкнутыми маршрутами называются многосвязными 45
  • 47. Алгоритм Люка-Тремо ´ 1882 – Э. Люка, указал на первенство Тремо ´ Выйдя из любой точки лабиринта, надо сделать отметку на его стене (крест) и двигаться в произвольном направлении до тупика или перекрестка ´ В первом случае вернуться назад, поставить второй крест, свидетельствующий, что путь пройден дважды - туда и назад, и идти в направлении, не пройденном ни разу, или пройденном один раз; ´ Во втором - идти по произвольному направлению, отмечая каждый перекресток на входе и на выходе одним крестом ´ Если на перекресте один крест уже имеется, то следует идти новым путем, если нет - то пройденным путем, отметив его вторым крестом. 47
  • 48. Что дальше? ´ Классика Computer Science ´ Т. Кормен, Ч. Лейзерсон, Р. Ривест, К. Штайн «Алгоритмы: построение и анализ» ´ Р. Седжвик, К. Уэйн «Алгоритмы на Java» ´ Д. Кнут «Искусство программирования» ´ Веб-ресурсы ´ http://algolist.ru ´ http://e-maxx.ru ´ http://habr.ru ´ http://rsdn.ru 48
  • 49. Что дальше? ´ Онлайн-курсы (на английском) ´ Coursera: Algorithms: Design and Analysis, part 1 & 2 by Tim Roughgarden ´ Coursera: Algorithms, part 1 & 2 by Kevin Wayne and Robert Sedgewick ´ Stanford: CS103 – Mathematical foundations of computing ´ Stanford: CS161 – Design and Analysis of Algorithms ´ Онлайн-курсы (на русском) ´ Lektorium.tv ´ ШАД 49
  • 50. Thnx! Yaroslav Vorontsov Senior Software engineer/Tech lead M.Sc., PhD yvorontsov@dataart.com