Работа с файлами (C++). Лекция 6 по основам программирования презентация

Содержание


Презентации» Информатика» Работа с файлами (C++). Лекция 6 по основам программирования
ЛЕКЦИЯ 6
 ОСНОВЫ ПРОГРАММИРОВАНИЯРАБОТА С ФАЙЛАМИ
      #include <fstream> 
 для чтения данных из файла используютсяРАБОТА С ФАЙЛАМИ
 Чтобы привязать тот или иной поток к файлуРАБОТА С ФАЙЛАМИ
 После открытия файлов и привязки их к файловымРАБОТА С ФАЙЛАМИ
 Для закрытия ранее открытого файла используется метод close()РАБОТА С ФАЙЛАМИ
 Также можно использовать в качестве условия результат, возвращаемойЛИНЕЙНЫЙ ПОИСК
 Если данные не упорядочены, то найти искомый элемент можноДВОИЧНЫЙ (БИНАРНЫЙ) ПОИСК
 Если данные упорядочены, то найти искомый элемент можноДВОИЧНЫЙ (БИНАРНЫЙ) ПОИСК
 искомый интервал поиска делится пополам и по значениюПОИСК В НЕУПОРЯДОЧЕННОМ МАССИВЕ
 Задача: дан одномерный неупорядоченный массив, состоящий изБИНАРНЫЙ ПОИСК В УПОРЯДОЧЕННЫХ МАССИВАХ
 l=0;
 r=N-1;
 while (l<r) {
 m=(l+r)/2;
БИНАРНЫЙ ПОИСК ДЛЯ МОНОТОННЫХ ФУНКЦИЙ
 Задача: для данного вещественного числа xБИНАРНЫЙ ПОИСК ПО ОТВЕТУ
 Пусть у нас есть функция f, котораяБИНАРНЫЙ ПОИСК ПО ОТВЕТУ
 Обычный бинарный поиск - частный случай бинарногоЗАДАЧА СОРТИРОВКИ
 Пусть есть последовательность a0, a1... an и функция сравнения, котораяАЛГОРИТМ СОРТИРОВКИ
 Алгоритм сортировки — это алгоритм для упорядочения элементов вОЦЕНКА АЛГОРИТМОВ СОРТИРОВКИ
 Время сортировки — основной параметр, характеризующий быстродействие алгоритма.ОЦЕНКА АЛГОРИТМОВ СОРТИРОВКИ
 Память — ряд алгоритмов требует выделения дополнительной памяти подОЦЕНКА АЛГОРИТМОВ СОРТИРОВКИ
 Устойчивость — устойчивая сортировка не меняет взаимного расположенияОЦЕНКА АЛГОРИТМОВ СОРТИРОВКИ
 Использование операции сравнения. Алгоритмы, использующие для сортировки сравнениеКЛАССИФИКАЦИЯ АЛГОРИТМОВ СОРТИРОВКИ
 Признаками классификации могут быть:
 структуры данных, используемые приКЛАССИФИКАЦИЯ АЛГОРИТМОВ СОРТИРОВКИКВАДРАТИЧНЫЕ И СУБКВАДРАТИЧНЫЕ АЛГОРИТМЫ СОРТИРОВКИ
 НЕ ИСПОЛЬЗУЮЩИЕ ДОПОЛНИТЕЛЬНУЮ ПАМЯТЬСОРТИРОВКА ПУЗЫРЬКОМ
 При проходе снизу вверх по массиву сравниваются пары соседнихСОРТИРОВКА ПУЗЫРЬКОМ
 Производился ли на i-проходе обмен? Если нет - алгоритмСРАВНИТЕЛЬНЫЙ АНАЛИЗ
 Среднее количество сравнений, хоть и уменьшилось, но остается O(n2),СОРТИРОВКА ВЫБОРОМ
 Идея метода состоит в том, чтобы создавать отсортированную последовательностьСОРТИРОВКА ВЫБОРОМ
 На i-м шаге выбираем min(a[i] ... a[n]) и меняемСОРТИРОВКА ВЫБОРОМ
 n + (n-1) + (n-2) + (n-3) + ...СОРТИРОВКА ВСТАВКАМИ
 В сортировке пузырьком на i-м шаге элементы a[0]...a[i] стоятСОРТИРОВКА ВСТАВКАМИ
 На следующем, (i+1)-м каждом шаге алгоритма берем a[i+1] иСОРТИРОВКА ВСТАВКАМИ
 Таким образом, в процессе вставки мы "просеиваем" элемент xСОРТИРОВКА ВСТАВКАМИ
 Аналогично сортировке выбором, среднее, а также худшее число сравненийСОРТИРОВКА ВСТАВКАМИ
 Заметим, что на каждом шаге внутреннего цикла проверяются 2СРАВНЕНИЕ АЛГОРИТМОВСОРТИРОВКА ШЕЛЛА
 Алгоритм сортировки массива a[0].. a[15].
 Вначале сортируем простыми вставкамиСОРТИРОВКА ШЕЛЛАСОРТИРОВКА ШЕЛЛА
 Приращение - расстояние между сортируемыми элементами, в зависимости отСРАВНЕНИЕ АЛГОРИТМОВ
 коричневая:
 	пузырьком;
 синяя: 
 	шейкерная;
 розовая:
 	выбором;
 желтая: 	вставками;
КОНТРОЛЬНАЯ РАБОТА N2
 Алгоритмы сортировки реализовать в виде функций, возвращающих в



Слайды и текст этой презентации
Слайд 1
Описание слайда:
ЛЕКЦИЯ 6 ОСНОВЫ ПРОГРАММИРОВАНИЯ


Слайд 2
Описание слайда:
РАБОТА С ФАЙЛАМИ      #include <fstream> для чтения данных из файла используются объекты типа ifstream (input file stream) для записи данных в файл используются объекты типа ofstream (output file stream).      ifstream in;  // Поток in для чтения      ofstream out; // Поток out для записи

Слайд 3
Описание слайда:
РАБОТА С ФАЙЛАМИ Чтобы привязать тот или иной поток к файлу (открыть файл для чтения или для записи) используется метод open, которому необходимо передать параметр – текстовую строку, содержащую имя открываемого файла.      in.open("input.txt");      out.open("output.txt");

Слайд 4
Описание слайда:
РАБОТА С ФАЙЛАМИ После открытия файлов и привязки их к файловым потокам, работать с файлами можно так же, как со стандартными потоками ввода-вывода cin и cout.      out<<x;      in>>x;

Слайд 5
Описание слайда:
РАБОТА С ФАЙЛАМИ Для закрытия ранее открытого файла используется метод close() без аргументов:      in.close();      out.close(); Закрытый файловый поток можно переоткрыть заново при помощи метода open, привязав его к тому же или другому файлу.

Слайд 6
Описание слайда:
РАБОТА С ФАЙЛАМИ Также можно использовать в качестве условия результат, возвращаемой операцией считывания. Если считывание было удачным, то результат считается истиной, а если неудачным  – ложью. Считывание последовательности целых чисел:      int d;      while(in>>d)      {      }

Слайд 7
Описание слайда:
ЛИНЕЙНЫЙ ПОИСК Если данные не упорядочены, то найти искомый элемент можно только путем последовательного перебора всех элементов. for (i=0; i<n; i++) if (A[i]==B) break; if (i != n) ...найден... Поиск значения путем последовательного перебора всех элементов называется линейным поиском. Сложность алгоритма - O(N).

Слайд 8
Описание слайда:
ДВОИЧНЫЙ (БИНАРНЫЙ) ПОИСК Если данные упорядочены, то найти искомый элемент можно значительно быстрее. Алгоритм двоичного или бинарного поиска основан на делении пополам текущего интервала поиска. В основе его лежит тот факт, что при однократном сравнении искомого элемента и некоторого элемента массива мы можем определить, справа или слева от текущего следует искать.

Слайд 9
Описание слайда:
ДВОИЧНЫЙ (БИНАРНЫЙ) ПОИСК искомый интервал поиска делится пополам и по значению элемента массива в точке деления определяется, в какой части следует искать значение на следующем шаге цикла; для выбранного интервала поиск повторяется; при «сжатии» интервала в 0 поиск прекращается; в качестве начального интервала выбирается весь массив. Сложность алгоритма - O(log(N)).

Слайд 10
Описание слайда:
ПОИСК В НЕУПОРЯДОЧЕННОМ МАССИВЕ Задача: дан одномерный неупорядоченный массив, состоящий из целых чисел. Проверить, содержится ли данное число в этом массиве. Простой метод (последнее вхождение): int j = -1; for (i=0; i < n; i++) if (a[i] == k) j = i; «Барьерный» метод (первое вхождение): a[n+1] = k; for (i=0; a[i] != k; i++);

Слайд 11
Описание слайда:
БИНАРНЫЙ ПОИСК В УПОРЯДОЧЕННЫХ МАССИВАХ l=0; r=N-1; while (l<r) { m=(l+r)/2; if (a[m]<k) l=m+1; else r=m; } if (a[r]==k) cout<<r; else cout<<"-1";

Слайд 12
Описание слайда:
БИНАРНЫЙ ПОИСК ДЛЯ МОНОТОННЫХ ФУНКЦИЙ Задача: для данного вещественного числа x (x≥1) найти кубический корень с заданной точностью. r = x; l = 1; while (fabs(l-r)>eps) { m=(l+r)/2; if (m*m*m<x) l=m; else r=m; }

Слайд 13
Описание слайда:
БИНАРНЫЙ ПОИСК ПО ОТВЕТУ Пусть у нас есть функция f, которая принимает значения "истина" (1) или "ложь" (0), заданная на множестве [0..maxval]. При этом она обладает тем свойством, что сначала все значения истинны, а потом все ложны. [1, 1, ... , 1, 0, 0, ... , 0] - значения функции. Иначе говоря, это означает, что (f(x) и y <= x) => f(y). Искомый элемент - самая правая единица в массиве (к отсортированному массиву применяется обычный бинарный поиск).

Слайд 14
Описание слайда:
БИНАРНЫЙ ПОИСК ПО ОТВЕТУ Обычный бинарный поиск - частный случай бинарного поиска по ответу. Пусть нам дан массив, отсортированный по возрастанию. Требуется найти самое правое вхождение элемента key в массив. Тогда положим f(x) = (x <= key). Задача сведена к бинарному поиску по ответу.

Слайд 15
Описание слайда:
ЗАДАЧА СОРТИРОВКИ Пусть есть последовательность a0, a1... an и функция сравнения, которая на любых двух элементах последовательности принимает одно из трех значений: меньше, больше или равно. Задача сортировки состоит в перестановке членов последовательности таким образом, чтобы выполнялось условие: ai <= ai+1, для всех i от 0 до n.

Слайд 16
Описание слайда:
АЛГОРИТМ СОРТИРОВКИ Алгоритм сортировки — это алгоритм для упорядочения элементов в последовательности. Та часть элемента данных, которая идентифицирует его и используется для поиска, называется ключом. Остальная часть несет в себе содержательную информацию, которая извлекается и используется из найденного элемента данных.

Слайд 17
Описание слайда:
ОЦЕНКА АЛГОРИТМОВ СОРТИРОВКИ Время сортировки — основной параметр, характеризующий быстродействие алгоритма. Называется также вычислительной сложностью. Для сортировки важны худшее, среднее и лучшее поведения алгоритма в терминах размера последовательности n. Для типичного алгоритма хорошее поведение — это O(n log n) и плохое поведение — это O(n2). Идеальное поведение для сортировки — O(n).

Слайд 18
Описание слайда:
ОЦЕНКА АЛГОРИТМОВ СОРТИРОВКИ Память — ряд алгоритмов требует выделения дополнительной памяти под временное хранение данных. Как правило, эти алгоритмы требуют O(log n) памяти. При оценке не учитывается место, которое занимает исходный массив и независящие от входной последовательности затраты, например, на хранение кода программы (так как всё это потребляет O(1)). Алгоритмы сортировки, не потребляющие дополнительной памяти, относят к сортировкам на месте.

Слайд 19
Описание слайда:
ОЦЕНКА АЛГОРИТМОВ СОРТИРОВКИ Устойчивость — устойчивая сортировка не меняет взаимного расположения элементов с одинаковыми ключами. Естественность поведения — эффективность метода при обработке уже упорядоченных или частично упорядоченных данных. Алгоритм ведёт себя естественно, если учитывает эту характеристику входной последовательности и работает лучше.

Слайд 20
Описание слайда:
ОЦЕНКА АЛГОРИТМОВ СОРТИРОВКИ Использование операции сравнения. Алгоритмы, использующие для сортировки сравнение элементов между собой, называются основанными на сравнениях. Минимальная трудоемкость худшего случая для этих алгоритмов составляет O(n log n), но они отличаются гибкостью применения. Для специальных случаев (типов данных) существуют более эффективные алгоритмы.

Слайд 21
Описание слайда:
КЛАССИФИКАЦИЯ АЛГОРИТМОВ СОРТИРОВКИ Признаками классификации могут быть: структуры данных, используемые при сортировке (массивы, списки, деревья), местонахождение данных – в памяти (внутренняя) и в файлах (внешняя). эффективность (трудоемкость) алгоритмов.

Слайд 22
Описание слайда:
КЛАССИФИКАЦИЯ АЛГОРИТМОВ СОРТИРОВКИ

Слайд 23
Описание слайда:
КВАДРАТИЧНЫЕ И СУБКВАДРАТИЧНЫЕ АЛГОРИТМЫ СОРТИРОВКИ НЕ ИСПОЛЬЗУЮЩИЕ ДОПОЛНИТЕЛЬНУЮ ПАМЯТЬ

Слайд 24
Описание слайда:
СОРТИРОВКА ПУЗЫРЬКОМ При проходе снизу вверх по массиву сравниваются пары соседних элементов. Если элементы некоторой пары находятся в неправильном порядке, то меняем их местами.

Слайд 25
Описание слайда:
СОРТИРОВКА ПУЗЫРЬКОМ Производился ли на i-проходе обмен? Если нет - алгоритм заканчивает работу. Шейкер-сортировка: направление следующих один за другим проходов меняется.

Слайд 26
Описание слайда:
СРАВНИТЕЛЬНЫЙ АНАЛИЗ Среднее количество сравнений, хоть и уменьшилось, но остается O(n2), в то время как число обменов не изменилось. Среднее(оно же худшее) количество операций остается квадратичным. Дополнительная память не требуется. Поведение усовершенствованного (но не начального) метода довольно естественное, почти отсортированный массив будет отсортирован намного быстрее случайного. Сортировка пузырьком устойчива, однако шейкер-сортировка утрачивает это качество.

Слайд 27
Описание слайда:
СОРТИРОВКА ВЫБОРОМ Идея метода состоит в том, чтобы создавать отсортированную последовательность путем присоединения к ней одного элемента за другим в правильном порядке. Будем строить готовую последовательность, начиная с левого конца массива. Алгоритм состоит из n последовательных шагов, начиная от нулевого и заканчивая (n-1)-м.

Слайд 28
Описание слайда:
СОРТИРОВКА ВЫБОРОМ На i-м шаге выбираем min(a[i] ... a[n]) и меняем его местами с a[i]. Вне зависимости от номера текущего шага i, последовательность a[0]...a[i] является упорядоченной.

Слайд 29
Описание слайда:
СОРТИРОВКА ВЫБОРОМ n + (n-1) + (n-2) + (n-3) + ... + 1 = 1/2 * ( n2+n ) = T (n2) Результат ее сортировки можно увидеть уже после шага 0, так как больше обменов не будет. Порядок ключей 2a, 2b был изменен на 2b, 2a, так что метод неустойчив. Если входная последовательность почти упорядочена, то сравнений будет столько же, значит алгоритм ведет себя неестественно.

Слайд 30
Описание слайда:
СОРТИРОВКА ВСТАВКАМИ В сортировке пузырьком на i-м шаге элементы a[0]...a[i] стоят на правильных местах и никуда более не переместятся. При сортировке вставками последовательность a[0]...a[i] упорядочена. (более слабое утверждение) При этом по ходу алгоритма в нее будут вставляться все новые элементы.

Слайд 31
Описание слайда:
СОРТИРОВКА ВСТАВКАМИ На следующем, (i+1)-м каждом шаге алгоритма берем a[i+1] и вставляем на нужное место в готовую часть массива. Поиск подходящего места для очередного элемента входной последовательности осуществляется путем последовательных сравнений с элементом, стоящим перед ним. В зависимости от результата сравнения элемент либо остается на текущем месте(вставка завершена), либо они меняются местами и процесс повторяется.

Слайд 32
Описание слайда:
СОРТИРОВКА ВСТАВКАМИ Таким образом, в процессе вставки мы "просеиваем" элемент x к началу массива, останавливаясь в случае, когда: 1. Найден элемент, меньший x или 2. Достигнуто начало последовательности.

Слайд 33
Описание слайда:
СОРТИРОВКА ВСТАВКАМИ Аналогично сортировке выбором, среднее, а также худшее число сравнений и пересылок оцениваются как T(n2). Дополнительная память не используется. Хорошим показателем сортировки является весьма естественное поведение: почти отсортированный массив будет досортирован очень быстро. Алгоритм устойчив.

Слайд 34
Описание слайда:
СОРТИРОВКА ВСТАВКАМИ Заметим, что на каждом шаге внутреннего цикла проверяются 2 условия. Можно объединить из в одно, поставив в начало массива специальный сторожевой элемент. Он должен быть заведомо меньше всех остальных элементов массива. Тогда при j=0 будет заведомо верно a[0] <= x. Цикл остановится на нулевом элементе, что и было целью условия j>=0. Для окончания сортировки возвращаем элемент.

Слайд 35
Описание слайда:
СРАВНЕНИЕ АЛГОРИТМОВ

Слайд 36
Описание слайда:
СОРТИРОВКА ШЕЛЛА Алгоритм сортировки массива a[0].. a[15]. Вначале сортируем простыми вставками каждые 8 групп из 2-х элементов (a[0], a[8[), (a[1], a[9]), ... , (a[7], a[15]). Далее сортируем каждую из четырех групп по 4 элемента (a[0], a[4], a[8], a[12]), ..., (a[3], a[7], a[11], a[15]). Далее сортируем 2 группы по 8 элементов, начиная с (a[0], a[2], a[4], a[6], a[8], a[10], a[12], a[14]). В конце сортируем вставками все 16 элементов.

Слайд 37
Описание слайда:
СОРТИРОВКА ШЕЛЛА

Слайд 38
Описание слайда:
СОРТИРОВКА ШЕЛЛА Приращение - расстояние между сортируемыми элементами, в зависимости от прохода. Формула Седжвика: последовательность вычисляется в порядке, противоположном используемому. начальное приращение выбирается по правилу: начинаем с inc[s-1], если 3*inc[s] > size. среднее количество операций: O(n7/6), в худшем случае - порядка O(n4/3).

Слайд 39
Описание слайда:
СРАВНЕНИЕ АЛГОРИТМОВ коричневая: пузырьком; синяя: шейкерная; розовая: выбором; желтая: вставками; голубая: вставками +СО; фиолетовая: Шелла.

Слайд 40
Описание слайда:
КОНТРОЛЬНАЯ РАБОТА N2 Алгоритмы сортировки реализовать в виде функций, возвращающих в качестве результата характеристику трудоемкости алгоритма (количество сравнений). Использовать файлы (fstream) для хранения промежуточных и окончательных результатов работы программы. Получить трудоемкость для различных значений N=1000, 5000, 10000. Сравнить с теоретической оценкой. Нарисовать график.

Слайд 41
Описание слайда:


Скачать презентацию на тему Работа с файлами (C++). Лекция 6 по основам программирования можно ниже:

Похожие презентации