Алгоритмический тренинг. Решения практических задач на Python и С++

Алгоритмический тренинг. Решения практических задач на Python и С++

Алгоритмический тренинг. Решения практических задач на Python и С++
Автор: Иванов Максим
Дата выхода: 2023
Издательство: БХВ-Петербург
Количество страниц: 415
Размер файла: 3.1 MB
Тип файла: PDF
Добавил: codelibs
 Проверить на вирусы

СОДЕРЖАНИЕ....4

ВВЕДЕНИЕ....10

Глава 1. Для кого эта книга....11

Глава 2. Чему обучит эта книга....12

Глава 3. Спортивное и промышленное программирование....13

Глава 4. Как пользоваться книгой....15

СТУПЕНЬ I. РАЗМИНКА....16

Глава 5. Вводные задачи....17

5.1. A+B....17

5.2. Пример решения задачи. Числа Фибоначчи....18

5.3. Пример решения задачи. Манхэттенское расстояние....19

5.4. Пример решения задачи. Путь до ксерокса....21

5.5. Пример решения задачи. Проверка перестановки....23

5.6. Пример решения задачи. Циклы перестановки....24

Глава 6. Разминочные конструктивные задачи....26

6.1. Пример решения задачи. Пара с минимальным произведением....26

6.2. Пример решения задачи. Тайная жизнь деревьев....28

6.3. Пример решения задачи. Подписывание открыток....29

6.4. Пример решения задачи. Исправление перестановки....31

6.5. Пример решения задачи. Минимальный палиндром....34

6.6. Пример решения задачи. Исключающее ИЛИ от 1 до n....35

6.7. Пример решения задачи. Врачи и посетители....38

6.8. Пример решения задачи. Минимизация перепадов....41

6.9. Пример решения задачи. Одномерный геометрический центр....43

Глава 7. Разминочные реализационные задачи....46

7.1. Пример решения задачи. Морской бой....46

7.2. Пример решения задачи. Стоимость интернет-связи....48

7.3. Пример решения задачи. Пересечение двух прямоугольников....51

7.4. Пример решения задачи. Проверка скобочной последовательности....53

7.5. Пример решения задачи. Проверка скобочной последовательностис двумя типами....55

7.6. Пример решения задачи. Зеркальный лабиринт....56

7.6. Пример решения задачи. Троичная сбалансированная система счисления....59

Глава 8. Задачи для самостоятельного решения....61

8.1. Примеры задач....61

8.2. Задачи в онлайн-системах....64

Итоги ступени I....65

СТУПЕНЬ II. БАЗОВЫЕ АЛГОРИТМЫ....66

Глава 9. Оценка скорости работы алгоритмов....67

9.1. Эмпирическая скорость процессора....67

9.2. Асимптотическая оценка. Основы....69

9.3. Практическая применимость асимптотических оценок....76

9.4. Библиотечные реализации алгоритмов и их скорость....77

Глава 10. Наибольший общий делитель. Алгоритм Евклида....81

10.1. Постановка задачи....81

10.2. Тривиальный алгоритм....81

10.3. Алгоритм Евклида....81

10.4. Доказательство алгоритма Евклида....82

10.5. Реализация алгоритма Евклида....82

10.6. Время работы алгоритма Евклида....84

10.7. Пример решения задачи. Сокращение дроби....85

10.8. Пример решения задачи. Наименьшее общее кратное....85

10.9. Пример решения задачи. НОД нескольких чисел....87

10.10. Пример решения задачи. Увеличение НОД массива....88

10.11. Упражнения для самостоятельного решения....89

Глава 11. Простые задачи на учет асимптотики....92

11.1. Пример решения задачи. Префиксы перестановки....92

11.2. Пример решения задачи. Парковочные места....93

Глава 12. Объединение одномерных отрезков....96

12.1. Постановка задачи....96

12.2. Алгоритм объединения отрезков....96

12.3. Реализация алгоритма объединения отрезков....96

12.4. Пример решения задачи. Часы приема....97

12.5. Пример решения задачи. Стрельба по отрезкам....98

12.6. Пример решения задачи. Многослойная покраска....100

Глава 13. Метод двух указателей....103

13.1. Пример решения задачи. Пары фиксированной суммы....103

13.2. Пример решения задачи. Длиннейший подотрезок без повторов....105

13.3. Пример решения задачи. Подотрезки со всеми числами....106

13.4. Пример решения задачи. Трехцветный забор....108

Глава 14. Двоичный поиск....111

14.1. Базовая задача: поиск в упорядоченном массиве....111

14.2. Алгоритм двоичного поиска....111

14.3. Реализация алгоритма двоичного поиска....112

14.4. Библиотечные реализации....113

14.6. Пример решения задачи. Грузовой лифт в отеле....115

14.7. Пример решения задачи. Дисплеи для смартфонов....117

