Множество в информатике это кратко

Обновлено: 25.06.2024

Цель работы: познакомить с понятием "множество" в языке программирования Pascal; выработать навыки работы со структурой данных множество.

Общие сведения

Под множеством понимают ограниченный, неупорядоченный набор различных элементов одного типа. В отличие от массивов к элементам множества нет прямого доступа (по индексам этих элементов, как в массивах). Поэтому ввод-вывод множеств производится с использованием операций объединения (при вводе) и проверки принадлежности (при выводе). Под мощностью множества понимают количество элементов, содержащихся в данном множестве.
Перед выполнением работы необходимо ознакомится с правилами описания и использования переменных типа множество, типизированных констант типа множество, переменных, заданных перечислением, изучить допустимые операции над переменными этих типов.

Пример

Пример1: Дан текст. Определить каких букв больше - гласных или согласных.

Этапы решения задачи: 1. Составим блок схему программы

Понятие “Множество” в математике и информатике играет очень важную роль. В математике существует целая теория множеств.

В курсе А.В. Горячева “Информатика в играх и задачах”, рассчитанного на учащихся начальной школы, тема “Множества” рассматривается и во 2 классе, и в 3 и в 4 классах. Естественно, что эта тема прорабатывается с детьми не один урок, а задания постепенно усложняются.

1. На первом уроке по теме “Множества” важно сразу же дать четкие определения тех терминов, которые потом будут использоваться в самых различных заданиях. Урок основан на использовании презентации (см. Приложение 1).

Множество произошло от слова “много”. Но в математике понятие “множество” используется более широко.

Множество может объединять любое количество предметов, чисел, существ. Каждый предмет множества называется элементом множества.

Множество, которое не содержит элементов, называется пустым.

Множество может иметь подмножества.

Множества могут пересекаться, не пересекаться, объединяться.

Равными называются множества, состоящие из одинакового числа одинаковых элементов.

(Желательно, чтобы эти определения были записаны учащимися в тетрадь, чтобы потом они могли к ним вернуться.)

Эти определения необходимо закрепить на простейших примерах, например: множество животных имеет несколько подмножеств: рыбы, птицы, звери, насекомые – и они не пересекаются. Если же мы возьмем множество морских животных, то оно будет пересекаться с множеством птиц и множеством зверей (приводятся несколько примеров). В качестве пустого множества можно дать такой пример: в яркий солнечный день на небе нет облаков, поэтому в этот день множество облаков (такое множество естественно существует) – пустое, а в другой день оно уже не будет пустым. Этот пример используется в тетради А.В. Горячева “Информатика в играх и задачах” 3 класс, часть 2. Можно привести и другие примеры, когда какое-то множество в конкретной ситуации будет пустым.

Также для удобства выполнения различных заданий необходимо ввести систему обозначения множеств (геометрические фигуры), подчеркнув, что это только условное обозначение, но оно очень удобно. Элементы множеств обозначаются точками.

Для закрепления понятия “элементы множества” учащимся предлагается следующее задание 1 (приложение 2) (его можно давать как домашнее задание, которое вклеивается в тетрадь).

2. Далее вводятся понятия, связанные с использованием логических связок в названиях множеств.

В названиях множеств и высказываниях могут употребляться логические связки: “и”, “не”, “или” и их комбинация: “не … и”, “не … или”. “не … и не …”

Если в названии множества есть связка “не”, то его элементы находятся за пределами фигуры, обозначающей это множество.

Если в названии множества есть связка “и”, то его элементы находятся на пересечении фигур, обозначающих множества.

Если в названии множества есть связка “или”, то это означает, что его элементы находятся в нескольких фигурах.




Эти схемы также необходимо закрепить с учащимися на разных примерах, включенных в задания в тетради (курс Горячева для начальной школы), а также на тех, где они сами приводят примеры различных множеств. Для закрепления понятий пересечения и объединения множеств учащимся предлагается дополнительное задание 2.

3. На следующем(их) уроке(ах) следует продолжить подробный разбор заданий, например, включив задания на пересечение трех множеств. (Желательно также, чтобы эти схемы были зарисованы учащимися в тетрадях).

При пересечении 2-х множеств образуется IV области: 2 области без пересечения, одна область пересечения множеств и одна область, лежащая за пределами выделенных множеств.


При пересечении 3-х множеств образуется VIII областей: 3 области без пересечения, 4 области пересечения множеств и 1 область, лежащая за пределами выделенных множеств.


