ТОП-16 курсов по алгоритмам и структурам данных в 2022 году: обучение онлайн. Платные и бесплатные. Рейтинг, сравнение, стоимость.

Содержание
Стоимость: Рассрочка на 12 месяцев — 4 298 ₽ / мес
  • Длительность — 6 месяцев
  • Онлайн в удобное время
  • Обучение на практике
  • Доступ к курсу навсегда.

Кому подойдёт этот курс:

  • Junior-разработчикам
    Вы научитесь применять алгоритмы и создавать новые, повысите свой профессиональный уровень и сможете устроиться в крупную компанию.
  • Middle-разработчикам
    Вы сможете участвовать в сложных проектах, связанных с высоконагруженными системами и обработкой больших объёмов данных.
  • Тем, кто готовится к олимпиадам
    Вы освоите базовые алгоритмы и структуры данных и сможете применять их для решения олимпиадных задач.

Чему вы научитесь:

  • Освоите базовые алгоритмы
    Сможете реализовывать базовые алгоритмы на массивах и разные виды алгоритмов бинарного поиска. Познакомитесь с принципами построения хэш-таблиц и способами решения проблемы коллизий хэш-функций.
  • Работать со структурами данных
    Научитесь работать с различными структурами данных: связными списками, очередями, стэками, двусторонними очередями (деками), кучами, бинарными, B-, R- и суффиксными деревьями, а также различными видами графов.
  • Познакомитесь с вариантами алгоритмов
    Научитесь реализовывать алгоритмы сортировки SelectionSort, QuickSort и MergeSort, сможете создавать и применять рекурсивные и жадные алгоритмы.
  • Поймете, как оценивать сложность алгоритмов
    Научитесь оценивать сложность различных типов алгоритмов по времени и памяти. Сможете оценивать программный код и находить способы его оптимизации и ускорения.

Программа

Вас ждут онлайн-лекции и практические задания.
18 тематических модулей, 103 онлайн-урока

  1. Введение в алгоритмы
    Познакомитесь со структурой курса, с понятиями алгоритма и структуры данных, а также с простейшими алгоритмами на массивах.
  2. Алгоритм бинарного поиска
    Узнаете, что такое бинарный поиск, как он работает, почему и насколько он эффективнее простого поиска перебором, а также о его возможностях и тонкостях.
  3. Хеш-таблицы и хеш-функции
    Изучите принципы построения хеш-таблиц и особенности работы с ними, познакомитесь с понятием хеш-функции, проблемой их коллизий, а также решением этой проблемы.
  4. Связные списки
    Узнаете, по каким принципам строятся и как работают односвязный и двусвязный списки, чем они лучше и чем хуже массивов.
  5. Стек и очередь
    Познакомитесь со структурами данных — стек, очередь и дек (двусвязная очередь), узнаете принципы их построения и работы.
  6. Алгоритмы сортировки
    Узнаете о принципах и особенностях популярных алгоритмов сортировки — SelectionSort, QuickSort и MergeSort. Научитесь оценивать на их примерах сложность алгоритмов по времени и памяти.
  7. Рекурсивные алгоритмы
    Научитесь создавать и применять рекурсивные алгоритмы, а также познакомитесь с принципами оценки их сложности.
  8. Сложность алгоритмов и О-нотация
    Узнаете, что такое О-нотация, научитесь оценивать сложность алгоритмов и различать их по памяти и времени.
  9. Жадные алгоритмы
    Познакомитесь с принципами работы жадных алгоритмов на примере итераций с двумя и тремя индексами, а также алгоритмов на строках.
  10. Деревья. Двоичные деревья поиска
    Узнаете о принципах работы и особенностях деревьев на примере бинарного дерева. Познакомитесь с алгоритмами поиска, добавления и удаления элементов из него.
  11. Деревья. Обход в ширину и глубину
    Познакомитесь со сложными типами деревьев, которые применяют на практике. Узнаете, как они устроены, и научитесь с ними работать.
  12. Куча (Heap)
    Изучите основные принципы балансировки деревьев. Познакомитесь со структурой данных «куча».
  13. Бор. Суффиксное дерево. B-дерево
    Узнаете, что такое суффиксные деревья и как они применяются в алгоритмах поиска и сжатия.
  14. Графы и рекурсивные алгоритмы
    Узнаете, какие бывают графы, что такое ребро, вершина, взвешенный и ориентированный граф.
  15. Топологическая сортировка и неочевидные применения графов
    Научитесь решать задачи обхода графов в ширину и в глубину и поиска кратчайшего пути. Познакомитесь с принципами топологической сортировки и другими задачами, которые решают на графах.
  16. Алгоритмы сжатия информации
    Изучите алгоритмы сжатия информации без потерь. Узнаете, по каким принципам работают современные алгоритмы архивации и какие алгоритмы используются для сжатия аудиофайлов и изображений.
  17. Битовые алгоритмы
    Научитесь работать с основными битовыми операциями и алгоритмами, которые часто применяют на практике. Изучите маски и битовые индексы.
  18. Алгоритмы хэширования. Криптографические алгоритмы.
    Изучите принципы работы алгоритма расчёта контрольных сумм CRC и алгоритмов хэширования MD5 и SHA. Познакомитесь с алгоритмами симметричного и асимметричного шифрования, а также популярными алгоритмами RSA и AES.
Стоимость: 48 400 ₽ или рассрочка на 12 месяцев — 4 033 ₽ / мес

После обучения на курсе вы:

  • Посмотрите по-новому на знакомые алгоритмы и структуры данных, освежите знания
  • Научитесь воспроизводить с нуля любой алгоритм и писать собственные
  • Поймете, как увеличивать производительность кода благодаря пониманию временной сложности и затратам по памяти
  • Сможете сравнивать структуры данных и выбирать оптимальный вариант для конкретной задачи.

