- •Основы алгоритмизации
- •1. История
- •Основные этапы процесса решения задачи на пк
- •Математическая постановка задачи
- •Выбор метода решения задачи
- •Разработка алгоритма
- •Программирование
- •Подготовка исходных данных и непосредственное выполнение программы
- •3. Понятие алгоритма. Сущность алгоритмизации
- •4. Свойства алгоритма
- •5. Средства описания алгоритма
- •6. Методы разработки алгоритмов
- •7. Правила оформления схем алгоритмов
- •8. Типовые структуры алгоритмов
- •Литература
- •Представление данных
- •1.1.4. Виды алгоритмов
8. Типовые структуры алгоритмов
Три основных типовых структуры:
линейная,
разветвляющаяся,
циклическая.
Конечно, отнести конкретный алгоритм к какой-либо из них полностью удается нечасто, т.к. вычислительные задачи очень разные и по сути, и по методам решения. Однако, любой алгоритм, каким бы сложным он ни был, можно разбить на отдельные части, фрагменты, каждый из которых и является алгоритмом одной из перечисленных типовых структур. Каждая типовая структура имеет свои принципы построения, их необходимо знать и соблюдать при разработке своего алгоритма.
Литература
Ахо А., Хопкрофт Дж., Ульман Дж. Построение и анализ вычислительных алгоритмов. М.: Мир, 1979.- 362 с.
Брой М. Информатика. Основополагающее введение: В 4-х ч. Ч.1.- М.: Диалог-МИФИ, 1996.-299 с.
Вирт Н. Алгоритмы и структуры данных. - М.: Мир, 1989.- 360 с.
Вирт Н. Алгоритмы + структуры данных = программы. - М.: Мир, 1985.-385 с.
Вычислительная техника. Терминология: Справочное пособие. - М.: Изд-во стандартов, 1989.- 167 с.
ГОСТ 19.701-90. Единая система программной документации. Схемы алгоритмов и программ. Условные обозначения и правила выполнения. - М.: Изд-во стандартов, 1991.- 26 с.
Гудман С., Хидетниеми С. Введение в разработку и анализ алгоритмов (под редакцией В.В. Мартынюка). - М.: Мир, 1981.- 366 с.
Дьяконов В.П. Справочник по алгоритмам и программам на языке БЕЙСИК для персональных ЭВМ. - М.: Наука, 1987. - 240 с.
Кнут Д. Искусство программирования для ЭВМ: В 3 т. Т. 3. Сортировка и поиск. - М.:Мир, 1978.- 844 с.
Криницкий Н.А. Алгоритмы вокруг нас. - М.: Наука, 1984.- 223 с.
Любимский Э.З., Мартынюк В.В., Трифонов Н.П. Программирование. - М.: Наука, 1980.- 608 с.
Марков А.А., Нагорный Н.М. Теория алгорифмов. - М.: Наука, 1984.- 432 с.
Светозарова Г.И., Мельников А.А. Основы алгоритмизации и программирование на БЭЙСИКе. - М.: Московский институт стали и сплавов, 1985.- 241 с.
Турский В. Методология программирования. - М.: Мир, 1981. - 344 с.
Успенский В.А., Семенов А.Л. Теория алгоритмов: основные открытия и приложения. - М.: Наука, 1987.- 288 с.
Электронно-вычислительные машины: В 8-ми кн.: Учебное пособие для вузов / Под ред. А.Я.Савельева. Кн. 3. Алгоритмизация и основы программирования. - М.: ВШ, 1987.- 127
Представление данных
При разработке программ стоит задача представления, моделирования и использования самых разных видов информации.
Информацией называют абстрактное содержание какого-либо высказывания, описания, указания, сообщения или известия. Внешнюю форму информации называют представлением. Представление интерпретируется, чтобы получить информацию. Информация в ее абстрактном виде не может быть записана непосредственно, а только может быть как-то изображена.
Понятие числа в математике – абстракция, которая понимается независимо от конкретного изображения. Законы в математике справедливы для чисел в римской записи, так же как и при двоичной или десятичной записи. Различные способы представления чисел существенно различаются с точки зрения удобства их использования для определенных процессов обработки. Алгоритмы работают над элементами данных, которые могут быть объединены в так называемый носитель (множества данных). При разработке программ используется понятие типа данных. Интуитивно ясно, что тип данных характеризует некоторую группу однородных данных. В зависимости от того, является ли данное неделимым или его возможно разложить на компоненты, различают простые и структурные данные. К общеизвестным простым данным относятся литеры,целые и вещественные числа, булевские значения "ложь" и "истина". Примерами структурных данных служат массивы, записи, файлы и т.д.
Несмотря на долгую историю типов данных, до сих пор не утвердилась единая концепция типообразования. К традиционным простым и структурным типам в настоящее время добавляются средства конструирования абстрактных, инкапсулированных, родовых и прочих типов данных. К сожалению, каждое из таких средств существует само по себе. Это не позволяет рассматривать каждый тип данных как результат действия некоторого единого механизма и связать все типы данных программ или языка программирования в стройную систему.
По отношению к типам данных можно выделить конкретный и абстрактный аспекты их рассмотрения. Тип данных, предоставляемый конкретной системой программирования – конкретен, для каждого из них транслятор обеспечивает конкретный способ представления значений (в виде последовательности битов памяти) и конкретные алгоритмы реализации операций. В то же время типы данных, предлагаемые языком программирования, абстрактны. Для каждого из них описание языка задает только имена основ, имена и типы операций и смысл операций. В разных трансляторах одному и тому же абстрактному типу сопоставляются различные конкретные типы.
В описании языков программирования типы данных можно разделить на два класса: стандартные и произвольные. Стандартные типы характеризуют язык программирования, их спецификация осуществляется разработчиками языка. Произвольные типы характеризуют конкретную программу, их спецификацию и реализацию осуществляют пользователи. Как стандартные, так и произвольные типы можно разделить на конкретные и родовые типы. Конкретный тип характеризует определенное множество значений, он не требует дальнейшего уточнения и готов к непосредственному употреблению. Родовой тип характеризует множество множеств значений и требует конкретизации путем представления аргументов, переменная такого типа не может быть полностью обработана до завершения конкретизации типа. Примеры конкретных типов: целый, литерный, отрезок от 1 до 10, массив из 100 целых, стек из 100 вещественных, родовых типов: отрезок, стек, запись, массив.
В вычислительной машине программы обычно оперируют с таблицами информации. В большинстве случаев это не просто аморфные массы числовых величин: в таблицах присутствуют важные структурные отношения между элементами данных. В простейшем случае таблица может быть линейным списком, в более сложных ситуациях таблица может быть двумерным или n-мерным массивом (при весьма большом n), она может иметь структуру дерева, представляющего отношения иерархии или ветвления, или это может быть сложная многосвязная структура с огромным множеством взаимных соединений (как в человеческом мозгу).
Выбор структур данных может существенно повлиять на скорость и эффективность реализованного алгоритма.
Рассмотрим преимущества и недостатки использования массивов. Среди преимуществ следующие:
·массивы помогают объединять множества данных в осмысленные группы;
·имена массивов с индексами минимизируют потребность в слежении за многими элементами данных с различными именами;
·использование индексов обеспечивает непосредственный и автоматический доступ к любому элементу в массиве;
·индексация позволяет производить с помощью циклов авто-матическую, быструю и эффективную обработку всех данных или выделенных подмножеств, как то: инициализация, поиск, хранение и модификация.
Недостатки массивов не так очевидны. Лучше всего массивы годятся для данных, значения которых не изменяются и порядок которых также не изменяется.
Связанный список представляет собой структуру данных, которая требует дополнительной памяти, но позволяет легко вносить изменения. Линейный связанный список – это конечный набор пар, каждая из которых состоит из информационной части и указующей части. Каждая пара называется ячейкой. Линейные связанные списки – это эффективная структура данных для моделирования ситуаций, в которых подвергаются изменениям упорядоченные массивы элементов данных. Это справедливо для случаев, когда модификациями являются главным образом внесение элементов в середину массивов или удаление элементов из середины массива.
Когда изменения касаются лишь начала и конца, необходимость в связанных списках исчезает. В таких случаях используют стек, который представляет собой бесконечную в одну сторону последовательность слов памяти. Для запоминания элемента данных в стеке элемент заносят в верхнее слово, сдвигая тем самым вниз все другие слова, хранящиеся в стеке. Выбор элементов из стека возможен лишь считыванием по одному из вершины, все остальные элементы при этом сдвигаются вверх. Мы не имеем права выбирать элементы данных внутри стека.
В очереди элементы добавляются с одного конца, а выбираются с другого. Для моделирования очереди, как правило, используют линейный массив и две целые переменные, которые указывают на первый и последний элемент очереди.
Деревья – наиболее важные нелинейные структуры, встречающиеся в вычислительных алгоритмах. Всякая иерархическая классификационная схема принимает в конце концов вид дерева. Наиболее важный тип деревьев – бинарные или двоичные. Двоичное дерево обычно определяют как конечное множество узлов, которое либо пусто, либо состоит из корня и двух двоичных деревьев. Многие деревья, возникающие в прикладных задачах, по существу являются бинарными. Кроме того, любое дерево можно представить в виде двоичного.
Для работы с древовидными структурами имеется множество алгоритмов, во всех встречается одна и та же идея: прохождение дерева – это способ методичного исследования узлов дерева, при котором каждый узел проходится только один раз.
