35
Мастер-класс по алгоритмам Часть 2 Павел Егоров https://twitter.com/xoposhiy [email protected]

Мастер класс по алгоритмам. Часть 2

Embed Size (px)

DESCRIPTION

http://it-people.ru/master-klass-po-algoritmam-i-stukturam-dannyx/

Citation preview

Page 1: Мастер класс по алгоритмам. Часть 2

Мастер-класс по алгоритмам

Часть 2Павел Егоров

https://twitter.com/xoposhiy [email protected]

Page 2: Мастер класс по алгоритмам. Часть 2

Домашнее задание 0Определить асимптотическую сложность алгоритма:

int F0(int n){

int x = 0;

for(int i=0; i<n; i++)

for(int j=1; j<n; j*=2)

x += i*j;

return x;

}

Page 3: Мастер класс по алгоритмам. Часть 2

Домашнее задание 1Определить асимптотическую сложность алгоритма:

int F1(int n){int x = 0;for(int i=0; i<n; i++)

for(int j=i; j<n-i; j+=2)x += i*j;

return x;}

Page 4: Мастер класс по алгоритмам. Часть 2

Домашнее задание 2

Определить асимптотическую сложность алгоритма:

int F2(int n){int x = 0;int j = 1;for(int i=1; i<n; i++) {

while (j<n && j%i !=0) j++;if (j<n) x += i*j;

}return x;

}

Page 5: Мастер класс по алгоритмам. Часть 2

Домашнее задание 3*Дан алгоритм:

void Make(int n, bool flag){

if (n==0) return;for (int i=0; i<n; i++) Action(flag);Make((int)(A*n), flag);Make((int)(A*n), !flag);

}

Действие Action выполняется за константное время. Определить асимптотическую сложность алгоритма при A=1/2, A=1/3 и A=2/3

Page 6: Мастер класс по алгоритмам. Часть 2

Домашнее задание 4

Могут происходить следующие события:• Добавление нового комментария• Удаление комментария• «Like» комментарию• Запросить K не удалённых комментариев,

которые менялись (добавлялись или лайкались) самыми последними.

Page 7: Мастер класс по алгоритмам. Часть 2

О ПРИМЕНЕНИИ ХЭШЕЙ

ещё немного

Page 8: Мастер класс по алгоритмам. Часть 2

КриптографияТребования:1. Необратимость2. Стойкость к коллизиямПрименение:Digest, хранение паролей.

Алгоритмы:Md5 — взломан!Sha1 — взломан теоретически.Sha2, Sha256 — ОКГОСТ — меееедлееееннныыыый

Page 9: Мастер класс по алгоритмам. Часть 2

Сравнение длинных строк

Строки с длинными общими префиксамиПути файловАдреса в интернете…

Page 10: Мастер класс по алгоритмам. Часть 2

Полиномиальный хэш

p3 p2 p 1

H E L L O ! ! !p3 p2 p 1

H E L L O ! ! !

Page 11: Мастер класс по алгоритмам. Часть 2

Алгоритм Рабина-Карпа (87 г.)

Поиск подстроки в текстеhttp://en.wikipedia.org/wiki/Rabin-Karp_string_search_algorithm

Поиск «паттерна» в потоке событийХэширование N-грамм

Page 12: Мастер класс по алгоритмам. Часть 2

Потоковая обработка событий

Нужно поддерживать какие-то статистики об интенсивном потоке событий.Хотим тратить RAM меньше, чем O(N)Хотим тратить времени ~ O(1) на событие• Биллинг• Статистика ошибок• …

Page 13: Мастер класс по алгоритмам. Часть 2

Биллинг

K клиентов, нужно раз в месяц выставлять счет, основываясь на количестве и типах произошедших транзакций (звонков, покупок, …)

Постоянно показывать текущий баланс

Page 14: Мастер класс по алгоритмам. Часть 2

Биллинг

Дано:Лог транзакций

Хотим:Id клиента → текущий счет / баланс

Page 15: Мастер класс по алгоритмам. Часть 2

«Сумматор»

Каждую секунду регистрируются события:AddNextTickEventCount(int time, int count)

Периодически делаются запросы вида«Сколько событий было за промежуток?»int GetEventsCount(int from, int to)

Page 16: Мастер класс по алгоритмам. Часть 2

1 20 5 10 4 2 2 1 32

26 16 35