Кому подойдет курс:

  • Начинающим разработчикам, чтобы заложить фундамент для успешных технических собеседований в сильные компании
  • Разработчикам, которые стремятся на уровень выше — на позиции Middle и Senior. Получите выгодное преимущество на фоне других кандидатов
  • Тем, кто хочет браться за сложные проекты и работать в IT-гигантах, и пройти многоступенчатый жесткий отбор
  • Разработчикам, которые хотят освежить знания, чтобы лучше решать текущие задачи.

Что вас ждет на курсе:

  1. Фундаментальная теоретическая база
    Чтобы научиться писать собственные алгоритмы, нужно знать досконально как они работают
  2. Много практики и решения алгоритмических задач
    Решаем упражнения и задачи различной сложности, в том числе олимпиадные и бизнес-задачи
  3. Домашние задания и обратная связь
    Будете самостоятельно решать задачи с установленным дедлайном и получать комментарии ментора. На онлайн-вебинарах сможете задавать вопросы преподавателю.
  4. Прокачаетесь в математике
    Математика для программистов нужна в серьезных проектах и нетривиальных задачах
  5. Подготовка к техническому собеседованию
    Во время курса вы потренируетесь в решении реальных задач с технических собеседований.

Краткая программа курса:

  1. Линейные структуры данных
  • Введение в алгоритмы и структуры данных
  • Определение асимптотики, оценка времени работы программы, оценка затраченной памяти
  • Односвязные и двусвязные списки, работа с ними
  • Практика — Реализация игрушечного менеджера памяти при помощи LRU и LFU кэша.
  1. Рекурсия и комбинаторика
  • Рекурсивные переборы, переборы всех комбинаторных объектов
  • Перестановки, разбиение на слагаемые, строки Фибоначчи
  • Перебор битовых масок
  • Практика — Упорядочивание данных во внешней памяти и поиск по ним. Программа для решения кроссвордов судоку.
  1. Сортировки и поиск
  • Сортировки, использование встроенной функции sort в языках
  • Алгоритм бинарного поиска. Бинарный поиск по ответу
  • Практика — Сортировка больших файлов с данными, потенциально не помещающихся в оперативную память.
  1. Хеширование
  • Принцип хеширования. Парадокс дней рождения. Известные алгоритмы хеширования.
  • Полиномиальное хеширование
  • Алгоритмы на строках. Хеш-таблица, встроенная реализация, собственная реализация
  • Практика — Генератор magnet-ссылок для файлов и папок.
  1. Графы
  • Графы. Представление графов и алгоритм DFS
  • Графы. Задача о поиске кратчайшего пути в графе, алгоритм BFS
  • Алгоритм Дейкстры
  • Практика — Travel planner — постройка кратчайшего маршрута для путешествия.
  1. Деревья
  • Графы. Представление деревьев. Алгоритмы на деревьях
  • Кучи
  • Бинарное дерево поиска, работа с ним
  • Красно-черное дерево, AVL-дерево
  • Деревья Хаффмана
  • Практика — Архиватор файлов.
  1. Динамическое программирование
  • Задачи динамического программирования. Базовые применения. Префиксные суммы
  • Задачи динамического программирования. Сложные задачи. Задача о рюкзаке
  • Конечные автоматы. Регулярные выражения
  • Практика — Реализация алгоритма Liquid Resize.
  1. Карьерный блок
  • Фишки прохождения технических собеседований в крупные IT-компании
  • Mock-интервью «Собеседование в Amazon».

Для кого этот курс?

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

Особенности курса:

  • Интерактивные вебинары. Преподаватели используют современные педагогические методики, чтобы вовлечь студентов в тему и помочь им лучше усвоить знания. Каждое занятие — это заряд алгоритмической энергии, который поможет вам в интенсивном обучении и выполнении самостоятельной работы, а разнообразие тем позволит сохранить запал до конца курса.
  • Глубокое погружение в темы. Каждый алгоритм вы изучите «на пальцах», на конкретных визуальных примерах, исследуете разные способы его реализации. Существует тысячи и тысячи самых разных алгоритмов, на изучение которых можно потратить многие годы. Нет смысла изучать их все сразу, мы ценим ваше время, поэтому отобрали самые важные, интересные и популярные алгоритмы. Вы пройдете такие актуальные темы как битовая арифметика, рекурсия, динамическое программирование, теория графов и др. Модуль 9 посвящен продвинутым алгоритмическим трендам, которые рассчитаны на опытных специалистов.
  • Можно проходить курс на любом языке программирования. На вебинарах преподаватели интерактивно рисуют и демонстрируют, как работает каждый алгоритм, некоторые из них пишем с нуля прямо на уроке, используя C#, Java или Python, после чего вы сможете самостоятельно написать этот алгоритм на вашем любимом языке программирования. Благодаря подробным объяснениям и визуализации, идея каждого алгоритма станет понятна.
  • Свое приложение для автопроверки. Вы напишете свою простую систему тестирования, с помощью которой сможете проверять часть заданий по заготовленным преподавателями тестам.
  • Проектная работа для портфолио. К концу курса вы напишете свое приложение и сможете представлять его на собеседовании. Многие студенты придумывают и реализуют интересные проекты: распознавание рукописных цифр, генерация прохождения лабиринтов, решение заданий судоку и так далее.

Программа обучения

Модуль 1. Простые алгоритмы и базовые структуры данных

  • Тема 1. Циклы и рекурсия
  • Тема 2. Как выполнять домашние задания
  • Тема 3. Алгебраические алгоритмы
  • Тема 4. Битовая арифметика
  • Тема 5. Базовые структуры данных

