![]() Главная страница Случайная страница КАТЕГОРИИ: АвтомобилиАстрономияБиологияГеографияДом и садДругие языкиДругоеИнформатикаИсторияКультураЛитератураЛогикаМатематикаМедицинаМеталлургияМеханикаОбразованиеОхрана трудаПедагогикаПолитикаПравоПсихологияРелигияРиторикаСоциологияСпортСтроительствоТехнологияТуризмФизикаФилософияФинансыХимияЧерчениеЭкологияЭкономикаЭлектроника |
Описание функций. В тексте алгоритма использовано следующее обозначение:
В тексте алгоритма использовано следующее обозначение: < выходные данные> = < название функции > (< входные данные>).
Процедура “решить задачу диагностики по признаку”
Используются следующие структуры данных: · битовый массив – массив с числом элементов, равным количеству ИБ контрпримеров заболевания. Если “ ОКП заболевания по признаку ” отвергает некоторую ИБ из контрпримеров этого заболевания, то соответствующий элемент массива получает значение 1, иначе – 0. · последовательность – массив с числом элементов, равным количеству МН в отдельно взятой ИБ из контрпримеров заболевания. Для каждого МН в массив записывается номер периода, в который попадает (по значению и временным границам) этот МН.
битовый массив = создать битовый массив ДЛЯ ВСЕХ ИБ контрпримеров ВЫПОЛНЯТЬ последовательность = создать последовательность ОТ I = 1 ДО количество МН в ИБ ВЫПОЛНЯТЬ последовательность [I] = 0; последовательность построена = ЛОЖЬ; закончить обработку ИБ = ЛОЖЬ; текущий период = 1; текущий МН = 1; //Проход по МН из ИБ до тех пор, пока либо не будет построена последовательность (ИБ принята), либо не будет установлено, что построить её невозможно (ИБ отвергнута) ПОКА (текущий МН < = количество МН) И результат обработки = обработать момент наблюдения ВЫБОР результат обработки ИЗ 0: //Переход на следующий МН ЕСЛИ текущий МН < количество МН ТО текущий МН += текущий МН; последовательность [ текущий МН ] = ИНАЧЕ последовательность построена = ИСТИНА; 1: //Откат назад на предыдущий МН или увеличение текущего периода (если МН не подходит по значению или при проверке на верхнюю границу) ЕСЛИ текущий период < ЧПД ТО текущий период += текущий период; ИНАЧЕ ПОКА (текущий МН > 1) И ВЫПОЛНЯТЬ текущий МН -= текущий МН; ЕСЛИ текущий МН > 1 ТО текущий период = последовательность текущий МН -= текущий МН; ИНАЧЕ закончить обработку ИБ = ИСТИНА; 2: //Откат назад на пред пред ыдущий МН (если МН не подходит при проверке на нижнюю границу) ПОКА (текущий МН > 2) И ВЫПОЛНЯТЬ текущий МН -= текущий МН; ЕСЛИ текущий МН > 2 ТО текущий период = последовательность текущий МН -= текущий МН; ИНАЧЕ закончить обработку ИБ = ИСТИНА; 3: //Закончить обработку ИБ закончить обработку ИБ = ИСТИНА; ЗАКОНЧИТЬ ВЫБОР ЗАКОНЧИТЬ ПОКА //Проверка, построена ли последовательность (отвергнута ли ИБ) ЕСЛИ последовательность построена == ЛОЖЬ ТО битовый массив [ номер ИБ ] = 1; ЗАКОНЧИТЬ ДЛЯ ВСЕХ. Функция “обработать момент наблюдения”
//Определить номер минимального периода, в который при проверке по значению и временным границам попадает значение в “ текущий МН ”, начиная с “ текущий период ” (если не попадает ни в один из периодов, то результат возвращается равным нулю).
минимальный период = определить период по значению в МН ЕСЛИ минимальный период == 0 ТОЕСЛИ последовательность [1] < ЧПД ТО результат обработки = 1; ИНАЧЕ результат обработки = 3; ИНАЧЕ //Проверка временных границ текущий период = минимальный период; ЕСЛИ последовательность [ текущий МН ]== 1 ТО результат по границе = ИНАЧЕ ЕСЛИ текущий МН == 1 ТО результат по границе = ЕСЛИ результат по границам == 0 ТО результат по границе = ИНАЧЕ результат по границе = ЕСЛИ (последовательность ТО результат по границе = результат обработки = результат по границе.
Функция “определить период по значению в МН”
//Определить “ минимальный период ”, в который попадает значение в “ текущий МН ”, начиная с “ текущий период ” (если не попадает ни в один из периодов, то результат возвращается равным нулю).
минимальный период = 0; период для МН фиксирован = ЛОЖЬ; ПОКА (текущий период < = ЧПД) И ЕСЛИ моменты наблюдения [2, текущий МН ] ПРИНАДЛЕЖИТ ТО минимальный период = текущий период; ИНАЧЕ текущий период += текущий период; ЕСЛИ текущий период > ЧПД ТО минимальный период = 0.
Функция “проверить верхнюю границу (флаг)”
// Возвращает 0, если проверка прошла успешно или 1 - если наоборот.
сумма верхних границ = 0; ВЫБОР из флаг 1: //Проверка МН, попавшего в первый период ЕСЛИ моменты наблюдения [1, текущий МН ]> верхняя граница [1] ТО результат по границе = 1 ИНАЧЕ результат по границе = 0; 2: //Проверка самого первого МН, попавшего НЕ в первый период ОТ I = 1 ДО текущий период ВЫПОЛНЯТЬ сумма верхних границ = сумма верхних границ + ЕСЛИ моменты наблюдения [1, текущий МН ]> ТО результат по границе = 1 ИНАЧЕ результат по границе = 0; 3: //Проверка НЕ первого МН, попавшего НЕ в первый период ОТ I = 1 ДО текущий период ВЫПОЛНЯТЬ сумма верхних границ = сумма верхних границ + ЕСЛИ моменты наблюдения [1, текущий МН ]> ТО результат по границе = 1 ИНАЧЕ //Проверяем разности с предыдущими МН сумма верхних границ = 0; I = текущий период; результат по границе = 0; ПОКА (I > = 2) И (результат по границе == 0) ВЫПОЛНЯТЬ первый = первый МН в периоде (I); сумма верхних границ = сумма верхних границ + ЕСЛИ первый < > -1 ТО ЕСЛИ (моменты наблюдения ТО результат по границе = 1 ИНАЧЕ результат по границе = 0; I -= I; ЗАКОНЧИТЬ ВЫБОР.
Функция “проверить нижнюю границу (флаг)”
// Возвращает 0, если проверка прошла успешно или 2 - если наоборот.
сумма верхних границ = 0; ЕСЛИ флаг == ИСТИНА ТО //Проверка первого МН, попавшего НЕ в первый период. ОТ J = 1 ДО текущий период ВЫПОЛНЯТЬ сумма нижних границ = сумма нижних границ + ЕСЛИ моменты наблюдения [1, текущий МН ]< ТО результат по границе = 2 ИНАЧЕ результат по границе = 0; ИНАЧЕ //Проверка НЕ первого МН, попавшего НЕ в первый период. ОТ I = 1 ДО (текущий период – 1) ВЫПОЛНЯТЬ сумма нижних границ = сумма нижних границ + ЕСЛИ моменты наблюдения [1, текущий МН ]< ТО результат по границе = 2 ИНАЧЕ //Проверка разности с предыдущими МН. сумма нижних границ = 0; I = текущий период - 1; результат по границе = 0; ПОКА (I > = 2) И (результат по границе == 0) ВЫПОЛНЯТЬ последний = последний МН в периоде сумма нижних границ = сумма нижних границ + нижняя граница [I]; ЕСЛИ последний < > -1 ТО ЕСЛИ (моменты наблюдения ТО результат по границе = 2 ИНАЧЕ результат по границе = 0; I = I – 1. Функция “первый МН в периоде (период)”
//Возвращает номер первого МН в последовательности попавшего в “период” или -1, если в последовательность нет такого МН.
первый = -1; К = 1; ПОКА (K < = длина последовательности) И (первый == -1) ВЫПОЛНЯТЬ ЕСЛИ последовательность [К] == период ТО первый = К; К += К.
Функция “последний МН в периоде (период)”
//Возвращает номер последнего МН в последовательности попавшего в “период” или -1, если в последовательность нет такого МН.
последний = -1; К = длина последовательности; ПОКА (K > = 1) И (последний == -1) ВЫПОЛНЯТЬ ЕСЛИ последовательность [К] == период ТО последний = К; К –= К.
|