HTML Diff
0 added 0 removed
Original 2026-01-01
Modified 2026-02-26
1 <p><strong>Мы знаем довольно много о структурах данных, понимаем их устройство, разбираемся, какие структуры работают быстро и помогают решать конкретные задачи. Но эти знания бесполезны, если мы не понимаем, как это использовать в реальной жизни. Это похоже на изучение геометрии в школе. Вы долго считаете предмет бесполезным, пока однажды не появляется необходимость рассчитать площадь пола, чтобы заказать новое ковровое покрытие. Впрочем, пользу геометрии можно почувствовать, даже если вы никогда не считали площадь пола в комнате самостоятельно.</strong></p>
1 <p><strong>Мы знаем довольно много о структурах данных, понимаем их устройство, разбираемся, какие структуры работают быстро и помогают решать конкретные задачи. Но эти знания бесполезны, если мы не понимаем, как это использовать в реальной жизни. Это похоже на изучение геометрии в школе. Вы долго считаете предмет бесполезным, пока однажды не появляется необходимость рассчитать площадь пола, чтобы заказать новое ковровое покрытие. Впрочем, пользу геометрии можно почувствовать, даже если вы никогда не считали площадь пола в комнате самостоятельно.</strong></p>
2 <p>Сегодня поговорим о структуре данных, которая в теории очень догматична, а на практике очень популярна. На самом деле вы так или иначе уже сталкивались с этой структурой, а также слышали о ней на уроках математики в школе. Вы уже догадались, что речь идёт о множествах.</p>
2 <p>Сегодня поговорим о структуре данных, которая в теории очень догматична, а на практике очень популярна. На самом деле вы так или иначе уже сталкивались с этой структурой, а также слышали о ней на уроках математики в школе. Вы уже догадались, что речь идёт о множествах.</p>
3 <h2>Содержание</h2>
3 <h2>Содержание</h2>
4 <ul><li><a>Теория множеств без страха</a></li>
4 <ul><li><a>Теория множеств без страха</a></li>
5 <li><a>Об операциях с множествами без боли</a></li>
5 <li><a>Об операциях с множествами без боли</a></li>
6 <li><a>Множества вокруг нас</a></li>
6 <li><a>Множества вокруг нас</a></li>
7 <li><a>Заключение</a></li>
7 <li><a>Заключение</a></li>
8 </ul><h2>Теория множеств без страха</h2>
8 </ul><h2>Теория множеств без страха</h2>
9 <p>Прежде чем разбирать устройство множеств, давайте поймём, откуда они появляются. То есть давайте сразу погрузимся в теорию - да-да, в теорию множеств! Не бойтесь сложностей - высока вероятность того, что вы уже так или иначе использовали эту теорию. Возможно, вы сталкивались с теорией множеств, когда проходили в школе диаграмму Венна. Диаграмму Венна включили в программу изучения множеств, так как она хорошо иллюстрирует отношения подмножеств.</p>
9 <p>Прежде чем разбирать устройство множеств, давайте поймём, откуда они появляются. То есть давайте сразу погрузимся в теорию - да-да, в теорию множеств! Не бойтесь сложностей - высока вероятность того, что вы уже так или иначе использовали эту теорию. Возможно, вы сталкивались с теорией множеств, когда проходили в школе диаграмму Венна. Диаграмму Венна включили в программу изучения множеств, так как она хорошо иллюстрирует отношения подмножеств.</p>
10 <p>Мы выяснили, что теория множеств не должна никого пугать. Теперь пришло время разобраться, что это за теория на самом деле. Множество - математическая концепция. Теорией множеств описывают отношения множеств.</p>
10 <p>Мы выяснили, что теория множеств не должна никого пугать. Теперь пришло время разобраться, что это за теория на самом деле. Множество - математическая концепция. Теорией множеств описывают отношения множеств.</p>
11 <blockquote><p>Множество - ни что иное, как неупорядоченная коллекция, в которой нет дублирующихся элементов.</p>
11 <blockquote><p>Множество - ни что иное, как неупорядоченная коллекция, в которой нет дублирующихся элементов.</p>
12 </blockquote><p>В этом определении есть три важных слова: "неупорядоченная", "дублирующихся" и "элементов". Эти слова точно передают суть и устройство множества. Если мы это запомним, то будем знать основную информацию о том, как работает эта структура данных.</p>
12 </blockquote><p>В этом определении есть три важных слова: "неупорядоченная", "дублирующихся" и "элементов". Эти слова точно передают суть и устройство множества. Если мы это запомним, то будем знать основную информацию о том, как работает эта структура данных.</p>
13 <p>Нужно понять, почему это важно. Для начала давайте посмотрим на множества в действии. Как сказано выше, отношения множеств удачно иллюстрирует диаграмма Венна. Давайте взглянем на два множества: книги, которые есть у человека дома, и книги, которые этот человек прочитал.</p>
13 <p>Нужно понять, почему это важно. Для начала давайте посмотрим на множества в действии. Как сказано выше, отношения множеств удачно иллюстрирует диаграмма Венна. Давайте взглянем на два множества: книги, которые есть у человека дома, и книги, которые этот человек прочитал.</p>
14 <p>Если вы знакомы с диаграммой Венна, то понимаете, что в центре в зелёном круге находятся книги, которыми человек владеет, и которые он прочитал. Здесь множества пересекаются. Также вы понимаете, что два множества - прочитанные человеком книги и книги, которые есть у человека - существуют внутри другого множества. Это все существующие в мире книги.</p>
14 <p>Если вы знакомы с диаграммой Венна, то понимаете, что в центре в зелёном круге находятся книги, которыми человек владеет, и которые он прочитал. Здесь множества пересекаются. Также вы понимаете, что два множества - прочитанные человеком книги и книги, которые есть у человека - существуют внутри другого множества. Это все существующие в мире книги.</p>
15 <p>Диаграмма Венна - хорошая база для понимания теории множеств, так как с её помощью легче понять более сложные вещи. Допустим, вы хотите представить два множества книг в какой-то структуре данных. Вы уже знаете, что книги надо разделить на два множества: которые человек прочитал и которые есть у него дома. Для удобства назовём первое множество Set X, а второе Set Y. Эти множества после реконфигурации в структуры данных можно представить с помощью диаграммы Венна.</p>
15 <p>Диаграмма Венна - хорошая база для понимания теории множеств, так как с её помощью легче понять более сложные вещи. Допустим, вы хотите представить два множества книг в какой-то структуре данных. Вы уже знаете, что книги надо разделить на два множества: которые человек прочитал и которые есть у него дома. Для удобства назовём первое множество Set X, а второе Set Y. Эти множества после реконфигурации в структуры данных можно представить с помощью диаграммы Венна.</p>
16 <p>Можно заметить, что множества Set X и Set Y стали похожи на объекты или хэши: элементы внутри них не имеют индексов или других элементов, позволяющих их упорядочить. В них также нет повторяющихся элементов, что делает эти структуры данных множествами. Как вы уже знаете, множество - это коллекция неупорядоченных элементов, которые не повторяются.</p>
16 <p>Можно заметить, что множества Set X и Set Y стали похожи на объекты или хэши: элементы внутри них не имеют индексов или других элементов, позволяющих их упорядочить. В них также нет повторяющихся элементов, что делает эти структуры данных множествами. Как вы уже знаете, множество - это коллекция неупорядоченных элементов, которые не повторяются.</p>
17 <blockquote><p>Начните изучать разработку с бесплатного курса<a>"Основы современной вёрстки"</a>. Вы научитесь создавать статические веб-страницы, стилизовать элементы, использовать редакторы кода с полезными расширениями. В конце курса вы опубликуете свой первый сайт на GitHub Pages.</p>
17 <blockquote><p>Начните изучать разработку с бесплатного курса<a>"Основы современной вёрстки"</a>. Вы научитесь создавать статические веб-страницы, стилизовать элементы, использовать редакторы кода с полезными расширениями. В конце курса вы опубликуете свой первый сайт на GitHub Pages.</p>
18 </blockquote><h2>Об операциях с множествами без боли</h2>
18 </blockquote><h2>Об операциях с множествами без боли</h2>
19 <p>Какие возможности открывает представление множеств в формате структур данных? С ними теперь можно выполнять разные операции. Две самые важные операции, которые выполняются над множествами - это пересечение и объединение.</p>
19 <p>Какие возможности открывает представление множеств в формате структур данных? С ними теперь можно выполнять разные операции. Две самые важные операции, которые выполняются над множествами - это пересечение и объединение.</p>
20 <p>Пересечение множеств часто записывается с помощью такой записи: X ∩ Y. Пересечение определяет, где два множества пересекаются. Другими словами, эта операция возвращает все элементы, которые входят в два множества. В нашем примере пересечение Set X и Set Y возвращает все книги, которые человек читал и которые есть у него дома. Хороший ключ к пониманию пересечения - ключевое слово "и". Мы получаем книги, которые человек читал<strong>и</strong>которые есть у него дома. Несмотря на то, что полученные с помощью пересечения книги существуют в двух множествах, мы не повторяем их, так как в множестве могут быть только уникальные элементы.</p>
20 <p>Пересечение множеств часто записывается с помощью такой записи: X ∩ Y. Пересечение определяет, где два множества пересекаются. Другими словами, эта операция возвращает все элементы, которые входят в два множества. В нашем примере пересечение Set X и Set Y возвращает все книги, которые человек читал и которые есть у него дома. Хороший ключ к пониманию пересечения - ключевое слово "и". Мы получаем книги, которые человек читал<strong>и</strong>которые есть у него дома. Несмотря на то, что полученные с помощью пересечения книги существуют в двух множествах, мы не повторяем их, так как в множестве могут быть только уникальные элементы.</p>
21 <p>Объединение двух множеств обозначается так: X ∪ Y. Объединение возвращает общность двух множеств или объединённое множество. Иными словами, с помощью объединения множеств можно получить новое множество элементов, которые существуют хотя бы в одном исходном множестве. В нашем случае объединение вернёт все книги, которые человек читал, а также все книги, которые есть у него дома. Обратите внимание, если книга входит одновременно в Set X и Set Y, она не может дублироваться в новом множестве после объединения, так как в множества входят только уникальные элементы.</p>
21 <p>Объединение двух множеств обозначается так: X ∪ Y. Объединение возвращает общность двух множеств или объединённое множество. Иными словами, с помощью объединения множеств можно получить новое множество элементов, которые существуют хотя бы в одном исходном множестве. В нашем случае объединение вернёт все книги, которые человек читал, а также все книги, которые есть у него дома. Обратите внимание, если книга входит одновременно в Set X и Set Y, она не может дублироваться в новом множестве после объединения, так как в множества входят только уникальные элементы.</p>
22 <p>С помощью диаграммы Венна пересечение и объединение можно представить так:</p>
22 <p>С помощью диаграммы Венна пересечение и объединение можно представить так:</p>
23 <p>Теперь давайте рассмотрим более сложные вещи. Объединение и пересечение - важные операции над множествами, но это только азы теории. Нам надо познакомиться с другими операциями, чтобы решать более серьёзные задачи. Важно понимать разность множеств и относительные дополнения множеств. Ниже мы разберём, почему это важные операции, но сначала нужно понять, как они работают.</p>
23 <p>Теперь давайте рассмотрим более сложные вещи. Объединение и пересечение - важные операции над множествами, но это только азы теории. Нам надо познакомиться с другими операциями, чтобы решать более серьёзные задачи. Важно понимать разность множеств и относительные дополнения множеств. Ниже мы разберём, почему это важные операции, но сначала нужно понять, как они работают.</p>
24 <p>Как понятно из названия, разность множеств определяет разницу между множествами. Иными словами, мы определяем, какие элементы останутся в множестве X, если удалить из него все элементы, которые содержатся в множестве Y. Это действие можно обозначить так: X - Y. В примере на иллюстрации ниже разница между множеством X и множеством Y - это элементы, которые существуют в Set X, но не существуют в Set Y. Они обозначены буквами C, Z и W.</p>
24 <p>Как понятно из названия, разность множеств определяет разницу между множествами. Иными словами, мы определяем, какие элементы останутся в множестве X, если удалить из него все элементы, которые содержатся в множестве Y. Это действие можно обозначить так: X - Y. В примере на иллюстрации ниже разница между множеством X и множеством Y - это элементы, которые существуют в Set X, но не существуют в Set Y. Они обозначены буквами C, Z и W.</p>
25 <p>Относительное дополнение - противоположность разности множеств. Например, относительное дополнение Y по сравнению с X возвращает все элементы множества Y, которые не входят в множество X. Относительное дополнение можно обозначить так: X \ Y. Относительное дополнение X \ Y фактически возвращает такой же набор элементов, как разность Y - X. В нашем примере множество Y меньше множества X. Единственный элемент, который входит в Set Y, но не входит в Set X - число 2.</p>
25 <p>Относительное дополнение - противоположность разности множеств. Например, относительное дополнение Y по сравнению с X возвращает все элементы множества Y, которые не входят в множество X. Относительное дополнение можно обозначить так: X \ Y. Относительное дополнение X \ Y фактически возвращает такой же набор элементов, как разность Y - X. В нашем примере множество Y меньше множества X. Единственный элемент, который входит в Set Y, но не входит в Set X - число 2.</p>
26 <blockquote><p>По сути, мы просто вычитаем множество X из множества Y и отвечаем на вопрос: что существует в Y, чего нет в X?</p>
26 <blockquote><p>По сути, мы просто вычитаем множество X из множества Y и отвечаем на вопрос: что существует в Y, чего нет в X?</p>
27 </blockquote><p>Вы могли заметить, что в части примеров мы имеем дело со строками, в другой части в качестве элементов выступают буквы и числа. Здесь надо подчеркнуть важный момент: множество может включать любой тип элементов или объектов. Вы можете рассматривать множества как хэши: они включают любые сущности, если те встречаются во множестве только один раз.</p>
27 </blockquote><p>Вы могли заметить, что в части примеров мы имеем дело со строками, в другой части в качестве элементов выступают буквы и числа. Здесь надо подчеркнуть важный момент: множество может включать любой тип элементов или объектов. Вы можете рассматривать множества как хэши: они включают любые сущности, если те встречаются во множестве только один раз.</p>
28 <p>Теперь давайте рассмотрим ещё одну операцию, она самая сложная из всех. Но не пугайтесь, с ней тоже можно разобраться.</p>
28 <p>Теперь давайте рассмотрим ещё одну операцию, она самая сложная из всех. Но не пугайтесь, с ней тоже можно разобраться.</p>
29 <p>В некоторых случаях требуется найти противоположность пересечению множеств. Иными словами, речь идёт о книгах, которые есть у человека, и книгах, которые он прочитал, но которые не входят одновременно в оба множества. Как назвать это подмножество? И как найти его?</p>
29 <p>В некоторых случаях требуется найти противоположность пересечению множеств. Иными словами, речь идёт о книгах, которые есть у человека, и книгах, которые он прочитал, но которые не входят одновременно в оба множества. Как назвать это подмножество? И как найти его?</p>
30 <p>Правильное название для этого кейса - симметрическая разность множеств. Также употребляют термины "дизъюнктивное объединение" и "несвязное объединение". Симметрическая разность возвращает все элементы, которые входят в одно из множеств, но не входят в пересечение этих множеств. Пример на иллюстрации поможет разобраться с дизъюнктивным объединением.</p>
30 <p>Правильное название для этого кейса - симметрическая разность множеств. Также употребляют термины "дизъюнктивное объединение" и "несвязное объединение". Симметрическая разность возвращает все элементы, которые входят в одно из множеств, но не входят в пересечение этих множеств. Пример на иллюстрации поможет разобраться с дизъюнктивным объединением.</p>
31 <p>В примере выше симметрическая разность похожа на поиск относительного дополнения множества X и множества Y. Если подходить к этому с позиции математики, поиск симметричной разницы - то же самое, что и объединение относительных дополнений множества X и множества Y. Эту операцию можно записать так: X △ Y= (X ∖ Y) ∪ (Y ∖ X).</p>
31 <p>В примере выше симметрическая разность похожа на поиск относительного дополнения множества X и множества Y. Если подходить к этому с позиции математики, поиск симметричной разницы - то же самое, что и объединение относительных дополнений множества X и множества Y. Эту операцию можно записать так: X △ Y= (X ∖ Y) ∪ (Y ∖ X).</p>
32 <p>Но не дайте сбить себя с толку!</p>
32 <p>Но не дайте сбить себя с толку!</p>
33 <blockquote><h3>Читайте также:</h3>
33 <blockquote><h3>Читайте также:</h3>
34 <p>Что такое JVM? Знакомство с<a>виртуальной машиной Java</a>.</p>
34 <p>Что такое JVM? Знакомство с<a>виртуальной машиной Java</a>.</p>
35 </blockquote><p>Всё, что нужно для поиска симметрической разности - найти элементы, которые есть в множестве X, но отсутствуют в множестве Y, и какие элементы есть в множестве Y, но отсутствуют в множестве X. Иными словами, надо найти уникальные элементы в каждом множестве.</p>
35 </blockquote><p>Всё, что нужно для поиска симметрической разности - найти элементы, которые есть в множестве X, но отсутствуют в множестве Y, и какие элементы есть в множестве Y, но отсутствуют в множестве X. Иными словами, надо найти уникальные элементы в каждом множестве.</p>
36 <p>В примере выше числа 1, 2 и 3 входят в множества X и Y одновременно. А буквы A, B, C, X, Y, Z входят только в множества X или Y. Поэтому они представляют симметрическую разность множеств X и Y.</p>
36 <p>В примере выше числа 1, 2 и 3 входят в множества X и Y одновременно. А буквы A, B, C, X, Y, Z входят только в множества X или Y. Поэтому они представляют симметрическую разность множеств X и Y.</p>
37 <p>Мы рассмотрели теоретические вопросы. Теперь можно посмотреть, как теория множеств работает на практике.</p>
37 <p>Мы рассмотрели теоретические вопросы. Теперь можно посмотреть, как теория множеств работает на практике.</p>
38 <h2>Множества вокруг нас</h2>
38 <h2>Множества вокруг нас</h2>
39 <p>К этому моменту вы наверняка задумались, зачем надо изучать теорию множеств. Это хороший вопрос, и пришло время ответить на него.</p>
39 <p>К этому моменту вы наверняка задумались, зачем надо изучать теорию множеств. Это хороший вопрос, и пришло время ответить на него.</p>
40 <p>Уже догадались? Множества повсюду. Это структуры данных, которые мы можем использовать при работе с разными языками программирования, например, Python, Java, Ruby, JavaScript и так далее. Если вы знакомы с этими или другими языками программирования, то уже вспомнили методы, которые позволяют работать с множествами.</p>
40 <p>Уже догадались? Множества повсюду. Это структуры данных, которые мы можем использовать при работе с разными языками программирования, например, Python, Java, Ruby, JavaScript и так далее. Если вы знакомы с этими или другими языками программирования, то уже вспомнили методы, которые позволяют работать с множествами.</p>
41 <p>Вот пример на JavaScript.</p>
41 <p>Вот пример на JavaScript.</p>
42 <p>Очевидно, что имена методов могут меняться в зависимости от языка. Например, метод<em>has</em>из примера выше в Ruby называется<em>include?</em>, но эти методы работают практически одинаково. А в Python при работе с множествами можно использовать методы<em>intersection</em>,<em>union</em>и<em>symmetric_difference</em>.</p>
42 <p>Очевидно, что имена методов могут меняться в зависимости от языка. Например, метод<em>has</em>из примера выше в Ruby называется<em>include?</em>, но эти методы работают практически одинаково. А в Python при работе с множествами можно использовать методы<em>intersection</em>,<em>union</em>и<em>symmetric_difference</em>.</p>
43 <p>Но в чём именно польза множеств? Понятно, что с ними можно работать в разных языках программирования, но зачем это нужно на практике?</p>
43 <p>Но в чём именно польза множеств? Понятно, что с ними можно работать в разных языках программирования, но зачем это нужно на практике?</p>
44 <p>Один из моментов - множества могут сэкономить вам много времени. Помните все эти сложные операции -<em>intersection</em>,<em>union</em>,<em>difference</em>? Уже догадались? Продолжительность выполнения этих операций зависит от размера множеств. Это связано с тем, что для выполнения операций нам надо обойти все элементы множества. Обычно даже гигантские множества можно обойти достаточно быстро.</p>
44 <p>Один из моментов - множества могут сэкономить вам много времени. Помните все эти сложные операции -<em>intersection</em>,<em>union</em>,<em>difference</em>? Уже догадались? Продолжительность выполнения этих операций зависит от размера множеств. Это связано с тем, что для выполнения операций нам надо обойти все элементы множества. Обычно даже гигантские множества можно обойти достаточно быстро.</p>
45 <p>Но как насчёт основных операций? Как насчёт добавления элементов в одно из множеств, удаления элементов, поиска конкретного элемента в множестве? Все эти операции выполняются за константное время или 0(1). Это очень мощный инструмент, и это значит, что множества могут быть даже более удобной структурой данных, чем словарь или хэш.</p>
45 <p>Но как насчёт основных операций? Как насчёт добавления элементов в одно из множеств, удаления элементов, поиска конкретного элемента в множестве? Все эти операции выполняются за константное время или 0(1). Это очень мощный инструмент, и это значит, что множества могут быть даже более удобной структурой данных, чем словарь или хэш.</p>
46 <p>Но подождите, почему все операции с множествами выполняются так быстро? Как это возможно? Как оказалось, под капотом множества представляют собой хэши. Теперь вся информация собирается воедино. С хэш-таблицами знакомо большинство программистов, но почему с их помощью так удобно реализовывать множества?</p>
46 <p>Но подождите, почему все операции с множествами выполняются так быстро? Как это возможно? Как оказалось, под капотом множества представляют собой хэши. Теперь вся информация собирается воедино. С хэш-таблицами знакомо большинство программистов, но почему с их помощью так удобно реализовывать множества?</p>
47 <p>Это возможно благодаря нескольким факторам. Первый: в хэш-таблицах каждый элемент всегда имеет уникальный индекс. Это очень хорошо с точки зрения реализации множеств, так как множества могут включать только уникальные элементы. Второй фактор: в хэш-таблицах порядок элементов не имеет значения. В множествах порядок элементов тоже не имеет значения. Наконец, хэш-таблицы обеспечивют константное время доступа 0(1). Это идеально для выполнения базовых операций с множествами.</p>
47 <p>Это возможно благодаря нескольким факторам. Первый: в хэш-таблицах каждый элемент всегда имеет уникальный индекс. Это очень хорошо с точки зрения реализации множеств, так как множества могут включать только уникальные элементы. Второй фактор: в хэш-таблицах порядок элементов не имеет значения. В множествах порядок элементов тоже не имеет значения. Наконец, хэш-таблицы обеспечивют константное время доступа 0(1). Это идеально для выполнения базовых операций с множествами.</p>
48 <h2>Заключение</h2>
48 <h2>Заключение</h2>
49 <p>Теория множеств используется в разных областях computer science. Это важная для программистов концепция, понимание которой помогает разработчикам эффективно работать с данными.</p>
49 <p>Теория множеств используется в разных областях computer science. Это важная для программистов концепция, понимание которой помогает разработчикам эффективно работать с данными.</p>
50 <p><em>Адаптированный перевод статьи<a>Set Theory: the Method To Database Madness</a>by Vaidehi Joshi.</em></p>
50 <p><em>Адаптированный перевод статьи<a>Set Theory: the Method To Database Madness</a>by Vaidehi Joshi.</em></p>
51 <p>.</p>
51 <p>.</p>