• This repository has been archived on 01/Sep/2022
  • Stars
    star
    215
  • Rank 183,925 (Top 4 %)
  • Language
    Python
  • License
    Other
  • Created almost 5 years ago
  • Updated about 4 years ago

Reviews

There are no reviews yet. Be the first to send feedback to the community and the maintainers!

Repository Details

Алгоритмы и структуры данных (С++), 2020 г.

Программный код с лекций по информатике Хирьянова Т.Ф. на ФТШ ЛФИ МФТИ (ФОПФ) в 2020 году.

Лицензия на материалы курса: Attribution ShareAlike CC BY-SA 4.0

Сайт курса: http://cs.mipt.ru/cpp_algo

Рабочая программа дисциплины "Информатика":

по дисциплине: Информатика по направлению: 03.03.01 «Прикладные математика и физика» физтех-школа: ЛФИ кафедра: информатики и вычислительной математики курс: 1 семестр: 2

Трудоёмкость:

  • лекции – 30 часов
  • лабораторные занятия – 60 часов
  • самостоятельная работа – 90 часов

ВСЕГО АУДИТОРНЫХ ЧАСОВ – 90

Программу и задание составил: ст. преп. Т.Ф. Хирьянов

Тематический план семестра

  1. Ввод-вывод, ветвления и циклы. Однопроходные алгоритмы. Структура простой программы. Переменные С++: необходимость объявления, строгость типизации, присваивание. Ввод-вывод в std:: потоки cin, cout, cerr. Арифметические операции +, -, *, /. Операторы сравнения <, <=, ==, !=. Описание простых функций. Cинхронный вызов и возврат по стеку вызовов. Метки и goto. Доводы против оператора goto Эдсгера Дейкстры. Оператор for. Генерация арифметической и геометрической прогрессий. Оператор if. Фильтрация потока чисел. Оператор while. Алгоритм Евклида на С++. Вложенные и каскадные условные конструкции. Обработка последовательностей: подсчёт, сумма, произведение, поиск максимального. Инициализация переменной при поиске максимума и минимума.
  2. Целый и логический типы. Алгоритмы полного перебора. Двоичное представление данных. Двоичное кодирование. Двоичная СС и кольца вычетов. Знаковые целые: дополнительный код. Целочисленные типы С++11: intN_t. Явное приведение типа. Битовые операции с целыми: сдвиги, наложение маски. Обмен переменных значениями: универсальный и через XOR. Остаток при делении нацело: %. Разложение числа на цифры. Логический тип bool. Операции !, &&, ||, ^ и , not, and, or, xor. Индуктивные функции: поиск числа, проверка критерия. Алгоритмы полного перебора. Тест простоты числа с использованием переменной-флага. Разложение числа на множители. Управление циклом: break, continue. Определение типа struct. Функция sizeof().
  3. Плавающая точка. Математические методы. Представление вещественных чисел в памяти ПК. Cтандарт IEEE 754-2008. Типы чисел с плавающей точкой в С++ и их соответствие стандарту. Арифметика чисел с плавающей запятой (точкой). Ошибки вычислений. Машинная точность. Иерархия типов чисел в С++. Неявное приведение типа. «Грабли»: приоритет беззнаковых, деление целых. Список всех операций С++ с приоритетами. Модуль cmath. Математические функции С++: выражение аналитических функций. Суммирования ряда Тейлора. Численное интегрирование. Бисекция. Поиск корня уравнения методом двоичного поиска.
  4. Одномерные массивы. Адреса и указатели. Массивы в С++. Хранение в памяти. Фиксированный размер и однотипность элементов. Скорость доступа к элементам. Решето Эратосфена. Копирование массива. Копирование с реверсом. Реверс массива и циклический сдвиг. Добавление и удаление элемента в конце и в начале массива. Стек, очередь и дек на массиве. Адреса и указатели в С++. Размер ячейки для хранения адреса. Разыменование * и взятие адреса &. Адресная арифметика в С++. Преобразование типа указателя. Тип void*. Реинтерпретация данных. Массивы структур struct и структура struct, содержащая массив. Проверка корректности скобочной последовательности.
  5. Универсальные сортировки O(N2). Сортировка массива: постановка задачи. Сортировка обезьяны (без реализации). Проверка упорядоченности за O(N). Сортировка дурака. Сортировка методом пузырька. Сортировка вставками. Сортировка выбором. Устойчивость сортировок.
  6. Связные списки. Динамическая память. Выделение и освобождение динамической памяти: malloc(), calloc(), free(). Операторы new и delete. Ошибки работы с памятью. Контроль за динамической памятью. Некорректные адреса. Инициализация указателей: NULL и nullptr. Создание одномерного динамического массива. Реаллокация в памяти для динамического расширения массива. Списки: односвязный, двусвязный, кольцо. Асимптотика связных списков для разных задач. Стек на односвязном списке. Дек на двусвязном списке.
  7. Двумерные массивы. Обычные двумерные массивы в С++. Заполнение двумерного массива. Треугольник Паскаля. Транспонирование матрицы. Умножение матриц. Динамические двумерные массивы в С++. Линеаризация двумерного массива вручную. Функции. Синхронный вызов. Возврат по стеку вызовов. Сегмент STACK и передача параметров по значению. Модель памяти приложения. Локальные и глобальные переменные. Передача массива в функцию и возврат из функции в С++. Проблема ответственности за освобождение памяти.
  8. Бинпоиск и спецсортировки. Линейный поиск в массиве. Бинарный поиск в упорядоченном массиве. Сортировка подсчётом. Поразрядная сортировка.
  9. Рекурсия. Метод ветвей и границ. Прямой и обратный ход рекурсии. Факториал числа. Алгоритм Евклида. Быстрое возведение в степень. Вычисление чисел Фибоначчи. Ханойские башни. Рекурсивная генерация всех чисел длины M. Генерация всех перестановок в массиве. Перебор с возвратом: метод ветвей и границ.
  10. Быстрые сортировки. Принцип «Разделяй и властвуй». Умножение Карацубы. Быстрая сортировка Тони Хоара. Сортировка слиянием.
  11. Динамическое программирование. Количество траекторий на схеме дорог. Проблема повторных вычислений на примере чисел Фибоначчи. Динамическое программирование сверху и снизу. Кузнечик: количество траекторий, траектория минимальной стоимости.
  12. Двумерное динамическое программирование. Алгоритм укладки рюкзака (дискретный). Наибольшая общая подпоследовательность. Наибольшая возрастающая подпоследовательность.
  13. Строки и работа с файлами. Кодировки символов: ASCII, однобайтные и семейство Unicode. Строка как массив символов. Си-строки и ANSI-строки. Почему Си-строки не следует использовать для обработки текста. Проверка равенства строк. Простой и вероятностный алгоритмы. Вычисление расстояния Левенштейна. Поиск последовательности редакционных изменений. Работа с файлами в чистом Си. Два уровня API.
  14. Поиск подстрок. С++ строки std::string. Поиск подстроки: наивный алгоритм. Префикс-функция. Алгоритм Кнута-Морриса-Пратта. Z-функция и Z-алгоритм. Работа с потоками ifstream, ofstream, fstream. Форматирование ввода-вывода: iomanip.
  15. Параллелизм на системах с общей памятью. Ресурс параллельности. Потоки. Асинхронные вызовы.