14.8. Пример решения задачи. Прыжки лягушки....119

14.9. Пример решения задачи. Корень уравнения....121

14.10. Прочие применения двоичного поиска....124

Глава 15. Проверка на простоту и факторизация....125

15.1. Определения....125

15.2. Общие сведенияо простых числах и о факторизации....125

15.3. Проверка числа на простоту. Базовый алгоритм....126

15.4. Факторизация числа. Базовый алгоритм....127

15.5. Пример решения задачи. Подсчет числа делителей....128

15.6. Пример решения задачи. Иррациональный портной....129

15.7. Пример решения задачи. Произведения-квадраты....132

15.8. Пример решения задачи. Запросы числа делителей....134

Глава 16. Динамическое программирование.Основы....137

16.1. Пример решения задачи. Сумма однообразных чисел....137

16.2. Пример решения задачи. Наидлиннейшая возрастающая подпоследовательность....139

16.3. Пример решения задачи. Подмножество с заданной суммой....141

16.4. Пример решения задачи. Минимальное подмножество с заданной суммой....144

16.5. Пример решения задачи. Получение суммы монетами заданных номиналов....146

16.6. Пример решения задачи. Задача о рюкзаке....147

16.7. Пример решения задачи. Кладоискатель....149

16.8. Пример решения задачи. Путь в матрице....152

16.9. Пример решения задачи. Расстояние редактирования....154

Глава 17. Задачи для самостоятельного решения....157

17.1. Примеры задач....157

17.2. Задачи в онлайн-системах....162

Итоги ступени II....163

СТУПЕНЬ III. РАСШИРЕНИЕ БАЗОВОГО АРСЕНАЛА....164

Глава 18. Техники предварительногоподсчета на массивах....165

18.1. Указатели до ближайших элементов....165

18.2. Частичные суммы....166

18.3. Указатели до ближайших меньших элементов....167

18.4. Списки позиций....168

18.5. Сжатие значений....169

18.6. Пример решения задачи. Поиск начала слова....169

18.7. Пример решения задачи. Два подотрезка заданной длины с максимальной суммой....171

18.8. Пример решения задачи. Подсчет чисел в подотрезках....173

18.9. Пример решения задачи. Подотрезок с максимальной суммой....176

18.10. Пример решения задачи. Проекционная реклама....181

18.11. Пример решения задачи. Подотрезок с максимальным средним арифметическим....183

18.12. Пример решения задачи. Сумма в прямоугольнике....187

Глава 19. Графы. Обход в глубину....191

19.1. Что такое граф....191

19.2. Ориентированные и неориентированные графы....192

19.3. Способы представления графов в компьютере....192

19.4. Алгоритм обхода в глубину....199

19.5. Реализация обхода в глубину....200

19.6. Пример решения задачи. Проверка наличия пути....203

19.7. Пример решения задачи. Конная прогулка....205

19.8. Пример решения задачи. Проверка связности....208

19.9. Пример решения задачи. Проверка двудольного графа....210

19.10. Пример решения задачи. Проверка орграфа на ацикличность....214

19.11. Пример решения задачи. Топологическая сортировка....219

19.12. Пример решения задачи. Диаметр дерева....222

Глава 20. Графы. Обход в ширину....224

20.1. Алгоритм обхода в ширину....224

20.2. Свойства обхода в ширину....225

20.3. Реализация обхода в ширину....226

20.4. Пример решения задачи. Кластер компьютеров....229

20.5. Пример решения задачи. Робот в лабиринте....231

20.6. Пример решения задачи. Наводнение....235

Глава 21. Решето Эратосфена....237

21.1. Алгоритм решета Эратосфена....237

21.2. Демонстрация работы алгоритма....237

21.3. Доказательство корректности решета Эратосфена....238

21.4. Время работы решета Эратосфена....238

21.5. Базовые оптимизации решета Эратосфена....239

21.6. Реализация решета Эратосфена....240

21.7. Дальнейшие оптимизации решета Эратосфена....241

21.8. Пример решения задачи. Подсчет простых чисел в отрезке....244

Глава 22. Двоичное возведение в степень....247

22.1. Ключевая идея....247

22.2. Алгоритм двоичного возведения в степень....248

22.3. Иллюстрация работы алгоритма....248

22.4. Время работы двоичного возведения в степень....249

22.5. Реализация двоичного возведения в степень....249

22.6. Пример решения задачи. Последние цифры степени....250

22.7. Пример решения задачи. Обратное по простому модулю. Малая теорема Ферма....252

22.8. Пример решения задачи. Быстрое вычисление чисел Фибоначчи. Двоичное возведение матриц в степень....253

22.9. Пример решения задачи. Физический движок....256

22.10. Пример решения задачи. Подсчет путей фиксированной длины....262

Глава 23. Структуры данных. Дерево отрезков....266

