Задание 8: поисковые запросы, логика И/ИЛИ и круги Эйлера

Понимаем, как операторы И/ИЛИ меняют число найденных страниц, — это задание №8.

Поисковый запрос — это набор слов с логическими операторами; чем строже условие, тем меньше страниц находит поисковик.

Что проверяет задание 8

Дают несколько запросов и количество страниц, которые по ним нашлись (или просят расставить запросы по возрастанию/убыванию числа находок). Нужно понять, как операторы И/ИЛИ влияют на размер результата. Это задание на логику множеств, и круги Эйлера делают его наглядным.

Операторы запроса

ОператорОбозначениеСмысл
И& (амперсанд)страница содержит оба слова
ИЛИ| (вертикальная черта)страница содержит хотя бы одно слово

Главное правило, которое решает почти все такие задания:

  • «ИЛИ» расширяет результат — находок становится больше (или столько же).
  • «И» сужает результат — находок становится меньше (или столько же).

Поэтому запрос с «|» всегда даёт не меньше страниц, чем каждое слово по отдельности, а запрос с «&» — не больше.

Круги Эйлера

Представьте два круга — множество страниц про «кошки» и про «собаки».

  • кошки | собаки — это объединение кругов (вся закрашенная площадь обоих).
  • кошки & собаки — это пересечение (общая часть, где есть оба слова).

Очевидно: объединение ≥ каждого круга ≥ пересечение. Это и есть порядок по числу страниц.

Формула включений-исключений

Часто дают числа находок для запросов и просят вычислить недостающий. Работает формула: |A или B| = |A| + |B| − |A и B|.

Пример: по запросу «Москва» — 250 страниц, по «Париж» — 180, по «Москва | Париж» — 400. Сколько по «Москва & Париж»?

moskva = 250
parizh = 180
ili = 400                       # Москва | Париж
i = moskva + parizh - ili       # Москва & Париж
print("Москва & Париж:", i)

Вывод:

Москва & Париж: 30

Логика формулы: складывая две группы, мы дважды учли общие страницы, поэтому вычитаем их один раз, чтобы получить объединение. Зная объединение и обе группы, легко найти пересечение.

Упорядочивание запросов

Расставьте по возрастанию числа страниц: (1) спорт | футбол, (2) спорт & футбол, (3) спорт.

Пересечение всегда наименьшее, объединение — наибольшее, одиночное слово — между ними:

# Смоделируем как множества страниц
sport = set(range(1, 101))         # 100 страниц про спорт
futbol = set(range(80, 161))       # 81 страница про футбол (часть пересекается)
print("спорт & футбол:", len(sport & futbol))
print("спорт:", len(sport))
print("спорт | футбол:", len(sport | futbol))

Вывод:

спорт & футбол: 21
спорт: 100
спорт | футбол: 160

Порядок по возрастанию: спорт & футбол < спорт < спорт | футбол. То есть 2, 3, 1.

Задача с тремя словами

Иногда сравнивают запросы с тремя словами. Правило не меняется: чем больше слов через «И», тем строже и тем меньше находок; чем больше слов через «ИЛИ», тем больше. Сравним (кошки | собаки | рыбки) и (кошки & собаки) и одиночное кошки.

koshki = set(range(1, 121))      # 120 страниц
sobaki = set(range(100, 221))    # 121 страница
rybki  = set(range(200, 261))    # 60 страниц

ili3 = koshki | sobaki | rybki   # объединение трёх
i2   = koshki & sobaki           # пересечение двух
print("кошки & собаки:", len(i2))
print("кошки:", len(koshki))
print("кошки | собаки | рыбки:", len(ili3))

Вывод:

кошки & собаки: 21
кошки: 120
кошки | собаки | рыбки: 260

Как и ожидалось: пересечение двух слов наименьшее (21), одиночное слово в середине (120), объединение трёх — наибольшее (260). Эта «лесенка» работает всегда и позволяет расставлять запросы по числу страниц, даже не вычисляя точные значения, — достаточно понимать, что строже, а что мягче.

Типичные ошибки

  • Думают, что «И» даёт больше страниц (наоборот — меньше).
  • Путают объединение и пересечение в формуле, забывают вычесть общее.
  • В ответе пишут номера запросов в неверном порядке — перечитайте, просили «по возрастанию» или «по убыванию».

Итог

  • «ИЛИ» (|) расширяет — страниц больше; «И» (&) сужает — меньше.
  • Круги Эйлера: | — объединение, & — пересечение.
  • Формула: |A или B| = |A| + |B| − |A и B|.
  • Порядок: пересечение ≤ одиночное слово ≤ объединение.
Проверьте себя
1. Какой запрос обычно находит больше всего страниц?
Aкошки & собаки
Bкошки
Cкошки | собаки
Dвсе дают поровну
2. По «А» нашлось 300 страниц, по «Б» — 200, по «А | Б» — 450. Сколько по «А & Б»?
A50
B100
C150
D650
3. Что в кругах Эйлера соответствует оператору «И» (&)?
AОбъединение кругов
BПересечение кругов
CРазность кругов
DВнешняя область
4. Расставьте по возрастанию числа страниц: спорт, спорт|футбол, спорт&футбол.
Aспорт|футбол, спорт, спорт&футбол
Bспорт&футбол, спорт, спорт|футбол
Cспорт, спорт&футбол, спорт|футбол
Dвсе равны
Поддержать проект