Различия между версиями 1 и 6 (по 5 версиям)
Версия 1 от 2015-06-16 15:34:03
Размер: 7813
Редактор: FrBrGeorge
Комментарий:
Версия 6 от 2015-06-17 10:10:41
Размер: 11157
Редактор: FrBrGeorge
Комментарий:
Удаления помечены так. Добавления помечены так.
Строка 2: Строка 2:
Предполагается адаптация [[PascalAAL|курса на базе Паскаля]], в котором сохранить структуру изложения, а темы адаптировать к Питону. При необходимости добавить / преобразовать / удалить подтемы.
Строка 16: Строка 17:
  * Возможно, хватит для большего числа алгоритмов   * Возможно, хватит времени для большего числа алгоритмов
  * /!\
К лекциям (!) прилагаются задания в EJudge.
Строка 19: Строка 22:
''В таблице для краткости используются урезанные формулировки, полные формулировки забраны в комментарии (для просмотра нажать на ссылку «комментарии» в шапке страницы).
Строка 21: Строка 25:
/!\ '''TODO'''
Часть 1. Введение в теорию алгоритмов
|||||| Часть 1. Введение в теорию алгоритмов ||
|| Интуитивное понятие алгоритма /* Интуитивное понятие алгоритма. Свойства алгоритмов. */ || … || … ||
|| Алгоритм как преобразование слов в алфавите, МТ, НАМ, … /* Уточнение понятия алгоритма, алгоритм как преобразование слов из заданного алфавита. Машина Тьюринга. Нормальные алгоритмы Маркова. Основные схемы объединения алгоритмов (композиция, разветвление, цикл). Тезис Тьюринга и принцип нормализации, их обоснование. */ || || ||
|| Алгоритмически неразрешимые проблемы /* Алгоритмически неразрешимые проблемы. Неразрешимость проблем самоприменимости, останова и эквивалентности алгоритмов. */ || || ||
|| Модельная ЭВМ /* Модельная ЭВМ. Машинное представление данных. Машинный язык как практический формальный способ записи алгоритмов. Недостатки машинных языков. */ || || ||
|||||| Часть 2. Алгоритмические языки. Язык Паскаль ||
|| Алгоритмические языки /* Характеристика алгоритмических языков. Понятие трансляции. Алфавит, синтаксис и семантика алгоритмического языка. Описание синтаксиса языка с помощью металингвистических формул (БНФ) и синтаксических диаграмм. */ || || ||
|| Язык Паскаль /* Язык Паскаль (стандартная версия). Алфавит, служебные слова и стандартные имена. Структура программы: заголовок программы и блок, разделы описаний и операторов. */ || Язык Python || +Понятие исполнителя ||
|| Типы данных, переменные, присваивание, выражения /* Типы данных, их классификация. Переменные и константы, разделы переменных и констант. Стандартные простые типы (числовые, логический, символьный). Выражения. Оператор присваивания. Стандартные процедуры ввода-вывода. */ || Типы объектов, выражения, понятие о связывании объектов. Именование. || Не все типы объектов (но последовательности нужны) и не все их конструкторы ||
|| Управление потоком вычислений /* Операторы, их классификация. Пустой, составной и условный операторы. Оператор перехода, раздел меток. Операторы цикла. */ || Управление потоком вычислений || Исключения описываются не здесь, в цикле `for` рассказать про «вычислимые последовательности», например `xrange()`||
|| Структурное программирование и комментарии /* Способы повышения наглядности программы: комментарии, структурная запись программ, структурное программирование. */ || Структурное программирование. Строки документации и комментарии || Перенести на после функций ||
|| Нестандартные типы данных, /* Нестандартные типы данных, раздел типов. Перечислимые и ограниченные типы. Оператор варианта. */ || Стандартные типы данных || Выдержать баланс разумного при выборе (словари точно не надо) ||
|| Процедуры и функции /* Процедуры и функции. Формальные и фактические параметры. Локализация имен и меток. Способы передачи параметров. Побочные эффекты функций. Параметры-функции и параметры-процедуры. */ || Функции. Пространства имён: видимость и время жизни. || Упаковка/распаковка параметров, видимо, не здесь. А `lambda`? Было бы уместно в контексте «параметров-функций» ||
|| Рекурсия /* Рекурсивные процедуры и функции. Итерация и рекурсия. Алгоритмы поиска с возвратами (backtracking), реализация их с помощью рекурсии. */ || Рекурсия || ||
|| Сложные типы данных /* Сложные типы данных. Массивы, строки. Записи; оператор присоединения. Множества. Файлы, текстовые файлы, внешние и внутренние файлы. */ || Подробнее о последовательностях, множествах и пр. Файлы, сериализация. || Что-нибудь ещё? Например, циклические конструкторы? ||
|| Динамические переменные. Ссылочные типы данных. || Счётчик связей. /* Уникальный идентификатор объекта. Операция `is` */ || Что-то ещё? ||
|| Методы разработки программы /* Методы разработки программы (пошаговая детализация и др.). Тестирование и отладка программ. */ || Методы разработки программы || ||
|||||| Часть 3. Динамические структуры данных ||
Строка 24: Строка 44:
    Интуитивное понятие алгоритма. Свойства алгоритмов.
    Уточнение понятия алгоритма, алгоритм как преобразование слов из заданного алфавита. Машина Тьюринга. Нормальные алгоритмы Маркова. Основные схемы объединения алгоритмов (композиция, разветвление, цикл). Тезис Тьюринга и принцип нормализации, их обоснование.
    Алгоритмически неразрешимые проблемы. Неразрешимость проблем самоприменимости, останова и эквивалентности алгоритмов.
    Модельная ЭВМ. Машинное представление данных. Машинный язык как практический формальный способ записи алгоритмов. Недостатки машинных языков.

