реферат, рефераты скачать Информационно-образоательный портал
Рефераты, курсовые, дипломы, научные работы,
реферат, рефераты скачать
реферат, рефераты скачать
МЕНЮ|
реферат, рефераты скачать
поиск
Индивидуальные задания по информатике

Индивидуальные задания по информатике

Калининградский государственный технический университет

ИНФОРМАТИКА

Методические указания для выполнения индивидуальных заданий

для студентов направления 552800 «Информатика и вычислительная техника»

КАЛИНИНГРАД

2000

УДК 681.3.06

Автор – Топоркова О.М., к.т.н., доцент кафедры систем управления и

вычислительной техники Калининградского государственного технического

университета

Методические разработки рассмотрены и одобрены кафедрой систем

управления и вычислительной техники 20.9.99, протокол № 1.

Рецензент – кафедра систем управления и вычислительной техники

Калининградского государственного технического университета

©Калининградский государственный технический университет, 2000

Введение

Тенденция усиления фактора самостоятельной работы студентов привела к

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

заданий по информатике. Они призваны, с одной стороны, подробно ознакомить

обучающихся с некоторыми практическими задачами информатики, а с другой –

закрепить навыки прикладного программирования и составления блок-схем.

Настоящие методические указания состоят из трех самостоятельных

частей, в которых излагаются три практические задачи современной

информатики – адресация элементов данных линейного списка, автокоррекция

естественно языковых текстов, сжатие данных.

Первая задача нашла свое применение в таких программных продуктах,

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

поисковых операций в системных данных), компиляторы (работа с таблицами

идентификаторов) и многих других. Алгоритмы адресации имеют универсальный

характер и используются практически во всех задачах, в которых ведется

организация и поиск информации в одномерных массивах, независимо от места

ее нахождения – основная память или внешняя.

Вторая задача носит более частный характер, а изложенные методы

используются при проверке орфографии в текстовых и табличных процессорах,

издательских системах, а также как средство верификации результатов работы

сканера – после распознавания текста для устранения возможных ошибок

выполняется его орфографический анализ.

Проблема сжатия данных решается в современных архиваторах. Они, как

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

Задачи программируются на языке программирования, который изучается в

курсе «Алгоритмические языки и программирование», и, тем самым, закрепляют

навыки, полученные в этой дисциплине. Кроме этого, требование подготовки

блок-схем средствами WinWord позволяет углубить знания, связанные, с одной

стороны, с логическим проектированием алгоритма, а с другой – с правилами

начертания блок-схем.

Запрограммированные и отлаженные задачи должным образом оформляются,

что также способствует умению студента правильно и аккуратно закреплять

результат работы на бумажном носителе информации.

ЧАСТЬ 1. МЕТОДЫ АДРЕСАЦИИ

ВВЕДЕНИЕ

Одной из проблем при создании информационных систем является работа со

структурированными данными, которые чаще всего являются линейными списками

– упорядоченным множеством элементов, порядковые номера которых определяют

местоположение элемента в списке. Элементы списка имеют структуру – они

состоят из конечного множества полей, каждое из которых имеет определенный

смысл, например, фамилии, адреса и т.д. Для таких списков важна задача

адресации элементов списков – определение адреса элемента списка по одному

из его полей или по совокупному набору полей. Такие поля называются

ключевыми (или ключами) (в простейшем случае ключом, например, может быть

номер зачетной книжки студента).

Иногда бывает необходимо объединить несколько полей, чтобы

образовать уникальный ключ, называемый в этом случае сцепленным ключом:

например, ключ, идентифицирующий студента в институте, является комбинацией

номера группы, фамилии, имени и отчества студента (есть случаи, когда в

одной группе учатся студенты с одинаковыми фамилиями и именами).

Кроме простого и сцепленного, ключ может быть первичным – определять

максимум один элемент в списке или вторичным – определять множество (в

общем случае не одноэлементное) элементов в списке. Например, фамилия

студента в учебной группе, как правило, является первичным ключом, а пол

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

или женский) соответствует, в общем случае, группа студентов.

Основную проблему при адресации элементов списков можно

сформулировать следующим образом: как по первичному ключу определить

местоположение элемента с данным ключом (задача поиска)? Существует

несколько различных способов адресации. Они рассматриваются далее.

1. Теоретическая часть

1.1. Последовательное сканирование списка

Наиболее простым способом локализации элемента списка является

сканирование списка с проверкой ключа каждого элемента. Этот способ,

