Различия между версиями 22 и 23
Версия 22 от 2015-05-11 18:19:46
Размер: 10819
Редактор: FrBrGeorge
Комментарий:
Версия 23 от 2015-05-11 18:23:07
Размер: 13978
Редактор: FrBrGeorge
Комментарий:
Удаления помечены так. Добавления помечены так.
Строка 44: Строка 44:
 {{{#!wiki comment
Дано: калькулятор. Понимает числа, 4 действия арифметики и = (не
стековый). Имеет кнопки M+ и MR.

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

Чего не хватает?

 1. Хранения команд, чтобы сам вычислял.
  * Есть несколько вариантов
  * Допустим, команды — это кнопки калькулятора. Хранятся и выполняются
   подряд.
 1. Хранения входных и выходных данных (или ввода и вывода их), а также промежуточнЫХ результатОВ вычислений
  * Есть много вариантов!
  * Допустим, заведём и пронумеруем ячейки с данными, в которых будем всё хранить (перед началом записывать, после конца — считывать) а ещё сделаем операции M+ и MR двухместными (второй параметр — номер ячейки).
 1. Вычисления не всего (подряд), а только соответствующие куски формулы
  * Есть очень много вариантов! Например, раскрашивание команд и выполнение только команд одного цвета. Но непонятно, как организовать.
  * Воспользуемся готовым решением: перенумеруем ячейки команд и сделаем команду перехода
 1. Вычисления не всегда, а только если некоторые свойства данных этого требуют
  * Есть много вариантов!
  * Допустим, введём команды вычисления свойств данных (например, сравнения) и команды условного перехода
 1. Обращения к ячейке, номер которой надо ещё вычислить
  * Есть много вариантов! Например, косвенная адресация.
  * Так как номера команд и номера ячеек уже есть, введём команды самомодификации кода (вычислить номер ячейки, записать этот номер внутрь команды).
 1. Вычислять одну и ту же формулу, пока данные не приобретут желаемые свойства
  * Есть много вариантов, но у нас уже есть готовое решение: условный переход, ничего придумывать не надо.
 }}}

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

Аннотация

/!\ TODO

Концепция

  • Цели курса:
    • Заложить основы алгоритмического мышления
    • Дать эффективный язык описания алгоритмов и структур данных
    • Дать универсальный инструмент программирования
  • Задачи курса:
    • Познакомить с основами теории алгоритмов
    • Привить представление об ЭВМ как алгоритмическом исполнителе команд, и о языке программирования как о формализации таких команд
    • Развить навыки составления алгоритмов и отлаживания программ на языке Python3
    • Познакомить с алгоритмами и структурами данных, используемыми при решении типовых задач

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

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

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

Лекции

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

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

  1. Интуитивное понятие алгоритма: преобразование данных исполнителем на основании команд. Свойства алгоритмов.
  2. Программируемый калькулятор: данные, команды, последовательное, условное и циклическое выполнение.
  3. Алгоритм как преобразование слов из заданного алфавита. Нормальные алгоритмы Маркова.
  4. Машина Тьюринга. Тезис Тьюринга и принцип нормализации, их обоснование.
  5. Алгоритмически неразрешимые проблемы.
  6. Неразрешимость проблем самоприменимости, останова и эквивалентности алгоритмов.
  7. Характеристика алгоритмических языков. Понятия исполнителя и трансляции. Компилируемые и интерпретируемые языки.
  8. Алфавит, синтаксис и семантика алгоритмического языка. Описание синтаксиса языка с помощью металингвистических формул (БНФ) и синтаксических диаграмм.

Основы ЯП Python

  1. История Python. Интерпретатор командной строки.
  2. и неформальное использование Python как калькулятора.
  3. Константы-конструкторы основных скалярных объектов. Операции над объектами. Интерпретация выражения: конструирование и удаление объектов.
  4. Основные типы последовательностей. Индексирование и секционирование. Множественный оператор именования, распаковка последовательностей.
  5. Ссылки на объекты: имена; ссылки из составных объектов. Счётчик ссылок. Идентификаторы объектов и их сравнение.
  6. Условный оператор. Блок операторов. Вложенные операторы.
  7. Оператор цикла с условием. Каноническая схема цикла.
  8. Старшинство операций. Логические операции. Нулевой объект типа.
  9. Функции: задание и оператор вызова. Контекст выполнения, глобальное и локальное пространства имён, их перекрытие.
  10. Оформление исходного кода: комментарии, строки документации, договорённости об именовании. Модернизация языка Python сообществом.
  11. Пространство имён объекта: поля и методы объекта.
  12. Методы последовательностей. Использование последовательностей в качестве стека.
  13. Цикл с итерируемым объектом. Циклические конструкторы объектов.
  14. Строковые методы. Конкатенация и разбиение строк.
  15. Модуль как контейнер имён. Использование модуля. Стандартные модули. Файл как модуль. Строки документации.
  16. Файловый ввод-вывод. Сериализация.
  17. Взаимодействие с ОС: потоки ввода-вывода, параметры командной строки, /!\

  18. Понятие вычислительной сложности алгоритмов в худшем случае и в среднем. Поиск и бинарный поиск в упорядоченных последовательностях.
  19. Рекурсия. Достоинства, недостатки, критерий применения в Python.
  20. Алгоритмы поиска с возвратами (backtracking), реализация их с помощью рекурсии. Замещение рекурсии стеком контекстов.
  21. Методы сортировки, оптимальные оценки числа сравнений и перемещений при сортировке.
  22. Задача хеширования. Открытое и закрытое хеширование. Требования к функции расстановки.
  23. Хешируемые объекты Python. Словари. Методы словарей.
  24. Множества, байтовые массивы. Константные (хешируемые) варианты. Операции над множествами.
  25. Позиционные и именованные параметры функции, значение по умолчанию. Упаковка и распаковка параметров функции.
  26. Функции с произвольным количеством и именами параметров. Словари-пространства глобальных и локальных имён.
  27. Генераторы: выражения-генераторы, повторно входимые функции (функции-генераторы). Работа цикла с итерируемым объектом.
  28. Класс как конструктор пространства имён. Экземпляр класса: динамические поля и поля класса. Методы. Вызов метода. Строки документации.
  29. Спецметоды. Реализация операций над объектами путём задания спецметодов.


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

  1. Моделирование списков. Однонаправленные, двунаправленные и циклические списки. Заглавное звено.
  2. Двоичные (бинарные) деревья. Обход дерева с использованием стека, очереди и рекурсии.
  3. Деревья поиска (сравнений), алгоритмы поиска, вставки и удаления элементов.
  4. Куча
  5. Замыкание транзитивного бинарного отношения.
  6. Моделирование многомерных массивов.
  7. Исключения как средство управления потоком вычислений

Python/PythonBaseCourse (последним исправлял пользователь FrBrGeorge 2015-07-21 15:51:23)