Студопедия

КАТЕГОРИИ:


Архитектура-(3434)Астрономия-(809)Биология-(7483)Биотехнологии-(1457)Военное дело-(14632)Высокие технологии-(1363)География-(913)Геология-(1438)Государство-(451)Демография-(1065)Дом-(47672)Журналистика и СМИ-(912)Изобретательство-(14524)Иностранные языки-(4268)Информатика-(17799)Искусство-(1338)История-(13644)Компьютеры-(11121)Косметика-(55)Кулинария-(373)Культура-(8427)Лингвистика-(374)Литература-(1642)Маркетинг-(23702)Математика-(16968)Машиностроение-(1700)Медицина-(12668)Менеджмент-(24684)Механика-(15423)Науковедение-(506)Образование-(11852)Охрана труда-(3308)Педагогика-(5571)Полиграфия-(1312)Политика-(7869)Право-(5454)Приборостроение-(1369)Программирование-(2801)Производство-(97182)Промышленность-(8706)Психология-(18388)Религия-(3217)Связь-(10668)Сельское хозяйство-(299)Социология-(6455)Спорт-(42831)Строительство-(4793)Торговля-(5050)Транспорт-(2929)Туризм-(1568)Физика-(3942)Философия-(17015)Финансы-(26596)Химия-(22929)Экология-(12095)Экономика-(9961)Электроника-(8441)Электротехника-(4623)Энергетика-(12629)Юриспруденция-(1492)Ядерная техника-(1748)

Представление данных




Блок–схемы алгоритмов

Связи между шагами можно изобразить в виде графа:

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

1) из которой выходит одно ребро – операторы;

2) из которой выходит два ребра – логические условия или предикаты.

Кроме того, имеется единственный оператор конца (из которого не выходит ни одного ребра) и единственный оператор начала. Важной особенностью блок-схем является то, что связи которые она описывает, не зависят от того, являются ли шаги элементарными или представляют собой самостоятельные алгоритмы – блоки. Для данного блока неважно, как устроены другие блоки; для программирования блока достаточно знать, где лежит исходная информация, какова форма её предcтавления, что должен делать блок и куда записывать результат. Блок-схемы соответствуют логике, которой пользуется программист для создания сложных, многовариантных, итеративных планов действий.

При всей наглядности языка блок-схем не следует переоценивать его возможности. Он отражает связи лишь по управлению. Блок-схемы не содержат сведений ни о данных, ни о памяти, ни о используемом наборе элементарных шагов. В частности, если в блок-схемах нет циклов, это еще не значит, что циклов нет в алгоритме. По существу, блок-схема это не язык, а средство для описания детерминизма.

При разработке программ стоит задача представления, моделирования и использования самых разных видов информации.

Информацией называют абстрактное содержание какого-либо высказывания, описания, указания, сообщения или известия. Внешнюю форму информации называют представлением. Представление интерпретируется, чтобы получить информацию. Информация в ее абстрактном виде не может быть записана непосредственно, а только может быть как-то изображена.

Понятие числа в математике – абстракция, которая понимается независимо от конкретного изображения. Законы в математике справедливы для чисел в римской записи, так же как и при двоичной или десятичной записи. Различные способы представления чисел существенно различаются с точки зрения удобства их использования для определенных процессов обработки. Алгоритмы работают над элементами данных, которые могут быть объединены в так называемый носитель (множества данных). При разработке программ используется понятие типа данных. Интуитивно ясно, что тип данных характеризует некоторую группу однородных данных. В зависимости от того, является ли данное неделимым или его возможно разложить на компоненты, различают простые и структурные данные. К общеизвестным простым данным относятся литеры,целые и вещественные числа, булевские значения "ложь" и "истина". Примерами структурных данных служат массивы, записи, файлы и т.д.

Несмотря на долгую историю типов данных, до сих пор не утвердилась единая концепция типообразования. К традиционным простым и структурным типам в настоящее время добавляются средства конструирования абстрактных, инкапсулированных, родовых и прочих типов данных. К сожалению, каждое из таких средств существует само по себе. Это не позволяет рассматривать каждый тип данных как результат действия некоторого единого механизма и связать все типы данных программ или языка программирования в стройную систему.

По отношению к типам данных можно выделить конкретный и абстрактный аспекты их рассмотрения. Тип данных, предоставляемый конкретной системой программирования – конкретен, для каждого из них транслятор обеспечивает конкретный способ представления значений (в виде последовательности битов памяти) и конкретные алгоритмы реализации операций. В то же время типы данных, предлагаемые языком программирования, абстрактны. Для каждого из них описание языка задает только имена основ, имена и типы операций и смысл операций. В разных трансляторах одному и тому же абстрактному типу сопоставляются различные конкретные типы.