При пересечении двух множеств закрашивается вся область пересечения этих множеств. При объединении двух множеств закрашиваются оба множества. При пересечении трех множеств закрашивается общая часть всех трех множеств. При отрицании всех трех множеств закрашивается область, не включающая в себя сами множества.


Данные схемы сделаны для задания, когда надо распределить слова, в состав которых входят буквы “С”, “Т” и “О”. Набор слов должен включать слова только с “Т”, только с “С”, только с “О”, а также одновременно с двумя и тремя буквами. Два-три слова должны быть без букв “С”, “Т”, “О”. (Например: рельсы, купе, проводник, скорость, колесо, электровоз, тамбур, вагон, сумка, место, шпалы, поезд, машинист, билет, состав, дверь, станция).




В курсе информатики А.В. Горячева в тетради 2 класса есть аналогичное задание на множества “Круглые”, “Желтые”, “Шары”.

Закрепление теоретического материала должно сопровождаться решением задач. Простейшие задачи, например, “Про коз и коров”, “Фиалки и подруги”, “Газеты и журналы” могут быть использованы даже во 2 классе (см. приложение 4). Для более сильных учеников и для более старших классов, соответственно, можно подобрать задачи нужного уровня, а можно также использовать какие-то задачи и для проведения конкурсов, КВНов, школьных олимпиад, недели математики и информатики. Подобные задачи удобно решать, используя схему множеств и обозначая элементы просто точками (если числа малые) или указывая число элементов в соответствующей области (в пересечении, без пересечения).

Множество — это коллекция, которая реализует основные математические операции над множествами: пересечения (intersection), объединение (union), разность (difference) и симметрическая разность (symmetric difference). Каждый из алгоритмов мы разберем в соответствующем разделе.

Множество

В математике множества — это коллекции объектов, у которых есть что-то общее. Например, мы можем объявить множество четных положительных целых чисел:

Или множество нечетных положительных целых:

В этих двух множествах нет общих элементов. Давайте теперь посмотрим на множество делителей числа 100:

Класс Set

Класс Set реализует интерфейс IEnumerable и принимает аргумент типа, который является наследником IComparable , так как для работы алгоритмов нужна проверка элементов на равенство.

Кроме методов для работы с множеством класс Set также имеет конструктор, который принимает IEnumerable с начальными элементами.

Метод Add

  • Поведение: Добавляет элементы в множество. Если элемент уже присутствует в множестве, бросается исключение InvalidOperationException .
  • Сложность:O(n)

При реализации метода Add необходимо решить, будем ли мы разрешать дублирующиеся элементы. К примеру, если у нас есть мнжество:

Если пользователь попытается добавить число 3, в результате получится:

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

Метод Add использует метод Contains , который будет рассмотрен далее.

Метод AddRange

  • Поведение: Добавляет несколько элементов в множество. Если какой-либо из добавляемых элементов присутствует в множестве, или в добавляемых элементах есть дублирующиеся, выбрасывается исключение InvalidOperationException .
  • Сложность:O(m·n), где m — количество вставляемых элементов и n — количество элементов множества.

Метод Remove

  • Поведение: Удаляет указанный элемент из множества и возвращает true . В случае, если элемента нет, возвращает false .
  • Сложность:O(n)

Метод Contains

  • Поведение: Возвращает true , если множество содержит указанный элемент. В противном случае возвращает false .
  • Сложность:O(n)

Метод Count

  • Поведение: Возвращает количество элементов множества или 0, если множество пусто.
  • Сложность:O(1)

Метод GetEnumerator

  • Поведение: Возвращает итератор для перебора элементов множества.
  • Сложность: Получение итератора — O(1), обход элементов множества — O(n).

Алгоритмы

Метод Union

  • Поведение: Возвращает множество, полученное операцией объединения его с указанным.
  • Сложность:O(m·n), где m и n — количество элементов переданного и текущего множеств соответственно.

Объединение множеств — это множество, которое содержит элементы, присутствующие хотя бы в одном из двух.

Например, есть два множества (выделены красным):

data_structures_031

При операции объединения выбираются элементы обоих множеств. Если элемент присутствует в обоих множествах, берется только одна его копия. Объединение двух множеств показано желтым цветом.

data_structures_032

Такая диаграмма, наглядно показывающая операции над множествами, называется диаграммой Венна.

Другой пример с использованием множеств целых чисел:

