Skip to content

Слайды лекций по дисциплине Программирование ФИТ НГУ

Notifications You must be signed in to change notification settings

Evgueni-Petrov-aka-espetrov/Algorithms-and-Programming-in-C-pptx

Folders and files

NameName
Last commit message
Last commit date
Sep 2, 2024
Sep 16, 2020
Sep 24, 2024
Jan 19, 2019
Oct 11, 2022
Oct 11, 2022
Oct 16, 2023
Nov 2, 2018
Jun 17, 2024
Nov 2, 2018
Nov 25, 2024
Nov 9, 2018
Nov 20, 2023
Nov 26, 2020
Dec 8, 2021
Jun 17, 2024
Dec 11, 2023
Feb 8, 2025
Nov 2, 2018
Feb 19, 2021
Mar 11, 2021
Dec 16, 2020
Mar 11, 2021
Mar 18, 2021
Mar 25, 2021
Oct 27, 2020
Apr 8, 2021
Mar 31, 2024
Mar 30, 2023
Jun 17, 2024
May 1, 2024
Jun 17, 2024
Jun 17, 2024
Feb 14, 2024
Mar 16, 2022
Jun 7, 2024
Oct 11, 2023

Repository files navigation

Algorithms-and-Programming-in-C-pptx

Здесь работаю над презентациями, которые потом использую для чтения лекции по дисциплине Программирование ФИТ НГУ.