Модуль 2. Алгоритмы сортировки

  • Тема 6. Простые сортировки
  • Тема 7. Пирамидальная сортировка
  • Тема 8. Быстрая и внешняя сортировка
  • Тема 9. Линейная сортировка

Модуль 3. Деревья поиска

  • Тема 10. Двоичные деревья поиска АВЛ
  • Тема 11. Красно-чёрные деревья
  • Тема 12. Другие варианты деревьев поиска

Модуль 4. Хеш-таблицы

  • Тема 13. Хэш-функции и хэш-таблицы
  • Тема 14. Разрешение коллизий
  • Тема 15. Универсальное и идеальное хэширование

Модуль 5. Теория графов

  • Тема 16. Определения и представления
  • Тема 17. Поиск и сортировка
  • Тема 18. Минимальный скелет
  • Тема 19. Кратчайший путь
  • Тема 20. Управление памятью
  • Тема 21. Задача коммивояжёра

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

  • Тема 22. Алгоритм Бойера-Мура
  • Тема 23. Алгоритм Ахо-Корасика
  • Тема 24. Алгоритм Кнута-Морриса-Пратта
  • Тема 25. Алгоритмы сжатия
  • Тема 26. Шифрование данных

Модуль 7. Динамическое программирование

  • Тема 27. Динамическое программирование
  • Тема 28. Алгоритмы кэширования

Модуль 8. Олимпиадное программирование

  • Тема 29. Сложная задача
  • Тема 30. Dancing Links

Модуль 9. Вероятностные алгоритмы

  • Тема 31. Фильтр Блума
  • Тема 32. Алгоритмы MinHash, SimHash
  • Тема Алгоритмы HyperLogLog, Count-Min Sketch

Модуль 10. Проектная работа

  • Тема 34. Выбор темы и организация проектной работы
  • Тема 35. Консультация по проектам и домашним заданиям
  • Тема 36. Защита проектных работ
  • Тема 37. Подведение итогов курса.

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

  • написать кастомную хэш-таблицу
  • реализовать свой менеджер памяти с garbage collector
  • реализовать B-tree индекс для СУБД
  • любая тема на выбор студента, связанная с продвинутыми алгоритмами и структурами данных.

После обучения вы:

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

Для кого этот курс:

  • Кто готовится к интервью в Google и Facebook
    Алгоритмы и структуры данных — фокус технических интервью в топовых технологических компаниях.
  • Кто завершил nFactorial Start
    Данный курс — логическое продолжение курса «Создание сильной базы в компьютерных науках для начинающих».
  • Для спортивных программистов
    Тех, кто хочет улучшить свой рейтинг в LeetCode и Codeforces, а также участвовать в олимпиадном программировании (IOI, ACM ICPC).

Учебный план

  • Неделя 1
    Анализ алгоритмов. Временная сложность. Использование памяти. Cтеки и очереди. Бинарный поиск. Связанные списки.
  • Неделя 2
    Java для продвинутых: наследование, generics, интерфейсы, итераторы. Элементарная сортировка: выбором, вставкой, двоичный поиск, компараторы. Сортировка слиянием. Быстрая сортировка.
    Проект — Реализация двухсторонней и вероятностной очередей с помощью массивов и связанных списков.
  • Неделя 3
    Приоритетная очередь. Двоичная куча. Сортировка кучей. Хэш-таблица. Рекурсия. Backtracking.
  • Неделя 4
    Динамическое программирование: кратчайший путь в ориентированном графе. Жадные алгоритмы. Алгоритмы потока.
    Проект — Content-aware cжатие фотографий, сохраняющее самые интересные объекты на фото.
  • Неделя 5
    Недельные каникулы, чтобы перевести дух и нагнать не до конца понятый материал.
  • Неделя 6
    Двоичное дерево поиска. Сбалансированные деревья поиска.
  • Неделя 7
    Графы. Представление. DFS — поиск в глубину. Поиск пути. Неориентированные и ориентированные графы. BFS — поиск в ширину. Топологическая сортировка.
    Проект — Решение головоломки “Пятнашки / Игра в 15” с помощью A*-поиска.
  • Неделя 8
    Кратчайший путь в графе. Алгоритм Беллмана-Форда. Алгоритм Дейкстры.
  • Неделя 9
    Топологическая сортировка. Минимальное остовное дерево.

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

Что вас ждёт на курсе:

  • Это курс о базовых алгоритмах и структурах данных. Благодаря нему вы научитесь быстрее писать чистый код, видеть разные варианты решения задачи и сравнивать их по эффективности.
  • Если вы планируете менять место работы, знание алгоритмов пригодится на собеседованиях — в программу курса входит пробное алгоритмическое собеседование с обратной связью. Кроме того, вы получите консультацию или сопровождение при поиске работы.
  • Курс рассчитан на 4 месяца при нагрузке примерно 10 часов в неделю, но вы можете проходить его быстрее — новые уроки будут доступны вам по мере изучения материала.

