- •Предисловие
- •Введение
- •1Архитектура эвм
- •1.1 Биты и их хранение
- •1.1.1Вентили и триггеры
- •1.1.2Другие способы хранения битов
- •1.1.3Шестнадцатеричная система счисления
- •1.2 Оперативная память
- •1.2.1Структура памяти
- •1.2.2Измерение емкости памяти
- •1.3 Устройства хранения данных
- •1.3.1Магнитные диски
- •1.3.2Компакт-диски
- •1.3.3Магнитные ленты
- •1.3.4Хранение и поиск файлов
- •1.4 Представление информации в виде двоичного кода
- •1.4.1Представление текста
- •1.4.2Американский национальный институт стандартов
- •1.4.3Iso - международная организация по стандартизации
- •1.4.4Представление числовых значений
- •1.4.5Представление изображений
- •1.4.6Представление звука
- •1.5 Двоичная система счисления
- •1.5.1Альтернатива двоичной системе счисления
- •1.5.2Дроби в двоичной системе счисления
- •1.5.3Аналоговые и цифровые устройства
- •1.6 Хранение целых чисел
- •1.6.1Представление в двоичном дополнительном коде
- •1.6.2Сложение в двоичном дополнительном коде
- •1.6.3Проблема переполнения
- •1.6.4Представление с избытком
- •1.7 Хранение дробей
- •1.7.1Представление с плавающей точкой
- •1.7.2Ошибка усечения
- •1.8 Сжатие данных
- •1.8.1Общие методы сжатия данных
- •1.8.2Сжатие звука
- •1.8.3Сжатие изображений
- •1.9 Ошибки передачи данных
- •1.9.1Контрольный разряд четности
- •1.9.2Коды с исправлением ошибок
- •2Манипулирование данными
- •2.1 Архитектура эвм
- •2.1.1Сложение двух чисел, хранящихся в оперативной памяти
- •2.1.2Кто и что изобрел?
- •2.2 Машинный язык
- •2.2.1Система команд
- •2.2.2Кэш-память
- •2.2.3Арифметико-логические команды
- •2.2.4Команды управления
- •2.2.5Деление двух значений, хранящихся в памяти
- •2.3 Выполнение программы
- •2.3.1Пример выполнения программы
- •2.3.2Команды переменной длины
- •2.3.3Программы и данные
- •2.4 Арифметические и логические операции
- •2.4.1Логические операции
- •2.4.2Сравнение вычислительной мощности эвм
- •2.4.3Операции сдвига
- •2.4.4Арифметические операции
- •2.5 Связь с другими устройствами
- •2.5.1Связь через контроллер
- •2.5.2Строение шины
- •2.5.3Скорость передачи данных
- •2.6 Другие архитектуры
- •2.6.1Конвейерная обработка
- •3Операционные системы и организация сетей
- •3.13.1. Эволюция операционных систем
- •3.1.1Однопроцессорные системы
- •3.1.2Многопроцессорные системы
- •3.2 Архитектура операционной системы
- •3.2.1Программное обеспечение
- •3.2.2Полезное единообразие или вредная монополия?
- •3.2.3Компоненты операционной системы
- •3.2.4Операционная система linux
- •3.2.5Начало работы операционной системы
- •3.3 Координирование действий машины
- •3.3.1Понятие процесса
- •3.3.2Управление процессами
- •3.3.3Модель «клиент-сервер»
- •3.4 Обработка конкуренции между процессами
- •3.4.1Семафор
- •3.4.2Взаимная блокировка
- •3.5 Сети
- •3.5.1Основы организации сетей
- •3.5.2Интернет
- •3.5.3Топология сети Интернет
- •3.5.4Система адресов Интернета
- •3.5.5Электронная почта
- •3.5.6Всемирная паутина
- •3.6 Сетевые протоколы
- •3.6.1Управление правом отправки сообщений
- •3.6.2Сеть ethernet
- •3.6.3Javascript, апплеты, cgi и сервлеты
- •3.6.4Многоуровневый принцип программного обеспечения Интернета
- •3.6.5Комплект протоколов tcp/ip
- •3.6.6Протоколы рорз и imap
- •3.7 Безопасность
- •3.7.1Протокол защищенных сокетов
- •3.7.2Группа компьютерной «скорой помощи»
- •4Алгоритмы
- •4.1 Понятие алгоритма
- •4.1.1Предварительные замечания
- •4.1.2Формальное определение алгоритма
- •4.1.3Определение алгоритма
- •4.1.4Абстрактная природа алгоритма
- •4.2 Представление алгоритма
- •4.2.1Примитивы
- •4.2.2Псевдокод
- •4.3 Создание алгоритма
- •4.3.1Искусство решения задач
- •4.3.2Итеративные структуры в музыке
- •4.3.3Первый шаг в решении задачи
- •4.4 Итеративные структуры
- •4.4.1Алгоритм последовательного поиска
- •4.4.2Управление циклом
- •4.4.3Алгоритм сортировки методом вставок
- •4.5Рекурсивные структуры
- •4.5.1Поиск и сортировка
- •4.5.2Алгоритм двоичного поиска
- •4.5.3Управление рекурсивными структурами
- •4.6 Эффективность и правильность
- •4.6.1Эффективность алгоритма
- •4.6.2Проверка правильности программного обеспечения
- •4.6.3По ту сторону проверки правильности программ
- •5Языки программирования
- •5.1 Исторический обзор
- •5.1.1Ранние поколения
- •5.1.2Интерплатформенное программное обеспечение
- •5.1.3Независимость от машины
- •5.1.4Парадигмы программирования
- •5.2 Основные понятия традиционного программирования
- •5.2.1Культуры языков программирования
- •5.2.2Переменные и типы данных
- •5.2.3Структуры данных
- •5.2.4Константы и литералы
- •5.2.5Операторы присваивания
- •5.2.6Управляющие операторы
- •5.2.7Комментарии
- •5.3 Процедурные единицы
- •5.3.1Процедуры
- •5.3.2Событийно-управляемые программные системы
- •5.3.3Параметры
- •5.3.4Функции
- •5.3.5Операторы ввода-вывода
- •5.4 Реализация языка программирования
- •5.4.1Процесс трансляции программы
- •5.4.2Реализация java
- •5.4.3Компоновка и загрузка
- •5.4.4Пакеты разработки программного обеспечения
- •5.5 Объектно-ориентированное программирование
- •5.5.1Классы и объекты
- •5.5.3Конструкторы
- •5.5.4Дополнительные возможности
- •5.6 Параллельные операции
- •5.7 Декларативное программирование
- •5.7.1Логическая дедукция
- •5.7.2Язык программирования Prolog
- •6Разработка программного обеспечения
- •6.1 Разработка программного обеспечения
- •6.1.1Ассоциация по вычислительной технике
- •6.1.2Институт инженеров по электротехнике и электронике
- •6.2 Жизненный цикл программы
- •6.2.1Цикл как единое целое
- •6.2.2Разработка программного обеспечения на практике
- •6.2.3Этапы разработки программного обеспечения
- •6.2.4Анализ
- •6.2.5Проектирование
- •6.2.6Реализация
- •6.2.7Тестирование
- •6.2.8Современные тенденции
- •6.3 Модульность
- •6.3.1Модульная реализация программы
- •6.3.2Связь модулей системы
- •6.3.3Связность модуля
- •6.4 Методики проектирования
- •6.4.1Нисходящее и восходящее проектирование
- •6.4.2Модели проектирования
- •6.4.3Разработка открытых программных продуктов
- •6.5 Инструменты проектирования
- •6.6 Тестирование
- •6.7 Документация
- •6.8 Право собственности на программное обеспечение и ответственность
- •Часть 3 организация данных
- •7Структуры данных
- •7.1 Основы структур данных
- •7.1.1Опять абстракция
- •7.1.2Статические и динамические структуры
- •7.1.3Указатели
- •7.2 Массивы
- •7.3 Списки
- •7.3.1Непрерывные списки
- •7.3.2Реализация непрерывных списков
- •7.3.3Связные списки
- •7.3.4Поддержка абстрактного списка
- •7.4 Стеки
- •7.4.1Откат
- •7.4.2Реализация стека
- •7.5 Очереди
- •7.5.1Проблема указателей
- •7.6 Деревья
- •7.6.1Реализация дерева
- •7.6.2Сбор мусора
- •7.6.3Пакет бинарного дерева
- •7.7 Пользовательские типы данных
- •7.7.1Пользовательские типы
- •7.7.2Классы
- •7.7.3Описательное и процедурное знание
- •7.7.4Стандартная библиотека шаблонов
- •7.8 Указатели в машинном языке
- •8Файловые структуры
- •8.1 Роль операционной системы
- •8.1.1Таблицы размещения файлов
- •8.2 Последовательные файлы
- •8.2.1Обработка последовательных файлов
- •8.2.2Консорциум производителей программного обеспечения для www
- •8.2.3Текстовые файлы
- •8.2.4Текстовые и двоичные файлы
- •8.2.5Вопросы программирования
- •8.2.6Семантическая сеть
- •8.3 Индексация
- •8.3.1Основные положения индексации
- •8.3.2Вопросы программирования
- •8.3.3Расположение файлов на дисках
- •8.4 Хэширование
- •8.4.1Хэш-система
- •8.4.2Проблемы распределения
- •8.4.3Аутентификация посредством хэширования
- •8.4.4Вопросы программирования
- •9Структуры баз данных
- •9.1 Общие вопросы
- •9.2 Многоуровневый подход к реализации базы данных
- •9.2.1Система управления базой данных
- •9.2.2Распределенные базы данных
- •9.2.3Модели баз данных
- •9.3 Реляционная модель баз данных
- •9.3.1Вопросы реляционного проектирования
- •9.3.2Системы баз данных для персональных компьютеров
- •9.3.3Хронологические базы данных
- •9.3.4Реляционные операции
- •9.3.5Вопросы реализации
- •9.3.6Язык sql
- •9.4 Объектно-ориентированные базы данных
- •9.5 Поддержка целостности базы данных
- •9.5.1Пространственные базы данных
- •9.5.2Протоколы фиксации/отката изменений
- •9.5.3Блокировка
- •9.6 Воздействие технологий баз данных на общество
- •10Искусственный интеллект
- •10.1 Интеллект и машины
- •10.1.1Конечный результат или имитация
- •10.1.2Истоки искусственного интеллекта
- •10.1.3Тест Тьюринга
- •10.1.4Машина для решения головоломки из восьми фишек
- •10.2 Распознавание образов
- •10.3 Мышление
- •10.3.1Продукционные системы
- •10.3.2Интеллект, основанный на поведении
- •10.3.3Деревья поиска
- •10.3.4Эвристика
- •10.4 Искусственные нейронные сети
- •10.4.1Основные свойства
- •10.4.2Приложение теории
- •10.4.3Ассоциативная память
- •10.5 Генетические алгоритмы
- •10.6 Прочие области исследования
- •10.6.1Обработка лингвистической информации
- •10.6.2Рекурсия в естественных языках
- •10.6.3Роботы
- •10.6.4Системы баз данных
- •10.6.5Экспертные системы
- •10.7 Обдумывая последствия
- •10.7.1Сильный искусственный интеллект против слабого
- •11Теория вычислений
- •11.1 Функции и их вычисление
- •11.1.1Теория рекурсивных функций
- •11.2 Машины Тьюринга
- •11.2.1Основы машины Тьюринга
- •11.2.2Истоки машины Тьюринга
- •11.2.3Тезис Черча-Тьюринга
- •11.3 Универсальные языки программирования
- •11.3.1Скелетный язык
- •11.3.2Существуют ли инопланетяне?
- •11.3.3Универсальность скелетного языка
- •11.4 Невычислимая функция
- •11.4.1Проблема останова
- •11.4.2Неразрешимость проблемы останова
- •11.5 Сложность задач
- •11.5.1Измерение сложности задачи
- •11.5.2Пространственная сложность
- •11.5.3Полиномиальные и не полиномиальные задачи
- •11.5.5Детерминированность против недетерминированности
- •11.6Шифрование с открытым ключом
- •11.6.1Шифрование при помощи задачи о ранце
- •11.6.2Популярные системы шифрования
- •11.6.3Модульная арифметика
- •11.6.4Обратно к шифрованию
10.6.3Роботы
Большинство ранних исследований в современной робототехнике основывались на коммерческих интересах. Их целью было создание жизнеспособных в конкретных экономических условиях промышленных роботов, способных увеличить производительность и согласованность производства. (Например, ткацкие станки Жаккарда, которые в корне переменили ткацкую промышленность в XIX веке.) Следовательно, над робототехникой как дисциплиной доминировали более традиционные области машиностроения и электротехники. Созданию таких устройств, как точные захваты и гибкие локти, зачастую уделялось больше внимания, или им давался больший приоритет, чем разработке лежащего в основе действий устройства интеллекта.
Эти приоритеты диктовались рынком. На сборочном конвейере машина должна одинаково выполнять одну и ту же задачу снова и снова. Если эта задача состоит в сборе деталей и помещении их в коробку, то детали подаются на транспортерной ленте с равными интервалами и в определенном положении, а полные коробки последовательно заменяются пустыми на одном и том же месте. В этом контексте машина в действительности не поднимает деталь, а просто закрывает захват в определенный момент времени и в определенном месте, а затем перемещает его в другое место, где вместо того, чтобы осознанно положить деталь в коробку, просто открывает захват. Таким образом, полезные роботы могут быть созданы без решения сложных проблем, относящихся к интеллекту.
Конечно, небольшие модификации задачи сбора деталей могут существенно расширить требования к интеллекту машины. Предположим, что детали поступают на транспортерной ленте через неопределенные промежутки времени, и расположены они в хаотичном порядке. Тогда задачей машины будет определение факта, что деталь прибыла, распознавание ее ориентации и разработка плана захвата каждой детали согласно ее ориентации. Поэтому не столько коммерческие, сколько научные темы в области робототехники заслужили большее внимание и поддержку. В числе этих тем — создание машин, которые могут сохранять баланс, подниматься по ступенькам и находить путь по неровной местности.
Сегодня большая часть исследований в робототехнике не зависит от коммерческих приложений. Главная цель этих разработок — создание автономных роботов, то есть роботов, которые могут вести себя так, чтобы гарантировать собственное выживание. Применяется множество творческих и изобретательных техник. Например, к проектированию роботов применялись эволюционные теории, и в результате образовалась новая область — эволюционная робототехника. При создании устройств, которые в ходе смены поколений разрабатывают собственные способы сохранения баланса и перемещения, применялась теория выживания сильнейшего. В свою очередь, предмет робототехники занял законное место в науке о мышлении.
10.6.4Системы баз данных
Человеческий ум имеет удивительное устройство. Каким образом он хранит полученные знания и позже находит и восстанавливает определенные элементы информации, относящиеся к рассматриваемой задаче, — остается загадкой. Загадкой, которая пронизывает множество областей науки об искусственном интеллекте. Как человеческий разум восстанавливает информацию, необходимую для распознавания изображения? Каким образом он применяет правильный контекст при обработке двусмысленных предложений естественных языков? Как может человеческий разум хранить знания об окружающем мире и рассуждать об этих знаниях?
Главной проблемой искусственного интеллекта является проблема баз данных, а прогресс в каждой области исследований используется в остальных областях. Техники искусственного интеллекта применяются в традиционных системах баз данных для обеспечения лучшего обслуживания, а техники баз данных используются в проектах, относящихся к искусственному интеллекту, для обработки огромных объемов знаний, необходимых для процесса мышления и понимания. Часто исследования в области искусственного интеллекта и систем баз данных просто пытаются решить одну проблему с разных точек зрения.
Возьмем, например, вопрос разработки систем ассоциативной памяти (систем ассоциативных баз данных). Мы уже увидели, какая необходимость в таких системах есть в области обработки естественных языков, где важная информация об окружающем мире должна применяться для понимания предложений согласно их контексту, и обсудили, каким образом искусственные нейронные сети могут помочь в решении этой задачи.
С более традиционной точки зрения баз данных проблема заключается в идентификации и восстановлении информации, относящейся к теме, а не в простом получении явно запрошенных данных. Например, рассмотрим проблему пользователей, пытающихся найти определенную информацию во всемирной сети. Традиционный подход заставляет пользователей выделять ключевые слова и фразы, которые могут встретиться в требуемом документе. Затем система проводит поиск по своей базе данных и выдает те документы, в которых присутствуют указанные слова и фразы. К сожалению, эти системы — просто сито, выбирающее документы на основе синтаксиса, а не семантики. Они могут пропустить важные документы только потому, что в них упоминается слово «машины» вместо «автомобили». Что действительно необходимо пользователю — это поисковые системы, обладающие разумом и, следовательно, возможностью восстановления связанного (или ассоциированного) материала, а не просто умеющие выдавать явно запрошенную информацию.
Возьмем другой пример. Предположим, что у нас есть база данных, в которую занесены курсы, читаемые профессором в университете, и оценки, выставленные студентам. Пусть произошла следующая последовательность событий: мы запросили в базе данных количество оценок «5», выставленные профессором Джонсоном в последнем семестре. База данных выдает ответ: «нет». Мы делаем вывод, что профессор Джонсон очень требователен к ученикам, и просим количество поставленных им в последнем семестре двоек. И снова база данных отвечает «нет». Тогда мы решаем, что профессор Джонсон считает всех своих студентов средними учениками (за исключением выдающихся случаев), и запрашиваем количество троек, поставленных профессором в последнем семестре. База данных опять выдает ответ «нет». Здесь у нас возникают подозрения, и мы спрашиваем у базы данных, читал ли профессор Джонсон этот курс в последнем семестре. База данных сообщает: «нет». Но почему же она сразу не сказала нам об этом?! Нам бы хотелось, чтобы базы данных могли выдавать информацию, которую мы хотим получить, а не ту, которую мы запрашиваем.
Еще одна тема, которую исследуют науки о базах данных и искусственном интеллекте, — это разработка хранилищ данных и поисковых систем, умеющих выдавать информацию, которую подразумевают хранящиеся данные, вместо данных, которые фактически хранятся в системе. Другими словами, мы бы хотели, чтобы базы данных могли осмысливать хранящуюся информацию. Например, в базе данных содержится информация о президентах США. Если мы спрашиваем, был ли в США президент ростом 3 метра, традиционная поисковая система не сможет ответить на этот вопрос, если данные о росте каждого президента не занесены явно в базу данных. С другой стороны, интеллектуальная система сможет правильно ответить на вопрос, даже не зная роста президентов. Размышления шли бы по такому пути: если бы существоват президент ростом 3 метра, этот значительный факт был бы занесен в базу данных. Следовательно, если ни об одном президенте этого не сказано, значит, президентов ростом 3 метра просто не было.
Вывод о том, что президентов ростом 3 метра не существовало, обозначает очень важный момент в разработке баз данных — различие между базами данных, построенными на концепции закрытого мира (closed-world database), и базами, построенными на концепции открытого мира (open-world database). Проще говоря, база данных, исходящая из концепции закрытого мира, считает, что в ней содержатся все правдивые сведения о рассматриваемом вопросе, тогда как в базе данных открытого мира допускается, что это может быть не так. Умение отклонять гипотезу о трехметровом президенте в предыдущем примере основывалось на необоснованном предположении (концепция закрытого мира) о том, что если факт не зафиксирован, то он не является правдивым. Аналогично, база данных по подписчикам журнала применяет необоснованное предположение, утверждая, что определенный человек не подписан на журнал, даже не имея списка всех людей, не подписанных на этот журнал.
Хотя необоснованные предположения с первого взгляда кажутся безобидными, их применение может привести к скрытым сложностям. Предположим, что база данных состоит из одного утверждения: Микки - это мышонок или Дональд - это утка.
Основываясь только на этом утверждении, мы не можем сделать вывод, что Микки — действительно мышь. Следовательно, это необоснованное предположение заставляет нас сделать вывод, что утверждение
Микки - это мышонок
неверно. Аналогично, наше необоснованное предположение приводит к тому, что утверждение
Дональд - это утка
также неверно. Мы видим, что первое необоснованное предположение привело нас к противоречивому выводу, что, хотя одно или оба утверждения должны быть верными, оба они неверны. Понимание ограничений таких бесхитростных техник мышления — это цель актуальных исследований в области искусственного интеллекта.
