кр гаряев. Чарльз Петцольд - Код_ тайный язык информатики-Манн, Иванов и Фе. Книга принадлежит Контакты владельца Культовая книга талантливого преподавателя стала для многих первым уверенным шагом в программировании
Скачать 6.11 Mb.
|
• — — • • — • • • • — — • — Между словами выдерживается период длительностью примерно два тире (шесть секунд, если тире — три секунды). Вот код фразы «как дела». — • — • — — • — — • • • • — • • • — * Книга написана в 2000 году, и автор отталкивается от реалий того периода. Прим. перев. 16 Код Длительность периодов, в течение которых фонарик остается включен или выключен, не фиксируется. Все периоды отсчитываются относительно длитель- ности точки, а эта длина зависит от того, как быстро удается перещелкивать фо- нарик, насколько быстро отправитель азбуки Морзе успевает вспомнить код для той или иной буквы. Тире у быстрого отправителя может получиться таким же коротким, как точка у неторопливого. Из-за этой небольшой проблемы расшиф- ровка сообщений может усложняться, но после первых двух-трех букв адресат обычно успевает сориентироваться, где точка, а где тире. На первый взгляд, определение кода Морзе — под определением в данном случае я понимаю соответствие различных последовательностей точек и тире буквам алфавита — кажется столь же произвольным, как и раскладка кла- виатуры на пишущей машинке. Если присмотреться, не все так однозначно. Сравнительно простые и краткие коды присваиваются более частотным бук- вам алфавита, например E и T *. Любители игр «Эрудит» и «Поле чудес» могли это сразу приметить. У редких букв (например, Q и Z на латинице, за которые в «Эрудите» присваивается по 10 очков) коды длиннее. Практически каждый хоть немного знает азбуку Морзе. Три точки, три тире, три точки — SOS, международный сигнал бедствия. SOS не аббревиату- ра. Это просто код из азбуки Морзе, который легко запоминается. Во время Второй мировой войны Британская радиовещательная компания предваряла некоторые передачи первыми нотами из Пятой симфонии Бетховена: ТА-ТА- ТА-ТАММММ! Сочиняя эту музыку, Людвиг ван Бетховен еще не мог знать, что именно такая последовательность сигналов (точка-точка-точка-тире) в аз- буке Морзе будет соответствовать букве V, с которой начинается английское слово victory — «победа». Один из недостатков азбуки Морзе в том, что в ней нет капитализации букв. Однако она позволяет передавать не только буквы, но и цифры, которым соответствуют свои последовательности по пять точек и тире. 1 • — — — — 6 — • • • • 2 • • — — — 7 — — • • • 3 • • • — — 8 — — — • • 4 • • • • — 9 — — — — • 5 • • • • • 0 — — — — — Эти коды как минимум чуть более регулярны, чем буквенные. Для боль- шинства знаков препинания используются по пять, шесть или семь точек и тире. * В русском языке (по массивам текстов) это буквы О, Е, А. Прим. науч. ред. Глава 1. Лучшие друзья • • • • • • ' • — — — — • , • — • — • — ( — • — — • — ? • • — — • • ) — • — — • — : — — — • • • = — • • • — ; — • — • — + • — • — • - — • • • • — $ • • • — • • — / — • • — • ¶ • — • — • • " • — • • — • − • • — — • — Кроме того, существуют дополнительные коды для букв с диакритиче- скими знаками из некоторых европейских языков и специальные последова- тельности-сокращения. Одно из таких сокращений — код SOS. Его следует посылать непрерывно, делая между каждой тройкой символов паузу в одну точку. Вы убедитесь, что общаться с другом азбукой Морзе гораздо удобнее, если вооружиться специальным фонариком. Кроме обычного переключателя-пол- зунка, на такой фонарик монтируется кнопочный переключатель, который мы нажимаем и отпускаем, и фонарик зажигается и гаснет. Напрактиковавшись, вы, вероятно, научитесь передавать и принимать по пять-десять слов в мину- ту, что все равно гораздо медленнее, чем речь (при разговоре в минуту укла- дывается около 100 слов *), но вполне неплохо. Когда вы с другом наконец-то выучите азбуку Морзе (а иначе общение при помощи этих сигналов не построить), вы сможете пользоваться таким словарем и в обычной речи. Для максимально быстрого общения произносите точку как «дих» («дит», если это последняя буква в слове), а тире — как «дах». Подобно тому как азбука Морзе позволяет сократить письмо до точек и тире, устный код редуцирует речь всего до двух слогов. В данном случае ключевой элемент — двойка. Два типа бликов, два слога. Два любых феномена, если они разные, в правильных комбинациях подходят для передачи информации. * При речи на английском языке. В русском языке темп речи (скорость произнесения ее элементов) медленнее, поскольку слова на 20–30% длиннее. Прим. науч. ред. 18 Глава 2 Коды и комбинации Азбуку Морзе придумал Сэмюэл Финли Бриз Морзе (1791–1872). Это изобре- тение неотделимо от создания телеграфа, о работе которого нам также предстоит узнать. Азбука Морзе послужила хорошим вводным материалом для знакомства с сущностью кода, а телеграф — такой же удобный пример, иллюстрирующий аппаратное обеспечение компьютера. Многим кажется, что азбуку Морзе проще передавать, чем принимать. Даже если вы не знаете ее на память, можете просто сверяться с таблицей, где буквы для удобства расставлены по алфавиту (с. 14). Принимать азбуку Морзе и переводить ее в обычные слова значитель- но сложнее и дольше, поскольку вы работаете в обратном порядке: выясняе- те, какая буква соответствует конкретной кодовой последовательности точек и тире. Например, если вы получите сигнал «тире-точка-тире-тире», придет- ся заглянуть в таблицу и просмотреть почти все буквы одну за другой, пока не выяснится, что перед вами Ы. Проблема в том, что у нас есть таблица для следующего перевода: буква алфавита → последовательность азбуки Морзе, состоящая из точек и тире. Однако нет обратной таблицы: последовательность азбуки Морзе, состоящая из точек и тире, → буква алфавита. В начале изучения азбуки Морзе такая таблица, безусловно, пригодилась бы. Правда, не вполне понятно, как ее составить. Точки и тире не допускают никакого подобия алфавитного порядка. Давайте забудем об алфавите. Пожалуй, разумнее сгруппировать коды та- ким образом, чтобы их расстановка зависела от количества точек и тире в той Глава 2. Коды и комбинации 19 или иной букве. Так, последовательность из азбуки Морзе, содержащая одну точку и одно тире, может означать всего одну из двух букв: Е или Т. E • Е • T — Т — Комбинации, в которых содержится по два знака (либо точки, либо тире), дают нам уже четыре буквы: И, А, Н и М. I • • И • • A • — А • — N — • Н — • M — — М — — Паттерн из трех символов, точек или тире, дает нам восемь букв: С, Д, У, К, Р, Г, О, В. S • • • D — • • С • • • Д — • • U • • — K — • — У • • — K — • — R • — • G — — • Р • — • Г — — • W • — — O — — — В • — — O — — — Наконец (если мы хотим прекратить это упражнение, пока не перешли к цифрам и знакам препинания), четырехзначные последовательности точек и тире дают нам еще 16 символов. H • • • • B — • • • Х • • • • Б — • • • V • • • — X — • • — Ж • • • — Ь — • • — F • • — • C — • — • Ф • • — • Ц — • — • Ü • • — — Y — • — — Ю • • — — Ы — • — — L • — • • Z — — • • Л • — • • З — — • • Ä • — • — Q — — • — Я • — • — Щ — — • — P • — — • O — — — • П • — — • Ч — — — • J • — — — Ş — — — — Й • — — — Ш — — — — Всего в этих таблицах содержится 2 + 4 + 8 + 16 кодов суммарно для 30 букв; это на четыре кода больше, чем требуется для полной латиницы, со- стоящей из 26 букв. Именно поэтому четыре кода в последней таблице отве- дены под буквы с диакритическими знаками. 20 Код Эти четыре таблицы помогут с легкостью переводить любые сообщения, передаваемые азбукой Морзе. Получив код конкретной буквы, вы считаете, сколько в нем точек и тире, и решаете, с какой из таблиц сверяться. Каждая таблица устроена так, что код, состоящий из одних точек, располагается в верх- нем левом углу, а код из одних тире — в нижнем правом углу. Замечаете закономерность в размерах четырех таблиц? Обратите внима- ние: в каждой следующей таблице вдвое больше кодов, чем в предыдущей. Это логично: в последующей таблице содержатся все коды из предыдущей «плюс точка», а также все коды из предыдущей «плюс тире». Эту тенденцию можно резюмировать следующим образом. Количество точек и тире 1 2 3 4 Количество кодов 2 4 8 16 Каждая из четырех таблиц содержит вдвое больше кодов, чем предше- ствующая ей таблица, так что если в первой таблице 2 кода, то во второй — 2 × 2 кодов, в третьей — 2 × 2 × 2 кодов. Вот как еще можно это представить. Количество точек и тире 1 2 3 4 Количество кодов 2 2 × 2 2 × 2 × 2 2 × 2 × 2 × 2 Разумеется, при умножении числа самого на себя можно использовать степени. Так, 2 × 2 × 2 × 2 можно записать как 2 4 (2 в четвертой степени). Чис- ла 2, 4, 8 и 16 являются степенями двойки, поскольку представляют произведе- ния, которые можно получить умножением двойки самой на себя. Итак, нашу таблицу можно переписать и так. Количество точек и тире 1 2 3 4 Количество кодов 2 1 2 2 2 3 2 4 Таблица сильно упростилась. Количество кодов равно просто 2 в степени <количество точек и тире>. Можно резюмировать табличные данные в виде простой формулы: Количество кодов = 2 количество точек и тире Степени двойки часто используются в различных кодах (другой пример рассмотрим в следующей главе). Глава 2. Коды и комбинации 21 Чтобы еще сильнее упростить расшифровку кода Морзе, давайте попро- буем построить большую древовидную схему на следующей странице. На схеме показано, какие буквы получаются при постепенном усложне- нии последовательностей точек и тире. Чтобы расшифровать конкретную по- следовательность, идите по стрелкам слева направо. Допустим, мы хотим вы- яснить, какая буква соответствует коду «точка-тире-точка». Начинаем слева, берем точку; далее идем по стрелкам, выбираем тире, а затем еще одну точку. Получаем букву R, расположенную около последней точки. Такая схема необходима прежде всего для того, чтобы определить код Морзе. Во-первых, она страхует от тупой ошибки: не дает присвоить двум разным буквам один и тот же код. Во-вторых, вы гарантированно задействуете все возможные коды, не выстраивая чрезмерно длинных последовательностей из точек и тире. Рискуя получить схему, которая не поместится на печатной странице, мы могли бы расширить ее и добавить туда пятизначные коды из точек и тире. По- следовательность из пяти точек и тире даст нам 32 (2 × 2 × 2 × 2 × 2, или 2 5 ) дополнительных кода. Как правило, этого достаточно не только для букв, но и для 10 цифр и 18 знаков препинания, включаемых в азбуку Морзе: циф ры действительно кодируются пятизначными последовательностями точек и тире. Правда, многие другие пятизначные коды зарезервированы не за знаками пре- пинания, а за буквами с диакритическими знаками. Чтобы система учитывала все знаки препинания, в нее нужно вклю- чить последовательности из шести точек и тире. Таким образом получим Код 64 (2 × 2 × 2 × 2 × 2 × 2, или 2 6 ) дополнительных кода для суммарного множества из 2 + 4 + 8 + 16 + 32 + 64, или 126, символов. Для азбуки Морзе этого слишком много, поэтому большинство таких длинных кодов остаются неопределенными. Слово «неопределенный» в данном контексте указывает на код, который ничего не означает. Если бы вы, принимая азбуку Морзе, получили неопределенный код, то могли бы почти не сомневаться, что кто-то просто допустил ошибку. У нас хватило смекалки построить эту небольшую формулу: Количество кодов = 2 количество точек и тире Так давайте продолжим нашу таблицу и посмотрим, сколько кодов полу- чится из более длинных последовательностей точек и тире. Количество точек и тире Количество кодов 1 2 1 = 2 2 2 2 = 4 3 2 3 = 8 4 2 4 = 16 5 2 5 = 32 6 2 6 = 64 7 2 7 = 128 8 2 8 = 256 9 2 9 = 512 10 2 10 = 1024 К счастью, нет необходимости выписывать все возможные коды, чтобы определить, сколько их будет. Достаточно умножать двойку на себя нужное количество раз. Код Морзе называется двоичным (что буквально означает «два на два»), поскольку любой его элемент включает только два компонента: точку и тире. Такой код подобен монете, которая может упасть только решкой или орлом. Двоичные объекты (например, монеты) и двоичные коды (например, азбука Морзе) всегда можно описать в виде степеней двойки. Проделанный нами анализ двоичных кодов — это простое упражнение в одной математической дисциплине, которая называется комбинаторикой, или комбинаторным анализом. Традиционно комбинаторный анализ особенно активно используется в теории вероятностей и статистике, поскольку связан с выявлением количества вариантов комбинаций различных объектов (напри- мер, монет или игральных костей). Он также помогает понять, как составля- ются и разбираются коды. 23 Глава 3 Брайль и двоичные коды Сэмюэл Морзе не был первым, кому успешно удалось транслировать буквы письменного языка в интерпретируемый код. Он не был первым и среди тех, чья фамилия запомнилась как название кода, а не имя собственное. Такая честь выпала слепому французскому подростку, родившемуся примерно через 18 лет после Морзе, но оставившему след в истории гораздо раньше. О жизни Луи Брайля известно немногое, но это захватывающая история. Луи Брайль родился в 1809 году во французском городке Кувре, в 40 ки- лометрах к востоку от Парижа. Отец мальчика был шорником. Будучи трех лет от роду (а в таком возрасте дети не должны играть в отцовской мастерской), Луи случайно ткнул себе в глаз шорным ножом. В ране начался процесс зара- жения, инфекция распространилась и на второй глаз, и мальчик полностью ослеп. Наверняка его ждала жизнь в невежестве и бедности (как и большин- ство слепцов в те времена), но Луи проявил незаурядный ум и тягу к знани- ям. Благодаря участию деревенского пастора и школьного учителя Луи ходил в сельскую школу вместе с другими ребятами, а в возрасте десяти лет отпра- вился в Парижский государственный институт для слепых детей. Разумеется, одна из главных сложностей при обучении незрячих в том, что они не могут читать печатные книги. Основатель этой парижской шко- лы Валентин Гаюи (1745–1822) изобрел систему тисненых выпуклых букв для чтения их на ощупь. Но пользоваться системой было сложно, и вышло только несколько книг, напечатанных таким методом. Гаюи не смог посмотреть глуб- же. Для него буква А оставалась буквой А. Она должна была выглядеть (ощу- щаться) как А. (Общаясь на языке световых сигналов, мы пробовали рисовать буквы в воздухе и убедились, что такой прием неработоспособен.) Вероятно, Гаюи не догадался, что некий код, сильно отличающийся от печатного алфа- вита, оказался бы для незрячих удобнее. Прообраз такого альтернативного кода возник в достаточно необычном контексте. Шарль Барбье, капитан французской армии, изобрел систему запи- си под названием écriture nocturne, или «ночная азбука». В ней использовались 24 Код узоры выпуклых точек и тире на плотной бумаге. Предполагалось, что солда- ты могли бы обмениваться в темноте такими записками, когда требовалось соблюдать тишину. Писать точки и тире можно было специальным стилусом, вроде шила. Затем выпуклые точки можно было читать на ощупь. Недостаток системы Барбье заключался в ее чрезмерной сложности. Комбинации точек и тире соответствовали звукам, а не буквам алфавита, поэтому одно слово час- то могло шифроваться разными кодами. Система хорошо работала для обме- на короткими сообщениями в полевых условиях, но решительно не подходила для сравнительно крупных текстов, тем более книг. Луи Брайль познакомился с системой Барбье в двенадцатилетнем возрас- те. Ему понравились выпуклые точки не только потому, что они легко читались на ощупь, но и потому, что их было просто писать. Ученик в классе, воору- жившись бумагой и стилусом, в самом деле мог записывать и читать такие со- общения. Луи Брайль постарался усовершенствовать эту систему, и через три года (когда ему было пятнадцать) в общих чертах составил собственную, осно- вы которой применяются и сегодня. Много лет такая система использовалась лишь в школах, но постепенно вошла в широкое употребление. В 1835 году Брайль подхватил туберкулез, от которого и умер в 1852 году, в возрасте 43 лет. Сегодня усовершенствованные варианты системы Брайля соперничают с аудиокнигами, обеспечивая незрячим доступ к письменной информации. Тем не менее шрифт Брайля по-прежнему незаменим и является единственной пись- менностью, доступной слепоглухим. Шрифт Брайля применяется даже в обще- ственных местах, например в лифтах и банкоматах. В этой главе мы препарируем код Брайля и разберемся, как он работает. Мы не будем учить код Брайля или что-то запоминать. Мы лишь попробуем на этом примере лучше понять его природу. В шрифте Брайля каждый символ, присутствующий в обычном письмен- ном языке, то есть буквы, цифры и знаки препинания, кодируется в виде од- ной или нескольких точек в клетке размером две на три точки. Как правило, точки в клетке нумеруются от 1 до 6. 1 2 3 4 5 6 В настоящее время существуют специальные пишущие машинки — брай- левские принтеры, выбивающие точки брайлевского шрифта на бумаге. Поскольку книга получилась бы запредельно дорогой, если бы хоть пару страниц набрали шрифтом Брайля, я пользовался нотацией, традиционно приме- няемой для передачи азбуки Брайля при печати. В такой нотации отображаются Глава 3. Брайль и двоичные коды 25 все шесть точек в клетке. Жирные точки — это выпуклости на бумаге, мел- кие — плоские элементы клетки. Например, в следующем брайлевском сим- воле точки 1, 3 и 5 выпуклые, а 2, 4 и 6 — нет. На данный момент нас должно заинтересовать, что эти точки |