Похожие работы
|
Дисциплина Моделирование элементов вс - страница №2/3
Марковская модель вычислительных процессов.Наиболее простую модель можно получить, если принять допущение об отсутствии последствия в вычислительном процессе, означающем, что следующее состояние вычислительного процесса зависит только от текущего состояния и не зависит от предыдущих состояний. В таком случае вычислительный процесс становится марковским процессом, определяемым множеством присущих ему состояний матрицей вероятностей переходов и распределением вероятностей (a0,…,aH+1) состояний S0,…,SH+1 в момент времени 0. Элементы Pij матрицы P определяют вероятности перехода процесса из состояния Si в состояние Sj, т.е. вероятности того, что процесс, находящийся в состоянии Si в следующий момент времени будет находиться в состоянии Sj. Матрица P – стохастическая матрица, построчные суммы элементов которой . Вероятности ai определяют первое возможное состояние St0 процесса. Будем считать, что вычислительный процесс развивается следующим образом. Процесс начинается с состояния S0, т.е. программа начинает выполняться с этапа счета. Этап ввода-вывода может быть инициирован только процессором, т.е. может следовать только за этапом счета. Это одновременно означает, что после каждого этапа ввода-вывода следует этап счета. В таком случае вероятности начальных состояний (a0,a1,a2,…,aH+1)=(1,0,0,…,0) и матрица вероятностей переходов Из состояния счета S0 процесс с соответствующей вероятностью может перейти в состояния S1,…,SH, представляющие собой этапы обращения к файлам F1,…,FH, или в поглощающее состояние SH+1. Из состояний S1,…,SH процесс с вероятностью 1 возвращается в состояние счета S0. Достигнув поглощающего состояния SH+1 процесс с вероятностью 1, навсегда остается в нем. Порядок смены состояний можно представить на графе марковской цепи. Переходы между состояниями S0,…,SH+1 представляются на графе дугами, на которых обозначены вероятности переходов, отличные от 1. З Эта доля равна в среднем Nh/N, где Nh- среднее число переходов в состояние Sh. Следовательно: P0, h=Nh/N, h=1,2…H P0,H+1=1/N. Количество работы, выполняемой на каждом из этапов, характеризуется параметрами 1,…, H алгоритма. Значение определяет среднее количество процессорных операций, выполняемых за одну реализацию алгоритма, и значения 1,…, H – среднюю трудоемкость этапов, соответствующих состояниям S1…SH. Средняя трудоемкость этапа счета 0=/N, где N-среднее число этапов счета. Трудоемкость каждого этапа будем рассматривать как случайную величину h с математическим ожиданием H, h=0,1,…,H. Т Значение ij определяет трудоемкость соответствующего этапа и представляет собой j-е значение случайной величины i, математическое ожидание которой i . В данном случае состояние S3 является поглощающим: достигнув его, процесс прекращается. Рассмотрим пример. Пусть задан алгоритм, трудоемкость которого характеризуется следующими параметрами: =100 млн. операций; N1=19 обращений к файлу F1; N2=180 обращений к файлу F2; 1=2000 байтов; 2=500 байтов за обращение к файлу. Построим марковскую модель вычислительного процесса, порождаемого этим алгоритмом. Среднее число этапов счета при одном прогоне алгоритма N=N1+N2+1=200. Вероятности перехода процесса из состояния счета S0 в состояния S1,S2 и S3 равны соответственно: P01=N1/N=19/200=0,095 P02=N2/N=180/200=0,9 P03=1/N=1/200=0,005 Подставляя эти значения, получаем следующую матрицу вероятностей переходов: Из матрицы видно, что с вероятностью 0,095 за этапом счета произойдет обращение к файлу F1, с вероятностью 0,9 – F2, и с 0,005 – вычислительный процесс прекратится. Средняя трудоемкость этапа счета 0=/N=100/200=0,5 млн. операций. Оценка трудоемкости алгоритмов методами теории марковских цепей.Операторы алгоритма будем подразделять на функциональные, перехода и ввода-вывода. Функциональный оператор задает преобразование на множестве данных, т.е. задает некоторую совокупность вычислительных операций. Оператор перехода задает порядок вычисления значений предикатов и правило выбора одного из возможных путей развития вычислительного процесса, соответствующего текущим значения данных, отношения между которыми представляются предикатами. Оператор ввода-вывода задает обращение к определенному файлу с целью передачи некоторого количества информации. Функциональные операторы перехода задают совокупность вычислительных операций над данными и относятся к одному классу операторов, называемых основными операторами. Совокупность операторов и связей между ними наиболее наглядно представляется графом алгоритма, который строится как композиция вершин, соответствующих операторам алгоритма, и дуг, отображающих связи между операторами. Граф алгоритма является корректным, если выполняются следующие условия:
Приведем пример графа алгоритма: У Граф выделяет структуру алгоритма, определяет множество операторов V={V1, V2, …, Vk-1} и множество дуг, связывающих операторы D={(i, j)} i=0, 1, …, K-1 j=1,2,…,K Для оценки трудоемкости алгоритма необходимо:
S0={V1, V2, …, Vm0} VkV
Sh={V1,V2, …, Vmh} h=1,2,…,H каждый из этих операторов задает обращение к одному и тому же файлу Fh.
Так как вычислительный процесс не может приостанавливаться в вершине Vi, то с вероятностью 1 произойдет переход к какой-либо вершине графа алгоритма. С учетом этого вероятности переходов должны отвечать условию , I=0,1,2,…,К-1 Значения Pij определяются вероятностями значений предикатами. Другими словами, вероятности Pij зависят от вероятностей выполнения условия, проверяемого оператором i с целью выбора пути перехода. Например, пусть оператор 2 порождает переход к оператору 3 при отрицательном значении некоторой переменной Х и к оператору 4 при Х0. Если известно, что величина Х равномерно распределена в диапазоне (-1;+3), то с вероятностью 0,25 ее знак отрицателен и с вероятностью 0,75 положителен. Из этого следует, что переход к оператору 3 происходит с вероятностью Р2,3=0,25 и переход к оператору 4 – с вероятностью Р2,4=0,75. Пусть далее оператор 7, замыкающий цикл, порождает переход к оператору 1 в девяти случаях, а в одном случае переход происходит в конец алгоритма (цикл, начинающийся от оператора 1 и заканчивающийся оператором 7, выполняется 10 раз). Тогда вероятности переходов Pi,1=0,9 Pi,k=0,1. Если за оператором i непременно выполняется оператор j, то Pij=1. Пусть П1,П2,…,ПК-1 – среднее число обращений к операторам V1,V2,…,VK-1 за один прогон алгоритма. В таком случае характеристики трудоемкости могут быть вычислены следующим образом:
(h=1,2,…,H)
В последних выражениях суммирование выполняется по всем вершинам, относящимся к классу основных операторов S0 или классу операторов ввода-вывода Sh, обращающихся к файлу Fh. Таким образом, для оценки трудоемкости алгоритма необходимо определить среднее число обращений n1,n2,…,nk-1 к операторам. Допустим, что вероятности переходов Pkj постоянны и после выполнения оператора Vk (k=1,2,…,k-1) переход к следующему оператору определяется только распределением вероятностей Pkj, т.е. не зависит от хода вычислительного процесса в прошлом – до перехода к оператору Vk. При указанных допущениях процесс выполнения алгоритма является марковским процессом с К состояниями S1,S2,…,Sk соответствующими пребыванию процесса в вершинах V1,V2,…,Vk алгоритма. Состояния S1,S2,…,Sk-1- невозвратные (процесс после какого-то числа шагов непременно покидает их), состояние Sk – поглощающее (достигнув его, процесс прекращается). Начальным является состояние Si, определенное дугой (0,i), выходящей из начальной вершины графа. Для упрощения обозначений условимся, что i=1, т.е. начальное состояние – S1. Порядок изменения состояний определяется графом алгоритма, дуги которого отмечены вероятностями переходов Pij. Отмеченный граф алгоритма можно рассматривать как граф марковской цепи. Среднее число П1,П2,…,Пk-1 пребывания марковского процесса в невозвратных состояниях S1,S2,…,Sk-1 определяется корнями системы линейных алгебраических уравнений ni=1,i+ (i=1,2,…,k-1), где 1,i – символ Кронекера 1,i= Система этих уравнений строится исходя из следующих соображений. Значение ni будет равно, по крайней мере, одному, если процесс начинается от состояния с номером i=1, что отмечено символом 1,i. В остальных случаях процесс попадает в состояние Si только из других состояний j=1,2,…,k-1 с вероятностью Pij. Если процесс находился в состоянии j nj раз и Pji0, то процесс из этого состояния попадет в состояние i в среднем Pijnj раз. Суммированием значений Pijnj по всем j находится число попаданий процесса в состояние из всех других состояний j. Значения П1,П2,…,Пk-1 определяются решением системы линейных алгебраических уравнений, каноническая запись которой имеет вид: (p1,1-1)n1+p2,1n2+…+pk-1,1nk-1= -1 p1,2n1+(p2,2-1)n2+…+pk-1,2nk-1=0 ………………………………… p1,k-1n1+p2,k-1n2+…+(pk-1,k-1-1)nk-1=0 Для примера определим трудоемкость алгоритма, заданного ранее приведенным графом. Для простоты примем, что все операторы алгоритма – основные (операторы ввода-вывода отсутствуют) и количество операций Ki, порождаемых каждым оператором, постоянно и равно 1. На основе графа и формы строим систему из семи линейных алгебраических уравнений: -n1+0,9n2=-1 n1-n2=0 0,25n2-n3=0 0,75n2-n4=0 0,5n3+0,2n4-n5=0 0,8n4-n6=0 0,5n3+n5+n6-n7=0 Решая систему, определяем среднее число попаданий вычислительного процесса в состояния S1,S2,…,S7: n1=10; n2=10;n3=2,5; n4=7,5; n5=2,75; n6=6; n7=10. Подставляя полученные значения, получаем оценку трудоемкости алгоритма: ni=10+10+2,5+7,5+2,75+6+10=48,75 Рассмотренный способ определения трудоемкости алгоритмов является универсальным, позволяя получать оценки для алгоритмов с любой структурой, прост с точки зрения программирования, но требует решения системы алгебраических уравнений обычно высокого порядка. Поэтому данный способ предполагает использование ЭВМ для выполнения необходимых расчетов. следующая страница >> |
|