
- •Тема 4. Основы алгоритмизации и структуры данных
- •1 Понятие алгоритма
- •2 Свойства алгоритма
- •3 Способы записи алгоритмов
- •4 Блок-схемы алгоритмов
- •5 Типы алгоритмов
- •5.1 Алгоритмы ветвления
- •5.2 Циклические алгоритмы
- •6 Структуры данных
- •7 Алгоритмы сортировки данных
- •7.1Сортировка выбором
- •7.2 Простая обменная сортировка (метод пузырька)
- •7.3 Метод Шелла
5 Типы алгоритмов
1)Линейный алгоритм.Алгоритмическая конструкция, реализованная в виде последовательности действий, в которой каждое действие выполняется один раз.
2)Алгоритм ветвления.Алгоритмическая конструкция, обеспечивающая выбор между двумя альтернативными вариантами в зависимости от значения входных данных. При каждом конкретном наборе входных данных разветвляющийся алгоритм сводится к линейному.
3) Алгоритм циклический. Алгоритмическая конструкция, в которой некая, идущая подряд группа действий алгоритма выполняется несколько раз, в зависимости от входных данных и условий задачи. Группа повторяющихся действий на каждом шаге цикла называется телом цикла. Любая циклическая конструкция содержит в себе элементы ветвящихся алгоритмов.
Примеры алгоритмов, записанных в виде блок-схем, приведены в таблице 2.
Таблица 2
Линейный алгоритм
Циклический |
Ветвящиеся алгоритмы
|
Подробнее рассмотрим ветвящиеся алгоритмы.
5.1 Алгоритмы ветвления
Условие для ветвящихся алгоритмов составляется в виде логического выражения – сравнения некоторых объектов между собой.
Существует шесть операций сравнения:
- равно (=);
- не равно (!=);
- меньше (<);
- больше (>);
- меньше или равно (<=);
- больше или равно (>=).
Часто используются составные условия. Для их обозначения используются две логические операции: И и ИЛИ, также инверсия НЕ.
Существует два частных случая ветвящихся алгоритмов:
- структура обход, когда одна из ветвей не содержит никакого действия;
- структура множественный выбор, когда количество вариантов выполняемых действий больше двух.
Рассмотрим теперь циклические алгоритмы.
5.2 Циклические алгоритмы
Существует три вида циклических алгоритмов:
Цикл с параметром (с заданным количеством повторений), в нем тело цикла выполняется заданное количество раз.
Цикл с предусловием (цикл пока), в котором тело цикла выполняется до тех пор, пока выполняется условие.
Цикл с пост условием (цикл до). Сначала выполняется тело цикла, а затем проверяется истинность условия. Если условие истина, выполнение цикла прекращается.
Примеры циклических алгоритмов, записанных в виде блок-схем, приведены в таблице 3.
Таблица 3
С параметрами |
Цикл “До”
Цикл “Пока” |
Далее перейдем к рассмотрению структур данных.
6 Структуры данных
Независимо от содержания и сложности любые данные в памяти ЭВМ представляются последовательностью двоичных разрядов, или битов, а их значениями являются соответствующие двоичные числа.
Данные, представленные в таком виде, имеют очень простую организацию или, другими словами, слабо структурированы.
Для человека описывать и исследовать сколько-нибудь сложные данные в терминах последовательностей битов весьма неудобно. Более крупные и содержательные, нежели бит, «строительные блоки» для организации произвольных данных получаются на основе понятия «структуры данного».
Под структурой данных в общем случае понимают множество элементов данных и множество связей между ними.
Понятие физическая структура данныхотражает способ физического представления данных в памяти машины и называется еще структурой хранения, внутренней структурой или структурой памяти.
Рассмотрение структуры данных без учета ее представления в машинной памяти называется абстрактной или логической структурой.
Рассмотрим классификацию структур данных.
Различаются ПРОСТЫЕ (базовые) структуры данных и СЛОЖНЫЕ (интегрированные).
Простыми называются такие структуры данных, которые не могут быть расчленены на составные части, большие, чем биты.
Сложныминазываются такие структуры данных, составными частями которых являются другие структуры данных - простые или в свою очередь сложные. Сложные структуры данных конструируются программистом с использованием средств интеграции данных, предоставляемых языками программирования.
Весьма важный признак структуры данных является ее изменчивость - изменение числа элементов и (или) связей между элементами структуры.
По признаку изменчивости различают структуры СТАТИЧЕСКИЕ, ПОЛУСТАТИЧЕСКИЕ, ДИНАМИЧЕСКИЕ.
В зависимости от отсутствия или наличия явно заданных связей между элементами данных следует различать НЕСВЯЗНЫЕ структуры (векторы, массивы, строки, стеки, очереди) и СВЯЗНЫЕ структуры (связные списки).
Важный признак структуры данных - характер упорядоченности ее элементов. По этому признаку структуры можно делить на ЛИНЕЙНЫЕ И НЕЛИНЕЙНЫЕ структуры.
В зависимости от характера взаимного расположения элементов в памяти линейные структуры можно разделить на структуры с ПОСЛЕДОВАТЕЛЬНЫМ распределением элементов в памяти (векторы, строки, массивы, стеки, очереди) и структуры с ПРОИЗВОЛЬНЫМ СВЯЗНЫМ распределением элементов в памяти (односвязные, двусвязные списки). Пример нелинейных структур - многосвязные списки, деревья, графы.
Базовые структуры данных, статические, полустатические и динамические характерны для оперативной памяти и часто называются оперативными структурами.
В языках программирования понятие "структуры данных" тесно связано с понятием "типы данных". Любые данные, т.е. константы, переменные, значения функций или выражения, характеризуются своими типами.
Информация по каждому типу однозначно определяет:
1) структуру хранения данных указанного типа, т.е. выделение памяти и представление данных в ней, с одной стороны, и интерпретирование двоичного представления, с другой;
2) множество допустимых значений, которые может иметь тот или иной объект описываемого типа;
3) множество допустимых операций, которые применимы к объекту описываемого типа.
Простые структуры данных
Переменные
Как уже говорилось ранее все данные, обрабатываемые компьютером, хранятся в ячейках памяти компьютера, каждая из которых имеет свой адрес. Для того чтобы не следить за тем, по какому адресу будут записаны те или иные данные, в языках программирования используется понятие переменная, позволяющая отвлечься от адреса ячейки памяти и обращаться к ней с помощью имени переменной.
Переменная – есть именованный объект (ячейка памяти), которая может изменять свое значение.
Имя переменной указывает на значение, а способ ее хранения и адрес остаются скрытыми от программиста.
Константы
Константами называют такие данные, которые не изменяют своего значения на протяжении работы программы. Константа
Некоторые сложные структуры данных
Массивы
Массивы- это индексированная совокупность элементов одного типа. Существуют одномерные массивы (вектор), двухмерные массивы (матрица), и многомерные массивы. Каждый элемент массива имеет свой индекс, т.е. все элементы в массиве пронумерованы по порядку, начиная от 0 (нуля) и до размера массива.
Количество элементов массива называют размерностью.
Примеры обозначения: a[10],b[1][4].
Стек
Стек – это линейный список, в котором все включения и исключения делаются в одном конце списка.
Стекможно представлять себе в виде трубы с одним запаянным концом, в которую можно добавлять элементы (и вынимать их). Говорят, что стек реализуетдисциплину обслуживания LIFO(Lastin--firstout, последним пришел - первым ушел).
Очередь
Очередь – это линейный список, в котором все включения производятся на одном конце списка, а все исключения делаются на другом.
Очередьможно представлять себе в виде трубы с двумя концами, движение по которой возможно лишь в одном направлении -- от конца очереди к ее началу. Говорят, что очередь реализуетдисциплину обслуживания FIFO(Firstin--firstout, первым пришел -- первым ушел).
Дек
Дек – это линейный список, в котором все включения и исключения делаются на обоих концах.
Дек(doubleendedqueue, двусторонняя очередь) - симбиоз стека и очереди. Его можно представлять себе в виде трубы с двумя открытыми концами, с каждым из которых можно работать независимо.