Программа обучения:

  1. Введение в алгоритмы
    Понятие сложности алгоритма. O-нотация. Оценка времени исполнения программы.
  2. Основные структуры данных
    Массив, связный список, стек, очередь. Сложность операций вставки, поиска и удаления. Представление данных в памяти. Пространственная сложность алгоритма.
  3. Рекурсия
    Понятие рекурсии. Принцип «разделяй и властвуй». Бинарный поиск.
  4. Сортировки
    Квадратичные сортировки. Сортировка слиянием. Быстрая сортировка. Линейная сортировка подсчётом.
  5. Хеш-функции и хеш-таблицы
    Абстракция отображения. Понятие и свойства хеш-функции, примеры. Структура данных хеш-таблица. Коллизии и способы их разрешения.
  6. Деревья
    Структура данных дерево. Сбалансированные деревья поиска. Структура данных куча. Пирамидальная сортировка.
  7. Графы
    Определение графа, способы представления в памяти. Обход графа в глубину и в ширину. Компоненты связности. Алгоритмы поиска кратчайшего пути. Минимальное остовное дерево.
  8. Динамическое программирование
    Определение, одномерные и двумерные задачи. Динамическое программирование по подотрезкам. Динамическое программирование по подмножествам.
  9. Жадные алгоритмы
    Понятие жадного алгоритма, область применения. Примеры, доказательство корректности алгоритма.
  10. Пробное алгоритмическое собеседование
    Алгоритмическое интервью один-на-один с наставником, максимально приближённое к настоящему. По итогам наставник даст обратную связь.
  11. Алгоритмы на строках
    Префикс-функция. Подстроки, префиксы и суффиксы. Поиск шаблона в строке. Наивный алгоритм. Структура данных бор.
Стоимость: бесплатно

Приобретаемые навыки:

  • Debugging
  • Software Testing
  • Algorithms
  • Data Structure
  • Computer Programming
  • Dynamic Programming
  • Binary Search Tree
  • Priority Queue
  • Hash Table
  • Stack (Abstract Data Type)
  • List
  • Graph Theory.

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

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

Специализация включает несколько курсов:

  1. Algorithmic Toolbox
  2. Структуры данных
  3. Algorithms on Graphs
  4. Строковые алгоритмы
  5. Advanced Algorithms and Complexity
  6. Genome Assembly Programming Challenge.
Стоимость: нет информации

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

Цель освоения дисциплины:

  • освоить основные понятия о структурах данных
  • научиться выполнять асимптотический анализ сложности алгоритмов
  • научиться программировать на языке С++
  • узнать устройство элементарных структур данных (список, стек, очередь и других)
  • узнать свойства хэш функций и хэш таблиц
  • узнать виды деревьев (структуры данных) и их разновидности
  • осведомиться о современных тенденциях в разработке структур данных
  • формирование у студентов профессиональных компетенций, связанных с использованием теоретических знаний в области теории алгоритмов и теории сложности вычислений
  • получение практических навыков в области разработки ресурсно-эффективных алгоритмов на основе теоретического анализа
  • развитие умений, основанных на полученных теоретических знаниях, позволяющих на творческом и репродуктивном уровне применять и создавать эффективные алгоритмы для решения задач обработки информации
  • получение студентам навыков самостоятельной исследовательской работы, предполагающей изучение специфических методов анализа алгоритмов, инструментов и средств, необходимых для решения актуальной, в аспекте программной инженерии, задачи выбора рациональных алгоритмов, в зависимости от особенностей применения разрабатываемых программ.

Планируемые результаты обучения:

  • знать основы асимптотического анализа сложности алгоритмов
  • знать структуры данных стек, список, очередь и другие
  • знать принципы хэширования и хэш таблиц
  • знать древовидные структуры данных
  • ориентироваться в современных тенденциях разработки структур данных
  • знать дополнительные структуры данных (опционально)
  • Знать методы анализа алгоритмов в итерационной и рекурсивной реализации
  • Знать классификацию алгоритмов
  • Уметь проводить анализ алгоритмов, оценивать компьютерные алгоритмы с использованием комплексных критериев качества, в том числе оценивать ресурсную эффективность алгоритмов
  • Уметь оценивать сложность алгоритмов
  • Уметь оценивать временную эффективность алгоритмов
  • Знать основные алгоритмы………
  • Знать метод декомпозиции и метод динамического программирования как методы разработки эффективных алгоритмов
  • Знать основные алгоритмы.

Содержание учебной дисциплины:

  1. Основные понятия
  2. Элементарные структуры данных и С++
  3. Битовые карты (маски)
  4. Хэш таблицы
  5. Деревья
  6. Растровые структуры данных
  7. Пространственные структуры данных
  8. Параллельные структуры данных
  9. Распределенные структуры данных
  10. Современные тенденции в разработке структур данных
  11. Дополнительные главы
  12. Понятие алгоритма. Формализм Э.Л. Поста. Алгоритм как финитный 1-процесс
  13. Основная терминология и обозначения в анализе ресурсной эффективности алгоритмов
  14. Классификация алгоритмов по трудоёмкости
  15. Анализ NPR алгоритмов методом классов входных данных
  16. Метод вероятностного анализа для получения трудоёмкости в среднем
  17. Сравнительный анализ алгоритмов по трудоёмкости и решение задачи рационального выбора
  18. Сложность алгоритмов. Теоретическая нижняя граница сложности задачи
  19. Введение в теорию сложности вычислений. Основные сложностные классы задач
  20. Временная эффективность и особенности перехода к временным оценкам
  21. Рекурсивные алгоритмы — Особенности реализации и анализа
  22. Разработка алгоритмов методом декомпозиции и особенности его применения
  23. Анализ рекурсивных алгоритмов методом подсчёта вершин дерева рекурсии
  24. Рекурсивный алгоритм возведения в степень
  25. Задачи умножения длинных целых чисел и умножения матриц
  26. Динамическое программирование. Задача оптимальной упаковки (задача о рюкзаке)
  27. Рекурсивный алгоритм метода динамического программирования для задачи упаковки.
Стоимость: нет информации

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

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

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

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

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

