sonyps4.ru

Аппаратно-независимый уровень управления виртуальной памятью. Оптимальный алгоритм замещения страниц

Алгоритмы замещения страниц. FIFO. Вторая попытка. Алгоритм LRU.

Алгоритмы замещения страниц. Оптимальный алгоритм. Алгоритм NRU.

Алгоритмы замещения страниц

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

Оптимальный алгоритм

В момент страничного прерывания в памяти находится определенный набор страниц. Каждая страница может быть помечена числом команд, которые будут выполнены до первого обращения к ней. Оптимальный алгоритм удаляет страницу с наибольшей меткой. На практике такой алгоритм невыполним, так как ОС не может знать, когда произойдет обращение к той или иной странице. Осуществить оптимальный алгоритм можно в рамках эксперимента при повторном прогоне. Результаты оптимального алгоритма можно сравнивать с результатами других алгоритмов для определения их эффективности.

NRU (Not Recently Used) алгоритм (не использовавшаяся в последнее время страница)

В табличной записи для каждой страницы присутствуют 2 бита:

Бит R (бит обращения) устанавливается в единицу при каждом обращении к странице. Возможен сброс этого бита, например каждые n тиков таймера, чтобы отличить страницы, к которым давно не было обращения;

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

При страничном прерывании, на основании значений битов R и M, ОС делит все страницы на 4 класса. Для удаления случайным образом выбирается страница из низшего класса. Алгоритм легок в реализации и может дать вполне достаточный результат.

FIFO алгоритм

ОС поддерживает список всех страниц, находящихся в памяти. Список отсортирован в порядке появления страниц. При страничном прерывании выгружается страница из начала списка. Алгоритм редко используется в чистом виде.

Алгоритм "вторая попытка"

Является модификацией алгоритма FIFO. При страничном прерывании, у первой страницы в списке изучается бит R. Если он равен единице, страница помещается в конец списка, а бит R сбрасывается, и проверяется следующая страница. Данный алгоритм ищет в списке страницу, к которой не было обращений за последние n тиков таймера. Если происходили ссылки на все страницы, алгоритм превращается в обычный FIFO.

Алгоритм "часы"

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


Алгоритм LRU (Last Recently Used), страница, не использовавшаяся больше всего

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

Для первого метода требуется оснащение компьютера специальным N-разрядным счетчиком, который автоматически возрастает после каждой команды. Кроме этого, каждая запись в таблице страниц должна иметь поле для хранения значения этого счетчика. После каждого обращения к памяти, значение счетчика запоминается в записи в таблице в соответствующей странице, к которой произошло обращение. Если возникает страничное прерывание, менеджер памяти проверяет значение счетчиков во всей таблице и ищет наименьшее. Эта страница и является неиспользуемой дольше всего.

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

Итак, наиболее ответственным действием менеджера памяти является выделение кадра оперативной памяти для размещения в ней виртуальной страницы, находящейся во внешней памяти. Напомним, что мы рассматриваем ситуацию, когда размер виртуальной памяти для каждого процесса может существенно превосходить размер основной памяти. Это означает, что при выделении страницы основной памяти с большой вероятностью не удастся найти свободный страничный кадр . В этом случае операционная система в соответствии с заложенными в нее критериями должна:

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

Заметим, что при замещении приходится дважды передавать страницу между основной и вторичной памятью. Процесс замещения может быть оптимизирован за счет использования бита модификации (один из атрибутов страницы в таблице страниц). Бит модификации устанавливается компьютером, если хотя бы один байт был записан на страницу. При выборе кандидата на замещение проверяется бит модификации . Если бит не установлен, нет необходимости переписывать данную страницу на диск , ее копия на диске уже имеется. Подобный метод также применяется к read-only -страницам, они никогда не модифицируются. Эта схема уменьшает время обработки page fault .

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

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

