SkillGridИзучай computer science на практике

Множества: мешок с вещами, без повторов

Множество — это мешок, в котором каждый предмет лежит по одному разу, а ответ на вопрос «есть ли он там?» всегда да или нет.

10 мин · 35 XP

Множество — это мешок с вещами. Можно бросить в один мешок 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

Принадлежность — это вопрос с ответом «да» или «нет»:

Это важно, потому что множество отвечает на вопрос «да» или «нет», а компьютеры невероятно хороши в вопросах с ответом да или нет. Каждый вопрос «я уже видел этого пользователя?» и каждый вопрос «такое слово уже есть?» — это проверка на принадлежность, и весь смысл выбрать множество вместо списка в том, что множество отвечает намного быстрее.

Практика

  1. Сопоставь каждое выражение над множествами с результатом, который оно даёт для A = { Mila, Tom, Ana } и B = { Tom, Ana, Ben }.

    Подсказки
    • A ∪ B — это всё, что есть в A, в B или в обоих сразу.
    • A \\ B выбрасывает всё, что встречается ещё и в B.

    12 XP

  2. В футбольной группе Ana, Ben, Tom. В шахматной группе Ben, Tom, Lena. Кто входит в обе группы?

    Подсказки
    • Спроси, кто есть в ОБОИХ списках, а не кто есть хоть в одном.
    • Ана есть только в списке футбола, значит её не может быть в ответе.

    11 XP

  3. Расставь шаги алгоритма «собрать множество из списка» в том порядке, в котором они должны выполняться для списка [Tom, Ana, Tom, Ben].

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

    12 XP