Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
АВТИ информатика по паскалю / METOD2 / Организация Файла.doc
Скачиваний:
22
Добавлен:
31.03.2015
Размер:
126.46 Кб
Скачать

6

Тема 5. Эффективная организация файла

5.1. Постановка задачи

Задана платежная ведомость

Товар

Покупатель

B1

B2

. . .

Bj

. . .

Bn

P1

d11

d12

. . .

d1j

. .

d1n

P2

d21

d22

. . .

d2j

. . .

d2n

. . .

. . .

. . .

. . .

Pi

di1

di2

. . .

dij

. . .

din

. . .

. . .

. . .

. . .

. . .

Pm

dm1

dv2

. . .

dmj

. . .

dmn

Элементом dij платежной ведомости является долг i-го покупателя за j-й товар. Всего имеется n видов товара и m покупателей.

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

2-х типов запросов:

- о покупателях;

- о товарах.

Эффективность оценивается по двум по двум показателям - объем ОП, требуемый для работы с таблицей и время ЦП, затраченное на обработку данных. Эти показатели находятся в обратно пропорциональной зависимости: чем больше ОП выделяется под считываемые данные, тем быстрее могут обрабатываться данные и наоборот. Например, если емкости ОП достаточно для размещения всей таблицы в виде массива, то время обработки минимальное, так как к элементам массива осуществляется прямой доступ.

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

- вся таблица D (файл из одной компоненты);

- строка Pi (файл состоит из m компонент);

- столбец Bj (файл состоит из n компонент);

- элемент таблицы dij (файл состоит из m*n компонент, причем размещение возможно как по строкам, так и по столбцам).

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

Tзапроса = Tпоиска +Tпередачи,

причем в некоторых случаях Tпоиска >>Tпередачи.

Поэтому минимизация времени запроса Tзапроса сводится к минимизации Tпоиска, так как Tпередачи зависит только от параметров компьютера.

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

Размещение

Запрос

По покупателям

Pi(I= 1…m)

По товарам

Bj(J= 1…n)

Компонента файла

Компонента файла

Матрица

Строка

Элемент

Матрица

Строка

Элемент

По покупателям

Тпоиска

Пример2

0

Пример4

0

Пример5

0

0

Vоп

max*nax

nax

1

max*nax

По товарам

Тпоиска

Пример3

0

Пример6

n*(n-1)*

(m-0.5)*

(Тсдв+Тчт)

0

Vоп

max*nax

max

1

max*nax

Как решается такая проблема? (Мы не учитываем физическое размещение на диске с прямым доступом).

  1. В конкретном примере, если выделить дополнительную память S1, S2, …Sn , то все

проблемы легко решаются.

  1. В общем случае, если невозможно выделить дополнительную память, то обычно

оценивают частоту запросов различного типа (или вероятность запросов).

Например, если из 100 запросов имеется 70 запросов Первого типа, а 30 запросов – второго типа, то критерий эффективности можно записать как

Тср = 0.7*Т1 + 0.3+Т2,

Где Т1 - время обработки файла по первому запросу, Т2 -время обработки файла по второму запросу.

Чтобы минимизировать Тср, надо разместить данные в файле так, чтобы минимизиро- вать Т1, так как Т1 имеет больший коэффициент. Поэтому способразмещения в данных – удачный.

  1. При последовательном способе организации файла эффективность всегда зависит

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

В Турбо-Паскале добавлены три основные процедуры, облегчающие работу с типизированными файлами:

ProcedureSeek(varf:Type_File;k:longint) – установить файлfна месте компонентыk;

Function FilePos(var f:Type_File):longint – определить позицию файла;

Function FileSize(var f:Type_File):longint – определить размер файла.

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

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

Например, это могло бы выглядеть так:

Read(f, ‘Иванов’, Р) – по ключу Иванов считать запись из файлаfв переменную Р.

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

В языках программирования, где предусмотрена работа с прямыми файлами, в описании файла указывается способ его организации. Например, в языке ПЛ/1 существует описание Sequentialдля последовательных файлов иDirect– для прямых файлов.

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

Так например, используя возможность одновременной работы процессора и дисковода, можно одновременно выполнять поиск данных на диске и обрабатывать информацию в Оперативной Памяти.

Соседние файлы в папке METOD2