— Понял, сэр.
Дороти посмотрела на часы на стене, стрелки показывают десять тридцать.
— Агент Митчелл, если хотите начать, могу объяснить как работает перфоратор. Базовые принципы кодирования данных. — Улыбнулась. — У меня есть час до следующей партии зарплатных расчетов.
Я посмотрел на Финча.
— Сэр, можно я останусь, изучу оборудование?
Финч пожал плечами.
— Делайте что хотите. Я вернусь в офис. У меня хватает обычной работы. — Повернулся к двери, затем обернулся. — Митчелл, приходите ко мне после обеда. Обсудим план действий. Если он у вас есть.
— Есть, сэр. Приду в два часа.
Финч кивнул, вышел из компьютерного центра. Дверь закрылась за ним с глухим звуком.
Я остался с Дороти в прохладном гудящем помещении рядом с машиной стоимостью семьсот пятьдесят тысяч долларов.
Дороти улыбнулась.
— Ну что, агент Митчелл. Готовы начать революцию в ФБР?
Я посмотрел на компьютер, на мигающие лампочки, на вращающиеся катушки магнитных лент.
— Давайте попробуем.
Глава 17
Данные
Дороти подошла к перфоратору, села на стул перед клавиатурой. Похлопала рукой по соседнему стулу.
— Садитесь, Итан. Покажу основы.
Сел рядом. Дороти достала пустую перфокарту из стопки, вставила в щель перфоратора.
— На карте восемьдесят колонок. Каждая колонка один символ. Цифра, буква или специальный знак. — Указала на клавиатуру. — Печатаете как на обычной машинке, но перфоратор пробивает комбинацию дырок вместо печати букв.
Нажала несколько клавиш. Машина щелкнула, металлические стержни пробили дырки в карте. Вытащила и показала мне.
— Вот я набрала «УБИЙСТВО». Видите дырки в первых колонках?
Посмотрел внимательно. Действительно, в каждой из колонок пробита уникальная комбинация дырок.
— Каждая буква имеет свой код из дырок. Компьютер считывает код, преобразует обратно в букву. — Дороти положила карту на стол. — Но для базы данных преступлений вам нужны не слова, а коды. Числовые.
Кивнул.
— Понимаю. Каждый тип преступления получает номер. Убийство — один, ограбление — два, изнасилование три.
— Правильно. — Дороти вставила новую пустую карту. — Давайте попробуем закодировать одно дело как пример.
Я подумал и вспомнил дело Лизы Кэмпбелл, раскрытое вчера.
— Убийство. Жертва женщина, двадцать восемь лет, белая. Место округ Колумбия. Метод удушение веревкой.
Дороти взяла блокнот и карандаш, начала записывать.
— Хорошо. Нужна система кодирования. Первые десять колонок номер дела. Следующие колонки обозначают параметры. — она быстро писала. — Тип преступления убийство равно ноль один. Пол жертвы женщина равно ноль два. Возраст двадцать восемь. Раса белая равно ноль один. Штат округ Колумбия равно…
Остановилась и посмотрела на меня.
— Видите? Вам нужно создать полную кодовую книгу. Все штаты, все типы преступлений, все методы, все возрастные группы. Это займет достаточно много времени.
— Сколько?
— Несколько дней чтобы разработать систему. Потом проверить на примерах, убедиться что коды работают правильно.
Я задумался. В двадцать первом веке базы данных использовали SQL, реляционные таблицы, гибкие поисковые запросы. Здесь примитивные перфокарты с восемьюдесятью колонками. Но принцип тот же, надо структурировать данные для быстрого поиска.
— Дороти, а можно закодировать несколько уровней детализации?
— Что вы имеете в виду?
— Например, убийство это общая категория. Но есть подкатегории. Огнестрельное убийство, удушение, ножевое ранение, отравление. Каждая подкатегория дает дополнительную информацию для связи дел.
Дороти медленно кивнула.
— Да, можно. Просто выделите больше колонок для деталей. Допустим, колонки с одиннадцатой по двадцатую обозначают тип преступления и метод. Колонки с двадцать первой по тридцатую — информация о жертве. И так далее.
— А можно закодировать географические координаты?
Дороти подняла бровь.
— Координаты? Зачем?
Я вспомнил географическое профилирование из двадцать первого века. Картирование мест преступлений, поиск центральной точки активности преступника.
— Если закодировать широту и долготу места преступления, компьютер может искать дела в определенном радиусе. Преступники обычно действуют в ограниченной географической зоне. Например, серийный убийца редко путешествует больше ста миль от дома.
Дороти записала в блокнот.
— Интересная идея. Широта и долгота это два числа, каждое состоит из нескольких цифр. Займет колонок пятнадцать-двадцать на карте. — Посмотрела на меня. — Но у вас только восемьдесят колонок. Нужно экономить место.
— Можно округлить координаты. Не нужна точность до секунды дуги. Достаточно градуса и минуты.
— Тогда десять колонок хватит. — Дороти продолжала писать. — Что еще?
Я подумал о профилировании преступников. В двадцать первом веке ФБР использовало базу VICAP (Violent Criminal Apprehension Program) Программа выявления и задержания опасных преступников. Там кодировали не только факты о преступлении, но и поведенческие характеристики.
— Нужно закодировать поведение преступника на месте преступления. Организованный или дезорганизованный тип. Планирование или спонтанность. Наличие сексуального мотива. Посмертные действия с телом. Трофеи, взятые с места преступления.
Дороти остановилась, удивленно посмотрела на меня.
— Это уже психология, а не статистика.
— Психология помогает связывать дела. — Я наклонился вперед. — Два убийства могут выглядеть по-разному: разные жертвы, места и оружие. Но если поведение преступника одинаковое, вероятно это сделал один человек. И мы увидим это.
Дороти медленно кивнула.
— Логично. Но как закодировать поведение? Это ведь не число.
— Можно использовать бинарные коды. Да или нет, один или ноль. Планирование: да равно один, нет равно нулю. Сексуальный мотив: да равно один, нет равно нулю. Трофеи: да равно один, нет тоже равно нулю.
— Это займет еще десять-пятнадцать колонок.
Я посчитал в уме. Номер дела занимает десять колонок. Тип преступления и метод тоже. На жертву пятнадцать колонок. География — десять колонок. Дата — восемь колонок. Поведение преступника — пятнадцать колонок. Итого шестьдесят восемь колонок из восьмидесяти.
— Почему, у нас вполне хватит места. Остается еще двенадцать колонок для дополнительных данных.
Дороти продолжала писать в блокноте. Заполнила страницу, перевернула и начала новую.
— Агент Митчелл, вы думали об этом ранее?
— Немного. — конечно же я солгал. На самом деле я знал принципы баз данных из двадцать первого века. Просто адаптировал их к технологиям тысяча девятьсот семьдесят второго года.
Дороти закончила писать и положила карандаш.
— Хорошо. У нас есть структура данных. Теперь нужно написать программу для сортировки и поиска.
— Вы умеете программировать?
— Да. Язык программирования COBOL и Fortran. COBOL используем для бизнес-приложений, Fortran для научных расчетов. — Пауза. — Для вашей задачи подойдет COBOL. Он работает с текстовыми данными и файлами.
— Сколько времени займет написание программы?
Дороти задумалась.
— Программа для ввода данных будет готова за неделю. Программа для поиска по одному параметру еще неделя. Программа для поиска по нескольким параметрам займет две-три недели. Еще неделя на тестирование. — Посчитала пальцами. — Всего шесть-семь недель.
Семь недель из двенадцати, отведенных на пилотный проект. Плюс три месяца на пробивку перфокарт для всех пятидесяти тысяч существующих дел. Мы не уложимся в срок.
— Дороти, а если не вводить все пятьдесят тысяч дел сразу? Начать с выборки?
— Какой выборки?
— Нераскрытые убийства за последние три года. Сколько их примерно?
Дороти встала, подошла к столу у стены и взяла папку с статистикой. Пролистала страницы.
— Нераскрытые убийства с января семидесятого по июнь семьдесят второго… — Водила пальцем по колонкам цифр. — Примерно тысяча двести дел по всей стране.