Алгоритмы и структуры данных развернутый видеокурс


Алгоритмы и структуры данных: развернутый видеокурс

Обязательно для всех студентов, у кого на момент окончания зачётной недели средняя оценка за семестр с учётом дробной части (см. отчётность ниже) ниже 4.0. Для допуска к собеседованию необходимо иметь эту же оценку большей или равной 2.0.

Обязательная группа вопросов (все вопросы прошлогодние, по итогам этого года возможны изменения в списке):

  1. Оценка трудоёмкости и ресурсоёмкости алгоритмов. O большое.
  2. Бинарный поиск
  3. Сортировка слияниями
  4. Хэш-таблицы: принцип работы, основные операции
  5. Бинарные деревья поиска: принцип работы, основные операции
  6. Структуры данных: графы, варианты представления, применение
  7. Графовые алгоритмы: поиск в ширину
  8. Графовые алгоритмы: поиск в глубину
  9. Графовые алгоритмы: алгоритм Дейкстры
  10. Структуры данных Java: List / ArrayList / LinkedList
  11. Структуры данных Java: Stack / Queue / Deque / ArrayDeque / LinkedList
  12. Структуры данных Java: Set / Map / HashSet / HashMap / LinkedHashSet / LinkedHashMap
  13. Структуры данных Java: SortedSet / SortedMap / TreeSet / TreeMap

Дополнительная группа вопросов:

  1. Создание алгоритмов (хотя бы два метода из перечисленных)
    1. Рекуррентные алгоритмы
    2. Композиция
    3. Динамическое программирование и мемоизация
    4. Жадные алгоритмы
  2. Сложные сортировки (хотя бы одна из перечисленных)
    1. Пирамидальная сортировка
    2. Быстрая сортировка
    3. Сортировки за линейное время (подсчётом, карманная, другие)
  3. Хэш-таблицы: варианты реализации, характеристики
  4. Бинарные деревья поиска: балансировка, повороты
  5. Бинарные деревья поиска: красно-чёрное дерево
  6. Префиксные деревья
  7. Графовые алгоритмы (хотя бы два из перечисленных)
    1. A-Star
    2. Переборные алгоритмы
    3. Альфа-бета процедура
    4. Топологическая сортировка
    5. Поиск циклов
    6. Поиск мостов
    7. Поиск компонент связности
    8. Поиск минимального остовного дерева
  8. Эвристические алгоритмы (хотя бы один из перечисленных)
    1. Генетический алгоритм
    2. Алгоритм колонии муравьёв
    3. Алгоритм имитации отжига
  9. Вероятностные структуры данных
  10. NP-полные задачи: основные понятия, примеры задач
  11. Шифрование с открытым ключом: принцип работы
  12. Задачи (хотя бы две из перечисленных)
    1. Задача о поиске подмассива с максимальной суммой
    2. Задача о разрезании стержня
    3. Задача о ранце
    4. Задача коммивояжёра
    5. Задача о сумме подмножеств

Информация о курсе

Литература

  • Т. Кормен и др. Алгоритмы. Построение и анализ
  • Д. Кнут. Искусство программирования
  • Н. Вирт. Алгоритмы + Структуры данных = Программы
  • Е. В. Пышкин. Структуры данных и алгоритмы: реализация на C/C++ — книга есть в Интранете
  • McDowell, G. L. Cracking the Coding Interview: 150 Programming Questions and Solutions.
  • S. Dasgupta, C. H. Papadimitriou, and U. V. Vazirani. Algorithms.

Электронные ресурсы

Среды разработки (IDE)

Отчетность:

  • индивидуальный проект
  • соревновательный проект
  • упражнения

За каждую из трёх частей студенту ставится оценка от 2.5 до 5 (примерно соответствующая общепринятой пятибалльной системе), или 0 в случае отсутствия данной части или неудовлетворительного её состояния. Далее считается среднее арифметическое из двух лучших оценок, из него выводятся оценки за семестр по следующему принципу:

  • От 4.5 до 5 = “Отлично” за курсовой проект, “Зачёт” по теории автоматом
  • От 4 до 4.49 = “Хорошо” за курсовой проект, “Зачёт” по теории автоматом
  • От 3.5 до 3.99 = “Хорошо” за курсовой проект, “Зачёт” по теории по итогам собеседования
  • От 3 до 3.49 = “Удовлетворительно” за курсовой проект, “Зачёт” по теории по итогам собеседования
  • От 2 до 2.99 = “Неудовлетворительно” за курсовой проект (необходимо улучшать оценку), “Зачёт” по теории по итогам собеседования
  • От 0 до 1.99 = “Неудовлетворительно” за курсовой проект (необходимо улучшать оценку), “Незачёт” по теории (необходимо улучшать оценку)