Часть 2. Алгоритмические языки. Язык Паскаль

    Характеристика алгоритмических языков. Понятие трансляции. Алфавит, синтаксис и семантика алгоритмического языка. Описание синтаксиса языка с помощью металингвистических формул (БНФ) и синтаксических диаграмм.
    Язык Паскаль (стандартная версия). Алфавит, служебные слова и стандартные имена. Структура программы: заголовок программы и блок, разделы описаний и операторов.
    Типы данных, их классификация. Переменные и константы, разделы переменных и констант. Стандартные простые типы (числовые, логический, символьный). Выражения. Оператор присваивания. Стандартные процедуры ввода-вывода.
    Операторы, их классификация. Пустой, составной и условный операторы. Оператор перехода, раздел меток. Операторы цикла.
    Способы повышения наглядности программы: комментарии, структурная запись программ, структурное программирование.
    Нестандартные типы данных, раздел типов. Перечислимые и ограниченные типы. Оператор варианта.
    Процедуры и функции. Формальные и фактические параметры. Локализация имен и меток. Способы передачи параметров. Побочные эффекты функций. Параметры-функции и параметры-процедуры.
    Рекурсивные процедуры и функции. Итерация и рекурсия. Алгоритмы поиска с возвратами (backtracking), реализация их с помощью рекурсии.
    Сложные типы данных. Массивы, строки. Записи; оператор присоединения. Множества. Файлы, текстовые файлы, внешние и внутренние файлы.
    Динамические переменные. Ссылочные типы данных.
    Методы разработки программы (пошаговая детализация и др.). Тестирование и отладка программ.

Часть 3. Динамические структуры данных
/!\
Строка 51: Строка 52:
Третья

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

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

Концепция

  1. Введение в теорию алгоритмов
    • В основном без изменений
    • Организовать практику по МТ и НАМ
    • Увеличить в объёме тему УМ, организовать практику и построить обучение второго семестра на этой базе (примерно наполовину)
  2. Алгоритмические языки. Язык Python
    • Выделить тематические составляющие и построить большую часть курса аналогично
    • Использовать классы как конструкторы пространства имён (строго без ООП)
    • Подробно описывать достаточное подмножество языка, остальное тезисно (спецкурс? 4-й семестр?)
    • /!\

  3. Динамические структуры данных
    • «Динамические структуры данных» — это не «то, что можно сконструировать», а «то, что удобно использовать в алгоритмах» ⇒ конструируем сами, изучаем, некоторые берём готовые
    • Возможно, хватит времени для большего числа алгоритмов
    • /!\

К лекциям (!) прилагаются задания в EJudge.

Сравнительная таблица

В таблице для краткости используются урезанные формулировки, полные формулировки забраны в комментарии (для просмотра нажать на ссылку «комментарии» в шапке страницы).

Курс Паскаля

Курс Питона

Замечания

Часть 1. Введение в теорию алгоритмов

Интуитивное понятие алгоритма

Алгоритм как преобразование слов в алфавите, МТ, НАМ, …

Алгоритмически неразрешимые проблемы

Модельная ЭВМ

Часть 2. Алгоритмические языки. Язык Паскаль

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

Язык Паскаль

Язык Python

+Понятие исполнителя

Типы данных, переменные, присваивание, выражения

Типы объектов, выражения, понятие о связывании объектов. Именование.

Не все типы объектов (но последовательности нужны) и не все их конструкторы

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

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

Исключения описываются не здесь, в цикле for рассказать про «вычислимые последовательности», например xrange()

Структурное программирование и комментарии

Структурное программирование. Строки документации и комментарии

Перенести на после функций

Нестандартные типы данных,

Стандартные типы данных

Выдержать баланс разумного при выборе (словари точно не надо)

Процедуры и функции

Функции. Пространства имён: видимость и время жизни.

Упаковка/распаковка параметров, видимо, не здесь. А lambda? Было бы уместно в контексте «параметров-функций»

Рекурсия

Рекурсия

Сложные типы данных

Подробнее о последовательностях, множествах и пр. Файлы, сериализация.

Что-нибудь ещё? Например, циклические конструкторы?

Динамические переменные. Ссылочные типы данных.

Счётчик связей.

Что-то ещё?

Методы разработки программы

Методы разработки программы

Часть 3. Динамические структуры данных

/!\

  • Списки. Представление списков и реализация основных операций на ними в языке Паскаль. Варианты списков (с заглавным звеном, циклические, двунаправленные). Стек, очередь. Векторное и списковое представления их, реализация операций на ними. Двоичные (бинарные) деревья. Обход дерева с использованием стека, очереди и рекурсии. Деревья поиска (сравнений), алгоритмы поиска, вставки и удаления элементов. Таблицы, операция поиска по ключу. Последовательные таблицы (неупорядоченные и упорядоченные). Понятие о (временнóй) оценке сложности алгоритмов в худшем случае и в среднем. Оценка сложности оптимального алгоритма поиска по ключу. Бинарный поиск в упорядоченных таблицах. Методы сортировки, оптимальные оценки числа сравнений и перемещений при сортировке. Представление таблиц в виде деревьев поиска (сравнений), оценки сложности поиска по ключу в таких таблицах. АВЛ-деревья, оценки сложности поиска, алгоритм вставки. Перемешанные таблицы (хэш-таблицы). Функции расстановки. Устранение коллизий методами закрытого хеширования (линейных проб) и открытого хеширования (цепочек).

Python/PythonAlgorithmCourse (последним исправлял пользователь FrBrGeorge 2015-06-22 15:54:51)