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

Детерминированная схема поиска данных различного типа на основе сортировки Текст научной статьи по специальности «Компьютерные и информационные науки»

CC BY
85
20
i Надоели баннеры? Вы всегда можете отключить рекламу.
Ключевые слова
ИНФОРМАТИКА / ПОИСК / СОРТИРОВКА / СИМВОЛ / ОБЪЕКТ / ПАРАЛЛЕЛИЗМ / ПАРАЛЛЕЛЬНАЯ СОРТИРОВКА

Аннотация научной статьи по компьютерным и информационным наукам, автор научной работы — Ромм Яков Евсеевич, Белоконова Светлана Сергеевна

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

i Надоели баннеры? Вы всегда можете отключить рекламу.

Похожие темы научных работ по компьютерным и информационным наукам , автор научной работы — Ромм Яков Евсеевич, Белоконова Светлана Сергеевна

iНе можете найти то, что вам нужно? Попробуйте сервис подбора литературы.
i Надоели баннеры? Вы всегда можете отключить рекламу.

Текст научной работы на тему «Детерминированная схема поиска данных различного типа на основе сортировки»

БИБЛИОГРАФИЧЕСИКИЙ СПИСОК

1. Демидович Б.П. Лекции по математической теории устойчивости. М.: Изд-во Москов. ун-та, 1998. 480 с.

2. Катрич С.А. Разработка и исследование схем программного моделирования устойчивости решений нелинейных дифференциальных уравнений на основе разностных методов / Диссертация на соискание ученой степени кандидата технических наук. Таганрог: Изд-во ТРТУ, 2006. 217 с.

3. Синергетика: процессы самоорганизации и управления: Учеб. пособие / под общ. ред. А.А. Колесникова: в 2 ч. Таганрог: Изд-во ТРТУ, 2004. Ч. I. 360 с.

Я.Е. Ромм, С.С. Белоконова

ДЕТЕРМИНИРОВАННАЯ СХЕМА ПОИСКА ДАННЫХ РАЗЛИЧНОГО ТИПА

НА ОСНОВЕ СОРТИРОВКИ

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

Применяемые сортировки обладают взаимно однозначным соответствием входных и выходных индексов [1, 2]. Дополнительной составляющей схемы поиска является оператор локализации экстремальных элементов [1] вида:

j:=1;while j<= n do begin FOR L:=1 TO j-1 do if abs(e[j]-e[j-L])<=eps then goto 22; Writeln (' ',c[e[j]],'

',e[j]);

22: j:=j+1; end;

Присоединение к процедуре сортировки данного оператора влечет программную идентификацию всех локально минимальных элементов входного массива в окрестности радиуса eps , измеряемого целым числом последовательных индексов. Аналогично локализуются максимальные элементы. Способ выявляет информацию, благодаря которой в дальнейшем идентифицируются не только экстремумы, но и вся внутренняя структура локализованной окрестности. В случае числового массива оператор локализации минимумов осуществляет поиск заданного числа как нуля абсолютной величины разности между текущим элементом массива и заданным искомым числом [3]. Способ применим к числам любого типа, его можно осуществлять с точностью до заданной границы погрешности. Осуществляется перенос способа на поиск слов в массиве строковых элементов [3, 4]. Входному строковому массиву c сопоставляется числовой массив из абсолютных величин разностей ASCII-кода символа, стоящего на заданной позиции слова входного массива, и ASCII-кода символа, указанного в маске поиска:

г abs rd ord С' ^ (1)

В (1) c - входной массив, k - номер позиции, заданной в маске, i - номер элемента массива c ,w - символ, заданный в маске, r[i] - элемент сопоставляемого числового массива r. Поиск символов происходит как поиск локальных минимумов, которые в случае совпадения с искомыми символами оказываются нулями. Используя обратную адресацию, по индексам идентифицированных нулей можно обратиться к элементам входного массива строковых элементов. Схема поиска слов, содержащих заданный символ, переносится на поиск слов по комбинации нескольких символов. Для этого массиву слов сопоставляется числовой массив путем суммирования абсолютных величин разностей ASCII-кода символа входного массива и символа «маски» поиска

n

с учетом соответствия позиций: г[/] = 4/[k[j]]— ord где г[/] - числовое зна-

м

чение, сопоставленное i -му слову, f - i -е слово, k[ j] - номер позиции на которой расположе-

на у -я маска поиска, м>[] ] - ] -я маска поиска. Идентификация искомой комбинации символов основана на том, что сумма нулевых разностей сохранит нулевое значение. Схема переносится на поиск текстовых фрагментов при более сложных признаках искомых фрагментов. В качестве признака может использоваться символ, сочетание символов, сочетание слов, предложений, значение радиуса ер8, расстояние между символами, словами или предложениями [3]. С помощью этих признаков можно организовать иерархию вложенных условий, применяя их заново к уже найденным фразам. Результат применения иерархически вложенных условий поиска - точная идентификация искомых фрагментов текста.

