Для устранения этого недостатка преобразуем формулу (5) в форму рекуррентного соотношения, позволяющего на каждом шаге выбора признаков использовать результаты вычислений на предыдущих шагах. С этой целью выделим первый проверяемый признак рассматриваемой
-подпрограммы и обозначим его через . Цену проверки этого признака запишем в виде отдельного слагаемого. Средние затраты на реализацию -подпрограммы, начинающейся с проверки признака , обозначим . Тогда вместо формулы (5) имеем
или с учетом формул (3.31) и (3.32)
. (8)
В полученном выражении второе слагаемое, стоящее после знака “+”, представляет собой средние затраты на реализацию той части
-подпрограммы, которая содержит область достижимости вершины . Эта часть получается удалением из -подпрограммы начальной вершины с выходящими из нее дугами – исходами проверки признака . Вершины, инцидентные удаленным дугам, представляют собой ФС , получаемые из начального ФС при различных исходах выполняемой в нем проверки согласно отображению, то есть, если ,
где
.
Каждая вершина
( ) с исходящими из нее путями и ее область достижимости составляют часть -подпрограммы, которую назовем -подпрограммой ( ). Поэтому часть выражения (8), стоящую после знака “+”, можем представить в виде суммы из слагаемых, каждое из которых соответствует отдельной -подпрограмме, то есть, (9)
где
– -я ветвь, а – множество всех ветвей ‑подпрограммы.Вынесем за знак “
”, стоящий в формуле вторым, сомножитель,
характеризующий вероятность
-го исхода ( ) проверки признака в ФС . В результате получим, (10)
где
– вероятность реализации -й ветви -подпрограммы.Ведем обозначение
. (11)
Это выражение, как видно из сопоставления его с формулой (5), определяет средние затраты на реализацию
‑подпрограммы. Подставив его в формулу (10), получим искомое рекуррентное соотношение. (12)
Вероятность
в этом соотношении вычисляется по формуле (3).Если при некотором
-м исходе проверки признака ( ) в фазовом состоянии получается конечное ФС , , то в формуле (11) подмножество становится пустым (в конечном ФС проверки не выполняются), а поэтому принимается. (13)
В качестве оптимального в ФС
выбирается признак , удовлетворяющий критерию.Чтобы реализовать рекуррентную процедуру выбора оптимальных признаков, необходимо прежде всего определить множество
всех промежуточных фазовых состояний, которые могут возникнуть при различных исходах проверок допустимых признаков . В результате выполнения рекуррентной процедуры выбора оптимальных признаков найдем все необходимые фазовые состояния и соответствующие им подмножества допустимых признаков.Для каждого ФС
выберем из подмножества оптимальный признак. На первом шаге найдем оптимальные признаки в состояниях . Очевидно, что при проверке любого признака из состояния получаются только конечные состояния , , для которых . Согласно формуле (12) получим , то есть средние затраты на реализацию -подпрограммы определяются только ценой проверяемого признака, так как он единственный в данной подпрограмме. Поэтому выберем по критерию в каждом состоянии самый “дешевый” признак . Запомнив выбранные признаки и соответствующие им показатели , перейдем к второму шагу – выбору оптимальных признаков в состояниях .