Программа курса:

  1. Оценка времени работы алгоритмов
  2. Алгоритмы сортировки, основанные на сравнении (сортировка слиянием, быстрая сортировка, нижняя оценка на время работы алгоритмов сортировки)
  3. Алгоритмы сортировки с линейным временем выполнения (сортировка подсчетом, цифровая сортировка, карманная сортировка)
  4. Элементарные структуры данных (стек, очередь, связанные списки)
  5. Алгоритмы, основанные на двоичной куче (сортировка кучей, очередь с приоритетами)
  6. Введение в алгоритмы поиска (двоичный поиск в отсортированном массиве, двоичное дерево поиска)
  7. Сбалансированные деревья поиска (обзор сбалансированных деревьев, АВЛ-дерево, Splay-дерево)
  8. Хеширование (хеш-таблицы с закрытой и открытой адресацией)
  9. Введение в поиск подстрок (простейший алгоритм поиска подстрок, алгоритм Рабина-Карпа)
  10. Поиск подстрок (алгоритм Кнута-Морриса-Пратта, Z-функция, алгоритм Бойера-Мура)

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

Результаты обучения:

  • Умение анализировать и реализовывать базовые алгоритмы программирования и структуры данных
  • Навыки проектирования и разработки средств реализации прикладных информационных технологий
  • Навыки разработки алгоритмов для проведения экспериментальных исследований в области информатики.
Стоимость: нет информации

После курса вы сможете:

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

Программа курса:

  1. Введение в алгоритмы и структуры данных
    Разберитесь в том, что такое алгоритмы и структуры данных. Узнайте, в каких сферах используют алгоритмы и какие задачи они решают. На реальных примерах из жизни и технических примерах из практики лектора научитесь определять сложность алгоритмов.
  2. Массивы как структура данных
    Научитесь обрабатывать массивы и выполнять простые операции над ними [доступ, поиск, вставка, удаление]. Разберите несколько разных задач по работе с массивами. Научитесь определять временную сложность и сложность по памяти массивов.
  3. Рекурсия
    Узнайте, когда и зачем применять рекурсию. Разберите типичные рекурсивные задачи и научитесь реализовывать алгоритмы с применением рекурсии. Рассчитайте n-й элемент для последовательности Фибоначчи с помощью рекурсии.
  4. Связный список
    Научитесь проводить разные операции над связными списками. Разберите и решите типичные задачи на связные списки. Осуществите операции над связными списками и удалите дубликаты из связного списка.
  5. Стеки и очереди
    Узнайте, чем стек отличается от очереди. Разберите типичные задачи по стекам и очередям. Научитесь преобразовывать стеки в очереди и наоборот. Определите временную сложность и сложность по памяти стеков и очередей.
  6. Алгоритмы по поиску и сортировке
    Разберитесь в видах алгоритмов по поиску и сортировке. Узнайте, что такое бинарный поиск и научитесь реализовывать задачи по применению бинарного алгоритма.
  7. Алгоритмы по сортировке. Part 1
    Ознакомьтесь с пузырьковой сортировкой, сортировкой вставками и сортировкой выбором. Примените эти алгоритмы на практике и решите по ним задачи. Научитесь сортировать массивы данных.
  8. Алгоритмы по сортировке. Part 2
    Реализуйте сортировку слиянием и быструю сортировку. Научитесь выбирать вид алгоритма под конкретную задачу и находить наиболее оптимальный способ решения.
  9. Деревья
    Узнайте, как структура данных «дерево» помогает хранить иерархическую информацию. Разберитесь в видах древовидных структур данных. Поймите, чем бинарное дерево отличается от дерева общего вида. Научитесь находить общего предка, определять диаметр дерева и связи между узлами.
  10. Бинарные деревья поиска
    Детально изучите структуру бинарных деревьев поиска. Научитесь реализовывать поиск в ширину (BFS) и поиск в глубину (DFS). Напишите алгоритм нахождения k-го элемента в массиве. Узнайте, какие подходы можно применить для решения типичных задач по бинарным деревьям поиска.
  11. Графы
    Узнайте, какие бывают графы. Научитесь реализовывать матрицу смежности и основные алгоритмы обхода. Научитесь находить минимальное остовное дерево в неориентированном нагруженном графе. Реализуйте задачи по изученным методам разработки алгоритмов, например, определите количество одноцикловых компонентов на графике.
  12. Хеш-функции
    Узнайте, для каких задач применяют хеш-функции и разберите реальные кейсы. Решите задачу с применением хеш-функции.
  13. Хеш-таблицы
    Изучите структуру данных хеш-таблицы. Научитесь реализовывать схему для нахождения коллизий и предотвращения коллизий в хеш-таблицах и структурах данных. Проверьте, является ли один массив частью другого, и найдите первое повторение элемента массива.
  14. Динамическое программирование [лекция]
    Разберитесь в понятиях: динамический массив, двоичная куча и пирамидальная сортировка. Разберите на примерах одномерные и двумерные задачи динамического программирования.
  15. Динамическое программирование [практика]
    Узнайте, в чем суть динамического программирования и отличия этого метода разработки алгоритмов от остальных. Научитесь решать задачи методом динамического программирования по подотрезкам и динамического программирования по подмножествам. Разберитесь в алгоритмах кеширования. Научитесь оптимизировать алгоритмы.
  16. Жадные алгоритмы
    Узнайте, для чего применяют жадные алгоритмы. Научитесь оптимизировать алгоритмы по графам. Подберите лучший алгоритм для предложенной задачи, самостоятельно решите задачу, затем аргументируйте свой выбор и решение перед лектором.

Фундаментальный курс «прокачивает» базовые знания computer science. Дает понимание, как работает язык программирования и действуют применяемые в коде команды и решения. На примере языка С студенты смогут «пощупать» механизмы, которые лежат в основе современных фреймворков. Курс дает знания, отличающие программиста от «юзера», пишущего код.