Допустимые языки для выполнения всех трёх частей практики: Java, Kotlin.

Страницы:

Презентации лекций

Внимание: презентации, помеченные (2020), прошлогодние.

Примеры индивидуальных проектов на осенний семестр 2020/20 уч. год

Внимание: в качестве темы не разрешается выбирать задачу, решение которой дублирует классы из стандартной библиотеки Java (например, хэш-таблица с разрешением коллизий методов цепочек или красно-чёрное дерево). Выбранную тему обязательно обсудить с преподавателем практики, уточнить формулировку темы и оценить вместе с ним, адекватную ли сложность она имеет. Преподаватели практики оставляют за собой право ограничить оценку за выполнение сравнительно лёгких проектов значениями 4.5 или 4.0.

  • ИИ для логических игр (все эти темы имеют высокую сложность, особенно для игры в шашки)
    • Реверси
    • Волк и овцы
    • Мельница
    • Шашки русские
    • Шашки американские
  • Решатели (тоже темы высокой сложности)
    • Автоматический решатель игры в 15
    • Автоматический решатель кубика или пирамидки Рубика
    • Автоматический решатель сапёра
    • Автоматический решатель тетриса (по выбору: считать, что известна вся последовательность приходящих фигур, или считать, что известно только несколько следующих фигур, например две)
    • Решатель для игры terra incognita
    • SAT-солвер (использовать входные файлы в формате DIMACS)
  • Реализация в виде класса на Java одного из видов бинарного дерева поиска с авторегулировкой, например приведённые ниже (темы имеют среднюю сложность). Класс дерева должен реализовывать соответствующий интерфейс Java в обобщённом виде (Set или Map , в более сложном варианте SortedSet или SortedMap ). Для усложнения задачи в неё можно добавить визуализацию.
    • АВЛ-дерево
    • Scapegoat tree
    • Splay tree
    • Трип/дерамида (оно же Декартово дерево)
  • Реализация в виде класса на Java одного из видов хеш-таблицы, например приведённые ниже (темы имеют среднюю сложность). Класс таблицы должен реализовывать соответствующий интерфейс Java в обобщённом виде (Set или Map ). Класс должен обеспечивать возможность неограниченного роста размера таблицы (в пределах памяти компьютера, естественно). Класс может обеспечивать или нет предсказуемый порядок перебора элементов (предсказуемый порядок, естественно, сложнее). Для усложнения задачи в неё можно добавить визуализацию.
    • Хеш-таблица с открытой адресацией
    • Хеш-таблица с двойным хешированием
  • Реализация в виде класса на Java одной из прочих структур данных. Точный вид задания согласовывается с преподавателем. Предполагается, как минимум, возможность неограниченного роста структуры данных и максимальная её универсальность. Возможно добавление визуализации
    • Скиплист (он же Список с пропусками, с реализацией List<>, Set<> или SortedSet<> в зависимости от желаемой сложности)
    • 32- или 64- арное дерево поиска для целых чисел (с реализацией Set<>(Map<>) или SortedSet<>(SortedMap<>) в зависимости от желаемой сложности)
    • суффиксное дерево (с алгоритмом Укконена или без него в зависимости от желаемой сложности)
    • бинарная куча
    • фильтр Блума (с произвольным количеством хеш-функций или с фиксированным их количеством в зависимости от желаемой сложности, с реализацией Set<>, частично на заглушках)
  • Варианты посложнее:
    • Хеш-дерево (например, hash array-mapped trie, с реализацией Set<> или Map<>)
    • Суффиксный массив с префиксным массивом (с реализацией основных операций для строк, набор можно варьировать, с построением за O(N) для особой сложности)

Соревновательный проект

