Студенческая лаборатория МФТИ-Intel. Структуры данных. Гареева Оксана

Save this PDF as:
 WORD  PNG  TXT  JPG

Размер: px
Начинать показ со страницы:

Download "Студенческая лаборатория МФТИ-Intel. Структуры данных. Гареева Оксана"

Транскрипт

1 Студенческая лаборатория МФТИ-Intel Структуры данных Гареева Оксана

2 План лекци: Структуры данных. Общие понятия. Введение в указатели Структура: список Структура: очередь Структура: стек Структура: куча 2

3 Структура данных: Это форма хранения и представления информации Работает с однотипными и/или логически связанными данными Она поддерживает определенный порядок доступа к данным. 3

4 Примеры структур данных Линейные Массив Список Связанный список Стек Очередь Хэш-таблица Иерархические Двоичные деревья N-арные деревья Иерархический список Сетевые Простой граф Ориентированный граф Табличные Таблица реляционной базы данных Двумерный массив Другие 4

5 Структуры данных характеризуются Временем добавления элемента поиска элемента удаления элемента Памятью общая занимаемая память / «полезная» память 5

6 Оценка сложности алгоритма - - зависимость количества элементарных операций, выполняемых вычислительной машиной от объема обрабатываемой информации Асимптотическая оценка сложности f(n) = Θ(g(n)), если существуют c1, c2>0 и n0 такие, что c1*g(n)<=f(n)<=c2*g(n), при n>n0 Верхняя оценка сложности f(n) = Ο(g(n)), если существует c>0 и n0 такие, что 0<=f(n)<=cg(n), при n>n0. Нижняя оценка сложности f(n) = Ω(g(n)), если существует c>0 и n0 такие, что 0<=cg(n)<=f(n), при n>n0. 6

7 Простые примеры оценки сложноси. Сложность О(N) Задача «покрасить забор» - время выполнения задачи линейно зависит от длины забора Сложность О(logN) Задача «найти имя в телефонной книге» - открыв книгу примерно в середине, мы уменьшаем размер «оставшейся проблемы» вдвое (за счет сортировки имен по алфавиту). Таким образом, в книге, толщиной в 1000 страниц, любое имя находится не больше чем за раз 7

8 Введение в указатели Указатель - это переменная, значением которой является адресс другой переменной. Так как указатель может ссылаться на переменные разных типов, с указателем связывается тип того объекта, на который он ссылается. 8

9 Введение в указатели Объявление указателя: тип *имя; пример: long *p; int* a, b, *c; // описываются два указателя на целое с именами a и c, а также целая переменная b. Инициализация указателя: с помощью операции получения адреса: int a = 5; // целая переменная int* p = &a; // в указатель записывается адрес a int* p (&a); // то же самое другим способом присваиванием значения другого инициализиро-ванного указателя: int* r = p; 9

10 Список - - структура данных последовательного доступа, в которой можно удалять и добавлять элементы в середине структуры В любой момент времени в списке доступны лишь два элемента элементы до указателя и за указателем. 10

11 Список. Список Варианты списков: Однонаправленный Двунаправленный Связанный 11

12 Список Типовые операции над списками: получение доступа к некоторому элементу списка для проверки и/или изменения содержимого его полей; вставка нового элемента сразу перед или после произвольного элемента; удаление произвольного элемента; объединение в одном списке двух (или более) линейных списков; разбиение линейного списка на два (или более) списка; определение количества элементов в списке; сортировка элементов списка; поиск элементов с заданным значением. 12

13 Отличия связного(список) и несвязного(массив) представленя данных Список достоинства: размер структуры ограничивается только доступным объемом машинной памяти; при изменении логической последовательности элементов структуры требуется не перемещение данных в памяти, а только коррекция указателей; Большая гибкость структуры; недостатки: на поля связок расходуется дополнительная память; доступ к элементам связной структуры может быть менее эффективным по времени; Массив достоинства: доступ за константное время к любому элементу память тратится только на данные недостатки: статичность, структуры неизменность 13

14 Список. Реализация Элемент списка struct list_el { int value; struct list_el* next; }; Cписок struct list { struct list_el* first; int size; }; 14

15 Очередь алгоритм FIFO (first-in-first-out первый вошёл первым вышел). типовые операции над очередью: Добавление элемента в очередь(помещение в хвост) Удаление элемента из очереди(удаление из головы) Проверка пуста ли очередь Очистка очереди 15

16 Очередь. Способы реализации. Массив + две целочисленных переменных start и end struct queue { int data[100]; int end; int start; int count }; Связанный список, где добавление и удаление элементов возможно только в соответствующих концах 16

17 Стек структура, из которой элементы извлекаются в порядке, обратном их добавлению. LIFO, последним пришел первым уйдешь (Last In First Out) 17

18 Стек. Реализация на базе массива максимальная глубина стека N элемент на дне стека - начало массива (ячейка [0]) вершина стека хранится где-то в середине массива индекс элемента на вершине стека - указатель стека (sp) специальная переменная если стек пуст sp =

19 Стек. Реализация функций. // объявление стека struct stack { int arr[100]; int count; }; // инициализация стека Void Initial(stack *sp) { sp->count = 0; } // проверка на наличие элементов int Empty(stack *sp) { if (sp->count == 0) return 1; else return 0; } // добавление элемента data void Add(stack *sp, int data) { sp->arr[ps->count] = data; sp->count++; } // удаление элемента void Del(stack *sp) { sp->count--; } // печать содержимого стека void Show(stack *sp) { for (int I = 0; I < sp->count; i++) printf( %d, sp->arr[i] ); } // проверка на заполненность int Full(stack *sp) { if (sp->count == 100) return 1; else return 0; } 19

20 Работа с линейными структурами Структура Вставка Удаление Поиск Массив - - O(1) Список O(N) O(N) O(N) Связанный список Стек Очередь O(1) O(1) O(N) O(1) (добавление в конец) O(1) (добавление в конец) O(1) (удаление последнего) O(1) (удаление первого) O(N) O(N) 20

