Процессы и алгоритмы
Ошибка.
Попробуйте повторить позже
Назовём словом любую последовательность букв. Со словами разрешается проделывать следующие операции: 1) удалить первую букву слова; 2) удалить последнюю букву слова; 3) добавить копию слова после него. Например, если исходное слово , применение операций даст и соответственно. Верно ли, что с помощью таких операций можно в любом слове переставить буквы в любом порядке?
Источники:
Подсказка 1
В этой задаче нужно придумать алгоритм перестановки букв с помощью данных операций для любого слова и любой перестановки. Но сразу догадаться до этого сложно, поэтому попробуйте рассмотреть какой-нибудь простой частный случай.
Подсказка 2
Как получить циклический сдвиг?
Подсказка 3
Достаточно просто удвоить слово и удалить всё лишнее! Теперь попробуйте перейти от этого к произвольной перестановке.
Сначала заметим, что мы можем сделать циклический сдвиг букв в слове. Действительно, пусть у нас есть слово . Удвоим его и удалим буквы слева. Получили слово .
Теперь приведём алгоритм. Пусть у нас имеется слово , имеющее вид . Сделаем копию раз, получим слово , состоящее из копий , идущих подряд. Рассмотрим самое крайнее слово справа, из него будем делать нужную перестановку. Пусть мы хотим получить некоторую перестановку . Пусть — минимальный индекс такой, что . Уберём в самом правом слове все буквы от до . Теперь сделаем циклический сдвиг, переместим в конец слова . Далее будем следовать аналогичному алгоритму, найдём в слове букву (она будет среди первых слева букв), удалим все буквы перед ней и сдвинем её в конец слова и так дальше.
Спустя не более циклических сдвигов последних букв слова будут нужной перестановкой, останется только удалить лишние буквы слева и мы получим требуемое.
Осталось объяснить, почему длины слова хватит. На первом шаге мы удаляем не более букв справа и менее букв слева, а на остальных шагах — менее букв слева. Таким образом, всего будет удалено не более букв. Длина слова равна . Неравенство вытекает из неравенства , которое можно доказать индукцией по . Таким образом, мы сможем выполнить циклических сдвигов и при этом точно останутся букв, составляющих нужную перестановку.
Специальные программы
Программа
лояльности v2.0
Приглашай друзей в Школково и получай вознаграждение до 10%!
Крути рулетку
и выигрывай призы!
Крути рулетку и покупай курсы со скидкой, которая привязывается к вашему аккаунту.
Бесплатное онлайн-обучение
Для школьников из приграничных территорий России, проживающих в ДНР, ЛНР, Херсонской, Запорожской, Белгородской, Курской, Брянской областях и Крыму.
Налоговые вычеты
Узнай, как получить налоговый вычет при оплате обучения в «Школково».
Специальное предложение
для учителей
Бесплатный доступ к любому курсу подготовки к ЕГЭ, ОГЭ и олимпиадам от «Школково». Мы с вами делаем общее и важное дело, а потому для нас очень значимо быть чем-то полезными для учителей по всей России!
Вернём деньги за курс
за твою сотку на ЕГЭ
Сдать экзамен на сотку и получить обратно деньги за подготовку теперь вполне реально!