однако, требует слишком много времени для большинства применений. Он

может быть эффективен только при пакетной обработке последовательного

файла, находящегося, например, на магнитной ленте, когда каждая запись все

равно должна быть прочитана.

1. 2. Блочный поиск

Если элементы упорядочены по ключу, то при сканировании списка не

требуется чтение каждого элемента. Компьютер мог бы, например,

просматривать каждый n-ный элемент в последовательности возрастания ключей.

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

поиске, просматриваются последние n-1 элементов, которые были пропущены.

Этот способ называется блочным поиском: элементы группируются в блоки, и

каждый блок проверяется по одному разу до тех пор, пока ни будет найден

нужный блок. Вычисление оптимального для блочного поиска размера блока

выполняется следующим образом: в списке, содержащем N элементов, число

просмотренных элементов минимально при длине блока, равной (N. При этом в

среднем анализируется (N элементов.

1.3. Двоичный поиск

При двоичном поиске рассматривается элемент, находящийся в середине

области, в которой выполняется поиск, и его ключ сравнивается с поисковым

ключом. Затем поисковая область делится пополам, и процесс повторяется.

При этом, если N велико, то в среднем будет просмотрено примерно log2N-1

элементов. Это число меньше, чем число просмотров для случая блочного

поиска.

1.4. Индексно-последовательная организация

В общем случае сканирование (последовательный поиск) в списках для

нахождения в них элемента является процессом, требующим много времени, если

он выполняется над всем списком. Однако его можно использовать для точной

локализации элемента в небольшой области, если эта область найдена

некоторым другим способом.

Если список упорядочен по ключам, то обычно при адресации

используется таблица, называемая индексом. При обращении к таблице

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

является относительный или абсолютный адрес элемента.

Индекс можно определить как таблицу, с которой связана процедура,

воспринимающая на входе информацию о некоторых значениях атрибутов и

выдающая на выходе информацию, способствующую быстрой локализации элемента

или элементов, которые имеют заданные значения атрибутов. Индекс

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

относящуюся к физическому адресу данного элемента.

Если для адресации используется индекс, ЭВМ в основном производит

поиск в индексе, а не в списке. При этом существенно экономится время,

но требуется память для хранения индекса. Это похоже на использование

картотеки в библиотеке. Пользователь отыскивает название требуемой книги

в картотеке и находит номер книги по каталогу, который является как бы

относительным адресом положения книги на полках.

Если элементы списка упорядочены по ключу, индекс обычно содержит не

ссылки на каждый элемент, а ссылки на блоки элементов, внутри которых

можно выполнить поиск или сканирование.

Хранение ссылок на блоки элементов, а не на отдельные элементы в

значительной степени уменьшает размер индекса. Причем даже в этом случае

индекс часто оказывается слишком большим для поиска и поэтому используется

индекс индекса. В больших списках может быть больше двух уровней индекса.

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

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

имеется на каждом цилиндре индекс дорожек, содержащий ссылки на

записи, хранящиеся на этом цилиндре.

Индексно-последовательные файлы представляют собой наиболее

распространенную форму адресации файлов.

1.5. Индексно-произвольная организация

Произвольный (непоследовательный) список можно индексировать точно

так же, как и последовательный список. Однако при этом требуется

значительно больший по размерам индекс, так как он должен содержать по

одному элементу для каждого элемента списка, а не для блока элемента.

Более того, в нем должны содержаться полные абсолютные (или

относительные) адреса, в то время как в индексе последовательного

списка адреса могут содержаться в усеченном виде, так как старшие знаки

последовательных адресов будут совпадать.

По сравнению с произвольным доступом индексно-последовательный

список более экономичен как с точки зрения размера индекса, так и с точки

зрения времени, необходимого для поиска в нем. Произвольные списки в

основном используются для обеспечения возможности адресации элементов

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

он не упорядочен по другому ключу. Для каждого типа ключей может

существовать свой индекс: для упорядоченных ключей индексы будут более

длинными, так как должны будут содержать по одному данному для каждого

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

обычно служит для его упорядочения, поскольку наиболее быстрый доступ

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

Аналогия с картотекой библиотеки скорее соответствует индексно-

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

ключа - название книги и фамилия автора, и, как правило, ни тот, ни

другой ключ не применяются при упорядочивании книг на полках,

следовательно, оба индекса должны содержать по элементу для каждой книги.

Книги упорядочиваются по номеру в каталоге. После того как пользователь

нашел номер интересующей его книги в каталоге, он отыскивает книгу на

рядах полок. В каждом ряду обычно указаны начальный и конечный номера

книг в нем. Пользователь сравнивает номер, который он получил из каталога

(индекса), с номерами, указанными в рядах. Найдя нужный ряд, он ищет

полку, на которой стоит книга. Аналогично ЭВМ выполняет поиск в файлах,

начиная, например, с главного индекса, далее просматривая индекс

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

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

на полках. Вместо этого в ней содержится номер в каталоге, который может

рассматриваться как символический адрес. Символический адрес указывается

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

адрес, это потребовало бы частой корректировки картотеки библиотеки. По

той же причине в индексно-произвольных списках часто используются

символические, а не абсолютные адреса. При добавлении новых или удалении

старых элементов изменяется местоположение остальных элементов. Если

имеется несколько ключей, то индекс вторичного ключа может содержать в

качестве выхода первичный ключ записи. При определении же

местоположения элемента по его первичному ключу можно использовать какой-

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

медленнее, чем поиск, при котором физический адрес элемента определяется

по индексу. В списках, в которых положение элементов часто изменяется,

символическая адресация может оказаться предпочтительнее.

Другой причиной для непоследовательного размещения элементов могут

служить частые изменения списка. Интенсивное включение новых и удаление

старых элементов в последовательно упорядоченном списке связано с

большими трудностями и значительным расходом машинного времени. Если бы

книги хранились на полках библиотеки в алфавитном порядке, то обеспечение

такого порядка занимало бы излишне много времени, так как каждый раз при

добавлении новой книги требовалось бы передвигать много книг.

1.6. Адресация с помощью ключа, эквивалентного адресу

Известно много методов преобразования ключа непосредственно в адрес

в файле. В тех случаях, когда такое преобразование возможно, оно

обеспечивает самую быструю адресацию; при этом нет необходимости

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

Наиболее простое решение задачи адресации - указывать во входном

сообщении относительный машинный адрес запрашиваемой записи. В некоторых

ранних банковских системах номера счетов видоизменялись так, чтобы

новый номер или его часть являлись бы адресом элемента для данного счета в

списке. Таким образом, адрес был равен ключу или определялся по нему

простым способом.

Во многих приложениях такой прямой подход невозможен. Номера изделий

на заводе не могут изменяться только ради удобства использования ЭВМ,

поскольку для работников фирмы они имеют в запросе определенный смысл.

Иногда во входном сообщении используется внутренний машинный

код; при этом не требуется, чтобы он был равен номеру клиента или номеру

изделия. Например, адрес записи счета в файле может печататься в

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

с терминала.

Такие схемы называются прямой адресацией, хотя обычно этот термин

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

преобразующего ключ непосредственно в машинный адрес.

1.7. Алгоритм преобразования ключа в адрес

Способ преобразования ключа в адрес дает почти ту же скорость поиска,

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

некоторых приложениях адрес может быть вычислен на основе идентификаторов

объекта, таких как адрес улицы и номер дома или номер рейса и его дата.

Для таких приложений рассматриваемый метод адресации является наиболее

простым и быстрым. Чаще всего данный способ применяется в диалоговых

системах, где критичным является время поиска в списке, и называется

хешированием, перемешиванием или рандомизацией.

К недостаткам данного способа относится малое заполнение списка: в

списке остаются свободные участки, поскольку ключи преобразуются не в

непрерывное множество адресов.

При этом методе вся область памяти для размещения списка делится на

участки – бакеты размером несколько десятков элементов списка. Сам алгоритм

хеширования по первичному ключу определяет, в отличие от других методов, не

адрес одного элемента списка, а адрес бакета, содержащего целую группу

элементов. При размещении элемента в списке каждый новый элемент

добавляется в конец уже имеющихся в бакете элементов; при поиске - после

Страницы: 1, 2, 3



© 2003-2013
Рефераты бесплатно, рефераты литература, курсовые работы, реферат, доклады, рефераты медицина, рефераты на тему, сочинения, реферат бесплатно, рефераты авиация, курсовые, рефераты биология, большая бибилиотека рефератов, дипломы, научные работы, рефераты право, рефераты, рефераты скачать, рефераты психология, рефераты математика, рефераты кулинария, рефераты логистика, рефераты анатомия, рефераты маркетинг, рефераты релиния, рефераты социология, рефераты менеджемент.