Методические указания обучающимся

Ваша цель — запомнить классические алгоритмы и структуры данных, знать их асимптотическую сложность, уметь их описывать устно, а также программировать их на языке C++. Курс содержит три вида учебной деятельности: 1) лекции, 2) лабораторные работы и 3) самостоятельная работа.

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

Описания лабораторных работ появляются по ходу семестра на сайте http://cs.mipt.ru/cpp_algo. Очное присутствие на лабораторных обязательно. Типичная работа представляет из себя: а) текст для изучения; б) упражнения; в) контест с автоматизированной системой проверки. Автоматически проверяемые задачи допускается доделывать дома в качестве самостоятельной работы. В самостоятельную работу включается также подготовка к сдаче устного зачёта. В течение семестра на лабораторных занятиях проводится 2 контрольные работы: промежуточная и итоговая.

Оценивание

Дифференцированный зачёт сдаётся устно. Рекомендуемая итоговая оценка студента по предмету — это среднее арифметическое взвешенное оценок по лабораторным работам и контрольным. Преподаватель, экзаменующий студента, видит все эти оценки по отдельности, а также рекомендуемую итоговую оценку. Исходя из ответа студента итоговая оценка в зачётку может быть отклонена от рекомендуемой на ±2 балла (по 10-балльной шкале). Если преподаватель хочет повысить или понизить оценку на большее число баллов, он советуется со старшим преподавателем курса. Студент при несогласии с итоговой оценкой может потребовать апелляции у старшего преподавателя (в конце зачётной недели).