Метод Intersection

  • Поведение: Возвращает множество, полученное операцией пересечения его с указанным.
  • Сложность:O(m·n), где m и n — количество элементов переданного и текущего множеств соответственно.

Пересечение множеств содержит только те элементы, которые есть в обоих множествах. Используя диаграмму Венна, пересечение можно изобразить так:

data_structures_033

Или, используя целые числа:

Метод Difference

  • Поведение: Возвращает множество, являющееся разностью текущего с указанным.
  • Сложность:O(m·n), где m и n — количество элементов переданного и текущего множеств соответственно.

Разность множеств — это все элементы, которые содержатся в одном множестве (том, у которого вызывается метод), но не содержатся в другом (том, которое передается аргументом). Диаграмма Венна для разности множеств будет выглядеть так:

data_structures_034

Или, используя целые числа:

Метод Symmetric Difference

  • Поведение: Возвращает множество, являющееся симметрической разностью текущего с указанным.
  • Сложность:O(m·n), где m и n — количество элементов переданного и текущего множеств соответственно.

Симметрическая разность — это все элементы, которые содержатся только в одном из рассматриваемых множеств. Диаграмма Венна для симметрической разности будет выглядеть так:

data_structures_035

Или, используя целые числа:

Итак, мы хотим получить множество, которое содержит все элементы из двух множеств, за исключением тех, которые есть в обоих. Другими словами, мы хотим получить разность объединения двух множеств и их пересечения.

Или, если рассматривать по шагам:

Что дает нам нужный результат: [1, 2, 5, 6] .

Метод IsSubset

Вы, возможно, интересуетесь, почему мы не добавили метод IsSubset , который проверяет, содержится ли одно множество целиком в другом. Например:

Дело в том, что эту проверку можно провести, используя имещиеся методы. К примеру:

Пустое множество в результате говорит нам о том, что все элементы первого множества содержатся во втором, а значит, первое является подмножеством второго. Другой способ проверить это:

Если в результате мы получим множество с таким же количеством элементов, что и изначальное, значит, оно является подмножеством второго.

В общем случае, конечно, класс Set может иметь метод IsSubset (который может быть реализован более эффективно). Однако стоит помнить, что это уже не какая-то новая возможность, а просто другое применение существующих.

Продолжение следует

На этом все, а в следующий раз мы перейдем к заключительной теме этого цикла статей — алгоритмам сортировки.

image

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

Когда-то давным давно во всех академических дисциплинах было заложено фундаментальное убеждение — существует единственная бесконечность.


С 1874 по 1897 год Кантор неистово публиковал статью за статьёй, разворачивая свою теорию абстрактных множеств в расцветающую дисциплину. Однако она была встречена упорным сопротивлением и критикой; многие педанты считали, что его теории перешли в область философии и нарушили принцип религии.

Однако когда начали находиться практические применения математического анализа, отношение к теории изменилось, а идеи и результаты Кантора начали получать признание. К первому десятилению 20-го века его наблюдения, теории и публикации достигли своей кульминации — признания современной теории множеств новой, совершенно уникальной областью математики:

Теория множеств — это математическая теория о точно определённых наборах (множествах) отдельных объектов, называемых членами или элементами множества.

Сколько чисел есть между 0 и 1?

Первая публикация Кантора, состоящая из четырёх с половиной страниц, является великолепным примером краткости. Она разделена на два отдельных доказательства, совместно приводящих к выводу о существовании по крайней мере двух уникальных видов множеств.

Если говорить вкратце, то набор, или множество всех вещественных алгебраических чисел можно вывести с помощью какого-то теоретического ряда многочленов с различными степенями и коэффициентами; следовательно, множество всех вещественных алгебраических чисел является бесконечным счётным множеством.

Во второй части труда Кантора анализируется роль вещественных комплексных чисел, также называющихся трансцендентными числами. Транцендентные числа (лучшие примеры которых — это пи и e) имеют любопытное свойство: математически невозможно вывести их с помощью многочленной функции — они не являются алгебраическими. Вне зависимости от величин, количества частей, степеней или коэффициентов, никакой ряд никогда не может посчитать пи в своём наборе бесконечного счётного множества.

Затем Кантор указывает, что в любом замкнутом интервале [a,b] существует хотя бы одно транцендентное число, которое никогда нельзя будет подсчитать в бесконечном счётном множестве. Поскольку одно такое число существует, то предполагается, что в семействе вещественных чисел существует бесконечное количество транцендентных чисел.

