Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Презентации лекций по ТОИ / 15-Файлы, внешняя сортировка.pps
Скачиваний:
61
Добавлен:
02.06.2015
Размер:
942.08 Кб
Скачать

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

 

Program

«Связываем» файловую

 

type Element

 

переменную с файлом на

 

 

 

 

внешнем устройстве

 

var N:

Открываем файл для чтения

 

E:

 

F: file

 

 

begin

 

 

Assign(F,

Проверяем размер файла – количество

 

reset(F);

записей в нем файла

 

write('Введите

 

 

 

readln(N);

 

 

if FileSize(F)

Смещаемся к нужной записи в файле

 

then begin

 

 

 

seek(F, N);

Чтение записи из файла

 

read(F, E);

 

 

 

write('Число Фибоначчи', E.ElementNumber:3, ' равно ', E.FibNumber)

 

end

 

 

else write('Числа с таким номером нет в файле');

41

close(F);

Закрываем файл

end.

 

Буферизация ввода

 

 

Буфер

 

 

 

Запись 0

 

 

Блок

Запись 1

Логическая

Файл F

 

(физическая

 

запись

 

запись)

(тип REC)

 

 

 

Запись n–1 Запись n

42

Рабочая область программы

type REC = record

end;

var R: REC: F: file of REC;

begin

assign(F, ‘F’); reset(F);

{Чтение всех записей из файла и обработка данных в цикле:}

while not eof(F) do begin

Read(F, R); … end;

close(F)

end.

Буферизация вывода

 

 

Буфер

 

 

 

Запись 0

 

 

Блок

Запись 1

Логическая

Файл F

 

(физическая

запись

 

запись)

 

(тип REC)

 

 

 

Запись n–1 Запись n

43

Рабочая область программы

type REC = record

end;

var R: REC:

F: file of REC;

begin

assign(F, ‘F’); rewrite(F);

{Формирование записей и вывод их в файл в цикле:}

for do begin

… Write(F, R);… end;

close(F)

end.

Индексированные файлы

Если система сама берет на себя задачу организации

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

Файлы с индексной организацией (или индексированные файлы) имеют более сложную организацию: кроме основного файла,

представляющего собой массив записей, строится

вспомогательная таблица (индекс), содержащая ключевую информацию для поиска, а также данные о местоположении записи в основном файле (смещение соответствующей записи

относительно начала файла); кроме того, если записи могут иметь переменную длину, в каждой строке (элементе, записи) индекса содержится и размер записи

44

Индексированные файлы: пример

45

Многоуровневые индексы

46

Сортировка файлов

Очевидно, любой алгоритм сортировки файла требует изъятия каких-то элементов из файла и включения их в файл на новые места.

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

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

Рассмотрим подробнее операции разделения и слияния файлов.

47

Понятие отрезка файла

Отрезком длины k в файле является последовательность записей Ai , Ai+1 , Ai+2 , . . . , Ai+k–1 ,

такая, что в ней не имеется пропусков, т.е. для любого j, i <= j <= (i + k–1),

запись Aj принадлежит отрезку, и записи отрезка упорядочены по ключам, т.е.

Key(Ai) <= Key(Ai+1) <= Key(Ai+2) <= ... <= Key(Ai+k–1)

При этом Key(Ai 1) > Key(Ai), если Ai – не первая запись в файле и Key(Ai+k–1) > Key(Ai+k), если Ai+k–1 – не последняя запись в файле.

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

48

Отрезки файла: пример

Весь файл состоит из отрезков.

Если файл содержит n записей, то он может содержать от 1 до n отрезков.

Файл, состоящий из одного отрезка, – это полностью упорядоченный файл.

Файл, состоящий из n отрезков, может иметь, например, такую последовательность ключей:

9, 8, 7, 6, 5, 4, 3, 2, 1

Это файл записей, упорядоченных в обратном порядке. Файл с ключами

11, 14, 8, 9, 51, 15, 86, 98, 13, 4, 6, 10 состоит из 5 отрезков:

49

1) 11, 14;

2) 8, 9, 51;

3) 15, 86, 98;

4) 13;

5) 4, 6, 10

Разделение файла

Операция имеет 1 операнд – исходный файл и 2 файла, рассматриваемые в качестве результата. Исходный файл представляет собой последовательность отрезков

I1 , I2 , I3 , I4 , . . . , Im .

Результирующие файлы представляют собой последовательности отрезков: I1 , I3 ,. . . , Im–1 и I2 , I4 , . . . , Im (для четного m)

или

I1 , I3 , . . . , Im и I2 , I4 , . . . , Im–1 (для нечетного m).

Эта операция выполняется так (пока не закончится исходный файл):

1.Читаются элементы исходного файла и переписываются в 1-й файл результата до тех пор, пока не закончится 1-й отрезок (с нечётным номером).

2.Затем поток элементов исходного файла переключается на вывод

50

во 2-й файл до окончания 2-го отрезка (с чётным номером) и т.д.

Соседние файлы в папке Презентации лекций по ТОИ