Файл: Белоногов Г.Г. Автоматизированные информационные системы.pdf
ВУЗ: Не указан
Категория: Не указан
Дисциплина: Не указана
Добавлен: 11.04.2024
Просмотров: 129
Скачиваний: 3
выражением. В этом случае адрес Кі числа х,-, а следо вательно, и адрес числа г/j, может быть вычислен на ЭВМ но самому числу Хі, и в ЗУ машины достаточно хранить только числа у.
Особенно просто определяется адрес числа по его величине, когда функциональная зависимость (5.2) ли нейна (например, при равноотстоящих значениях чисел х). Однако в информационно-поисковых системах она обычно нелинейна, и здесь приходится применять дру гие способы поиска адреса числа х.
Рассмотрим некоторые способы поиска адреса числа X по заданному значению этого числа, полагая при этом, что функциональная зависимость (5.2) не может быть представлена достаточно простым аналитическим выра жением.
Способ последовательного просмотра (способ перебора)
Существо этого способа заключается в следующем. Для заданного числа х последовательно проверяется вы полнение неравенств
х > х і, х> х2). . х>хі, |
(5.3) |
начиная с первого. Одновременно ведется подсчет числа проверок. Этот процесс продолжается до тех пор, пока одно из неравенств (5.3) окажется невыполненным. Тог да проверяется равенство
x — Xh, |
(5.4) |
где k — порядковый номер сравниваемого числа списка. Выполнение этого равенства означает, что искомое число содержится в списке чисел х и его адрес может быть вычислен по формуле
K = K i + k— \, |
(5.5) |
в которой Кі обозначает адрес первого числа, а k имеет тот же смысл, что и в формуле (5.4). При выполнении равенства (5.4) поиск прекращается.
Способ последовательного просмотра — самый невы годный в смысле затрат машинного времени. Если веро ятность обращения к любому из I чисел списка одинако
ва и равна \/1, |
то в |
среднем требуется просмотреть |
(/ +1)/2 чисел, |
чтобы |
найти адрес интересующего нас |
числа. |
|
|
73
При неравномерном распределении вероятностей об ращения к числам списка средние затраты машинного времени могут сократиться или увеличиться в линейной зависимости от математического ожидания величины адреса искомого числа. Математическое ожидание вели чины адреса искомого числа может быть существенно уменьшено, если расположить числа, среди которых про изводится поиск, не в порядке возрастания их величины,
а в порядке убывания вероятностей их поиска. Однако
вЗУ с произвольным обращением к ячейкам способы поиска, основанные на упорядоченном расположении чи сел по их величине, оказываются, как правило, более эффективными, чем способы, учитывающие неравномер ность распределения вероятностей их поиска.
Способ последовательного деления на части
Расположение чисел х в ЗУ машины в порядке воз растания их величины позволяет избежать последова тельного просмотра всего списка чисел при определении адреса искомого числа. Вместо последовательного сплошного просмотра этого списка можно просматри
вать его |
вначале выборочно, |
продвигаясь |
от |
начала |
|||
к концу шагами, |
равными величине, АК~ Цп, |
где |
I — ко |
||||
личество |
чисел в |
списке, |
а |
п — целое число частей, на |
|||
которое делится |
список. |
В |
этом |
случае ячейки |
памяти, |
к которым производится обращение, будут иметь адреса, определяемые формулой
К = К і + ЕЦІ/п\. |
(5.6) |
Здесь К1 — начальный адрес списка; Е — оператор вы деления целой части числа, а g— номер шага просмотра (£ принимает последовательно значения 1, 2 —1).
Просмотр ячеек с адресами, определяемыми по фор муле (5.6), продолжается до тех пор, пока не окажется невыполненным одно из неравенств типа
х > х ^ |
(5.7) |
или пока не будут просмотрены все такие ячейки. При невыполнении одного из неравенств (5.7) описанная проце дура просмотра применяется к участку списка (х\-\, Х\). Если все неравенства оказываются выполненными, то делению на п частей и просмотру подвергается участок списка (Хп-і, Хі).
74
В результате осуществления каждого этапа деления область поиска чисел х сужается. Процесс сужения об ласти поиска продолжается до тех пор, пока не будет выполнено условие
Е[1'/п} = 0, |
(5.8) |
где / ' — количество чисел в области поиска. После вы полнения условия (5.8) поиск осуществляется способом последовательного просмотра.
Время поиска адреса числа х способом деления на части зависит от количества / чисел в списке, от вели чины делителя п, от типа электронной машины, с по мощью которой производится поиск, и, наконец, от кон кретной программной реализации алгоритма поиска. Его можно приближенію оценить количеством циклов попоиска, причем под ц и к л о м п о и с к а понимается со вокупность арифметических и логических операций, свя занных с проверкой одного из неравенств (5.3). Макси мальное количество циклов поиска при заданных / и п определяется приближенной формулой
^MaKc^ffl—l)lognX |
(5.9) |
а среднее количество циклов поиска в случае равномер ного распределения вероятностей поиска чисел списка— формулой
|
/cp~rt/21ogJ. |
(5.10) |
||
При фиксированном объеме списка |
чисел / величина |
|||
/ макс в формуле |
(5.9) |
является |
монотонно возрастающей |
|
функцией от п. |
Для |
п = 2 она |
принимает минимальное |
значение, так как способ деления на части приобретает
реальный |
смысл только при целочисленных |
значениях |
п ^ 2 . |
поиска путем последовательного |
деления |
Способ |
списка чисел на части при п = 2 носит название «способа
деления пополам» [69]. Для п = 2 |
формулы (5.9) |
и (5.10) |
||
дают одинаковые результаты: |
|
|
|
|
Діакс = Д р ^ log2 ^- |
|
|
(5.1 1) |
|
Разновидностью |
способа последовательного |
деления |
||
на части является |
способ поиска |
|
путем д в у х с т е п е н |
|
ног о п е р е б о р а |
[69]. По этому |
способу деление спи |
ска чисел на части выполняется только один раз, а затем производится последовательный просмотр чисел выделен
75
ного участка. Максимальное число циклов поиска по способу двухстепенного перебора определяется выраже нием
/маис — |
(5 .1 2 ) |
При п = У1 величина /макс |
принимает |
минимальное |
значение |
7, |
|
/м акс = 2 / |
(5.13) |
а количество просматриваемых чисел на первом и вто ром этапах поиска совпадает.
Среднее число циклов поиска при двухстепенном переборе может быть приближенно определено по фор муле
/ ср= (п2+2п +1) /2п, |
(5.14) |
а минимальное время поиска здесь обеспечивается при том же условии, что и в формуле (5.12).
Способ разделителей
Способ разделителей можно рассматривать как моди фикацию способа последовательного деления на части. В этом случае перечень кодов чисел предварительно раз бивается по какому-либо признаку на участки, которые могут быть разной длины. Результаты разбиения отра жаются в специальной таблице, где для каждого призна ка указывается начальный адрес соответствующего ему участка. Начальные адреса участков называются р а з д е л и т е л я м и , а таблица, содержащая сведения об этих адресах, —т а б л и ц е й р а з д е л и т е л е й .
В качестве признаков, по которым группируются эле менты списка, может использоваться длина кодов чисел, начальная часть этих кодов и т. п. При поиске сначала по заданному коду числа определяется значение соот ветствующего ему признака. Затем полученное значение признака сравнивается последовательно со значениями этого признака, перечисленными в таблице разделителей, и в случае совпадения из таблицы выбирается началь ный адрес участка. Далее адрес искомого числа нахо дится последовательным просмотром списка кодов чисел на выделенном участке. Для каждого участка списка чисел, заключенного между двумя разделителями, может быть составлена своя таблица разделителей — раздели телей второй ступени, Аналогичным образом мощет быть
76
составлена таблица разделителей третьей ступени и т. д. При наличии нескольких ступеней разделителей сначала просматриваются разделители первой ступени, затем для найденного интервала адресов чисел просматриваются разделители второй ступени и т. д. В конце поиск ведется способом последовательного просмотра.
Особый интерес представляет такая структура табли цы разделителей, когда по коду искомого числа можно достаточно просто определить место записи (адрес) со ответствующего ему разделителя. В этом случае отпада ет необходимость хранить коды признаков в таблице разделителей. Достаточно иметь таблицу начальных адресов участков массива чисел, соответствующих этим кодам.
Разновидностью способа разделителей является «ме
тод с в е р т ы в а н и я к одов » |
(другое его название — |
м е т о д с ж а т и я кодов [83]). |
Существо этого спосо |
ба состоит в том, что здесь в качестве разделительных признаков используются так называемые «свертки» ко дов. Свертки могут быть получены с помощью различ ных операций над исходными кодами: путем выделения какой-либо части кода (начальной, средней или конеч ной) ; путем выделения и объединения элементов кода, стоящих на определенных позициях; путем деления кода на части фиксированной длины и последующего арифме тического сложения этих частей с предварительным сдвигом их относительно друг друга или без сдвига и т. п. Обычно свертка имеет значительно меньшую длину, чем длина исходного кода (отсюда название «свертка»). Свертки могут быть использованы в качестве адресов для обращения к таблице разделителей. Примеры свер ток приведены в табл. 5.1.
Скорость поиска методом свертывания кодов зависит от различных факторов, и в первую очередь от длины кода свертки, от равномерности разбиения массива ис ходных кодов на участки и от сложности процедуры получения свертки. С увеличением длины кода свертки уменьшаются размеры участков, на которых поиск ведет, ся последовательным просмотром. Следовательно, увели чивается скорость поиска. С другой стороны, увели чение длины кода свертки ведет к росту объема таблицы разделителей, что не всегда желательно. Приближенно длина кода свертки может быть определена по формуле
г=Е[\о&1/п]+\,