В качестве соревновательного проекта использована задача с конкурса ICFPC 2020.

  • можно участвовать в одиночку или командой из двух человек
  • требуется зарегистрироваться на страничке соревнования до конца октября
  • для решения задачи следует создать программу на Java, Kotlin или другом языке программирования; программа должна находиться в репозитории, по требованию преподавателей к нему предоставляется доступ для проверки решения
  • соревнование проходит в два этапа, ориентировочно первый в середине ноября, второй и последний в середине декабря
  • начиная с момента окончания первого этапа соревнования другие участники в него не принимаются
  • исходя из абсолютных и относительных успехов участников в конце каждого этапа им ставятся оценки
Мастер Йода рекомендует:  Биржевой брокер от Яндекс.Денег

Упражнения

Пройдут в срок с 20 сентября по 8 декабря (ориентировочно). Учебный проект с задачами будет здесь. Задания сдаются через систему Котоед.

  1. Задачи на сортировку
  2. Общие задачи на построение алгоритмов
  3. Задачи на деревья
  4. Задачи на хэш-таблицы (урок экспериментальный, для желающих)
  5. Задачи на графы
  6. Задачи на динамическое программирование
  7. Задачи на эвристические алгоритмы

Требуется решить по две задачи хотя бы из четырёх имеющихся уроков. Решать можно как на Котлине, так и на Java. Допустимая версия Котлина: 1.3.*, допустимая версия JDK: 1.8 (в связи с проблемами с совместимостью не разрешается использовать функции и возможности из более новых версий JDK).

Требования к решению:

  • Код (в приличном стиле)
  • В комментарии (обязательно)
    • Оценка трудоёмкости
    • Оценка ресурсоёмкости – можно опустить, только если O(1)
  • Тесты каждой из следующих групп:
    • Обычные случаи
    • Краевые случаи (мало данных, нестандартный ответ и т.п.)
    • Длинные (на производительность)
    • В некоторых задачах могут уже быть тесты всех групп
    • Обязательно дописать к тестам задачи хотя бы одну проверку (даже если по вашему мнению тестов достаточно)
    • Тесты должны проходить (если вы считаете, что они не проходят из-за бага в тестах, стоит написать комментарий по этому поводу)
  • 23 октября 23:59 — приём задач из уроков 1-2 заканчивается
  • 17 ноября 23:59— приём задач из уроков 3-4 заканчивается
  • 8 декабря 23:59 — приём задач из уроков 5-7 заканчивается

От чего зависит оценка:

  • Количество и сложность задач
  • Из каждого урока оцениваются две самые сложные задачи
    • Качество кода + Качество алгоритма
    • Правильность оценки алгоритма
    • Полнота тестов


Алгоритмы и структуры данных для начинающих: сложность алгоритмов

Вне зависимости от того, являетесь ли вы студентом или работающим программистом, и от того, в какой области вы работаете, знание алгоритмов и структур данных необходимо. Это важные строительные блоки для решения задач.

Конечно, вы наверняка пользовались списком или стеком, но знаете ли вы, как они работают? Если нет, то вы не можете быть уверены, что принимаете правильные решения относительно того, какой алгоритм использовать.

Понимание алгоритмов и структур данных начинается с умения определять и сравнивать их сложность.

«Росбанк», Москва, до 60 000 ₽ (до налогов)

Если не хочется копаться и разбираться, но есть потребность быстро понять основы оценки сложности, идите сюда.

Асимптотический анализ

Когда мы говорим об измерении сложности алгоритмов, мы подразумеваем анализ времени, которое потребуется для обработки очень большого набора данных. Такой анализ называют асимптотическим. Сколько времени потребуется на обработку массива из десяти элементов? Тысячи? Десяти миллионов? Если алгоритм обрабатывает тысячу элементов за пять миллисекунд, что случится, если мы передадим в него миллион? Будет ли он выполняться пять минут или пять лет? Не стоит ли выяснить это раньше заказчика?

Все решают мелочи!

Порядок роста

Порядок роста описывает то, как сложность алгоритма растет с увеличением размера входных данных. Чаще всего он представлен в виде O-нотации (от нем. «Ordnung» — порядок) : O(f(x)), где f(x) — формула, выражающая сложность алгоритма. В формуле может присутствовать переменная n, представляющая размер входных данных. Ниже приводится список наиболее часто встречающихся порядков роста, но он ни в коем случае не полный.

Константный — O(1)

Порядок роста O(1) означает, что вычислительная сложность алгоритма не зависит от размера входных данных. Следует помнить, однако, что единица в формуле не значит, что алгоритм выполняется за одну операцию или требует очень мало времени. Он может потребовать и микросекунду, и год. Важно то, что это время не зависит от входных данных.

