Главная
Данный сайт рассчитан на тех, кто уже умеет писать программы на каком-либо высокоуровневом языке программирования, но хотел бы повысить свой уровень программирования за счёт преобретения новых знаний и умений в области технологии работы со сложными структурами программ и данных. Материалы сайта основаны на одной из лучших книг по решению традиционных задач проектирования программ и собственно программирования - Кубенский А.А. “Структуры и Алгоритмы обработки данных”. Сайт представляет собой электронную версию книги, его разделы полностью соответствуют главам книги. Далее вашему вниманию предлагается краткий анонс книги.
Книга состоит из 8 глав. Условно ее можно разделить на 2 основные части. В первой части, состоящей из двух глав, приведено описание базовых структур данных и алгоритмов; во второй, состоящей из 6 глав, - описанные структуры данных и алгоритмы применяются для решения различных задач и описания других более сложных алгоритмов.
В главе 1 (Способы представления структур данных) книги вводятся структуры данных, используемые затем на протяжении всего дальнейшего изложения. Описаны способы представления в языках программирования таких известных структур данных, как массивы (с фиксированными и плавающими границами), списки, деревья, множества и графы.
В главе 2 (Базовые алгоритмы) вводится понятие абстрактного типа данных, активно использующееся затем на протяжении всей книги, а также приведены базовые алгоритмы обработки стеков и деревьев. Разд. 2.2 этой главы содержит также описание некоторых алгоритмов сортировки массивов.
В главе 3 (Обработка текстов) вводится еще один из основных типов данных - строка. Приводятся примеры способов представления строк, отвечающие различным потребностям в написании алгоритмов обработки строк.
Глава 4 (Символьные преобразования) целиком посвящена символьным преобразованиям выражений. Выбор именно этих алгоритмов обусловлен личным интересом к ним автора, однако выражения оказываются очень простым и удобным материалом, на котором можно продемонстрировать многие интересные подходы и приемы программирования.
Глава 5 (Алгоритмы распределения памяти) посвящена системам распределения памяти. Алгоритмы распределения памяти не только могут служить хорошим примером использования разнообразных структур данных, но и сами по себе имеют важное прикладное значение. Подробно объяснено, как использовать собственную систему распределения и управления памятью для хранения объектов, создаваемых в программах на C++.
В главе 6 (Алгоритмы обработки графов) приведены примеры некоторых классических алгоритмов обработки графов. Опять, не претендуя на полноту описания, автор выбрал некоторые из достаточно простых и, на его взгляд, интересных алгоритмов. Это алгоритмы нахождения кратчайших путей между вершинами в графе, а также алгоритмы нахождения минимальных остовных деревьев (скелетов) графа.
Глава 7 (Обмен сообщениями и обработка сообщений) посвящена технологии построения программ, в которой основу программы составляют объекты, обменивающиеся между собой сообщениями. Обычно такая технология применяется только для построения очень больших программ, таких как операционные системы, системы программирования и т. п. Достаточно назвать в качестве примера операционную систему MS Windows. Тем не менее в этой главе приведены примеры достаточно простых программ, в которых применение этого подхода также может быть оправдано, хотя, конечно, существуют и более простые способы решения приводимых в этой главе задач.
Наконец, в главе 8 (Функции как носитель информации) приводится один из нетрадиционных способов представления информации - функциональное представление. Такое представление чаще всего используется в функциональном программировании, однако даже в традиционных императивных языках можно использовать некоторые из подходов и приемов функционального программирования. Часто это дает возможность получать необыкновенно короткие и изящные программы для решения сложных задач. Опять для приведенных в этой главе задач, наверное, можно и даже лучше использовать другие подходы, однако я хочу не столько продемонстрировать готовое решение, сколько подход, который может использоваться в более сложных случаях.