Чему Вы научитесь:

  • Владеть основами программирования на языке C;
  • Знать структуры данных и алгоритмы, которые лежат в основе их работы;
  • Владеть общими подходами и полезными методиками для решения сложных задач;
  • использовать инструменты оценки сложности решаемых задач;
  • Создавать консольные программы на языке C в среде разработки QT;
  • Создавать программы, используя собственные алгоритмы;
  • Создавать собственные структуры данных: стеки, списки, деревья и др.;
  • Оценивать производительность программ;
  • Использовать «незащищенный» режим работы с памятью, основанный на указателях;
  • Динамически выделять и освобождать память;
  • Использовать рекурсию.

Что Вы получите:

  • Видеозаписи всех онлайн-занятий
  • Методички и практические задания
  • Общение с одногруппниками
  • Сертификат об окончании обучения.

Программа курса

Урок 1. Простые алгоритмы
Введение в C. Структуры. Алгоритмы.

Урок 2. Асимптотическая сложность алгоритма. Рекурсия
Асимптотическая сложность алгоритма. Рекурсивный перебор. Ханойская башня.

Урок 3. Поиск в массиве. Простые сортировки
Поиск в одномерном массиве. Интерполяционный поиск. Сортировка массива.

Урок 4. Динамическое программирование. Поиск возвратом
Наибольшая общая подпоследовательность. Динамическое программирование. Поиск с возвратом. Задача о восьми ферзях.

Урок 5. Динамические структуры данных
Стек, очередь. Создание стека с использованием массива. Динамические структуры данных.

Урок 6. Деревья
Двоичные деревья поиска. Хеш-функция. MD5. Хеш-таблицы.

Урок 7. Графы. Алгоритмы на графах.
Графы, обход графа в ширину и глубину. Волновой алгоритм. «Жадные алгоритмы».

Урок 8. Сложные сортировки
Сортировка Хоара (Quick sort). Пирамидальная сортировка (Heap sort) Сортировка слиянием (Merge sort). Сортировка подсчетом (CountingSort). Алгоритм со списком (pigeonhole sorting). Блочная сортировка.

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

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

Чему Вы научитесь:

  • Пользоваться классическими структурами данных.
  • Выбирать оптимальные структуры под задачи.
  • Определять сложность алгоритмов.
  • Оптимизировать алгоритмы.
  • Проектировать рекурсивные алгоритмы на Python.
  • Оптимизировать рекурсивные функции.
  • Строить и обходить деревья и графы.
  • Сортировать массивы и связные списки.
  • Быстро искать данные в массивах, деревьях и тексте.
  • Искать и генерировать большие простые числа.
  • Более эффективно использовать Python.
  • Проектировать надежные и быстрые алгоритмы.
  • Работать с хэш-таблицами, словарями и ассоциативными массивами.
  • Шифровать и сжимать данные.
  • Генерировать и обмениваться ключами шифрования.
  • Сортировать данные, в том числе по нескольким критериям.
  • Использовать комбинаторые алгоритмы и функции.
  • Перебирать и оптимизировать деревья.

Программа курса:

Обучение построению алгоритмов на примере Python — одном из самых популярных языков программирования.

  1. Введение в алгоритмы
    7 уроков
    Познакомитесь с основными характеристиками алгоритмов.
    Узнаете простые и эффективные способы оценки сложности алгоритмов.
  2. Структуры данных
    10 уроков
    Познакомитесь с базовыми структурами данных.
    Научитесь работать со связными списками и массивами.
    Узнаете, что такое стек, очередь и дек в Python.
    Научитесь выбирать правильную структуру данных в зависимости от задач.
  3. Сортировка
    13 уроков
    Познакомитесь с популярными алгоритмами сортировки на Python.
    Научитесь выбирать алгоритмы сортировки под задачи и данные.
    Научитесь сортировать по нескольким полям.
    Узнаете, что такое устойчивые сортировки.
  4. Поиск
    2 урока
    Познакомитесь с линейным и бинарным поиском.
    Научитесь использовать интерполяционный поиск.
  5. Численные алгоритмы
    7 уроков
    Научитесь генерировать случайные числа, а также вычислять наибольший общий делитель.
    Узнаете об алгоритмах быстрого возведения в степень.
    Расширите свои знания о простых числах и научитесь строить решето Эратосфена, а также быстро проверять на простоту любое число.
    Познакомитесь с базовыми численными методами.
  6. Хэширование
    9 уроков
    Узнаете, что такое хэш-таблицы и как устроены python-словари и ассоциативные массивы.
    Научитесь разными способами пробирования и борьбе с коллизиями.
    Познакомитесь с фильтрами Блума.
  7. Рекурсия
    11 уроков
    Подробно изучите механизм рекурсивных вызовов.
    Познакомитесь с базовыми рекурсивными алгоритмами Python: вычислением факториала, построением ряда Фибоначчи, задачами о 8 ферзях и ханойской башне.
    Освоите комбинаторные алгоритмы: сочетания, повторения и размещения.
    Научитесь оптимизировать рекурсию и приводить рекурсивные алгоритмы к итеративным.
    Познакомитесь с фракталами.
  8. Деревья
    12 уроков
    Познакомитесь с деревьями.
    Научитесь обходить деревья в ширину и глубину.
    Узнаете, как искать элементы в двоичном дереве.
    Познакомитесь с прошитыми бинарными деревьями, АВЛ-деревьями, 2-3 деревьями, B-деревьями, а также красно-черными деревьями.
  9. Деревья принятия решений
    10 уроков
    Узнаете, что такое деревья принятия решений.
    Научитесь методу полного перебора, а также методу ветвей и границ.
    Освоите приемы оптимизации деревьев.
    Научитесь производить поиск по деревьям принятия решений.
  10. Сетевые алгоритмы
    9 уроков
    Познакомитесь с сетями и графами.
    Научитесь обходить деревья, а также находить кратчайший путь.
    Освоите топологическую сортировку.
    Узнаете, как об алгоритме поиска циклов.
  11. Строковые алгоритмы
    5 уроков
    Научитесь искать информацию в текстах.
    Познакомитесь с алгоритмами Кнута-Морриса-Пратта, а также Бойера-Мура-Хорспула.
    Узнаете, что такое синтаксические деревья.
  12. Криптография
    12 уроков
    Познакомитесь с подстановочными и перестановочными шифрами.
    Узнаете, как работают SP-сети и блочное шифрование.
    Научитесь применять протокол Диффи-Хеллмана.
    Узнаете несколько вариантов использования алгоритмов с открытым ключом, включая шифрование, цифровую подпись, а также гибридные схемы.
    Узнаете о криптографическом хэшировании и его применении на практике.
    Познакомитесь со схемой луковой маршрутизации и узнаете, как работает Tor.
  13. Сжатие
    5 уроков
    Узнаете об алгоритмах сжатия.
    Научитесь кодировать серии данных.
    Познакомитесь с кодом Хаффмана.
    Освоите сжатие Лемпеля-Зива-Велча.
    Узнаете, как работает сжатие с потерями на примере растровых изображений и музыкальных-форматов.
  14. Блокчейн
    4 урока
    Познакомитесь с устройством блокчейна.
    Научитесь генерировать блоки и встраивать их в цепочку.
    Узнаете об основных проблемах блокчейна.

