- •НИУ ВШЭ – Пермь
- •Зачем нужна динамика?
- •Динамические структуры данных
- •Линейные списки:
- •Линейные списки:
- •Линейные списки:
- •Линейные списки:
- •Линейные списки:
- •Линейные списки:
- •Линейные списки:
- •Линейные списки:
- •Понятие дерева в программировании
- •Понятие дерева:
- •Понятие бинарного дерева
- •Бинарные деревья:
- •Бинарные деревья:
- •Бинарные деревья:
- •Бинарные деревья:
- •Бинарные деревья:
- •Бинарные деревья:
- •Бинарные деревья:
- •Бинарные деревья:
- •Бинарные деревья:
- •Бинарные деревья:
- •Бинарные деревья:
- •Бинарные деревья:
- •Бинарные деревья:
- •Бинарные деревья:
- •Бинарные деревья:
- •Бинарные деревья:
- •Бинарные деревья:
- •Бинарные деревья:
- •Бинарные деревья:
- •Бинарные деревья:
- •Бинарные деревья:
- •Бинарные деревья:
- •Бинарные деревья:
- •Бинарные деревья:
- •Бинарные деревья:
- •Бинарные деревья:
- •Бинарные деревья:
- •Бинарные деревья:
- •Бинарные деревья:
- •Бинарные деревья:
НИУ ВШЭ – Пермь
Факультет бизнес-информатики
Кафедра информационных технологий в бизнесе
Динамические структуры и поиск данных
Материалы курса «Теоретические основы информатики»
Лекция 16
Лядова Л.Н.
Пермь 2013
Зачем нужна динамика?
Как организовать хранение данных, если количество значений заранее неизвестно?
Например:
•Решается транспортная задача, но число пунктов доставки может изменяться в широком диапазоне.
•Компилятор должен хранить данные обо всех описанных в программе объектах (константах, переменных, функциях…).
•…
Память является критическим ресурсом, поэтому неэффективное её использование может ограничить применение программ.
Выход – использование динамических структур данных.
Однако динамическое распределение памяти ведёт к накладным расходам.
Что экономить: память или время?
2
Динамические структуры данных
Динамическое управление памятью в прикладных программах чаще всего реализуется с использованием следующих структур данных:
•линейные списки с различными дисциплинами размещения элементов;
•деревья (проще всего реализуются бинарные деревья, но применяются и другие структуры);
•графы (наиболее общая структура данных).
Общий подход к использованию этих структур: данные представляются элементами этих структур, причём каждый элемент содержит как информационные поля, содержащие собственно обрабатываемые данные, так и ссылочные, с помощью
которых реализуются связи между элементами этих структур. При вводе новых данных создаётся новый элемент и он включается в
3соответствующую структуру.
Линейные списки:
определение
Список представляет собой рекурсивную динамическую структуру данных. В самом простом случае она определяется правилом:
<Список> ::= <Пусто> | <Голова списка>
<Список> <Голова списка> ::= <Элемент>
Элемент
Элемент
Элемент
…
Элемент
4
Линейные списки:
определение
Список представляет собой рекурсивную динамическую структуру данных. В самом простом случае она определяется правилом:
<Список> ::= <Пусто> | <Голова списка>
<Список> <Голова списка> ::= <Элемент>






Голова списка Элемент 


Элемент
Элемент
…
Элемент
5
Линейные списки:
определение
Список представляет собой рекурсивную динамическую структуру данных. В самом простом случае она определяется правилом:
<Список> ::= <Пусто> | <Голова списка>
<Список> <Голова списка> ::= <Элемент>
Голова списка |
|
|
Хвост списка – список |
|
|
||
|
|
Элемент
Элемент
Элемент
…
Элемент
6
Линейные списки:
определение
Список представляет собой рекурсивную динамическую структуру данных. В самом простом случае она определяется правилом:
<Список> ::= <Пусто> | <Голова списка>
<Список> <Голова списка> ::= <Элемент>
Голова списка |
Хвост списка – список |
|
|
Элемент |
|
Элемент |
|
Элемент |
|
|
… |
Голова «хвоста списка» |
Элемент |
|
7
Линейные списки:
определение
Списком типа Т называется структура, которая образована элементом данных типа Т, называемым головой списка, и
конечным (возможно, пустым) множеством с переменным числом элементов, называемым «хвостом» этого списка, который
является списком типа Т (состоит из элементов данных типа T).
Голова списка |
Хвост списка – список |
|
|
Элемент |
|
Элемент |
|
Элемент |
|
|
… |
Голова «хвоста списка» |
Элемент |
|
8
Линейные списки:
определение типа данных
Как описать тип данных T?
Структура данных должна включать информационные поля и ссылочные для организации связей между элементами.
В простейшем |
|
поле – |
|
ссылка на |
Почему нельзя использовать прямую |
|
|
|
рекурсию в определении |
|
|
Описание |
|
|
|
|
типа данных? |
|
|
|
|
Как получить доступ к списку? |
|
списка}
Element = record
Inf: InfoType; {информационное поле}
Next: RefElement {ссылка на следующий элемент списка}
9 end;
Линейные списки:
представление в оперативной памяти
Элементы списка размещаются в области памяти, называемой
кучей.
В отличие от стека для размещения элементов в куче и их удаления нет определённой дисциплины: элементы могут размещаться в
памяти в произвольном порядке (по запросу программиста) и удаляться также в том порядке, который необходим программисту для решения поставленной задачи. Пока программист не запросил память для размещения элемента, элемент не существует, т.е. нельзя ни присваивать значения, ни считывать их. Память станет доступна только после выделения – только тогда можно выполнять операции над элементом.
Все элементы в куче доступны по ссылкам на них – по адресам выделенных для них блоков памяти. Динамические структуры предполагают наличие определённых типов связей между элементами, которые позволяют выбрать и обработать все элементы структуры. При этом должна быть хотя бы одна внешняя
10ссылка на «первый» элемент структуры данных – переменная, размещённая либо в статической памяти, либо в стеке.