Линейный — O(n)

Порядок роста O(n) означает, что сложность алгоритма линейно растет с увеличением входного массива. Если линейный алгоритм обрабатывает один элемент пять миллисекунд, то мы можем ожидать, что тысячу элементов он обработает за пять секунд.

Такие алгоритмы легко узнать по наличию цикла по каждому элементу входного массива.

Логарифмический – O( log n)

Порядок роста O( log n) означает, что время выполнения алгоритма растет логарифмически с увеличением размера входного массива. (Прим. пер.: в анализе алгоритмов по умолчанию используется логарифм по основанию 2). Большинство алгоритмов, работающих по принципу «деления пополам», имеют логарифмическую сложность. Метод Contains бинарного дерева поиска (binary search tree) также имеет порядок роста O(log n).

Линеарифметический — O(n·log n)

Линеарифметический (или линейно-логарифмический) алгоритм имеет порядок роста O(n·log n). Некоторые алгоритмы типа «разделяй и властвуй» попадают в эту категорию. В следующих частях мы увидим два таких примера — сортировка слиянием и быстрая сортировка.

Квадратичный — O(n 2 )

Время работы алгоритма с порядком роста O(n 2 ) зависит от квадрата размера входного массива. Несмотря на то, что такой ситуации иногда не избежать, квадратичная сложность — повод пересмотреть используемые алгоритмы или структуры данных. Проблема в том, что они плохо масштабируются. Например, если массив из тысячи элементов потребует
1 000 000 операций, массив из миллиона элементов потребует 1 000 000 000 000 операций. Если одна операция требует миллисекунду для выполнения, квадратичный алгоритм будет обрабатывать миллион элементов 32 года. Даже если он будет в сто раз быстрее, работа займет 84 дня.

Мы увидим пример алгоритма с квадратичной сложностью, когда будем изучать пузырьковую сортировку.

Наилучший, средний и наихудший случаи

Что мы имеем в виду, когда говорим, что порядок роста сложности алгоритма — O(n)? Это усредненный случай? Или наихудший? А может быть, наилучший?

Обычно имеется в виду наихудший случай, за исключением тех случаев, когда наихудший и средний сильно отличаются. К примеру, мы увидим примеры алгоритмов, которые в среднем имеют порядок роста O(1), но периодически могут становиться O(n) (например, ArrayList.add ). В этом случае мы будем указывать, что алгоритм работает в среднем за константное время, и объяснять случаи, когда сложность возрастает.

Самое важное здесь то, что O(n) означает, что алгоритм потребует не более n шагов.

Что мы измеряем?

При измерении сложности алгоритмов и структур данных мы обычно говорим о двух вещах: количество операций, требуемых для завершения работы (вычислительная сложность), и объем ресурсов, в частности, памяти, который необходим алгоритму (пространственная сложность).

Алгоритм, который выполняется в десять раз быстрее, но использует в десять раз больше места, может вполне подходить для серверной машины с большим объемом памяти. Но на встроенных системах, где количество памяти ограничено, такой алгоритм использовать нельзя.

В этих статьях мы будем говорить о вычислительной сложности, но при рассмотрении алгоритмов сортировки затронем также вопрос ресурсов.

Операции, количество которых мы будем измерять, включают в себя:

  • сравнения («больше», «меньше», «равно»);
  • присваивания;
  • выделение памяти.

То, какие операции мы учитываем, обычно ясно из контекста.

К примеру, при описании алгоритма поиска элемента в структуре данных мы почти наверняка имеем в виду операции сравнения. Поиск — это преимущественно процесс чтения, так что нет смысла делать присваивания или выделение памяти.

Когда мы говорим о сортировке, мы можем учитывать как сравнения, так и выделения и присваивания. В таких случаях мы будем явно указывать, какие операции мы рассматриваем.

Продолжение следует

На этом мы заканчиваем знакомство с анализом сложности алгоритмов. В следующий раз мы рассмотрим первую структуру данных — связный список.


Литература для изучения «Алгоритмов и структуры даных»?

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

Если рассматривать математический аппарат, который нужен для полного понимания доказательств всех описанных алгоритмов, то это комбинаторика, начала анализа, дискретная теория вероятностей, начала линейной алгебры.