Ученики, которые изучат теорию и решат все задачи — получают сертификат о прохождении курса по алгоритмам.

Стоимость: 3 900 ₽ в месяц

Чему вы научитесь:

  • Определять эффективность алгоритмов
  • Выбирать подходящую структуру данных в зависимости от ситуации
  • Определять NP-полные задачи и находить приближённое решение

Курс посвящен знакомству со структурами данных, алгоритмами поиска и сортировки. На практике разберём в каких ситуациях подходит тот или иной алгоритм. Какова его сложность используя оценку «О-большое». Сколько памяти потребуется для его реализации. Напишем реализации структур данных. Рассмотрим жадные алгоритмы и динамическое программирование.

Уроки курса:

Продолжительность — 11 часов.

  1. Введение
    Познакомиться с курсом
  2. Бинарный поиск
    Научиться реализовывать алгоритм бинарного поиска
  3. Алгоритмы сортировки
    Научиться реализовывать алгоритмы сортировки
  4. Алгоритмическая сложность
    Научиться анализировать сложность алгоритмов
  5. Жадные алгоритмы
    Изучить жадный подход в решении задач
  6. Динамическое программирование
    Научиться решать задачи с помощью техники динамического программирования
  7. Динамическое программирование (продолжение)
    Научиться решать задачи с помощью техники динамического программирования
  8. Связный список
    Научиться реализовывать связный список
  9. Двусвязный список
    Научиться реализовывать двусвязный список
  10. Очередь и стек
    Научиться реализовывать стек
  11. Дополнительные материалы
    Помогают глубже и всесторонне рассмотреть тему курса в открытых статьях и видео, подобранных командой.

Чему вы научитесь:

  • Реализация основных структур данных: список, стек, очередь и понимание того, как они устроены
  • Корректное использование структур данных встроенных в BCL
  • Подготовка к собеседованиям, на которых вас будут мучить алгоритмами
  • Деревья, хеш-таблицы и др. структуры данных
  • Различные алгоритмы.

Материалы курса

15 разделов, 84 лекций

  1. Материалы и коммьюнити
  2. Введение в алгоритмы и структуры данных
  3. Введение в анализ алгоритмов
  4. Массивы
  5. Алгоритмы сортировки
  6. Списки
  7. Стек (Stack)
  8. Очередь (Queue)
  9. Алгоритмы поиска
  10. Символьные таблицы
  11. Символьные таблицы и Хеширование (Хеш-таблицы)
  12. Деревья
  13. Пирамида и пирамидальная сортировка
  14. Различные алгоритмы
  15. Бонусная лекция.

Что внутри курса?

  • Введение в алгоритмы и структуры данных: структура данных, абстрактный тип данных, разница между этими понятиями. Что такое алгоритм и почему всё это для нас важно?
  • Введение в анализ алгоритмов: сколько времени займёт исполнение программы, построение log-log графика, аппроксимации, порядок роста сложности (Big-O нотация), потребление памяти
  • Массивы: массивы в C#, массивы в памяти, сложность операций на массивах
  • Алгоритмы сортировки: пузырьковая, выборкой, вставками, рекурсия, Шелл-сортировка, слиянием, быстрая, стабильность алгоритмов сортировки
  • Списки: List встроенный в BCL, узлы (ноды), связный список (односвязный, двусвязный), LinkedList встроенный в BCL
  • Стек: теория и практика, на массиве, на связном списке, встроенный в BCL
  • Очереди: теория и практика, на массиве, кольцевой буфер, на связном списке, встроенная в BCL
  • Алгоритмы поиска: линейный, бинарный
  • Символьные таблицы: введение, API, таблицы на последовательном поиске, таблица на бинарном поиске
  • Хеш-таблицы: введение, хеширование, GetHashCode, подходы к разрешению коллизий: раздельные цепочки и линейное пробирование, тип Dictionary встроенный в BCL, типы представляющие множества встроенные в BCL
  • Деревья: двоичное дерево поиска и его реализация (больше будет добавлено в будущем)
  • Пирамиды: введение, пирамиды и массивы, пирамидальная сортировка
  • Различные алгоритмы: эта секция будет расширяться, а пока покрывает алгоритм «решето Эратосфена».