21 Деревья Дерево - динамическая иерархическая структура данных Двоичное дерево дерево, каждый элемент которого состоит из информационной части и указателей на левый и правый элемент 21

22 Двоичная Куча Дерево, для которого выполняется основное свойство кучи: приоритет каждой вершины больше приорететов ее потомков 22

23 Куча. Применяется для реализации очереди с приоритетом (это очередь, в которой важно не то, кто «встал» раньше, а кто «главнее») Алгоритмов сортировки Алгоритмов поиска 23

24 Куча. Реализация Легко реализуется с помощью массива. Тогда у элемента с индексом i сыновья элементы с индексами 2i +1 и 2i+2. Родитель элемента j имеет индекс (j-1)/2 // объявление структуры struct heap { }; int hs; int val[100]; // возврат максимального(минимального) элемента int get_max(heap *h){ } return h->val[0]; // добавление элемента в кучу void add_heap(heap *h, int x){ int y, pos=h->hs, npos; h->val[h->hs++] = x; npos=(pos-1)/2; while (pos && h->val[pos] > h->val[npos]) { y=h->val[pos]; h->val[pos]=h->val[npos]; h->val[npos] = y; pos=npos; npos=(pos-1)/2; } } 24

25 Добавление элемента в кучу 25 Добавляем элемент на последнее место в массиве При нарушении св-ва кучи «поднимаем» элемент на уровень выше(меняем местами с родителем) Подолжаем пока элемент не займет свое место

26 Двоичная Куча. Свойства. Получение максимального(минимального) элемента за O(1) Добавление нового элемента O(logN) Удаление максимального(минимального) элемента O(logN) Изменить значение любого элемента O(logN) Привести неупорядоченный массив элементов в кучу O(N) 26

27 Хеш - таблицы Хеш-таблица множество пар ключ-значение. Представляют собой некоторое обобщение массива. Но, ключ массива число(индекс), ключ хеш-таблицы - любой объект. Самый распространенный пример хеш-таблицы «словарь» Операции с хеш-таблицами: Добавление новой пары ключ-значение Поиск значения по ключу Удаление пары ключ-значение по ключу Важное свойство - при некоторых разумных допущениях, все три операции (поиск, вставка, удаление элементов) в среднем выполняются за время O(1). (не гарантируется, что время выполнения отдельной операции мало, т.к. при достижении некоторого значения коэффициента заполнения необходимо осуществлять перестройку индекса хеш-таблицы: увеличить значение размера массива и заново добавить в пустую хеш-таблицу все пары) 27

28 Хеширование Идея основана на распределении ключей в обычном массиве H[0..m-1]. Распределение осуществляется вычислением для каждого ключа элемента некоторой хеш-функции h. Функция на основе ключа вычисляет целое число n, которое служит индексом для массива H. Необходимо придумать такую хеш-функцию, которая бы давала различный хеш-код для различных объектов. 28

29 Хеш-функция Хеш-функцией на множестве К возможных ключей называется функция h, которая отображает К в некоторый целочисленный интервал a b. Основные требования: Распределение ключей по ячейкам хеш-таблицы должно быть максимально равномерным Значение функции должны легко вычисляться 29

30 Иллюстрация хеш-таблицы индексами ключей в хеш-таблице является результат хеш-функции h, применённой к ключу. 30

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

32 Разрешение коллизий Хеширование с цепочками объединяем элементы, хешированные в одну и ту же ячейку, в связный список 32

33 Разрешение коллизий Линейное хеширование при возникновении коллизии следующие за текущей ячейки проверяются одна за другой, пока не найдётся пустая ячейка, куда и помещается элемент. при достижении последнего индекса таблицы, перескакиваем в начало, рассматривая её как «цикличный» массив. 33

34 Студенческая лаборатория МФТИ-Intel Спасибо за внимание! Материалы лекций можно найти:


Лекция 6. Динамические структуры данных

Лекция 6. Динамические структуры данных Лекция 6. Динамические структуры данных СОДЕРЖАНИЕ 1 Списки... 3 1.1 Стек (LIFO)... 3 1.2 Очередь (FIFO)... 4 1.3 Односвязный и двусвязный списки... 5 2 Ассоциативный массив. Хэш-таблица... 9 2.1 Прямая

Подробнее

ОСНОВЫ ПРОГРАММНОГО КОНСТРУИРОВАНИЯ. Лекция 6 10 октября 2016 г.

ОСНОВЫ ПРОГРАММНОГО КОНСТРУИРОВАНИЯ. Лекция 6 10 октября 2016 г. ОСНОВЫ ПРОГРАММНОГО КОНСТРУИРОВАНИЯ Лекция 6 10 октября 2016 г. СОСТАВНЫЕ ТИПЫ ДАННЫХ ЗАПИСИ Объединяют разнотипные данные (элементы, поля), относящиеся к одному объекту из предметной области. struct Point

Подробнее

Структуры и алгоритмы обработки данных (СиАОД) Курс ведут: Лобанов Александр Анатольевич Шмелева Дарья Викторовна

Структуры и алгоритмы обработки данных (СиАОД) Курс ведут: Лобанов Александр Анатольевич Шмелева Дарья Викторовна Структуры и алгоритмы обработки данных (СиАОД) Курс ведут: Лобанов Александр Анатольевич Шмелева Дарья Викторовна Рекомендуемая литература Материал курса опирается на знания студентов, полученные ранее

Подробнее

Курс «Алгоритмы и алгоритмические языки» 1 семестр 2018/2019. Лекция 24

Курс «Алгоритмы и алгоритмические языки» 1 семестр 2018/2019. Лекция 24 Курс «Алгоритмы и алгоритмические языки» 1 семестр 2018/2019 Лекция 24 1 Пирамидальная сортировка: пирамида (двоичная куча) Рассматриваем массив a как двоичное дерево: Элемент a[i] является узлом дерева

