Онлайн книга
Хватит тратить время на скучные академические фолианты! Изучение Computer Science может быть веселым и увлекательным занятием. Владстон Феррейра Фило знакомит нас с вычислительным мышлением, позволяющим решать любые сложные задачи. Научиться писать код просто — пара недель на курсах, и вы «программист», но чтобы стать профи, который будет востребован всегда и везде, нужны фундаментальные знания. Здесь вы найдете только самую важную информацию, которая необходима каждому разработчику и программисту каждый день.
Оглавление книги
- Предисловие
- Эта книга для меня?
- Но разве computer science не только для ученых?
- Глава 1. Основы
- 1.1. Идеи
- Блок-схемы
- Псевдокод
- Математические модели
- 1.2. Логика
- Операторы
- Булева алгебра
- Таблицы истинности
- Логика в вычислениях
- 1.3. Комбинаторика
- Правило умножения
- Перестановки
- Перестановки без повторений
- Комбинации
- Правило суммирования
- 1.4. Вероятность
- Подсчет количества возможных вариантов
- Независимые (совместные) события
- Несовместные события
- Взаимодополняющие события
- «Заблуждение игрока»
- Более сложные вероятности
- Подведем итоги
- Полезные материалы
- Глава 2. Вычислительная сложность
- Надейтесь на лучшее, но готовьтесь к худшему
- 2.1. Оценка затрат времени
- Понимание роста затрат
- 2.2. Нотация «О большое»
- 2.3. Экспоненциальное время
- 2.4. Оценка затрат памяти
- Подведем итоги
- Полезные материалы
- Глава 3. Стратегия
- 3.1. Итерация
- Вложенные циклы и степенные множества
- 3.2. Рекурсия
- Рекурсия против итераций
- 3.3. Полный перебор
- 3.4. Поиск (перебор) с возвратом
- 3.5. Эвристические алгоритмы
- «Жадные» алгоритмы
- Когда жадность побеждает силу
- 3.6. Разделяй и властвуй
- Разделить и отсортировать
- Разделить и заключить сделку
- Разделить и упаковать
- 3.7. Динамическое программирование
- Мемоизация Фибоначчи
- Мемоизация предметов в рюкзаке
- Лучшая сделка снизу вверх
- 3.8. Ветви и границы
- Верхние и нижние границы
- Ветви и границы в задаче о рюкзаке
- Подведем итоги
- Полезные материалы
- Глава 4. Данные
- Абстракции
- Тип данных
- 4.1. Абстрактные типы данных
- Преимущества использования АТД
- 4.2. Общие абстракции
- Примитивные типы данных
- Стек
- Очередь
- Очередь с приоритетом
- Список
- Сортированный список
- Множество
- 4.3. Структуры
- Массив
- Связный список
- Двусвязный список
- Массивы против связных списков
- Дерево
- Двоичное дерево поиска
- Двоичная куча
- Граф
- Хеш-таблица
- Подведем итоги
- Полезные материалы
- Глава 5. Алгоритмы
- 5.1. Сортировка
- 5.2. Поиск
- 5.3. Графы
- Поиск в графах
- Раскраска графов
- Поиск путей в графе
- PageRank
- 5.4. Исследование операций
- Задачи линейной оптимизации
- Задачи о максимальном потоке в Сети
- Подведем итоги
- Полезные материалы
- Глава 6. Базы данных
- 6.1. Реляционная модель
- Отношения
- Миграция схемы
- SQL
- Индексация
- Транзакции
- 6.2. Нереляционная модель
- Документные хранилища
- Хранилища «ключ — значение»
- Графовые базы данных
- Большие данные
- SQL против NoSQL
- 6.3. Распределенная модель
- Репликация с одним ведущим
- Репликация с многочисленными ведущими
- Фрагментирование
- Непротиворечивость данных
- 6.4. Географическая модель
- 6.5. Форматы сериализации
- Подведем итоги
- Полезные материалы
- Глава 7. Компьютеры
- 7.1. Архитектура
- Память
- Процессор
- 7.2. Компиляторы
- Операционные системы
- Оптимизация при компиляции
- Языки сценариев
- Дизассемблирование и обратный инженерный анализ
- Программное обеспечение с открытым исходным кодом
- 7.3. Иерархия памяти
- Разрыв между памятью и процессором
- Временная и пространственная локальность
- Кэш L1
- Кэш L2
- Первичная память против вторичной
- Внешняя и третичная память
- Тенденции в технологии памяти
- Подведем итоги
- Полезные материалы
- Глава 8. Программирование
- 8.1. Лингвистика
- Значения
- Выражения
- Инструкции
- 8.2. Переменные
- Типизация переменных
- Область видимости переменных
- 8.3. Парадигмы
- Императивное программирование
- Декларативное программирование
- Логическое программирование
- Подведем итоги
- Полезные материалы
- Заключение
- Приложения
- I. Системы счисления
- II. Метод Гаусса
- III. Множества
- IV. Алгоритм Кэдейна