Предметом обсуждения, разумеется, станут
алгоритмы, и удобно было бы начать с формального
определения этого понятия. Но сделать это отнюдь не просто: нужно
вникать в содержание весьма нетривиальной теории
алгоритмов, а ее к вводному курсу уж никак не отнести.
Можно ли обойтись без определения, рассчитывая лишь
на интуитивное представление читателя о сущности алгоритма? Пожалуй,
настораживает излишняя популярность интересующего нас термина, и,
как в таких случаях говорят, его расширительное толкование. Так,
автору попадались "алгоритм шахматиста" (в книге), "алгоритм сбора
информации" при социологическом опросе (в газетной публикации), и
прочие.
Поэтому возьмем за основу представление об
алгоритме как описании некоторого вычислительного процесса,
а далее введем некоторые уточнения. Тем не менее, иллюстрацией нам
часто будут служить примеры невычислительного характера, не
связанные напрямую с компьютерной обработкой информации, за
что читатель, надеюсь, нас не осудит.
Сначала - уточнения терминологические. Нередко, в
целях экономии, сочетание "описание вычислительного процесса" мы
будем заменять коротким "процесс", что не должно вводить читателя в
заблуждение. В самом деле, мы чаще будем только конструировать
алгоритмы, вовсе не стремясь тут же их применить. Кроме того, если
алгоритм - это описание процесса, то способ представления алгоритма
- это "описание описания процесса". Половину "описаний" так и
хочется отбросить.
Итак, условимся, что и форма записи алгоритма, -
формат, - и его содержание отнюдь не произвольны, а подчинены вполне
определенным ограничениям.
Начнем с форматов записи, коих известно немало.
Читатель, знакомый с технологией программирования, следует при
записи алгоритма достаточно жестким правилам языка, - безразлично,
какого. Вполне вероятно, что первые его уроки были посвящены
языку блок-схем. Другую разновидность языка схем
представляют весьма компактные диаграммы Насси-Шнейдермана.
Оба графических формата обладают как достоинствами, так и
недостатками, но здесь нет места их обсуждению. Общей же для всех
графических форматов является возможность либо помещать текст
описания внутрь блоков, либо выносить комментарий за пределы
рисунка.
При всем многообразии способов записи алгоритма мы
отдаем предпочтение "первичной" форме, а именно, словесному
описанию. Разумеется, в этом варианте также прибегают к ряду
обозначений, обычно вполне очевидных, в частности, - явной нумерации
шагов. Альтернативой излишней краткости могут стать дополнительные
комментарии.
Понятие алгоритма на примере
Дальнейшее раскрытие алгоритма
Временная трудоемкость алгоритма
Временная трудоемкость алгоритма - 2
Временная трудоемкость алгоритма - примеры
Алгоритмы небольшой трудоемкости
Алгоритмы с большой трудоемкостью
Упражнения на трудоемкость алгоритмов
Эффективность алгоритма
Примеры
Еще пример
Упражнения
Статические и динамические структуры
Упражнения
Еще упражнения
Пример
Еще примеры
Упражнение
Немного о системах счисления
Решение упражнений
Позиционные системы счисления с переменным основанием
Решение упражнения
Продолжение знакомства с системами счисления
Упражнения
Решение упражнения
Логические операции
Решение
Упражнение
Проектирование алгоритма
Примеры
Упражнение
Пример
Еще пример
Пример
Алгоритм перевода натурального числа в любую систему счисления
Упражнение
Последовательность Фибоначчи
Массивы
Многомерные массивы
Упражнения
Пример 1
Пример 2
Пример 3
Примеры
Ускоренный поиск элементов
Пример
Упражнения
Больше про упорядочивание элементов
Упражнения, примеры
Алгоритм E6-2
Упражнения
Параметры задачи
Сведение задачи к подзадачам
Понятие рекуррентного соотношения
Правильные рекуррентные соотношения
Метод динамического программирования
Примеры 1
Примеры 2
Вычисление элементов двумерной таблицы
Пример
Пример
Еще примеры вычисления таблицы
Примеры 2
Примеры 3
Пример
Вычисление элементов многомерных таблиц
Пример
Пример 1
Пример 2
Несколько примеров
Использование рекуррентных соотношений для игровых задач
Итерация всей таблицы
Пример
Продолжение...
Немного о куче
Полные бинарные деревья
Основное свойство структуры данных КУЧА
Реализация операции добавления элемента
Реализация операции удаления минимального элемента
Применение бинарных куч
Стек
Механизм 1 - список
Механизм 2 - вектор фиксированной длины
Механизм стековой арифметики
Упражнения
Использование нескольких стеков
Упражнения
Еще упражнения
Первый стековый язык программирования
Некоторые общие элементы языка
Примеры
Немного геометрических понятий и операций
Упражнения
Стек графических состояний
Операторы цикла и условного исполнения
Упражнение
кривые Безье
Упражнения
Тексты
Примеры
Шрифты
Рекурсия
Механизм рекурсии
Сортировка с помощью рекурсии
Упражнение 1
Упражнение 2
Канал связи
Упражнение
Задача
Сжатие данных
Исключение избыточных элементов данных
Пример
Задача
RLE
Задача
Задача
Пример
Немного истории
Коды переменной длины
Упражнение
Геометрические задачи в программировании
Упражнения
Назад