Подробнее

Курс «Алгоритмы и алгоритмические языки» 1 семестр 2015/2016. Лекция 24

Курс «Алгоритмы и алгоритмические языки» 1 семестр 2015/2016. Лекция 24 Курс «Алгоритмы и алгоритмические языки» 1 семестр 2015/2016 Лекция 24 1 Хеш-таблицы Словарные операции: добавление, поиск и удаление элементов по их ключам. Организуется таблица ключей: массив Index[m]

Подробнее

Курс «Алгоритмы и алгоритмические языки» 1 семестр 2018/2019. Лекция 19

Курс «Алгоритмы и алгоритмические языки» 1 семестр 2018/2019. Лекция 19 Курс «Алгоритмы и алгоритмические языки» 1 семестр 2018/2019 Лекция 19 1 Топологическая сортировка узлов ациклического ориентированного графа Структуры данных для представления узлов: Каждый узел исходного

Подробнее

Курс «Алгоритмы и алгоритмические языки» Лекция 20

Курс «Алгоритмы и алгоритмические языки» Лекция 20 Курс «Алгоритмы и алгоритмические языки» Лекция 20 Красно-черные деревья Красно-черное дерево двоичное дерево поиска, каждая вершина которого окрашена либо в красный, либо в черный цвет Поля цвет, дети,

Подробнее

Динамические структуры данных

Динамические структуры данных Динамические структуры данных Динамические массивы ( были рассмотрены на прошлом занятии ) Списки Стэк Очередь не входят в программу данного курса: Ассоциативные массивы Хеш-таблицы Очередь с приоритетом

Подробнее

Курс «Алгоритмы и алгоритмические языки» 1 семестр 2018/2019. Лекция 18

Курс «Алгоритмы и алгоритмические языки» 1 семестр 2018/2019. Лекция 18 Курс «Алгоритмы и алгоритмические языки» 1 семестр 2018/2019 Лекция 18 1 Организация стека как библиотеки stack.h: extern void push (char); extern char pop (void); extern int isempty (void); stack.c: #include

Подробнее

(с) Кафедра системного программирования ф-та ВМК МГУ,

(с) Кафедра системного программирования ф-та ВМК МГУ, Лекция 13 Хеш-таблицы 13.1. Словарные операции: добавление, поиск и удаление элементов по их ключам. Организуется таблица ключей: массив Index[m] длины m, элементы которого содержат значение ключа и указатель

Подробнее

Алгоритмы и структуры данных

Алгоритмы и структуры данных Алгоритмы и структуры данных Косяков Михаил Сергеевич к.т.н., доцент кафедры ВТ Тараканов Денис Сергеевич ассистент кафедры ВТ Бабаянц Александр Амаякович https://vk.com/algoclass_2018 Содержание курса

Подробнее

Стеки и очереди. Лекция 3. Курносов Михаил Георгиевич

Стеки и очереди. Лекция 3. Курносов Михаил Георгиевич Лекция 3 Стеки и очереди Курносов Михаил Георгиевич к.т.н. доцент Кафедры вычислительных систем Сибирский государственный университет телекоммуникаций и информатики http://www.mkurnosov.net/teaching Стек

Подробнее

Курс «Алгоритмы и алгоритмические языки» 1 семестр 2013/2014. Лекция 14

Курс «Алгоритмы и алгоритмические языки» 1 семестр 2013/2014. Лекция 14 Курс «Алгоритмы и алгоритмические языки» 1 семестр 2013/2014 Лекция 14 1 Динамические структуры данных Стек (stack) это динамическая последовательность элементов, количество которых изменяется, причем

Подробнее

Методы вектора. Создание вектора - вызов конструктора с указанием типа элементов: vector <double> Vec1;

Методы вектора. Создание вектора - вызов конструктора с указанием типа элементов: vector <double> Vec1; Методы вектора Создание вектора - вызов конструктора с указанием типа элементов: vector Vec1; //Создание пустого вектора vector Vec2 (Num, fvar2); //Вектор из Num копий fvar2 vector

Подробнее

МИРЭА. Отчет по практической работе 1 по дисциплине «Структуры и алгоритмы обработки данных» Выполнил студент группы ИСБОп Принял Шмелёва Д. В.

МИРЭА. Отчет по практической работе 1 по дисциплине «Структуры и алгоритмы обработки данных» Выполнил студент группы ИСБОп Принял Шмелёва Д. В. МИНОБРНАУКИ РОССИИ ФЕДЕРАЛЬНОЕ ГОСУДАРСТВЕННОЕ БЮДЖЕТНОЕ ОБРАЗОВАТЕЛЬНОЕ УЧРЕЖДЕНИЕ высшего образования «Московский технологический университет» МИРЭА Институт информационных технологий (ИТ) Кафедра инструментального

Подробнее

Курс «Алгоритмы и алгоритмические языки» Лекция 11