Видеокурс предназначен для тех, кто владеет языком С# на базовом уровне и желают понять, как писать эффективный и понятный код. Главная цель курса – освоив базу алгоритмов, научиться использовать их в правильном ключе для решения сложных и нестандартных задач.

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

Чему вы научитесь с помощью данного видеокурса:

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

Уроки:

  1. Введение в структуры и алгоритмы данных. Связные списки.
  2. Динамический массив, Stack, Queue и Set.
  3. Алгоритмы сортировки.
  4. Хеш-таблицы. Деревья.
  5. Бинарное дерево поиска. АВЛ-дерево.
  6. Графы. Часть 1.
  7. Графы. Часть 2.
  8. Графы. Часть 3.
  9. Динамическое программирование.
  10. Задачи. Практикум.
Стоимость: бесплатно

Курс посвящен изучению алгоритмов и структур данных.

План занятий:

  1. Базовые алгоритмы
    дальнейшая программа курса: что такое алгоритм и структура данных. Рассмотрены базовые виды алгоритмов, их характеристики и методы анализа. Далее рассматриваются примеры создания алгоритмов для вычисления чисел Фибоначчи, проверки числа на простоту, быстрого возведения числа в целую степень. В конце лекции рассказывается об особенностях использования алгоритмов для работы с массивами: создание однопроходных алгоритмов, поиск минимального элемента, бинарный поиск.
  2. Элементарные структуры данных
    Вторая лекция посвящена изучению элементарных структур данных. В начале даётся определение понятия «абстрактного типа данных». Далее лектор рассказывает о том, что такое амортизационный анализ и каковы его особенности. Рассматриваются такие виды структур и абстрактные типы данных, как: массив и динамический массив, стек, очередь и дэк, очередь с приоритетом, связные списки: однонаправленные и двунаправленные, двоичная куча. Разбираются недостатки и преимущества каждого вида структур, а также их реализация в виде программного кода.
  3. Сортировки
    Тема сортировок оказалась настолько объёмной, что её пришлось разделить на две лекции. В первой части подробно рассматриваются такие виды алгоритмов, как: сортировка одного, двух и трёх элементов, сортировка выбором, сортировка вставками, сортировка пузырьком, быстрая сортировка Хоара. Описывается, как можно оценить скорость работы того или иного алгоритма сортировки, как проанализировать алгоритмы по количеству сравнений и т.д.
  4. Сортировки (продолжение)
    На этой лекции рассматриваются другие виды алгоритмов и их применение: сортировка слиянием, в том числе двух упорядоченных массивов, сортировка подсчётом, поразрядная сортировка, пирамидальная сортировка и ряд других. Напоследок проводится сравнительный анализ разных алгоритмов.
  5. Хеш-таблицы
    Из этой лекции для начала вы узнаете, что такое метод поиска хешированием, какие бывают хеш-функции (в том числе хеш-функции строк). Затем идёт подробное рассмотрение хеш-таблиц и способов их применения: что они собой представляют, основные методы разрешения коллизий (метод цепочек и метод открытой адресации), а также методы вставки, удаления и поиска элементов. Напоследок проводится сравнение хеш-таблиц по затратам времени и памяти.
  6. Деревья
    Последняя лекция в рамках курса АиСД посвящена таким структурам данных, как деревья. Разумеется, в начале лекции дается определение понятия «деревья», рассматриваются их характеристики и приводятся примеры. Затем вы узнаете, как деревья представлены в памяти, какие есть способы обхода дерева. Далее рассматриваются так называемые двоичные деревья поиска и группа самобалансирующихся деревьев: декартовы и АВЛ-деревья. И в завершение лекции рассказывается об абстрактном типе данных «ассоциативный массив».
  7. Экзамен.
Стоимость: бесплатно

Что дает курс:

  • На практике разберешься в основных понятиях и сможешь объяснить, что это такое.
  • Сможешь анализировать основные свойства алгоритмов.
  • Научишься выбирать структуры данных для решения задач и обосновывать свой выбор.
  • Лучшие выпускники смогут сделать свой первый карьерный шаг в ИТ и получить возможность присоединиться к одному из проектов экосистемы VK.

Программа курса:

  1. Основы алгоритмики
  • Понятие алгоритма;
  • Исполнитель алгоритма;
  • Сложность операций;
  • Сложность алгоритма;
  • Как доказывают корректность;
  • Инварианты.
  1. Простейшие алгоритмы
  • Рекурсия;
  • Принцип «разделяй и властвуй»;
  • Сложность алгоритмов «разделяй и властвуй»;
  • Алгоритмы быстрого умножения;
  • Алгоритм быстрого возведения в степень;
  • Жадные алгоритмы и их корректность;
  • Алгоритмы на строках.
  1. Сортировка и поиск
  • Сортировки, их виды и применимость;
  • Задача поиска;
  • Парадигма CRUD: create, read, update, delete;
  • Поисковые структуры данных;
  • Списки, деревья поиска, балансированные деревья;
  • Хеш-функции, их использование;
  • Хеш-таблицы.
  1. Более практические задачи
  • Задача динамического программирования;
  • Прямой и обратный ходы;
  • Восстановление решения;
  • Сложные варианты;
  • Алгоритмы на графах;
  • Обход графов, нахождение компонент связности;
  • Построение остовных деревьев;
  • Нахождение кратчайших путей;
  • Нахождение потоков.

Насколько публикация полезна?

Нажмите на звезду, чтобы оценить!

Средняя оценка 4.8 / 5. Количество оценок: 95

Оценок пока нет. Поставьте оценку первым.

Автор статьи. Ответственный за актуальный контент, текст и редактуру сайта. Эксперт по выбору профессии, курсов и профессий с 2016 года. Делюсь личным практическим опытом.

Оцените автора
Блог Романа Семенцова
Добавить комментарий