«Сумматор»

• Если ячеек стало (P+1)2 → переразбиваем и пересчитываем нижние блоки

• N вставок sqrt(N) переразбиений O(N) каждое суммарная сложность O(N*sqrt(N))

Page 17: Мастер класс по алгоритмам. Часть 2

Прагматичный подход

Хранить суммы за каждый месяц

Page 18: Мастер класс по алгоритмам. Часть 2

Статистика с забыванием

Много типов событий. Про каждое нужно уметь смотреть исторические данные.1. Не хотим хранить все. Много.2. Не хотим нагружать процессор.

Это всего лишь статистика.

Page 19: Мастер класс по алгоритмам. Часть 2

Логарифмическое забывание

Последние 2 месяца — помнить разбивку по днямПоследние 2 дня — по часамПоследние 2 часа — по минутамПоследние 2 минуты — по секундам…

Можно продолжать в обе стороныПамять — O(60 + 48 + 120 + 120) ~ O(log T)Время — O(log T)

Page 20: Мастер класс по алгоритмам. Часть 2

Интеллектуальные задачи

Не применимы категории «правильно/не правильно»Нужно решить задачу «как можно лучше»

Page 21: Мастер класс по алгоритмам. Часть 2

Задача классификации

Спам / не спамДавать кредит / не даватьКликнет на рекламу / не кликнетБот / человекКупит / не купитХороший / плохой…

Page 22: Мастер класс по алгоритмам. Часть 2

Задача «продление абонента»

Абонент «продляет» подписку каждый год.Зная что-то про абонента можно догадаться, продлится он или нет.Потенциальных непродленцев можно «растормошить». Как их выявить?

Page 23: Мастер класс по алгоритмам. Часть 2

Векторизация

Исходные данные — множество векторовvi = (1, 0.5, 1.37, 2.8, -1, -0.1, …)

Координата вектора — фича

Page 24: Мастер класс по алгоритмам. Часть 2

Что есть вектор?

• Абонент?• Абонент + момент времени?• Абонент в момент, когда пора продлять

подписку!

Какие фичи?

Page 25: Мастер класс по алгоритмам. Часть 2

Размеченная база

Накопленную статистика «продлился/не продлился» по прошлым данным можно использовать для построения классификатора.

Это вектора, про которые мы точно знаем фактический ответ

Page 26: Мастер класс по алгоритмам. Часть 2

Training set / Testing set

Page 27: Мастер класс по алгоритмам. Часть 2

Качество классификатора

Задачу классификации можно переформулировать в задачу поиска:«Ищем всех непродленцев»Для «поиска» используют две метрики:• Точность = доля ошибочно найденных.• Полнота = доля найденныхУровни точности и полноты обычно диктуются сферой применения классификатора

Page 28: Мастер класс по алгоритмам. Часть 2

Точность и полнота

Page 29: Мастер класс по алгоритмам. Часть 2

Классификаторы

…тренируются классифицировать на обучающей выборке

• Нейронные сети• KNN (K nearest neighbors)• Линейное разделение• Дерево решений• Рандомизированный лес• SVM

Page 30: Мастер класс по алгоритмам. Часть 2

Weka Live Demo

Page 31: Мастер класс по алгоритмам. Часть 2

Методы «поиска»

Задачи «поиска» — что это?• Календарное планирование• Составление расписания• Задачи раскроя

Объект поиска: план, расписание, раскрой.

Page 32: Мастер класс по алгоритмам. Часть 2

Random

Генерируем случайные объекты, и запоминаем лучшего

Обычно очень плохо работает

Page 33: Мастер класс по алгоритмам. Часть 2

Локальный поиск

Начать со случайного.Искать улучшающую микромодификацию.

Работает хорошо, когда пространство решений «выпуклое». В зашумленном постранстве забивается в локальный оптимум

Page 34: Мастер класс по алгоритмам. Часть 2

Имитация отжига

Начать со случайногоПеребирать локальные модификации:

Если нашли улучшающую — применять ееИначе, применять с некоторой вероятностью p

Каждый шаг уменьшать вероятность p.

Page 35: Мастер класс по алгоритмам. Часть 2

Интеллектуальные алгоритмыКуда бежать?

Coursera Machine learning coursehttps://www.coursera.org/course/ml

Weka Bookhttp://www.cs.waikato.ac.nz/ml/weka/book.html