Ставьте звезды, создавайте issue, делайте пул-реквесты

  • Информация о курсе
  • Понятие программы
  • Понятие компиляции, сборки, системы контроля версий
  • Понятие отладки, оптимизации, тестирования
  • Как выполнять лабораторные работы на gitlab.ccfit.nsu.ru
  • Язык Си и современное программирование
  • Пространства имён, области видимости имён и связывание имён
  • Время жизни и продолжительность хранения переменных в памяти
  • Лексемы языка Си -- ключевые слова, операторы, синтаксис констант
  • Общие правила построения выражений
  • Приоритет, ассоциативность и неявная расстановка скобок
  • Понятие l-value
  • Понятие точки следования
  • Обзор операторов -- требования к операндам, исполнение, побочные эффекты, условия возникновения implementation-specific/unspecified/undefined behavior
  • Понятие подпрограммы -- граф вызовов, стековый кадр, стек вызовов
  • Функции в языке Си -- формальные и фактические параметры, возвращаемое значение, вариадические функции
  • Понятие типа и системы типов языка программирования
  • Семейства типов языка Си -- функциональные/полные/неполные, целые/с плавающей точкой/производные и т.д.
  • Представление типов языка Си в памяти -- целые знаковые/беззнаковые, с плавающей точкой, производные и т.д.
  • Понятие преобразования типа
  • Преобразования целых и типов с плавающей точкой -- общий тип, целочисленное повышение (integer promotion), протяжка знака (sign propagation/extension)
  • Преобразования массивов -- генерация указателя (pointer generation)
  • Преобразования функциональных типов
  • Преобразования с типом void
  • Преобразования указателей
  • Размещение в стековом кадре -- выравнивание, связь выравниваний производного типа и его элементов, выравнивающие байты
  • Размещение в динамической памяти -- Doug Lea's malloc, накладные расходы, фрагментация памяти, виды ошибок, Address Sanitizer
  • Понятие абстрактного типа данных (АТД) и реализации абстрактного типа данных
  • АТД список
  • АТД стек -- реализация через список, через массив
  • Алгоритм построения польской записи арифметического выражения и вычисления польской записи
  • АТД очередь -- реализации через список, через циклический буфер, через два стека
  • АТД дек -- реализация через двусвязный список
  • Граф -- определения, реализация через матрицу смежности, через списки смежности, через упакованные списки смежности
  • Свойства матрицы смежности
  • Использование деревьев в программировании
  • Определения -- дерево, поддерево и т.п.
  • Обходы деревьев в глубину и в ширину
  • Дерево двоичного поиска -- поиск вершины, вставка и удаление вершины
  • АВЛ деревья -- поиск вершины, вставка вершины, короткий и длинный поворот
  • Общая постановка задачи поиска
  • Поиск ключа в массиве и списке -- линейный, бинарный, хэш-таблицы
  • Поиск подстроки в строке -- наивный, алгоритм Бойера-Мура, алгоритм Рабина-Карпа, алгоритм Кнута-Морриса-Пратта
  • Понятие сортировки
  • Сортировка вставками, сортировка бинарными вставками, устойчивая сортировка
  • Сортировка выбором, пирамидальная сортировка
  • Быстрая сортировка, неустойчивость быстрой сортировки
  • Оценка числа действий и объёма дополнительной памяти в алгоритмах сортировки
  • Исторические факты о кодировании
  • Определения -- алфавит, кодирование и декодирование, код, двоичный код, префиксный код
  • Однозначная декодируемость префиксного кода
  • Оптимальный двоичный префиксный код Хаффмана
  • Префиксный код Фано
  • Префиксный код Шеннона, оценка сверху для длины закодированного сообщения через частоты символов, формулировка теоремы Шеннона
  • Использование графов в программировании, понятие обхода вершин графа
  • Обход вершин графа в глубину, подграф предшествования, типы дуг графа при обходе в глубину, оценка числа действий при обходе всех вершин графа
  • Обход вершин графа в ширину на основе очереди, свойство очереди вершин при обходе в ширину
  • Компоненты связности графа, АТД система непересекающихся множеств (СНМ), реализации СНМ через массив и через деревья, оценка числа действий
  • Каркас графа, минимальный каркас графа
  • Алгоритм Краскала, оценка числа действий
  • Алгоритм Прима, оценка числа действий, доказательство корректности
  • Определение длины пути, кратчайшего пути, примеры
  • Алгоритм Дейкстры, число действий при хранении кратчайших расстояний в массиве, пирамиде и Фибоначчиевой куче
  • Кратчайший путь в графе без циклов отрицательной длины
  • Алгоритм Беллмана-Форда для графов с произвольными длинами дуг
  • Алгоритм Флойда-Уоршелла вычисления кратчайших расстояний между всеми парами вершин графа и его применения (построение транзитивного замыкания графа, подсчёт путей с фиксированным числом вершин)
  • Определение топологической сортировки графа
  • Нерекурсивный алгоритм топологической сортировки графа на основе матрицы смежности и списков смежности
  • Алгоритм топологической сортировки на основе поиска в глубину
  • Связь алгоритма топологической сортировки и теоремы о продолжении частичного порядка до линейного
  • Общие сведения о Б деревьях (B trees)
  • Определение Б дерева, оценка высоты Б дерева с заданным числом вершин
  • Алгоритмы поиска и вставки вершины в Б дерево
  • Общие сведения о красно-чёрных деревьях
  • Определение красно-чёрного дерева, оценка высоты красно-чёрного дерева с заданным числом вершин
  • Алгоритм вставки вершины в красно-чёрное дерево
  • Сравнение красно-чёрных и АВЛ деревьев по числу действий в алгоритмах поиска и вставки
  • Красно-чёрные деревья как частный случай Б деревьев
  • Применение красно-чёрных деревьев в С++
  • Элементы теории сложности вычислений: задача, исполняющее устройство, классы задач P и NP, NP-полные задачи
  • Поиск с возвратом как обход в глубину
  • Поиск с возвратом как эмуляция работы недетерминированного исполняющего устройства
  • Понятие эвристического поиска с возвратом
  • Решение задач обхода шахматной доски конём и расстановки ферзей методом поиска с возвратом
  • Динамическое программирование как метод решения задач оптимального управления -- управляемая система, целевая функция, оптимальное управление
  • Принцип оптимальности Беллмана
  • Прямой и обратный ход
  • Примеры решения задач методом динамического программирования -- суммирование набора, задача о рюкзаке, оптимальное произведение матриц
  • Связь метода динамического программирования и метода поиска с возвратом
  • Практический смысл оценки сложности
  • Понятие размера данных, объёма используемой памяти и вычислений на примерах (умножение матриц, сортировка вставками, проверка на простоту)
  • Понятие сложности по памяти и по времени в худшем случае и в среднем
  • Связь сложности в худшем случае и в среднем, связь сложности по времени и памяти
  • Пример получения оценки сложности по времени в среднем для алгоритма возведения в целую степень методом повторных квадратов
  • Особенности оценки вычислительной сложности на практике
  • Оценка сверху сложности по времени в худшем случае на основе исходного кода без рекурсии
  • Понятие оптимальной программы и асимптотически оптимальной программы
  • Понятие дерева трасс исполнения программы
  • Пример доказательства оптимальности по числу сравнений в худшем случае для алгоритма быстрого поиска минимума и максимума в массиве
  • Определение перестановки и инверсии
  • Алгоритм восстановления перестановки по таблице инверсий
  • Определение факториальной системы счисления; алгоритм перечисления таблиц инверсий
  • Алгоритм перечисления перестановок на основе таблицы инверсий
  • Алгоритм Дейкстры непосредственного перечисления перестановок в алфавитном порядке
  • Оценка сложности по времени в среднем для алгоритма Дейкстры
  • Использование формальных грамматик в программировании, БНФ как прототип формальной грамматики
  • Определение грамматики, вывода в грамматике, языка, описываемого грамматикой
  • Пример грамматики, описывающей язык с цепочками квадратичной длины
  • Классификация грамматик по Хомскому и связь типов грамматик с алгоритмической вычислимостью
  • Пример классической грамматики типа 1 anbncn
  • Метод построения LL(1) анализатора грамматик типа 2 -- алгоритм анализа на основе таблицы, алгоритмы построения первого и следующего набора
  • Понятие препроцессирования исходного кода, несколько фактов о создании препроцессора языка Си
  • Этапы работы препроцессора языка Си
  • Директивы препроцессора языка Си и выполняемые ими преобразования исходного кода, общие правила записи директив
  • Алгоритм исполнения директив препроцессора языка Си
  • Объединение единиц трансляции -- примеры, синтаксис, правило поиска единиц трансляции в файловой системе
  • Условная компиляция -- примеры, синтаксис, вычисление условий в директивах if и elif
  • Макроподстановка -- примеры, синтаксис, алгоритм макроподстановки
  • Служебные макроподстановки и вспомогательные директивы
  • Особенности работы с большим исходным кодом
  • Понятие модуля (части) программы
  • Понятие зацепления модулей программы
  • Виды зацепления модулей программы -- патологическое, по содержимому (content), по общей области (common), смешанное (hybrid), по управлению (control), по данным (data)
  • Примеры кода на языке Си с зацеплением и пути устранения зацепления
  • Рекомендации по именованию переменных и функций -- профилактика смешанного зацепления
  • Рекомендации по повышению локальности переменных и функций -- профилактика патологического зацепления
  • Понятие эффективности вычислений -- виды вычислительных ресурсов, виды требований к использованию ресурсов
  • Факторы, влияющие на эффективность -- скорость работы процессора и памяти, виды узких мест
  • Устранение узких мест -- использование специализированных библиотек и узнаваемых компилятором паттернов управления и зависимостей по данным, параллелизация
  • Пример повышения эффективности умножения матриц на процессоре Intel с 5% до 85% от пика ядра
  • Пример повышения эффективности транспонирования больших матриц на процессоре Intel с 20% до 60% от пика памяти
  • Понятие многопоточности -- контекст исполнения, поток исполнения, многопоточное исполнение, отличия от многозадачности
  • Краткий обзор ранней (до 1997 года) вычислительной техники, ОС и библиотек, поддерживающих многопоточность
  • Примеры простого многопоточного кода на основе POSIX threads, OpenMP
  • Многопоточность в стандарте языка Си C11 -- потоки, атомарные переменные, взаимное исключение потоков, сигналы (события)
  • Понятие конфликта обращений к памяти, виды упорядочения доступов к атомарным переменным (memory order) в стандарте С11
  • Примеры использования атомарных переменных -- синхронизация потоков producer-consumer, асинхронный счётчик
  • Использование взаимного исключения потоков при доступе к ресурсам, взаимная блокировка потоков, приёмы её устранения
  • Использование сигналов (событий) для передачи владения ресурсом другому потоку
  • Эффективное использование многопоточности
  • Основные понятия и определения машинного обучения, примеры задач регрессии, классификации и ранжирования -- на основе 1-й лекции из курса по машиинному обучению Воронцова К.В.
  • Построение классификаторов изображений с помощью нейронных сетей -- примеры простых нейронных сетей Tiny VGG, CIFAR-10, GoogleNet
  • Алгоритмы работы основных типов слоёв -- свёртка (convolution), пулинг (pooling), положительная срезка (ReLU)
  • Обучение нейронных сетей методами спуска по градиенту
  • Вычисление градиента методом автоматического дифференцирования

About

Слайды лекций по дисциплине Программирование ФИТ НГУ

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published