Основы программирования на rubyEvgeny SmirnovРассказывается об основах программирования на ruby: переменные, типы переменных, операции и пр. В конце приводятся блок-схема решения линейного уравнения.
Николай Паламарчук "Functional Programming basics for PHP developers"FwdaysFunctional Programming becomes very popular nowadays. What is it? Is it a hype or panacea? Should you deal with it as a PHP programmer? Let's find out!
В поисках математики. Михаил Денисенко, НигмаyaeventsМихаил Денисенко, Нигма
Закончил факультет вычислительной математики и кибернетики МГУ. Завершает работу над диссертацией, посвященной математическим аспектам информационной безопасности. Занимался исследованиями в области обработки видеопоследовательностей и компьютерной безопасности в компании Intel. С 2009 года является старшим разработчиком математического сервиса в компании Nigma.ru. С 2011 года — системный архитектор поисковой системы ITim.vn.
Тема доклада
В поисках математики.
Тезисы
Nigma-Математика – это сервис, с помощью которого пользователи могут решать различные математические задачи (упрощать выражения, решать уравнения, системы уравнений и т. д.), вводя их прямо в строку поиска в виде обычного текста. Система распознает более тысячи физических, математических констант и единиц измерения, что позволяет пользователям производить операции с различными величинами (в том числе решать уравнения) и получать ответ в указанных единицах измерения. Помимо уравнений система решает все задачи, характерные для калькуляторов поисковых систем и конвертеров валют. В докладе будет описана общая схема функционирования сервиса, базовые и новые алгоритмы системы символьных вычислений (алгоритмы решения уравнений и неравенств, алгоритм учета области допустимых значений, алгоритм исследования функций и т.п.). Также будет рассказано об ускорении работы сервиса, распределении нагрузки на систему, распознавании математичности запроса, преобразовании валют и метрических величинах.
Николай Паламарчук "Functional Programming basics for PHP developers"FwdaysFunctional Programming becomes very popular nowadays. What is it? Is it a hype or panacea? Should you deal with it as a PHP programmer? Let's find out!
В поисках математики. Михаил Денисенко, НигмаyaeventsМихаил Денисенко, Нигма
Закончил факультет вычислительной математики и кибернетики МГУ. Завершает работу над диссертацией, посвященной математическим аспектам информационной безопасности. Занимался исследованиями в области обработки видеопоследовательностей и компьютерной безопасности в компании Intel. С 2009 года является старшим разработчиком математического сервиса в компании Nigma.ru. С 2011 года — системный архитектор поисковой системы ITim.vn.
Тема доклада
В поисках математики.
Тезисы
Nigma-Математика – это сервис, с помощью которого пользователи могут решать различные математические задачи (упрощать выражения, решать уравнения, системы уравнений и т. д.), вводя их прямо в строку поиска в виде обычного текста. Система распознает более тысячи физических, математических констант и единиц измерения, что позволяет пользователям производить операции с различными величинами (в том числе решать уравнения) и получать ответ в указанных единицах измерения. Помимо уравнений система решает все задачи, характерные для калькуляторов поисковых систем и конвертеров валют. В докладе будет описана общая схема функционирования сервиса, базовые и новые алгоритмы системы символьных вычислений (алгоритмы решения уравнений и неравенств, алгоритм учета области допустимых значений, алгоритм исследования функций и т.п.). Также будет рассказано об ускорении работы сервиса, распределении нагрузки на систему, распознавании математичности запроса, преобразовании валют и метрических величинах.
Анализ количества посетителей на сайте [Считаем уникальные элементы]Qrator LabsКонференция Highload++ / 7 ноября 2016 / Спикер - Константин Игнатов, инженер-разработчик в отделе исследований Qrator Labs.
Для точного ответа на вопрос, сколько уникальных посетителей было на моём сайте за произвольный интервал времени в прошлом, нужно через равные интервалы времени сохранять множество посетителей сайта (пусть это для простоты будут IP-адреса), которых мы за прошедший интервал увидели. Понятное дело, что такой объём информации хранить нереально, а даже, если получится, придётся объединять большое количество множеств и считать элементы в том множестве, которое получилось в итоге. Это очень долго. Не спасает ситуацию даже переход от точных алгоритмов к приблизительным: гарантировать точность либо не получится, либо придётся использовать объём памяти и вычислительные ресурсы, сопоставимые с точным алгоритмом.
Хочу знать, сколько уникальных посетителей было на моём сайте за произвольный...OnticoЧто нужно хранить для того, чтобы была возможность ответить на этот вопрос?
Для точного ответа нужно через равные интервалы времени сохранять множество посетителей сайта (пусть это для простоты будут IP-адреса), которых мы за прошедший интервал увидели. Понятное дело, что такой объём информации хранить нереально, а даже, если получится, придётся объединять большое количество множеств и считать элементы в том множестве, которое получилось в итоге. Это очень долго. Не спасает ситуацию даже переход от точных алгоритмов к приблизительным: гарантировать точность либо не получится, либо придётся использовать объём памяти и вычислительные ресурсы, сопоставимые с точным алгоритмом.
В 80-х годах появились первые вероятностные алгоритмы для приблизительной оценки количества элементов в множестве. При большом количестве уникальных элементов эти алгоритмы дают приблизительную оценку, которая отличается от истинного значения в (1±e), e<1>0.5. То есть они могут вернуть оценку, которая сильно отличается от истинного значения с некоторой вероятностью (1-p). Чем больше требуется точность, и чем меньше нужна вероятность ошибки, тем больше ресурсов требуют алгоритмы. Сохраняя внутреннее состояние одного из таких алгоритмов через равные промежутки времени в базе данных, мы можем оценить приблизительное количество уникальных посетителей не только за произвольный интервал времени, но и за произвольное объединение любых интервалов времени, например, мы можем посчитать общее количество уникальных IP, которых мы наблюдали в промежутке времени с 17:00 до 18:00 в течение последней недели.
В 2000-ные в научном сообществе велась активная работа по достижению теоретически оптимальных характеристик (т.е. потребление памяти, сложность добавления нового элемента, сложность запроса) вероятностных приблизительных алгоритмов для оценки кардинальности (количества элементов в множестве), разрабатывался необходимый инструментарий.
Первый такой алгоритм был предложен в 2010 году. О нём-то мы и поговорим.
Семплирование на основе марковских цепейsoukhinovОписаны методы стохастического семплирования многомерных распределений вероятностей, основанные на марковских цепях.
Внедряем MOOC'и на уроке информатикиEvgeny Smirnov1. Какие бывают MOOC'и?
2. Какие платформы существуют?
3. Какие курсы полезны для учителя информатики?
4. Метрики по результатам эксперимента в 2014-2015 годах.
Инновации которые не мешаютEvgeny SmirnovПрезенетация с выступления на Арене #ИТНШ 2017: зачем нужны инновации, какого типа бывают инновации, как их искать и как их внедрять?
Порядок и хаос в Солнечной системеEvgeny SmirnovПрезентация на фестивале "Пулковский меридиан" (Смирнов Е.А.) об устройстве, порядке и хаосе в Солнечной системе. Рассматриваются представления человечества, начиная с Древних времён и до наших дней. Особое внимание уделено хаотической динамике астероидов.
Мобильные приложения в образованииEvgeny SmirnovПрезентация для семинара о том, как использовать мобильные приложения Plickers & Lumosity в образовании.
NumBuster! Почему связи между данными важнее самих данных.Evgeny SmirnovЧасто считается, что основную ценность в бизнесе представляют данные. Однако же весьма важными, а, возможно, и наиболее важными с нашей точки зрения являются связи между получаемыми данными, которые позволяют персонализировать работу пользователя и узнать его лояльность по отношению к различным вещам: работе, разным компаниям, сервисам и пр.
Доклад NumBuster! на конференции BigData Russia 2014.
Промо-презентация для мастер-класса "Образовательные и игровые платформы в по...Evgeny SmirnovМастер-класса "Образовательные и игровые платформы в помощь учителю и методисту", конференция "Информационные технологии для Новой школы", РЦОКОиИТ, 2014.
Образовательные и игровые платформы в помощь учителю и методистуEvgeny SmirnovСуществующий формат образования, подразумевающий достаточно длительные уроки, большое количество материала для запоминания и стандартную систему контрольных работ, не является оптимальным в XXI веке. Интернет и другие современные технологии, а также наличие игровых и соревновательных элементов, позволяют сделать обучение для детей более интересным, повысить его эффективность и улучшить понимание предмета. Электронные видео-материалы дают возможность повторить и закрепить пройденный в школе материал в привычной для подростка форме. Всё это позволит сделать образование более подходящим по стилю и духу для современных детей.
1. Жадные алгоритмы Задача о размене монет Задача о коммивояжёре References
Алгоритмы. Жадные алгоритмы.
Информатика
10-11 классы
23 января 2012 г.
Информатика 10-11 классы Алгоритмы. Жадные алгоритмы.
2. Жадные алгоритмы Задача о размене монет Задача о коммивояжёре References
Жадные алгоритмы
Жадный (greedy) алгоритм пошаговый алгоритм,
основанный на жадном принципе выбора следующего
шага.
На новом шаге мы выбираем самый “толстый” вариант.
Формально: для подготовки глобально оптимального
решения на каждом шаге выбираем локально
оптимальный вариант.
Информатика 10-11 классы Алгоритмы. Жадные алгоритмы.
3. Жадные алгоритмы Задача о размене монет Задача о коммивояжёре References
Задача о размене монет
В одном государстве имеются монеты достоинством 1, 2,
5, 10, 20, 50 и 100 тугриков. Вася каждый месяц получает
зарплату N. Помогите начальнику Васи выдать сумму N
наименьшим количеством монет.
Информатика 10-11 классы Алгоритмы. Жадные алгоритмы.
4. Жадные алгоритмы Задача о размене монет Задача о коммивояжёре References
Общий случай
В одном государстве имеются монеты достоинством
a1 = 1 < a2 < · · · < ak тугриков. Вася каждый месяц
получает зарплату N. Помогите начальнику Васи выдать
сумму N наименьшим количеством монет.
Информатика 10-11 классы Алгоритмы. Жадные алгоритмы.
5. Жадные алгоритмы Задача о размене монет Задача о коммивояжёре References
Алгоритм
1 Будем последовательно выдавать Васе по одной монете
вплоть до того момента, когда будет выдана вся зарплата
(итеративность).
2 Принцип жадного выбора в данном алгоритме заключается
в следующем: на каждом шаге выберем из всех монет те,
которые ещё можно выдать (достоинство монеты меньше
оставшейся суммы) и выдадим Васе максимальную из них.
3 “Выдадим ... максимальную” и есть “жадность”
алгоритма.
4 Процесс выдачи можно организовать как циклом
(динамическое программирование), так и рекурсией.
Информатика 10-11 классы Алгоритмы. Жадные алгоритмы.
6. Жадные алгоритмы Задача о размене монет Задача о коммивояжёре References
Рекурсия
Информатика 10-11 классы Алгоритмы. Жадные алгоритмы.
7. Жадные алгоритмы Задача о размене монет Задача о коммивояжёре References
Рекурсивный формализованный алгоритм
1 Зададим монеты в виде массива.
2 Создадим рекурсивную функцию, которая выдаёт одну
монету. На вход она будет принимать набор монет и
оставшуюся сумму. Возвращать достоинство монеты,
которую надо выдать.
3 База рекурсии: если оставшаяся сумма совпадает с
достоинством одной из монет, возвращаем эту монету.
4 Рекуррентная формула: находим максимальную монету,
которую можем выдать Васе. Выдаём её Васе и запускаем
вызываем функцию с уменьшенным значением суммы.
Информатика 10-11 классы Алгоритмы. Жадные алгоритмы.
8. Жадные алгоритмы Задача о размене монет Задача о коммивояжёре References
Реализация рекурсии
Listing 1: Монеты рекурсией
def give_coin ( coins , n )
i f c o i n s . i n c l u d e ?( n)
puts n
else
max = c o i n s . f i n d _ a l l { | e l e m | e l e m < n } . max
p u t s max
g i v e _ c o i n ( c o i n s , n−max )
end
end
coins = [1 ,2 ,5 ,10 ,20 ,50 ,100]
n = 398
give_coin ( coin , n)
Информатика 10-11 классы Алгоритмы. Жадные алгоритмы.
9. Жадные алгоритмы Задача о размене монет Задача о коммивояжёре References
Динамическое
программирование
Информатика 10-11 классы Алгоритмы. Жадные алгоритмы.
10. Жадные алгоритмы Задача о размене монет Задача о коммивояжёре References
Алгоритм с циклом
1 Разобьём задачу на две составляющие: нахождение
жадного выбора и цикл выдачи монет.
2 Цикл продолжается до тех пор, пока Васе есть что
выдавать.
3 Жадный выбор: находим максимальную монету, которую
можем выдать Васе.
4 В специальной переменной сохраняем значение остатка
невыданных Васе средств.
Информатика 10-11 классы Алгоритмы. Жадные алгоритмы.
11. Жадные алгоритмы Задача о размене монет Задача о коммивояжёре References
Реализация циклом
Listing 2: Монеты циклом
coins = [1 ,2 ,5 ,10 ,20 ,50 ,100]
n = 48
w h i l e ( n != 0 )
max = c o i n s . f i n d _ a l l { | e l e m | elem<=n } . max
p u t s max
n = n − max
end
Информатика 10-11 классы Алгоритмы. Жадные алгоритмы.
12. Жадные алгоритмы Задача о размене монет Задача о коммивояжёре References
Задание
Решить задачу в общем случае для любого количества и
достоинства монет.
(*) Предложенное решение не оптимально: если, например,
надо выдать 453 тугрика, то мы можем сразу выдать 400,
а не выдавать 4 раза по 100 тугриков, удлинняя в 4 раза
алгоритм. Написать программу, реализующую улучшенный
алгоритм, который сразу выдаёт максимально возможное
количество монет наивысшего достоинства.
Информатика 10-11 классы Алгоритмы. Жадные алгоритмы.
13. Жадные алгоритмы Задача о размене монет Задача о коммивояжёре References
Задача о коммивояжёре
Рис.: Источник: http://ru.wikipedia.org
Информатика 10-11 классы Алгоритмы. Жадные алгоритмы.
14. Жадные алгоритмы Задача о размене монет Задача о коммивояжёре References
Задача о коммивояжёре
Коммивояжёру для продажи своего барахла нужно
посетить несколько городов. Требуется составить
кратчайший из возможных путей. Предполагается, что все
города соединены прямыми дорогами каждый с каждым.
Информатика 10-11 классы Алгоритмы. Жадные алгоритмы.
15. Жадные алгоритмы Задача о размене монет Задача о коммивояжёре References
Концепт решения - жадный выбор
Сама задача имеет множество вариантов решений от
простых до более сложных.
Одно из возможных решений жадный алгоритм.
Принципов жадного выбора может быть несколько.
Возьмём самый простой из каждого города будем ехать
в самый ближайший по списку из тех, в которых мы ещё
не были.
Информатика 10-11 классы Алгоритмы. Жадные алгоритмы.
16. Жадные алгоритмы Задача о размене монет Задача о коммивояжёре References
Концепт решения - хранение данных
Во многих задачах стоит вопрос, как хранить данные?
Вопрос 1: как хранить местоположение городов?
Простейший вариант в виде двумерного массива
городов. Ключи номера городов, значения две
координаты (широта и долгота в оригинале, но мы решаем
в плоской задаче, поэтому x и y ).
Вопрос 2: надо как-то хранить города, в которых мы уже
были.
Для этого можно завести булевский одномерный массив
длиной в количество городов. Если мы побывали в i-ом
городе, то делаем i-ый элемент этого массива равным
истине. По умолчанию выставляем все элементы равными
лжи.
Информатика 10-11 классы Алгоритмы. Жадные алгоритмы.
17. Жадные алгоритмы Задача о размене монет Задача о коммивояжёре References
Алгоритм
1 Напишем функцию, вычисляющую по теореме Пифагора
расстояние между двумя городами. На вход координаты
городов (в виде двух массивов), на выходе вещественное
число.
2 Допустим, мы начинаем в точке (0,0). Так как нам надо
пройтись на всем N городам, зададим цикл от 0 до N − 1
(по количеству шагов).
3 Перед этим заведём две переменные, показывающие наше
текущее местоположение.
4 Вычислим ближайший к нашему текущему
местоположению город. Для этого пройдёмся по всем
городам, в которых мы ещё не были (циклом, не
рассматриваем такие города, у которых булевское значение
соответствующего элемента равно истине).
Информатика 10-11 классы Алгоритмы. Жадные алгоритмы.
18. Жадные алгоритмы Задача о размене монет Задача о коммивояжёре References
Алгоритм
5 Вычисление ближайшего города похоже на вычисление
минимального элемента массива, только с
дополнительным условием в виде истинности элемента
булевского массива. Расстояние между городами
вычисляем с помощью заданной функции.
6 Вычислив ближайший город, выведем его на экран, как
элемент маршрута. Заменим переменные, в которых мы
храним текущие координаты.
7 В булевском массиве напротив соответствующего города
поставим флажок ИСТИНА.
8 Повторяем операцию вплоть до последнего города.
Заканчиваем вместе с первым циклом.
Информатика 10-11 классы Алгоритмы. Жадные алгоритмы.
19. Жадные алгоритмы Задача о размене монет Задача о коммивояжёре References
Задание
Написать программу для решения задачи о коммивояжёре
по предложенному алгоритму.
Придумать такое расположение городов, когда
предложенный алгоритм работает очень некорректно (не
более 6 городов).
(*) Решить задачу в пространственном случае, когда для
каждого города хранятся широта и долгота, а расстояния
вычисляются на сфере, а не в плоскости.
Информатика 10-11 классы Алгоритмы. Жадные алгоритмы.
20. Жадные алгоритмы Задача о размене монет Задача о коммивояжёре References
References
Все презентации доступны на http://school.smirik.ru!
Вопросы, предложения, д/з: smirik@gmail.com
Информатика 10-11 классы Алгоритмы. Жадные алгоритмы.