Эффективность алгоритма обычно оценивается на конкретной последовательности ссылок к памяти, для которой подсчитывается число возникающих page faults . Эта последовательность называется строкой обращений (reference string ). Мы можем генерировать строку обращений искусственным образом при помощи датчика случайных чисел или трассируя конкретную систему. Последний метод дает слишком много ссылок, для уменьшения числа которых можно сделать две вещи:

  • для конкретного размера страниц можно запоминать только их номера, а не адреса, на которые идет ссылка;
  • несколько подряд идущих ссылок на одну страницу можно фиксировать один раз.

Как уже говорилось, большинство процессоров имеют простейшие аппаратные средства , позволяющие собирать некоторую статистику обращений к памяти. Эти средства обычно включают два специальных флага на каждый элемент таблицы страниц. Флаг ссылки (reference бит ) автоматически устанавливается, когда происходит любое обращение к этой странице, а уже рассмотренный выше флаг изменения ( modify бит ) устанавливается, если производится запись в эту страницу. Операционная система периодически проверяет установку таких флагов, для того чтобы выделить активно используемые страницы, после чего значения этих флагов сбрасываются.

Рассмотрим ряд алгоритмов замещения страниц.

Алгоритм FIFO. Выталкивание первой пришедшей страницы

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

Аномалия Билэди (Belady)

На первый взгляд кажется очевидным, что чем больше в памяти страничных кадров, тем реже будут иметь место page faults . Удивительно, но это не всегда так. Как установил Билэди с коллегами, определенные последовательности обращений к страницам в действительности приводят к увеличению числа страничных нарушений при увеличении кадров, выделенных процессу. Это явление носит название "аномалии Билэди" или "аномалии FIFO ".

Система с тремя кадрами (9 faults) оказывается более производительной, чем с четырьмя кадрами (10 faults), для строки обращений к памяти 012301401234 при выборе стратегии FIFO .


Рис. 10.1.

Оптимальный алгоритм (OPT)

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

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

Этот алгоритм легко описать, но реализовать невозможно. ОС не знает, к какой странице будет следующее обращение. (Ранее такие проблемы возникали при планировании процессов - алгоритм SJF ).

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

Выталкивание дольше всего не использовавшейся страницы. Алгоритм LRU

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

Ключевое отличие между FIFO и оптимальным алгоритмом заключается в том, что один смотрит назад, а другой вперед. Если использовать прошлое для аппроксимации будущего, имеет смысл замещать страницу, которая не использовалась в течение самого долгого времени. Такой подход называется least recently used алгоритм (LRU ). Работа алгоритма проиллюстрирована на рис. рис. 10.2 . Сравнивая рис. 10.1 b и 10.2, можно увидеть, что использование LRU алгоритма позволяет сократить количество страничных нарушений .


Рис. 10.2.

LRU - хороший, но труднореализуемый алгоритм. Необходимо иметь связанный список всех страниц в памяти, в начале которого будут хранится недавно использованные страницы. Причем этот список должен обновляться при каждом обращении к памяти. Много времени нужно и на поиск страниц в таком списке.

В [Таненбаум, 2002 ] рассмотрен вариант реализации алгоритма LRU со специальным 64-битным указателем, который автоматически увеличивается на единицу после выполнения каждой инструкции, а в таблице страниц имеется соответствующее поле, в которое заносится значение указателя при каждой ссылке на страницу. При возникновении page fault выгружается страница с наименьшим значением этого поля.

Как оптимальный алгоритм, так и LRU не страдают от аномалии Билэди . Существует класс алгоритмов, для которых при одной и той же строке обращений множество страниц в памяти для n кадров всегда является подмножеством страниц для n+1 кадра. Эти алгоритмы не проявляют аномалии Билэди и называются стековыми (stack) алгоритмами.

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

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