Схема поиска текстовых фрагментов переносится на поиск файлов по заданным условиям поиска текстовых фрагментов произвольно заданного содержания среди группы текстовых файлов. Условия поиска могут иметь охарактеризованную ранее сложность. Отличие данной схемы от известных в том, что она сводит поиск текстовых фрагментов к нахождению минимальных элементов числовой последовательности. Формально это дает возможность конструировать условие поиска в виде функционального, алгебраического и других уравнений, использовать в качестве условия поиска постановки математических задач. Неформальное отличие заключается в том, что предложенная схема совмещает текстовый поиск с поиском числовых значений в формате с плавающей точкой, при этом заданные значения можно находить не только по совпадению, но и с точностью до априори заданной границы абсолютной погрешности или же в заданном диапазоне. На этой основе строится поиск фрагментов оцифрованных изображений, а также поиск неисправностей цифровых схем [4].

Разработанные схемы [3, 4] модифицируются для поиска одновременно по нескольким маскам с учетом изменяемости словоформ. Видоизменения строятся на основе сортировки и идентификации экстремальных элементов последовательности чисел, сопоставленных просматриваемым текстовым фрагментам. Поиск сводится к программной идентификации всех локально экстремальных (в общем случае не обязательно нулевых) элементов данной последовательности. Известные поисковые системы реализуют поиск по произвольному числу масок, не детерминируя взаимное расположение масок в общем виде. Конструируемые схемы свободны от данного ограничения. Они выполняют поиск одновременно по нескольким маскам, представляющим собой строковые элементы, априори указывая произвольно фиксированные расстояния между масками (взаимное расположение масок раскрыто в виде дополнительного условия поиска). В [4] дано видоизменение схемы на случай поиска по сходству с учетом изменяемости маски поиска и с оценкой меры сходства. В этой схеме оператор локализации используется как идентификатор значений экстремумов с указанием индексов, по которым идентифицируются искомые по мере сходства элементы и особенности их взаимного положения.

На данной основе строится схема текстового поиска одновременно по нескольким маскам [3, 4], которая отличается тем, что по идентифицированным индексам экстремумов без дополнительного просмотра окрестности локализованного значения и без сравнения с масками дает однозначный ответ, какое именно слово было найдено. Эта схема ниже преобразуется для поиска объектов различных типов по нескольким свойствам. Схема строится следующим образом. Исследуемой строке описываемым ниже способом сопоставляется одномерный числовой массив, количество элементов которого совпадает с количеством слов заданной строки. Элементы сопоставленного числового массива, соответствующие различным маскам, перемножаются, причем сомножители априори задаются так, чтобы произведения взаимно однозначно соответствовали различным маскам, а локальные минимумы в их последовательности единственным образом соотносились с полным набором масок. Сопоставление массиву слов 81 числового массива с — (б',, б'2ст ) выполняется по соотношениям:

п

1

7 +1, если / — е слово совпадает

с 7 — й маской поиска 7 +1 + п, если / — е слово не совпадает с 7 — й маской поиска

