В каких случаях говорят что множества не пересекаются
Информатика online
Теория и практика решения олимпиадных задач и задач ЕГЭ по информатике. Теория информатики от 5 до 11 класса.
четверг, 24 ноября 2011 г.
Отношения между множествами и операции над ними
Отношения между множествами
Говорят, что множество А строго включено в множество B, если А включено в B и не равно ему:
A ⊂ B
В этом случае множество B строго включает в себя множество А; А является собственным множеством множества В.
Собственное множество — множество, которое является частью другого и не равно ему. В обоих случаях принято называть множество А подмножеством множества В; в свою очередь, множество В будет надмножеством множества А.
Говорят, что множества не пересекаются, если у них нет общих элементов.
Операции над множествами
Если имеется два множества или более, то с ними можно выполнить ряд операций. К таким операциям относятся:
— пересечение,
— объединение,
— дополнение,
— разность,
— симметрическая разность.
Все перечисленные операции, кроме дополнения, являются бинарными, т. е. выполняющимися с двумя множествами. Дополнение — унарная операция (выполняемая с одним множеством), которая, однако, может быть осуществлена лишь с учётом всех других множеств, предоставленных по условию задачи: дополнение всегда осуществляется до конкретного множества.
При этом пересечение, объединение и дополнение являются базовыми операциями, через которые могут быть выражены остальные.
Пересечение множеств (обозначается X ∩ Y ) — множество, включающее в себя элементы, которые одновременно входят в состав каждого из исходных множеств.
Можно сказать, что пересечение содержит элементы, общие для обоих множеств.
Операция пересечения коммутативна и ассоциативна:
1. X ∩ Y = Y ∩ X;
2. A ∩ (B ∩ C) = (A ∩ B) ∩ C;
Очевидно, что мощность пересечения не превосходит наименьшую мощность пересекающихся множеств:
| X ∩ Y| ≤ min (|X|,|Y|)
Объединение множеств (обозначается X ∪ Y ) — множество, включающее в себя все элементы, входящие в состав хотя бы одного из исходных множеств.
Операция объединения также коммутативна и ассоциативна.
Объединением множеств является множество, включающее в себя каждое из объединяемых множеств
Дополнение множества (обозначается ∁ Y или Ẏ ) — другое множество, включающее в себя все элементы, не входящие в состав исходного.
Несмотря на то, что операция дополнения является унарной, наличие другого множества учитывается.
Понятно, что исходное множество Y должно являться частью другого ( X ), на котором можно выбирать не принадлежащие Y элементы. Если множества Y и X совпадают, то дополнением Y является пустое множество.
Из математической записи дополнения напрямую не следует, до какого именно множества дополняется указанное. Cчитается, что дополнение всегда выполняется до универсума.
Система непересекающихся множеств и её применения
Добрый день, Хабрахабр. Это еще один пост в рамках моей программы по обогащению базы данных крупнейшего IT-ресурса информацией по алгоритмам и структурам данных. Как показывает практика, этой информации многим не хватает, а необходимость встречается в самых разнообразных сферах программистской жизни.
Я продолжаю преимущественно выбирать те алгоритмы/структуры, которые легко понимаются и для которых не требуется много кода — а вот практическое значение сложно недооценить. В прошлый раз это было декартово дерево. В этот раз — система непересекающихся множеств. Она же известна под названиями disjoint set union (DSU) или Union-Find.
Условие
Поставим перед собой следующую задачу. Пускай мы оперируем элементами N видов (для простоты, здесь и далее — числами от 0 до N-1). Некоторые группы чисел объединены в множества. Также мы можем добавить в структуру новый элемент, он тем самым образует множество размера 1 из самого себя. И наконец, периодически некоторые два множества нам потребуется сливать в одно.
Формализируем задачу: создать быструю структуру, которая поддерживает следующие операции:
На рисунке я продемонстрирую работу такой гипотетической структуры.
Реализация
Классическая реализация DSU была предложена Bernard Galler и Michael Fischer в 1964 году, однако исследована (включая временную оценку сложности) Робертом Тарьяном уже в 1975. Тарьяну же принадлежат некоторые результаты, улучшения и применения, о которых мы сегодня ещё поговорим.
Хранить структуру данных будем в виде леса, то есть превратим DSU в систему непересекающихся деревьев. Все элементы одного множества лежат в одном соответствующем дереве, представитель дерева — его корень, слияние множеств суть просто объединение двух деревьев в одно. Как мы увидим, такая идея вкупе с двумя небольшими эвристиками ведет к поразительно высокому быстродействию получившейся структуры.
Для начала нам потребуется массив p, хранящий для каждой вершины дерева её непосредственного предка (а для корня дерева X — его самого). С помощью одного только этого массива можно эффективно реализовать две первые операции DSU:
MakeSet(X)
Чтобы создать новое дерево из элемента X, достаточно указать, что он является корнем собственного дерева, и предка не имеет.
Find(X)
Представителем дерева будем считать его корень. Тогда для нахождения этого представителя достаточно подняться вверх по родительским ссылкам до тех пор, пока не наткнемся на корень.
Но это еще не все: такая наивная реализация в случае вырожденного (вытянутого в линию) дерева может работать за O(N), что недопустимо. Можно было бы попытаться ускорить поиск. Например, хранить не только непосредственного предка, а большие таблицы логарифмического подъема вверх, но это требует много памяти. Или хранить вместо ссылки на предка ссылку на собственно корень — однако тогда при слиянии деревьев (Unite) придется менять эти ссылки всем элементам одного из деревьев, а это опять-таки временные затраты порядка O(N).
Мы пойдем другим путём: вместо ускорения реализации будем просто пытаться не допускать чрезмерно длинных веток в дереве. Это первая эвристика DSU, она называется сжатие путей (path compression). Суть эвристики: после того, как представитель таки будет найден, мы для каждой вершины по пути от X к корню изменим предка на этого самого представителя. То есть фактически переподвесим все эти вершины вместо длинной ветви непосредственно к корню. Таким образом, реализация операции Find становится двухпроходной.
На рисунке показано дерево до и после выполнения операции Find(3). Красные ребра — те, по которым мы прошлись по пути к корню. Теперь они перенаправлены. Заметьте, как после этого кардинально уменьшилась высота дерева.
Исходный код в рекурсивной форме написать достаточно просто:
Unite(X, Y)
Со слиянием двух деревьев придется чуть повозиться. Найдем для начала корни обоих сливаемых деревьев с помощью уже написанной функции Find. Теперь, помня, что наша реализация хранит только ссылки на непосредственных родителей, для слияния деревьев достаточно было бы просто подвесить один из корней (а с ним и все дерево) сыном к другому. Таким образом все элементы этого дерева автоматически станут принадлежать другому — и процедура поиска представителя будет возвращать корень нового дерева.
Встает вопрос: какое дерево к какому подвешивать? Всегда выбирать какое-то одно, скажем, дерево X, не годится: легко подобрать пример, на котором после N объединений мы получим вырожденное дерево — одну ветку из N элементов. И тут в ход вступает вторая эвристика DSU, направленная на уменьшение высоты деревьев.
Будем хранить помимо предков еще один массив Rank. В нем для каждого дерева будет храниться верхняя граница его высоты — то есть длиннейшей ветви в нем. Заметьте, не сама высота — в процессе выполнения Find длиннейшая ветвь может самоуничтожиться, а тратить еще итерации на нахождение новой длиннейшей ветви слишком дорого. Поэтому для каждого корня в массиве Rank будет записано число, гарантированно больше или равное высоте его дерева.
Теперь легко принять решении о слиянии: чтобы не допустить слишком длинных ветвей в DSU, будем подвешивать более низкое дерево к более высокому. Если их высоты равны — не играет роли, кого подвешивать к кому. Но в последнем случае новоиспеченному корню надо не забыть увеличить Rank.
Вот так производится типичный Unite (например, с параметрами 8 и 19):
Однако на практике оказывается, что можно и не тратить дополнительные O(N) памяти на махинации с рангами. Достаточно выбирать корень для переподвешивания случайным образом — как ни удивительно, но такое решение дает на практике скорость, вполне сравнимую с оригинальной ранговой реализацией. Автор данной статьи всю жизнь пользуется именно рандомизированным DSU, и еще не было случая, когда тот бы подвёл.
Быстродействие
В силу применения двух эвристик скорость работы каждой операции сильно зависит от структуры дерева, а структура дерева — от списка выполненных до того операций. Исключение составляет только MakeSet — её время работы очевидно O(1) 🙂 Для остальных двух скорость очень неочевидна.
Итак, имеем:
MakeSet(X) — O(1).
Find(X) — O(1) амортизированно.
Unite(X, Y) — O(1) амортизированно.
Расход памяти — O(N).
Практические применения
Для DSU известно большое число различных использований. Большинство связано с решением некоторой задачи в режиме оффлайн — то есть когда список запросов касательно структуры, которые поступают программе, известен заранее. Я приведу здесь несколько таких задач вместе с краткими идеями решений.
Остов минимального веса
Дан неориентированный связный граф со взвешенными ребрами. Выкинуть из него некоторые ребра так, чтобы в итоге получилось дерево, причем суммарный вес ребер этого дерева должен быть наименьшим.
Одно из известных мест, где встает эта задача (хотя и решается иначе) — блокирование избыточных связей в Ethernet-сети для избегания возможных циклов пакетов. Протоколы, созданные с этой целью, широко известны, причем половина серьезных модификаций в них сделана Cisco. Более подробно см. Spanning Tree Protocol.
На рисунке показан взвешенный граф с выделенным минимальным остовом.
Алгоритм Краскала для решения этой задачи: отсортируем все ребра по возрастанию веса и будем поддерживать текущий лес минимального веса с помощью DSU. Изначально DSU состоит из N деревьев, по одной вершине в каждом. Идем по ребрам в порядке возврастания; если текущее ребро объединяет разные компоненты — сливаем их в одну и запоминаем ребро как элемент остова. Как только количество компонент достигнет единицы — мы построили искомое дерево.
Алгоритм Тарьяна для поиска LCA оффлайн
Дано дерево и набор запросов вида: для данных вершин u и v вернуть их ближайшего общего предка (least common ancestor, LCA). Весь набор запросов известен заранее, т.е. задача сформулирована в режиме оффлайн.
Компоненты связности в мультиграфе
Дан мультиграф (граф, в котором пара вершин может быть соединена более чем одним непосредственным ребром), к которому поступают запросы вида «удалить некоторое ребро» и «а сколько сейчас в графе компонент связности?» Весь список запросов известен заранее.
Решение банально. Выполним сначала все запросы на удаление, посчитаем количество компонент в итоговом графе, запомним его. Получившийся граф запихнем в DSU. Теперь будем идти по запросам удаления в обратном порядке: каждое удаление ребра из старого графа означает возможное слияние двух компонент в нашем «flashback-графе», хранящемся в DSU; в таком случае текущее количество компонент связности уменьшается на единичку.
Сегментирование изображений
Рассмотрим некоторое изображение — прямоугольный массив пикселей. Его можно представить как сетчатый граф: каждая вершина-пиксель непосредственно связана ребрами со своими четырьмя ближайшими соседями. Задача заключается в том, чтобы выделить на изображении одинаковые смысловые зоны, например, похожего цвета, и уметь для двух пикселей быстро определять, находятся ли они в одной зоне. Так, например, раскрашиваются старые черно-белые фильмы: для начала нужно выделить области с примерно одинаковыми оттенками серого.
Есть два подхода к решению этой проблемы, оба в конечном итоге используют DSU. В первом варианте мы проводим ребро не между каждой парой соседних пикселей, а только между теми, которые достаточно близки по цвету. После этого обычный прямоугольный обход графа заполнит DSU, и мы получим набор компонент связности — они же однотонные области изображения.
Второй вариант более гибкий. Не будем полностью убирать ребра, а присвоим каждому из них вес, рассчитанный на основании разности цветов и еще каких-то дополнительных факторов — своих для каждой конкретной задачи сегментирования. В полученном графе достаточно найти какой-нибудь лес минимального веса, например, тем же алгоритмом Краскала. На практике в DSU записывают не любое текущее соединяющее ребро, а только те, для которых на данный момент две компоненты не сильно отличаются по меркам другой специальной весовой функции.
Генерация лабиринтов
Задача: сгенерировать лабиринт с одним входом и одним выходом.
Алгоритм решения:
Начнем с состояния, когда установлены все стены, за исключением входа и выхода.
На каждом шаге алгоритма выберем случайную стену. Если ячейки, между которыми она стоит, еще никак не соединены (лежат в разных компонентах DSU), то уничтожаем её (сливаем компоненты).
Продолжаем процесс до некоторого состояния сходимости: например, когда вход и выход соединены; либо, когда осталась одна компонента.
Однопроходные алгоритмы
Существуют варианты реализации Find(X), которые требуют одного прохода до корня, а не двух, однако сохраняют ту же или почти ту же степень быстродействия. Они реализуют другие стратегии сокращения высоты дерева, в отличие от path compression.
Вариант №1: path splitting. По пути от вершины Х до корня перенаправить родительскую связь каждой вершины с её предка на предка предка (дедушку).
Вариант №2: path halving. Взять идею path splitting, однако перенаправлять связи не всех вершин по пути, а только тех, на которых делаем перенаправления — то есть «дедушек».
На рисунке взято все то же дерево, в нем выполняется запрос Find(3). По центру показан результат с применением path splitting, справа — path halving.
Функциональная реализация
У системы непересекающихся множеств есть один большой недостаток: она не поддерживает ни в какой форме операцию Undo, потому что реализована насквозь в императивном стиле. Гораздо удобнее была бы реализация DSU в функциональном стиле, когда каждая операция не изменяет структуру на месте, а возвращает слегка модифицированную новую структуру, в которой произведены требуемые изменения (при этом большая часть памяти у старой и новой структур общая). Такие структуры данных в английской терминологии носят название persistent, они широко применяются в чистом функциональном программировании, где доминирует идея неизменяемости данных.
В силу чисто императивной идеи алгоритмов DSU её функциональная реализация с сохранением быстродействия долгое время казалась немыслимой. Тем не менее, в 2007 году Sylvain Conchon и Jean-Christophe Filliâtre представили в своей работе искомый функциональный вариант, в котором операция Unite возвращает измененную структуру. Если говорить честно, он не совсем функциональный, он использует императивные присваивания, однако они надежно скрыты внутри реализации, а интерфейс persistent DSU — чисто функциональный.
Основная идея реализации — использование структур данных, реализующих «персистентные массивы»: они поддерживают те же операции, что и массивы, однако все так же не модифицируют память, а возвращают измененную структуру. Такой массив можно легко реализовать с помощью какого-нибудь дерева, однако в таком случае операции с ним будут занимать O(log2 N) времени, а для DSU такая оценка оказывается уже чрезмерно большой.
За дальнейшими техническими подробностями отсылаю читателей к оригинальной статье.
Литература
Системы непересекающихся множеств в объеме данной статьи обсуждаются в знаменитой книге — Кормен, Лейзерсон, Ривест, Штайн «Алгоритмы: построение и анализ». Там же можно найти и доказательство того, что выполнение операций занимает порядка α(N) времени.
На сайте Максима Иванова можно найти полную реализацию DSU на C++.
В статье Wait-free Parallel Algorithms for the Union-Find Problem обсуждается парралельная версия реализации DSU. В ней отсутствуют блокировки потоков.
Операции над множествами
Пересечение множеств
Рассмотрим два множества: множество друзей Джона и множество друзей Майкла.
Друзья Джона = < | Том, Фред, Макс, Джорж > |
Друзья Майкла = < | Лео, Том, Фред, Эван > |
Видим, что Том и Фред одновременно являются друзьями Джона и Майкла.
Говоря на языке множеств, элементы Том и Фред принадлежат как множеству друзей Джона, так и множеству друзей Майкла.
Зададим новое множество с названием «Общие друзья Джона и Майкла» и в качестве элементов добавим в него Тома и Фреда :
Общие друзья Джона и Майкла | = |
В данном случае множество «Общие друзья Джона и Майкла» является пересечением множеств друзей Джона и Майкла.
Пересечением двух (или нескольких) исходных множеств называется множество, которое состоит из элементов, принадлежащих каждому из исходных множеств.
В нашем случае элементы Том и Фред принадлежат каждому из исходных множеств, а именно: множеству друзей Джона и множеству друзей Майкла.
Тогда пересечением множеств A и B будет множество C и записываться следующим образом:
Символ ∩ означает пересечение.
Говоря о множестве, обычно подразумевают элементы, принадлежащие этому множеству. Символ пересечения ∩ читается, как союз И. Тогда выражение A ∩ B = C можно прочитать следующим образом:
«Элементы, принадлежащие множеству A И множеству B, есть элементы, принадлежащие множеству C».
«Друзья, одновременно принадлежащие Джону И Майклу, есть общие друзья Джона и Майкла».
В этом случае говорят, что исходные множества не имеют общих элементов и пересечением таких множеств является пустое множество. Пустое множество обозначается символом ∅
Зададим новое множество C и добавим в него элементы, которые одновременно принадлежат множеству A и множеству B
Зададим новое множество C и добавим в него элементы, которые одновременно принадлежат множеству A и множеству B
Пример 4. Найти пересечение следующих множеств:
Зададим новое множество D и добавим в него элементы 3 и 9. Затем с помощью символа пересечения ∩ запишем, что пересечением множеств A, B и C является множество D
Чтобы найти пересечение, вовсе необязательно задавать множества с помощью букв. Если элементов мало, то множество можно задать прямым перечислением элементов.
Числовые промежутки, которые мы рассмотрели в предыдущих уроках, тоже являются множествами. Элементами таких множеств являются числа, входящие в числовой промежуток.
Например, отрезок [2; 6] можно понимать, как множество всех чисел от 2 до 6. Для наглядности можно перечислить все целые числа, принадлежащие данному отрезку:
Следует иметь ввиду, что мы перечислили только целые числа. Отрезку [2; 6] также принадлежат и другие числа, не являющиеся целыми, например, десятичные дроби. Десятичные дроби располагаются между целыми числами, но их количество настолько велико, что перечислить их не представляется возможным.
Еще пример. Интервал (2; 6) можно понимать, как множество всех чисел от 2 до 6, кроме чисел 2 и 6. Ранее мы говорили, что интервал это такой числовой промежуток, границы которого не принадлежат ему. Для наглядности можно перечислить все целые числа, принадлежащие интервалу (2; 6) :
Поскольку числовые промежутки являются множествами, то мы можем находить пересечения между различными числовыми промежутками. Рассмотрим несколько примеров.
Оба промежутка обрамлены квадратными скобками, значит их границы принадлежат им.
Для наглядности перечислим все целые числа, принадлежащие промежуткам [2; 6] и [4; 8] :
Тогда пересечением числовых промежутков [2; 6] и [4; 8] будет числовой промежуток [4; 6]
Пример 6. Найти пересечение числовых промежутков [−2; 3] и [4; 7]
Оба промежутка обрамлены квадратными скобками, значит их границы принадлежат им.
Для наглядности перечислим все целые числа, принадлежащие промежуткам [−2; 3] и [4; 7] :
Видно, что числовые промежутки [−2; 3] и [4; 7] не имеют общих чисел. Поэтому их пересечением будет пустое множество:
Если изобразить числовые промежутки [−2; 3] и [4; 7] на координатной прямой, то можно увидеть, что они нигде не пересекаются:
Пример 7. Дано множество из одного элемента < 2 >. Найти его пересечение с промежутком (−3; 4)
Множество, состоящее из одного элемента < 2 >, на координатной прямой изображается в виде закрашенного кружка, а числовой промежуток (−3; 4) это интервал, границы которого не принадлежат ему. Значит границы −3 и 4 будут изображаться в виде пустых кружков:
Пересечением множества < 2 >и числового промежутка (−3; 4) будет множество, состоящее из одного элемента < 2 >, поскольку элемент 2 принадлежит как множеству < 2 >, так и числовому промежутку (−3; 4)
На самом деле мы уже занимались пересечением числовых промежутков, когда решали системы линейных неравенств. Вспомните, как мы решали их. Сначала находили множество решений первого неравенства, затем множество решений второго. Затем находили множество решений, которые удовлетворяют обоим неравенствам.
По сути, множество решений, удовлетворяющих обоим неравенствам, является пересечением множеств решений первого и второго неравенства. Роль этих множеств берут на себя числовые промежутки.
Например, чтобы решить систему неравенств , мы должны сначала найти множества решений каждого неравенства, затем найти пересечение этих множеств.
В данном примере решением первого неравенства x ≥ 3 является множество всех чисел, которые больше 3 (включая само число 3). Иначе говоря, решением неравенства является числовой промежуток [3; +∞)
Решением второго неравенства x ≤ 6 является множество всех чисел, которые меньше 6 (включая само число 6). Иначе говоря, решением неравенства является числовой промежуток (−∞; 6]
А общим решением системы будет пересечение множеств решений первого и второго неравенства, то есть пересечение числовых промежутков [3; +∞) и (−∞; 6]
Поэтому в качестве ответа мы указывали, что значения переменной x принадлежат числовому промежутку [3; 6], то есть пересечению множеств решений первого и второго неравенства
Пример 2. Решить неравенство
Все неравенства, входящие в систему уже решены. Нужно только указать те решения, которые являются общими для всех неравенств.
Запишем ответ к системе с помощью числового промежутка:
Пример 3. Решить неравенство
В данном случае пересечением числовых промежутков (7; +∞) и (−∞; 4) является пустое множество, поскольку эти числовые промежутки не имеют общих элементов:
Если изобразить числовые промежутки (7; +∞) и (−∞; 4) на координатной прямой, то можно увидеть, что они нигде не пересекаются:
Объединение множеств
Объединением двух (или нескольких) исходных множеств называют множество, которое состоит из элементов, принадлежащих хотя бы одному из исходных множеств.
На практике объединение множеств состоит из всех элементов, принадлежащих исходным множествам. Поэтому и говорят, что элементы такого множества принадлежат хотя бы одному из исходных множеств.
Рассмотрим множество A с элементами 1, 2, 3 и множество B с элементами 4, 5, 6.
Зададим новое множество C и добавим в него все элементы множества A и все элементы множества B
В данном случае объединением множеств A и B является множество C и обозначается следующим образом:
Символ ∪ означает объединение и заменяет собой союз ИЛИ. Тогда выражение A ∪ B = C можно прочитать так:
Элементы, принадлежащие множеству A ИЛИ множеству B, есть элементы, принадлежащие множеству C.
В определении объединения сказано, что элементы такого множества принадлежат хотя бы одному из исходных множеств. Данную фразу можно понимать в прямом смысле.
Если мы захотим объединить два или более множества и вдруг обнаружим, что один или несколько элементов принадлежат каждому из этих множеств, то в объединение повторяющиеся элементы будут входить только один раз.
Например, рассмотрим множество A с элементами 1, 2, 3, 4 и множество B с элементами 2, 4, 5, 6.
Итак, у нас имеются следующие исходные множества:
Зададим новое множество С и добавим в него все элементы множества A
Пример 2. Друзьями Джона являются Том, Фред, Макс и Джордж. А друзьями Майкла являются Лео, Том, Фред и Эван. Найти объединение множеств друзей Джона и Майкла.
Для начала зададим два множества: множество друзей Джона и множество друзей Майкла.
Друзья Джона = < | Том, Фред, Макс, Джорж > |
Друзья Майкла = < | Лео, Том, Фред, Эван > |
Зададим новое множество с названием «Все друзья Джона и Майкла» и добавим в него всех друзей Джона и Майкла.
Заметим, что Том и Фред одновременно являются друзьями Джона и Майкла, поэтому мы добавим их в новое множество только один раз, поскольку сразу двух Томов и двух Фредов не бывает.
Все друзья Джона и Майкла | = |
В данном случае множество всех друзей Джона и Майкла является объединением множеств друзей Джона и Майкла.
Друзья Джона ∪ Друзья Майкла = Все друзья Джона и Майкла
Оба промежутка обрамлены квадратными скобками, значит их границы принадлежат им.
Для наглядности перечислим все целые числа, принадлежащие этим промежуткам:
−7, −6, −5, −4, −3,−2, −1, 0, 1, 2, 3, 4, 5 ∈ [−7; 5]
Обратите внимание, что числа −3,−2, −1 принадлежали и первому промежутку и второму. Но поскольку в объединение допускается включать такие элементы только один раз, мы включили их единоразово.
Значит объединением числовых промежутков [−7; 0] и [−3; 5] будет числовой промежуток [−7; 5]
Не каждое объединение числовых промежутков является числовым промежутком. Например, попробуем найти объединение числовых промежутков [−2 ; −1] и [4 ; 7].
Числовой промежуток должен содержать все числа от левой границы до правой. Если одно из чисел отсутствует, то числовой промежуток теряет смысл. Допустим, имеется линейка длиной 15 см
Эта линейка является числовым промежутком [0; 15], поскольку содержит все числа в промежутке от 0 до 15 включительно. Теперь представим, что на линейке после числа 9 сразу следует число 12.
Решение неравенств, содержащих знак ≠
Подставим, например, число 5
5 ≠ 4 — верное неравенство, поскольку 5 не равно 4
7 ≠ 4 — верное неравенство, поскольку 7 не равно 4
Изобразим множество решений неравенства x ≠ 4 на координатной прямой. Для этого выколем точку 4 на координатной прямой, а всю оставшуюся область с обеих сторон выделим штрихами:
Пример 2. Решить неравенство 3x − 5 ≠ 1 − 2x
Перенесем −2x из правой части в левую часть, изменив знак, а −5 из левой части перенесём в правую часть, опять же изменив знак:
Приведем подобные слагаемые в обеих частях:
Разделим обе части получившегося неравенства на 5
Изобразим множество решений неравенства x ≠ 1,2 на координатной прямой и запишем ответ в виде числового промежутка:
В этом выражении говорится, что значения, принимаемые переменной x принадлежат промежутку (−∞; 1,2) или промежутку (1,2; +∞)
Решение совокупностей неравенств
Рассмотрим ещё один вид неравенств, который называется совокупностью неравенств. Такой тип неравенств, возможно, вы будете решать редко, но для общего развития полезно изучить и их.
Совокупность неравенств очень похожа на систему неравенств. Различие в том, что в системе неравенств нужно найти множество решений, удовлетворяющих каждому неравенству, образующему эту систему.
А в случае с совокупностью неравенств, нужно найти множество решений, удовлетворяющих хотя бы одному неравенству, образующему эту совокупность.
Совокупность неравенств обозначается квадратной скобкой. Например, следующая запись из двух неравенств является совокупностью:
Решим данную совокупность. Сначала нужно решить каждое неравенство по отдельности.
Например, число 9 из промежутка [3; +∞) удовлетворяет первому неравенству x ≥ 3. А число −7 из промежутка (−∞; 6] удовлетворяет второму неравенству x ≤ 6.
Стало быть, решением совокупности неравенств является объединение множеств решений первого и второго неравенства.
Иначе говоря, решением совокупности будет объединение числовых промежутков [3; +∞) и (−∞; 6]
Ответ можно оставить таким, каким мы его записали ранее:
либо заменить на более короткий:
Возьмём любое число из полученного объединения, и проверим удовлетворяет ли оно хотя бы одному неравенству.
Возьмем для примера число 8. Оно удовлетворяет первому неравенству x ≥ 3.
Возьмем еще какое-нибудь число, например, число 1. Оно удовлетворяет второму неравенству x ≤ 6
Пример 2. Решить совокупность неравенств
Чтобы решить эту совокупность, нужно найти множество решений, которые удовлетворяют хотя бы одному неравенству, образующему эту совокупность.
Множеством решений второго неравенства x ≥ −7 является числовой промежуток [−7; +∞).
Решением совокупности неравенств будет объединение множеств решений первого и второго неравенства.
Иначе говоря, решением совокупности будет объединение числовых промежутков (−∞; −0,25) и [−7; +∞)
Объединением числовых промежутков (−∞; −0,25) и [−7; +∞) является является вся координатная прямая. А вся координатная прямая это все числа, которые только могут быть
Ответ можно оставить таким, каким мы его записали ранее:
либо заменить на более короткий:
Пример 3. Решить совокупность неравенств
Решим каждое неравенство по отдельности:
Решением совокупности неравенств будет объединение множеств решений первого и второго неравенства.
Иначе говоря, решением совокупности будет объединение числовых промежутков (−∞; −3) и (−∞; 0]
Объединением числовых промежутков (−∞; −3) и (−∞; 0] является числовой промежуток (−∞; 0]
Ответ можно оставить таким, каким мы его записали ранее: