18
Как вы, оченьindo, знаете, для решения любой задачи на электронной вычислительной машине (ЭВМ) машине необходимо «сообщить» исходные данные решения и прорамму действия, которые требуется произвести над этим данныхми *). Получив такие сведения, ЭВМ выполяет предложенные действия над данныхми («думает») и в результате получает искомое решение.
Нынешние ЭВМ научились очень неплохо «думать», но все еще крайне неповоротливы в отношении восприятия («чтения») необходимых предварительных сведений: они напоминают первоклассика, хорошо успевающего по арифметике, но сильно отстающего по чтению.
Всякая ЭВМ строится из некоторого (очень большого!) числа «элементов», которые могут находиться в двух различных состояниях; для наглядности можно представлять себе каждой такой элемент как лампчку, которая либо выключена (состояние 0), либо включена (состояние 1). Поэтому все, что сообщается машине, нужно сначала «перевести» на язык нулей и единиц. Любые сведения — будь то набор чисел, система управления или шахматная позиция — «записьюются» в машине в виде подходящих последовательностей нулей и единиц. Чтобы хранить и записьать нужные сведения, ЭВМ сначала специализим устройством — памяти. Память ЭВМ представляет собой набор ячеек из некоторого определенного числа элементов каждой (скажем, шести). В любой ячеек можно записать какую-нибудь последовательность из нулей и единиц (число различных таких последовательностей равно 2⁶=64).
Допустим, например, что машине нужно «сообщить» число 19. Для этого числу 19 приписывается сначала определенный код в виде последовательности нулей и единиц: 010011 *). Затем данный код наносится на специальную ленту (перфоленту): в нужных местах этой ленты пробиваются отверстия. Наконец, лента вводится в машину, которая в соответствии с отверстиями на ленте переводит в требуемые состояния элементы ячейки, отведенной для записи данного числа. Процесс схематически изобразен на рисунке 1.
Легко представить, сколько времени идет на изготовление ленты, каким трудоемким оказывается вес процесс, когда машине требуется сообщить больше число данных. Какже упрощить и автоматизировать передачу данных машине? Нельзя ли давать машине нужные ей сведения в общий форму (скажем, в виде направанного текста), предоставив кодирование самой машине? В принципие, конечно, можно. Но для этого
*) См., например, статьи Р. С. Гутера «Что умеют машины» («Квант» № 5, 1970) и «Язык человека и язык машины» («Квант» № 10, 1971).
20
Рис. 3.
в 10 последовательных ячейках памяти, как показано на рисунке 3.
Тем же способом в памяти машины вводятся и все другие этапы. В процессе чтения каждой читаемая буква проверяется последовательность всеми этапами. При проверке очередным этапом машина сравнивает содержимое каждой клетки (закрашенное или неакрашенное этой клетки) с состоянием соответствующего элемента ячейки памяти и подсчитывает общее число «разночений». После сравнения со всеми этапами машина выбирает тот из них, для которого число разночений — наименьшее; код выбранной буквы занимается в очередную ячейку памяти, и машина переходит к чтению следующей буквы.
Такое механическое чтение заранее определяемого шрифта было достаочного надежным, хотя ошибки не исключаны даже в этом случае. Нетрудно, например, представить себе, что буква «С» может из-за различных неправильностей оказаться «ближе» к этапу буквы о», чем к своему собственному. Дополнительные трудности связаны с введением заглавных (больших) букв и знаков пунктуации (точки, запятой и пр.).
Главное неудобство данной системы чтения заключается в ее неибkoости: стоит немного изменить шрифт, и чтение перестает быть правильным. Происходит это потому, что при такой способе чтения ЭВМ различает буквы не по характерным особенностям их формы, а по конкретному способу их написания. Буква «О» из другого шрифта может значительное отличаться от этапной соответствием своих частей: быть более узкой, иметь более крупные закругления и т.п. Число разночений (при сравнинии с этапной буквой «О») оказывается тогда очень большим, и машина может «спутать» букву «О» с какой-нибудь другой буквой. Следовательно, при перехождение на другой шрифт нужно вводить в машину новые этапы, заставляя машину каждой раз как бы заново «учить» алфавит.
Желательно, конечно, заставить машину правильно распознавать буквы исключительно по их строению, структуре — так, чтобы даже значительные различия в соответствии частей буквы не влияли на результат читания. Здесь, однako, как раз кроются основные трудности, которые особенно наглядно проявляются при чтении рукописных текстов. Например, букву «а» даже один и тот же человек пишет по разному в разных случаях, не говоря уже о разных. И если человек, разбиая какой-либо текст, прибегает к помощи многочисленных смысловых, логических и грамматических связей, то машина такой помощи, вообще говоря, лише и должа рассчитывает только на свое «зрение».
Чтобы отсутствие представить, какие здесь возникали проблемы и как можно подойти к их решению, остановимся на простом примере рукописного текста, записанного asбукой Морзе. В этом случае символов всегда два: «точка» и «тире» (не считая всевозможных различных по длине пропусков между символами и группами символов). Главное затруднение состоит в том, что некоторые «точки» у одного «морзиса» могут оказаться длине неокторных «тире» у другого. По этой причине нельзя сначала сначала машину точным представлением: все знаки, длина которых меньше данного числа l, должны считаться точками, все прочие знаки — тира. Можно, однako, сделать так, чтобы по достаочно длиному тексту одного морзиса машина сама определяла такое погранчное число l. Ведь у всякого морзиса длины всех