Библиотека задач / Алгоритмы

Подростки и взрослые

Голоса вычёркивают парами

Условие

В списке из NN голосов некоторый вариант встречается строго больше N2\frac N2 раз; существование такого большинства гарантировано. Разрешено удалять из списка любые два голоса за разные варианты. Докажите, что, повторяя удаление до тех пор, пока оно возможно, вы определите исходное большинство. Как осуществить эту идею одним проходом, храня только один вариант-кандидат и счётчик?

О задаче · Подростки и взрослые
Тема
Алгоритмы
Для кого
Подростки и взрослые
Уровень библиотеки
Следующий шаг · ориентир
Записать идею

Личный черновик для заметок и расчётов. Он никуда не отправляется и не проверяется.

Подсказка 1

При удалении двух разных голосов большинство теряет не больше одного голоса.

Подсказка 2

Когда счётчик равен нулю, следующий голос может стать новым кандидатом.

Разобрать решение по шагам
01

Докажите сохранение большинства

Пусть сейчас всего nn голосов, из них mm за исходный вариант большинства, и m>n2m>\frac n2. После удаления разных голосов остаётся n−2n-2 голоса. Голосов большинства остаётся не меньше m−1m-1, а

m−1>n2−1=n−22.m-1>\frac n2-1=\frac{n-2}{2}.

Если пара вообще не содержала большинства, его преимущество ещё сильнее. Значит, тот же вариант остаётся строгим большинством после каждого удаления.

02

Определите результат сокращения

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

03

Замените список счётчиком

Идём слева направо. При нулевом счётчике запоминаем текущий голос как кандидата и ставим счётчик 11. Если следующий голос совпадает с кандидатом, увеличиваем счётчик; если нет, уменьшаем. Уменьшение мысленно удаляет текущий голос и один сохранённый голос кандидата. Счётчик описывает число ещё не спаренных одинаковых голосов. Поэтому итоговый кандидат совпадает с результатом допустимых удалений и является большинством.

Разные голоса взаимно убираются
01A и Bудалить одну разноимённую пару
02Большинство сохраняетсяего доля остаётся больше половины
03Один вид голосовэто и есть исходный победитель
Ответ

Удалять пары разных значений. Оставшийся кандидат — гарантированное большинство; потоковую реализацию даёт один кандидат со счётчиком.

Главная идея

Алгоритм можно обосновать, представив его действия как простые преобразования, сохраняющие искомое свойство.

Как заметить эту идею в другой задаче

Гарантирован строгий перевес одного значения. Удаление пары разных значений не уничтожает этот перевес; счётчик хранит непогашенную часть кандидата.

Возможная ошибка

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

Источник и примечания

Источник и редакция

Авторская учебная задача на классическую идею. Формулировка и разбор — Popov Academy.

Проверь себя

Гарантии большинства больше нет. Для списка AA, BB, CC алгоритм оставляет CC. Как проверить, действительно ли итоговый кандидат — большинство?

Ответ к дополнительной задаче

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

Продолжить тему: Поиск и алгоритмы →
Учебная схема

Popov Academy · Библиотека задач

Голоса вычёркивают парами

https://popov.academy/library/adult-majority-cancellation/

Условие

В списке из NN голосов некоторый вариант встречается строго больше N2\frac N2 раз; существование такого большинства гарантировано. Разрешено удалять из списка любые два голоса за разные варианты. Докажите, что, повторяя удаление до тех пор, пока оно возможно, вы определите исходное большинство. Как осуществить эту идею одним проходом, храня только один вариант-кандидат и счётчик?

Дополнительная задача

Гарантии большинства больше нет. Для списка AA, BB, CC алгоритм оставляет CC. Как проверить, действительно ли итоговый кандидат — большинство?