В описании языков программирования типы данных можно разделить на два класса: стандартные и произвольные. Стандартные типы характеризуют язык программирования, их спецификация осуществляется разработчиками языка. Произвольные типы характеризуют конкретную программу, их спецификацию и реализацию осуществляют пользователи. Как стандартные, так и произвольные типы можно разделить на конкретные и родовые типы. Конкретный тип характеризует определенное множество значений, он не требует дальнейшего уточнения и готов к непосредственному употреблению. Родовой тип характеризует множество множеств значений и требует конкретизации путем представления аргументов, переменная такого типа не может быть полностью обработана до завершения конкретизации типа. Примеры конкретных типов: целый, литерный, отрезок от 1 до 10, массив из 100 целых, стек из 100 вещественных, родовых типов: отрезок, стек, запись, массив.

В вычислительной машине программы обычно оперируют с таблицами информации. В большинстве случаев это не просто аморфные массы числовых величин: в таблицах присутствуют важные структурные отношения между элементами данных. В простейшем случае таблица может быть линейным списком, в более сложных ситуациях таблица может быть двумерным или n -мерным массивом (при весьма большом n), она может иметь структуру дерева, представляющего отношения иерархии или ветвления, или это может быть сложная многосвязная структура с огромным множеством взаимных соединений (как в человеческом мозгу).

Выбор структур данных может существенно повлиять на скорость и эффективность реализованного алгоритма.

Рассмотрим преимущества и недостатки использования массивов. Среди преимуществ следующие:

массивы помогают объединять множества данных в осмысленные группы;

имена массивов с индексами минимизируют потребность в слежении за многими элементами данных с различными именами;

использование индексов обеспечивает непосредственный и автоматический доступ к любому элементу в массиве;

индексация позволяет производить с помощью циклов авто-матическую, быструю и эффективную обработку всех данных или выделенных подмножеств, как то: инициализация, поиск, хранение и модификация.

Недостатки массивов не так очевидны. Лучше всего массивы годятся для данных, значения которых не изменяются и порядок которых также не изменяется.

Связанный список представляет собой структуру данных, которая требует дополнительной памяти, но позволяет легко вносить изменения. Линейный связанный список – это конечный набор пар, каждая из которых состоит из информационной части и указующей части. Каждая пара называется ячейкой. Линейные связанные списки – это эффективная структура данных для моделирования ситуаций, в которых подвергаются изменениям упорядоченные массивы элементов данных. Это справедливо для случаев, когда модификациями являются главным образом внесение элементов в середину массивов или удаление элементов из середины массива.

Когда изменения касаются лишь начала и конца, необходимость в связанных списках исчезает. В таких случаях используют стек, который представляет собой бесконечную в одну сторону последовательность слов памяти. Для запоминания элемента данных в стеке элемент заносят в верхнее слово, сдвигая тем самым вниз все другие слова, хранящиеся в стеке. Выбор элементов из стека возможен лишь считыванием по одному из вершины, все остальные элементы при этом сдвигаются вверх. Мы не имеем права выбирать элементы данных внутри стека.

В очереди элементы добавляются с одного конца, а выбираются с другого. Для моделирования очереди, как правило, используют линейный массив и две целые переменные, которые указывают на первый и последний элемент очереди.

Деревья – наиболее важные нелинейные структуры, встречающиеся в вычислительных алгоритмах. Всякая иерархическая классификационная схема принимает в конце концов вид дерева. Наиболее важный тип деревьев – бинарные или двоичные. Двоичное дерево обычно определяют как конечное множество узлов, которое либо пусто, либо состоит из корня и двух двоичных деревьев. Многие деревья, возникающие в прикладных задачах, по существу являются бинарными. Кроме того, любое дерево можно представить в виде двоичного.

Для работы с древовидными структурами имеется множество алгоритмов, во всех встречается одна и та же идея: прохождение дерева – это способ методичного исследования узлов дерева, при котором каждый узел проходится только один раз.




Поделиться с друзьями:


Дата добавления: 2014-01-07; Просмотров: 342; Нарушение авторских прав?; Мы поможем в написании вашей работы!


Нам важно ваше мнение! Был ли полезен опубликованный материал? Да | Нет



studopedia.su - Студопедия (2013 - 2024) год. Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав! Последнее добавление




Генерация страницы за: 0.007 сек.