При этом индексы элементов б'[/] совпадают с индексами элементов Л/ | . К отсортированному массиву с применяется оператор локализации минимумов. Если локализация минимума выполняется в окрестности наперед заданного радиуса, не меньшего числа сгруппированных масок, то идентифицированным окажется искомое сочетание одновременно нескольких масок. Тем самым оказывается возможным вести поиск не по разрозненному сочетанию нескольких масок, а по их взаимосвязанному положению в исследуемом массиве слов. Схема формализуется следующим образом. Пусть 7 - номер текущего элемента исследуемого массива слов. Пусть п -количество масок поиска и 7 -му слову сопоставлено одно из двух значений а . и Ь.: ах = 2, а2 = 3,... ,а] = у + 1,... ,ап =и + 1; Ь1=п + 1,Ь2=п + Ъ,....,Ь] = п + у + 1,...,Ьл=и + и + 1 (3)

При этом в (3) = / + 1. если 7 -е слово совпадает с / -й маской поиска, Ъ. =п + / + 1. если 7 -е слово не совпадает с _/ -й маской поиска, /=1,2, ... . Данные соотношения устанавливаются по ходу просмотра по всем /=1,2,... с одним зафиксированным значением 7. Начальное значение ] принимается равным 1. При следующем просмотре значение ] увеличивается на 1. Процесс продолжается до исчерпания значения всех п масок поиска. С учетом (3)

Данный способ формирования масок по соотношениям (2) - (4), или, что то же самое, по соотношению (2) будет именоваться мультипликативной схемой (2). Имеет место

Лемма 1 [4]. Пусть для заданных масок сформирован массив (2). Тогда при любом выборе элемента (2) значения произведений с не совпадают при различных значениях индекса к из (4).

Иными словами, при гФг выполнено Сг в случае совпадения 7 -го и г -го слов массива 5/

с какими бы то ни было соответственно различными масками из заданного набора.

На основе леммы 1 выводится

Теорема 1 [4]. Пусть количество масок, заданных в виде строковых элементов, равно п и для них сконструировано соотношение (2). Тогда оператор локализации минимума в окрестности радиуса = п идентифицирует все локально минимальные элементы, соответствующие

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

В [3, 4] обсуждаются варианты поиска, основанные на теореме 1 и следствиях из нее. Мультипликативная схема поиска в массиве слов или в отдельной фразе переносится на поиск в текстовых файлах.

Если условием поиска является не только определение местоположения заданных слов, сгруппированных воедино, но и наличия в группе заданного порядка слов, то радиус eps1 при задании условия следует считать равным числу масок группы. При этом оказывается, что при выполнении условия числовые элементы искомой группы и их индексы будут упорядочены по возрастанию, а индексы соседних элементов монотонно возрастают на единицу. Имеет место

Теорема 2 [4]. Если в условиях леммы 1 7 -е слово соответствует к -ой маске поиска, а / +1 -е слово соответствует к + 1 -ой маске поиска, то с < сг+1.

Таким образом, при выполнении условия поиска индекс локализованного значения всегда наименьший, последующие индексы упорядочены, количество элементов в локализованной окрестности, отвечающих рассматриваемой сгруппированной маске, совпадает с количеством заданных масок. Отсюда вытекает

Следствие. В условиях теоремы 2 поиск по группе упорядоченных масок всегда можно выполнять с помощью оператора локализации минимума в eps1 -окрестности, где ер^1 равно

п

(4)

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

В [4] мультипликативная схема поиска модифицируется с целью применения к поиску объектов различных типов. Кроме того, схема видоизменяется для идентификации заданных свойств объектов. Модифицированная схема строится на исходной основе сортировки и идентификации экстремальных элементов числовой последовательности, сопоставленной исследуемому множеству объектов. Однако, сопоставление (первоначально только тексту) одномерного числового массива без изменения конечного результата выполняется иначе, чем описано выше. Пусть дан массив из ш слов, в котором требуется выполнить поиск по заданной последовательности п масок М = , П12,..., Шп , расположенных в определенном и фиксированном порядке. На первом шаге массиву 81 сопоставляется двумерный числовой массив та$$\п, т]:

г • т [1, если г — е слово совпадает с 1 — й маской поиска, (5) шаззх 1, Л = < п' л ■ ~

иу' -1 0, если I - е слово не совпадает с / — й маской поиска.

0, если i — е слово не совпадает с j

В (5) и ниже i = 1,2,..m, j = 1,2,..n . На основе (5) формируется промежуточный двумерный массив mass!:

ir т [j +1, если mass[ j, i] — 1,

mass1[j,i] = \J-tSt Г- A n (6)

[j +1 + n, если mass[j, i] — 0.

Путем перемножения элементов столбцов (6) формируется одномерный массив c :

n

C=Y\mass1[ j, i] (7)

j=1

Данным приемом любой массив, состоящий из нулей и единиц, переводится в одномерный числовой массив, где при каждом i исследуемому объекту (слову) с номером i соответствует i -й столбец массива mass , в котором не более одного единичного значения. При этом несущественно, какова природа рассматриваемых объектов. Ниже данная конструкция используется не для поиска строковых элементов, а для идентификации объектов одновременно различных типов или, в более общем случае, объектов, характеризуемых свойствами различной природы. Непосредственно ниже, для определенности, идет речь об объектах не обязательно текстового типа, но все объекты рассматриваемого множества должны иметь один и тот же тип. Вначале конструируется поиск объекта из упорядоченного множества по группе признаков, заданных в фиксированном порядке. При этом признаки и объекты могут быть произвольно фиксированного типа или характеризоваться произвольно фиксированным свойством. Ограничение заключается в том, что каждый объект может соответствовать одному и не более чем одному признаку. В конструируемой схеме заполнение соответствующих массивов mass и mass1 ведется с помощью проверки соответствия или несоответствия исследуемого объекта заданному признаку согласно (5), (6), где наличие (отсутствие) соответствия кодируется единицей (нулем) так же, как кодировалось совпадение (несовпадение) с маской, проверка выполняется при фиксированном порядке обхода объектов. После сортировки массива c из (7) применяется оператор локализации минимумов, который по наличию локальных числовых минимумов идентифицирует индексы искомых объектов так, как раньше он идентифицировал индексы слов, совпадающих с масками поиска. По идентифицированным индексам на основе совпадения индексов числового массива и массива исходных объектов выполняется переход от числовых экстремумов к искомым объектам в исходном виде. Этот подход видоизменяется для поиска объекта с одновременно несколькими признаками.

Согласно (5)-(7) каждому исследуемому объекту сопоставляется единственное число. В случае если объект обладает одновременно несколькими искомыми свойствами, эта единствен-

ность нарушается. Требуется модифицировать схему, чтобы каждому объекту с заданным набором признаков числовое значение сопоставлялось единственным образом. Пусть дано проиндексированное множество V из т однотипных объектов, в котором требуется выполнить поиск по заданной последовательности признаков М = (¡lt, т2, ... , тп , расположенных в определенном и фиксированном порядке. Пусть число признаков равно n . Как и прежде, формируются массивы mass, massl и c, но при этом (6) заменяется на следующее соотношение:

mass 1[ /71 = iР[ j ] если mass [j 7] = 1, (8)

(8)

[Р [ j + n], если mass [ j, 7] = 0,

где р - конечная последовательность из 2п упорядоченных простых чисел С, 3, 5,... . Имеет место взаимно однозначное соответствие между набором признаков, присущих исследуемому объекту V[7], и сопоставленным числовым значением c[7]: значение c[7] по теореме о простых

числах единственным образом разложимо на простые множители, по этому разложению данное число обратимо указывает на те признаки (5), которыми обладает объект соответственно простым сомножителям mass1[ j, 7] из (8). Обратно, каждому набору признаков, присущих объекту, в силу той же теоремы и по построению (5), (7), (8) соответствует единственное значение произведения элементов столбца, образующее элемент сопоставленной числовой последовательности (7). Числовые идентификаторы наборов признаков (при полном и частичном совпадении) могут быть априори рассчитаны, на этой основе выполняется поиск не только по полному набору заданных свойств, но и по их частичному набору. Путем анализа окрестности локализованных минимумов можно, помимо того, выполнить поиск не только одного объекта, но и группы таких объектов по нескольким признакам одновременно.

Мультипликативную схему в форме (5), (7), (8) можно адаптировать к поиску группы объектов, типы которых различны между собой. В качестве примера можно взять поиск каталога, содержащего файлы различных типов. Каталог рассматривается как объект исследования, а наличие требуемого файла в исследуемом каталоге - как признак поиска. Каталог с такими признаками идентифицируется по мультипликативной схеме (5), (7), (8). При анализе каталога для каждого файла из этого каталога описанная ранее схема поиска без изменения применима к файлам различного типа в том случае, если типы объектов совместимы или могут быть приведены к одному типу в операционной системе, например, *.txt, *.dpr, *.pas, *.xls, *.doc. Для реализации поиска объектов, которые не приводятся к одному и тому же типу, например, *.dat, *. bmp предлагается специальная схема [4].

С целью поиска файлов типа *.bmp каждому файлу (предполагается, что файл содержит только один рисунок) сопоставляется вектор распознавания. Этот вектор можно сформировать на основе какой-либо известной схемы. В [4] показано, что вектор распознавания может быть сформирован с использованием мультипликативной схемы. Если вектор сформирован, то для текущего рисунка находится норма разности между вектором исследуемого рисунка и эталонным вектором. Рисунок считается найденным, если норма разности соответственной пары векторов не превосходит заданной границы погрешности. Мультипликативная схема (5), (7), (8) может следующим образом применяться для формирования векторов распознавания при поиске растровых двуцветных изображений. Первоначально рассматриваются плоские изображения, для определенности размера 16x16 пикселей, в растровом формате BMP. Изображению сопоставляется двумерная числовая матрица mass, 16x16, каждый элемент которой принимает только два значения: О или 1. Значением 0 кодируется белый цвет, значением 1 - черный. Полученной матрице mass согласно (7), (8) сопоставляется двумерный массив mass1 и одномерный числовой массив c . Элемент этого массива с номером 7 образуется как произведение простых чисел столбца с тем же номером из матрицы mass1. Таким образом, по отношению к матрице из нулей и единиц, кодирующей исходное двуцветное изображение, полностью воспроизводится алгоритм (7), (8) сопоставления чи-

словой последовательности, который ранее применялся для поиска по отношению к матрице mass из (5). Данное приложение алгоритма позволяет сформировать для каждого рисунка вектор распознавания в виде массива c из (7) и с его помощью решить две задачи: поиск плоских двуцветных изображений и распознавание плоских двуцветных изображений с помощью сопоставленного вектора. При данном подходе изображение может быть идентифицировано вектором, роль которого играет массив c. Набор таких векторов может храниться в виде эталонов, с которыми по соответственному выходному массиву c сравниваются искомые объекты. Такая схема иоиска переходит в способ распознавания, отличающийся двумя аспектами, - по построению и тем, что распознавание получается обратимым преобразованием матрицы изображения п х п в вектор размерности n (вектор распознавания).

В [4] обоснованы утверждения: массив c единственным образом идентифицирует изображение; описанное преобразование изображения обратимо.

Матрица

0 0 0

0 0 0

0 0 0

0 0 0

0 0 0

0 0 0

0 0 0

0 0 0

0 1 1

0 1 0

0 1 0

1 1 0

1 1 0

0 1 1

0 0 1

0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0

0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 1 0 0 0 0 0 0 0 1

0 0 0 1 0 0 0 0 0

0 0 111 11110

0 0 0 0 0 0

. 1 <

0

0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0

Массив простых чисел massl

59 59 59 59 59 59 59 59 59 59 59

61 61 61 61 61 61 61 61 61 61 3

67 67 67 67 67 67 67 67 67 67 67

71 71 71 71 71 71 71 71 71 71 71 71

73 73 73 73 73 73 73 73 73 73

79 79 79 79 79 79 79 79 79 79 79 79 79 79 79 79

83 83 83 83 83 83 83 83 17 89 89 89 89 89 89 89 89 89

23 23 97 97 97 97 97 23 23 23 97

iНе можете найти то, что вам нужно? Попробуйте сервис подбора литературы.

101 101 101 101 101 101 101 29 101 29 29 29

103 103 103 103 103 103 103 103 107 107 107 107 107 107 107 37

109 109 109 109 109 109

41 41

43 43 43 43 43 43

101 2

31 31 31 31 31 107 37 107 107 107 107

109 109 109 109 109 109 113 113 113 113 113 113 113 113 127 127 127 127 127 127 127 127

127 127 47 47 47 47 47 47 131 131 131 131 53 131 131 131 131 131 131 131 131 131 131 131

Вектор распознавания

2,098951589832 E30 1,63662668958544 E28 5,38849355573104E29 2,27253858654744 E30 9,19424008297818 E29 2,27253858654744 E30 2,27253858654744 E30 2,27253858654744 E30 2,94789090036831 E29 3,05069466322996 E28 8,53432018900399 E27 9,04025304631169E24 1,74834375400699 E24 7,60368904395812 E25 4,96457187333091 E27 7,05907679038715 E28

Рис. 1. Пример формирования вектора распознавания для символа «ц5»

0 0

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

В [4] даны примеры приложения метода к поиску объектов в изображении гербария, к распознаванию диагностических экстремальных особенностей электрокардиограмм, к распознаванию отпечатков пальцев. Применимость схемы (5), (7), (8) к идентификации логических функций позволяет перенести ее на случай тестирования логических и цифровых устройств. При этом объекты должны иметь фиксированный порядок взаимного расположения до конца процесса рассматриваемой обработки.

С целью тестирования логическое устройство рассматривается как упорядоченная последовательность составляющих его логических элементов. Логический элемент, в свою очередь, интерпретируется как логическая функция, которую он реализует. Возникает возможность свести тестирующую схему к идентификации логических функций и, соответственно, к проверке правильности функционирования элементов устройства. При этом априори просчитываются все экстремальные значения выходной последовательности модифицированной мультипликативной схемы (5), (7), (8) для правильного получения эталонных значений. Отклонения от эталонных значений экстремумов интерпретируются как ошибки функционирования. Полнота совпадения с эталонами интерпретируется как критерий правильности работы тестируемой схемы. С использованием обратимости схемы (5), (7), (8) можно идентифицировать сбойные элементы исследуемой схемы.

Особенностью предложенных схем поиска и идентификации объектов является их параллелизм, который основан на максимальной параллельности используемых сортировок, на естественном параллелизме обработки отдельно взятых файлов и их фрагментов. В [4] приводится оценка

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

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

БИБЛИОГРАФИЧЕСКИЙ СПИСОК

1. Ромм Я.Е. Параллельная сортировка слиянием по матрицам сравнений. I // Кибернетика и системный анализ. 1994. № 5. С. 3-23.

2. Ромм Я.Е. Параллельная сортировка слиянием по матрицам сравнений. II // Кибернетика и системный анализ. 1995. № 4. С. 13-37.

3. Ромм Я.Е., Белоконова С.С. Схема поиска данных различных типов по нескольким маскам на основе сортировки // Известия вузов. Северо-Кавказский регион. техн. науки. Спец. вып. «Математическое моделирование и компьютерные технологии». 2006. С. 3-8.

4. Белоконова С.С. Разработка и исследование схем детерминированного поиска на основе сортировки с приложением к идентификации оцифрованных объектов различных типов: Дис. ... канд. техн. наук. Таганрог: ТТИ ЮФУ. 2007. 237 с.

i Надоели баннеры? Вы всегда можете отключить рекламу.