Отправляет email-рассылки с помощью сервиса Sendsay

Алгоритмы для всех

  Все выпуски  

Алгоритмы для всех


Служба Рассылок Subscribe.Ru проекта Citycat.Ru
Рассылка "Алгоритмы для всех", выпуск 11, март 2001 г.

  В выпуске:

1) От редактора.
2) Работа алгоритма и мета-алгоритма распознавания (на примере определения
необходимости заполнения налоговой декларации). Начало.

1) От редактора.

Таблицы ниже я изобразил текстом. Смотреть и печатать этот текст (и, если
будут, аналогичные последующие) лучше с помощью шрифтов типа "Курьер"
(Courier New, Courier, ER Kurier...), - с фиксированной (непропорциональной)
шириной знаков, - отрегулировав длину строки через размер шрифта. У меня
сейчас (во время создания выпуска) стоит Courier New 9.

2) С.В.Пушкарев Работа алгоритма и мета-алгоритма распознавания (на примере
определения необходимости заполнения налоговой декларации).

В далеком 1959 г. Калужнин (КОА, см. также ГТА) ввел два типа объектов
(~записей) в алгоритмах: операторы (СП: действия) и распознаватели (СП:
признаки, - точнее, пары: признак плюс стандартное действие, - у меня оно,
как правило, имеет вид "внести в следующую запись...", - алгоритм ниже дан в
упрощенном виде: без этого действия). В несколько более близком к нам 1966
г. Ланда (ЛАВ:106-107) обобщил эти типы для алгоритмов в целом, введя
понятия алгоритмов преобразования и распознавания.

Термин "алгоритм распознавания" мне кажется не очень удачным: здесь,
все-таки, имеется в виду не совсем то, что обычно понимается под термином
"распознавание" ("распознать опасность", "системы распознавания текста"...)
Точнее, вероятно, было бы назвать этот тип алгоритмов "алгоритмами
логического вычисления" (или "логико-вычислительными алгоритмами"): как и
при обычном вычислении все нужные сведения здесь заданы изначально, и
требуется только определенным образом их преобразовать. Другой возможный
вариант - "алгоритмы определения". Но тут то неудобство, что у слова
"определение" несколько значений. Из них здесь используется то же значение,
что и в выражении "определить какой-либо вид (животного или растения)".
Кстати, существующие определители (Для не-биологов: это такие специальные
книжки.) животных и растений вполне можно было бы сделать существенно более
простыми для использования, представив в виде таких алгоритмов. Еще один
вариант - "алгоритмы логического вывода", - но под известное "Все люди
смертны. Сократ - человек. => Сократ смертен." они как-то не очень подходят...

Для создания алгоритма я использовал (в ходе выполнения мета-алгоритма, -
алгоритма создания алгоритма) следующие два абзаца из статьи Сергея Аверкина
(Комсомольская правда от 21.1.01, с.7):

"Кто обязан подавать декларацию о доходах?

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

Кроме того, по закону должны подать декларации и любители калымить на
стороне. Правда, только те, кто в прошлом году заработал в общей сложности
более 50 тысяч рублей [*]."

Для сравнения: официально (версия от Мин-ва по налогам и сборам) эти
признаки выглядят так (http://www.nalog.ru/declare/who.shtml):

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

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

Обрабатывающий такие признаки мета-алгоритм выглядит так:

0. Создать алгоритм распознавания, А ДЛЯ ЭТОГО НУЖНО
№:                  шаги                     : результаты
-:-------------------------------------------:-------
1: внести в него условия (вопросы, признаки) : №23-27
2: внести связи условий (действия над ними)  : №28-31
3: внести основной вопрос                    : №32
4: привязать к нему конечную связь           : то, что в скобках в №32

Я выполняю этот мета-алгоритм (по приведенному выше разделению он относится
к алгоритмам преобразования), создавая просто алгоритм (распознавания) и
внося в поле "результаты" ссылки на соответствующие созданные его записи. В
результате обработки приведенной выше цитаты из "Комсомолки" с помощью
мета-алгоритма получается следующий алгоритм (ответы на вопросы, - значения
в полях 3 и 4, - рассматривать пока не надо: они появятся потом):

22. Определить, нужно ли мне подавать декларацию о доходах за 2000 г., А ДЛЯ
ЭТОГО НУЖНО ответить на вопросы:
                                                     проходы по алгоритму
                                                             1-й 2-й
 1:                              2                          : 3 : 4 : 5 :
--:---------------------------------------------------------:---:---:---:
23:Я - предприниматель?                                     :нет:нет:   :
24:Я исправно получаю доходы за бугром в иностранной валюте?:нет:нет:   :
25:Я сдаю в аренду квартиры, гаражи, автомобили?            :нет:нет:   :
26:Я любитель калымить на стороне?                          :да :да :   :
27:Я заработал в общей сложности больше 50000р.(*) в 2000г.?:н/и:нет:   :
28:Какой-нибудь из ответов на вопросы №23 и 24 равен "да"?  :нет:нет:   :
29:Какой-нибудь из ответов на вопросы №25 и 28 равен "да"?  :нет:нет:   :
30:Ответы на оба вопроса №26 и 27 равны "да"?               :н/и:нет:   :
31:Какой-нибудь из ответов на вопросы №29 и 30 равен "да"?  :н/и:нет:   :
32: Я обязан подавать декларацию о доходах за 2000 г.?(=№31):н/и:нет:   :

Вот я выполняю этот алгоритм: отвечаю по порядку на вопросы и вношу значения
("да", "нет", "н/и" ("неизвестно")) в поле №3. (Тут я советую не читать
дальше, пока не внесете в 5-е поле, - на распечатке или в файле, - значения
для себя. Это улучшит понимание.) В результате оказывается, что ответа на
искомый вопрос я не получил: значение для записи №32 равно "неизвестно".
Пройдя в обратную сторону, я обнаруживаю, что это вызвано значением
"неизвестно" в записи №27. (То, что я не стал сразу выяснять, сколько я
заработал за 2000 г., а внес значение "неизвестно" и пошел дальше,
объясняется тем, что в таких логических вычислениях есть вероятность, что
неизвестные значения находить и не понадобится. В арифметике этому есть тот
эквивалент, что из если из двух множителей один оказался равным нулю, то
значение второго уже не важно.) Ничего не поделаешь, приходится браться за
рассчеты. Вычисляю сумму своего налогооблагаемого дохода. Иду по алгоритму
второй раз. Теперь в запись №27 вношу значение "нет". На этот раз в
результате все определено: подавать налоговую декларацию за 2000 г. мне не
нужно.

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

Более методически широко алгоритмы распознавания освещены в ЛАВ и, отчасти,
в ШОА и ШМЧ. Вероятно, эти алгоритмы можно также описать цветной сетью Петри
(ТСМ:95-97): при трех красках: "да", "нет" и "неизвестно".

Но надо сказать, что этот тип алгоритмов лично у меня довольно редок: всего
пять штук, - против, наверно, полутора сотен алгоритмов преобразования. Из
этих четырех: три - разбирательство с налоговым законодательством, один -
определение по некоторому набору признаков, заданных в базе данных по
цифровым картам, какие из этих карт требуют правки, один - применение
вепольных стандартов в ТРИЗе.


http://subscribe.ru/
E-mail: ask@subscribe.ru

В избранное