Книга: Вычислительное мышление: Метод решения сложных задач
Назад: Две системы
Дальше: Как же это работает?

Двоичные перфокарты

Какое отношения это имеет к нашим перфокартам? На них мы можем записывать числа в двоичной системе, используя отверстия для 0 и вырезы для 1. Чтобы записать на перфокарту число 5, начиная слева, нам нужно отверстие (0), еще отверстие (0), потом вырез (1), снова отверстие (0) и, наконец, вырез (1). Для числа 16 (10000) нам нужен один вырез и 4 отверстия. Если у нас есть место для пяти отверстий, мы можем записать на карту любое число до 31. Имея достаточно места (то есть достаточно степеней двойки и, соответственно, разрядов), мы можем записать любое число. Описанные примеры перфокарт приведены на рис. 11а и 11b.
Как только мы записали на карту число в двоичном коде в виде отверстий и вырезов, можно с легкостью найти любую карту. И здесь наступает черед метода «шиворот-навыворот».

 

 

Возьмите стопку карт и убедитесь, что они сложены срезанными уголками друг к другу, а отверстия выровнены в одну линию. Теперь вставьте карандаш в крайнее правое отверстие (колонку единиц) и стряхните все карты, у которых в этом месте вырез (как мы помним, это нечетные числа). У вас останутся только карты с 0. Теперь вернитесь к числу, которое вы хотите найти. Если в его двоичном коде в конце стоит 0, то сбросьте нижнюю стопку — те карты, которые вы стряхнули. Если в целевом числе там стоит 1, то оставьте нижнюю стопку. Повторите то же самое для каждого отверстия по очереди.
Например, мы ищем карту с номером 16. В двоичной системе это 10000. При движении слева направо выходит:

 

ВЫРЕЗ 1: 0 — СБРОСЬТЕ упавшие карты.
ВЫРЕЗ 2: 0 — СБРОСЬТЕ упавшие карты.
ВЫРЕЗ 4: 0 — СБРОСЬТЕ упавшие карты.
ВЫРЕЗ 8: 0 — СБРОСЬТЕ упавшие карты.
ВЫРЕЗ 16: 1 — ОСТАВЬТЕ упавшие карты.

 

Многократно сбрасывайте нижнюю стопку, пока, в пятом раунде, ее не нужно будет оставить. У вас останется карта с номером 16. Таким образом, прорабатывая двоичный код, можно найти любую карту. Попробуйте найти карту 5. В двоичной системе это 00101. При движении справа налево получаем:

 

ВЫРЕЗ 1: 1 — ОСТАВЬТЕ упавшие карты.
ВЫРЕЗ 2: 0 — СБРОСЬТЕ упавшие карты.
ВЫРЕЗ 4: 1 — ОСТАВЬТЕ упавшие карты.
ВЫРЕЗ 8: 0 — СБРОСЬТЕ упавшие карты.
ВЫРЕЗ 16: 0 — СБРОСЬТЕ упавшие карты.

 

У вас останется карта 5.
Назад: Две системы
Дальше: Как же это работает?