Алгоритмы и алгоритмические языки

текст содержит несколько поясняющих комментариев, для их показа надо нажать «Comments» в начале или в конце страницы

Аннотация

/!\ TODO общее описание

Курс состоит из четырёх неравных по объёму тематических разделов:

  1. Введение в теорию алгоритмов. Алгоритмические языки.
    • Теоретическая база алгоритмизации и примеры реализующих её формализмов
  2. Основы ЯП Python
    • Термины и понятия; базовый набор операторов и структур данных, необходимых для того, чтобы составлять и изучать алгоритмы
  3. Возможности ЯП Python
    • Подмножество ЯП, достаточное для эффективного программирования; семантика работы исполнителя
  4. (!) Алгоритмы и структуры данных.

    • Классические алгоритмы и структуры данных, в них используемые

Темы последнего раздела идут не отдельно в конце семестра, а появляются после изучения подходящей конструкции ЯП или приёма программирования. Помечены значком (!) .

Практическую поддержку курсу обеспечивает «Практикум на ЭВМ». Основные цели практикума:

Практикум включает в себя:

Лекции

примерный почасовой план

Введение в теорию алгоритмов. Алгоритмические языки

  1. Интуитивное понятие алгоритма: преобразование данных исполнителем на основании команд. Свойства алгоритмов.
  2. Программируемый калькулятор: данные, команды, последовательное, условное и циклическое выполнение.
  3. Алгоритм как преобразование слов из заданного алфавита. Нормальные алгоритмы Маркова.
  4. Машина Тьюринга. Тезис Тьюринга и принцип нормализации, их обоснование.
  5. Алгоритмически неразрешимые проблемы.
  6. Неразрешимость проблем самоприменимости, останова и эквивалентности алгоритмов.
  7. /!\

  8. Характеристика алгоритмических языков. Понятия исполнителя и трансляции. Компилируемые и интерпретируемые языки.
  9. Алфавит, синтаксис и семантика алгоритмического языка. Описание синтаксиса языка с помощью металингвистических формул (БНФ) и синтаксических диаграмм.

Основы ЯП Python

  1. Константы-конструкторы основных скалярных объектов. Операции над объектами. Интерпретация выражения: конструирование и удаление объектов. Именование объектов, оператор связывания.
  2. Основные типы последовательностей. Индексирование и секционирование. Множественный оператор связывания, распаковка последовательностей.
  3. Логические выражения. Условный оператор. Блок операторов. Вложенные операторы.
  4. Оператор цикла с условием. Каноническая схема цикла. Оператор цикла с последовательностью.

  5. Функции: задание и оператор вызова. Контекст выполнения, глобальное и локальное пространства имён, их перекрытие.
  6. Оформление кода. Строки документации, комментарии, соглашение об именах. Модернизация языка Python сообществом.
  7. (!) Понятие вычислительной сложности алгоритмов в худшем случае и в среднем. Поиск и бинарный поиск в упорядоченных последовательностях.

  8. (!) Методы сортировки, оптимальные оценки числа сравнений и перемещений при сортировке.

  9. Стандартные модули. Основные функции стандартных модулей math, random, os, sys и т. п.

  10. Конструирование пространства имён: модули и классы. Экземпляры классов.
  11. Интерактивный и файловый ввод-вывод. Параметры командной строки.
  12. (!) Рекурсия. Достоинства, недостатки, критерий применения в Python.

Возможности ЯП Python

  1. Референция объектов: имена и ссылки из составных объектов. Счётчик ссылок. Идентификаторы объектов и их сравнение.
  2. Старшинство операций. Логические операции. Нулевой объект типа.
  3. Скалярные типы данных. /!\ Что ещё?

  4. Пространство имён объекта: поля и методы объекта.

  5. Методы последовательностей. Использование последовательностей в качестве стека.

  6. (!) Алгоритмы поиска с возвратами (backtracking), реализация их с помощью рекурсии. Замещение рекурсии стеком контекстов.

  7. Строковые методы. Байтовые массивы.
  8. (!) Z-функция, π-функция и поиск подстроки

  9. Исключения как средство управления потоком вычислений
  10. (!) Задача хеширования. Открытое и закрытое хеширование. Требования к функции расстановки.

  11. Хешируемые объекты Python. Словари. Методы словарей.

  12. (!) Моделирование многомерных массивов. Модуль array.

  13. Множества и операции с ними. Циклические конструкторы различных объектов.
  14. Позиционные и именованные параметры функции, значение по умолчанию. Упаковка и распаковка параметров функции.
  15. Функции с произвольным количеством и именами параметров. Словари-пространства глобальных и локальных имён.
  16. (!) Двоичные (бинарные) деревья. Обход дерева с использованием стека, очереди и рекурсии.

  17. (!) Деревья поиска (сравнений), алгоритмы поиска, вставки и удаления элементов.

  18. Генераторы: выражения-генераторы, повторно входимые функции (функции-генераторы). Работа цикла с итерируемым объектом.
  19. Спецметоды. Реализация операций над объектами путём задания спецметодов.

Дополнительные главы

/!\ TODO: что ещё должно/может быть: выбрать нужное и подсунуть в нужное место

  1. eval() / exec()

  2. (!) Куча

  3. (!) Замыкание транзитивного бинарного отношения.

  4. Сериализация и бинарные данные
  5. Элементы функционального программирования.
  6. Объектное планирование в разработке программ. ООП.
  7. Наследование и полиморфизм
  8. Полезные модули !. Внутреннее устройство исполнителя: байт-код, стек-машина, словари имён и т. п.
  9. Ещё, см., например курс для Московской Биржи

Практикум

/!\ TODO Видимо, стоит темы практикума прямо в лекциях задачать

  1. Интерпретатор командной строки. Использование Python в качестве калькулятора.
  2. Неформальное введение в Python. Работа со справочным материалом.

Семестровый проект: простейший эмулятор МТ, НАМ, ПК и т.п.

Python/PythonBaseCourse (last edited 2015-07-21 12:51:23 by FrBrGeorge)