Автоматы 2021
Общие требования
Методы перебора вариантов Перебор с возвратом
Исчерпывающий поиск в комбинаторных алгоритмах
Стратегия поиска
Общий алгоритм
Обход дерева решений в глубину
Продолжение
Задача о восьми ферзях
Решение (a1, a2, …, an)
Задача о восьми ферзях
Задача о восьми ферзях
Примеры расстановки ферзей
Усовершенствования Вращения и отражения
Усовершенствования: пояснения к инициализации Вращения и отражения
Усовершенствования: пояснения к инициализации Вращения и отражения
Подсчет вариантов
Результаты
Пентамино
Продолжение
Мартин Гарднер
Методы перебора вариантов Поиск в ширину
Обход дерева решений в ширину
Поиск в ширину в комбинаторных алгоритмах
 Волновой алгоритм для поиска пути между двумя ячейками – источником и приемником дискретного рабочего поля (ДРП).
Описание волнового алгоритма
Волновой алгоритм
Задача о восьми ферзях
Задача о восьми ферзях
Задача о восьми ферзях
Задача о калькуляторе
2.42M
Категория: МатематикаМатематика

Автоматы 2021

1. Автоматы 2021

1. Автомат 5 - 110 баллов (в том числе 2 теста не менее 14), не более 1 задачи из заданий файла
Распродажа.doc. Баллы должны быть набраны до возможного переписывания тестов.
Примерная раскладка:
Практика
24
Контрольные 24
Задачи
6*8 = 8*6 = 48
Тест 1
7
Тест 2
7
------------------Итого 110
2. Автомат 4 - 90 баллов (в том числе 2 теста не менее 12), не более 1 задачи из Распродажа.doc.
Примерная раскладка:
Практика
19
Контрольные 20
Задачи
4*6 + 3*5 = 39
Тест 1
6
Тест 2
6
------------------Итого 90
3. Допуск к экзамену (в 2021 автомат 3) - 50 баллов.
4. Экзамен: ½ баллов + ответ на экзамене (20 – 40 баллов). Пример: 80 / 2 + 35 = 75 – четверка.

2. Общие требования

1. В комментариях исходника должны быть условие задачи, авторские данные, информация о среде
выполнения.
2. Читать внимательно и до конца условие задачи, проверять на примерах.
3. Строгое соответствие форматам ввода-вывода. Ввод из input.txt, вывод в output.txt. Не должно быть
ввода с клавиатуры, вывода на экран.
4. Конец файла может быть в конце последней строки либо в начале следующей строки.
5. Гарантируется присутствие входных файлов и соблюдение форматов и ограничений.
6. Лучший вариант - посылать на почту проект с файлами проекта (.sln и .vcxproj) для Windows VS 2019
и исходниками. Это 10-20 Кб. Желательно также примеры входного и выходного файла. Иначе бывают
разночтения из-за несоответствия форматов.
7. Обязательное проведение нагрузочного тестирования, т.е. проверка на тестах максимальной
размерности - время 1 сек. Для создания тестов - программы-генераторы.
8. Рекомендуется для нагрузочного тестирования использовать сборку в режиме Release.
9. В C++ часто целочисленное переполнение и ошибка на несколько порядков. Совет: при
тестировании дублировать результат в вещественных переменных типа double.
10. Рекомендуется писать простые переборные программы для оценки времени работы и проверки на
малых размерностях.
11. Начиная с 3-ей попытки сдачи снижение баллов за задачу.
12. Отказ от взятой задачи -1 балл.
13. Читать до конца ответы преподавателя.
14. Списки взятых задач будут выкладываться и обновляться на Google-диске в файлах done21.txt,
done22.txt, done23.txt и done24.txt. В каждой группе взятые задачи не должны повторяться.
15. По одному разделу разрешается выбирать для лабораторной работы не более одной задачи.
Иcключение - задачи из файлов Дополнительные.doc и Распродажа.doc.

3. Методы перебора вариантов Перебор с возвратом

3

4. Исчерпывающий поиск в комбинаторных алгоритмах

Поиск с возвращением =
= Перебор с возвратом =
= Backtracking
Пример.
Поиск пути в
лабиринте
Поиск с возвращением
4

