Вопрос:

5. Тип 8 № 37470. В языке запросов поискового сервера для обозначения логической операции «ИЛИ» используется символ «|», а для обозначения логической операции «И» — символ «&». В таблице приведены запросы и количество найденных по ним страниц некоторого сегмента сети Интернет. Компьютер печатает количество страниц (в тысячах), которое будет найдено по следующему запросу: Динамо & (Зенит | Спартак)? Считается, что все запросы выполнялись практически одновременно, так что набор страниц, содержащих все искомые слова, не изменялся за время выполнения запросов.

Ответ:

Решение:

По условию задачи, логическая операция «ИЛИ» обозначается символом «|», а логическая операция «И» — символом «&». В запросе Динамо & (Зенит | Спартак) нам нужно найти страницы, которые содержат слово «Динамо» И (либо «Зенит», либо «Спартак»).

Согласно таблице:

  • Количество страниц для запроса Динамо & Зенит: 310 тысяч.
  • Количество страниц для запроса Динамо & Спартак: 150 тысяч.
  • Количество страниц для запроса Динамо & Зенит & Спартак: 380 тысяч.

Поскольку операция «ИЛИ» (|) имеет приоритет, сначала находим страницы, содержащие «Зенит» ИЛИ «Спартак». Затем ищем страницы, содержащие «Динамо» И результаты этого поиска.

Чтобы найти количество страниц для запроса Динамо & (Зенит | Спартак), мы должны просуммировать количество страниц для запросов:

  1. Динамо & Зенит (включает случаи, когда есть и «Спартак» тоже)
  2. Динамо & Спартак (исключая случаи, когда есть и «Зенит» тоже, т.к. они уже посчитаны в предыдущем пункте)

На самом деле, правильный подход: количество страниц для (Динамо & Зенит) плюс количество страниц для (Динамо & Спартак) МИНУС количество страниц для (Динамо & Зенит & Спартак). Это формула включений-исключений для операции «ИЛИ».

$$ \text{Количество страниц} = \text{Страницы(Динамо & Зенит)} + \text{Страницы(Динамо & Спартак)} - \text{Страницы(Динамо & Зенит & Спартак)} $$

$$ \text{Количество страниц} = 310 + 150 - 380 $$

$$ \text{Количество страниц} = 460 - 380 $$

$$ \text{Количество страниц} = 80 $$

Однако, в задаче речь идет о запросе: Динамо & (Зенит | Спартак).

Это означает:

  • Либо страницы, содержащие Динамо И Зенит.
  • Либо страницы, содержащие Динамо И Спартак.

Если бы запрос был Динамо | (Зенит & Спартак), то это было бы другое условие.

При запросе Динамо & (Зенит | Спартак), мы должны сложить результаты запросов, где «Динамо» встречается с «Зенитом» и где «Динамо» встречается со «Спартаком». Но нужно учесть, что страницы, где есть все три слова, учтены дважды.

Формула включений-исключений для A & (B | C) эквивалентна (A & B) | (A & C).

Количество страниц для (A & B) | (A & C) равно:

$$ N(A \text{&} B) + N(A \text{&} C) - N(A \text{&} B \text{&} C) $$

Где:

  • N(Динамо & Зенит) = 310
  • N(Динамо & Спартак) = 150
  • N(Динамо & Зенит & Спартак) = 380

$$ 310 + 150 - 380 = 460 - 380 = 80 $$

Таким образом, по запросу "Динамо & (Зенит | Спартак)" будет найдено 80 тысяч страниц.