More Repositories

1

lections_2019

Лекции на ФОПФ в 2019-2020 учебном году, программный код с лекций.
Python
266
star
2

pydatan

Python Data Analysis course materials of Timofey Khirianov (MIPT, Phystech School of Fundamental and Applied Physics).
Jupyter Notebook
125
star
3

kpk2016

КПК Фоксфорд 2016 по информатике. Код Т.Ф., остающийся после занятий, заготовки под домашние проекты.
Python
15
star
4

cpp_1514_2020

C++
13
star
5

bare_c_oop

Object oriented programming examples on bare C language.
Makefile
13
star
6

foxford-vne-ege-2019-2020

Репозиторий для кода курса "Информатика за пределами ЕГЭ (10-11 класс, Фоксфорд)
Python
11
star
7

go_python

Игра "Змейка"
Python
7
star
8

cpp_lections_2017

Примеры с лекций 2017-2018 учебного года
C++
6
star
9

pygame_examples

Примеры использования PyGame
Python
5
star
10

cannon

Набросок игры "Пушка"
Python
4
star
11

msu_supercomputing_academy

Учебные задачи, которые я выполняю на летней суперкомпьютерной академии в МГУ, 2016 год.
C++
4
star
12

fox_python_2016

Python
4
star
13

kpk-foxford-2019

Демонстрация итеративной разработки и движения "сверху-вниз".
Python
4
star
14

lftsh_2016

Репозиторий для работ в ЛФТШ в Душоново 2016
Python
4
star
15

brainhorn_presentation_2020

Примеры кода с презентации 29 февраля 2020 в Brainhorn (г. Таганрог)
Python
4
star
16

foxford_2018

Фоксфорд - Информатика, 2018-2019 год.
Python
3
star
17

games

Python
3
star
18

ftsh_dagestan_7

ФТШ республики Дагестан, программы для учащихся и преподавателей 7 класса.
Python
3
star
19

crosses_and_zeroes

Игра в крестики-нолики на двоих или с AI в графическом интерфейсе.
Python
3
star
20

fox_class10

Репозиторий для программ 10 класса, Фоксфорд
2
star
21

wolfarab-0.0.5

Project which I created with Dmitry Klimov and Dina Ljubimova in Spring of 2002 year.
2
star
22

fox_inf10_2016

Примеры программ 10 класса информатики Фоксфорда
Python
2
star
23

fibonacci_tdd_2021

Fibonacci function with testing module.
Python
2
star
24

infa2021

Пример репозитория для студентов.
2
star
25

2021_housework

Учебный проект, на котором будет показана итеративная разработка в структурной парадигме.
2
star
26

ActionGame

Educational project for the eng.speaking MIPT group in 2022 year.
Python
1
star
27

pascal

My repo for pascal programs.
Pascal
1
star