Курс «Алгоритмы и алгоритмические языки» Лекция 11 Курс «Алгоритмы и алгоритмические языки» Лекция 11 1 Списки Односвязный список это динамическая структура данных, каждый элемент которой содержит ссылку на следующий элемент (либо NULL, если следующего

Подробнее

Лекция 3 Бинарный поиск Связные списки

Лекция 3 Бинарный поиск Связные списки Лекция 3 Бинарный поиск Связные списки Курносов Михаил Георгиевич к.т.н. доцент Кафедры вычислительных систем Сибирский государственный университет телекоммуникаций и информатики http://www.mkurnosov.net/teaching

Подробнее

Курс «Алгоритмы и алгоритмические языки» 1 семестр 2016/2017. Лекция 15

Курс «Алгоритмы и алгоритмические языки» 1 семестр 2016/2017. Лекция 15 Курс «Алгоритмы и алгоритмические языки» 1 семестр 2016/2017 Лекция 15 1 Списки Односвязный список это динамическая структура данных, каждый элемент которой содержит ссылку на следующий элемент (либо NULL,

Подробнее

Курс «Алгоритмы и алгоритмические языки» Лекция 17

Курс «Алгоритмы и алгоритмические языки» Лекция 17 Курс «Алгоритмы и алгоритмические языки» Лекция 17 Двоичное дерево Прошитое двоичное дерево Рассмотрим двоичное дерево, на верхнем рисунке. У этого дерева нулевых указателей, больше, чем ненулевых: 10

Подробнее

Простейшие контейнеры

Простейшие контейнеры Кафедра информационных систем и технологий http://edu.msiu.ru Е.А. Роганов Простейшие контейнеры Простейшие контейнеры 1 / 1 Простейшие контейнеры Контейнерные классы (container classes) классы, которые

Подробнее

Лекция 5. Алгоритмы сортировки

Лекция 5. Алгоритмы сортировки Лекция. Алгоритмы сортировки СОДЕРЖАНИЕ Характеристики алгоритмов сортировки... Алгоритмы сортировки.... Сортировка вставками.... Сортировка выбором.... Сортировка пузырьком.... Сортировка Шелла.... Сортировка

Подробнее

Деревья с произвольным числом сыновей у каждого узла

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

Подробнее

Практика программирования 9

Практика программирования 9 Практика программирования 9 Стек, очередь, дек. Реализация на основе ограниченного массива Замена рекурсии стеком и циклом Автомат с магазинной памятью Кувшинов Д.Р. КМиММ УрФУ Екатеринбург 2011 Контейнеры

Подробнее

Курс «Алгоритмы и алгоритмические языки» Лекция 14

Курс «Алгоритмы и алгоритмические языки» Лекция 14 Курс «Алгоритмы и алгоритмические языки» Лекция 14 1 Очередь Очередь (queue) это линейный список информации, работа с которой происходит по принципу FIFO. Для списка можно использовать статический массив:

Подробнее

Бинарные кучи (пирамиды) Лекция 9

Бинарные кучи (пирамиды) Лекция 9 Бинарные кучи (пирамиды) Лекция 9 Очередь с приоритетом (priority queue) Очередь с приоритетом (priority queue) очередь, в которой элементы имеют приоритет (вес); первым извлекается элемент с наибольшим

Подробнее

Лекция 4: Стек. Очередь. КурносовМихаил Георгиевич к.т.н. доцент Кафедры вычислительных систем Сибирский государственный университет телекоммуникаций и информатики http://www.mkurnosov.net Контроль 1.

Подробнее

Лекция 6:Словари. Хеш-таблицы. КурносовМихаил Георгиевич к.т.н. доцент Кафедры вычислительных систем Сибирский государственный университет телекоммуникаций и информатики http://www.mkurnosov.net Контроль

Подробнее

Лекция 3: Бинарный поиск. Связные списки. КурносовМихаил Георгиевич к.т.н. доцент Кафедры вычислительных систем Сибирский государственный университет телекоммуникаций и информатики http://www.mkurnosov.net

Подробнее

Практика программирования 18

Практика программирования 18 Практика программирования 18 Эффективность различных контейнеров B-деревья Префиксные деревья Хеш-таблица Кувшинов Д.Р. КМиММ УрФУ Екатеринбург 2012 Эффективность контейнеров: поиск по номеру N число элементов

Подробнее

Выбор реализации функции во время выполнения называется динамическим полиморфизмом.

Выбор реализации функции во время выполнения называется динамическим полиморфизмом. 5.26. Виртуальные функции Выбор реализации функции во время выполнения называется динамическим полиморфизмом. Динамический полиморфизм основан на наследовании и виртуальных функциях. Виртуальная функция

Подробнее

Введение в программирование Урок 13: Анализ сложности

Введение в программирование Урок 13: Анализ сложности Введение в программирование Урок 13: Анализ сложности Введение в компьютерные науки - урок 13 1 Анализ сложности программы по времени Функция f1() ищет индекс такого элемента в массиве a[], который присутствует

Подробнее

Курс «Алгоритмы и алгоритмические языки» 1 семестр 2016/2017. Лекция 18

Курс «Алгоритмы и алгоритмические языки» 1 семестр 2016/2017. Лекция 18 Курс «Алгоритмы и алгоритмические языки» 1 семестр 2016/2017 Лекция 18 1 Двоичное дерево набор узлов, который: либо пуст (пустое дерево), либо разбит на три непересекающиеся части: узел, называемый корнем,

Подробнее

Национальный исследовательский университет «МИЭТ» МИЭТ. Кафедра ПКИМС. Теория алгоритмов. Лекция 2. Способы организации данных

Национальный исследовательский университет «МИЭТ» МИЭТ. Кафедра ПКИМС. Теория алгоритмов. Лекция 2. Способы организации данных МИЭТ Национальный исследовательский университет «МИЭТ» Кафедра ПКИМС Теория алгоритмов Лекция 2 Способы организации данных Слайд 2 из 18 Общая классификация структур данных Данные Дискретные Линейные (составные)

Подробнее

Алгоритмы оптимизации кода. Системное программное обеспечение Дмитрий Тимофеев, РВКС СПбГПУ

Алгоритмы оптимизации кода. Системное программное обеспечение Дмитрий Тимофеев, РВКС СПбГПУ Алгоритмы оптимизации кода Системное программное обеспечение Дмитрий Тимофеев, РВКС СПбГПУ dtim@dcn.icc.spbstu.ru Граф потока управления Control Flow Graph (CFG). Узлами CFG являются базовые блоки, ребрами

Подробнее

Связные списки. Лекция 5

Связные списки. Лекция 5 Связные списки Лекция 5 Связные списки (Linked lists) Связный список (linked list) динамическая структура данных для хранения информации, в которой каждый элемент хранит указатели на один или несколько

Подробнее

Курс «Алгоритмы и алгоритмические языки» Лекция 20

Курс «Алгоритмы и алгоритмические языки» Лекция 20 Курс «Алгоритмы и алгоритмические языки» Лекция 20 Красно-черные деревья Красно-черное дерево двоичное дерево поиска, каждая вершина которого окрашена либо в красный, либо в черный цвет Поля цвет, дети,

Подробнее

Разрешение коллизий в хеш-функциях

Разрешение коллизий в хеш-функциях Краевая научно-практическая конференция учебно-исследовательских работ учащихся 6-11 классов Прикладные и фундаментальные вопросы математики и физики Прикладные вопросы математики Разрешение коллизий в

Подробнее

Кафедра «Программное обеспечение вычислительной техники и автоматизированных систем» СТРУКТУРА ДАННЫХ «ОЧЕРЕДЬ»

Кафедра «Программное обеспечение вычислительной техники и автоматизированных систем» СТРУКТУРА ДАННЫХ «ОЧЕРЕДЬ» Федеральное агентство по образованию Государственное образовательное учреждение высшего профессионального образования Донской государственный технический университет Кафедра «Программное обеспечение вычислительной

Подробнее

Лекция 7: Очереди с приоритетами КурносовМихаил Георгиевич к.т.н. доцент Кафедры вычислительных систем Сибирский государственный университет телекоммуникаций и информатики http://www.mkurnosov.net Контроль

Подробнее

Лекция 7 Бинарные кучи (пирамиды)

Лекция 7 Бинарные кучи (пирамиды) Лекция 7 Бинарные кучи (пирамиды) Курносов Михаил Георгиевич к.т.н. доцент Кафедры вычислительных систем Сибирский государственный университет телекоммуникаций и информатики http://www.mkurnosov.net/teaching

Подробнее

Лекция 7 Бинарные кучи (пирамиды) Курносов Михаил Георгиевич

Лекция 7 Бинарные кучи (пирамиды) Курносов Михаил Георгиевич Лекция 7 Бинарные кучи (пирамиды) Курносов Михаил Георгиевич E-mail: mkurnosov@gmail.com WWW: www.mkurnosov.net Курс «Структуры и алгоритмы обработки данных» Сибирский государственный университет телекоммуникаций

Подробнее

ПРОГРАММИРОВАНИЕ/ ЯЗЫКИ ПРОГРАММИРОВАНИЯ

ПРОГРАММИРОВАНИЕ/ ЯЗЫКИ ПРОГРАММИРОВАНИЯ ПРОГРАММИРОВАНИЕ/ ЯЗЫКИ ПРОГРАММИРОВАНИЯ Лекция 5 Структуры данных (весенний семестр 2012 г.) Доцент Кафедры вычислительных систем, к.т.н. Поляков Артем Юрьевич Кардинальные числа типов данных Общим свойством

Подробнее

Лекция 9. Списки, деки

Лекция 9. Списки, деки Название Лекция 9., деки Объектно-ориентированное программирование на C ++ 1 ноября 2009 г. Лекция 9 1 / 23 Концепция списка Начало Концепция списка Характеристики Перенос элементов Аналоги алгоритмов

Подробнее

Практика программирования 17

Практика программирования 17 Практика программирования 17 Двоичное дерево поиска Сбалансированные деревья AA-дерево Кувшинов Д.Р. КМиММ УрФУ Екатеринбург 2012 Двоичное дерево Binary tree Структура из элементов (узлов). Один из узлов

Подробнее

Хеширование и хеш-таблицы

Хеширование и хеш-таблицы Хеширование и хеш-таблицы 1 Хеширование Хеширование - процесс преобразования массива входных данных произвольной длины в выходной массив данных установленного размера, выполняемое определенным алгоритмом.

Подробнее

Курс «Алгоритмы и алгоритмические языки» Лекция 17

Курс «Алгоритмы и алгоритмические языки» Лекция 17 Курс «Алгоритмы и алгоритмические языки» Лекция 17 1 Представление двоичного дерева в памяти компьютера Описание узла двоичного дерева на Си: typedef struct bin_tree { char info; struct bin_tree *left;

Подробнее

ADS-1 <3 > Линейные динамические ADT

ADS-1 <3 > Линейные динамические ADT 1/16 http://rain.ifmo.ru/cat/ ADS-1 Линейные динамические ADT c С. Е. Столяр, 2007 ses@mail.ifmo.ru c СПбГУ ИТМО, 2007 Кафедра компьютерных технологий Допускается свободное распространение с учебными

Подробнее

Курс «Алгоритмы и алгоритмические языки» 1 семестр 2018/2019. Лекция 20

Курс «Алгоритмы и алгоритмические языки» 1 семестр 2018/2019. Лекция 20 Курс «Алгоритмы и алгоритмические языки» 1 семестр 2018/2019 Лекция 20 1 Быстрая сортировка QuickSort рекурсивная Си-функция следующего вида: /* Быстрая сортировка. Предполагается, что left

Подробнее

ПОИСК. Если ты не будешь искать другие найдут. Р. Оппенгеймер. Основы программирования

ПОИСК. Если ты не будешь искать другие найдут. Р. Оппенгеймер. Основы программирования ПОИСК Если ты не будешь искать другие найдут. Р. Оппенгеймер Основы программирования Содержание 2 Постановка задачи Линейный и бинарный поиск в массиве Таблицы Прямая адресация в массиве Хеширование, методы

Подробнее

Абстрактные типы и структуры данных

Абстрактные типы и структуры данных Абстрактные типы и структуры данных 1 Абстрактный тип данных (АТД) это тип данных, который предоставляет для работы с элементами этого типа определѐнный набор операций (функций ) а также возможность создавать

Подробнее

Курс «Алгоритмы и алгоритмические языки» Лекция 15

Курс «Алгоритмы и алгоритмические языки» Лекция 15 Курс «Алгоритмы и алгоритмические языки» Лекция 15 1 Сортировка Оценка сложности алгоритмов сортировки Скорость сортировки определяется количеством сравнений и количеством обменов (обмены занимают больше

Подробнее

Представление алгоритмов 12 Содержание книги 12 Упражнения 13 Благодарности 14

Представление алгоритмов 12 Содержание книги 12 Упражнения 13 Благодарности 14 Ñîäåðæàíèå Ïðåäèñëîâèå 12 Представление алгоритмов 12 Содержание книги 12 Упражнения 13 Благодарности 14 ÃËÀÂÀ 1. Ïîñòðîåíèå è àíàëèç àëãîðèòìîâ 15 1.1. От задачи к программе 15 Алгоритмы 16 Псевдоязык

Подробнее

6.6 Ассоциативные массивы

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

Подробнее

Лекция 5 Бинарные деревья поиска Курносов Михаил Георгиевич

Лекция 5 Бинарные деревья поиска Курносов Михаил Георгиевич Лекция 5 Бинарные деревья поиска Курносов Михаил Георгиевич E-mail: mkurnosov@gmail.com WWW: www.mkurnosov.net Курс «Структуры и алгоритмы обработки данных» Сибирский государственный университет телекоммуникаций

Подробнее

ЛЕКЦИЯ 9 ДЕРЕВЬЯ. ДВОИЧНОЕ ДЕРЕВО ПОИСКА. СБАЛАНСИРОВАННЫЕ ДЕРЕВЬЯ

ЛЕКЦИЯ 9 ДЕРЕВЬЯ. ДВОИЧНОЕ ДЕРЕВО ПОИСКА. СБАЛАНСИРОВАННЫЕ ДЕРЕВЬЯ ЛЕКЦИЯ 9 ДЕРЕВЬЯ. ДВОИЧНОЕ ДЕРЕВО ПОИСКА. СБАЛАНСИРОВАННЫЕ ДЕРЕВЬЯ 1. Деревья как структуры данных Сегодняшняя лекция посвящена структурам данных. Из курса теории графов известно определение дерева как

Подробнее

1. ДВОИЧНОЕ ДЕРЕВО. ДВОИЧНОЕ ДЕРЕВО ПОИСКА

1. ДВОИЧНОЕ ДЕРЕВО. ДВОИЧНОЕ ДЕРЕВО ПОИСКА 1. ДВОИЧНОЕ ДЕРЕВО. ДВОИЧНОЕ ДЕРЕВО ПОИСКА Двоичное дерево абстрактная структура данных, являющееся программной реализацией двоичного дерева (графа). Оно состоит из узлов (вершин) - записей вида (data,

Подробнее

РЕАЛИЗАЦИЯ СТРУКТУР ДАННЫХ

РЕАЛИЗАЦИЯ СТРУКТУР ДАННЫХ РЕАЛИЗАЦИЯ СТРУКТУР ДАННЫХ Чтобы рисовать слона, надо его сначала увидеть. Вьетнамская пословица Содержание 2 Понятие структуры данных Основные структуры данных Реализация структур данных в языке Pascal

Подробнее

STL: последовательные контейнеры

STL: последовательные контейнеры http://compscicenter.ru 1/13 Александр Смаль CS центр 10 февраля 2016 Санкт-Петербург http://compscicenter.ru 2/13 STL: введение STL = Standard Template Library STL описан в стандарте C++, но не упоминается

Подробнее

Оценки (заполняется преверяющими) Question: Total Points: Score: = lim 3. Алгоритм heapsort сортирует массив in-place.

Оценки (заполняется преверяющими) Question: Total Points: Score: = lim 3. Алгоритм heapsort сортирует массив in-place. Теория алгоритмов Весенний семестр 27 Тест # Вариант # 2 апреля 27 5: 6:3 Студент: Оценки (заполняется преверяющими) Question: 2 3 5 6 Total Points: 7 3 5 5 Score:. (7 points) Отметьте только верные утверждения

Подробнее

Лекция 2. Основные типы данных

Лекция 2. Основные типы данных Лекция 2 Рыбалка С.А., Шкатова Г.И. Лекции по C++ Основные типы данных Основным средством хранения данных, обрабатываемых программой, являются ячейки памяти. Вся память компьютера является однородной и

Подробнее

Курс «Алгоритмы и алгоритмические языки» 1 семестр 2018/2019. Лекция 17

Курс «Алгоритмы и алгоритмические языки» 1 семестр 2018/2019. Лекция 17 Курс «Алгоритмы и алгоритмические языки» 1 семестр 2018/2019 Лекция 17 1 Алгоритм Кнута Морриса Пратта. Идея Префикс-функция, ассоциированная с образцом P, показывает, где в строке P повторно встречаются

Подробнее

Лекция 5:Словари. Двоичные деревья поиска КурносовМихаил Георгиевич к.т.н. доцент Кафедры вычислительных систем Сибирский государственный университет телекоммуникаций и информатики http://www.mkurnosov.net

Подробнее

Курс «Алгоритмы и алгоритмические языки» 1 семестр 2017/2018. Лекция 23

Курс «Алгоритмы и алгоритмические языки» 1 семестр 2017/2018. Лекция 23 Курс «Алгоритмы и алгоритмические языки» 1 семестр 2017/2018 Лекция 23 1 Алгоритмы перебора множеств Перестановка некоторого набора элементов это упорядоченная последовательность из этих элементов. Например,

Подробнее

Программирование и основы алгоритмизации. Лекция 5 Рекурсивные структуры данных. Деревья

Программирование и основы алгоритмизации. Лекция 5 Рекурсивные структуры данных. Деревья Программирование и основы алгоритмизации Лекция 5 Рекурсивные структуры данных. Деревья Рекурсивные структуры данных По аналогии с рекурсивным вызовом функции существуют структуры данных, допускающие рекурсивное

Подробнее

(Binomial heaps)

(Binomial heaps) Лекция 5: Биномиальные кучи (Binomial heaps) КурносовМихаил Георгиевич к.т.н. доцент Кафедры вычислительных систем Сибирский государственный университет телекоммуникаций и информатики http://www.mkurnosov.net

Подробнее

Курс «Алгоритмы и алгоритмические языки» 1 семестр 2016/2017. Лекция 17

Курс «Алгоритмы и алгоритмические языки» 1 семестр 2016/2017. Лекция 17 Курс «Алгоритмы и алгоритмические языки» 1 семестр 2016/2017 Лекция 17 1 Постановка задачи Сортировка это упорядочение наборов однотипных данных, для которых определено отношение линейного порядка (например,

Подробнее

14. Обобщённые классы

14. Обобщённые классы 14. Обобщённые классы 14.1. Обобщённые структуры данных 14.1-0 Написать обобщённый класс, реализующий квадродерево дерево, у каждого внутреннего узла которого ровно 4 потомка. Значения в узлах могут быть

Подробнее

Лекция 5 Бинарные деревья поиска

Лекция 5 Бинарные деревья поиска Лекция 5 Бинарные деревья поиска Курносов Михаил Георгиевич к.т.н. доцент Кафедры вычислительных систем Сибирский государственный университет телекоммуникаций и информатики http://www.mkurnosov.net/teaching

Подробнее

худшем случае. Они эффективны лишь для сортировки небольшого массива без дополнительной памяти (то есть на месте). Алгоритм сортировки

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

Подробнее

Язык Си. Реализация списков с помощью цепочек динамических объектов

Язык Си. Реализация списков с помощью цепочек динамических объектов Язык Си. Реализация списков с помощью цепочек динамических объектов А. А. Вылиток В языке Си нет встроенных типов данных и операций для работы со списками. Программируя на языке Паскаль (в котором также

Подробнее

Лекция 2. Как выполняются программы на C++

Лекция 2. Как выполняются программы на C++ http://compscicenter.ru 1/21 Лекция 2. Как выполняются программы на C++ Александр Смаль CS центр 15 сентября 2016 Санкт-Петербург http://compscicenter.ru 2/21 Типы данных Целочисленные: 1. char (символьный

Подробнее

Язык программирования Си

Язык программирования Си Язык программирования Си Бикулов Д.А., Иваницкая Н.В., Иванов А.П. Семинар 6. Указатели. Передача параметра в функцию по указателю. Функции работы с динамической памятью. Динамические массивы. Указатель

Подробнее

в целом логически корректное, но не всегда точное и аргументированное изложение ответа.

в целом логически корректное, но не всегда точное и аргументированное изложение ответа. ОЦЕНОЧНЫЕ СРЕДСТВА ДЛЯ ТЕКУЩЕГО КОНТРОЛЯ УСПЕВАЕМОСТИ ПРОМЕЖУТОЧНОЙ АТТЕСТАЦИИ ПО ИТОГАМ ОСВОЕНИЯ ДИСЦИПЛИНЫ Б1.В.ДВ.6.2 Технология программирования Список лабораторных работ по курсу: Лабораторная работа

Подробнее

Курс «Алгоритмы и алгоритмические языки» 1 семестр 2016/2017. Лекция 21

Курс «Алгоритмы и алгоритмические языки» 1 семестр 2016/2017. Лекция 21 Курс «Алгоритмы и алгоритмические языки» 1 семестр 2016/2017 Лекция 21 1 Самоперестраивающиеся деревья (splay trees) Двоичное дерево поиска, не содержащее дополнительных служебных полей в структуре данных

Подробнее

Производительность и сложность алгоритмов в функциональных языках

Производительность и сложность алгоритмов в функциональных языках Производительность и сложность алгоритмов в функциональных языках Михаил Беляев 23 октября 2018 г. 1/39 Проблема рекурсии Всем известно, что глубина рекурсии в (процедурных) программах ограничена Превышение

Подробнее

Стеки и очереди Stacks and Queues

Стеки и очереди Stacks and Queues Стеки и очереди Stacks and Queues Это методы хранения и доступа к данным, для которых характерны следующие функции: 1.добавления 2.извлечение с удалением Stack. Основной принцип: первым удаляется последний

Подробнее

Паспорт. фонда оценочных средств по дисциплине Типы и структуры данных (наименование дисциплины)

Паспорт. фонда оценочных средств по дисциплине Типы и структуры данных (наименование дисциплины) Паспорт фонда оценочных средств по дисциплине Типы и структуры данных (наименование дисциплины) Перечень компетенций: 1. ПК-1: понимание основных концепций, принципов, теорий и фактов, связанных с информатикой

Подробнее

Структуры данных. Евгений Капун. 11 ноября 2012 г.

Структуры данных. Евгений Капун. 11 ноября 2012 г. Структуры данных Евгений Капун 11 ноября 2012 г. Введение Существуют задачи, решением которых является структура данных. Обычно они имеют вид «поддерживайте некоторую информацию и выполняйте на ней определённые

Подробнее

Практика программирования 10

Практика программирования 10 Практика программирования 10 Рекурсия/стек: ханойские башни Стековый калькулятор: выражения в инфиксной форме Двусвязный список, XOR-список Развёрнутый список Кувшинов Д.Р. КМиММ УрФУ Екатеринбург 2011

Подробнее

Курс kiev-clrs Лекция 7. Хэширование. Хэш-функции

Курс kiev-clrs Лекция 7. Хэширование. Хэш-функции Курс kiev-clrs Лекция 7. Хэширование. Хэш-функции Иван Веселов 2009 г. Содержание 1 План лекции 2 2 Задача таблица символов 2 3 Таблица с прямой адресацией 3 4 Хэширование 3 5 Разрешение коллизий с помощью

Подробнее

Курс «Алгоритмы и алгоритмические языки» 1 семестр 2013/2014. Лекция 16

Курс «Алгоритмы и алгоритмические языки» 1 семестр 2013/2014. Лекция 16 Курс «Алгоритмы и алгоритмические языки» 1 семестр 2013/2014 Лекция 16 1 Сортировка Постановка задачи Сортировка это упорядочение наборов однотипных данных, для которых определено отношение линейного порядка

Подробнее

Курс «Алгоритмы и алгоритмические языки» 1 семестр 2018/2019. Лекция 21

Курс «Алгоритмы и алгоритмические языки» 1 семестр 2018/2019. Лекция 21 Курс «Алгоритмы и алгоритмические языки» 1 семестр 2018/2019 Лекция 21 1 Двоичные деревья поиска Проблема: организовать хранилище данных, которое позволяет хранить большие объемы данных и предоставляет

Подробнее

Лекция 7 Декартовы деревья (Treaps) Курносов Михаил Георгиевич

Лекция 7 Декартовы деревья (Treaps) Курносов Михаил Георгиевич Лекция 7 Декартовы деревья (Treaps) Курносов Михаил Георгиевич E-mail: mkurnosov@gmail.com WWW: www.mkurnosov.net Курс Алгоритмы и структуры данных Сибирский государственный университет телекоммуникаций

Подробнее

Построение и. Семинар 6 Анализ трудоемкости алгоритмов

Построение и. Семинар 6 Анализ трудоемкости алгоритмов Построение и анализ алгоритмов Семинар 6 Анализ трудоемкости алгоритмов Анализ трудоемкости алгоритма В основе сравнительного анализа алгоритмов лежат как теоретические, так и экспериментальные оценки

Подробнее

(Временная сложность)

(Временная сложность) Элементы теории сложности Сложность алгоритмов Сложность алгоритмов Сложность вычислений определяется: Числом элементарных операций (Временная сложность) Объемом используемых ресурсов памяти (пространственная

Подробнее

STL: последовательные контейнеры

STL: последовательные контейнеры http://compscicenter.ru 1/11 Александр Смаль CS центр 12 февраля 2014 Санкт-Петербург http://compscicenter.ru 2/11 STL: введение STL = Standard Template Library STL описан в стандарте C++, но не упоминается

Подробнее

Бинарные деревья поиска. Лекция 7

Бинарные деревья поиска. Лекция 7 Бинарные деревья поиска Лекция 7 АТД «Словарь» (dictionary) Словарь (dictionary) структура данных для хранения пар вида «ключ» «значение» (key value) Альтернативные название ассоциативный массив (associative

Подробнее

Изучение данного курса способствует развитию компетенций:

Изучение данного курса способствует развитию компетенций: Раздел 1. Цели и задачи учебной дисциплины. 1.1. Цель преподавания дисциплины. Преподавание курса Структуры и алгоритмы компьютерной обработки данных имеет целью освоение обучаемым построения моделей сложных

Подробнее

Массивы и их обработка

Массивы и их обработка Массивы и их обработка Линейные массивы. Двумерные массивы. Сортировка Беркунский Е.Ю., кафедра ИУСТ, НУК eugeny.berkunsky@gmail.com http://www.berkut.mk.ua Массивы - основы Массив это структура данных,

Подробнее

Коллекции С# Лекция 7

Коллекции С# Лекция 7 Коллекции С# Лекция 7 Структура лекции Назначение коллекций Типы коллекций Методы и свойства для работы с коллекциями C# 2 Что такое коллекция? Коллекция специализированный класс для хранения, извлечения

Подробнее

«Северо-Кавказский институт бизнеса, инженерных и информационных технологий» (ЧОУ ВО СКИБИИТ) Кафедра информационных технологий

«Северо-Кавказский институт бизнеса, инженерных и информационных технологий» (ЧОУ ВО СКИБИИТ) Кафедра информационных технологий «Северо-Кавказский институт бизнеса, инженерных и информационных технологий» (ЧОУ ВО СКИБИИТ) Кафедра информационных технологий Алгоритмы и структуры данных методические указания по выполнению лабораторных

Подробнее

Хэш-таблицы. Лекция 8

Хэш-таблицы. Лекция 8 Хэш-таблицы Лекция 8 2 АТД «Словарь» (dictionary) Словарь (ассоциативный массив, associative array, map, dictionary) структура данных (контейнер) для хранения пар вида «ключ значение» (key value) Реализации

Подробнее

Основы ЭВМ и программирование механико-математический факультет 2 курс, 3 пот ок, учебный год

Основы ЭВМ и программирование механико-математический факультет 2 курс, 3 пот ок, учебный год Билет 1 1. Общая архитектура микропроцессорных вычислительных систем. Функциональная схема компьютера. Типы и характеристики микропроцессоров (разрядность, частота синхронизации, организация системы команд).

Подробнее

332 Объектно-ориентированное программирование в С Структура MFT Файлы и потоки Каталоги ГЛАВА 9.

332 Объектно-ориентированное программирование в С Структура MFT Файлы и потоки Каталоги ГЛАВА 9. ОГЛАВЛЕНИЕ ПРЕДИСЛОВИЕ... 3 ГЛАВА 1. ОСНОВНЫЕ ОПРЕДЕЛЕНИЯ ЯЗЫКА С++... 5 1.1. Алфавит языка... 5 1.2. Структура программы на языке С++... 6 ГЛАВА 2. СТАНДАРТНЫЕ ТИПЫ ДАННЫХ... 11 2.1. Переменные целого

Подробнее

Лабораторная работа 3. Таблицы идентификаторов

Лабораторная работа 3. Таблицы идентификаторов Лабораторная работа 3. Таблицы идентификаторов Теоретические сведения... 1 Выбор хэш-функции... 6 Мультипликативные хэш-функции... 6 Универсальные хэш-функции... 7 Устранение коллизий... 7 Метод цепочек...

Подробнее