23.1. Базовый вариант.Дерево для минимумов....266

23.2. Дерево отрезков для максимумов....273

23.3. Дерево отрезков с запросами модификации....274

23.4. Дерево отрезков для сумм....275

23.5. Прочие виды операций в дереве отрезков....275

23.6. Запросы обновления на отрезке....276

23.7. Дальнейшие обобщения дерева отрезков....280

23.8. Пример решения задачи. Наидлиннейшая возрастающая подпоследовательность (быстрый вариант)....281

23.9. Пример решения задачи. Наименьший общий предок....282

Глава 24. Задачи для самостоятельного решения....285

24.1. Примеры задач....285

24.2. Задачи в онлайн-системах....289

СТУПЕНЬ IV. РАЗНОСТОРОННЯЯ ПОДГОТОВКА....291

Глава 25. Производительность ввода-вывода....292

25.1. Производительность ввода-вывода в Python....292

25.2. Производительность ввода-вывода в C++....294

Глава 26. Графы. Алгоритм Дейкстры....298

26.1. Постановка задачи поиска кратчайших путей....298

26.2. Пример....298

26.3. Алгоритм Дейкстры....299

26.4. Ограничения алгоритма Дейкстры....300

26.5. Пример работы алгоритма Дейкстры....300

26.6. Восстановление кратчайшего пути....302

26.7. Доказательство алгоритма Дейкстры....303

26.8. Квадратичная реализация алгоритма Дейкстры....304

26.9. Алгоритм Дейкстры для разреженных графов....308

26.10. Пример решения задачи. Оптимальный путь четной длины....312

26.11. Пример решения задачи. Ребра кратчайших путей....315

Глава 27. Графы. Компоненты сильнойсвязности....318

27.1. Определения....318

27.2. Алгоритм поиска компонент сильной связности....320

27.3. Доказательство алгоритма....320

27.4. Демонстрация работы алгоритма....323

27.5. Временная сложность алгоритма....324

27.6. Реализация алгоритма....324

27.7. Дополнительные свойства алгоритма....327

27.8. Пример решения задачи. Железнодорожный вокзал....327

27.9. Пример решения задачи. Задача умозаключенного....328

27.10. Пример решения задачи. Сбор дани....329

Глава 28. Работа с вещественными числами....335

28.1. Формат чисел с плавающей запятой....335

28.2. Проблемы чисел с плавающей запятой....337

28.3. Приемы работы с числамис плавающей запятой....342

Глава 29.Геометрия на плоскости. Основы....346

29.1. Расстояние между точками....346

29.2. Косое произведение векторов....347

29.3. Скалярное произведение векторов....348

29.4. Площадь треугольника....349

29.5. Направление поворота. Ориентированная площадь треугольника....350

29.6. Площадь многоугольника....351

29.7. Проверка точки на принадлежность прямой....353

29.8. Проверка точки на принадлежность отрезку....353

29.9. Проверка двух отрезков на пересечение....355

29.10. Расстояние от точки до прямой....358

29.11. Расстояние от точки до отрезка....359

29.12. Точка пересечения двух прямых....362

29.13. Точка пересечения двух отрезков....365

29.14. Матрица поворота....368

29.15. Пример решения задачи.Проверка окружностей на пересечение....369

29.17. Пример решения задачи.Сортировка точек по углу....375

Глава 30. Расширенный алгоритм Евклида....380

30.1. Алгоритм....380

30.2. Доказательство....380

30.3. Реализация расширенного алгоритма Евклида....381

30.4. Пример решения задачи. Прыжки вперед и назад....382

30.5. Пример решения задачи. Линейное диофантово уравнение с двумя переменными....384

30.6. Пример решения задачи. Обратное по составному модулю....386

Глава 31. Задачи для самостоятельного решения....389

31.1. Примеры задач....389

ЗАКЛЮЧЕНИЕ....394

Методики решения задач....395

Благодарности....396

Послесловие....397

Приложение. Решения задач....398

Задачи из главы 8....398

Задачи из главы 10....400

Задачи из главы 17....401

Задачи из главы 24....405

Задачи из главы 31....410

ПРЕДМЕТНЫЙ УКАЗАТЕЛЬ....414

Опираясь на богатый соревновательный и эвристический опыт, автор предлагает оригинальные реализации классических алгоритмов Computer Science на языках Python и C++. Особое внимание уделено математическим и геометрическим алгоритмам, графовым алгоритмам, структурам данных (в особенности различным деревьям), комбинаторике и работе со строками. Книга поможет заложить и расширить алгоритмическую подготовку, познакомит с эффективными решениями вычислительных задач, а для обучающихся станет настольной. Поможет подготовиться к экзаменам, сертификации, олимпиадам по программированию.


Похожее:

Список отзывов:

Нет отзывов к книге.