Таким образом он доказал очень чёткое различие между множеством непрерывных, идущих потоком несчётных чисел и набора счётных чисел, которые можно представить как ряд, например, всех вещественных алгебраических чисел.

Далее: запись и операции

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


Вооружившись базовым пониманием истории множеств и совершив кратковременное погружение в глубины его влияния, мы можем приступать к знакомству с основами системы обозначений теории множеств.

image

Часть вторая. Краткий обзор операций, обозначений и диаграмм Венна.

Как сказано в предыдущей части, одно из фундаментальных преимуществ теории множеств произрастает не из какой-то конкретной теории, а из созданного ею языка. Именно поэтому основная часть этого раздела будет посвящена обозначениям, операциям и визуальному представлению теории множеств. Давайте начнём с объяснения базовых символов обозначения множества — соответствующих ему элементов. В таблице ниже показан пример одного множества A с тремя элементами:


В первой строке показано множество A с тремя отдельными элементами (A = ); во второй строке показан правильный способ обозначения отдельного конкретного элемента 1, принадлежащего множеству A. Пока всё довольно просто, но теория множеств становится существенно интереснее, когда мы добавляем второе множество — начинается путешествие по стандартным операциям.

Для показанной выше таблицы давайте введём два дополнительных множества B и C, содержащие следующие элементы: B = , C = . Хоть мы и создали три множества (A,B и C), в показанных ниже примерах операции выполняются одновременно только с двумя множествами, поэтому внимательно следите за тем, какие множества указаны в самом левом столбце. В показанной ниже таблице представлено пять самых распространённых операндов множеств:


Операции: пересечение (intersection) — множество элементов, принадлежащих множеству A и множеству B;

объединение (union) — множество элементов, принадлежащих множеству A или множеству B;

подмножество (subset) — C является подмножеством A, множество C включено во множество A;

собственное (истинное) подмножество — C является подмножеством A, но C не равно A;

относительное дополнение (relative complement) — множество элементов, принадлежащих к A и не к B.

Вот и они, самые распространённые операции в теории множеств; они довольно популярны и в областях за пределами чистой математики. На самом деле, высока вероятность того, что вы уже видели подобные типы операций в прошлом, хоть и не совсем с такой терминологией, и даже пользовались ими. Хорошая иллюстрация: попросите любого студента описать диаграмму Венна из двух пересекающихся групп, и он интуитивно придёт к правильному результату.

Ещё раз взгляните на последнюю строку, относительное дополнение — какое необычное сочетание слов, правда? Относительное к чему? Если относительное дополнение A — B определяется как A и не B, то как нам обозначить всё, что не является B?

Универсальное множество — пустое множество

Оказывается, если мы хотим получить значимый ответ, то для начала нужно предоставить генеральной совокупности нашей задачи множеств некий контекст. Он часто явным образом задаётся в начале задачи, когда допустимые элементы множества ограничиваются некоторым фиксированным классом объектов, в котором существует универсальное множество, являющееся общим множеством, содержащим все элементы для этой конкретной задачи. Например, если мы хотели бы работать со множествами только из букв английского алфавита, то наше универсальное множество U состояло бы из 26 букв алфавита.

Для любого подмножества A множества U дополнение множества A (обозначаемое A′ или UA) определяется как множество всех элементов в генеральной совокупности U, которое не находится в A. Если вернуться к поставленному выше вопросу, то дополнением множества B является всё в пределах универсального множества, что не принадлежит B, в том числе и A.

Диаграммы Венна и остальное

Диаграммы Венна, официально изобретённые в 1880 году Джоном Венном, являются именно тем, что вы и представляете, хотя их научное определение звучит примерно так:

Ниже показано изображение шести самых распространённых диаграмм Венна, и почти во всех показаны недавно изученные нами операнды:


Объединение (union), пересечение (intersection), относительное дополнение (relative complement), симметрическая разность (symmetric difference), собственное множество (proper subset), абсолютное дополнение (universal дополнение).

Начав с очень простых обозначений множества и его элементов, мы узнали затем о базовых операциях, позволивших нарисовать эту визуальную подсказку. Мы рассмотрели все операции, за исключением симметрической разности (внизу слева). Чтобы не оставлять пробелов в знаниях, скажем, что симметрическая разность, также называемая дизъюнктивным объединением — это просто множество элементов, которые находятся в любом из множеств, но не входят в их пересечение.