5. Стратегия поиска

с
з
Направление = (с, в, ю, з)
с в ю з Ход = (x, y, Направление)
(3,1,с)
(3,2,с)
(4,2,в)
(4,3,с)
(4,2,ю)
(4,1,ю)
(5,1,в)
(4,1,з)
(3,2,з)
(2,2,з)
(1,2,з)

в
ю
y
5
4
3
2
1
1
2
3
4
5
x
(x,y) – целевая клетка,
Направление – в ц.к.
Поиск с возвращением
5

6. Общий алгоритм

Решение вида (a1, a2, a3, …, an)
n – конечно, но, вообще говоря, заранее не известно
ai Ai ;
Ai – конечное линейно упорядоченное множество
Исчерпываем все элементы множества A1 A2 A3 … Ai
i = 0 ()
i = 1; S1 A1;
a1 S1;
() (a1)
i = 2; S2 A2;
a2 S2;
(a1) (a1, a2)

i = k; Sk Ak;
ak Sk;
(a1,…, ak-1) (a1,…, ak-1,ak)
При Sk = backtrack и новый выбор ak-1 Sk-1;
Поиск с возвращением
6

7. Обход дерева решений в глубину

Выбор a1
Выбор a2
Выбор a3
Выбор a4
Выбор a5
Выбор a6
Прямой порядок обхода дерева. Тупики.
Поиск с возвращением
7

8.

Задача о ферзях
На шахматной доске размера n n расставить максимальное число
не атакующих друг друга ферзей.
1
2
3
4
1
4
4
3
3
2
2
1
1
2
3
4
n=4
Поиск с возвращением
8

9. Продолжение

1
2
3
4
4
Решение = (a1, a2, a3, a4)
3
ai – номер горизонтали
на i-ой вертикали
2
1
Решение = (2, 4, 1, 3)
Поиск с возвращением
9

10. Задача о восьми ферзях

Задача впервые была решена в
1850 г.
Карлом Фридрихом Гаубом
(Carl Friedrich Gaub)
Число возможных решений на
64-клеточной доске: 92

11. Решение (a1, a2, …, an)

Ферзи i и k атакуют друг друга:
• i = k - ферзи на одной вертикали
• ai = ak - ферзи на одной горизонтали
• ai - ak = i - k - ферзи на одной
диагонали
Наращивание (продолжение) решения
(a1, a2, …, ak-1) ak = (a1, a2, …, ak-1, ak )
Поиск с возвращением
11

12.

Ak = (1, 2, …,n) – номера клеток вертикалей.
Множество Sk явно не формируется,
но, выбирая очередного кандидата k Ak,
проверяем k Sk
Используется sk - нижняя граница в Ak,
т.о. кандидаты в Sk выбираются из множества
(sk, sk+1, …, n) , т.е. Sk (sk, sk+1, …, n).
Поиск с возвращением
12

13. Задача о восьми ферзях

1 X
X
X
X
X
X
X

2

14. Задача о восьми ферзях

1 X
X

X
X
X
X
2
X
3
X
X
X
4

X
X

15. Примеры расстановки ферзей

Поиск с возвращением
15

16. Усовершенствования Вращения и отражения

Поиск с возвращением
16

17. Усовершенствования: пояснения к инициализации Вращения и отражения

Поиск с возвращением
17

18. Усовершенствования: пояснения к инициализации Вращения и отражения

Поиск с возвращением
18

19. Подсчет вариантов

n=8
Все возможные способы C(n2|n) 4,4*109
В каждой строке один n! = 40320
Поиск с возвращением
19

20. Результаты

количество ферзей = 4
решения:
1 :: 2 4 1 3
всего решений = 2
количество ферзей = 5
решения:
1 :: 2 4 1 3 5
2 :: 2 5 3 1 4
всего решений = 10
количество ферзей = 6
решения:
1 :: 2 4 6 1 3 5
2 :: 3 6 2 5 1 4
всего решений = 4
количество ферзей = 7
решения:
1 :: 2 4 1 7 5 3 6
2 :: 2 4 6 1 3 5 7
3 :: 2 5 1 4 7 3 6
4 :: 2 5 3 1 7 4 6
5 :: 2 5 7 4 1 3 6
6 :: 2 6 3 7 4 1 5
7 :: 2 7 5 3 1 6 4
8 :: 3 1 6 2 5 7 4
9 :: 3 1 6 4 2 7 5
10 :: 3 5 7 2 4 6 1
11 :: 3 6 2 5 1 4 7
12 :: 3 7 2 4 6 1 5
13 :: 3 7 4 1 5 2 6
всего решений = 40
Поиск с возвращением
20

21.

количество ферзей = 8
решения:
1 :: 2 4 6 8 3 1 7 5
2 :: 2 5 7 1 3 8 6 4
3 :: 2 5 7 4 1 8 6 3
4 :: 2 6 1 7 4 8 3 5
5 :: 2 6 8 3 1 4 7 5
6 :: 2 7 3 6 8 5 1 4
7 :: 2 7 5 8 1 4 6 3
8 :: 2 8 6 1 3 5 7 4
9 :: 3 1 7 5 8 2 4 6
10 :: 3 5 2 8 1 7 4 6
11 :: 3 5 2 8 6 4 7 1
12 :: 3 5 7 1 4 2 8 6
13 :: 3 5 8 4 1 7 2 6
14 :: 3 6 2 5 8 1 7 4
15 :: 3 6 2 7 1 4 8 5
16 :: 3 6 2 7 5 1 8 4
17 :: 3 6 4 1 8 5 7 2
18 :: 3 6 4 2 8 5 7 1
19 :: 3 6 8 1 4 7 5 2
20 :: 3 6 8 1 5 7 2 4
21 :: 3 6 8 2 4 1 7 5
22 :: 3 7 2 8 5 1 4 6
23 :: 3 7 2 8 6 4 1 5
24 :: 3 8 4 7 1 6 2 5
25 :: 4 1 5 8 2 7 3 6
26 :: 4 1 5 8 6 3 7 2
27 :: 4 2 5 8 6 1 3 7
28 :: 4 2 7 3 6 8 1 5
29 :: 4 2 7 3 6 8 5 1
30 :: 4 2 7 5 1 8 6 3
31 :: 4 2 8 5 7 1 3 6
32 :: 4 2 8 6 1 3 5 7
33 :: 4 6 1 5 2 8 3 7
34 :: 4 6 8 2 7 1 3 5
35 :: 4 6 8 3 1 7 5 2
36 :: 4 7 1 8 5 2 6 3
37 :: 4 7 3 8 2 5 1 6
38 :: 4 7 5 2 6 1 3 8
39 :: 4 7 5 3 1 6 8 2
40 :: 4 8 1 3 6 2 7 5
41 :: 4 8 1 5 7 2 6 3
42 :: 4 8 5 3 1 7 2 6
всего решений = 92
Поиск с возвращением
21

22.

количество ферзей = 9
решения:
1 :: 2 4 1 7 9 6 3 5 8
2 :: 2 4 7 1 3 9 6 8 5
3 :: 2 4 8 3 9 6 1 5 7
4 :: 2 4 9 7 3 1 6 8 5
5 :: 2 4 9 7 5 3 1 6 8
6 :: 2 5 7 1 3 8 6 4 9
7 :: 2 5 7 4 1 3 9 6 8
8 :: 2 5 7 9 3 6 4 1 8
9 :: 2 5 7 9 4 8 1 3 6
10 :: 2 5 8 1 3 6 9 7 4
11 :: 2 5 8 1 9 6 3 7 4
12 :: 2 5 8 6 9 3 1 4 7
13 :: 2 5 8 6 9 3 1 7 4
14 :: 2 5 9 4 1 8 6 3 7
15 :: 2 6 1 3 7 9 4 8 5
16 :: 2 6 1 7 4 8 3 5 9
17 :: 2 6 1 7 5 3 9 4 8
18 :: 2 6 1 9 5 8 4 7 3
19 :: 2 6 3 1 8 4 9 7 5
20 :: 2 6 9 3 5 8 4 1 7
21 :: 2 7 5 1 9 4 6 8 3
22 :: 2 7 5 8 1 4 6 3 9
23 :: 2 7 9 6 3 1 4 8 5
24 :: 2 8 1 4 7 9 6 3 5
25 :: 2 8 5 3 9 6 4 1 7
26 :: 2 8 6 9 3 1 4 7 5
27 :: 2 9 5 3 8 4 7 1 6
28 :: 2 9 6 3 5 8 1 4 7
29 :: 2 9 6 3 7 4 1 8 5
30 :: 2 9 6 4 7 1 3 5 8
31 :: 3 1 4 7 9 2 5 8 6
32 :: 3 1 6 8 5 2 4 9 7
33 :: 3 1 7 2 8 6 4 9 5
34 :: 3 1 7 5 8 2 4 6 9
35 :: 3 1 8 4 9 7 5 2 6
36 :: 3 1 9 7 5 2 8 6 4
37 :: 3 5 2 8 1 4 7 9 6
38 :: 3 5 2 8 1 7 4 6 9
39 :: 3 5 7 1 4 2 8 6 9
40 :: 3 5 8 2 9 6 1 7 4
41 :: 3 5 8 2 9 7 1 4 6
42 :: 3 5 9 2 4 7 1 8 6
43 :: 3 5 9 4 1 7 2 6 8
44 :: 3 6 2 7 1 4 8 5 9
45 :: 3 6 2 9 5 1 8 4 7
46 :: 3 6 8 1 4 7 5 2 9
47 :: 3 6 8 1 5 9 2 4 7
48 :: 3 6 8 2 4 9 7 5 1
49 :: 3 6 8 5 1 9 7 2 4
50 :: 3 6 8 5 2 9 7 4 1
51 :: 3 6 9 1 8 4 2 7 5
52 :: 3 6 9 2 5 7 4 1 8
53 :: 3 6 9 2 8 1 4 7 5
54 :: 3 6 9 5 8 1 4 2 7
55 :: 3 6 9 7 1 4 2 5 8
56 :: 3 6 9 7 2 4 8 1 5
57 :: 3 6 9 7 4 1 8 2 5
58 :: 3 7 2 4 8 1 5 9 6
59 :: 3 7 2 8 5 9 1 6 4
60 :: 3 7 2 8 6 4 1 5 9
61 :: 3 7 4 2 9 5 1 8 6
62 :: 3 7 4 2 9 6 1 5 8
63 :: 3 7 4 8 5 9 1 6 2
64 :: 3 7 9 1 5 2 8 6 4
65 :: 3 7 9 4 2 5 8 6 1
66 :: 3 8 2 4 9 7 5 1 6
67 :: 3 8 4 7 9 2 5 1 6
…………
Поиск с возвращением

90 :: 4 2 9 5 1 8 6 3 7
91 :: 4 6 1 5 2 8 3 7 9
92 :: 4 6 1 9 5 8 2 7 3
93 :: 4 6 1 9 7 3 8 2 5
94 :: 4 6 3 9 2 5 8 1 7
95 :: 4 6 3 9 2 8 5 7 1
96 :: 4 6 3 9 7 1 8 2 5
97 :: 4 6 8 2 5 1 9 7 3
98 :: 4 6 8 2 5 7 9 1 3
99 :: 4 6 8 2 7 1 3 5 9
100 :: 4 6 8 3 1 7 5 2 9
101 :: 4 6 9 3 1 8 2 5 7
102 :: 4 7 1 3 9 6 8 5 2
103 :: 4 7 1 6 9 2 8 5 3
104 :: 4 7 1 8 5 2 9 3 6
105 :: 4 7 3 6 9 1 8 5 2
106 :: 4 7 3 8 2 5 9 6 1
107 :: 4 7 3 8 6 1 9 2 5
108 :: 4 7 3 8 6 2 9 5 1
109 :: 4 7 5 2 9 1 3 8 6
110 :: 4 7 5 2 9 1 6 8 3
111 :: 4 7 5 2 9 6 8 3 1
112 :: 4 7 9 2 5 8 1 3 6
113 :: 4 7 9 2 6 1 3 5 8
114 :: 4 7 9 6 3 1 8 5 2
115 :: 4 8 1 5 7 2 6 3 9
116 :: 4 8 5 3 1 6 2 9 7
117 :: 4 8 5 3 1 7 2 6 9
118 :: 4 9 3 6 2 7 5 1 8
119 :: 4 9 5 3 1 6 8 2 7
120 :: 4 9 5 3 1 7 2 8 6
121 :: 4 9 5 8 1 3 6 2 7
всего решений = 352
22