Предположим, что все искажения в канале строго детерминированы и случайным является только гауссовский аддитивный шум который будем вначале полагать белым, со спектральной плотностью Это значит, что при передаче сигнала (символа приходящий сигнал можно описать моделью (3.28):

где все известны. Неизвестны лишь реализация помехи и индекс действительно переданного сигнала, который и должна определить решающая схема.

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

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

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

Задача затрудняется тем, что ширина спектра сигнала бесконечна (поскольку он финитный), а поэтому пространство сигналов бесконечномерное Для таких сигналов (или бесконечномерных векторов), как уже отмечалось, не существует плотности вероятностей. Однако существуют -рные плотности вероятностей для любых сечений сигнала (см. § 2.1).

Заменим вначале белый шум. квазибелым, имеющим ту же одностороннюю спектральную плотность мощности но только в некоторой полосе частот где 1. Рассмотрим вначале нулевую гипотезу, т. е. будем считать, что - шум. Возьмем на тактовом интервале равноотстоящих сечений через Отсчеты в этих сечениях для квазибелого гауссовского шума независимы в соответствии с (2.49). Поэтому -мерная плотность вероятностей для взятых отсчетов

где дисперсия (мощность) квазибелого шума.

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

Отношение правдоподобия для сигнала (относительно нулевой гипотезы), вычисленное для сечений:

Заменим дисперсию ее выражением:

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

Заметим, что второй член в (4.22) не зависит от и его можно при сравнении не учитывать. Тогда правило решения о том, что передавался сигнал можно сформулировать следующим образом:

В -мерном евклидовом пространстве определяет норму разности векторов или расстояние между ними. Поэтому алгоритм (4.23) можно записать в виде

и придать ему простую геометрическую интерпретацию: оптимальный демодулятор должен регистрировать тот из сигналов (соответствующий символу который «ближе» к принятому колебанию В качестве примера на рис. 4.2 показано оптимальное разбиение двумерного пространства принимаемых сигналов при передаче двоичных сигналов Области принятия решения в пользу символов расположены по обе стороны от

Рис. 4.2. Оптимальное разбиение пространства принимаемых колебаний при двоичном коде и точно известных сигналах

Преобразуем (4.22), раскрыв скобки и произведя сокращения:

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

а алгоритм решения о передаче примет вид

где энергия ожидаемого сигнала

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

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

На рис. 4.3 показана структурная схема приемного устройства, работающего в соответствии с (4.26). Здесь блоки X - перемножители; А - генераторы опорных сигналов - интеграторы, вычитающие устройства; решающее устройство, определяющее в моменты времени, кратные (при замыкании ключа), номер ветви с максимальным сигналом.

Если сигналы выбраны таким образом, что все их реализации (а следовательно, и все реализации имеют одинаковые энергии алгоритм

Рис. 4.3. Оптимальный демодулятор при точно известных сигналах

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

Из (4.29) видно, что правило решения не изменится, если сигнал поступающий на вход демодулятора, умножить на любое число. Поэтому система, в которой все реализации сигнала имеют равную энергию, отличается тем, что оптимальный алгоритм приема в ней не требует знания «масштаба» приходящего сигнала или, другими словами, знания коэффициента передачи канала. Эта важная особенность обусловила широкое распространение систем сигналов с равной энергией, которые обычно называют системами с активной паузой. Особенно важна эта особенность для каналов с замираниями, в которых коэффициент передачи флуктуирует (см. ниже § 4.7).

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

Для наиболее распространенной двоичной системы неравенств (4.26) остается лишь одно, и алгоритм приема можно представить в более простом виде:

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

При выполнении неравенства (4.30) регистрируется символ 1, в противном случае - 0. Для реализации (4.30) в схеме рис. 4.3 требуется лишь одна ветвь.

На рис. 4.4 показана схема, реализующая алгоритм (4.30) для двоичной системы передачи однополярными импульсами (с пассивной паузой):

Рис. 4.4. Реализация оптимального приема двоичных прямоугольных видеоимпульсов

При этих сигналах и правило (4.30) примет следующий вид:

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

Эта же схема, с небольшой модификацией, может использоваться для демодуляции в двоичной системе передачи двухполярными импульсами (с активной паузой): При этом следовательно, В этом случае правило (4.30) после сокращения принимает вид

Его реализует схема рис. 4.4, если пороговый уровень X положить равным нулю. При этом превращается в дискриминатор полярности, выдающий символ 1, когда на его входе напряжение положительно, противном случае.

Рассмотренные две системы используются в простейших устройствах проводной связи. В радиоканалах, а также в современных кабельных каналах используются высокочастотные сигналы. Наиболее простыми двоичными системами с гармоническими сигналами являются системы с амплитудной (AM), фазовой (ФМ) и частотной манипуляцией.

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

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

Рис. 4.5. Реализация оптимального приема в двоичной системе AM, ФМ при точно известном сигнале

При двоичной ФМ системе

Это - система с активной паузой, и поэтому в Легко убедиться, что правило решения сводится при этом к следующему: и

реализуется той же схемой рис. 4.5 при В этом случае играет роль дискриминатора полярностей. Вид его можно определить, зная на фоне белого шума со спектральной плотностью Легко видеть, что на выходе фильтра будут сигналы а шум будет окрашенным, со спектральной плотностью т. е. на вход воображаемого оптимального демодулятора будут поступать именно те сигналы и тот шум, на которые он рассчитан. Таким образом, схема рис. 4.66 представляет собой демодулятор для сигналов на фоне белого шума, в котором вероятность ошибок меньше, чем в оптимальном демодуляторе, подключенном к выходу обеляющего фильтра на рис. 4.6а. Это противоречие и доказывает, что не может существовать демодулятор для сигналов на фоне окрашенного шума лучший, чем на рис. 4.6а.

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

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

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

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

Кроме того, как показывает практика, почти всегда можно найти способ улучшить уже разработанный алгоритм программы. Конечно, лучше всего тщательно разработать алгоритм в начале проектирования, чтобы избежать в дальнейшем многих неприятных последствий, связанных с доработкой фрагментов программного кода в течение короткого промежутка времени. Не жалейте времени на разработку алгоритма приложения - это избавит вас от головной боли при отладке и тестировании программы и сэкономит время.

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

В начале разработки алгоритма довольно сложно оценить, каким будет программный код приложения. Чтобы правильно разработать алгоритм программы, необходимо следовать нескольким простым правилам:
1. Тщательно изучить задачу, для которой будет разработана программа.
2. Определить основные требования к программе и представить их в формализованном виде.
3. Определить форму представления. входных и выходных данных и их структуру, а также возможные ограничения.
4. На основе этих данных определить программный вариант (или модель) реализации задачи.
5. Выбрать метод реализации задачи.
6. Разработать алгоритм реализации программного кода. Не следует путать алгоритм решения задачи с алгоритмом реализации программного кода.
В общем случае, они никогда не совпадают. Это самый ответственный этап разработки программного обеспечения!
7. Разработать исходный текст программы в соответствии с алгоритмом реализации программного кода.
8. Провести отладку и тестирование программного кода разработанного приложения.

Не следует воспринимать эти правила буквально. В каждом конкретном случае программист сам выбирает методику разработки программ. Некоторые этапы разработки приложения могут дополнительно детализироваться, а некоторые вообще отсутствовать. Для небольших задач достаточно разработать алгоритм, слегка подправить его для реализации программного кода и затем отладить.

При создании больших приложений, возможно, понадобится разрабатывать и тестировать отдельные фрагменты программного кода, что может потребовать дополнительной детализации программного алгоритма.
Для правильной алгоритмизации задач программисту могут помочь многочисленные литературные источники. Принципы построения эффективных алгоритмов достаточно хорошо разработаны. Имеется немало хорошей литературы по этой теме, например книга Д. Кнута "Искусство программирования".

Оптимизация с учетом аппаратных средств компьютера
Обычно разработчик программного обеспечения стремится к тому, чтобы производительность работы приложения как можно меньше зависела от аппаратуры компьютера. При этом следует принимать во внимание наихудший вариант, когда у пользователя вашей программы будет далеко не самая последняя модель компьютера. В этом случае "ревизия" работы аппаратной части часто позволяет найти резервы для улучшения работы приложения.
Первое, что нужно сделать, - проанализировать производительность компьютерной периферии, на которой должна работать программа. В любом случае знание того, что работает быстрее, а что медленнее, поможет при разработке программы. Анализ пропускной способности системы позволяет определить узкие места и принять правильное решение. Различные устройства компьютера имеют разную пропускную способность. Наиболее быстрыми из них являются процессор и оперативная память, относительно медленными - жесткий диск и CD-привод. Самыми медленными являются принтеры, плоттеры и сканеры.

ФЕДЕРАЛЬНОЕ АГЕНТСТВО ПО ОБРАЗОВАНИЮ

Государственное образовательное учреждение высшего профессионального образования "Воронежский государственный технический университет"

Радиотехнический факультет

Кафедра радиотехники

Специальность 210302 "Радиотехника"

Оптимизация алгоритмов поиска

Выполнил студент гр. РТ-041 Д.С. Чёткин

Проверил доцент кафедры В.П. Литвиненко

Введение. 4

1. Разработка оптимального дихотомического алгоритма поиска при равновероятном распределении вероятностей и числе событий М=16. 5

2. Разработка оптимального алгоритма поиска для экспоненциального закона распределения вероятностей при М=16. 7

3. Разработка оптимального алгоритма поиска экспоненциального закона распределения при числе измерений от N=15 до N=log2M.. 9

4. Разработка оптимального алгоритма поиска для 9-го варианта распределения при числе измерений от N=1 до 15. 12

Заключение. 19

Список литературы.. 20

Введение

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

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

Множество Х с соответствующим законом распределения вероятностей разбивается на два подмножества и (верхний индекс - номер разбиения). Двоичный измеритель проводит двоичное измерение, выявляя, в каком подмножестве находится реасобытие (его след). Затем подмножество, в котором обнаружено реасобытие (на рис.2.1. это ), вновь разбивается на два подмножества и и выявляется след реасобытия в одном из них. Процедура заканчивается, когда в выделенном подмножестве оказывается одно событие. Поиск может быть последовательным и дихотомическим. В первом алгоритме () производится последовательный перебор состояний от первого до последнего, пока не встретится реасобытие.

Второй алгоритм поиска () предполагает разделение всего множества состояний пополам, проверку наличия реасобытия в каждой из этих частей, затем разделение выбранной половины множества X на две равные части с проверкой наличия в них реасобытия и так далее. Поиск заканчивается, когда в выделенном подмножестве оказывается одно событие.

Существует несколько способов минимизации двоичных поисковых процедур. Примерами могут служить методы Циммермана-Хафмена и Шеннона-Фоно. Оптимизировать алгоритм можно по различным параметрам с учетом стоимости измерения и без. В данной лабораторной работе исследовали оптимизацию дихотомического алгоритма поиска по наименьшей величине средней скрытности.

1. Разработка оптимального дихотомического алгоритма поиска при равновероятном распределении вероятностей и числе событий М=16

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

В данном случае наиболее оптимальным алгоритмом поиска является алгоритм разработанный по принципу Шеннона-Фано. Данный метод предполагает исходное множество элементов с заданным распределением разбить на два подмножества с номерами 0 и 1 так, чтобы вероятности попадания в них были максимальны близки (в идеале пополам). Затем каждое из полученных подмножеств отдельно разбивается на два подмножества с тем же условием и номерами с 00,01,10,11. Разбиение заканчивается когда все элементы подмножества будут иметь только по одному элементу.

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

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

(1)

В результате для данного случая:

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

Разработка оптимального алгоритма поиска для экспоненциального закона распределения вероятностей при М=16

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

Первоначально оставим дерево поиска таким же, что в предыдущем пункте. «PrintScreen» программы «Poisk» для данного случая для экспоненциального закона распределения.

Глядя на ход кривой снятия неопределенности приходим выводу, что ее ход является неоптимальным. Используя известные алгоритмы оптимизации поиска приходим к тому, что в данном случае оптимальным алгоритмом поиска является вовсе не дихотомический алгоритм при любых комбинациях нахождения реасобытия, а последовательный. Для данного случая он является оптимальным, так как первым измерением проверяется наиболее вероятное, затем следующее и так пока не останется неопределенности принятия решения.

Доказательство использования последовательного алгоритма поиска. Для этого используется метод Циммермана-Хаффмена. Данный метод оптимизации состоит из двух этапов: «Заготовительные операции» и «Считывание». Более подробно про это говорится в книге .

Так как показатель степени больше 1, а это удовлетворяет неравенству:

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

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

Разработка оптимального алгоритма поиска экспоненциального закона распределения при числе измерений от N=15 до N=log2M

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

При N=15 из предыдущего пункта оптимальным является последовательный алгоритм поиска и для него значение среднее значение двоичных измерений определяется так же как и для потенциальной скрытности. Значение Rcpпредставлено в таблице 1.

Таблица 1 – Зависимость среднего числа измерений

от числа измерений при оптимальных алгоритмах поиска

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

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

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

Рисунок 8 – Зависимость среднего числа измерений от числа измерений для экспоненциального закона распределения вероятности

4. Разработка оптимального алгоритма поиска для 9-го варианта распределения при числе измерений от N=1 до 15

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

На наборном поле задайте оптимальный полный алгоритм поиска. Последовательно исключая последние измерения (до ), рассмотрите зависимость среднего числа измерений , вероятности неполного решения и остаточной скрытности от продолжительности поиска . Результаты представлены в таблице 2.

Таблица 2 – Зависимость среднего числа измерений,

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

n 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
R 4 3.775 4.325 4.725 5.1625 5.375 5.5 5.65 5.7 5.7625 5.8 5.8
Pнеоп 0.55 0.7625 0.875 0 0 0 0 0 0 0 0 0 0 0 0
Sост 0.801 0.785 0.791 0.802 0.814 0.826 0.837 0.848 0.858 0.868 0.877 0.885 0.893 0.901

В данной таблице Sост считалось при доверительной вероятности 0.9. «PrintScreen» программы «Poisk» при различных значениях числа измерений представлен на рисунках 8-11.

При числе измерений меньше 4-х появляется вероятность неполного решения, связанная с тем, что невозможно проверить все события. В результате приходится проверять не все, оптимальным вариантом будет проверка наиболее вероятных событий. «PrintScreen» программы «Poisk» при числе измерения меньше 3-х представлена на рисунке 12.

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

Рисунок 13 – Зависимость среднего числа измерений от числа измерений для 9-го закона распределения вероятности

Рисунок 14 – Зависимость вероятности неполного решения от числа измерений для 9-го закона распределения вероятности

(3)

(4)

Доверительную вероятность будем менять в пределах 0.7÷0.9. В результате получен график зависимости остаточной скрытности от числа измерений, который представлен на рисунке 15.

Ност(Pдов) Pдов=0.9

Рисунок 15 – Зависимость остаточной скрытости при значениях доверительной вероятности 0.7÷0.9

Из представленного выше графика можно сделать вывод, что Pдов следует выбирать близким к единице, это приведет к уменьшению остаточной скрытности, однако не всегда такое возможно.

Рисунок 16 – Зависимость остаточной скрытости при значениях числа измерений 4,8,16

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

Заключение

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

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

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

Правильность работы программы Poisk потверждена с помощью расчётов проведённых в пакете программ Matcard 2001.

Список литературы

1. Основы теории скрытности: учебное пособие для студентов специальности 200700 «Радиотехника» дневной формы обучения / Воронежский государственный технический университет; Сост.З.М. Каневский, В.П. Литвиненко, Г.В. Макаров, Д.А. Максимов; под редакцией З.М. Каневского. Воронеж, 2006. 202с.

2. Методические указания к лабораторным работам «Исследование алгоритмов поиска» по дисциплине «Основы теории скрытности» для студентов специальности 200700 «Радиотехника» дневной форм7 обучения / Воронежский государственный технический университет; сост.З.М. Каневский, В.П. Литвиненко. Воронеж, 2007.54с.

3. СТП ВГТУ 005-2007. Курсовое проектирование. Организация, порядок, оформление расчетно-пояснительной записки и графической части.



Загрузка...