Закончим мы этот раздел введением понятия мощности (кардинального числа). Мощность множества, обозначаемая символом абсолютного значения — это просто количество уникальных элементов, содержащихся в определённом множестве. Для показанного выше примера мощность трёх множеств равна: |A| = 3, |B| =6, |C| = 2.

Прежде чем двигаться дальше, дам вам пищу для размышлений — какова связь между мощностью и количеством возможных подмножеств?

image

Часть 3. Мощность и показательные множества

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

Количество уникальных элементов во множестве, также известное как мощность, предоставляет нам фундаментальную опорную точку для дальнейшего, более глубокого анализа этого множества. Во-первых, мощность — это первое из рассматриваемых нами уникальных свойств, позволяющее нам объективно сравнивать различные виды множеств, проверяя, существует ли биекция (это, с небольшими оговорками, просто более изысканный термин для function ) одного множества на другое. Ещё один способ применения мощности, а также тема этой части статьи — мощность позволяет оценить все возможные подмножества, существующие в данном множестве. Что достаточно буквально можно применять в повседневных задачах распределения решений, будь то планирование бюджета на поездку в продуктовый магазин или оптимизация портфеля акций.


Примеры мощности множеств

Например, в таблице выше показаны пять отдельных множеств с их указанной справа мощностью. Как мы уже говорили, символ мощности напоминает символ абсолютного значения — значение, заключённое между двумя вертикальными линиями. Все примеры понятны, за исключением, возможно, последней строки, которая подчёркивает тот факт, что на мощность влияют только уникальные элементы множества.

Помните подмножества из предыдущей части статьи? Оказывается, что мощность некоторого множества A и количество возможных подмножеств множества A имеют удивительную связь. Ниже показано, что количество подмножеств, которые можно составить из некоторого подмножества, увеличивается с порядком мощности на предсказуемую величину:

Показательное множество (булеан)

Прежде чем мы вычислим все подмножества для примера множества C, я хотел бы ввести последнее понятие — булеан.

Булеан обозначается заглавной буквой S, за которой в скобках указывается исходное множество S(С). Булеан — это множество всех подмножеств C, включая пустое множество и само множество C. В таблице ниже показан булеан S(С) со всеми перестановками возможных подмножеств для множества C, содержащихся в одном большом множестве.


Для удобства форматирования я убрал запятые между множествами***

Чем может быть полезен булеан? На самом деле, вы скорее всего много раз интуитивно использовали булеаны, даже об этом не догадываясь. Каждый раз, когда вы выбираете подмножество элементов из более крупного множества, вы выбираете элемент булеана. Например ребёнок внимательно изучающий кондитерский магазин с купюрой в 5 долларов — какой элемент булеана множества всех доступных сладостей он выберет? Или если взять более технический пример: вам, как разработчику ПО может потребоваться запросить всех возможных пользователей базы данных, также обладающих свойством X и Y — ещё один случай, в котором одно подмножество выбирается из всех возможных подмножеств.

Эквивалентность и биективная функция

Теперь мы понимаем, что такое мощность множества, почему оно важно, и его связь с булеаном. Поэтому вернёмся ненадолго к тому, что упоминали в самом начале: что конкретно определяет эквивалентность в теории множеств?

image

Часть 4. Функции.

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


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

Инъекции, сюръекции и биекции

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

Прочитайте заново представленный выше список пунктов. Биекция — это просто функция, удовлетворяющая обоим предыдущим требованиям; то есть, функция инъективна и сюръективна. Инъективная функция не должна быть сюръективной, а сюръективная — инъективной. Ниже показан визуальный пример, в котором эти три классификации привели к созданию функций множеств, определяемых четырьмя возможными комбинациями инъективных и сюръективных свойств:

image

Биекция (инъекция + сюръекция), инъекция (инъекция + не-сюръекция), сюръекция (не-инъекция + сюръеция), без классификации (не-инъекция + не-сюръекция)

Вот и всё! Теперь мы обладаем элементарным пониманием самых часто встречаемых соотношений, встречающихся в мире множеств. Однако это ни в коем случае не конец нашего пути: напротив, это самое начало.

Фундаментальные основы теории множеств — ключ к пониманию более высокоуровневых областей математики. Чтобы продолжить наше движение вверх, к этим различным областям, далее нужно будет, пользуясь своими знаниями о теории множеств, уяснить одну из самых революционных теорий в истории математики: систему аксиом Цермело-Френкеля.

Читайте также: