Множества: мешок с вещами, без повторов
Множество — это мешок, в котором каждый предмет лежит по одному разу, а ответ на вопрос «есть ли он там?» всегда да или нет.
Множество — это мешок с вещами. Можно бросить в один мешок Mila, Tom и Ana и назвать его A. Мешку всё равно, в каком порядке они туда попали, и всё равно, сколько раз ты бросал туда Mila: множество хранит каждую вещь по одному разу. Если спросить «Tom лежит в мешке?», возможны только два ответа: true или false. Никакого «как бы да» не бывает.
Три операции покрывают почти всё, что тебе когда-либо понадобится. Объединение (A ∪ B) — это мешок, который получается, если высыпать оба мешка в один: всё из A, всё из B, каждое имя по одному разу. Пересечение (A ∩ B) — это только то, что лежит в обоих мешках. Разность (A \\ B) — это то, что есть в A, но нет в B. Объединение читается как «или», пересечение — как «и», разность — как «не входит в».
A = { Mila, Tom, Ana }
B = { Tom, Ana, Ben }
A ∪ B (union, "or") = { Mila, Tom, Ana, Ben }
A ∩ B (intersection, "and") = { Tom, Ana }
A \ B (difference, "not in") = { Mila }
Tom ∈ A -> true
Ben ∈ A -> falseПринадлежность — это вопрос с ответом «да» или «нет»:
Это важно, потому что множество отвечает на вопрос «да» или «нет», а компьютеры невероятно хороши в вопросах с ответом да или нет. Каждый вопрос «я уже видел этого пользователя?» и каждый вопрос «такое слово уже есть?» — это проверка на принадлежность, и весь смысл выбрать множество вместо списка в том, что множество отвечает намного быстрее.
Практика
Сопоставь каждое выражение над множествами с результатом, который оно даёт для A = { Mila, Tom, Ana } и B = { Tom, Ana, Ben }.
Подсказки
- A ∪ B — это всё, что есть в A, в B или в обоих сразу.
- A \\ B выбрасывает всё, что встречается ещё и в B.
12 XP
В футбольной группе Ana, Ben, Tom. В шахматной группе Ben, Tom, Lena. Кто входит в обе группы?
Подсказки
- Спроси, кто есть в ОБОИХ списках, а не кто есть хоть в одном.
- Ана есть только в списке футбола, значит её не может быть в ответе.
11 XP
Расставь шаги алгоритма «собрать множество из списка» в том порядке, в котором они должны выполняться для списка [Tom, Ana, Tom, Ben].
Подсказки
- Добавляй имя в результат только тогда, когда его там ещё нет.
- Каждое имя из списка просматривается, даже те, что уже попали в результат.
12 XP