23. Пентамино

Поиск с возвращением
23

24.

Пентамино
Поиск с возвращением
24

25.

Поиск с возвращением
25

26.

Для случая 6×10 эту задачу впервые решил в 1965 году
Джон Флетчер [1].
Существует ровно 2339 различных укладок пентамино в
прямоугольник 6×10, не считая поворотов и отражений
целого прямоугольника, но считая повороты и
отражения его частей
(иногда
внутри
прямоугольника
образуется
симметричная комбинация фигур, поворачивая которую,
можно получить дополнительные решения; для
прямоугольника 3×20, приведённого на рисунке, второе
решение можно получить поворотом блока из 7 фигур,
или, иначе говоря, если поменять местами четыре
фигуры, крайние слева, и одну крайнюю справа,
см.предыдущий слайд).
Поиск с возвращением
26

27. Продолжение

Для прямоугольника 5×12 существует 1010
решений,
4×15 — 368 решений,
3×20 — всего 2 решения.
John G. Fletcher (1965). "A program to solve the
pentomino problem by the recursive use of
macros". Communications of the ACM 8, 621–623.
02.02.2016
Поиск с возвращением
27

28. Мартин Гарднер

Поиск с возвращением
28

29. Методы перебора вариантов Поиск в ширину

29

30. Обход дерева решений в ширину

Выбор a1
Выбор a2
Выбор a3
Выбор a4
Выбор a5
Выбор a6
Для обхода дерева решений в ширину используют очередь.
30

31. Поиск в ширину в комбинаторных алгоритмах

Волновой алгоритм
Пример.
Поиск пути в
лабиринте
11 12 13 12 11
10
9
8
9
10
5
6
7
4
11
4
3
2
3
12
5
6
1
4
5
Поиск в ширину
31

32.

33.  Волновой алгоритм для поиска пути между двумя ячейками – источником и приемником дискретного рабочего поля (ДРП).

Волновой алгоритм для поиска пути между
двумя ячейками – источником и приемником
дискретного рабочего поля (ДРП).
ДРП – это прямоугольник, разбитый на квадратные ячейки
одинакового размера. Ячейки ДРП подразделяются на свободные,
препятствия, источники и приемники. На рисунке свободные ячейки
имеют светло-зеленый цвет, а препятствия – светло-коричневый.
Источник залит синим цветом, а приемник – черным.
Путь может быть проложен только по свободным ячейкам
.

34. Описание волнового алгоритма


Рассматривается алгоритм построения ортогонального пути. Алгоритм
состоит из двух частей.
В первой от источника к приемнику распространяется волна. Волна, идущая
от источника к приемнику, на каждом шаге первой части алгоритма
пополняется свободными ячейками, которые, во-первых, еще не
принадлежат волне, и, во-вторых, являются 4-соседями ячеек, попавших в
волну на предыдущем шаге.

35. Волновой алгоритм

35

36. Задача о восьми ферзях

1 X
X
X
X
X
X
X

2

37. Задача о восьми ферзях

1 X
X
X

X
X
X
X
X
X
X
X
X
2
3
X
X
X
X
X
X
X
X

X
X

38. Задача о восьми ферзях

1 X
X
X

X
X
X
X
X
X
2
X
X
X
X

X
X
X
X
4
X
X
X
3
X
X
X
X
X
X
X
X

39. Задача о калькуляторе

Имеется примитивный калькулятор, который умеет выполнять всего
три операции с текущим числом x: заменить x на 2x, 3x или x+1. По
данному целому числу 1≤n≤10^5 определите минимальное число
операций k, необходимое, чтобы получить n из 1. Выведите k и
последовательность промежуточных чисел.
Решение. Очередь из достижимых чисел.
В скобках пары (a, b): a – номер хода, b – предыдущее число
1
2(1,1) 3(1,1)
3(1,1) 4(2,2) 6(2,2)
4(2,2) 6(2,2) 9(2,3)
6(2,2) 9(2,3) 5(3,4) 8(3,4) 14(3,4)
..............................................
39
English     Русский Правила