Вам уже посоветовали отличные книги.
В 2020 году, так же доступно несколько более прогресивных форматов обучения:

  1. Курсы
    • Алгоритмы: теория и практика. Методы (https://stepik.org/course/217)
    • Алгоритмы: теория и практика. Структуры данных (https://stepik.org/course/1547)
    • Специализации https://www.coursera.org/specializations/algorithms,https://www.coursera.org/specializations/data-stru.

    обязательно выполняйте практические задания, которые дают на курсах, без них знания быстро вывертиваются из головы.

Сразу начинайте решать задачки с leetcode.com, hackerrank.com и т.п.

  • Участвуйте в соревнованиях типа Яндекс.Алгоритм или Russian CodeCup первые 1-2 задачи можно решить не имея специальных знаний по алгоритмам.
  • Алгоритмы и структуры данных

    Без знаний алгоритмов начинающий программист часто изобретает велосипед вместо того, чтобы решать задачу уже проверенными способами. Современные языки программирования всячески облегчают жизнь разработчикам, выполняя множество “грязной” работы. С одной стороны, это хорошо, но с другой — многие программисты перестают понимать, как на самом деле работает компьютер, или имеют весьма поверхностное представление об алгоритмах и структурах данных, лежащих в основе используемых ими решений.

    На курсе мы подробно исследуем язык C — это превосходная возможность “пощупать” механизмы, которые лежат в основе современных фреймворков.

    Алгоритмы и структуры данных

    Осень 2020

    Цель курса — обучить основам алгоритмического программирования, привить практические навыки решения задач с помощью базовых алгоритмов и структур данных, сформировать правильное представление о времени работы и эффективности различных алгоритмов и структур данных.

    В результате освоения дисциплины обучающиеся должны Знать: – Основные структуры данных: массив, стек, очередь, дек, очередь с приоритетом. – Алгоритмы сортировки: квадратичные, пирамидальную, сортировку слиянием, QuickSort, поразрядную. – Алгоритмы поиска порядковых статистик. – Методы оптимизации в задачах динамического программирования. – Структуры данных для создания эффективных контейнеров: хеш-таблицы, двоичные деревья поиска, АВЛ-деревья, декартовы деревья. – Алгоритм кодирования Хаффмана для сжатия данных. Уметь: – Реализовывать алгоритмы и их комбинации на языке C++ для решения поставленных задач. – Находить применения классическим алгоритмам в задачах, возникающих в процессе разработки ПО. Владеть: – Методами отладки кода на языке C++. – Навыками оценки сложности алгоритмов.

    Курс представляет собой изучение базовых алгоритмов и структур данных, необходимых программистам для качественного решения ежедневных задач. В курсе представлены элементарные алгоритмы для работы с массивами, сортировки. Рассказывается об элементарных структурах данных: стек, очередь, списки, куча. Также в курс включены различные деревья поиска и хеш-таблицы. Курс дает представление о том, как оценивать эффективность алгоритмов, все алгоритмы курса оцениваются по времени работы и по количеству используемой дополнительной памяти.

    Контроль знаний по курсу проводится в балльно-рейтинговой форме с 2 тематическими рубежными контролями и экзаменом. На практических занятиях студентам раздаются задачи, обсуждаются детали реализации алгоритмов, выделяется время для решения задач и выполняется проверка задач семинаристом. Перед тем как сдать задачу семинаристу студент отправляет решение задачи в тестирующую систему.

    (ITVDN) Видеокурс Алгоритмы и структуры данных

    Тема в разделе «Курсы по программированию», создана пользователем Бомбардир, 4 май 2014 .

      li» data-history=»on» >
    • (ITVDN).
    • Отзывы (6)

    Статус темы: Закрыта.

    • все прошло на ура,спасибо за работу.

      Организатору — СПАСИБО ЗА ОРГАНИЗАЦИЮ И ЗА ОТЛИЧНОЕ КАЧЕСТВО!! — Я сам программирую на других языках, Си-Шарпом не интересуюсь, но примеры очень интересные, хорошо мозги прокачивают в плане понимания алгоритмов, и перенести их легко на любой язык, если понять суть процесса, описанную в данном курсе.

      Когда начинать изучать алгоритмы и структуры данных?

      Дайте совет, когда и как стоит приступать к этим вкусняшкам?

      Когда у вас появятся релевантные задачи. Например, как вам уже рекомендовали, «олимпиадные». (рекомендую codeeval и codewars). Вы можете сначала решить задачу каким-либо «наивным» способом, затем поискать (спросить) подходящую структуру данных, сравнить производительность подходов. На мой взгляд, привязка к какой-никакой практике позволяет знаниям лучше усваиваться.

      Еще могу порекомендовать курс (там две части) на coursera от Stanford за авторством Tim Roughgarden. Очень доступно объясняет.

      Записки программера

      Страницы

      четверг, 30 мая 2013 г.

      Видеолекции курса Алгоритмы и структуры данных. Часть 2

      Видеолекции курса Алгоритмы и структуры данных. Часть 2.

      Лекция 1. Пути в графах.
      Кратчайшие пути при наличии рёбер отрицательного веса: алгоритм Беллмана-Форда; определение наличия цикла отрицательного веса в графе. Кратчайшие пути в ациклических ориентированных графах. Кратчайшие пути между всеми парами вершин: алгоритм Флойда-Уоршолла, алгоритм Джонсона.

      Лекция 2. Жадные алгоритмы.
      Общие принципы жадного метода. Непрерывная и дискретная задачи о рюкзаке. Задача о выборе заявок. Минимальное покрывающее дерево: свойство разреза, жадная стратегия.


      Лекция 3. Алгоритм Крускала, система непересекающихся множеств.
      Алгоритм Крускала, система непересекающихся множеств.

      Семинар 1. Алгоритм Прима.

      Лекция 4. Числовые алгоритмы.
      Система непересекающихся множеств: доказательство оценки на время работы алгоритма с эвристикой сжатия путей. Числовые алгоритмы. Основные арифметические операции: сложение, умножение, деление, нахождение наибольшего общего делителя.

      Лекция 5. Проверка простоты числа.
      Арифметика сравнений: сложение, умножение, возведение в степень, нахождение обратного по модулю. Вероятностный тест на простоту.

      Лекция 6. RSA.
      Генерация случайных простых чисел. Криптография: схемы с закрытым ключом, RSA.

      Лекция 7. Быстрое преобразование Фурье.
      Быстрое вычисление значений многочлена в точках: два способа задания многочленов — коэффициентами и значениями в точках; вычисление значений многочлена в точках методом «разделяй и властвуй»; дискретное преобразование Фурье; быстрое преобразование Фурье. Интерполяция: интерполяция в терминах матриц; матрица Вандермонда; интерполяция как домножение на обратную матрицу.

      Лекция 8. Линейное программирование.
      Линейное программирование: общий вид задачи, двойственность. Задача о максимальном потоке. Задача о паросочетании в двудольном графе.

      Лекция 9. Симплекс-метод.
      Подробнее о двойственности, симплекс-метод.

      Лекция 10. Алгоритм Кнута-Морриса-Пратта.
      Задача поиска подстроки в строке. Наивный алгоритм, алгоритм Карпа-Рабина, алгоритм Кнута-Морриса-Пратта.

      Лекция 11. Суффиксные деревья.
      Построение суффиксного дерева за линейное время.

      Лекция 12. NP-полные задачи.
      Задачи поиска, классы P и NP. Сведения. Доказательство NP-полноты задач выполнимости, 3-выполнимости, выполнимости схемы, задачи о независимом множестве.

      Алгоритмы для разработчиков

      В январе 2020 года

      Знание классических алгоритмов и структур данных — обязательное требование, которое предъявляют крупные IT-компании к претендентам на вакансию Middle Developer. Именно понимание принципов работы алгоритмов и структур данных позволяет повысить производительность программ и улучшить качество кода.

      Поэтому для вас мы разработали уникальную авторскую программу от инженера-программиста из Лаборатории Касперского, которая поможет на профессиональном уровне:

      — использовать готовые алгоритмы и структуры данных и грамотно создавать свои под конкретную задачу;
      — владеть техникой вычисления сложности алгоритмов;
      — применять в работе продвинутые структуры данных: хэш-таблицы, графы, деревья поиска и др.;
      — решать алгебраические задачи и задачи динамического программирования.

      Для кого этот курс?
      Программа создана для Junior/Middle разработчиков, владеющих разными языками программирования. Откроет огромные перспективы для развития тем, кто застоялся на месте, и тем, кто хочет вырасти профессионально, избежав многих ошибок. И, конечно, курс просто жизненно необходим всем, кто прогулял или недостаточно серьёзно относился к занятиям по алгоритмам в вузе.

      Программирую на С++ и Python в течение 18 лет, как хобби — играю на фортепиано. Работаю в Лаборатории Касперского, окончил курс по С++ в Otus и занимаюсь на курсе DataScience. Сейчас являюсь наставником на курсе С++. Специально для проекта OTUS создал программу «Алгоритмы для разработчиков».

      Этот курс для тех, кто не проходил или пропустил алгоритмы в своем ВУЗе, а также для всех программистов, интересующихся данной темой: от любителей до профессионалов. Вы узнаете о популярных алгоритмах и структурах данных, научитесь их реализовывать и применять, сможете претендовать на вакансии в лучшие компании России и всего мира: Яндекс, Google, Facebook!

      Присоединяйтесь, будет круто!

      Опыт разработки программного обеспечения с 1990 года. Работал и с привычными ныне dos, windows и linux системами, и с редко встречающимися специализированными вычислительными устройствами (системами реального времени, ibm i). Профессионально использую C++, С#, assembler, java, RPG.

      Закончил МАИ, к.т.н., старший преподаватель, кафедра «Робототехнические и интеллектуальные системы».
      Участвовал в проектах разработки программного обеспечения, связанного с навигацией. Решал задачи для процессоров цифровой обработки сигналов в операционных системах реального времени включая параллельную обработку данных.
      Разработал и вёл курс вероятностных конечных автоматов.

      В 2000-2002г самостоятельно разработал, используя C++ и Dephi, биллинговый комплекс АСР «ИнтБиллинг» (оборудование VocalTec). Сертификат № ОС/1-СТ-219 Министерства Российской Федерации по связи и информатизации. Биллинг выставлялся на СвязьЭкспоком, имел инсталляции заказчиков.

      Долгое время работал с Java2EE (back-end и front-end). Сначала в первом агрегаторе контента для сотовых устройств «Никита-мобайл». Затем в компании «Микротест» занимался разработкой и реализацией систем информирования пользователя, основанных на web интерфейсе и являющихся частью больших распределённых систем, таких как биллинговые системы (Oracle BRM), CRM (Oracle Siebel), интеграционные шины (Tibco), SMS шлюзы.
      С 2020 года — архитектор направления Equation на ibm i в одном из крупнейших банков страны.

      Люблю и умею преподавать. Более 20 лет помимо программирования изучаю и обучаю айкидо (5й дан Айкикай).

      Подобно технике боевых искусств мы изучаем базис: языки, паттерны, платформы. Чтобы затем перевести это всё в зодчество ПО, его архитектуру. С другой стороны, программный продукт всегда есть отражение создателя. Любая система, согласно закону Конвея, есть отражение людей, создавших её. Программирование суть искусство в мире электронных форм. Взрослый ничем не отличается от маленького ребенка, играющего с кубиками. Только кубики другие. Творчество это основа всего. И свобода ошибаться и искать. Обучение это игра и освоение новых миров.

      Профессиональный программист. Преподаватель языка Java в колледже.
      Автор видеокурсов по C#, Java, PHP

      20 лет опыта ведущим программистом в разных фирмах и опыта преподавания в университете, колледже. 6 лет опыта ведения вебинаров и создания видеокурсов

      Три самых крупных завершенных проекта:
      PHP. Служба знакомств в интернете — PHP, MySQL, FreeBSD, C/C++
      C#. Программа расчёта заработной платы на АЭС — C#, MS-SQL Server
      Java. Видеокурс создания игры Сапёр на Java: https://goo.gl/24DgBg

      Статьи на Habrahabr:
      Как я создавал методику изучения C# — habr.com/post/239825/
      Об альтернативном образовании и про C# — habr.com/post/257957/
      Изучение C# — Практический подход — habr.com/post/304142/

      Участие в IT-конференциях в Литве, призовое место в конкурсе программирования InfoBalt, призовое место на республиканской олимпиаде по математике и информатике

      С окончания школы в 1996 году постоянно преподавал информатику в университете, школе, на кружках, в ДДТ, на предприятиях, в колледже. С 2013 года ведет вебинары онлайн, записывает видеокурсы
      https://www.VideoSharp.info/

      В 2002 году закончил Вильнюсский государственный университет по специальности «Магистр математики и информатики», а в 2008 году по специальности «Учитель профессии»

      «В детстве меня вдохновила «Занимательная ***» серия книг Я. И. Перельмана. Считаю своим призванием создать занимательную методику обучения программированию.»

      Окончил Волгоградский государственный технический университет по специальности «Автоматизированные системы обработки информации и управления». Увлёкся программированием ещё в студенческие годы (в 2010 году) и остановиться так и не смог. В коммерческой разработке с 2012 года.
      Работал с проектами разного масштаба, прошёл путь от Junior до Senior. С 2020 года — старший инженер-программист в EPAM Systems, с 2020 по май 2020 — технический руководитель по разработке софта в Skywind Group.
      Участвовал в международном проекте компании Ericsson, занимался web-программированием и собственными проектами.
      Является специалистом по архитектуре веб-приложений, хорошо знает JS/NodeJS, Mongo, MySQL, фреймворки Express, Koa2, React, AngularJS. Уверен, что в программировании всё приходит с практикой.

      Один из разработчиков academy.cppstudio.com — бесплатного интерактивного сервиса по обучению С++. Свыше 5 лет опыта разработки приложений на C++ и C#.
      Используемые технологии и фрэймворки:
      WPF, WinForms, EF6, ASP.NET MVC5, ASP.NET Core 2.

      Михаил работает в отделе машинного обучения компании Jet Infosystems. Занимается проектами по агрегации отзывов, по анализу и оптимизации производства крупных промышленных компаний. В data science пришел из промышленного программирования на Python, где разрабатывал код для «толстого клиента» в проекте по созданию «умных окон».

      Ранее учил талантливых школьников программированию, машинному обучению и программированию учебных моделей спутников.

      Область интересов: data science, математика, космос и Python.
      Мой взгляд на программирование: с великой силой приходит великая ответственность.

      Видеоурок по информатике «Алгоритмы, величины, структура алгоритмов»

      На этом уроке закрепляется ранее изученный материал. Рассказывается, что такое алгоритм, какие бывают данные и величины. Рассматриваются разновидности типов данных и их основные отличия. Изучается структура алгоритмов, а также такие базовые алгоритмические структуры и способы их записи, как следование, ветвление и цикл.

      Урок начинается с рассмотрения этапов решения задач. Всего их шесть: постановка задачи, формализация задачи, построение алгоритма, составление программы на языке программирования, отладка и тестирование программы, проведение расчётов и анализ полученных результатов.

      Исходя из этапов решения задач, можно сделать вывод, что программист должен уметь строить алгоритмы, знать языки программирования, а также уметь работать в соответствующей системе программирования. В основе всей работы лежит развитое алгоритмическое мышление.

      Многие столетия разрабатывались алгоритмы для решения всё новых и новых классов задач, но само понятие алгоритма не имело точного математического определения.

      В наше же время алгоритм — это последовательность команд управления каким-либо исполнителем.

      Также в уроке рассматриваются величины. Величинами — это различные информационные объекты. К таким объектам относятся числа, символы, коды и так далее. Таким образом, алгоритмы работы с величинами — это алгоритмы, предназначенные для управления компьютером.

      Любая величина имеет три основных свойства: имя, значение и тип. Процессор же различает величины по адресу ячеек памяти, в которых они хранятся.

      Каждая величина имеет свой тип. К основным типам данных относятся целый, вещественный, логический и символьный типы. Типы данных различаются между собой по трём критериям: множество допустимых значение, множество допустимых операций, форма внутреннего представления.

      Помимо всего вышесказанного, в уроке рассматриваются такие базовые структуры, как следование, ветвление и цикл.

      Следование — это линейная последовательность действий.

      Ветвление — это алгоритмическая альтернатива. Ветвление имеет две формы записи: полную и неполную.

      Цикл — это повторение некоторой группы действий по условию. Существуют два типа цикла: цикл с предусловием (цикл-пока), цикл с постусловием (цикл-до).

      Помимо базовых структур, в уроке рассматриваются и сложные структуры. Сложный алгоритм состоит из соединённых между собой базовых структур. Между собой эти структуры могут соединяться двумя способами: последовательным и вложенным.

      Мастер Йода рекомендует:  Дорвеи как способ продвижения
    Добавить комментарий