"Информатика (в 2-х частях)", Горячев А.В., Герасимова В.Г., Макарина Л.А., Островский С.Л., Паволоцкий А.В., Семёнов А.А., Юдина А.Г., Чернышёва Т.Л.
Поиск решения с ограничениями — это проверка возможных вариантов, чтобы найти те, которые подходят под все условия задачи. Сначала определяют, что именно нужно найти и среди каких значений выбирать, затем перечисляют ограничения и перебирают кандидатов. Такой порядок помогает не пропустить подходящий вариант и не принять за ответ тот, который выполняет только часть условий. Метод используют при составлении алгоритмов и решении задач на программирование.
Текст подготовлен нейронной сетью по теме параграфа и не заменяет учебник — важные факты и формулировки сверяйте с ним.
Ограничение — условие, которому должны удовлетворять искомые значения или объект. Например, для числа это может быть требование быть больше 10 или делиться на 3. Ограничения помогают понять, какие варианты подходят, а какие сразу можно исключить.
Кандидат на решение — возможный вариант, который проверяют на соответствие ограничениям. Если ищем число от 1 до 20, каждое число из этого диапазона можно считать кандидатом. Этот термин нужен, чтобы отличать ещё не проверенный вариант от уже найденного ответа.
Допустимое решение — кандидат, удовлетворяющий всем заданным ограничениям. Если условие требует, чтобы число было больше 10 и делилось на 3, недостаточно выполнить только одно требование. Понятие помогает точно определить, какие варианты можно записать в ответ.
Поиск решения — последовательное рассмотрение кандидатов и проверка, какие из них допустимы. Перебор организуют так, чтобы каждый вариант из области поиска был проверен. Это позволяет найти решение или убедиться, что подходящих вариантов нет.
Поиск начинают с точного определения того, что требуется найти, и перечня всех условий задачи. Иначе можно выбрать не тот объект или забыть проверить важное требование. Например, если ищут числа, нужно понять, требуется одно число или все подходящие числа, целое оно или может быть дробным. Записанные заранее условия служат планом проверки каждого кандидата.
Ограничения сужают множество возможных вариантов, потому что отсекают тех кандидатов, которые не соответствуют условию. Чем точнее сформулированы ограничения, тем легче заметить неподходящий вариант и не тратить на него дальнейшие проверки. Если требуется число больше 10, числа от 1 до 10 можно исключить ещё до проверки делимости. При этом кандидат должен пройти проверку по всем условиям, а не только по самому заметному.
Область поиска — множество значений или объектов, среди которых рассматривают кандидатов. Её важно определить, потому что без границ перебор может оказаться бесконечным или неполным: непонятно, когда остановиться и что именно проверить. В задаче «найти целое число от 1 до 20» область задана явно, а значит, можно составить полный список кандидатов. Если границы не даны, их нужно определить из текста задачи или уточнить, какие значения допустимы.
Перебор организуют в понятном порядке: например, проверяют числа от меньшего к большему или рассматривают пары сначала по первому, затем по второму значению. Такой порядок облегчает контроль и помогает не перескочить через вариант. При переборе пар следует определить, считаются ли пары (2, 5) и (5, 2) разными: это зависит от условия. Полный перебор означает, что проверен каждый кандидат из заданной области.
Ограничения удобно записывать как логические условия — высказывания, для которых можно определить, истинны они или ложны. Например, для числа x можно записать: x > 10 и x делится на 3. Союз «и» означает, что должны выполняться оба условия одновременно; если хотя бы одно ложно, кандидат не подходит. Для сложной задачи проверяйте каждое условие отдельно, а затем принимайте решение о кандидате в целом.
| Этап | Что сделать | На что обратить внимание |
|---|---|---|
| Определить искомое | Уточнить, какое значение или объект требуется найти. | Нужно одно решение или все; какие свойства у искомого? |
| Задать область поиска | Указать множество возможных значений или объектов. | Понятны ли границы и тип значений? |
| Сформулировать ограничения | Перечислить все условия задачи. | Не забыто ли требование; однозначно ли оно записано? |
| Перебрать кандидатов | Проверить варианты из области поиска в выбранном порядке. | Можно ли проследить перебор и убедиться, что нет пропусков? |
| Проверить условия | Сопоставить каждый кандидат со всеми ограничениями. | Выполняются ли условия одновременно? |
| Записать все допустимые решения | Собрать подходящие варианты в ответ. | Если требуется найти все решения, завершён ли полный перебор? |
Пользуйся таблицей как планом: переходи к следующему этапу, когда выполнил предыдущий. Если на проверке кандидат не проходит хотя бы одно ограничение, исключи его; если проходит все — запиши как допустимое решение. В конце сверь ответ с вопросом задачи и проверь, что перебор завершён.
Задача 1. Найти целое число от 1 до 20, которое делится на 3 и больше 10. Здесь область поиска конечная: целые числа от 1 до 20. Оба ограничения должны выполняться одновременно, поэтому одного только деления на 3 недостаточно.
Ответ: 12, 15, 18. Перебор завершён, потому что проверена вся область, а не только первые подходящие значения.
Задача 2. Подобрать двузначные числа, сумма цифр которых равна 9, а число делится на 4. Чтобы не проверять все числа от 10 до 99 одинаковым способом, сначала используем ограничение на сумму цифр. Затем проверим делимость оставшихся вариантов на 4.
Ответ: 36 и 72. Сначала мы сократили область перебора условием о цифрах, а затем проверили оставшиеся кандидаты по второму ограничению.
Задача 3. Найти все пары натуральных чисел от 1 до 10, сумма которых не превышает 12, а произведение равно 20. Перебираем упорядоченные пары: здесь порядок имеет значение, поэтому (2, 10) и (10, 2) — разные пары. Оба ограничения проверяем для каждой пары одновременно.
Ответ: (2, 10), (10, 2), (4, 5), (5, 4). Если в конкретной задаче пары считаются неупорядоченными, обратные варианты не записывают отдельно.
Проверяют только одно из условий и принимают вариант, который подходит лишь частично. Так происходит, когда ограничения рассматривают отдельно и забывают соединить их логическим «и». Проверь себя: для каждого ответа поставь отметку напротив каждого условия; если хотя бы одной отметки нет, кандидат недопустим.
Начинают перебор, не задав границы области поиска. Тогда легко пропустить варианты или перебирать их без конца, потому что непонятно, где остановиться. Перед поиском запиши, какие именно значения входят в область и каков её крайний элемент; если границ в условии нет, выясни их из требований задачи.
Считают первый подходящий вариант единственным решением. Первый найденный кандидат действительно может подойти, но за ним могут быть другие допустимые варианты. Если задача просит найти все решения, продолжай перебор до конца области и только после этого подводи итог.
Не проверяют найденный ответ по исходному условию. Ошибка в вычислении или переборе может остаться незамеченной, даже если решение казалось правильным. Подставь каждый ответ обратно в условия и проверь все требования; дополнительно убедись, что не пропущены кандидаты, которые стояли между найденными.
Для поиска решений нужно уметь задавать диапазон значений и перебирать элементы конечного множества. Эти навыки позволяют установить границы проверки и организовать её по порядку. Тема также опирается на логические операции и проверку истинности условий: кандидат подходит, только если все ограничения выполнены. В программировании такой поиск превращается в алгоритм перебора, который проверяет варианты и сохраняет допустимые. Поэтому метод используют при составлении программ и решении задач на программирование.
Чем кандидат на решение отличается от допустимого решения?
Кандидат — это только возможный вариант, который ещё предстоит проверить. Допустимым решением он становится, если удовлетворяет каждому условию задачи.
Почему нужно задавать область поиска?
Она задаёт границы перебора: показывает, какие значения или объекты вообще нужно проверять. Без неё можно пропустить варианты или продолжать поиск бесконечно.
Как проверить, что вариант удовлетворяет нескольким ограничениям?
Проверьте каждое условие отдельно и убедитесь, что все они истинны для одного и того же варианта. Если хотя бы одно условие не выполнено, кандидат не подходит.
Что делать, если подходит несколько вариантов?
Если требуется найти все решения, продолжайте перебор до конца области поиска и запишите каждый подходящий вариант. Если условие просит одно решение, следуйте его формулировке, но не считайте первый найденный вариант единственным без проверки.
Как убедиться, что при переборе не пропущено решение?
Заранее задайте границы области поиска и систематически проверяйте каждый вариант, например по порядку. После перебора убедитесь, что проверены все значения из заданного диапазона.
§ 4-5. Поиск решения, удовлетворяющего заданным ограничениям