Text
                    КЛАССИЧЕСКИЙ ТРУД
НОВОЕ ИЗДАНИЕ
Искусство
программирования
ТОМ 4, А
Комбинаторные алгоритмы
Часть 1
дональд э. кнут

ИСКУССТВО ПРОГРАММИРОВАНИЯ
Volume 4A / Combinatorial Algorithms, Part 1 THE ART OF COMPUTER PROGRAMMING DONALD E. KNUTH Stanford University ▼▼ ADDISON-WESLEY An Imprint of Addison Wesley Longman, Inc. Upper Saddle River, NJ • Boston Indianapolis • San Francisco New York • Toronto • Montreal • London Munich Paris - Madrid Capetown - Sydney • Tokyo • Singapore • Mexico City
Том 4, А / Комбинаторные алгоритмы, часть 1 ИСКУССТВО ПРОГРАММИРОВАНИЯ ДОНАЛЬД Э. КНУТ Стенфордский университет Москва • Санкт-Петербург Киев 2013
ББК 32.973.26-018.2.75 К53 УДК 681.3.07 Издательский дом “Вильямс” Зав. редакцией С. Н. Тригуб Перевод с английского и редакция канд. техн, наук И. В. Красикова По общим вопросам обращайтесь в Издательский дом “Вильямс” по адресу: infofflwilliamspublishing.com, http://www.williamspublishing.com Кнут, Дональд, Эрвин K53 Искусство программирования, том 4, А. Комбинаторные алгоритмы, часть 1 : Пер. с англ. : М. : ООО “И. Д. Вильямс” 2013. — 960 с. : ил. — Парал. тит. англ. ISBN 978-5-8459-1744-7 (рус.) ББК 32.973.26-018.2.75 Все названия программных продуктов являются зарегистрированными торговыми марками соответствующих фирм. Никакая часть настоящего издания ни в каких целях не может быть воспроизведена в какой бы то ни было форме и какими бы то ни было средствами, будь то электронные или механические, включая фотокопирование и запись на магнитный носитель, если на это нет письменного разрешения издательства Addison-Wesley Publishing Company, Inc. Rights to this book were obtained by arrangement with Pearson Education, Inc. Russian language edition published by Williams Publishing House according to the Agreement with R&I Enterprises International, Copyright © 2013. TjjX — зарегистрированная торговая марка American Mathematical Society. META FONT — зарегистрированная торговая марка Addison-Wesley. Эта .книга сверстана с помощью систем Т^Х и METAFONT Д. Кнута, описанных в книге Com- puters & Typesetting (Reading, Mass.: Addison-Wesley, 1986), Volumes A-E, с применением пакета кириллических гарнитур LHF0NTS версии 3.2 (авторы А. Бердников, А. Клодулев и О. Лапко.) Иллюстрации выполнены с помощью системы МЕТАРО5Т Джона Хобби. Некоторые имена в пред- метном указателе набраны с помощью дополнительных гарнитур, разработанных Янисом Харалам- боусом (греческая, иврит и арабская), Франсом Дж. Велзуисом (деванагари), Масатоси Ватанабе (японская) и Линбо Жангом (китайская). Научно-популярное издание Дональд Эрвин Кнут Искусство программирования, том 4, А Комбинаторные алгоритмы, часть 1 Литературный редактор Л. Н. Красножан Верстка А. Н. Полинчик Художественный редактор В. Г. Павлютин Корректор Л. А. Гордиенко Подписано в печать 08.10.2012. Формат 70x100/16. Гарнитура LH. Печать офсетная. Усл. печ. лист. 78,5. Уч.-изд. лист. 85,1. Тираж 1500 экз. Заказ № 3331. Первая Академическая типография “Наука” 199034, Санкт-Петербург, 9-я линия, 12/28 ООО “И. Д. Вильямс” 127055, г. Москва, ул. Лесная, д. 43, стр. 1 ISBN 978-5-8459-1744-7 (рус.) ISBN 978-0-201-03804-0 (англ.) © Издательский дом “Вильямс”, 2013 © by Pearson Education, Inc., 2011
ОГЛАВЛЕНИЕ ГЛАВА 7. КОМБИНАТОРНЫЙ ПОИСК 19 7.1. НУЛИ И ЕДИНИЦЫ........................................ 71 7.1.1. Основы булевой алгебры........................... 71 7.1.2. Булевы вычисления............................... 124 7.1.3. Битовые трюки и технологии...................... 165 7.1.4. Бинарные диаграммы решений........................ 242 7.2. ГЕНЕРАЦИЯ ВСЕХ ВОЗМОЖНЫХ ОБЪЕКТОВ ................... 329 7.2.1. Генерация основных комбинаторных объектов......... 329 7.2.1.1. Генерация всех п-кортежей................. 329 7.2.1.2. Генерация всех перестановок................. 369 7.2.1.3. Генерация всех сочетаний.................. 408 7.2.1.4. Генерация всех разбиений.................. 444 7.2.1.5. Генерация всех разбиений множеств......... 471 7.2.1.6. Генерация всех деревьев .................. 498 7.2.1.7. Исторические и иные сведения ............. 547 ОТВЕТЫ К УПРАЖНЕНИЯМ...................................... 577 ПРИЛОЖЕНИЕ А. ТАБЛИЦЫ ЗНАЧЕНИЙ НЕКОТОРЫХ КОНСТАНТ 904 ПРИЛОЖЕНИЕ Б. ОСНОВНЫЕ ОБОЗНАЧЕНИЯ 908 ПРИЛОЖЕНИЕ В. СПИСОК АЛГОРИТМОВ И ТЕОРЕМ 914 ПРИЛОЖЕНИЕ Г. УКАЗАТЕЛЬ КОМБИНАТОРНЫХ ЗАДАЧ............... 916 ПРЕДМЕТНО-ИМЕННОЙ УКАЗАТЕЛЬ 920
ПРЕДИСЛОВИЕ Поместить все стоящее в одну книгу совершенно невозможно, и даже попытки сколь-нибудь полно осветить хотя бы некоторые аспекты рассматриваемого предмета, скорее всего, приведут к стремительному увеличению книги. — ДЖЕРАЛЬД Б. ФОЛЛАНД (GERALD В. FOLLAND), Editor's Corner (2005) Том 4 называется Комбинаторные алгоритмы. Когда я предлагал это название, я очень хотел добавить к нему подзаголовок Мой любимый раздел программиро- вания. Редакторы уговорили меня не делать этого, но факт остается фактом — программы с комбинаторным привкусом всегда были моими любимицами. С другой стороны, я часто с удивлением обнаруживал, что в сознании мно- гих людей слово “комбинаторный” ассоциируется с вычислительной сложностью. И действительно, Сэмюэль Джонсон (Samuel Johnson) в своем знаменитом Словаре английского языка (1755) писал, что соответствующее существительное “в насто- ящее время обычно используется в неверном смысле” От коллег мне приходится слышать горестные рассказы о том, как “комбинаторика нас победила” Так почему же мне комбинаторика доставляет удовольствие, а у других вызывает панику? Да, это правда, что комбинаторные задачи часто связаны с чрезвычайно боль- шими числами. Статья в словаре Джонсона включает цитату Эфраима Чамберса (Ephraim Chambers), который указал, что общее количество слов длиной не более 24 букв при 24-буквенном алфавите равно 1391724 288 887 252 999 425128 493 402 200. Соответствующее число для 10-буквенного алфавита равно 11111111110; когда же количество букв алфавита равно всего лишь 5, общее число слов сокращается до 3905. Таким образом, здесь мы, определенно, наблюдаем комбинаторный взрыв с ростом размера задачи от 5 до 10 и далее до 24 и более. На протяжении моей жизни мощность вычислительной техники выросла неимо- верно. Сейчас, когда я набираю эти слова, я знаю, что мой ноутбук обрабатывает их со скоростью, более чем в сто тысяч раз большей, чем старый добрый IBM Туре 650, которому я посвящал свои книги. Количество памяти моего нынешнего компьютера также примерно в сто тысяч раз больше. Компьютеры завтрашнего дня будут еще более быстрыми и с еще большим объемом памяти. Но эти удивительные достиже- ния не уменьшили тягу людей к получению ответов на комбинаторные вопросы— скорее даже наоборот. Наша совершенно невообразимая в прошлом способность к быстрым вычислениям повысила наши ожидания и еще больше разожгла аппетит к дальнейшим исследованиям, потому что размер комбинаторной задачи может увеличиться более чем в сто тысяч раз, когда п увеличится всего лишь на единицу. Неформально комбинаторные алгоритмы можно определить как методы вы- сокоскоростной работы с такими комбинаторными объектами, как перестановки
ПРЕДИСЛОВИЕ 7 или графы. Обычно мы пытаемся найти шаблоны или схемы, которые наилучшим образом удовлетворяют определенным ограничениям. Количество задач такого ро- да огромно, а искусство написания соответствующих программ особенно важно, поскольку одна хорошая идея способна сэкономить годы и даже века машинного времени. В действительности тот факт, что хорошие алгоритмы для комбинаторных за- дач могут давать потрясающий выигрыш, привел к огромному подъему современ- ного состояния данной науки. Многие ранее считавшиеся неразрешимыми задачи теперь могут быть с легкостью решены, а многие алгоритмы, считавшиеся ранее очень хорошими, стали гораздо лучше. Начиная примерно с 1970 года киберне- тики стали сталкиваться с явлением, которое окрестили леммой Флойда: задачи, которые представляются требующими для решения п3 операций, на самом деле могут быть решены за О(п2) операций; задачи, которые, как кажется, требуют г? операций, могут быть решены за О(п log п); задачи со временем решения nlogn зачастую сводятся к задачам со временем решения О(п). Для более сложных задач удается добиться сокращения времени выполнения с О(2П) до О(1.5п) или О(1.3п), и т. д. Прочие задачи остаются сложными в общем случае, но могут быть найдены важные частные случаи, которые решаются гораздо проще. Многие комбинаторные вопросы, о которых я думал, что ответ на них не будет получен при моей жизни, оказались успешно решенными. И это произошло главным образом благодаря усо- вершенствованию алгоритмов, а не повышению скорости процессоров. К 1975 году исследования в этой области проводились такими темпами, что значительная доля статей, опубликованных в то время в ведущих журналах по информатике, была посвящена комбинаторным алгоритмам. И этот прорыв был осуществлен не только учеными-кибернетиками; значительный вклад внесли работ- ники в таких областях знаний, как электротехника, искусственный интеллект, ис- следование операций, математика, физика, статистика и многие другие. Я пытался завершить том 4 Искусства программирования, но вместо этого я почувствовал себя сидящим на крышке кипящего чайника: я столкнулся с комбинаторным взрывом другого рода—огромным взрывом новых идей! Данная серия книг родилась в начале 1962 года, когда я наивно набросал список рабочих названий глав для книги, состоящей из 12 глав. В тот момент я решил включить краткую главу о комбинаторных алгоритмах просто для собственного удовольствия. “Эй, глянь—большинство людей используют компьютеры, чтобы работать с числами, но можно писать программы, которые имеют дело со схемами” В те времена было легко дать достаточно полное описание почти всех известных комбинаторных алгоритмов. И даже к 1966 году, когда я закончил первый черновой вариант из около трех тысяч рукописных страниц (который уже перерос изначально запланированную книгу), к главе 7 относилось менее ста из них. Я совершенно не представлял в тот момент, что то, что я планировал как “легкую закуску” окажется основным блюдом. Великое комбинаторное брожение 1975 года захватило множество людей. Новые идеи улучшали старые, но при этом редко заменяли их или делали устаревшими. Все это привело к тому, что я был вынужден оставить надежду когда-либо написать достаточно полную книгу, в которой был бы упорядочен весь имеющийся материал и которая была бы достаточно универсальной, чтобы помочь каждому, перед кем
8 ПРЕДИСЛОВИЕ встает та или иная комбинаторная задача. Множество применяемых методов раз- рослось до таких размеров, что я уже практически не мог рассмотреть некоторую подтему и сказать “Это решение окончательное: на этом мы ставим точку’.’ Вместо этого я должен был ограничиться пояснением наиболее важных принципов, кото- рые, как мне кажется, лежат в основе всех эффективных комбинаторных методов, с которыми я встречался до сих пор. В настоящее время для тома 4 у меня накоплено в два с лишним раза больше материала, чем было собрано для всех предыдущих томов вместе взятых. Такое количество материала неизбежно ведет к разделению запланированного “тома 4” на несколько физических томов. Сейчас перед вами том 4, А. В один прекрасный день вы увидите тома 4, Б и 4, В, если, конечно, написать их позволит мое здоровье. И, как знать, быть может, наступит очередь томов 4, Г, 4, Д ... ? Впрочем, я уверен, что тома 4, Я не будет. Я планирую по мере возможности систематически разбирать накопленные с 1962 года папки и в меру своих способностей рассказывать истории, которые все еще ждут своего часа. Я не могу гарантировать полноту изложения, но очень хочу воздать должное всем первооткрывателям ключевых идей, а потому я не буду эконо- мить на исторических деталях. Кроме того, всякий раз, когда я знакомлюсь с чем- то, что, как мне кажется, останется важным еще лет 50 и что можно пояснить парой абзацев, я не могу пройти мимо этого и не внести его в книгу. С другой стороны, сложный материал, который требует длительных доказательств, выходит за рамки этих книг (конечно, за исключением действительно фундаментальных тем). Итак, понятно, что вся область комбинаторных алгоритмов огромна, и охватить ее всю не в моих силах. Какие же темы из тех, которые я опускаю, наиболее важные? Я думаю, мое наибольшее “слепое пятно” —геометрия, потому что я всегда лучше чувствовал себя при работе с визуализацией и алгебраическими формулами, чем с объектами в пространстве. Поэтому я не пытаюсь заниматься в этих книгах комбинаторными задачами, связанными с вычислительной геометрией, такими как плотная упаковка сфер, кластеризация точек данных в n-мерном евклидовом про- странстве или деревьями Штайнера на плоскости. Еще более существенно то, что я уклоняюсь от такой темы, как полиэдрическая комбинаторика, и от подходов, основанных, в первую очередь, на линейном программировании, целочисленном программировании или полуопределенном программировании. Эти вопросы рас- сматриваются во многих других книгах по данной тематике и рассчитаны на геомет- рическую интуицию читателя. Для моего понимания чисто комбинаторные подходы гораздо проще. Должен также признаться в некотором предубеждении против алгоритмов, эф- фективных только в асимптотическом смысле, превосходная производительность которых начинает проявляться, только когда размер задачи превосходит размер вселенной. Алгоритмам такого рода посвящено множество современных публи- каций. Я могу понять, почему медитация над беспредельными пределами столь интеллектуально привлекательна и так легко попадает в академическую печать. Однако в Искусстве программирования любые методы, которые я сам не испытал в реальных программах, ожидает быстрая расправа. (Конечно же, из этого правила есть исключения, главным образом касающиеся базовых концепций. Одни непрак- тичные методы просто слишком красивы и/или интеллектуальны, чтобы их можно
ПРЕДИСЛОВИЕ 9 было исключить; другие представляют собой поучительные примеры того, как не следует поступать.) Кроме того, как и в предыдущих томах данной серии, я преднамеренно практи- чески полностью ограничиваюсь последовательными алгоритмами, несмотря на все возрастающую способность компьютеров к параллельным вычислениям. Я не могу судить, какие из идей, относящихся к параллельным вычислениям, будут полезны через пять или десять лет, не говоря уж о больших сроках, а потому оставляю эти вопросы другим, более сведущим авторам. Последовательные методы сами по себе уже являются испытанием пределов моей способности разглядеть, что искусные программисты захотят знать завтра. Основные решения, которые мне нужно было принять при планировании пред- ставления данного материала, — как его лучше организовать: в соответствии с ре- шаемыми задачами или в соответствии с применяемыми методами. Так, например, глава 5 в томе 3 посвящена единственной задаче—сортировке данных; к различным ее аспектам оказались применимыми более двух десятков разнообразных методов. Комбинаторные алгоритмы, напротив, включают множество различных задач, ко- торые, как правило, решаются с помощью существенно меньшего набора методов. В конечном итоге я пришел к выводу, что смешанная стратегия будет работать лучше любого “чистого” подхода. Так, например, в разделе 7.3 рассматривается задача поиска кратчайших путей, а в разделе 7.4.1—задача связности. При этом многие другие разделы посвящены базовым методам, таким как применение буле- вой алгебры (раздел 7.1), откат (раздел 7.2.2), теория матроидов (раздел 7.6) или динамическое программирование (раздел 7.7). Знаменитая задача коммивояжера и другие классические комбинаторные задачи, связанные с покрытием, раскрас- кой и упаковкой, не имеют собственных разделов, но неоднократно появляются в разных местах, так как они могут решаться различными способами. Я упомянул большой прогресс в области комбинаторных вычислений, но это со- всем не означает, что все комбинаторные задачи действительно “приручены” Когда время работы компьютерной программы взлетает не хуже баллистической ракеты, ее разработчикам не следует рассчитывать на то, что в этой книге найдется “сереб- ряная пуля” некий универсальный рецепт для решения их проблемы. Описанные здесь методы зачастую будут работать намного быстрее, чем подходы, которые пытались применить эти программисты. Но давайте посмотрим правде в глаза: комбинаторные задачи очень быстро становятся невообразимо огромными. Можно даже строго доказать, что некоторая небольшая, естественная задача никогда не бу- дет иметь практического решения, хотя принципиально она разрешима (см. теорему Стокмейера и Мейера в разделе 7.1.2). В других случаях мы знаем, что подходящий алгоритм для решения данной задачи вряд ли существует, хотя и не можем этого доказать. Дело в том, что любой такой эффективный алгоритм позволит решить тысячи других задач, которые давно ставят в тупик крупнейших специалистов в мире (см. описание NP-полноты в разделе 7.9). Опыт показывает, что изобретение новых комбинаторных алгоритмов будет про- должаться по-прежнему как для новых комбинаторных задач, так и для вновь вы- явленных вариаций или частных случаев старых. Аппетит программистов к таким алгоритмам со временем будет только расти. Когда программисты сталкиваются с задачами такого рода (а это происходит постоянно), это дает толчок искусству
10 ПРЕДИСЛОВИЕ программирования для достижения новых высот. Однако, скорее всего, сегодняш- ние методы также останутся в строю. Большая часть данной книги самодостаточна, хотя и содержит частые ссылки на темы в предыдущих томах. В них достаточно широко рассматривались детали низкоуровневого программирования на машинном языке, так что в данной книге алгоритмы обычно описываются на абстрактном уровне, не зависящем от конкрет- ной машины. Однако некоторые аспекты комбинаторного программирования су- щественно зависят от низкоуровневых деталей, которые ранее не рассматривались. В таких случаях все примеры в данной книге основаны на компьютере MMIX, который заменяет машину MIX, описанную в ранних изданиях тома 1. Подробная информа- ция о MMIX приведена в дополнении к этому тому, выпущенному в мягкой обложке под названием The Art of Computer Programming, Volume 1, Fascicle 1,* в котором содержатся разделы 1.3.1', 1.3.2' и т. д. Эти разделы, а также соответствующие ассемблеры и симуляторы, доступны по сети Интернет. Еще одним загружаемым ресурсом является коллекция программ и данных под названием The Stanford GraphBase, постоянно упоминаемая в примерах этой книги. Читателям при изучении комбинаторных алгоритмов настоятельно рекомендуется поработать с ней — мне представляется, что это наиболее эффективный и приятный способ изучения. Кстати, при написании вводного материала в начале главы 7 мне было приятно отметить, что в ней самым естественным образом оказались упомянутыми некото- рые работы моего научного руководителя Маршалла Холла-мл. (Marshall Hall, Jr.) (1910-1990), так же как и некоторые работы его научного руководителя Ойстей- на Ope (Oystein Ore) (1899-1968) и некоторые работы его научного руководителя Торальфа Сколема (Thoralf Skolem) (1887-1963). Научный руководитель Сколема, Аксель Тью (Axel Thue) (1863-1922), уже упомянут в главе 6. Я чрезвычайно благодарен сотням читателей, которые помогли мне выявить многочисленные ошибки, допущенные в черновых вариантах этого тома, которые изначально были доступны через Интернет, а впоследствии напечатаны в виде бро- шюр в мягких обложках. В особенности следует отметить комментарии Торстена Далхаймера (Thorsten Dahlheimer), Марка ванЛьювена (Marc vanLeeuwen) и Удо Вермута (Udo Wermuth). Но, боюсь, в материале скрываются и другие ошибки, которые я хотел бы исправить как можно скорее. Поэтому я с удовольствием заплачу 2 доллара 56 центов тому, кто первым сообщит мне о любой замеченной типографской** технической или исторической ошибке. На веб-сайте по адресу http://www-cs-faculty.stanford.edu/~knuth/taocp.html можно найти текущий список всех поправок к данной книге. Станфорд, Калифорния D. Е. К. Октябрь 2010 * Имеется русский перевод: Кнут Д. Э. Искусство программирования, том 1, выпуск 1. MMIX— RISC-компьютер для нового тысячелетия. — М.: ООО “И. Д. Вильямс” 2007. — Примеч. пер. ** Конечно же, имеется в виду оригинальное издание. — Примеч. пер.
ПРЕДИСЛОВИЕ 11 В предисловии к первому изданию я просил читателей не обращать внимания на ошибки. Теперь я не хочу этого делать и благодарен тем читателям, которые не обратили внимания на мою просьбу. — СТЮАРТ САЗЕРЛЕНД (STUART SUTHERLAND), The International Dictionary of Psychology (1996) Естественно, я несу ответственность за все оставшиеся ошибки— хотя, как мне кажется, мои друзья могли бы выловить и больше. — ХРИСТОС X. ПАПАДИМИТРИУ (CHRISTOS Н. PAPADIMITRIOU), Computational Complexity (1994) Мне нравится работать в разных областях, потому что так мои ошибки размазываются более тонким слоем. — ВИКТОР КЛИ (VICTOR KLEE) (1999) Примечание к ссылкам. Несколько часто цитируемых журналов и трудов кон- ференций имеют специальные коды, которые встречаются в предметно-именном указателе в конце этой книги. Различные серии IEEE Transactions цитируются с ис- пользованием буквенного кода, указывающего серию и приводимого полужирным шрифтом перед номером тома. Так, ‘IEEE Trans. С-35’ означает IEEE Transactions on Computers, том 35. IEEE больше не использует эти столь удобные буквен- ные коды, но их нетрудно расшифровать: ‘ЕС’ означает “Electronic Computers”, ‘IT’—“Information Theory”, ‘SE’—“Software Engineering”, ‘SP’—“Signal Process- ing” и т. д.; ‘CAD’ означает “Computer-Aided Design of Integrated Circuits and Systems” Перекрестная ссылка вида ‘упр. 7.10-00’ указывает на будущее упражнение в разделе 7.10, номер которого пока что неизвестен. Примечание к обозначениям. Простые и интуитивно понятные соглашения и обозначения для алгебраического представления математических концепций все- гда были благом для прогресса, в особенности когда большинство исследователей в мире стали использовать единый символьный язык. Текущее состояние дел в ком- бинаторной математике, к сожалению, в этом отношении находится в беспорядке, так как одни и те же символы различными группами исследователей могут ис- пользоваться для совершенно разных целей. Некоторые специалисты, работающие в сравнительно узких областях, непреднамеренно создали противоречивую симво- лику. Информатике—которая по своей природе очень широко взаимодействует с математикой — следует избегать этой опасности, принимая для себя, насколько это возможно, непротиворечивые обозначения. Поэтому мне часто приходилось делать выбор среди конкурирующих систем обозначений, при этом отдавая себе отчет в том, что угодить всем будет невозможно. Я изо всех сил пытался сделать все, чтобы придумать обозначения, которые, как мне кажется, будут наилучшими для будущего применения, зачастую после многих лет экспериментов и обсуждений с коллегами. Не редкостью были и метания между альтернативными вариантами, пока не удавалось остановиться на одном из них. Обычно все же удавалось найти
12 ПРЕДИСЛОВИЕ удобные обозначения, еще не используемые другими учеными способом, противоре- чащим моему. Приложение Б представляет собой всеобъемлющий предметный указатель для всех основных обозначений, которые использованы в настоящей книге, включая и те, которые (пока что?) не являются стандартными. Если вы столкнетесь в книге с формулой, которая выглядит для вас странно и/или непонятно, достаточно высоки шансы, что приложение Б направит вас к странице, поясняющей мои намерения. Однако я хотел бы сделать несколько пояснений прямо сейчас, чтобы вы могли ознакомиться с ними еще до первого прочтения книги. • Шестнадцатеричные константы предваряются знаком фунта (#), т. е., напри- мер, *123 означает (123)16- • Обозначение х — у применяется для операции “монус” иногда именуемой “ми- нус с точкой” или вычитанием с насыщением, результатом которой является тах(0, т — у). • Медиана трех чисел {x,y,z} обозначается как (xyz). • Множество, такое как {я}, состоящее из одного элемента, часто обозначается просто как х в контекстах наподобие X U х или X \ х. • Если п — неотрицательное целое число, количество единичных битов в бинар- ном представлении п равно ип. Кроме того, если п > 0, то крайний слева и крайний справа единичные биты п представляют собой соответственно 2А” и 2₽п. Например, 1/10 = 2, А10 = 3, plO = 1. • Декартово произведение графов G и Н обозначается как G □ Н. Например, СтпСп представляет собой тор т х п, так как Сп является циклом из п вершин.
ПРИМЕЧАНИЯ К УПРАЖНЕНИЯМ Упражнения, приведенные в этом многотомнике, предназначены как для самосто- ятельной проработки, так и для семинарских занятий. Очень трудно и, наверное, просто невозможно выучить предмет, только читая теорию и не применяя ее для решения конкретных задач, которые заставляют задуматься о прочитанном. Более того, мы лучше всего заучиваем то, до чего дошли самостоятельно, своим умом. По- этому упражнения занимают важное место в данном издании. Я приложил немало усилий, чтобы сделать их как можно более информативными, а также отобрать задачи, которые были бы не только поучительными, но и позволяли бы читателю получить удовольствие от их решения. Во многих книгах простые упражнения даются вперемешку с исключительно сложными. Это не всегда удобно, так как читателю хочется знать заранее, сколько времени ему придется затратить на решение задач (иначе в лучшем случае он их только просмотрит). В качестве классического примера подобной ситуации можно привести книгу Ричарда Веллмана (Richard Bellman) Динамическое программирова- ние (М.: Изд-во иностр, лит., 1960). Это очень важная, новаторская работа, но у нее есть один недостаток: в конце некоторых глав в разделе “Упражнения и научные проблемы” среди серьезных, еще нерешенных проблем, попадаются простейшие вопросы. Говорят, что кто-то однажды спросил д-ра Веллмана, как отличить упраж- нения от научных проблем, и он ответил: “Если вы можете решить задачу, значит, это упражнение; в противном случае это научная проблема” Совершенно очевидно, что в книге, подобной этой, должны быть приведены и сложные научные проблемы, и простейшие упражнения. Поэтому, чтобы чита- тель не ломал голову, пытаясь отличить одно от другого, были введены рейтинги, которые определяют степень сложности каждого упражнения. Эти рейтинги имеют следующее значение. Рейтинг Объяснение 00 Чрезвычайно простое упражнение, которое можно выполнить сразу же, если прочитанный материал понят. Упражнения подобного типа почти всегда можно решить “в уме” 10 Простая задача, которая заставляет задуматься над прочитанным, но не представляет особых трудностей. На ее решение вы затратите не больше минуты; в процессе решения могут понадобиться карандаш и бумага. 20 Средняя задача, которая позволяет проверить, понял ли читатель основ- ные положения изложенного материала. Чтобы получить исчерпываю- щий ответ, может понадобиться примерно 15-20 минут. 30 Задача умеренной сложности. Для ее решения может понадобиться более двух часов (а если при этом включен телевизор, то еще больше).
14 ПРИМЕЧАНИЯ К УПРАЖНЕНИЯМ 40 Достаточно сложная или трудоемкая задача, которую вполне можно включить в план семинарских занятий. Предполагается, что студент должен справиться с ней, затратив не слишком много времени, и решение будет нетривиальным. 50 Научная проблема, которая (насколько известно автору в момент напи- сания книги) пока еще не получила удовлетворительного решения, хотя найти его пытались очень многие. Если вы нашли решение подобной проблемы, то опубликуйте его; более того, автор данной книги будет очень признателен, если ему сообщат решение как можно скорее (при условии, что оно правильно). Интерполируя по этой “логарифмической” шкале, можно понять, что означает любой промежуточный рейтинг. Например, рейтинг 17 говорит о том, что упраж- нение немного проще, чем задача средней сложности. Если задача с рейтингом 50 будет впоследствии решена каким-либо читателем, то в следующих изданиях данной книги и в списке ошибок, опубликованных в Интернете, она может иметь рейтинг 40. Остаток от деления рейтинга на 5 показывает, какой объем рутинной работы потребуется для решения данной задачи. Таким образом, для выполнения упраж- нения с рейтингом 24 может потребоваться больше времени, чем для упражнения с рейтингом 25, но для последнего необходим более творческий подход. Автор очень старался правильно присвоить рейтинги упражнениям, но тому, кто составляет задачи, трудно предвидеть, насколько сложными они окажутся для кого-то другого. К тому же одному человеку некая задача может показаться про- стой, а другому — сложной. Таким образом, определение рейтингов — дело доста- точно субъективное и относительное. Я надеюсь, что рейтинги помогут вам полу- чить правильное представление о степени трудности задач, но их следует восприни- мать в качестве ориентира, а не в качестве абсолюта. Эта книга написана для читателей с различным уровнем математической под- готовки и научного кругозора, поэтому некоторые упражнения рассчитаны исклю- чительно на тех, кто серьезно интересуется математикой или занимается ею профес- сионально. Если рейтингу предшествует буква М, значит, математические понятия и обоснования используются в упражнении в большей степени, чем это необходи- мо тому, кто интересуется в основном программированием алгоритмов. Если же упражнение отмечено буквами НМ, то для его решения необходимо знание высшей математики в большем объеме, чем дается в настоящей книге. Но пометка НМ совсем необязательно означает, что упражнение трудное. Перед некоторыми упражнениями стоит стрелка которая означает, что они особенно поучительны и их очень рекомендуется выполнить. Само собой разумеет- ся, никто не ожидает, что читатель (или студент) будет решать все задачи, поэтому наиболее важные из них и были выделены. Но это ни в коем случае не означает, что другие упражнения выполнять не стоит! Каждый читатель должен хотя бы попытаться решить все задачи, рейтинг которых меньше или равен 10. Стрелки помогут выбрать задачи с более высокими рейтингами, которые следует решать в первую очередь. В некоторых разделах имеется более сотни упражнений. Как же найти свой путь среди такого множества? В целом последовательность упражнений стремится
ПРИМЕЧАНИЯ К УПРАЖНЕНИЯМ 15 следовать последовательности идей в основном тексте. Идущие подряд упражнения могут основываться одно на другом, как в новаторских задачниках Пойя (Polya) и Сегё (Szego). В последних упражнениях разделов часто охватывается материал всего раздела или вводятся дополнительные темы. К большинству упражнений приведены ответы, помещенные в отдельном раз- деле в конце книги. Пожалуйста, пользуйтесь ими разумно: ответ смотрите только после того, как приложите все усилия, чтобы решить задачу самостоятельно, либо если у вас совершенно нет времени на ее решение. Ответ будет поучителен и полезен для вас только в том случае, если вы ознакомитесь с ним после того, как найдете свое решение или изрядно потрудитесь над задачей. Ответы к задачам излагаются очень кратко и схематично, так как предполагается, что читатель честно пытался решить задачу собственными силами. Иногда в приведенном решении дается мень- ше информации, чем спрашивалось, но чаще бывает наоборот. Вполне возможно, что полученный вами ответ окажется лучше того, который помещен в книге, или вы найдете ошибку в ответе. В таком случае автор был бы очень признателен, если бы вы как можно скорее подробно сообщили ему об этом; тогда в последующих изданиях книги будет опубликовано более удачное решение, а также имя его автора. Решая задачи, вы, как правило, можете пользоваться ответами к предыдущим упражнениям, за исключением случаев, когда это будет оговорено особо. Рейтинги упражнениям присваивались в расчете именно на это, и вполне возможно, что рейтинг упражнения п + 1 ниже рейтинга упражнения п, даже если результат упражнения п является его частным случаем. Условные обозначения 00 10 Простейшее (ответ дать немедленно) Простое (на одну минуту) ► Рекомендуется 20 Средней трудности (на четверть часа) M С математическим уклоном 30 Повышенной трудности НМ Требует знания высшей 40 Высокой трудности математики 50 Научная проблема УПРАЖНЕНИЯ ► 1. [00] Что означает рейтинг М20? 2. [10] В чем ценность упражнений в данной книге для читателя? 3. [ЯЩ5] Докажите, что всякое односвязное компактное трехмерное многообразие го- меоморфно трехмерной сфере. Искусство является значительной составляющей такого благотворного занятия, как противостояние предубеждениям. — ГЕНРИ ДЖЕЙМС (HENRY JAMES), The Art of Fiction (1884)
Я признателен всем моим друзьям, но особая моя благодарность тем из них, которые по прошествии времени перестают теребить меня вопросом “Какая книга будет следующей?” — ПИТЕР Д. ГОМЕС (PETER J. GOMES), The Good Book (1996) Наконец-то после долгих обещаний я представляю миру мою работу. Однако я боюсь, что по отношению к ней были поставлены слишком высокие ожидания. Причина задержки ее публикации в значительной мере кроется в чрезвычайном рвении, которое было проявлено высокопочтенными особами со всех сторон в обеспечении меня дополнительной информацией. — ДЖЕЙМС БОСВЕЛЛ (JAMES BOSWELL), The Life of Samuel Johnson, LL. D. (1791) Автор особенно признателен издательству Addison-Wesley за терпение, проявленное в течение десятилетия ожидания этой книги после подписания контракта. — ФРЭНК ХАРАРИ (FRANK HARARV), Graph Theory (1969) Средний парень, ненавидящий квадратные корни или алгебру, приходит в восторг от головоломок, построенных на тех же принципах, и может таким способом развить свои математические и изобретательские шишки, которые приведут в изумление семейного френолога*. — СЭМ ЛОЙД (SAM LOYD), The World of Puzzledom (1896) Пожалуйста, еще немного! — Слоган Bitburger Brauerei** (1951) * Френология — псевдонаука о связи психики человека и строения поверхности его черепа. Создателем френологии является австрийский врач и анатом Ф.Й. Галль (F. J. Gall), который утверждал, что все психические свойства, якобы локализующиеся в полушариях мозга, при раз- витии вызывают разрастание определенного участка мозга, а это, в свою очередь,—образование выпуклости (“шишки”) на соответствующем участке черепа. — Примеч. пер. ** Одно из крупнейших пивоваренных предприятий Германии. — Примеч. пер.
Г5«Д.

ГЛАВА 7 КОМБИНАТОРНЫЙ ПОИСК ... Чтобы их найти, надо искать весь день, а найдешь—увидишь, что и искать не стоило* — БАССАНИО (BASSANIO), в Венецианский купец (акт I, сцена 1) Любые действия или противодействия каждой капли этого людского моря могут сложиться в самые непредсказуемые и необъяснимые комбинации. Иногда происходят поразительные, невообразимые события... ** — ШЕРЛОК ХОЛМС (SHERLOCK HOLMES), в The Adventure of the Blue Carbuncle (1892) Тема комбинаторных алгоритмов слишком обширна, чтобы охватить ее в одной статье или даже в одной книге. — РОБЕРТ Э. ТАРЖАН (ROBERT Е. TARJAN) (1976) Постоянно сталкиваясь с массой людей, я был впечатлен тем фактом, что наиболее успешными среди них были те, кто обладал врожденным даром разгадывать головоломки. Жизнь полна загадок, которые мы должны разгадывать по мере того, как судьба подбрасывает их нам. — УОЛТЕР ЛОЙД (СЭМ ЛОЙД-МЛ.) (SAM LOYD, JR.) (1926) Комбинаторика изучает способы, которыми дискретные объекты могут быть упо- рядочены в шаблоны различного вида. Например, объекты могут представлять собой 2п чисел {1,1,2,2,..., п, п}, и мы хотим разместить их в строку таким обра- зом, чтобы между двумя появлениями каждого числа к находилось ровно к других чисел. Когда п = 3, имеется по сути единственный способ размещения таких “пар Лэнгфорда’,’ а именно 231213 (и его зеркальное отображение 312132); аналогично имеется единственное решение и для п = 4. Многие другие типы комбинаторных шаблонов будут рассматриваться далее в этой книге. Обычно при изучении комбинаторных задач возникает пять основных типов вопросов, одни — потруднее, другие — попроще. i) Существование: существует ли упорядочение X, отвечающее данному шабло- ну? ii) Построение: если существует, то можно ли быстро найти такое X? * Перевод Т. Щепкиной-Куперник. ** Перевод В. Михалюка.
20 КОМБИНАТОРНЫЙ ПОИСК 7 iii) Подсчет: сколько имеется различных упорядочений X? iv) Генерация: могут ли все упорядочения Xi, Х3, ... быть посещены системати- ческим образом? v) Оптимизация: какие упорядочения максимизируют или минимизируют f(X) для заданной целевой функции /? Каждый из приведенных вопросов оказывается достаточно интересным по отноше- нию к парам Лэнгфорда. Например, рассмотрим вопрос существования. Методом проб и ошибок доста- точно быстро выясняется, что, когда п = 5, разместить {1,1,2,2,..., 5,5} требуемым образом в десяти позициях невозможно. Обе единицы должны находиться либо в четных позициях, либо в нечетных. Точно так же и тройки и пятерки должны находиться парами либо в четных, либо в нечетных позициях; двойки и четверки ис- пользуют по одной четной и одной нечетной позиции. Таким образом, мы не можем заполнить по пяти позиций каждой четности. Такие же рассуждения доказывают, что задача не имеет решения и при п = 6 или, в общем случае, когда количество нечетных значений в множестве {1,2,..., п} нечетно. Другими словами, решение задачи Лэнгфорда может существовать только для п = 4т — 1 или п = 4m, для некоторого целого т. И обратно, когда п имеет указанный вид, существует элегантный способ построения требуемого размещения, найденный Роем О. Дэйвисом (Roy О. Davies) и приведенный в упр. 1. Сколько же имеется существенно разных решений задачи Ln? С ростом п— много, очень много: L3 = 1; L7 = 26; Lu = 17 792; Т15 = 39809640; Li9 =256814891280; U23 = 3799455942 515488; U4 = 1; Ls = 150; U12 = 108144; L16 =326721800; Т20 = 2636337861200; Т24 = 46 845158 056 515 936. (1) [Значения Т2з и Т24 были найдены в 2004 и 2005 годах М. Краецки (М. Krajecki), К. Джейллетом (С. Jaillet) и А. Бью (A. Bui); см. Studia Informatica Universalis 4 (2005), 151-190.] Наброски “на коленке” дают грубую оценку значения Ln (когда оно не равно нулю), равную (4п/е3)п+1^ (см. упр. 5); и эта оценка оказывается в целом корректной для всех известных значений. Но простой формулы для этих значений, похоже, не существует. Задача Лэнгфорда представляет собой простой частный случай общего клас- са комбинаторных задач, называющихся задачами точного покрытия. В разде- ле 7.2.2.1 мы познакомимся с так называемым алгоритмом “танцующих связей” который представляет собой удобное средство генерации всех решений таких задач. Например, при п = 16 этот метод требует выполнения всего лишь около 3200 об- ращений к памяти для каждого найденного решения задачи Лэнгфорда. Таким образом, значение Lje может быть вычислено за разумное время путем простой генерации всех решений и их подсчета. Заметим, однако, что число U24 огромно—огрубление оно равно 5 х 1016, или около 1500 MIP-лет. (Вспомним, что “MIP-год” представляет собой количество
7 КОМБИНАТОРНЫЙ ПОИСК 21 инструкций, которые за год может выполнить машина, выполняющая миллион инструкций в секунду, а именно 31556 952 000 000.) Следовательно, очевидно, что точное значение L24 было определено с помощью иной методики, не включающей генерацию всех расстановок. Действительно, имеется гораздо, гораздо более быст- рый способ вычисления Ln с помощью полиномиальной алгебры. Поучительный метод, описанный в упр. 6, требует О(4пп) операций, что может показаться неэф- фективным; но это лучше метода генерации и подсчета на громадный множитель порядка 0((п/е3)п-1/2), так что даже при п = 16 этот метод работает примерно в 20 раз быстрее. С другой стороны, точное значение Ьюо, вероятно, никогда не станет известным, несмотря на все большую и большую скорость компьютеров. Можно также рассмотреть решения задачи Лэнгфорда, оптимальные в том или ином отношении. Для примера можно расположить шестнадцать пар разновесов {1,1,2,2,..., 16,16} так, чтобы они удовлетворяли условиям Лэнгфорда и обладали дополнительным свойством “сбалансированности’,’ в том смысле, что, будучи рас- ставленными в соответствующем порядке, они оставят в равновесии рычажные весы: 16 69 15 238263 1310 9 1214 8 1116 1 15 1 5 10 7 13 4 12 5 1114 4 7 . (2) Другими словами, 15.5 • 16 + 14.5 • 6 + • • • + 0.5 • 8 = 0.5 •11 + • • • + 14.5 • 4 + 15.5 • 7; и в данном конкретном примере мы сталкиваемся с еще одним условием равновесия, 16 + 6+---1-8 = 11 + 16+--1-7. Следовательно, справедливо также 16-16+15- 6 + • • • + 1 • 8 = 1 • 11 + • • • + 15 • 4 + 16 • 7. Кроме того, размещение (2) имеет минимальную ширину среди всех решений задачи Лэнгфорда порядка 16: соединяющие линии под диаграммой показывают, что в любой точке диаграммы одновременно незавершенными оказываются не более семи пар; можно также показать, что ширина, равная шести, в данном случае недостижима (см. упр. 7). Какое размещение щаг • • • fl32 чисел {1,1,..., 16,16} оказывается наименее сба- лансированным, в том смысле, что сумма 52^1] как максимальна? Оказывается, что максимально возможное значение равно 5268. Одним из таких решений (а всего их 12016) является 2 3 4 2 1 3 1 4 16 13 15 5 14 7 9 6 11 5 12 10 8 7 6 13 9 16 15 14 11 8 10 12. (3) Более интересный вопрос — о решениях задачи Лэнгфорда, являющихся мини- мальными и максимальными в лексикографическом порядке. Ответами для п = 24 являются {abacbdecfgdoersfpgqtuwxvjklonhmirpsjqkhltiunmwvx, xvwsquntkigrdapaodgiknqsvxwutmrpohlj cfbecbhmfej1}, если использовать буквы a, b, ..., w, x вместо чисел 1,2, ..., 23, 24. Мы рассмотрим множество методов комбинаторной оптимизации в следующих разделах этой главы. Наша цель, конечно же, заключается в том, чтобы решать
22 КОМБИНАТОРНЫЙ ПОИСК 7 Рис. 1. Беспорядок в карточном королевстве: никакого совпадения строк. (Это всего лишь одно из множества решений популярной головоломки XVIII века.) такие задачи с помощью изучения только небольшой части пространства всех воз- можных размещений. Ортогональные латинские квадраты. Давайте ненадолго вернемся в ранние дни комбинаторики. Посмертное издание книги Жака Озанама (Jacques Ozanam) Recreations mathematiques et physiques (Paris: 1725) включает занимательную голо- воломку на с. 434 тома 4: “Возьмите всех тузов, королей, дам и валетов из обычной колоды игральных карт и расположите их в виде квадрата так, чтобы в каждой строке и каждом столбце содержались карты всех мастей и всех достоинств’.’ Су- меете ли вы сделать это? Решение Озана ла, показанное на рис. 1, делает даже больше: полный набор достоинств и мастей встречается также на обеих диагоналях квадрата. В 1779 году подобная головоломка, распространившаяся в Санкт-Петербурге, привлекла внимание великого математика Леонарда Эйлера. “Тридцать шесть офицеров шести различных званий, взятые из шести различных полков, хотят вы- строиться квадратным строем 6x6 так, чтобы в каждой строке и каждом столбце этого квадрата имелись офицеры всех званий и полков. Как они должны это сделать?” Никто не мог найти удовлетворительного решения этой задачи, так что Эйлер решил взяться за эту проблему (несмотря на то, что в 1771 году он практически ослеп и диктовал все свои работы ассистентам). Он написал большую работу на эту тему [в конце концов опубликованную в Verhandelingen uitgegeven door het Zeeuwsch Genootschap der Wetenschappen te Vlissingen 9 (1782), 85-239], в которой привел решения подобной задачи для п званий и п полков для п = 1, 3, 4, 5, 7, 8, 9, 11, 12, 13, 15, 16, ...; ему не поддались только случаи nmod4 = 2. Очевидно, что при п = 2 решения не существует. Но Эйлер был озадачен случаем п = 6, когда рассмотрел “очень значительное число” квадратных расста-
7 КОМБИНАТОРНЫЙ ПОИСК 23 новок, которые не работали. Он показал, что каждое решение должно приводить ко многим другим решениям, выглядящим иными, и не мог поверить, что все такие решения сумели избежать его внимания. Поэтому он говорил: “Я не сомневаюсь в своем выводе о том, что найти полный квадрат из 36 ячеек невозможно, точно так же, как невозможно найти решения для п = 10, п = 14 ... в общем случае для всех нечетно-четных чисел” Эйлер дал 36 офицерам имена аа, а/3, ау, аё, ае, aQ, ba, b/3, by, Ьё, be, bQ, ca, eft, cry, сё, ce, cQ, da, dp, dy, d6, de, dQ, ea, eft, ey, её, ее, eQ, fa, fp, fy, /ё, fe, fQ, основываясь на их полках и званиях. Он заметил, что любое решение состоит из двух отдельных квадратов, одного—для латинских букв и второго—для гре- ческих. Каждый из этих квадратов, как предполагается, содержит разные записи в строках и столбцах; так что Эйлер начал свое исследование с изучения возмож- ных конфигураций для {a, b, с, d, е, /}, которые он назвал латинскими квадратами. Латинский квадрат может быть объединен в пару с греческим квадратом, образуя “греко-латинский квадрат” только в том случае, когда квадраты ортогональны друг к другу, что означает, что пары букв (латинская, греческая) не могут встретиться более одного раза при наложении квадратов. Например, если положить а = А, b = К, с = Q, d = J, а = ф, Р = ф, у = <0> и ё = <v>, то рис. 1 эквивалентен латинскому, греческому и греко-латинскому квадратам d а b с с Ь a d a d с b b с d а ё Р а у Р ё у а аё bp са ba ay dd dP сё by су da аР (5) Конечно, можно воспользоваться любыми п различными символами в латин- ском квадрате размером п х п; все, что имеет значение, — это чтобы ни один символ не встречался дважды в одной строке или в одном столбце. Так что мы вполне можем использовать для записей числовые значения {0,1,... ,п— 1}. Кроме того, мы будем говорить просто о латинских квадратах, не подразделяя их на греческие или латинские, поскольку ортогональность — отношение симметричное. Утверждение Эйлера о том, что два латинских квадрата размером 6 х 6 не мо- гут быть ортогональны, было подтверждено Томасом Клаузеном (Thomas Clausen), который свел задачу к проверке 17 фундаментально различных случаев. Об этом в письме, датированном 10 августа 1842 года, К. Ф. Гауссу (С. F. Gauss) сообщил Г. К. Шумахер (Н. С. Schumacher). Сам Клаузен свой анализ не публиковал. Первая появившаяся в печати демонстрация этого факта принадлежит Г. Тарри (G. Tarry) [Comptes rendus, Association francaisepour I’avancement des sciences 29, part 2 (1901), 170-203], который, идя собственным путем, открыл, что латинские квадраты раз- мером 6x6 могут быть разделены на 17 семейств. (В разделе 7.2.3 мы рассмотрим, как разложить задачу на комбинаторно неэквивалентные классы размещений.) Гипотеза Эйлера о значениях п = 10, п = 14, ... была “доказана” трижды: Ю. Петерсеном (J. Petersen) [Annuaire des mathematicians (Paris: 1902), 413-427], П. Вернике (P. Wernicke) [Jahresbericht der Deutschen Math.-Vereinigung 19 (1910), 264-267] и Г. Ф. Мак-Нейшем (Н. F. MacNeish) [Annals of Math. (2) 23 (1922), 221-227]. Однако во всех трех доказательствах известны недостатки; так что вопрос оставался открытым до тех пор, пока много лет спустя не стали доступны быст-
24 КОМБИНАТОРНЫЙ ПОИСК 7 родействующие компьютеры. Одной из первых комбинаторных задач, решенных с применением ЭВМ, стала загадка греко-латинского квадрата размером 10 х 10: существует он или нет? В 1957году Л. Д. Пейдж (L. J. Paige) и Ч. Б. Томпкинс (С. В. Tompkins) за- программировали ЭВМ SWAC для поиска контрпримера для предсказания Эйлера. Они выбирали один отдельный латинский квадрат 10 х 10 “почти случайно” и их программа пыталась найти другой квадрат, ортогональный первому. Но результат оказался обескураживающим, и они решили прекратить вычисления через пять часов работы. За это время машина сгенерировала достаточно данных, чтобы можно было предсказать, что вся работа потребует как минимум 4.8 х 1011 часов машинного времени! Вскоре после этого трем математикам удалось совершить прорыв, который вынес латинские квадраты на страницы одной из ведущих мировых газет (New York Times от 29 апреля 1959года): Р. Ч. Бозе (R. С. Bose), Ш. Ш. Шрикханде (S. S. Shrikhande) и Э. Т. Паркер (Е. Т. Parker) нашли замечательный ряд постро- ений, которые дают ортогональные квадраты размером п х п для всех п > 6 [Proc. Nat. Acad. Sci. 45 (1959), 734-737, 859-862; Canadian J. Math. 12 (1960), 189-203]. Таким образом, после сопротивления атакам в течение 180 лет гипотеза Эйлера оказалась почти полностью ошибочной. Их открытие было сделано без привлечения компьютеров. Но Паркер работал на UNIVAC, и его навыки программиста помогли получить решение задачи Пейджа и Томпкинса менее чем за час машинного времени ЭВМ UNIVAC 1206 Military Computer. [См. Proc. Symp. Applied Math. 10 (1960), 71-83; 15 (1963), 73-81.] Давайте взглянем, как работали программисты тех времен и как Паркер пре- взошел их. Пейдж и Томпкинс начали со следующего квадрата L размером 10 х 10 и его пока неизвестного ортогонального напарника М: <0 12345678 9\ /0 uuuuuuuu 1832547690 luuuuuuuuu 2956308471 2uuuuuuuuu 3709861524 3uuuuuuuuu r 4675290813 . 4uuuuuuuuu 5094783162 и 5uuuuuuuuu (6) 6547132908 6uuuuuuuuu 7418029356 7uuuuuuuuu 8360915247 8uuuuuuuuu \9 28167403 5/ \9 uuuuuuuu и) Без потери общности можно считать, что строки М начинаются, как показано, с 0, 1, ..., 9. Задача заключается в заполнении 90 остающихся пустыми записей, и исходная программа для SWAC работала сверху вниз и слева направо. Верхняя левая пустая запись и не может содержать 0, поскольку 0 уже имеется в верхней левой строке М. Это не может быть и 1, так как пара (1,1) уже имеется слева в следующей строке квадрата (L, М). Однако мы можем умозрительно вставить в это место 2. Следующей можно вставить цифру 1; и так постепенно мы найдем лексикографически наименьшую верхнюю строку, которая может быть в М, а имен- но 0214365897. Аналогично наименьшими строками, которые могут размещаться под 0214365897, являются 1023456789 и 2108537946; очередная наименьшая стро- ка имеет вид 3540619278. К сожалению, после этого мы попадаем в переплет:
7 КОМБИНАТОРНЫЙ ПОИСК 25 нет никакой возможности завершить очередную строку так, чтобы не вступить в конфликт с уже имеющимися. Поэтому заменим 3540619278 на 3540629178 (но и этот выбор не дает возможности продолжать работу), затем на 3540698172, и так еще несколько шагов, пока наконец не достигнем строки 3546109278, за которой может следовать строка 4397028651, после которой мы снова встретимся с неприятностями. В разделе 7.2.3 мы изучим методы оценки поведения таких поисков без ре- ального их проведения. Такие оценки говорят нам о том, что в данном случае метод Пейджа-Томпкинса, по сути, обходит неявное дерево поиска, содержащее около 2.5 х 1018 узлов. Большинство этих узлов принадлежит только нескольким уровням дерева; больше половины из них работают с выбором правой части шестой строки М, после того как около 50 из 90 пустых мест заполнены. Типичный узел дерева поиска требует для проверки, вероятно, около 75 обращений к памяти. Сле- довательно, общее время работы на современном компьютере можно оценить как время, необходимое для выполнения 2 х 1О20 обращений к памяти. Паркер же вернулся к методу, который Эйлер использовал для поиска ортого- нальных пар в 1779 году. Сначала он находил все так называемые секущие (trans- versals) матрицы L, а именно все способы выбора некоторых из ее элементов так, чтобы в каждой строке и каждом столбце имелся ровно один элемент, причем что- бы были использованы все возможные значения элементов. Например, одним из сечений в записи Эйлера является 0859734216, т. е. в столбце 0 мы выбираем 0, в столбце 1—8, ..., в столбце 9 — 6. Каждая секущая, включающая к в крайнем слева столбце L, представляет корректный способ размещения десяти к в квадра- те М. Задача поиска секущих в действительности достаточно проста. Для данной матрицы L, оказывается, их имеется ровно 808; для к = (0,1,... ,9) имеется соот- ветственно (79,96,76,87,70,84,83,75,95,63) секущих. После того как нам становятся известными секущие, остается решить задачу точного покрытия из десяти этапов, что существенно проще, чем исходная 90-этап- ная задача в (6). Все, что нам нужно, — это покрыть квадрат десятью непере- секающимися секущими, поскольку каждое такое множество из десяти секущих эквивалентно латинскому квадрату М, ортогональному L. Конкретный квадрат L из (6) в действительности имеет ровно одну ортогональ- ную пару: /0 12345678 9\ 1832547690 2956308471 3709861524 4675290813 5094783162 6547132908 7418029356 8360915247 \9 28167403 5/ /0 2 8 5 9 4 7 3 6 1\ 1749365028 2564870193 3690458217 4817536902 5178029436 6902713845 7351204689 8023691754 \9 43618257 0/ (7) Алгоритм танцующих связей находит это решение и доказывает его единственность всего лишь примерно за 1.7 х 108 обращений к памяти для данных 808 секущих. Стоимость же фазы поиска секущих (около пяти миллионов обращений к памяти) пренебрежимо мала по сравнению с поиском матрицы. Таким образом, исходное
26 КОМБИНАТОРНЫЙ ПОИСК 7 время работы, равное 2 х Ю20 обращениям к памяти и считавшееся неизбежной платой за решение задачи с 1О90 возможными способами заполнения пустых слотов, оказалось уменьшено более чем в 1012(!) раз. Позже мы увидим, что можно внести усовершенствования и в методы решения 90-уровневой задачи наподобие (6). Действительно, оказывается, (6) непосредствен- но представимо в качестве задачи точного покрытия (см. упр. 17), которая решается процедурой танцующих связей из раздела 7.2.2.1 ценой всего лишь 1.3 х 1011 обраще- ний к памяти. Но даже в этом случае подход Эйлера-Паркера оказывается в тысячу раз лучше подхода Пейджа-Томпкинса. “Разложив” задачу на две отдельные фазы, одну для поиска секущих и вторую—для их объединения, Эйлер и Паркер, по сути, уменьшили стоимость вычислений с произведения Т1Т2 ДО суммы Т) + Т%. Мораль этой истории очевидна: комбинаторные задачи могут поставить нас перед лицом огромной совокупности возможностей, но мы не должны сразу же опускать руки. Одна хорошая идея может на много порядков сократить количество требующихся вычислений. Головоломки и реальный мир. Многие из комбинаторных задач, которые мы будем рассматривать в этой главе, наподобие задач Лэнгфорда о парах или Озанама о шестнадцати картах, изначально представляли собой не более чем головоломки. Некоторых особо серьезно настроенных читателей такая легкомысленность некото- рых задач может попросту отпугнуть. В самом деле, стоит ли тратить попусту машинное время, неужели ему нет более полезного применения? И не должна ли книга, посвященная компьютерам и программированию, в первую очередь оза- ботиться важными промышленными и научными приложениями, определяющими мировой прогресс? Начнем с того, что автор данной книги совершенно не озадачивался ее полезно- стью для прогресса человечества. Но он твердо убежден, что такая книга, как эта, должна обратить особое внимание на методы решения задач, а также на математи- ческие идеи и модели, которые помогут решать многие различные проблемы, а не на причины, по которым такие методы и модели могут быть полезными. Мы изу- чим множество красивых и эффективных способов решения комбинаторных задач, и главной причиной их изучения будет элегантность этих методов. Комбинаторные задачи встречаются повсюду, и ежедневно появляются новые способы применения описываемых в этой главе методик. Так что давайте не будем заранее ограничивать сами себя, пытаясь заранее классифицировать, для чего годятся те или иные идеи. Например, оказывается, что ортогональные латинские квадраты чрезвычайно полезны, в особенности при планировании экспериментов. Уже в 1788 году Фран- суа Кретте де Паллюль (Francois Crette de Palluel) использовал латинский квадрат размером 4x4 для изучения, что будет с шестнадцатью овцами четырех различ- ных пород при применении четырех различных кормов и четырех разных периодов стрижки. [Memoires d’Agriculture (Paris: Societe Royale d’Agriculture, trimestre d’ete, 1788), 17-23.] Латинский квадрат позволил ему ограничиться 16 овцами вместо 64; при использовании греко-латинского квадрата он мог бы варьировать еще один параметр, например количество корма или вид пастбища. Если бы мы сосредоточились на его воззрениях на животноводство, то мог- ли бы увязнуть в деталях разведения овец, сравнении корнеплодов с зерновыми
7 КОМБИНАТОРНЫЙ ПОИСК 27 и расходами на их выращивание и т. д. Читатели, не интересующиеся сельским хозяйством, могли бы пропустить весь материал, несмотря на то, что латинские квадраты применимы к широкому спектру исследований (представьте, например, проверку действия лекарства на пациентов на пяти стадиях некоторого заболевания, пяти возрастных и пяти весовых группах). Кроме того, концентрация на опытно- исследовательском применении латинских квадратов может привести к тому, что читатели упустят тот факт, что латинские квадраты имеют важные приложения в дискретной геометрии и кодах с исправлением ошибок (см. упр. 18-24). Даже задача Лэнгфорда, на первый взгляд кажущаяся чистым развлечением, также имеет практическую ценность. Т. Сколем (Т. Skolem) использовал после- довательности Лэнгфорда для построения Штейнеровской системы троек, которую мы применяли для запросов к базам данных в разделе 6.5 [см. Math. Scandinavica 6 (1958), 273-280]; а в 1960-х годах Э. Д. Грот (Е. J. Groth) из Motorola Corporation применил пары Лэнгфорда в разработке электронных схем для умножения. Кроме того, алгоритмы, которые эффективно решают задачу Лэнгфорда и секущих латин- ских квадратов, такие как метод танцующих связей, применимы к решению задач точного покрытия в общем случае; а задача точного покрытия имеет большое зна- чение для таких важнейших проблем, как, например, справедливое распределение участков для избирательных округов и т. п. Ни приложения, ни головоломки не являются наиболее важными вещами. Наша главная цель — внедрить в свои головы базовые концепции наподобие понятий ла- тинских квадратов или точного покрытия. Эти концепции обеспечат нас строитель- ными блоками, словарем и пониманием, необходимыми для решения завтрашних задач. Глупо обсуждать решение задач без практического решения каких бы то ни было задач. Для стимуляции нашего мышления и воображения, упорядочения серых клеточек и знакомства с базовыми концепциями нужны подходящие зада- чи. И для этой цели часто лучше всего подходят именно головоломки, поскольку их можно изложить буквально несколькими словами и они не требуют сложных базовых знаний. Жизнь — слишком сложная вещь, чтобы относиться к ней, как к очередной головоломке, которую следует решить и которую можно решить, просто снабдив машину соответствующими инструкциями и данными. Но, к счастью, есть загадки, которые могут быть решены! Головоломки стоят того, чтобы причислить их к наи- большим удовольствиям жизни, которыми, как и любыми другими удовольствиями, следует пользоваться умеренно и без злоупотреблений. Конечно, Лэнгфорд и Озанам предназначали свои головоломки для людей, а не для компьютеров. Разве смысл не будет потерян, если мы просто передадим задачу машинам, которые будут решать ее методом грубой силы, а не с помощью искус- ного применения рационального мышления? Джордж Брюстер (George Brewster) в письме Мартину Гарднеру (Martin Gardner) в 1963 году выразил широко распро- страненное мнение следующим образом: “Скармливать головоломки для отдыха компьютерам — немногим лучше, чем глушить форель в горной реке динамитом. Оставьте человеку возможность расслабиться’.’ Хотя с этим трудно не согласиться, указанная точка зрения упускает один важный момент: простые головоломки часто имеют обобщения, которые выходят за
28 КОМБИНАТОРНЫЙ ПОИСК 7 рамки человеческих возможностей и вызывают наше любопытство. Изучение этих обобщений часто предполагает наличие поучительных методов, которые могут при- меняться к ряду других проблем и иметь неожиданные последствия. Действительно, многие из ключевых методов, которые мы будем изучать, родились в попытках решения различных головоломок. При написании этой главы автор не мог не наслаждаться тем фактом, что теперь, когда компьютеры становятся все более и более быстрыми, головоломки доставляют еще большее удовольствие, ведь теперь в наших руках оказывается еще более мощный динамит, с которым можно вволю поиграться. [Более подробно точка зрения автора изложена в его эссе “Полезны ли задачи-головоломки?” написанном еще в 1976году; см. Selected Papers on Computer Science (1996), 169-183.] Опасность головоломок в том, что они могут оказаться слишком элегантными. Хорошие головоломки, как правило, математически чисты и хорошо структуриро- ваны, но нам надо научиться систематически работать с тем грязным, хаотическим материалом, который ежедневно нас окружает. Фактически некоторые вычисли- тельные методы важны, в первую очередь, потому, что они предоставляют мощные способы преодоления этих сложностей. Вот почему, например, в начале главы 5 рас- сказывалось о загадочных правилах упорядочения библиотечных каталогов, а в раз- деле 2.2.5 моделировалась работа реального лифта. Чтобы в экспериментах с комбинаторными алгоритмами можно было восполь- зоваться данными из реального мира, подготовлена коллекция программ и данных под названием Stanford GraphBase (SGB). Она включает, например, данные об аме- риканских автострадах и модель “затраты-выпуск” американской экономики; в ней описано распределение персонажей в Илиаде Гомера, Анне Карениной Льва Толсто- го и ряде других романов; здесь можно найти структуру Thesaurus 1879 года Род- жета (Roget) и результаты сотен футбольных матчей разных колледжей; в ней есть даже значения пикселей черно-белого варианта Джоконды (Моны Лизы) Леонардо да Винчи. Но, пожалуй, самое важное то, что SGB содержит набор пятибуквенных английских слов, которые мы и рассмотрим следующими. Пятибуквенные английские слова. Множество примеров в этой главе будут основываться на списке пятибуквенных слов aargh, abaca, abaci, aback, abaft, abase, abash, ..., zooms, zowie. (8) (Всего в нем содержится 5757 слов — слишком много, чтобы перечислить здесь их все; но вы легко можете представить себе отсутствующие в (8) слова.) Это список, лично составленный автором книги между 1972 и 1992 годами, начиная с того времени, когда он понял, что такие слова представляют собой идеальные (ideal) данные для тестирования комбинаторных алгоритмов различных видов. Этот список преднамеренно ограничен только истинными словами английского языка, в том смысле, что автор встречался с их реальным применением. Полные словари содержат тысячи слов, известных лишь особо посвященным, такие как aalii, abamp, ..., zymin и zyxst; но такие слова нужны, в первую очередь, игрокам в Scrabble®*. Однако применение таких слов уменьшает удовольствие тех, кто * Скрэббл (от англ. Scrabble — рыться в поисках чего-либо) — настольная игра, в которую могут играть от 2 до 4 человек, выкладывая слова из имеющихся у них букв в поле размером 15 х 15. В русскоязычной среде известна под названием Эрудит. — Примеч. пер.
7 КОМБИНАТОРНЫЙ ПОИСК 29 с ними не знаком. Поэтому в течение двадцати лет автор систематически записывал все слова, которые казались ему подходящими для дидактических целей Искусства программирования. Наконец, эту коллекцию стало просто необходимо “заморозить” и прекратить пополнять хотя бы для того, чтобы иметь возможность получать воспроизводимые результаты экспериментов. Английский язык продолжает эволюционировать, но 5757 слов всегда останутся неизменными — несмотря на то, что временами автор порывался добавить к списку слова, с которыми он не был знаком в 1992 году, такие как chads, stent, blogs, ditzy, phish, bling и, возможно, tetch. Но это не было сделано—время для внесения изменений в SGB закончилось. Этот словарь предназначен для хранения всех хорошо известных английских слов... которые можно использовать в приличном обществе и которые могут служить в качестве звеньев. — ЛЬЮИС КЭРРОЛЛ (LEWIS CARROLL), Doublets: A Word-Puzzle (1879) Собственные имена наподобие Knuth не рассматривались как корректные пя- тибуквенные слова. Однако, например, такое слово, как gauss, корректно, по- скольку “gauss” представляет собой единицу измерения магнитной индукции. Слова в SGB состоят только из обычных строчных букв; в списке нет слов с переносами, сокращений или слов, требующих ударения, наподобие blasg. Таким образом, каждое слово можно рассматривать и как вектор с пятью компонентами в диапазоне [О.. 26). В векторном смысле слова yucca и abuzz отстоят друг от друга дальше всех: евклидово расстояние между ними равно ||(24,20,2,2,0) - (0,1,20,25,25)||2 = >/242 + 192 + 182 + 232 + 252 = >/2415. Полностью Stanford GraphBase со всеми программами и данными можно загру- зить с веб-сайта автора http://www-cs-faculty.stanford.edu/-knuth/sgb.html. Получить список всех слов SGB еще проще, так как он находится по тому же адресу, но в файле ‘sgb-words.txt’. Этот файл содержит 5757 строк, в каждой из которых имеется одно слово, начиная с ‘which’ и заканчивая ‘pupal’. Слова расположены в порядке, соответствующем их частоте употребления; например, словами с рангами 1000, 2000, 3000, 4000 и 5000 являются соответственно ditch, galls, visas, faker и pismo. Запись ‘WORDS(n)’ в этой главе будет использоваться для обозначения п наиболее часто встречающихся слов, в соответствии с их рангами. Кстати, пятибуквенные слова часто включают множественное число четырех- буквенных слов, что, конечно, недопустимо при строгом подходе к делу, и такие слова не встретятся вам в The Official Scrabble® Players Dictionary, но для слова- ря SGB они вполне годятся. Один из способов гарантировать, что семантически неподходящие термины не попадут в статью, основанную на списке слов SGB,— ограничить рассмотрение множеством WORDS(n), где п равно, скажем, 3000. Упр. 26-37 могут использоваться в качестве разминки для начального изучения слов SGB, с которыми мы встретимся в этой главе в самых разных комбинаторных контекстах. Например, пока мы еще недалеко ушли от задач покрытия, мы можем заметить, что четыре слова ‘third flock began jumps’ охватывают 20 из первой 21 буквы алфавита. Пять же слов могут охватить не более 24 различных букв, как
30 КОМБИНАТОРНЫЙ ПОИСК 7 в случае {becks,fjord,glitz,nymph, squaw}, если только мы не обратимся к редко- му, отсутствующему в SGB слову наподобие waqf s (пожертвование для мусульман- ских религиозных или благотворительных целей), которое можно скомбинировать со словами {gyved, bronx, chimp, klutz} для охвата 25 букв. Простых слов из WDRDS(400) достаточно для образования квадрата из слов: class light agree . (9) sheep steps Однако для получения куба из слов требуется добраться почти до WDRDS(3000): types yeast pasta ester start yeast earth armor stove three pasta armor smoke token arena . (10) ester stove token event rents start three arena rents tease Здесь каждый “срез” 5x5 представляет собой квадрат из слов. С помощью простого расширения базового алгоритма танцующих связей (см. раздел 7.2.2.2) можно пока- зать ценой около 390 миллиардов обращений к памяти, что WDRDS(3000) дает возмож- ность получить только три симметричных куба из слов, таких как (10); в упр. 36 вы найдете оставшиеся два. Интересно, что из полного множества WORDS(5757) можно создать 83 576 симметричных кубов. Графы из слов. Конечно, интересно и важно помещать объекты в строки, квад- раты, кубы и прочие фигуры; но в практических приложениях имеется еще более интересная и важная комбинаторная структура, а именно граф. Вспомним из раз- дела 2.3.4.1, что граф представляет собой множество точек, именуемых вершинами, вместе с множеством линий, называющихся ребрами, которые соединяют опреде- ленные пары вершин. Графы применяются повсеместно, и имеется масса красивых алгоритмов, предназначенных для работы с ними, так что графы естественным об- разом оказываются в центре внимания многих разделов данной главы. Фактически Stanford GraphBase, в первую очередь, посвящена графам, что отражено даже в ее названии; а слова SGB собирались автором главным образом потому, что их можно использовать для определения интересных и поучительных графов. Льюис Кэрролл (Lewis Carroll) указал путь, изобретя в конце 1877 года игру “Дублеты” (Doublets). [См. Martin Gardner, The Universe in a Handkerchief (1996), Chapter 6.] Идея Кэрролла, которая быстро завоевала популярность, заключалась в преобразовании одного слова в другое путем замены на каждом шаге одной буквы; например, вот как слезы (tears) превращаются в улыбку (smile):* tears — sears — stars — stare — stale — stile — smile. (11) Кратчайшая такая трансформация является кратчайшим путем в графе, в котором вершинами являются английские слова, а ребра соединяют пары слов, расстояние * Вот как по тем же правилам в русском языке муха превращается в слона: муха — муза — луза — лоза — коза — кора — кара — каре — кафе — кафр — каюр — каюк — крюк — урок — урок — срок — сток — стон — слон. — Примем. пер.
7 КОМБИНАТОРНЫЙ ПОИСК 31 Хэмминга между которыми равно 1 (т. е. они отличаются одно от другого только одной буквой). Если ограничиться только словами из SGB, правило Кэрролла дает граф из Stanford GraphBase, официальное название которого — words (5757,0,0,0). Каждый граф, определяемый SGB, имеет свой уникальный идентификатор, и “кэрролло- образный” граф, порожденный из слов SGB, идентифицируется как words(n,l,t,s). Здесь п — количество вершин графа; I либо равно 0, либо представляет собой список весов, используемый для акцентирования различных видов словаря; t представляет собой пороговое значение, с тем чтобы можно было отвергнуть слова с малыми весами; a s — исходное значение для генерации псевдослучайных чисел, которые могут потребоваться для разбиения связей между словами с одинаковыми весами. Детальная информация в данном случае нас не интересует; нескольких примеров вполне достаточно для представления об общей идее. • words (п, 0,0,0) — граф, получающийся при применении правила Кэрролла к множеству WORDS(n), для 1 < п < 5757. • words (1000, {0,0,0,0,0,0,0,0,0}, 0, s) содержит 1000 выбранных случайным об- разом слов SGB, обычно разных при разных значениях s. • words(766, {0,0,0,0,0,0,0,1,0}, 1,0) содержит все пятибуквенные слова из книг автора о Т^Х и METAFONT. В последнем графе всего лишь 766 слов, так что мы не сможем образовать очень много длинных путей наподобие (11), хотя basic — basis — bases -— based — baked—naked—named — names — games (12) является одним из стоящих внимания примеров. Конечно, имеется много других способов определения ребер графа, вершины которого представляют пятибуквенные слова. Можно, например, вместо расстояния Хэмминга использовать расстояние Евклида. Можно также объявить два слова смежными, если у них имеется общее подслово длиной 4 буквы; эта стратегия существенно обогащает граф, делая возможным превращение chaos в peace, даже ограничиваясь 766 словами, связанными с Т^Х: chaos — chose — whose — whole — holes — hopes — copes — scope — score — store — stare — spare — space — paces — peace. (13) (Использованное правило позволяет удалить букву, а затем вставить другую — воз- можно, в другом месте.) Мы можем выбрать и совершенно иную стратегию, та- кую как размещение ребра между словами-векторами 0102030405 и 6162636465 тогда и только тогда, когда их скалярное произведение 0161+0262+0353+0464+0565 кратно некоторому параметру тп. Алгоритмы для работы с графами умеют одинаково успешно справляться с разными видами данных. Слова SGB приводят также к интересному семейству ориентированных гра- фов, если создавать ребра 0102030405 —» 6162636465 тогда, когда {02,03,04,05} С {61,62,63,64,65} при рассмотрении слов как мультимножеств. (Удалить первую букву, добавить другую и переупорядочить.) Применение этого правила позволяет, например, преобразовать words в graph с помощью кратчайшего ориентированного
32 КОМБИНАТОРНЫЙ ПОИСК 7 пути длиной 6: words —» dross —» soars —» orcas —» crash —» sharp —» graph. (14) Теория—первый член ряда Тейлора для практики. — ТОМАС М. КОВЕР (THOMAS М. COVER) (1992) Количество терминологических систем, используемых в настоящее время в теории графов, неплохо аппроксимируется количеством теоретиков в этой области. — РИЧАРД П. СТЕНЛИ (RICHARD Р. STANLEY) (1986) Основы теории графов. Граф G состоит из множества вершин V и множества ребер Е, которые представляют собой пары различных вершин. Мы будем считать, что V и Е являются конечными множествами, если только явно не указано иное. Мы пишем и — v, если и и v являются вершинами, такими, что {u, и} G Е, и и v, если и и v являются вершинами, такими, что {и, и} Е. Вершины с и — v называются соседними, или смежными, в G. Одно из следствий этого определения заключается в том, что и — v тогда и только тогда, когда v — и. Другое следствие заключается в том, что v -j- v для всех v € V; другими словами, ни одна из вершин не смежна сама себе. (Однако ниже мы рассмотрим мультиграфы, в которых разрешены петли, идущие из вершины в саму себя.) Граф G' = (V',E') является подграфом G = (V,E), если V С V и Е' С Е. Это остовный подграф G, если в действительности V = V. И это порожденный (инду- цированный) подграф G, если, когда V представляет собой заданное подмножество вершин, Е' имеет максимально возможное количество ребер. Другими словами, когда V' С V, подграфом G = (V, Е), порожденным V, является G' = (V',E'), где Е' = { {и, и} | и G V, v G V и {u, и} 6 Е }. (15) Этот подграф G' обозначается как G | V и часто называется “G, ограниченный V'” В распространенном случае, когда V = V \ {и}, мы записываем просто G \ v (“G минус вершина v”) как сокращение для G | (V \ {г}). Аналогичная запись G \ е (где е € Е) используется для обозначения подграфа G' = (V,E\ {е}), полу- чаемого путем удаления ребра, а не вершины. Заметим, что все описанные ранее SGB-графы words (n,l,t,s) являются порожденными подграфами основного графа words (5757,0,0,0); в этих рассмотренных графах изменяется только словарь, но не правило смежности. Граф с п вершинами и е ребрами называется имеющим порядок п и размер е. Простейшими и наиболее важными графами порядка п являются полный граф Кп, путь Рп и цикл Сп. Предположим, что вершинами являются V = {1,2,...,п}. Тогда • Кп имеет Q) = |n(n — 1) ребер и — v для 1 < и < v < п; каждый граф с п вершинами является остовным подграфом Кп-, • Рп имеет п — 1 ребер v — (v+l) для 1 < v < п, где п > 1; это—путь длиной п— 1 от 1 до п; • Сп имеет п ребер v — ((v mod п)+1) для 1 < v < n, где n > 1; он является графом, только когда п > 3 (Cj и Сг являются мультиграфами).
7 КОМБИНАТОРНЫЙ ПОИСК 33 В действительности можно определить Кп, Рп и Сп на вершинах {0,1,... ,п—1} или на любом n-элементном множестве V вместо {1,2, ...,п}, поскольку два гра- фа, отличающихся только именами вершин, но не структурой ребер, комбинаторно эквивалентны. Формально графы G = {V,E} и G' = (V',E') изоморфны, если существует взаимно однозначное соответствие между V и V', такое, что и — v в G тогда и только тогда, когда <р(и) — в G'. Для указания изоморфности графов G и G' часто используется обозначение G = G1’, впрочем, часто мы будем менее строги, рассматривая изоморфные графы, как если бы они были эквивалентными, и время от времени записывая G = G', даже когда множества вершин G и G' не строго идентичны. Небольшие графы можно определить, просто начертив диаграмму, в которой вершины изображены маленькими кружками, а ребра—линиями между ними. На рис. 2 показано несколько важных примеров, свойства которых мы изучим позже. Граф Петерсена на рис. 2, (д) назван по имени Юлиуса Петерсена (Julius Petersen), одного из основателей теории графов, который использовал его для опроверже- ния одного правдоподобного предположения [L’Intermediaire des Mathematicians 5 (1898), 225-227]; в действительности это замечательная конфигурация, которая слу- жит контрпримером для многих оптимистических предсказаний о том, что может оказаться истинно для всех графов в целом. Граф Чватала (см. рис. 2, (е)) описан Вацлавом Чваталом (Vaclav Chvatal) в J. Combinatorial Theory 9 (1970), 93-94. Рис. 2. Шесть примеров графов с (5,5,5,8,10,12) вершинами и (4,5,10,12,15,24) ребрами соответственно. Линии на диаграмме могут пересекаться одна с другой в точках, не являющих- ся вершинами. Например, центральная точка на рис. 2, (е) не является вершиной графа Чватала. Граф называется планарным, если существует способ изобразить его без каких бы то ни было пересечений. Ясно, что Рп и Сп всегда планарны; представленная на рис. 2, (г) диаграмма показывает, что трехмерный куб также является планарным графом. Но К$ имеет слишком много вершин, чтобы быть планарным (см. упр. 46). Степенью вершины является количество ее соседей. Если все вершины имеют одну и ту же степень, граф называется регулярным. На рис. 2, например, Р$ явля- ется нерегулярным графом, так как две его вершины имеют степень 1, а три — сте- пень 2. Остальные пять графов регулярны, со степенями соответственно (2,4,3,3,4). Регулярный граф степени 3 часто называется кубическим или трехвалентным. 2 Зак. 3331
34 КОМБИНАТОРНЫЙ ПОИСК 7 Имеется много способов изобразить тот или иной граф, и одни из них более выразительны, чем другие. Например, каждая из шести диаграмм изоморфна трехмерному кубу (рис. 2, (г)). Диаграмма графа Чватала, показанная на рис. 2, (е) и раскрывающая неожиданную симметрию графа, придумана Адриа- ном Бонди (Adrian Bondy) через много лет после публикации статьи Чватала. Симметриями графа, известными также как его автоморфизмы, являются пе- рестановки его вершин, сохраняющие отношение смежности. Другими словами, перестановка является автоморфизмом G, если <р(и) — когда и — v в гра- фе G. Хорошо продуманный чертеж наподобие рис. 2, (е) может выявить симметрию графа, но одна диаграмма не всегда в состоянии показать все существующие сим- метрии. Например, трехмерный куб имеет 48 автоморфизмов, а граф Петерсена— 120. Мы изучим алгоритмы для работы с изоморфизмами и автоморфизмами в раз- деле 7.2.3. Симметрии часто помогают избавиться от излишних вычислений, делая алгоритмы при работе с графами, обладающими к автоморфизмами, почти в к раз быстрее. Графы, связанные с объектами реального мира, обычно существенно отличают- ся от чисто математических графов наподобие приведенных на рис. 2. Например, вот достаточно знакомый американцам граф, вовсе не имеющий симметрии, но зато обладающий достоинством планарности. Он представляет внутренние границы США, и позже мы используем его в несколь- ких примерах. Для удобства вместо изображения пустых кружков 49 вершин на этой диаграмме помечены двухбуквенными кодами штатов.* * От переводчика: пожалуй, читателям переводного издания книги более знакомыми окажутся подобные географические графы, представляющие, например, республики бывшего СССР: (Белоруссия (Дитва (Украина атзд ОСС1 1стокия) (Туркмения) Казахстан)—(Узбекистан)—(Таджикистан) (Грузия)---(Азербайджан) (Киргизия) (17, с) (Молдавия)
7 КОМБИНАТОРНЫЙ ПОИСК 35 Пути и циклы. Остовный путь Рп графа называется гамильтоновым путем, и остовный цикл Сп — гамильтоновым циклом, по имени У. Р. Гамильтона (W. R. Hamilton), предложившего в 1856году головоломку, состоящую в поиске таких путей по ребрам додекаэдра. Независимо от него эту задачу для много- гранников в общем случае изучал Т. П. Киркман (Т. Р. Kirkman) в Philosophical Transactions 146 (1856), 413-418; 148 (1858), 145-161. [См. N. L. Biggs, Е. К. Lloyd, R. J. Wilson Graph Theory 1736-1936 (1998), Chapter 2.] Однако задача поиска остов- ного пути или цикла гораздо старше; на самом деле ее можно рассматривать как наиболее старую из комбинаторных задач, поскольку поиск путей обхода шахмат- ной доски конем имеет долгую историю, ведущую вглубь веков—в Индию IX века (см. раздел 7.3.3). Граф называется гамильтоновым, если он имеет гамильтонов цикл. (Граф Петерсена, кстати, является наименьшим 3-регулярным графом, не являющимся ни планарным, ни гамильтоновым; см. С. dePolignac, Bull. Soc. Math, de France 27 (1899), 142-145.) Обхватом (girth) графа называется длина его наименьшего цикла; обхват ацик- личного графа (не содержащего циклов) бесконечен. Например, шесть графов на рис. 2 имеют обхваты (оо, 5,3,4,5,4) соответственно. Нетрудно доказать, что граф с минимальной степенью к и обхватом 5 должен иметь как минимум к2 + 1 вершин. Дальнейший анализ показывает, что фактически этот минимум достижим, только если к = 2 (Cg), к = 3 (граф Петерсена), к = 7 или, вероятно, к = 57 (см. упр. 63 и 65.) Расстоянием d(u,v) между двумя вершинами и и v является минимальная длина пути от и до v в графе; оно равно бесконечности, если такого пути не суще- ствует. Ясно, что d(v,v) = 0 и что d(u,v) = d(v,u). Справедливо также неравенство треугольника d(u, v) + d(v, w) > d(u,w). (18) Ибо, если d(u, v) = p, d(v, w) = q, p < оо и q < оо, то существуют пути и = ио-----Щ------------Up = V И V - Vo---------V1------------Vq — W, (19) и можно найти наименьший индекс г, такой, что иТ = va для некоторого s. Тогда «О---«1----------«г-1----vs---Vs+1----------Vq (20) представляет собой путь длиной < р + q от и до w. Диаметром графа является максимум d(u,v) по всем вершинам и и v. Граф называется связным, если его диаметр конечен. Вершины графа всегда могут быть или области Украины (соответствующий граф для России занял бы слишком много места): -(Житомир)- (Ивано-Франковск)—(Черновцы)^ (Одесса ювоград (Укгород)ЧДьвов)-(Еернополь)-(1мель1ПщкиЙ ернигов)—(Сумы) инница)-(Черкас сы)—<Долтава)-(Харьков) епропетровск ганск) (17, у) (Диколаев)—(Иерсон)-(3апорожье) (Симферополь) (Здесь вершины графа помечены областными центрами и столицей автономной республики Крым, а не названиями соответствующих областей.)
36 КОМБИНАТОРНЫЙ ПОИСК 7 разбиты на связные компоненты, где две вершины, и и v, принадлежат одному и тому же компоненту тогда и только тогда, когда d(u, v) < оо. В графе words(5757,0,0,0), например, d(tears, smile) = 6, поскольку (11) пред- ставляет собой кратчайший путь от tears к smile. Кроме того, d(tears, happy) = 6, d(smile, happy) = 10 и d(world, court) = 6. Ho d (world,happy) = оо; таким обра- зом, рассматриваемый граф не является связным. В действительности он содержит 671 слово наподобие aloof, которые не имеют соседей и сами по себе образуют связ- ные компоненты порядка 1. Пары слов наподобие alpha—aloha, droid — druid и opium — odium дают еще 103 связных компонента порядка 2. Одни компоненты порядка 3 наподобие chain—chair—choir являются путями; другие, такие как {getup, letup, setup}, представляют собой циклы. Имеется также немного большее количество небольших компонентов, наподобие занимательного пути login — logic — yogic — yogis — yogas — togas, (21) слова в котором не имеют других соседей. Но подавляющее большинство пятибук- венных слов принадлежит гигантскому компоненту порядка 4493. Если вы можете пройти два шага от имеющегося у вас слова, меняя две различные буквы, то шансы, что это слово принадлежит указанному гигантскому компоненту, превышают 15 к 1. Аналогично граф words (п, 0,0,0) имеет при п = (5000,4000,3000,2000,1000) гигантский компонент порядка (3825,2986,2056,1186,224) соответственно. Но если п мало, то ребер для связности оказывается недостаточно. Например, words (500,0, 0,0) имеет 327 различных компонентов, причем среди них нет ни одного компонента порядка 15 или выше. Концепцию расстояния можно обобщить и рассматривать величину d(vi,t>2, ..., г*,) для любого значения к, которая представляет собой минимальное количес- тво ребер в связанном подграфе, содержащем вершины {гд, г>2,..., г^}. Например, d (blood, sweat, tears) оказывается равным 15, поскольку подграф blood — brood — broad—bread—tread—treed — tweed tears — teams — trams — trims — tries — trees tweet (22) sweat — sweet имеет 15 ребер, а подходящего подграфа из 14 ребер не существует. В разделе 2.3.4.1 мы упоминали, что связный граф с наименьшим количеством ребер называется свободным деревом. Подграф, соответствующий обобщенному расстоянию d(vi,..., и*,), всегда будет свободным деревом. Его ошибочно называют деревом Штейнера, поскольку Якоб Штейнер (Jacob Steiner) однажды упомянул случай к = 3 для точек {г>1, г?2, из} на евклидовой плоскости [СгеПе 13 (1835), 362-363]. Франц Хайнен (Franz Heinen) решил эту задачу в Uber Systeme von Kraften (1834); Гаусс (Gauss) распространил анализ на случай к = 4 в письме к Шумахеру (Schumacher) от 21 марта 1836 года. Раскраска графа. Граф называется к-долъным, или к-раскрашиваемым, если его вершины могут быть разбиты на к или менее частей так, что концы каждого ребра принадлежат различным частям — или, что то же самое, если имеется способ раскрасить его вершины не более чем к различными цветами, так, чтобы смежные
7 КОМБИНАТОРНЫЙ ПОИСК 37 вершины не были окрашены в один и тот же цвет. Знаменитая Теорема четырех красок, сформулированная в 1852году Ф. Гутри (F. Guthrie) и окончательно дока- занная с применением компьютера К. Аппелем (К. Appel), В. Хакеном (W. Haken) и Д. Кохом (J. Koch) [Illinois J. Math. 21 (1977), 429-567], гласит, что любой пла- нарный граф является 4-раскрашиваемым. Простое доказательство этой теоремы неизвестно, но частные случаи наподобие (17) могут быть раскрашены на глаз (см. упр. 45); в общем случае для 4-раскрашивания планарного графа достаточно О(п2) шагов [N. Robertson, D. Р. Sanders, Р. Seymour и R. Thomas, STOC 28 (1996), 571-575]. На практике особенно важен случай 2-раскрашиваемых графов. Такие графы в общем случае называются двудольными или просто биграфами-, каждое ребро такого графа имеет по одной конечной точке в каждой из частей. Теорема В. Граф является двудольным тогда и только тогда, когда он не содержит циклов нечетной длины. Доказательство. [См. D. Konig, Math. Annalen 77 (1916), 453-454.] Каждый подграф fc-дольного графа является fc-дольным. Следовательно, цикл Сп может быть подграфом двудольного графа, только если Сп сам является двудольным, а в этом случае п должно быть четным. И наоборот, если граф не содержит циклов нечетной длины, мы можем рас- красить его вершины двумя цветами {0,1}, придерживаясь следующей процедуры. Изначально все вершины не окрашены. Если все соседи окрашенных вершин уже окрашены, выберем неокрашенную вершину ш и окрасим ее в цвет 0. В противном случае выберем окрашенную вершину и, которая имеет неокрашенного соседа v\ назначим v противоположный и цвет. В упр. 48 доказывается, что в конечном итоге при этом получится корректная раскраска. | Полный двудольный граф КтгП представляет собой наибольший двудольный граф, вершины которого разделены на две части размерами тип. Его можно определить на множестве вершин {1,2,...,m+n}, говоря, что и — v тогда, когда l<u<m<v<m + n. Другими словами, Кт,п имеет тп ребер, по одному для каждого выбора одной вершины из одной части и второй — из другой. Аналогично полный k-дольный граф КП1,...,Пк имеет N = гц + ••• + п,к вершин, разделенных на части размерами {ni,... ,Пк}, и имеет ребра между любыми двумя вершинами, не принадлежащими одной и той же части. Вот несколько примеров для N = 6: А'з.з (23) Обратите внимание, что Ki>n представляет собой свободное дерево; его часто назы- вают звездой порядка п + 1. Далее я буду говорить "орграф" вместо “ориентированный граф" Это просто и кратко и явно войдет в моду. — ГЁРГИ ПОЙА (GYORGY POLYA), ПИСЬМО ФРЭНКУ ХАРАРИ (FRANK HARARY) (ОК. 1954года)
38 КОМБИНАТОРНЫЙ ПОИСК 7 Ориентированные графы. В разделе 2.3.4.2 мы определили ориентированные графы (или орграфы), которые очень похожи на графы, с тем отличием, что вместо ребер они имеют дуги. Дуга и —> v направлена от одной вершины к другой, в то время как ребро и — v соединяет две вершины, не различая их. Кроме того, ориентированные графы могут иметь петли v —> v, идущие из вершины в нее же, а также между двумя вершинами и и и может находиться более одной дуги и— Формально ориентированным графом D = (V,A) порядка п и размера т яв- ляются множество V из п вершин и мультимножество А из т упорядоченных пар (и,о), где и € V и v € V. Упорядоченные пары называются дугами, и мы за- писываем и—когда (и, v) € А. Ориентированный граф называется простым, если А является множеством, а не мультимножеством, т. е. если для всех и и v имеется не более одной дуги (и, v). Каждая дуга (и, v) имеет начальную вершину и и конечную вершину v, именуемую также верхушкой (tip). Каждая вершина имеет исходящую степень d+(y), равную количеству дуг, для которых v является началь- ной вершиной, и входящую степень d~(v), равную количеству дуг, для которых v является верхушкой. Вершина с нулевой входящей степенью называется “источни- ком” а вершина с нулевой исходящей степенью называется “стоком” Заметим, что 52i>ev^+(v) = 52i>gv^ (v), поскольку обе суммы равны т — общему количеству дуг. Большинство концепций, определенных для графов, естественным путем рас- пространяются и на ориентированные графы. Достаточно просто вставить сло- во “ориентированный”, когда возникает необходимость различать ребра и дуги. Например, ориентированные графы имеют ориентированные подграфы, которые могут быть остовными, порожденными или ни теми, ни другими. Изоморфизмом между ориентированными графами D = (У,А) и D' = [у', А') является взаимно однозначное соответствие <р между V и У', при котором количество дуг и—в D равно количеству дуг <р(и) —> <р(г) в D' для всех и, v е V. На диаграммах ориентированных графов вместо линий между вершинами ис- пользуются стрелки. Простейшими и наиболее важными ориентированными графа- ми порядка п являются ориентированные варианты графов Кп, Рп и Сп, а именно транзитивный турнир Кп, ориентированный путь и ориентированный цикл €%. Схематически для п = 5 они показаны на следующих диаграммах: Кь о—кз—кз—кз—к> ; Рь (24) Имеется также полный ориентированный граф Jn, который представляет собой наибольший простой ориентированный граф с п вершинами; он имеет п2 дуг и—>г, по одной для каждого варианта выбора и и v. На рис. 3 показана более сложная диаграмма порядка 17, которую можно на- звать отчетливо ориентированной: это ориентированный граф, описанный Эркюлем Пуаро (Hercule Poirot) в детективе Агаты Кристи (Agatha Christie) Убийство в Вос- точном экспрессе (1934).* Вершины соответствуют местам в описанном в детективе * Непереводимая игра слов: “отчетливо ориентированная” (“expressly oriented”) перекликается с оригинальным названием повести А. Кристи Murder on the Orient Express. Имена персонажей на диаграмме взяты из перевода Л. Беспаловой (Агата Кристи. Восточный экспресс. Десять негритят. Романы.— М., 1990). — Примеч. пер.
7 КОМБИНАТОРНЫЙ ПОИСК 39 ® ® (3>-® (2) Условные обозначения © <3 ® (8. 2 — Сэмьюэл Эдуард Рэтчетт, погибший американец 3 — Каролина Марта Хаббард, американка, домохозяйка 4 — Эдуард Генри Мастермэн, англичанин, слуга 5 — Антонио Фоскарелли, итальянец, агент по продажам 6 — Гектор Уиллард Маккуин, американец, секретарь 7 — Харви Харрнс, англичанин, не явился 8 — Хильдегарда Шмидт, немка, горничная 9 — (Пустое место) 10 — Грета Ольсон, шведка, экономка Д) 11 — Мэри Хермиона Дебенхэм, англичанка, гувернантка 12 — Хелена Мария Андрени, прекрасная графиня 13 — Рудольф Андрени, венгр, граф* дипломат 14 — Наталья Драгомирова, русская, княгиня 0 — Пьер Мишель, француз, проводник 15 — Полковник Арбэтнот, англичанин, офицер нз Индии 1 — Эркюль Пуаро, бельгиец, детектив 16 — Сайрус Бетман Хардман, американец, детектив Рис. 3. Ориентированный граф порядка 17 размером 18, придуманный Агатой Кристи. спальном вагоне Стамбул-Кале, а дуги и —> v означают, что пассажир с места и подтверждает алиби пассажира с места v. В этом графе имеется шесть связных компонентов, а именно {0,1,3,6,8,12,13,14,15,16}, {2}, {4,5}, {7}, {9} и {10,11}, поскольку связность ориентированного графа определяется путем рассмотрения дуг как ребер. Две дуги являются последовательными, если верхушка первой является началь- ной вершиной второй. Ряд последовательных дуг (ai, аг,..., at) называется обходом (walk) длиной к; его можно определить с помощью как дуг, так и вершин: (25) В простом ориентированном графе достаточно просто указать вершины; например, 1 —>0 —>8 —> 14 —>8 —>3 представляет собой обход для графа на рис. 3. Обход (25) представляет собой ориентированный путь, если вершины {г>о, Vi,...,ft} различны; он является ориентированным циклом, если все вершины различны, за исключением Vk = V0. В ориентированном графе ориентированное расстояние d(u, v) представляет со- бой количество дуг в кратчайшем ориентированном пути от и к v, которое также равно длине кратчайшего обхода от и к v. Оно может отличаться от d(y,u); но неравенство треугольника (18) остается корректным. Каждый граф может рассматриваться как ориентированный граф, поскольку ребро и — v по сути эквивалентно соответствующей паре дуг, и —> v и v —> и. Ориентированный граф, полученный таким образом, обладает всеми свойствами исходного графа; например, степень каждой вершины графа становится исходящей степенью ориентированного графа, а также ее входящей степенью. Кроме того, расстояния остаются неизменными. Мультиграф (V, Е) подобен графу, с тем отличием, что его ребра Е могут быть мультимножеством пар {п, и}; в мультиграфе разрешены также ребра v — v, представляющие собой петли из вершины в нее же, соответствующие “мультипарам” {г, v}. Например, (26) представляет собой мультиграф порядка Зеб ребрами, {1,1}, {1,2}, {2,3}, {2,3}, {3,3} и {3,3}. Степени вершин в этом примере равны d(l) = d(2) = 3 и d(3) = 6, поскольку каждая петля вносит в степень вершины вклад, равный 2. При рассмот-
40 КОМБИНАТОРНЫЙ ПОИСК 7 рении мультиграфа как ориентированного графа петля v — v становится двумя дугами-петлями v—>v. Представление графов и ориентированных графов. Любой ориентированный граф, а значит, любой граф или мультиграф, полностью описывается его матрицей смежности А = (auv), имеющей п строк и п столбцов при наличии у ориентирован- ного графа п вершин. Каждый элемент auv этой матрицы определяет количество дуг от и до v. Например, матрицами смежности для К3, J-g*, С3, J3 и (26) являются соответственно /011\ /010\ /010\ /111\ /210\ К3 = I 001 ), Рз = I 001 I, Cf= I 001 ), J3 = I in ), А = I 102 ). (27) ХООО/ Х000/ Х100/ \111/ Х024/ Мощный математический инструментарий теории матриц позволяет доказы- вать многие нетривиальные результаты для графов путем изучения их матриц смеж- ности; в упр. 65 представлены особенно впечатляющие примеры того, что может быть сделано таким путем. Одной из основных причин этого является то, что умно- жение матриц в контексте ориентированных графов имеет простую интерпретацию. Рассмотрим квадрат А, в котором элемент на пересечении строки и и столбца v по определению равен (Л )tw — OuwOwV (28) w€V Поскольку auw — количество дуг от и до ш, мы видим, что Ouwawv — количество об- ходов вида и —> w —> о. Следовательно, (A2)uv является общим количеством обходов длиной 2 от и до v. Аналогично элементы Ак дают общее количество об- ходов длиной к между любыми упорядоченными парами вершин для всех к > 0. Например, матрица А в (27) дает / 2 1 0 \ , / 5 2 2 \ _ /12 9 12 \ А = ( 1 0 2 ), А1 =12 5 8 ), А? =19 18 42 ); (29) X 0 2 4 / X 2 8 20 / X 12 42 96 / таким образом, существует 12 обходов длиной 3 от вершины 1 мультиграфа (26) до вершины 3 и 18 таких обходов из вершины 2 назад в нее же. Переупорядочение вершин заменяет матрицу смежности А на Р~АР, где Р— матрица перестановки (0-1-матрица, в каждой строке и каждом столбце которой имеется ровно одна единица), а Р~ = РТ представляет собой матрицу для обратной перестановки. Таким образом, 210 \ /201\ /012\ /021\ /402\ 102 ), I 042 ), ( 120 1, ( 240 ), I 021 ) И 024/ Х120/ Х204/ X102 / Х210/ 420 \ 201 ) 012/ (30) представляют собой все матрицы смежности для (26), и никаких других матриц смежности для этого мультиграфа не существует. Имеется более чем 2n(n-1^2/zi! графов порядка п, при п > 1, и почти все они требуют П(п2) бит данных при наиболее экономичном кодировании. Следователь- но, для подавляющего большинства всех возможных графов наилучший способ их представления в компьютере с точки зрения требующейся памяти — это работа с их матрицами смежности. Однако графы, возникающие в практических задачах, по своим характери- стикам существенно отличаются от графов, выбираемых случайным образом из
7 КОМБИНАТОРНЫЙ ПОИСК 41 множества всех возможных. Такие реальные графы, как правило, оказываются “разреженными” имеющими, скажем, O(nlogn) ребер вместо 0(п2), если только п не слишком мало, поскольку 0(п2) бит данных сложно генерировать. Например, предположим, что вершины соответствуют людям, а ребра—отношению дружбы. Если мы рассмотрим 5 иллиардов людей, мало у кого из них будет более чем 10 тысяч друзей. Но даже если каждый в среднем имеет 10 тысяч друзей, то у графа все равно будет только 2.5 х 1013 ребер, в то время как почти все графы с порядком 5 миллиардов имеют примерно 6.25 х 1018 ребер. Таким образом, наилучший способ представления графа в машине обычно ока- зывается отличным от записи п2 значений матрицы смежности. Вместо этого алгоритмы Stanford GraphBase разработаны для работы со структурой данных, похожей на структуру для связного представления разреженных матриц, рассмат- ривавшейся в разделе 2.2.6, хотя и несколько упрощенной. Такой подход не только доказанно универсален и эффективен, но и прост в использовании. Представление ориентированного графа в SGB представляет собой комбинацию последовательного и связанного распределения с применением узлов двух базовых типов. Ряд узлов представляет вершины, другие представляют дуги. (Имеется и третий тип узлов, которые представляют весь граф в целом, предназначенный для алгоритмов, работающих одновременно с несколькими графами. Но каждый граф требует только одного узла графа, так что узлы вершин и дуг доминируют.) Вот как это работает. Каждый ориентированный граф SGB порядка п и раз- мера т построен на последовательном массиве из п узлов вершин, что облегчает доступ к вершине к для 0 < к < п. Напротив, т узлов дуг связаны вместе в общем пуле памяти, который, по сути, неструктурирован. Каждый узел вершины обычно занимает 32 байт, а каждый узел дуги — 20 байт (узел графа занимает 220 байт); но размеры узлов могут быть легко изменены. Несколько полей каждого узла фиксированы и имеют определенное значение в любом случае. Остальные поля могут использоваться для различных целей разными алгоритмами или на разных этапах одного и того же алгоритма. Фиксированные части узла называются стандартными полями, а многоцелевые части — сервисными полями. Каждый узел вершины имеет два стандартных поля, NAME и ARCS. Если v — переменная, указывающая на узел вершины, мы называем ее переменной верши- ны. Тогда NAME(и) указывает на строку символов, которые могут использоваться для идентификации соответствующей вершины удобным для восприятия человеком способом; например, 49 вершин графа (17) имеют имена наподобие СА, WA, 0R, ..., RI. Другое стандартное поле, ARCS (и), существенно важнее для алгоритмов: оно указывает на узел дуги, первый в односвязном списке длиной d+(«), в котором имеется по одному узлу для каждой дуги, исходящей из вершины v. Каждый узел дуги имеет два стандартных поля, TIP и NEXT; переменная о, которая указывает на узел дуги, называется переменной дуги. TIP (о) указывает на узел вершины, представляющий верхушку дуги a; NEXT (а) указывает на узел дуги, представляющий следующую дугу, начальной вершиной которой является та же вершина, что и у дуги а. Вершина v с исходящей степенью 0 представляется соответствующим узлом путем присваивания ARCS (и) = Л (нулевой указатель). В противном случае, если, скажем, исходящая степень равна 3, структура данных содержит три узла дуг
42 КОМБИНАТОРНЫЙ ПОИСК 7 с ARCS(zO = <Zi, NEXT(ai) = аг, ЫЕХТ(аг) = 03 и ЫЕХТ(оз) = Л; и эти три дуги из вершины v ведут в TIP(ai), TIP (аг), TIP (аз). Предположим, например, что мы хотим вычислить исходящую степень верши- ны v и сохранить ее в сервисном поле 0DEG. Это просто. Установить а «— ARCS(и) и d «— 0. Пока а / Л, устанавливать d <— d+ 1 и а <— NEXT(a). (31) Установить ODEG(w) «— d. Когда граф или мультиграф рассматривается как ориентированный граф, как упоминалось выше, каждое его ребро и — v эквивалентно двум дугам, и —> v и v —> и. Эти дуги называются парными (mate) и занимают два узла дуг, скажем, а и а', где а появляется в списке дуг, исходящих из и, а а' — в списке дуг, исходящих из v. Тогда TIP (a) = v и TIP (а') = и. Мы также записываем МАТЕ (а) = а' и МАТЕ (а') = а (32) в алгоритмах, которые должны быстро переходить от одного списка к другому. Однако обычно нам не требуется хранить явно указатель от дуги на парную ей или использовать сервисное поле МАТЕ в каждом узле дуги, поскольку необходимые связи можно вывести неявно при правильном построении структур данных. Неявный вывод работает примерно следующим образом: при создании каждого ребра и — v неориентированного графа или мультиграфа мы вводим последова- тельные узлы дуг для и —> v и v —> и. Например, если узлу дуги отводится 20 байт, мы резервируем 40 последовательных байтов для каждой новой пары. Мы можем также обеспечить, чтобы адрес в памяти первого байта был кратен 8. Тогда, если узел дуги а находится в памяти по адресу а, узел парной дуги находится по адресу + 20, еслиатод8 = 0) = q 20+(40&((q&4)1)) (33) — 20, если a mod 8 = 4 J ' v ’ Такой трюк очень полезен в комбинаторных задачах, когда операции могут вы- полняться триллионы раз, поскольку при этом экономия в 3.6 нс на одной операции приведет к тому, что программа завершит работу на час раньше. Но способ (33) не является непосредственно “переносимым” из одной реализации в другую. Если размер узла дуги изменится, например, с 20 до 24, то числа 40, 20, 8 и 4 в (33) нужно будет заменить на 48, 24, 16 и 8 соответственно. В алгоритмах в этой книге не делается никаких предположений о размерах узлов. Вместо этого мы примем соглашение языка программирования С и его потомков о том, что если а указывает на узел дуги, то ‘a + 1’ представляет собой указатель на узел дуги, следующий за первым в памяти. В общем случае LOC (NODE (a + fc) ) = LOC (NODE (a) ) + fcc, (34) если размер каждого узла дуги равен с байт. Аналогично если v представляет собой переменную вершины, то ‘г> + к’ будет к-м узлом вершины, следующим за узлом, на который указывает v; фактический адрес памяти этого узла будет равен v плюс умноженное на размер узла вершины значение к. Стандартные поля узла графа д включают общее количество дуг М(д) и общее количество вершин N(p); указатель на первый узел вершины в последовательном {“ I а
7 КОМБИНАТОРНЫЙ ПОИСК 43 списке всех узлов вершин VERTICES (д); идентификатор графа ID(p), представ- ляющий собой строку наподобие words(5757,0,0,0); а также некоторые другие поля, необходимые для выделения и освобождения памяти при увеличении или уменьшении графа, или для экспорта графа во внешний формат для взаимодействия с другими пользователями и системами для работы с графами. Но нам редко придется как обращаться к этим полям узла графа, так и давать полное описание формата SGB, поскольку в этой главе мы будем описывать почти все алгоритмы для работы с графами с помощью словесного описания естественным языком на достаточно абстрактном уровне, а не на битовом уровне машинных программ. Простой алгоритм для работы с графом. Для иллюстрации алгоритма сред- невысокого уровня наподобие тех, с которыми мы будем иметь дело позже, давайте превратим доказательство теоремы В в пошаговую процедуру, окрашивающую вер- шины данного графа в два цвета, если граф является двудольным. Алгоритм В (Проверка дву дальности). Для заданного графа, представленного в формате SGB, этот алгоритм либо находит 2-раскрашивание с COLOR(и) е {0,1} в каждой вершине и, либо завершается неудачей, если корректное 2-раскрашивание невозможно. Здесь COLOR представляет собой сервисное поле в каждом узле вер- шины. Другое сервисное поле, LINK(и), представляет собой указатель на вершину и используется для поддержки стека всех окрашенных вершин, соседи которых еще не протестированы. Вспомогательная переменная вершины s указывает на вершину этого стека. Алгоритм также использует переменные и, v, w для вершин и а для дуг. Предполагается, что узлы вершин представляют собой vq + к для 0 < к < п. В1. [Инициализация.] Установить C0L0R(vo + к) <--1 для 0 < к < п. (Сейчас все вершины не окрашены.) Затем установить w «— z?o + п. В2. [Выполнено?] (В этот момент все вершины > w окрашены, и то же относится и к соседям всех окрашенных вершин.) Завершить работу алгоритма успешно, если w = vq. В противном случае установить w <— w — 1 (следующему узлу вершины в направлении уменьшения индекса). ВЗ. [Окраска w при необходимости.] Если COLOR(w) > 0, вернуться к шагу В2. В противном случае установить COLOR (ш) «— 0, LINK(w) «— Л и s «— w. В4. [Стек => и.] Установить и <— s, s «— LINK (а), а «— ARCS (и). (Мы будем проверять всех соседей окрашенной вершины и.) В5. [Завершено с и?] Если а = Л, перейти к шагу В8. В противном случае устано- вить v «— TIP (о). В6. [Обработка «.] Если COLOR(v) < 0, установить COLOR(v) «— 1 — COLOR(w), LINK(w) «— s и s «— v. Если же COLOR(w) = COLOR(u), завершить работу алгоритма неудачей. В7. [Цикл по а.] Установить а «— NEXT (о) и вернуться к шагу В5. В8. [Стек не пустой?] Если s / Л, вернуться к шагу В4. В противном случае вернуться к шагу В2. | Этот алгоритм представляет собой вариант общей процедуры обхода графа, име- нуемой поиском в глубину, которую мы детально изучим в разделе 7.4.1. Время его работы составляет О(т + п) при наличии т дуг и п вершин (см. упр. 70);
44 КОМБИНАТОРНЫЙ ПОИСК 7 следовательно, он хорошо приспособлен к распространенному случаю разреженных графов. Путем небольших изменений в случае неудачного завершения алгоритм можно заставить выводить цикл нечетной длины, тем самым доказывая невозмож- ность 2-раскрашивания (см. упр. 72). Примеры графов. Stanford GraphBase включает библиотеку более чем из трех десятков подпрограмм генерации, способных создавать разнообразные ориентиро- ванные и неориентированные графы для использования в экспериментах. Мы уже рассматривали графы слое; давайте теперь взглянем на некоторые другие, чтобы увидеть имеющиеся возможности. • ropet(1022,0,0,0) представляет собой ориентированный граф с 1022 вершинами и 5075 дугами. Вершины представляют категории слов или концепций, которые П. М. Роджет (Р. М. Roget) и Д. Л. Роджет (J. L. Roget) включили в свой знаменитый Thesaurus (London: Longmans, Green, 1879). Дуги представляет собой перекрестные ссылки между категориями, имеющиеся в книге. Например, типичными дугами являются water—> moisture, discovery—> truth, fool —» sage, preparation—> learning, vulgarity—► ugliness, wit—> amusement. • book(' jean',80,0,1,356,0,0,0) представляет собой граф с 80 вершинами и 254 ребрами. Вершины представляют персонажей романа Отверженные (Les Miserables) Виктора Гюго (Victor Hugo); ребра соединяют персонажей, встречавшихся в романе друг с другом. Типичными ребрами являются Fantine — Javert, Cosette — ThAnardier. • bLbook( 'jean', 80,0,1,356,0,0,0) представляет собой двудольный граф с 80+356 вершинами и 727 ребрами. Вершины представляют персонажей и главы упомяну- того романа Отверженные; ребра соединяют персонажей с главами, в которых они появляются (например, Napoleon—2.1.8, Marius — 4.14.4). • plane .miles (128,0,0,0,1,0,0) представляет собой планарный граф со 129 верши- нами и 381 ребром. Вершины представляют 128 городов США и Канады, а так- же специальную вершину INF для “точки в бесконечности” Ребра определяют так называемую триангуляцию Делоне этих городов, основанную на их широте и долготе на плоскости; это означает, что и — v тогда и только тогда, когда существует окружность, проходящая через и и v и не охватывающая никакую иную вершину. Ребра имеются также между INF и всеми вершинами, лежащими на выпуклой оболочке всех местоположений городов. Типичными ребрами являются Seattle, WA — Vancouver, ВС — INF; Toronto, ON — Rochester, NY. • plane Jisa (360,250,15,0,360,0,250,0,2295000) представляет собой планарный граф с 3027 вершинами и 5967 ребрами. Он получен с помощью обработки оцифро- ванного изображения Моны Лизы Леонардо да Винчи, имеющего 360 строк и 250 столбцов пикселей, состоящей в огрублении интенсивностей пикселей до 16 уровней серого от 0 (черный) до 15 (белый). Полученные в результате 3027 областей одина- ковой яркости, связанных “ходом ладьи” рассматриваются затем как соседние, если имеют общую границу между пикселями (рис. 4). • 6г_1ма(360,250,0,360,0,250,8192,0) представляет собой двудольный граф с 360+ 250 = 610 вершинами и 40 923 ребрами. Это другой взгляд на знаменитую картину Леонардо да Винчи, на этот раз связывающий строки и столбцы, на пересечении
7 КОМБИНАТОРНЫЙ ПОИСК 45 Рис. 4. Цифровая копия Моны -<1изы и крупный план фрагмента (который лучше рассматривать издали). которых уровень яркости равен как минимум 1/8. Например, ребро г102 — с113 приходится прямо на средину “улыбки Джоконды’.’ • гатап(31,23,3-1) ппедставляет собой граф совершенно отличной от других рас- смотренных ранее графов SGB природы. Вместо связывания объект! >в языка, лите- ратуры или иных продуктов человеческой культуры, этот так называемый “граф- расширитель Рамануджана” (“Ramanujan expander graph”) основан на строгих мате- матических принципах. Каждая из его (233 — 23)/2 = 6072 вершин имеет степень 32; следовательно, он имеет 97152 ребра. Вершины соответствуют классам эквивалент- ности матриц 2x2, являющихся несингулярными по модулю 23; типичным ребром является (2,7; 1,1) — (4,6; 1,3). Графы Рамануджана важны, в первую очередь, из-за необычно большого обхвата и малого диаметра для их размеров и степеней. У данного графа и обхват, и диа метр равны 4. • гатап(5,37,4,1) — аналогично регулярный граф степени 6 с 50616 вершинами и 151848 ребрами. Имеет обхват 10, диаметр 10, а кроме того, этот граф двудолен. • random-graph(l(MO, 5000 0,0,0,0,0,0,0, s) представляет собой граф с 1000 вер- шинами, 5000 ребрами и исходным значением для генерации псевдослучайных чи- сел s. Граф “эволюционирует” начиная с безреберного состояния, путем многократ- ного выбора псевдослучайных номеров вершин 0 < и, v < 1000 и добавления ребра и — v, если только не и = v или такое ребро уже имеется в наличии. При s = 0 все вершины принадлежат гигантскому компоненту порядка 999, за исключением одной изолированной вершины 908. • random_grepft(1000,5000,0,0,1,0,0,0,0,0) представляет собой ориентированный граф с 1000 вершина и 5000 дугами, полученный с помощью аналогичной эволюции. (В действительности каждая из его дуг является также частью random_qre»ft(1000, 5000,0.0,0,0,0,0,0,0).) • subsets(5,1, —10,0,0,0,*1,0) представляет собой граф с (д1) = 462 вершинами, по одной для каждого пятиэлементного подмножества множества {0,1,..., 10}. Две
46 КОМБИНАТОРНЫЙ ПОИСК 7 вершины являются смежными, если соответствующие подмножества непересекаю- щиеся; таким образом, граф является регулярным со степенью 6 и имеет 1386 ребер. Его можно рассматривать как обобщение графа Петерсена, SGB-имя которого— subsets{2,1, —4,0,0,0, *1,0). • subsets(5,1, —10,0,0,0, *10,0) имеет те же 462 вершины, но теперь вершины являются смежными, если соответствующие подмножества имеют четыре общих элемента. Данный граф регулярен со степенью 30 и имеет 6930 ребер. • parts(30,10,30,0) представляет собой еще один SGB-граф с математической ос- новой. Он имеет 3590 вершин, по одной для каждого разбиения 30 на не более чем 10 частей. Два разбиения рассматриваются как смежные, если одно из них получается путем деления части другого; это правило определяет 31377 ребер. Ориентированный граф parts(30,10,30,1) аналогичен, но его 31377 дуг направлены от более коротких к более длинным разбиениям (например, 13+7+7+3—>7+7+7+6+3). • swnp(ex(10,10,10,10,10,0,0) представляет собой граф с 286 вершинами и 1320 ребрами. Его вершинами являются целочисленные решения + х% + а?з + = 10, где Xi > 0, а именно “композиции 10 на четыре неотрицательные части”; их можно также рассматривать как барицентрические координаты точек внутри тетраэдра. Ребра, такие как 3.1.4.2—3.0.4.3, соединяют композиции, которые максимально близки одна к другой. • board(8,8,0,0,5,0,0) и board(8,8,0,0, — 2,0,0) представляют собой графы с 64 вершинами, 168 или 280 ребер которых соответствуют ходам коня или слона в шах- матах. Несметное количество других примеров можно легко получить, варьируя параметры генераторов графов SGB. Например, на рис. 5 показаны два простых варианта board и simplex; несколько загадочные правила board поясняются в упр. 75. board (6,9,0,0,5,0,0) (ходы коня на доске размером 6x9) simplex( 10,8,7,6,0,0,0) (усеченная треугольная решетка) Рис. S. Образцы SGB-графов, связанных с настольными играми. Алгебра графов. Мы также можем получать новые графы с помощью опера- ций над уже имеющимися. Например, если G = (У,Е)—некоторый граф, то его дополнение G = (V, Е) получается, если положить и — v в G u/vh U—/—V в G. (35) Таким образом, не ребра становятся ребрами, и наоборот. Обратите внимание, что G = G и что Кп не имеет ребер. Соответствующие матрицы смежности А и А удовлетворяют условию А + А = J — I; (36)
7 КОМБИНАТОРНЫЙ ПОИСК 47 здесь J — матрица, все элементы которой является единицами, а I — тождественная матрица, так что J и J — I являются соответственно матрицами смежности для Jn и Кп, когда G имеет порядок п. Кроме того, каждый граф G = (V,E) приводит к реберному графу L{G), вер- шины которого являются ребрами Е; два ребра графа G смежны в L(G), если они имеют общую вершину. Таким образом, например, реберный граф L(Kn) имеет Q) вершин и является регулярным графом степени 2п — 4 при п > 2 (см. упр. 82). Граф называется к-реберно-раскрашиваемым, если его реберный граф является fc-раскра- шиваемым. Для двух данных графов G = (U,E) и Н = (V,F) их объединением (union) GUH является граф (C7U V, E\JF), получаемый путем объединения вершин и ребер. Например, предположим, что G и Н представляют собой графы ходов ладьи и слона в шахматах; тогда GU Н является графом ходов ферзя и его официальное SGB-имя имеет вид gunion{board(8,8,0,0, —1,0,0), board(8,8,0,0, —2,0,0), 0,0). (37) В частном случае, когда множества вершин U и V непересекающиеся, объеди- нение G U Н не требует согласованной идентификации вершин для взаимной корре- ляции; мы получаем диаграмму G U Н, просто изображая диаграмму G, а после нее диаграмму Н. Этот частный случай называется соприкосновением (juxtaposition) или прямой суммой G и Н, и мы будем обозначать ее как G ф Н. Например, легко увидеть, что Ет ф Кп = Кт^п (38) и что каждый граф является прямой суммой своих связных компонентов. Уравнение (38) является частным случаем общей формулы ф КП2 ф • • • ф ЕПк = , (39) которая справедлива для полных к-дольных графов при к > 2. Но (39) не рабо- тает при к = 1 из-за позорного факта: стандартные обозначения теории графов противоречивы! Действительно, КтгП означает полный двудольный граф, но Кп не означает полный однодольный граф. Теоретики, работающие в области теории графов, невероятным образом ухитряются десятилетиями жить с этой аномалией и не обезуметь. Еще одним важным способом комбинации двух непересекающихся графов G и Н является образование их соединения (join) G — Н, которое состоит из G ф Н вместе со всеми ребрами и — v для и € U и v G V. [См. А. А. Зыков, Мат. сборник 24 (1949), 163-188, §1-3.] А если G и Н являются непересекающимися ориенти- рованными графами, то их ориентированное соединение G —> Н аналогично, но добавляет к G ф Н только дуги и —>v, идущие от U к V. Прямая сумма двух матриц А и В получается путем помещения В по диагонали ниже и правее А: А®в = {о в)’ (40) где каждое О в данном примере представляет собой матрицу, состоящую из одних нулей, с количеством строк и столбцов, необходимых для корректного выравнивания
48 КОМБИНАТОРНЫЙ ПОИСК 7 получающейся матрицы. Наше обозначение G®H для прямой суммы графов легко запомнить, так как матрица смежности для G ф Н строго равна прямой сумме соответствующих матриц смежности А и В для G и Н. Аналогично матрицами смежности для G—Н, G—>Ни G<—Н являются А~B = (j в)- А-В=(о i)’ а^в=(А, в) <41> соответственно, где J — матрица, состоящая из одних единиц, как в (36). Эти операции ассоциативны и связаны операцией дополнения: А®(В®С) = (А®В)®С, А—(В—С) = (А—В)—С; (42) А^(В^С) = (А—>В)—>С, А<—(В<—С) = (А<—В)<—С; (43) А®В = А—В, А—В = А®В; (44) А—>В = А*—В, А<—В = А^>В; (45) (АфВ) + (А—В) = (А—»В) + (А<—В). (46) Обратите внимание, что, комбинируя (39) с (42) и (44), мы получаем при к > 2. Кроме того, Кп = К,— Ку-и Kn = Ki^Ki^--->К1г (48) с п копиями Ki, что показывает, что Кп = является полным п-дольным графом. Прямые суммы и соединения аналогичны сложению, поскольку Кт ф Кп = Кт+п и Кт — Кп = Кт+п. Можно также скомбинировать графы с помощью алгебраической операции, аналогичной умножению. Например, операция декартова произведения образует граф G □ Н порядка тп из графа G = (U, Е) порядка т и графа Н = (V, F) порядка п. Вершинами Gaff являются упорядоченные пары (и, и), где и Е U и v eV; ребрами являются (и, v) — (и1, v), когда и — и' находится в G, вместе с (и, о) — (и, о'), когда v — v' находится в Н. Другими словами, G □ Н образуется путем замены каждой вершины G копией Н и замены каждого ребра G ребрами между соответствующими вершинами надлежащих копий: Как обычно, простейшие частные случаи этого общего построения оказываются особо важными на практике. Когда и G, и Н являются путями или циклами, мы получаем “графы в клеточку” а именно т х п-решетку Рт оРп, т х п-цилиндр
7 КОМБИНАТОРНЫЙ ПОИСК 49 РтсСпитх п-тпор Ст □ Сп, показанные ниже для т = 3 и п = 4: Рз □ Pi (3 х 4-решетка) Р3пС4 (3 х 4-цилиндр) Сз □ Ci (3 х 4-тор) (50) Четыре других заслуживающих внимания пути определения произведений гра- фов также оказываются полезными. В каждом случае вершинами произведения графов являются упорядоченные пары (u, и). • Прямое произведение G <25 Н, именуемое также “конъюнкцией” G и Н, или их “категорийное произведение” (categorical product) содержит (и, и)— (и', и'), когда и — и' имеется в G, a и— v' имеется в Н. • Сильное произведение G&H объединяет ребра G □ Н с ребрами G® Н. • Нечетное произведение G&H содержит ребро (и, и) — {и', и'), когда либо и — и' содержится в G, либо и— и' содержится в Н, но не одновременно. • Лексикографическое произведение Go Н, именуемое также композицией G и Н, содержит (и, и) — (и', и’), когда и — и' содержится в G, и (и, и) — (и, и'), когда v — и' содержится в Н. Все пять этих операций естественным образом распространяются на произведения к > 2 графов Gi = (Ц,£?1), Gfc = (Vk,Ek), вершины которых представляют собой упорядоченные fc-кортежи (vx,... , Vfc), такие, что Vj G Vj для 1 < j < к. Например, когда к = 3, декартовы произведения Gi □ (G2 □ G3) и (Gi □ G2) □ G3 изоморфны, если рассматривать составные вершины (vi, («2,173)) и ((vi,V2),из) как одинаковые с (vi, V2, V3). Следовательно, можно записывать декартово произведение без скобок, как Gi 0G2 0G3. Наиболее важным примером декартова произведения с к сомножителями является fc-мерный куб, P2DP2ci---uiP2; (51) 2к его вершин (vi,..., и^) являются смежными, когда расстояние Хэмминга между ними равно 1. В общем случае предположим, что и = (vx,..., ик) пи' = (vj,..., vj.) являются к- кортежами вершин, где и^ —v'j в Gj для ровно а из индексов j, а Vj = vj в точности для b из индексов. Тогда имеем: • и—г/ в Gi □ • • □ Gfc тогда и только тогда, когда а — 1 и b = к — 1; • и—г/ bGi ® Gfc тогда и только тогда, когда а = к и Ь = 0; • и — и’ в Gi и • • • BGfc тогда и только тогда, когда а + b — к иа> 0; • и — и' в Gi а • a Gfc тогда и только тогда, когда а нечетно. Лексикографическое произведение несколько отличается, поскольку оно не комму- тативно; в Gi о • • • о Gfc мы имеем и — и' для и / v' тогда и только тогда, когда —v’j, где j — минимальный индекс, такой, что Vj vj. В упр. 91-102 исследуются некоторые фундаментальные свойства произведений графов. См. также книгу Product Graphs Вильфреда Имриха (Wilfried Imrich)
50 КОМБИНАТОРНЫЙ ПОИСК 7 и Санди Клавжара (Sandi Klavzar) (2000), в которой содержится исчерпывающее введение в теорию графов, включая алгоритмы для разложения графов на “прос- тые” подграфы. "Графические последовательности степеней. Последовательность di </2 •• -dn неотрицательных целых чисел называется графической (graphical), если существует как минимум один граф с вершинами {1,2,...,п}, такой, что вершина к имеет степень dk- Можно считать, что di > cfo > > dn. Ясно, что в любом таком графе di < п и что сумма т = d\ + </2 + • • • + dn любой графической последовательности всегда четна, поскольку она равна удвоенному количеству ребер. Кроме того, легко увидеть, что последовательность 3311 не является графической; следовательно, гра- фические последовательности должны удовлетворять дополнительным условиям. Каким? Простой способ выяснить, является ли данная последовательность did% ...dn графической, и построить соответствующий граф в случае, если он существует, был открыт В. Гавелом (V. Havel) [Casopis pro Pestovani Matematiky 80 (1955), 477-479]. Мы начинаем с пустой таблицы, имеющей dk ячеек в строке к; эти ячейки представляют “слоты” в которые мы будем помещать соседей вершины к в строящемся графе. Пусть Cj—количество ячеек в столбце j; таким образом, ci > с2 > • • •, и при 1 < к < п мы имеем Cj > к тогда и только тогда, когда dk > j- Предположим, например, что п = 8 и di... dg = 55544322. Тогда исходная таблица имеет вид (52) и мы имеем ci... С5 = 88653. Идея Гавела состоит в соединении вершины п с dn вершин с наивысшими степенями. В данном случае, например, мы создаем два ребра, 8 — 3 и 8 — 2, и таблица принимает следующий вид: (53) (Мы не используем 8 — 1, поскольку пустые слоты должны продолжать образовы- вать таблицу; ячейки каждого столбца должны заполняться снизу вверх.) Затем мы устанавливаем п «— 7 и создаем два очередных ребра, 7 — 1 и 7 — 5. Затем наступает очередь следующих трех ребер, 6—4, 6—3,6 — 2, и таблица становится
7 КОМБИНАТОРНЫЙ ПОИСК 51 почти наполовину заполненной: Мы свели задачу к поиску графа с последовательностью степеней di... ds = 43333; в этот момент мы также имеем С1...С4 = 5551. Читателю предлагается само- стоятельно заполнить оставшиеся пустые места, перед тем как посмотреть ответ в упр. 103. Алгоритм Н (Генератор графа для определенных степеней). Этот алгоритм для заданных di > • • • > dn > dn+i = 0 создает ребра между вершинами {1,..., п} таким образом, что ровно dk ребер связаны с вершиной к, для 1 < к < п, если, конечно, последовательность di... dn является графической. Массив ci... используется в качестве вспомогательного. Н1. [Установка с.] Начать с к «— di и j «— 0. Затем, пока к > 0, выполнять следующие операции: установить j «— j + 1; пока к > dj+i, устанавливать с&«— j ик*- к — 1. Успешно завершить работу алгоритма, если j = 0 (все d равны нулю). Н2. [Поиск п.] Установить п «— Ci. Успешно завершить работу алгоритма, если п = 0; завершить работу алгоритма неудачей, если di > п > 0. НЗ. [Начало цикла по j.] Установить г«— 1, t«— di,r <— Ct и j <— dn- H4. [Генерация нового ребра.] Установить Cj «— Cj— 1 и т «— Ct- Создать ребро п — т и установить dm «— dm — 1, ct «— т — 1, j «— j — 1. Если j = 0, вернуться к шагу Н2. В противном случае если т = г, установить г <— r+1, t <— d, и г <— ct (см. упр. 104); повторить шаг Н4. | Когда алгоритм Н завершается успешно, он строит граф с интересующими нас ребрами. Но если он завершается неудачно, то как мы можем убедиться, что задача неразрешима? Ключевой факт основан на важной концепции, именуемой “мажоризация”: если dr... dn и d\ ... d'n являются двумя разбиениями одного и того же числа (т. е. если dr > > dn, dj > • • • > d'n и dj + • • • + dn = d[ +-1- d^), to мы говорим, что dl...dn мажоризирует d'x... d'n, если dx Ч-1- dk > d{ +-1- dk доя 1 < к < n. Лемма M. Если последовательность dr... dn является графической и dr... d„ ма- жоризирует d[ .. ,d'n, то последовательность d'j... d'n также является графической. Доказательство. Достаточно доказать утверждение, когда ф.. .dn и d{... d'n от- личаются только в двух местах, dfc = dfc - [fc = i] + [fc=j], где i < j, (55) поскольку любая последовательность, мажоризируемая di .dn, может быть по- лучена неоднократной мини-мажоризацией, аналогичной показанной. (Детально мажоризация рассматривается в упр. 7.2.1.4-55.)
52 КОМБИНАТОРНЫЙ ПОИСК 7 Из условия (55) вытекает, что d4 > d* > d'i+1 > dz- > dj. Так что любой граф с последовательностью степеней di... dn содержит вершину v, такую, что v — г и v -/— j. Удаление ребра v — г и добавление ребра v — j дает граф с последовательностью степеней d\ .. ,d!n, как и требовалось. | Следствие Н. Алгоритм Я завершается успешно, если последовательность di ...dn является графической. Доказательство. Можно считать, чтоп > 1. Предположим, чтоС — произвольный граф с вершинами {1,..., п} с последовательностью степеней di... dn, и пусть С — подграф, порожденный {1,... ,n — 1}; другими словами, С получается путем удале- ния вершины п и dn ребер, связанных с ней. Последовательность степеней d'r... d„_i графа G' получается из di... dn-i путем уменьшения некоторых dn элементов на 1 и сортировкой их в невозрастающем порядке. По определению последовательность d^... d,n_1 графическая. Новая последовательность степеней d"... d"_x, получаемая с помощью стратегии, реализованной на шагах НЗ и Н4, задумана как мажоризи- руемая каждой такой последовательностью d{ ...d^^, поскольку уменьшает наи- большие возможные dn элементов на 1. Таким образом, новая последовательность dxz... d"_x является графической. Алгоритм Н, устанавливающий di... dn-i «— dxz... d"_x, будет, таким образом, успешен по индукции по п. | Время работы алгоритма Н грубо пропорционально количеству генерируемых ребер, которое может быть порядка п2. В упр. 105 представлен более быстрый метод, который за О(п) шагов выясняет, является ли данная последовательность di ...dn графической, но сам граф при этом не строится. Над графами. Если вершины и/или дуги графа или ориентированного графа оснащены дополнительными данными, мы называем его сетью (network). Напри- мер, каждая вершина words (5757,0,0,0) имеет связанный с ней ранг, соответству- ющий популярности соответствующего пятибуквенного слова. Каждая вершина р/апе_йза(360,250,15,0,360,0,250,0,2295000) имеет связанную с ней яркость пик- селей между 0 и 15. Каждая дуга board (8,8,0,0, —2,0,0) имеет связанную с ней длину, отражающую расстояние перемещения фигуры по доске: перемещение слона из угла в угол имеет длину 7. Stanford GraphBase включает несколько генераторов, которые не упоминались выше, поскольку они используются, в первую очередь, для генерации интересных сетей, а не графов с интересной структурой. • тпг/ез(128,0,0,0,0,127,0) представляет собой сеть со 128 вершинами, соответ- ствующими тем же городам Северной Америки, что и в графе plane_miles, описанном ранее. Но miles, в отличие от plane-miles, представляет собой полный граф с (^^ ребрами. Каждое ребро имеет целую длину, представляющую расстояние в милях, которое автомобиль должен был преодолеть при поездке в 1949 году из одного города в другой. Например, в сети miles ‘Vancouver, ВС’ отстоит на 3496 миль от ‘West Palm Beach, FL’. • econ(81,0,0,0) представляет собой сеть с 81 вершиной и 4902 дугами. Ее верши- ны представляют отрасли экономики США, а дуги — потоки денег из одной отрасли в другую в 1985 году, измеренные в миллионах долларов. Например, значение потока от Apparel в Household furniture равно 44, а это означает, что мебельная
7 КОМБИНАТОРНЫЙ ПОИСК 53 промышленность заплатила в этом году швейной промышленности 44 миллиона дол- ларов. Суммы потоков, входящих в каждую вершину, равны суммам исходящих потоков. Дуга имеется только в том случае, если поток ненулевой. Специальная вершина под названием Users получает потоки, которые представляют общую по- требность в продукте; некоторые из этих потоков отрицательны в связи со способом рассмотрения правительственными экономистами импортируемых товаров. • <дипез(120,0,0,0,0,0,128,0) представляет собой сеть со 120 вершинами и 1276 дугами. Вершины этого графа представляют футбольные команды американских колледжей и университетов. Дуги проходят между командами, игравшими одна с другой во время сезона 1990 года, и помечены числами, соответствующими выиг- ранным очкам. Например, дуга Stanford—> California имеет значение 27, а дуга California—^Stanford имеет значение 25, поскольку 17 ноября 1990года Cardinal из Станфорда победили Golden Bears из Беркли со счетом 27:25. • пзс(16) представляет собой сеть совершенно иного вида. В ней 3240 вершин и 7878 дуг, определяющих ориентированный ациклический граф, т. е. ориентиро- ванный граф, не содержащий ориентированных циклов. Вершины представляют логические элементы с логическими значениями; дуга наподобие Z45—>R0:7~ озна- чает, что значение логического элемента Z45 является входным для элемента R0:7". Каждый элемент имеет код типа (AND, OR, XOR, NOT, защелка или внешний ввод); каждая дуга имеет длину, описывающую величину задержки. Сеть содержит пол- ную логику небольшой микросхемы RISC, способной подчиняться простым коман- дам, определяемым шестнадцатью регистрами размером 16 бит каждый. Полное детальное описание всех генераторов SGB можно найти в книге автора The Stanford GraphBase (New York: ACM Press, 1994) вместе с десятками небольших демонстрационных программ, поясняющих, как работать с генерируемыми графами и сетями. Например, программа LADDERS показывает, как найти кратчайший путь между двумя пятибуквенными словами. Программа ТАКЕ-RISC демонстрирует, как нанокомпьютер выполняет свою работу, имитируя работу сети, построенной из логических элементов rise (16). Гиперграфы. Графы и сети могут быть просто обворожительны, но это ни в коем случае не конец истории. Множество важных комбинаторных алгоритмов разрабо- тано для работы с гиперграфами, которые являются более обобщенными по срав- нению с графами, поскольку их ребра могут быть произвольными подмножествами вершин. Например, у нас может быть семь вершин, идентифицируемых ненулевыми бинарными строками и = 010203, вместе с семью ребрами, идентифицируемыми ненулевыми бинарными строками в квадратных скобках е = [{цбгЬзЬ где v G е тогда и только тогда, когда (aibi + 0262 + 0363) mod 2 = 0. Каждое из этих ребер содержит ровно три вершины: [001] = {010,100,110}; [010] = {001,100,101}; [011] = {011,100,111}; [100] = {001,010,011}; [101] = {010,101,111}; [110] = {001,110, 111}; [111] = {011,101,110}. (56)
54 КОМБИНАТОРНЫЙ ПОИСК 7 В силу симметрии каждая вершина принадлежит ровно трем ребрам. Ребра, содер- жащие три и более вершин, иногда называют гиперребрами, чтобы отличать их от ребер обычных графов. Но их можно называть и просто ребрами. Гиперграф называется г-однородным, если каждое ребро содержит ровно г вер- шин. Таким образом, (56) является 3-однородным гиперграфом, а 2-однородный ги- перграф представляет собой ни что иное, как обычный граф. Полный г-однородный гиперграф К^1 имеет п вершин и (") ребер. Большинство основных концепций теории графов естественным образом может быть распространено на гиперграфы. Например, если Н = (V,E) представляет собой гиперграф и если U С V, то подгиперграф Н | U, порожденный U, имеет ребра {е|ееЕиеС[/}. Дополнение Н r-однородного гиперграфа имеет ребра КпГ\ которые не являются ребрами Н. fc-раскрашиванием гиперграфа называется назначение цветов его вершинам таким образом, чтобы ни одно ребро не было монохромным. И т. д. Гиперграфы могут иметь много других имен, поскольку одни и те же свойства могут быть сформулированы многими различными способами. Например, каждый гиперграф Н = (V, Е) представляет собой, по сути, семейство множеств, посколь- ку каждое ребро является подмножеством V. 3-однородный гиперграф называется также системой троек. Гиперграф эквивалентен также матрице В, состоящей из нулей и единиц, в которой имеется по одной строке для каждой вершины и и по одному столбцу для каждого ребра е; на пересечении строки v и столбца е этой матрицы находится значение bve = [г> G е]. Матрица В называется матрицей инци- денций Н, и мы говорим, что вершина “v инцидентна е” когда v G е. Кроме того, гиперграф эквивалентен двудольному графу с множеством вершин V U Е и с ребром v — е в случае инцидентности и се. Гиперграф называется связным тогда и только тогда, когда связным является соответствующий двудольный граф. Цикл длиной к в гиперграфе определяется как цикл длиной 2А: в соответствующем двудольном графе. Например, гиперграф (56) может быть определен эквивалентной матрицей ин- циденций или эквивалентным двудольным графом следующим образом. [001] [010] [011] [100] [101] [110] [111] 001 /0 1 0 1 0 1 0\ 010 1 0 0 1 1 0 0 011 0 0 1 1 0 0 1 100 1 1 1 0 0 0 0 101 0 1 0 0 1 0 1 110 1 0 0 0 0 1 1 111 \0 0 1 0 1 1 0/ (57) Он содержит 28 циклов длиной 3, таких как [101] —101 — [010] —001 — [100]—010 — [101]. (58) Гиперграф НТ, дуальный гиперграфу Н, получается путем взаимообмена ролей вершин и ребер, но с неизменным отношением инцидентности. Другими словами,
7 КОМБИНАТОРНЫЙ ПОИСК 55 (59) (60) он соответствует транспонированной матрице инциденций. Обратите внимание, что, например, дуальным к r-регулярному графу является r-однородный гиперграф. Матрицы инциденций и двудольные графы могут соответствовать гиперграфам, в которых некоторые ребра встречаются больше одного раза, поскольку различные столбцы матрицы могут быть одинаковыми. Если гиперграф Н = (V,E) не име- ет повторяющихся ребер, он соответствует еще одному комбинаторному объекту, а именно булевой функции (логической функции). Ибо если, скажем, множество вершин V равно {1,2,..., п}, функция h(xi,x2,...,xn) = [{J| Xj, = 1} е Е] характеризует ребра Н. Например, булева формула (a:i ф Х2 ф Жз) А (х2 ф Х4 ф Жб) А (жз ф Х4 ф Xf) А (жз ф х5 ф Хе) A (xi V x2V Х4) представляет собой другой способ описания гиперграфа (56) и (57). Тот факт, что комбинаторные объекты можно рассматривать столькими раз- ными способами, может показаться невероятным. Но это исключительно полезно, поскольку предполагает различные способы решения эквивалентных задач. Когда мы рассматриваем задачу с разных точек зрения, мозг естественным образом думает о разных способах ее решения. Иногда озарение приходит, когда мы думаем о том, как работать со строками и столбцами матрицы. В другой раз прорыв происходит, когда мы представляем вершины и пути или при визуализации кластеров точек в пространстве. Возможно, что наилучшим способом окажется применение булевой алгебры. Если мы застряли на одном из представлений, на помощь может прийти Другое. Покрытие и независимость. Если Н = (V, Е) является графом или гиперграфом, множество вершин U называется покрытием Н, если каждое ребро содержит как минимум один из членов U. Множество вершин W называется независимым (или устойчивым) в Н, если в нем не содержится полностью ни одно ребро. С точки зрения матрицы инциденций покрытие является множеством строк, сумма которых не равна нулю в каждом столбце. В частном случае, когда Н являет- ся графом, каждый столбец матрицы содержит только две единицы; следовательно, независимое множество в графе соответствует множеству взаимно ортогональных строк, т. е. множеству, в котором скалярное произведение любых двух разных строк равно нулю. Эти концепции являются оборотными сторонами одной медали. Если U по- крывает Н, то W = V \ U независимо в Н; и наоборот, если W независимо в Н, то U = V \ W покрывает Н. Оба утверждения эквивалентны утверждению, что порожденный гиперграф Н | W не имеет ребер. Это дуальное отношение между покрытием и независимостью, которое, похоже, впервые было открыто Клодом Бергом (Claude Berge) [Proc. National Acad. Sci. 43 (1957), 842-844], несколько парадоксально. Хотя оно логически очевидно и легко проверяемо, на интуитивном уровне оно кажется удивительным. Когда мы смотрим на граф и пытаемся найти большое независимое множество, обычно мы мыслим совершенно иначе, чем когда смотрим на тот же граф и пытаемся найти малое вершинное покрытие; но цели в обоих случаях одинаковы.
56 КОМБИНАТОРНЫЙ ПОИСК 7 Покрывающее множество U минимально (minimal), если U \ и не является покрытием для всех и G U. Аналогично независимое множество W является мак- симальным (maximal), если W U w не является независимым для всех w W. Вот, например, как выглядит минимальное покрытие 49-вершинного графа США (17) и соответствующее ему максимальное независимое множество. Минимальное вершинное покрытие из 38 вершин Максимальное независимое множество из 11 вершин (61) Покрытие называется наименьшим (minimum), если оно имеет наименьший возможный размер, а независимое множество называется наибольшим (maximum), если оно имеет наибольший возможный размер. Например, в случае графа (17) можно добиться лучшего результата, чем представляет собой (61). Наименьшее вершинное покрытие из 30 вершин Наибольшее независимое множество из 19 вершин (62) От переводчика. Для графа Украины (17, у) соответствующие результаты имеют следующий вид. Наименьшее вершинное покрытие из 15 вершин Наибольшее независимое множество из 10 вершин Обратите внимание на тонкую разницу между “минимальным” и “наимень- шим” : в общем случае люди, работающие с комбинаторными алгоритмами, в отли- чие от словаря английского языка, используют слова на ‘-al’ (наподобие “minimal” или “optimal”) для комбинаторных конфигураций, которые являются наилучшими локально, в том смысле, что минимальные изменения их не улучшают. Слова же на ‘-шп’, такие как “minimum” или “optimum” оставлены для конфигураций, наилучших глобально, т. е. при рассмотрении всех возможностей.* Легко найти решение любой задачи оптимизации, являющееся всего лишь оптимальным в слабом локальном смысле, просто забираясь на вершину ближайшего холма. Но обычно * К счастью, русский язык позволяет использовать по-разному звучащие слова—скажем, “оп- тимальный” и “наилучший” — Примеч. пер.
7 КОМБИНАТОРНЫЙ ПОИСК 57 гораздо труднее найти наилучшее решение, истинный оптимум, который представ- ляет собой вершину самой высокой горы. Например, из раздела 7.9 вы узнаете, что задача поиска наибольшего независимого множества данного графа принадлежит классу сложных задач, который называется NP-полным. Даже если задача является NP-полной, не стоит опускать руки. Мы рассмотрим методы поиска наименьших покрытий в нескольких частях данной главы, и эти методы неплохо работают для задач небольшого размера; наилучшее решение (62) найдено менее чем за секунду, после исследования очень небольшой доли всех 249 возможных вариантов. Кроме того, нередко частные случаи NP-полных задач ока- зываются проще, чем задачи в общем случае. В разделе 7.5.1 мы увидим, что можно быстро найти наименьшее вершинное покрытие для любого двудольного графа или для любого гиперграфа, являющегося дуальным к графу. А в разделе 7.5.5 мы изучим эффективные способы наибольшего паросочетания, которое представляет собой наибольшее независимое множество в реберном графе данного графа. Задача максимизации размера независимого множества возникает достаточно часто, чтобы получить собственное обозначение: если Н представляет собой неко- торый гиперграф, то число а(Н) = шах{|1У| | W является независимым множеством вершин в Н] (63) называется числом независимости (или числом устойчивости) гиперграфа Н. Ана- логично х(Н) = min{fc | Н является fc-раскрашиваемым} (64) называется хроматическим числом Н. Обратите внимание, что х(Н) представляет собой размер наименьшего покрытия Н независимыми множествами, поскольку вершины, получающие некоторый определенный цвет, должны быть независимыми в соответствии с нашими определениями. Эти определения ct(H) и х(Н) применимы, в частности, в случае, когда Н представляет собой обычный граф, но, конечно, в этих случаях мы обычно пишем a(G) и X(G). Графы имеют другое важное число, именуемое их кликовым числом, u>(G) = max{|X| | X является кликой в G}, (65) где “клика” представляет собой множество взаимно смежных вершин. Ясно, что w(G) = o(G), (66) поскольку клика в G является независимым множеством в дополнении графа. Ана- логично мы можем видеть, что x(G) является наименьшим размером “кликового покрытия” которое представляет собой множество клик, которое покрывает в точ- ности все вершины. Несколько экземпляров “задач точного покрытия” упоминались ранее в этом разделе без точного пояснения, что же в действительности означает такая задача. Наконец, мы созрели для определения: для заданной матрицы инциденций или гиперграфа Н точное покрытие Н представляет собой множество строк, сумма которых равна (11 ... 1). Другими словами, точное покрытие представляет собой множество вершин, которые соединяются с каждым гиперребром ровно по одному разу; обычное покрытие требует соединения с каждым гиперребром как минимум по одному разу.
58 КОМБИНАТОРНЫЙ ПОИСК 7 Упражнения 1. [25] Предположим, что п = 4т — 1. Постройте размещение пар Лэнгфорда для чисел {1,1,..., п,п}, обладающее тем свойством, что мы также получим решение для п = 4т, заменяя первое ‘2т— 1’ на ‘4т’ и добавляя ‘2т— 1 4т’ справа. Указание: поместите слева т — 1 четных чисел 4т—4, 4т—6, ..., 2т. 2. [20] Для каких п можно расположить числа {0,0,1,1,, п— 1, п— 1} в виде пар Лэнг- форда? 3. [22] Предположим, что мы разместили числа {0,0,1,1,..., п—1, п— 1} по окружности, а не на прямой, с расстоянием к между двумя к. Получим ли мы решение, существенно отличное от решения упр. 2? 4. [М20] (Т. Сколем (Т. Skolem), 1957.) Покажите, что рассматривающаяся в упр. 1.2.8- 36 строка Фибоначчи Soo = babbababbabba... приводит непосредственно к бесконечной по- следовательности 0012132453674 ... пар Лэнгфорда для множества всех неотрицательных целых чисел, если просто независимо заменять а и b слева направо на 0, 1, 2 и т. д. 5. [НМ22] Какова вероятность того, что при случайной перестановке чисел {1,1,2,2,..., п, п} два к будут находиться ровно на расстоянии к позиций одно от другого, для задан- ного fc? Воспользуйтесь этой формулой для оценки величины чисел Лэнгфорда Ln в (1). 6. [М28] (М. Годфри (М. Godfrey), 2002.) Пусть п 2п— к— 1 /(xi, . . . , Ж2п) — 2'j2'j+k+l)« к=1 J-1 а) Докажите, что .....г2„€{-1,+1} ’х2п) = 22п+1£„. б) Поясните, как вычислить эту сумму за О(4пп) шагов. Сколько битов точности потре- буют при этом арифметические операции? в) Усильте результат в восемь раз, используя тождества f(Xl, . . . ,X2n) = f(-Xl,...,-X2n) = f(X2n,...,Xl) = f(xi,-X2,...,X2n-l,~X2n). 7. [Af22] Докажите, что любое размещение Лэнгфорда чисел {1,1,..., 16,16} должно иметь при чтении слева направо в некоторой точке семь незавершенных пар. 8. [23] Простейшая последовательность Лэнгфорда не только хорошо сбалансирована, но и планарна, в том смысле, что ее пары могут быть соединены без пересечения линий, I-------------1 как в (2): 2 3 12 13. Найдите все планарные последовательности Лэнгфорда для п < 8. 9. [24] (Тройки Лэнгфорда.) Сколькими способами можно разместить числа {1,1,1,2,2, 2,..., 9,9,9} в строке так, чтобы последовательные к находились на расстоянии к друг от друга для 1 < к < 9? 10. [М20] Поясните, как построить магический квадрат непосредственно по рис. 1. (Пре- образуйте каждую карту в число от 1 до 16 так, чтобы суммы в каждой строке, каждом столбце и каждой диагонали были равны 34.) 11. [20] Распространите (5) на “иврито-греко-латинский” квадрат, добавляя по одной из букв {N, 3, >, 1} к двухбуквенным строкам в каждой ячейке. Никакие пары букв (латинская, греческая), (латинская, иврит) и (греческая, иврит) не должны встречаться более чем в одном месте. 12. [М21] (Л. Эйлер (L. Euler).) Пусть = (i + j) modn для 0 < i,j < п представляет собой таблицу сложения для целых чисел по модулю п. Докажите, что латинский квадрат, ортогональный L, существует тогда и только тогда, когда п нечетно.
7 КОМБИНАТОРНЫЙ ПОИСК 59 13. [1W25] Квадрат 10 х 10 можно разделить на четыре четверти размером по 5 х 5. Латинский квадрат 10 х 10, образованный цифрами {0,1,...,9}, имеет к “нарушителей” если его верхняя левая четверть имеет ровно к элементов > 5. (См. в упр. 14, (д) пример с к = 3.) Докажите, что квадрат не имеет ортогонального к нему квадрата, если только в нем нет как минимум трех нарушителей. 14. [29] Найдите все квадраты, ортогональные следующим латинским квадратам: (а) (б) (в) (г) (д) 3145926870 2718459036 0572164938 1680397425 7823456019 2819763504 0287135649 6051298473 8346512097 8234067195 9452307168 7524093168 4867039215 9805761342 2340178956 6208451793 1435962780 1439807652 2754689130 3401289567 8364095217. 6390718425. 8324756091. 0538976214. 4012395678 5981274036’ 4069271853 ’ 7203941586 ’ 4963820571 ’ 5678912340 4627530981 3102684597 5610473829 7192034658 6789523401 0576148329 9871546302 9148625307 6219405783 0195634782 1730689452 8956307214 2795380164 3471258906 1956740823 7093812645 5643820971 3986512740 5027143869 9567801234 15. [50] Найдите три латинских квадрата 10 х 10, взаимно ортогональных друг другу. 16. [^5] (Г. Д. Райзер (Н. J. Ryser), 1967.) Латинский квадрат называется “порядка п” если он имеет п строк, п столбцов и п символов. Каждый ли латинский квадрат нечетного порядка имеет секущую? 17. [25] Пусть L—латинский квадрат с элементами L,j для 0 < i,j < п. Покажите, что задачи (а) поиска всех секущих L и (б) поиска всех ортогональных L квадратов являются частными случаями общей задачи точного покрытия. 18. [М26] Строка Х1.Х2 xn называется n-арной, если каждый элемент Xj принадлежит множеству {0,1,... ,п— 1} n-арных цифр. Две строки, Х1Х2 • -xn и У1У2 - 9n, называ- ются ортогональными, если N пар (xj,yj) различны для 1 < j < N. (Следовательно, две n-арные строки не могут быть ортогональны, если их длина N превышает п2.) п- арная матрица с т строками и п2 столбцами, строки которых ортогональны одна другой, называется ортогональным массивом порядка п и глубиной т. Найдите соответствие между ортогональными массивами глубиной т и списками из т — 2 взаимно ортогональных латинских квадратов. Какой ортогональный массив соот- ветствует упр. 11? ► 19. [М25] Продолжая выполнение упр. 18, докажите, что ортогональный массив порядка п > 1 и глубиной т возможен, только если т < п +1. Покажите, что этот верхний предел достижим, когда п является простым числом р. Приведите пример для р = 5. 20. [НМ20] Покажите, что если каждый элемент к в ортогональном массиве заменить на е2тгь/п, т0 его строкн стаНуТ ортогональными векторами в обычном смысле (их скалярное произведение будет равно нулю). ► 21. [1W21] Геометрическая сеть представляет собой систему точек и прямых, подчиняю- щуюся трем аксиомам. i) Каждая прямая есть множество точек. ii) Различные прямые имеют не более одной общей точки. iii) Если р является точкой, a L — прямая, такая, что р $ L, то существует ровно одна прямая М, такая, что р G М и L П М = 0. Если L Г) М = 0, мы говорим, что L параллельна М, и записываем L || М. а) Докажите, что прямые геометрической сети могут быть разбиты на классы эквива- лентности, когда две прямые находятся в одном классе тогда и только тогда, когда они совпадают или параллельны.
60 КОМБИНАТОРНЫЙ ПОИСК 7 б) Покажите, что если имеется как минимум два класса параллельных прямых, то каж- дая прямая содержит то же количество точек, что и другие прямые в ее классе. в) Кроме того, если имеется как минимум три класса, существуют числа тип, такие, что каждая точка принадлежит ровно т прямым, и все прямые содержат ровно п точек. 22. [М22] Покажите, что каждый ортогональный массив можно рассматривать как гео- метрическую сеть. Справедливо ли обратное утверждение? 23. [М23] (Коды с коррекцией ошибок.) “Расстоянием Хэмминга” d(x,y) между двумя строками, х = Xi... xn и у = yi... ум, является количество позиций j, в которых Xj ф у-,. b-арный код с п информационными и г контрольными разрядами представляет собой множество С(Ь,п, г), состоящее из Ьп строк х = xi... тп+г, где 0 < Xj < Ь для 1 < j <п+г. При передаче кодового слова х и получении сообщения у величина d(x, у) равна количеству ошибок передачи. Код называется исправляющим t ошибок, если можно реконструировать значение х при полученном сообщении у, таком, что d(x, у) < t. Расстоянием кода является минимальное значение d(x, х'), взятое по всем парам кодовых слов х ф х'. а) Докажите, что код является исправляющим t ошибок тогда и только тогда, когда его расстояние превышает 21. б) Докажите, что исправляющий одну ошибку 5-арный код с двумя информационны- ми и двумя контрольными разрядами эквивалентен паре ортогональных латинских квадратов порядка Ъ. в) Кроме того, код С(Ь, 2, г) с расстоянием г + 1 эквивалентен множеству г взаимно ортогональных латинских квадратов порядка Ь. 24. [МЗО] Геометрическая сеть с N точками и R прямыми естественным образом приводит к бинарному коду С(2, N, R) с кодовыми словами xi ... хнхн+i xn+r, определяемыми битами четности xn+ь = fk(xi,in) = (52{Tj I точка j лежит на прямой fc}) mod 2. а) Докажите, что этот код имеет расстояние т + 1, если сеть имеет т классов парал- лельных прямых. б) Найдите эффективный способ исправления до t ошибок в этом коде, в предположении, что т = 21. Проиллюстрируйте процесс декодирования для случая N = 25, R = 30, 1 = 3. 25. [27] Найдите латинский квадрат, строки и столбцы которого представляют собой пятибуквенные слова. (Для выполнения этого упражнения вам понадобятся большие словари.) 2в. [25] Составьте имеющее смысл английское предложение, состоящее только из пяти- буквенных слов. 27. [20] Сколько SGB-слов содержат ровно к различных букв для 1 < к < 5? 28. [20] Имеются ли пары SGB-слов, рассматриваемых как векторы, все соответствующие компоненты которых отличаются на ±1? 29. [20] Найдите все SGB-слова, являющиеся палиндромами (остающимися неизменными при чтении справа налево) или зеркальными парами (наподобие regal lager). 30. [20] Буквы слова first находятся в алфавитном порядке слева направо. Какое из таких пятибуквенных слов является лексикографически первым? Какое последним? 31. [21 ] (К. Мак-Манус (С. McManus).) Найдите все множества из трех SGB-слов, находя- щихся в арифметической прогрессии и не имеющих общих букв ни в одной фиксированной позиции. (Одним таким примером является {power, slugs, visit}.)
7 КОМБИНАТОРНЫЙ ПОИСК 61 32. [23] Содержит ли английский язык хотя бы одно десятибуквенное слово aoai - ад, для которого и go о? 04 Об 08) и 0103050709 являются SGB-словами? 33. [20] (Скот Моррис (Scot Morris).) Завершите следующий список из 26 интересных SGB-слов: about, bacon, faced, under, chief, ..., pizza. 34. [21] Для каждого SGB-слова, не включающего букву у, получим 5-битовое бинарное число, заменяя гласные {a,e,i,o,u} единицами, а остальные буквы—нулями. Каковы наиболее распространенные слова для каждых из 32 бинарных значений? 35. [26] Шестнадцать тщательно отобранных элементов WORDS (1000) приводят к ветвя- щейся структуре которая представляет собой полный бинарный луч слов, начинающихся с буквы в. Однако такой структуры для слов, начинающихся с буквы а, не существует, даже если рассмотреть всю коллекцию W0RDS(5757). Какие буквы алфавита могут быть использованы в качестве начальной буквы шест- надцати слов, образующих полный бинарный луч в WORDS(n) для заданного п? 36. [Ml 7] Поясните симметрии, наблюдающиеся в кубе из слов (10). Покажите также, что еще два таких куба можно получить изменением только двух слов—{stove,event}. 37. [20] Какие вершины графа words (5757,0,0,0) имеют максимальную степень? 38. [22] Используя правило ориентированного графа из (14), замените tears на smile за три шага, не прибегая к помощи компьютера. 39. [МОО] Является ли G \ е порожденным подграфом G? Является ли он остовным подграфом? 40. [Л/15] Сколько (а) остовных и (б) порожденных подграфов имеет граф G = (V,E), когда |V| = п и |В| = е? 41. [ЛПО] Для каких целых чисел п мы имеем: (а) Кп = Рп? (б) Кп = С„? 42. [15] (Д. Г. Лемер (D. Н. Lehmer).) Пусть G—граф с 13 вершинами, каждая вершина которого имеет степень 5. Сформулируйте нетривиальное утверждение о G. 43. [23] Является ли какой-либо из приведенных графов графом Петерсена? 44. [М23] Сколько симметрий имеет граф Чватала? (См. рис. 2, (е).) 45. [20] Найдите простой способ 4-раскрашивания планарного графа (17). Хватит ли вам трех красок? 46. [М25] Пусть G представляет собой граф с п > 3 вершинами, определяемыми планар- ной диаграммой, и являющийся “максимальным” в том смысле, что между несмежными вершинами нельзя провести никаких дополнительных линий без пересечения уже суще- ствующих.
62 КОМБИНАТОРНЫЙ ПОИСК 7 а) Докажите, что диаграмма разбивает плоскость на области, каждая из которых имеет на своих границах ровно три вершины. (Одной из этих областей являются все точки, лежащие за пределами диаграммы.) б) Следовательно, G имеет ровно Зп — 6 ребер. 47. [Л/йй] Докажите, что полный биграф Кз,з не является планарным. 48. [М25] Завершите доказательство теоремы В, показав, что описанная процедура ни- когда не дает один и тот же цвет двум соседним вершинам. 49. [15] Начертите диаграммы для всех кубических графов не более чем с 6 вершинами. 50. [M2J] Найдите все двудольные графы, которые могут быть 3-раскрашены ровно 24 способами. ► 51. [1И22] Для заданной геометрической сети, такой как описанная в упр. 21, постройте двудольный граф, вершинами которого являются точки р и прямые L сети, причем р — L тогда и только тогда, когда р € L. Чему равен обхват этого графа? 52. [Л/15] Найдите простое неравенство, которое связывает диаметр и его обхват. (На- сколько малым может быть диаметр при большом обхвате?) 53. [15] Какое из слов world и happy принадлежит гигантскому компоненту графа words (5757,0,0,0)? ► 54. [21] Вот список из 49 почтовых кодов в графе (17) в алфавитном порядке: AL, AR, AZ, СА, СО, СТ, DC, DE, FL, GA, IA, ID, IL, IN, KS, KY, LA, MA, MD, ME, MI, MN, MO, MS, MT, NC, ND, NE, NH, NJ, NM, NV, NY, OH, OK, OR, PA, RI, SC, SD, TN, TX, UT, VA, VT, WA, WI, WV, WY. а) Предположим, что мы рассматриваем два штата как соседние, если их почтовые коды совпадают в одной букве (т. е. AL — AR — 0R — ОН и т. д.). Каковы компоненты данного графа? б) Образуем ориентированный граф с XY —>YZ (например, AL—>LA—>AR и т. д.). Что собой представляют сильно связанные компоненты этого ориентированного графа? (См. раздел 2.3.4.2.) в) В США, помимо почтовых кодов в (17), имеются дополнительные почтовые коды, а именно АА, АЕ, АК, АР, AS, FM, GU, HI, МН, MP, PW, PR, VI. Рассмотрите заново вопрос из п. (б) с использованием всех 62 почтовых кодов. 55. [М20] Сколько ребер имеется в полном fc-дольном графе Kni,...,nfc? ► 56. [ЛИ 0] Истинно или ложно утверждение “мультиграф является графом тогда и только тогда, когда соответствующий ориентированный граф является простым”? 57. [ЛИО] Истинно или ложно утверждение “вершины и и и находятся в одном и том же связном компоненте ориентированного графа тогда и только тогда, когда либо d(u, v) < оо, либо d(v, и) < оо”? 58. [ЛИ 7] Опишите все (а) графы и (б) мультиграфы, являющиеся регулярными степе- ни 2. ► 59. [М23] Турнир порядка п представляет собой ориентированный граф из п вершин, имеющий ровно (£) дуг, либо и —> и, либо v —> и для каждой пары различных вершин {u, г}. а) Докажите, что каждый турнир содержит ориентированный остовный путь щ >------> vn. б) Рассмотрим турнир на вершинах {0,1,2,3,4}, в котором и—>v тогда и только тогда, когда (и — v) mod 5 > 3. Сколько ориентированных остовных путей он имеет? в) Является ли Кп единственным турниром порядка п, который имеет единственный ориентированный остовный путь?
7 КОМБИНАТОРНЫЙ ПОИСК 63 ► 60. [MSS] Пусть и—вершина с наибольшей исходящей степенью в турнире и пусть v — любая другая вершина. Докажите, что d(u, v) < 2. 61. [Ml 6] Постройте ориентированный граф, имеющий к обходов длиной к из вершины 1 в вершину 2. 62. [MSI] Перестановочный ориентированный граф представляет собой ориентирован- ный граф, каждая вершина которого имеет входящую и исходящую степени, равные 1; следовательно, его компонентами являются ориентированные циклы. Если он имеет п вершин и к компонентов, то мы назовем его четным при четном п — к и нечетным при п — к нечетном. а) Пусть G—ориентированный граф с матрицей смежности А. Докажите, что количе- ство остовных перестановочных ориентированных графов G равно per А (перманен- ту А). б) Интерпретируйте определитель det А в терминах остовных перестановочных ориенти- рованных графов. 63. [MS3] Пусть G—граф с обхватом д, каждая вершина которого имеет как минимум d соседей. Докажите, что G имеет как минимум W вершин, где _ Г 1 + 53o<fe<t — 1) ’ если д = 2t + 1; 11 + (d - 1)‘ + 520<fc<t d(d - l)fc, если g = 2t + 2. ► 64. [MSI] Продолжая выполнять упр. 63, покажите, что имеется единственный граф с обхватом 4, минимальной степенью d и порядком 2d для каждого d > 2. ► 65. [7ЙИ51] Предположим, что граф G имеет обхват 5, минимальную степень d и N = d2+l вершин. а) Докажите, что матрица смежности А графа G удовлетворяет уравнению А2 + А = (d — 1)1 +J. б) Поскольку А—симметричная матрица, она имеет N ортогональных собственных век- торов Xj с соответствующими собственными значениями Xj, такими, что Axj = XjXj Для 1 < j < N. Докажите, что каждое Xj равно либо d, либо (—1 ± \/4d — 3)/2. в) Покажите, что если \/4d — 3 иррационально, то d = 2. Указание: Ai + • + Xn = trace(A) = 0. г) А если \/4d — 3 рационально, то d G {3, 7,57}. 66. [Af30] Продолжая выполнять упр. 65, постройте такой граф для d = 7. 67. [MJ8] Существует ли регулярный граф со степенью 57, порядком 3250 и обхватом 5? 68. [MS0] Сколько различных матриц смежности имеет граф Gen вершинами? ► 69. [SO] Расширяя (31), поясните, как вычислить и исходящую степень ODEG(v), и входя- щую степень IDEG(v) для всех вершин v графа, представленного в SGB-формате. ► 70. [MS0] Как часто выполняется каждый шаг алгоритма В, когда этот алгоритм успешно выполняет 2-раскрашивание графа с т дугами и п вершинами? 71. [S6] Реализуйте алгоритм В для компьютера MMIX на языке ассемблера MMIXAL. Счи- тайте, что в момент начала работы вашей программы регистр v0 указывает на узел первой вершины, а регистр и содержит количество вершин. ► 72. [MSS] Когда COLOR(v) установлен на шаге В6, назовем и родителем v; но когда COLOR(w) установлен на шаге ВЗ, будем говорить, что w не имеет родителя. Определим (включительно) предков вершины и рекурсивно как v вместе с предками родителя v (если таковой имеется). а) Докажите, что если v в процессе работы алгоритма В находится в стеке ниже и, то родителем v является предок и.
64 КОМБИНАТОРНЫЙ ПОИСК 7 б) Кроме того, если COLOR(v) = COLOR(u) на шаге В6, v находится в данный момент в стеке. в) Воспользуйтесь этими фактами для расширения алгоритма В таким образом, что- бы, если заданный граф не является двудольным, выводились имена вершин цикла нечетной длины. 73. [15] Какое другое имя имеет граф random-graph(10,45,0,0,0,0,0,0,0,0)? 74. [21] Какая вершина ropet(1022,0,0,0) имеет наибольшую исходящую степень? 75. [22] Генератор графов SGB board(ni,n2,ns,n4,p,w,o) создает граф, вершинами кото- рого являются t-мерные целочисленные векторы (xi,..., xt) для 0 < х, < 5», определяемые первыми четырьмя параметрами (711,712,713,714) следующим образом. Установим Tig 4— 0, и пусть значение j > 0 — минимальное такое, что п_,+1 < 0. Если j = 0, установим bi <- Ьг 8 и t 4— 2; это стандартная шахматная доска размером 8 х 8. В противном случае если Tij+i = 0, установим bi <— щ для 1 < г < j и t 4— j. Наконец, если 7ij+i < 0, установим t <- |tZj4- 11 и установим b, равным г-му элементу периодической последовательности (tii ,..., tij , Tii, • • • ,7ij,7ii,... ). (Например, значения (711,712,713,714) = (2,3,5,—7) дают семимерную шахматную доску с (bi,..., 5?) = (2,3,5,2,3,5,2), следовательно, граф имеет 2-3-5-2-3-5-2 = 1800 вершин.) Остальные параметры (p,w,o) указывают часть, завертывание и ориентацию, опре- деляя дуги графа. Положим сначала, что w = о = 0. Если р > 0, имеем (xi,... ,xt) —> (j/i,..., yt) тогда и только тогда, когда yt = Xi+6t для 1 < i < t, где (<5Х,..., <5t) представляет собой целочисленное решение уравнения <5? + • • + = |р|. А если р < 0, мы также позволяем yi= Xi + k6i для к > 1, что соответствует к ходам в том же направлении. Если w ф 0, пусть в двоичной записи w имеет вид (wt... №1)2- Тогда мы разрешаем “завертывание” = (xt + bi) mod bi или р, = (xi + kbi) mod bi по каждой координате i, для КОТОРОЙ Wi = 1. Если о ф 0, граф ориентированный; смещения (<5i,... , <5t) дают дуги только тогда, когда они лексикографически больше, чем (0,..., 0). Но если о = 0, граф неориентирован- ный. Найдите установки (711,712,713,714,p,w,о), для которых board будет давать следующие фундаментальные графы: (а) полный граф Кп', (б) путь Рп', (в) цикл Сп; (г) транзитивный турнир Кп', (д) ориентированный путь Рп', (е) ориентированный цикл Сп', (ж) тпх71-решетку PmnFn; (3) 771 X 71-ЦИЛИНДР РтПСп', (и) 771. X 71-ТОр СтПСп; (к) 771 X 71-Граф ЛЭДЬИ KmOKn; (л) 771 х 71-ориентированный тор СтПСп; (м) нулевой граф Кп‘, (н) тг-мерный куб РгО- • -оРг с 2” вершинами. 76. [20] Может ли board(711,712,713,714, р, w, о) создавать петли или параллельные (повто- ряющиеся) ребра? 77. [М20] Докажите, что G имеет диаметр < 3, если граф G имеет диаметр > 3. 78. [М27] Пусть G = (V,E)—граф с |V| = п и G G. (Другими словами, граф G самодополнительный: существует перестановка <р множества V, такая, что и — v тогда и только тогда, когда <р(и) <р(у) и и / и. Можно представить, что ребра Кп раскрашены черным и белым цветами; белые ребра определяют граф, изоморфный графу с черными ребрами.) а) Докажите, что 71 mod 4 = 0 или 1. Начертите диаграммы всех таких графов с п < 8. б) Докажите, что если 71 mod 4 = 0, то каждый цикл перестановки имеет длину, кратную 4. в) И обратно, каждая перестановка с такими циклами возникает в некотором таком графе G. г) Распространите эти результаты на случай 71 mod 4=1.
7 КОМБИНАТОРНЫЙ ПОИСК 65 ► 79. [1И2Й] Для заданного к > 0 постройте граф на вершинах {0,1,, 4к}, который одно- временно является регулярным и самодополнительным. ► 80. [MSS] Самодополнительный граф должен иметь диаметр, равный 2 или 3 в соот- ветствии с упр. 77. Для заданного к > 2 постройте самодополнительные графы обоих возможных диаметров, когда (а) V = {1,2,..., 4k}; (б) V = {0,1,2,..., 4k}. 81. [SO] Дополнение простого ориентированного графа без циклов определяется путем расширения (35) и (36), так что мы имеем и —> v в D тогда и только тогда, когда и ft v и и ft v в D. Что собой представляют самодополнительные ориентированные графы порядка 3? 82. [MSI] Истинны или ложны приведенные далее утверждения о реберных графах? а) Если G содержится в G', то L(G) является порожденным подграфом L(G'). б) Если G является регулярным графом, то же справедливо и для L(G). в) L(Km,n) является регулярным для всех т, п > 0. г) L(Km,n,r) является регулярным для всех т,п, г > 0. д) L(Km,n) =* КтпКп. е) L(K4) “ К2,2,2. ж) L(Pn+l) = Рп- з) Графы G и L(G) имеют одно и то же количество компонентов. 83. [16] Начертите граф Ь(Къ). ► 84. [MSI] Является ли Ь(Кз,з) самодополнительным? 85. [MSS] (О. Оре (О. Ore), 1962.) Для каких графов G выполняется G — L(G)? 86. [MS0] (Р. Д. Вильсон (R. J. Wilson).) Найдите граф G порядка 6, для которого G SS L(G). 87. [SO] Является ли граф Петерсена (а) 3-раскрашиваемым? (б) 3-реберно раскрашива- емым? 88. [MS0] Граф Wn = Ki—Cn-i называется колесом порядка п, где п > 4. Сколько циклов содержит этот граф в качестве подграфов? V-V Wg 89. [MS0] Докажите законы ассоциативности (42) и (43). ► 90. [MS4] Граф называется сографом (cograph), если он может быть построен алгебраи- чески из одноэлементных графов посредством операций дополнения и прямого суммиро- вания. Например, имеется четыре неизоморфных графа порядка 3, и все они являются сографами: Кз = Ki ф К\ ф Ki и его дополнение, Кз; Кцг = Ki ф К2 и его дополнение, К1,2, где К2 = Ki фKi. Исчерпывающее перечисление показывает, что имеется 11 неизоморфных графов по- рядка 4. Приведите алгебраические формулы, доказывающие, что 10 из них являются сографами. Какой из них не является сографом? ► 91. [S0] Начертите диаграммы графов с четырьмя вершинами: (а) К2пК2; (б) К2 ® К2\ (в) К2 и К2\ (г) К2 д К2; (д) К2 о К2; (е) К^ о К2-, (ж) К2 о К^. 92. [21] Пять типов произведений графов, определенных в тексте, хорошо работают как для простых ориентированных графов, так и для обычных графов. Начертите диаграммы для ориентированных графов с четырьмя вершинами (а) К2пК2-, (б) КГ® КГ; (в) КГиКГ; (г) КГ а КГ; (д) КГ ° КГ. 93. [15] Какие из пяти произведений графов превращают Кт и Кп в Кт„? 94. [10] Являются ли SGB-графы words порожденными подграфами РгбОКгвПКавПКабП Р26? 3 Зак. 3331
66 КОМБИНАТОРНЫЙ ПОИСК 7 95. [М20] Если вершина и графа G имеет степень du, а вершина v графа Н имеет сте- пень dv, то какова степень вершины (и, v) в (a) G □ Н7 (б) G ® Я? (в) G И Н? (г) G а Я? (д) Go Я? 96. [М22] Пусть А является матрицей т х т' с элементами на пересечении строки и и столбца и'; и пусть В является матрицей п х п' с элементами bvv> на пересечении строки v и столбца v . Прямое произведение А® В представляет собой матрицу тп х т'п' с элементами avn>bvvr на пересечении строки (u, v) и столбца (и', v'). Таким образом, А® В представляет собой матрицу смежности для G ® Н, если А и Я являются матрицами смежности G и Я. Найдите аналогичные формулы для матриц смежности (а) СпЯ; (б) Си Я; (в) Gt\H; (г) Go Я. 97. [М25] Найдите столько интересных алгебраических соотношений между суммами и произведениями графов, сколько сможете. (Например, закон дистрибутивности (А ф В) ® С = (А ® G) ф (В ® G) для прямых сумм и произведений матриц влечет за собой (G®G') ® Я = (G® Я)ф (G1 ® Я). Мы также имеем ЯтпЯ = Яф---фЯст копиями Я, и т. д.) 98. [М20] Если граф G имеет к компонентов, а граф Я имеет I компонентов, то сколько имеется компонентов в графах G □ Я и G И Я? 99. [М20] Пусть da (и, и1)— расстояние от вершины и до вершины и' в графе G. Дока- жите, что ФзпнДи, г>), (u', г/)) = и') + <2н(г>, v'), и найдите аналогичную формулу для давн((и,и),(и' ,г>'))- 100. [М2/] Для каких связных графов G® Н связно? 101. [М25] Найдите все связные графы G и Я, такие, что Go Я = G ® Н. 102. [М20] Какова простейшая алгебраическая формула для графа ходов королем (по одной клетке по горизонтали, вертикали или диагонали) на доске т х п? 103. [20] Завершите таблицу (54). Примените также алгоритм Н к последовательности 866444444. 104. Поясните манипуляции переменными i, t и г на шагах НЗ и Н4. 105. [М3<?] Предположим, что di > • • > dn > 0, и пусть ci > - - - > са1—сопряжение этой последовательности, как в алгоритме Н. Докажите, что последовательность di... dn является графической тогда и только тогда, когда di + • • • + dn четно и di + • • • + dk < ci 4- • • • + Ск — к для 1 < к < s, где s — максимальное значение, при котором ds > s. 106. [20] Истинно или ложно следующее утверждение? Если di = -- - = dn = d<nnnd четно, алгоритм Н строит связный граф. 107. [М2/] Докажите, что последовательность степеней di... dn самодополнительного графа удовлетворяет условиям dj + dn+i-j = п — 1 и dzj-i = для 1 < j < п/2. 108. [М23] Разработайте алгоритм, аналогичный алгоритму Н, который строит простой ориентированный граф на вершинах {1,..., п}, имеющий определенные значения d^ и d£ в качестве входящей и исходящей степеней каждой вершины к, если существует как мини- мум один такой граф. 109. [М20] Разработайте алгоритм, аналогичный алгоритму Н, который строит двудоль- ный граф на вершинах {1,... ,т + п}, имеющий определенные степени dk для каждой вершины к, когда это возможно; все ребра j — к должны иметь j < т и к > т. 110. [М22] Не прибегая к алгоритму Н, покажите путем непосредственного построения, что последовательность di... dn является графической, когда п > di > • • • > dn > di — 1 и di + • • • + dn четно.
7 КОМБИНАТОРНЫЙ ПОИСК 67 111. [25] Пусть G представляет собой граф на вершинах V = {1,... ,тг} со степенью dk у вершины к и max(di,..., dn) = d. Докажите, что существует целое число 7V (тг < 7V < 2п) и граф Н на вершинах {1,... ,7V}, такой, что Н является регулярным графом степени d и Н | V = G. Поясните, как построить такой регулярный граф с наименьшим возможным значением N. 112. [20] Имеются ли в сети mz/es(128,0,0,0,0,127,0) три эквидистантных города? Если нет, какие три города оказываются ближе всего к вершинам равностороннего треуголь- ника? 113. [05] Если Н является гиперграфом с тп ребрами и п вершинами, то сколько строк и столбцов имеет его матрица инциденций? 114. [М20] Предположим, что мультиграф (26) рассматривается как гиперграф. Какова соответствующая матрица инциденций? Какой вид имеет соответствующий двудольный мультиграф? 115. [М20] Пусть В представляет собой матрицу инциденций графа G. Поясните смысл симметричных матриц ВТВ и ВВТ. 116. [Ml7] Опишите ребра полного двудольного r-однородного гиперграфа 117. [М22] Сколько неизоморфных 1-однородных гиперграфов имеют m ребер и п вер- шин? (Ребра могут повторяться.) Перечислите их все для тп — 4 и п = 3. 118. [М20] “Гиперлесом” называется гиперграф, не имеющий циклов. Если гиперлес имеет тп ребер, п вершин и р компонентов, то чему равна сумма степеней его вершин? 119. [М15] Какой гиперграф соответствует (60) без последнего члена (х\ V Х2 V £4)? 120. [М20] Определите ориентированный гиперграф, обобщая концепцию ориентирован- ных графов. 121. [ЛИР] Для заданного гиперграфа Н = (V,E) положим 1(H) = (V,F), где F — семейство всех максимальных независимых множеств гиперграфа Н. Выразите х(Н) через |V|, |F| и а(1(Н)т). 122. [JW24] Найдите наибольшее независимое множество и минимальное раскрашивание следующих систем троек: (а) гиперграф (56); (б) граф, дуальный графу Петерсена. 123. [17] Покажите, что оптимальное раскрашивание Кп □ Кп эквивалентно решению знаменитой комбинаторной задачи. 124. [М22] Каково хроматическое число графа Чватала (рис. 2, (е))? 125. [М^5] Для каких значений д существует 4-регулярный 4-хроматический граф с об- хватом д? 126. [М22] Найдите оптимальное раскрашивание “королевского тора” Ст И Сп при зна- чениях 771, п > 3. 127. [М22] Докажите, что (a) x(G) + x(G) < п+ 1 и (б) x(G)x(G) > п, когда G является графом порядка п, и найдите графы, для которых выполняется равенство. 128. [ЛИ 5] Выразите x(GnH) через x(G) и х(Н), когда G и Н являются графами. 129. [23] Опишите максимальные клики графа ходов ферзя (37). 130. [М20] Сколько максимальных клик в полном fc-дольном графе? 131. [М50] Пусть N(n)—наибольшее количество максимальных клик, которое может иметь граф с п вершинами. Докажите, что 3Ln/3J < 7V(ti) < З^п^3\ 132. [М20] Назовем G плотно раскрашиваемым (tightly colorable), если x(G) = w(G). Докажите, что x(G&H) = x(G)x(H), если G и Н плотно раскрашиваемы.
68 КОМБИНАТОРНЫЙ ПОИСК 7 133. [21] Показанный “музыкальный граф” предоставляет хорошую возможность наглядно представить многочисленные определения, да- вавшиеся в этом разделе, поскольку его свой- ства легко проанализировать. Определите для данного графа (а) порядок; (б) размер; (в) обхват; (г) диаметр; (д) число независи- мости, a(G); (е) хроматическое число, х(С); (ж) реберно-хроматическое число, x(L(G))-, (з) количество клик, w(G); (и) алгебраическую формулу графа, выражающую его как произведе- ние хорошо известных меньших графов. Чему ра- вен размер (к) наименьшего вершинного покрытия? (л) наибольшего паросочетания? Является ли граф G (м) регулярным? (н) планарным? (о) связным? (п) ориентированным? (р) свободным деревом? (с) гамильтоновым графом? 134. [Л/22] Сколько автоморфизмов имеет музыкальный граф? 135. [HMS6] Предположим, что композитор осуществляет случайное блуждание в музы- кальном графе, начиная с вершины С, и делая на каждом шаге выбор одного из пяти ребер с равной вероятностью. Покажите, что после четного количества шагов блуждание с более высокой вероятностью завершится в вершине С, чем в любой другой. Какова точная вероятность попасть из вершины С в вершину С в результате блуждания в 12 шагов? 136. [НМ23] Ориентированный граф Кейли представляет собой ориентированный граф, вершины V которого являются элементами группы, а его дугами являются v —> vaj для 1 < j < d и всех вершин v, где (ai,...,a<j)—фиксированные элементы группы. Граф Кейли—это ориентированный граф Кейли, который одновременно представляет собой граф. Является ли граф Петерсена графом Кейли? 8 11 2 5 4 7 10 1 0 3 6 9 8 11 2 5 4 7 10 1 0 3 6 9 8 11 2 5 4 7 10 1 0 3 6 9 8 11 2 5 4 7 10 1 0 3 6 9 8 11 2 5 4 7 10 1 0 3 6 9 8 11 2 5 4 7 10 1 0 3 6 9 8 11 2 5 4 7 10 1 0 3 6 9 8 11 2 5 4 7 10 1 0 3 6 9 8 11 2 5 4 7 10 1 0 3 6 9 137. [М25] (Обобщенные торы.) Тор размером т х п можно рассматривать как замоще- ние плоскости. Например, можно представить, что бесконечное количество копий торов 3 х 4 из (50) размещаются вместе в виде решетки, как показано на приведенном выше рисунке слева; из каждой вершины можно перемещаться на север юг, восток или запад в следующую вершину тора. Вершины здесь были пронумерованы таким образом, чтобы перемещение на север из вершины v приводило в вершину (у + 4) mod 12, перемещение на восток—в вершину (у + 3) mod 12, и т. д. В правой части рисунка показан тот же тор, но с несколько иной формой мозаичного элемента; любой вариант выбора двенадцати ячеек с номерами {0,1,..., 11} будет замащивать плоскость, с точно тем же лежащим в основе замощения графом. Смещенные копии одной плитки будут также заполнять плоскость, если они образуют обобщенный тор, в котором ячейка (х,у) соответствует той же вершине, что и ячейки
7 КОМБИНАТОРНЫЙ ПОИСК 69 (х + а, у + Ь) и (х + с, у + d), где (а, Ь) и (с, d) —целочисленные векторы, и п = ad — be > 0. Тогда обобщенный тор будет иметь п точек. Эти векторы (а, Ь) и (с, d) в приведенном выше примере 3x4 представляют собой (4,0) и (0,3); а когда они становятся соответственно (5,2) и (1,3), мы получаем 19 10 11 12 [4 5 6 7 8 | 9 10 11 12_0 1 2 3 |~4 4 5 6 7 8 9 10 11 12 0 10 11 12| 6 7 в] 2 3 9 5 1 0 1 2 3 4 5 6 7 819 10 11 12 9 10 11 12 0 1 2 3 [4 5 6 7 8 0 12 ЗГ 4 5 6 7 8 19 10 11 12 0 1 2 3|4 5 678 |о 1 2 з| Здесь п = 13, и перемещение в северном направлении из v дает (г>+4) mod 13; перемещение в восточном направлении приводит в (г> + 1) mod 13. Докажите, что если gcd(a, b, с, d) — 1, то вершинам такого обобщенного тора всегда можно присвоить целочисленные метки {0,1,... ,п— 1} таким образом, что соседями v являются (г> ± р) mod п и (у ± q) mod п для некоторых целых чисел р и q. 138. [7ЙИЙ7] Продолжая выполнять упр. 137, придумайте эффективный способ присваи- вания меток /с-мерным вершинам х = (ая,... ,хь), когда заданы целочисленные векторы aj, такие, что каждый вектор х эквивалентен х + otj для 1 < ji < к. Проиллюстрируйте свой метод для случая к = 3, ai = (3,1,1), аг = (1,3,1), аз = (1,1,3). ► 139. [ЛД!2] Пусть Н представляет собой фиксированный граф порядка h, a — количество раз, когда Н оказывается порожденным подграфом данного графа G. Ес- ли G выбран случайным образом из множества всех 2"("-1У2 графов на вершинах V = {1,2,...,п}, то чему равно среднее значение #(H:G) для случаев, когда Н представляет собой (a) Kh', (б) Ph для h > 1; (в) Ch для h > 2; (г) произвольный граф? 140. [Л£30] Граф G называется пропорциональным, если каждое из его количеств порож- денных подграфов #(/<з:С), #(Аз:С) и #(Рз:С) согласуется с ожидаемыми значениями, полученными в упр. 139. а) Покажите, что колесо W& из упр. 88 пропорционально в данном смысле. б) Докажите, что граф G пропорционален тогда и только тогда, когда #(Кз:С) = |(д) и последовательность степеней di... dn его вершин удовлетворяет тождествам di+- - + dn- Q), dl + ...+dl = ^)- (*) 141. [26] Условия из упр. 140,(6) могут выполняться, только если п mod 16 G {0,1,8}. Напишите программу для поиска всех пропорциональных графов с п = 8 вершинами. 142. [Af50] (С. Янсон (S. Janson) и Я. Кратохвил (J. Kratochvil), 1991.) Докажите, что не существует графа G на четырех или более вершинах, являющегося “сверхпропорцио- нальным” в том смысле, что количество его подграфов #(H:G) согласуется с ожидаемыми значениями из упр. 139 для каждого из одиннадцати неизоморфных графов Н порядка 4, которые рассматривались в упр. 90. Указание: обратите внимание, что (п — 3)#(Кз:С) = 4#(K4:G) + 2#(K1,1,2:G) + #(K^:G) + ► 143. [М25] Пусть А является произвольной матрицей ст > 1 различными строками и п > т столбцами. Докажите, что как минимум один столбец А может быть удален так, что при этом никакие две строки не станут равными. ► 144. [21] Пусть X— матрица размером т х п, элементами x,j которой являются 0, 1 или ♦. “Дополнением” X является матрица X*, в которой каждая ♦ заменена на 0 либо 1.
70 КОМБИНАТОРНЫЙ поиск Покажите, что задача поиска дополнения с наименьшим количеством различных строк эквивалентна задаче поиска хроматического числа графа. 145. [25] (Р. С. Бойер (R. S. Воуег) и Д. С. Мур (J. S. Moore), 1980.) Предположим, что массив at... а„ содержит мажоритарный элемент, т. е. значение, которое встречается более чем п/2 раз. Разработайте алгоритм, который находит его менее чем за п сравнений. Указание: если п > 3 и а„-1 ап, мажоритарный элемент ai...an является также мажоритарным элементом ai... an-2.
7.1.1 ОСНОВЫ БУЛЕВОЙ АЛГЕБРЫ 71 При использовании основания 2 получающиеся единицы можно называть бинарными цифрами (binary digits) или, сокращенно, битами (bits)— словом, предложенным Д. У. Таки (J. W. Tukey). — КЛОД Э. ШЕННОН (CLAUDE Е. SHANNON), в Bell System Technical Journal (1948) bit (bit), n... [A] boring tool (буровой инструмент)... — Random House Dictionary of the English Language (1987) 7.1. НУЛИ И ЕДИНИЦЫ Комбинаторные алгоритмы часто требуют особого внимания к эффективности, и правильное представление данных — важный способ получения необходимой ско- рости. Таким образом, разумно расширить наши знания об элементарных методах представления, прежде чем приступать к детальному изучению комбинаторных алгоритмов. Большинство современных компьютеров основаны на двоичной системе счисле- ния вместо работы непосредственно с десятичными числами, которые предпочитают люди, поскольку машины особенно эффективны при работе с величинами, описыва- емыми двумя состояниями (включено-выключено), которые обычно обозначаются двумя цифрами — 1 и 0. В главах 1-6 мы почти не использовали тот факт, что двоичные компьютеры могут делать некоторые вещи быстро, чего не могут деся- тичные компьютеры. Двоичные компьютеры обычно выполняют “логические’’ или “битовые” операции так же быстро, как сложение или вычитание; однако мы редко используем эту возможность. Мы видели, что для множества применений двоичные и десятичные компьютеры не слишком отличаются, но в некотором смысле можно сказать, что мы просили двоичный компьютер работать с одной рукой, привязанной за спиной. Удивительная применимость нулей и единиц для кодирования информации, так же как и для кодирования логических отношений между элементами и даже для кодирования алгоритмов обработки информации, делает изучение битов особен- но ценным. В действительности мы не только применяем битовые операции для усовершенствования комбинаторных алгоритмов, но и обнаруживаем, что свойства бинарной логики естественным путем приводят к новым комбинаторным задачам, которые представляют большой интерес сами по себе. Ученые-информатики постепенно укрощают дикие нули и единицы, постоянно совершенствуясь в этой деятельности, и заставляют делать их разные полезные трю- ки. Но прежде чем приступить к изучению высокоуровневых концепций и методов, желательно хорошо понять низкоуровневые свойства бинарных величин. Так что мы начнем с исследования базовых способов объединения отдельных битов и их последовательностей. 7.1.1. Основы булевой алгебры Имеется 16 возможных функций f(x, у), которые преобразуют два данных бита х и у в третий бит z = f{x, у), поскольку имеется по два выбора для каждого из значений
72 КОМБИНАТОРНЫЙ поиск 7.1.1 /(0,0), /(0,1), /(1,0) и /(1,1). В табл. 1 указаны имена и обозначения, традици- онно связанные с этими функциями при изучении формальной логики, и считает- ся, что 1 соответствует истине, а 0—лжи. Последовательность четырех значений /(0,0)/(0,1)/(1,0)/(1,1) привычно называется таблицей истинности функции /. Давайте представим алгебру, в которой символы х, у, z и т. д. принимают значения О и 1 и только их. — ДЖОРДЖ БУЛЬ (GEORGE BOOLE), Исследование законов мышления (Ап investigation of the Laws of Thought) (1854) — и задом наперед, совсем наоборот,—подхватил Траляля. — Если бы это было так, это бы еще ничего, а если бы ничего, оно бы так и было, но так как это не так, так оно и не этак! Такова логика вещей!* — ЛЬЮИС КЭРРОЛЛ (LEWIS CARROLL), Алиса в Зазеркалье (Through the Looking Glass') (1871) Такие функции часто называют булевыми операциями в честь Джорджа Буля (George Boole), который первым открыл, что алгебраические операции над нулями и единицами могут использоваться для построения исчисления для логических рас- суждений [The Mathematical Analysis of Logic (Cambridge: 1847); An Investigation of the Laws of Thought (London: 1854)]. Однако Буль никогда не работал с операцией “логическое или” V; он самоограничился строго арифметическими операциями над нулями и единицами. Таким образом, он записывал х+у для обозначения дизъюнк- ции, но при этом прилагал массу усилий, чтобы не использовать эту запись никогда, кроме случаев, когда х и у оказывались взаимоисключающими (не были оба одно- временно равны 1). При необходимости он писал х + (1— х)у, чтобы гарантировать, что результат дизъюнкции никогда не будет равен 2. Переводя операцию + на английский язык, Буль иногда называл ее “и” а ино- гда— “или” Такие действия могут показаться странными современным математи- кам, но только до тех пор, пока мы не поймем, что это фактически обычная прак- тика английского языка; мы говорим, например, что “boys and girls аге children” (“мальчики и девочки являются детьми”), но “children are boys or girls” (“дети — это мальчики или девочки”). Позже булево исчисление было расширено включением У. Стенли Джевонсом (W. Stanley Jevons) необычного правила х + х = х [Pure Logic (London: Edward Stanford, 1864), §69], который указал, что при использовании его новой операции + выражение (х + у) z оказывается равным xz + yz. Но Джевонс не знал другой дистрибутивный закон ху + z = (х + z)(y + z). Похоже, он пропустил его из- за использовавшихся им обозначений, поскольку второй дистрибутивный закон не имеет знакомого двойника в арифметике; более симметричные обозначения х А у, хУув табл. 1 упрощают нам запоминание обоих законов дистрибутивности (a;V!/)Az = (х A z) V (у A z); (1) (zAj/)Vz = (х V z) А (у V z). (2) Перевод Н. М. Демуровой.
7.1.1 ОСНОВЫ БУЛЕВОЙ АЛГЕБРЫ 73 Таблица 1 Шестнадцать логических операций с двумя переменными Таблица истинности Новое и старое С: имвол затора Название О обозначения one] 0000 0 ± Противоречие; ложное заключение; константа 0 0001 ху, х Л у, хку л Конъюнкция; и 0010 х Г\у, х^у, [я: > у], х — у D Отрицание импликации; разность; но не ООП X L Левая проекция; первый диктатор 0100 хЛу, х<£у, [а?<з/], у — х С Обратное отрицание импликации; не... но 0101 У R Правая проекция; второй диктатор оно хфу, х£у, х'у ® Разделительная дизъюнкция; неэквива- лентность; исключающее или (“хог”) 0111 хУу, X I у V (Неразделительная) дизъюнкция; или; и/или 1000 х Л у, хУ у, хУ у, х±у V Отрицание дизъюнкции; конъюнкция отрицаний; ни... ни 1001 х = у, х++у, х-Оу = Эквивалентность; тогда и только тогда, когда 1010 У, ~‘У, '-У, ~У R Правое дополнение 1011 хУ у, хСу, х •«= у, [я: > j/], xv С Обратная импликация; если 1100 X. “ijC, !х, ^х L Левое дополнение 1101 хУ у, х2>у, х=>у, [я: < у], ух D Импликация; только если; если... то 1110 хУ у, X f\y, X /\у, X | у А Отрицание конъюнкции; не и... и 1111 1 Т Утверждение; достоверность; тавтология; константа 1 Второй закон (2) был введен Ч. С. Пирсом (С. S. Peirce), который независимо открыл способ расширения булева исчисления [Proc. Amer. Acad. Arts and Sciences 7 (1867), 250-261]. Кстати, когда Пирс обсуждал эти ранние разработки несколькими годами позже [Amer. J. Math. 3 (1880), 32], он упомянул “булеву (Boolian) алгебру с дополнениями Джевонса”; его (ныне незнакомое) произношение слова “Boolean” использовалось много лет, появившись даже в полном словаре Фанка (Funk) и Ваг- наллса (Wagnails) в 1963 году. Понятие комбинации истинных значений на самом деле гораздо старше булевой алгебры. В действительности логика высказываний была разработана греческими философами еще в IV веке до н. э. В те времена велись значительные споры о том, как присвоить правильное значение “истина” или “ложь” суждению “если х, то у", когда хиу являются суждениями; Филон из Мегары (Philo of Megara) около 300 года до н. э. определил его с помощью таблицы истинности, приведенной в табл. 1, где, в частности, указано, что импликация истинна, если и х, и у ложны. Многие из этих ранних работ были потеряны, но в работах Галена (Galen) (II век н. э.) имеются отрывки, которые указывают на неразделительную и разделительную дизъюнкции суждений. [См. I. М. Bochenski, Formale Logik (1956), перевод на английский Айво Томаса (Ivo Thomas) (1961), где приведен превосходный обзор развития логики от древних времен до XX века.]
74 КОМБИНАТОРНЫЙ ПОИСК 7.1.1 Функция от двух переменных часто записывается как х о у вместо f(x, у) с при- менением подходящего символа оператора о. В табл. 1 показаны шестнадцать сим- волов операторов, которые мы примем для булевых функций от двух переменных; например, ± символизирует функцию, таблицей истинности которой является 0000, Л — символ для таблицы истинности 0001, D—для 0010 и т. д. Мы имеем ж±у = 0, х /Ху = ху, х^>у = х — у, х\_у = х, ..., х Л у = х V у, ягТ у = 1. Конечно, не все операции в табл. 1 имеют одинаковую важность. Например, первый и последний случаи тривиальны, поскольку имеют константное значение, не зависящее от х и у. Четыре функции являются функциями только от х или только от у. Мы записываем х для 1 — х, дополнения х. Четыре операции, таблица истинности которых содержит только одну единицу, легко выражаются через оператор И (Л), а именно х/\у,хЛу,х/\у,х/\у. Функции с тремя единицами в таблице истинности выражаются через оператор ИЛИ (V), а именно х V у, хХ/ у, хХ/ у, хХ/ у. Базовые функции х Л у и х V у оказались более полезными на практике, чем их дополняющие или полудополняющие двойники, хотя операции HE-ИЛИ и НЕ-И хХ/у = х/Ху и х/\у = хХ/у также представляют интерес, поскольку легко реализуются транзисторными схемами. В 1913 году Г. М. Шеффер (Н. М. Sheffer) показал, что все 16 функций могут быть выражены через одну, начиная с операций V либо Л в качестве заданной (см. упр. 4). На самом деле Ч. С. Пирс (С. S. Peirce) сделал то же самое открытие около 1880 года, но его работа на эту тему осталась неопубликованной при его жизни [Collected Papers of Charles Sanders Peirce 4 (1933), §§12-20, 264]. В табл. 1 показано, что НЕ-И и HE-ИЛИ иногда записываются как х | у и х | у; иногда их называют чертой Шеффера и стрелкой Пирса. В настоящее время лучше не использовать черту Шеффера в качестве оператора НЕ-И, поскольку х | у обозначает побитовую операцию х V у в языках программирования наподобие С. К этому моменту мы рассмотрели все функции табл. 1, кроме двух. Последними двумя функциями являются х=у и х®у, “эквивалентность” и “исключающее ИЛИ” связанные тождествами х = у = х®у = х®у = 1®х®у, (3) х®у = х = у = х = у = 0 = х = у. (4) Обе операции ассоциативны (см. упр. 6). В логике высказываний понятие эквива- лентности более важно, чем понятие “исключающего или” означающего неэквива- лентность; но при рассмотрении побитовых операций над полными компьютерными словами мы увидим в разделе 7.1.3, что ситуация обратна: в типичных программах “исключающее или” оказывается более полезным, чем экивалентность. Главной причиной важности применения х ф у, даже в однобитовом случае, является тот факт, что х ф у = (х + у) mod 2. (5) Следовательно, х ф у и х /X у обозначают сложение и вычитание в поле из двух элементов (см. раздел 4.6), а а;фу естественным образом наследует многие “чистые” математические свойства. Основные тождества. Давайте теперь обратимся к взаимодействию между фун- даментальными операторами A, V, ф и “, поскольку прочие операции легко вы-
7.1.1 ОСНОВЫ БУЛЕВОЙ АЛГЕБРЫ 75 ражаются через указанные четыре. Каждая из операций A, V, ф ассоциативна и коммутативна. Кроме законов дистрибутивности (1) и (2), мы имеем (я;фу) Az = (a; A z) ф (у A z), (6) а также законы поглощения (xky)Vx = (хУу)кх = х. (7) Одним из простейших, но наиболее полезных тождеств является х ф х = 0, (8) поскольку из него, кроме всего прочего, вытекает, что (х ф у) ф х = у, (х ф у) ф у = х, (9) если воспользоваться тем очевидным фактом, что ягфО = х. Другими словами, если дано х ф у и либо х, либо у, то легко определить другое, неизвестное значение. Нельзя пропустить и простой закон дополнения х = х ф 1. (10) Другая важная пара тождеств известна как законы де Моргана, названные так в честь Огастеса де Моргана (Augustus De Morgan), который дословно писал “The contrary of an aggregate is the compound of the contraries of the aggregants; the contrary of a compound is the aggregate of the contraries of the components. Thus (A, B) and AB have ab and (a, fe) for contraries.” [Trans. Cambridge Philos. Soc. 10 (1858), 208.] Если воспользоваться современными обозначениями, то это не что иное, как правила, которые мы неявно вывели из таблиц истинности в табл. 1 в связи с операциями НЕ-И и HE-ИЛИ, а именно хЛу = XV у; (11) xV у = х/\у. (12) Кстати, У. С. Джевонс (W. S. Jevons) знал (12), но не (11); он последовательно писал АВ + В А + АВ вместо А + В для дополнения АВ. Сам де Морган не был первым англичанином, сформулировавшим приведенные законы. И (11), и (12) можно найти в работах начала XIV века двух схоластических философов—Уильяма Оккама (William of Ockham) [Summa Logicae 2 (1323)] и Вальтера Бурлея (Walter Burley) [De Puritate Artis Logicae (c. 1330)]. Законы де Моргана и несколько других тождеств можно использовать для вы- ражения операторов A, V и ф один через другой: а; А у = xVy = ягфуф(агУу); (13) xVy = хАу = ягфуф(агАу); (14) я: фу = (а; V у) Л я; Л у = (х Л у) V (х Л у). (15) Согласно упр. 7.1.2-77 все вычисления я?1 ф х? ф • • • ф хп, использующие только операции Л, V и должны состоять как минимум из 4(n — 1) шагов; таким образом, другие три операции являются не слишком хорошей заменой ф.
76 КОМБИНАТОРНЫЙ ПОИСК 7.1.1 Функции от п переменных. Булева функция f(x, у, z) от трех переменных х, у, z может быть определена своей 8-битовой таблицей истинности /(О,0,0)/(0,0,1)... /(1,1,1); и в общем случае каждая n-арная булева функция /(xi,... ,хп) соот- ветствует 2"-битовой таблице истинности, которая перечисляет последовательные значения /(0,..., 0,0), /(0,..., 0,1), /(0,..., 1,0), ..., /(1,..., 1,1). Для всех этих функций не требуются специальные имена и обозначения, по- скольку все они могут быть выражены через бинарные функции, уже изученные нами. Например, как заметил И. И. Жегалкин [Математический сборник 35 (1928), 311-369], мы всегда можем записать f(xi,...,xn) = g(xi,...,xn^i) ф h(xi,...,xn-i)hxn (16) при п > 0 для соответствующих функций д и h, полагая р(*^1 J • • • » ^П— 1) / (*£1 ) • • • 5 ^П—1,0), (17) h(xi,...,xn_i) = /(xi,...,xn_i,0) ф /(xi,...,x„_i,l). (Операция А традиционно имеет более высокий приоритет, чем ф, так что нам не требуется заключать в скобки подформулу ‘h(xi,... ,xn-i)Axn’ в правой части (16).) Рекурсивно повторяя этот процесс для д и h, пока не достигнем 0-арных функций, мы достигнем выражения, которое включает только операторы ф и А, и последо- вательность из 2П констант вместе с переменными {xi,... ,хп}. Кроме того, эти константы обычно можно использовать упрощенным способом, поскольку хА0 = 0 и а;Л1=1ф0 = а;. (18) После применения законов ассоциативности и дистрибутивности мы прийдем к необ- ходимости константы 0 только в случае, когда f(xi,..., хп) тождественно равна нулю, и константы 1, только когда /(0,..., 0) = 1. Мы можем получить, например, f(x,y,z) = ((1 фОЛх) ф (0® 1Лх)Лу) ф ((0® 1Лх) ф (1 ф l/\x)/\y)/\z = (1фхЛу) ф (х ф у ф хЛу)/\г — 1 ф хЛу ф x!\z ф y/\z ф x/\y/\z. А согласно правилу (5) мы видим, что оказываемся просто с полиномом f(x, у, z) — (1 + ху + xz + yz + xyz) mod 2, (19) поскольку х Л у = ху. Обратите внимание, что этот полином линейный (степени < 1) по каждой из своих переменных. В общем случае аналогичные вычисле- ния показывают, что любая булева функция f(x\,..., хп) имеет единственное такое представление, именуемое мультилинейным представлением, или исключающей нормальной формой (exclusive normal form), которая представляет собой сумму по модулю 2 нуля или большего количества из 2п возможных членов 1, xi, х^, х\Х2, Хз, Х1Х3, Х2Х3, Х1Х2Х3, . . . , 371X2 .. . Хп. Джордж Буль (George Boole) разлагал булевы функции иным способом, кото- рый зачастую оказывался проще для тех функций, которые встречаются на прак- тике. Вместо (16) он, по сути, записывал f(xi,...,xn) = (g(xi,...,xn-i) /\хп) V (/z(xi,...,xn-i) Лхп) (20)
7.1.1 ОСНОВЫ БУЛЕВОЙ АЛГЕБРЫ 77 и называл это законом разработки (law of development), где вместо (17) мы имеем просто = /(xi,...,a;n_i,0), h(xi,..., Хц— i) f (з?1,..., хп—i,l). Многократно итерируя процедуру Буля, используя закон дистрибутивности (1) и убирая константы, мы остаемся с формулой, являющейся дизъюнкцией нуля или большего количества минитермов, где каждый минитерм представляет собой конъ- юнкцию, такую как xi A х? А хз А Х4 А х$, в которой присутствуют все переменные или их дополнения. Обратите внимание, что минитерм представляет собой булеву функцию, которая истинна ровно в одной точке. Например, рассмотрим более или менее случайную функцию f(w, х, у, z) с таб- лицей истинности 1100100100001111. (22) Разлагая эту функцию способом Буля (20), мы получим дизъюнкцию восьми мини- термов, по одному для каждой единицы в таблице истинности: f(w, х, у, z) — (w Ах Ay Az) \J (w Ах Ay Az) V (wAarAj/Az) V (wArrAyAz) V (loAxAyAz) V (w Ax Ay Az) V {w Ax Ay Az) V (wAxAyAz). (23) В общем случае дизъюнкция минитермов называется полной дизъюнктивной нормальной формой. Каждая булева функция может быть выражена таким спосо- бом, и результат является единственным—за исключением, конечно, порядка мини- термов. Придирка-, частный случай, возникающий, когда f(x\,...,хп) тождествен- но равна нулю. Мы рассматриваем ‘0’ как пустую дизъюнкцию, без членов, а также рассматриваем ‘1’ как пустую конъюнкцию по той же причине, что и определяли Efc=1 ak - ° и П”=1 а* = 1 в разделе 1.2.3. Ч. С. Пирс (С. S. Peirce) заметил в Amer. J. Math. 3 (1880), 37-39, что каждая булева функция имеет также полную конъюнктивную нормальную форму, которая представляет собой конъюнкцию “минидизъюнктов” наподобие Xi Х/ггг Vis Х/яЦ Vxg. Такой минидизъюнкт равен 0 только в одной точке; так что каждый дизъюнкт в такой конъюнкции учитывается только там, где таблица истинности имеет 0. Например, полная конъюнктивная нормальная форма нашей функции в (22) и (23) имеет вид f(w,x,y,z) — (w\/x\/y\/z) A (wVxVyVz) A (wVxVyVz) A(wVxVy\/z) A (wVxVyVz) A (wVxVyVz) A (wVxVyVz) A (wVzVyVz). (24) Нет, однако, ничего удивительного в том, что мы часто хотим работать с дизъ- юнкциями и конъюнкциями, которые не обязательно включают все минитермы или минидизъюнкты. Поэтому, следуя терминологии Пауля Бернайса (Paul Bemays) из его Habilitationsschrift (1918), мы говорим в общем случае о дизъюнктивной нормальной форме, или “DNF” как любой дизъюнкции конъюнкций m sj ^jk — (W11 A • • • А Щ.81) V • • • V (umi A • • • A (25) j=i k=l
78 КОМБИНАТОРНЫЙ ПОИСК 7.1.1 где каждое Ujk является литералом, а именно переменной Xi или ее дополнением. Аналогично любая конъюнкция дизъюнкций литералов m Зэ fa \/ изк = («п V • • • V U1S1) Л • • Л (umi V • V umSm) (26) j=i k=i называется конъюнктивной нормальной формой, или, для краткости, “CNF” Очень много электрических схем в современных компьютерных микросхемах составлены из “программируемых логических матриц” (programmable logic arrays, PLA), которые представляют собой ИЛИ, примененные к наборам И (возможно, дополненных) входных сигналов. Другими словами, программируемая логическая матрица в основном вычисляет одну или несколько дизъюнктивных нормальных форм. Такие строительные блоки быстры, универсальны и относительно недороги; в самом деле, DNF играет заметную роль в электронике еще с 1950-х годов, ко- гда коммутируемые схемы реализовывались с помощью сравнительно устаревших устройств наподобие реле или электронных ламп. Поэтому инженеров издавна интересовала задача поиска простейших DNF для классов булевых функций, и мож- но ожидать, что важность изучения дизъюнктивных нормальных форм не будет снижаться с развитием электронных технологий. Члены DNF часто называются импликантами (implicants), поскольку истин- ность любого члена в дизъюнкции влечет за собой истинность всей формулы. В фор- муле наподобие f(x,y,z) = (х /\у f\z) V {у hz) V (х /\у Az), например, мы знаем, что f истинно, когда истинно x/\y/\z, а именно когда (х, у, z) — (1,0,1). Но заметьте, что в этом примере импликантой f является и более короткий (хотя явно и не записанный) член х A z, поскольку дополнительный член у A z делает функцию истинной при х = z = 1 независимо от значения у. Аналогично импликантой данной конкретной функции является и х А у. Так что мы можем работать и с более простой формулой f(x, у, z) — {х /\z)\J (у А г) V (ж А у). (27) Дальнейшие удаления из импликант невозможны, поскольку ни х, ни у, ни z, ни х не являются строго достаточными условиями для истинности f. Импликанта, которая не может быть разложена путем удаления любого из ее литералов без чрезмерного ослабления импликанты, называется простой импликан- той, следуя терминологии У. В. Куайна (W. V. Quine) из АММ 59 (1952), 521-531. Эти базовые концепции, пожалуй, будут более понятны, если упростить обозна- чения и встать на более геометрическую точку зрения. Мы можем записать просто lf(xy вместо f(xi,..., хп) и рассматривать х как вектор или как бинарную строку Xi... хп длиной п. Например, строками wxyz, для которых функция (22) принимает истинное значение, являются {0000, 0001, 0100, 0111,1100,1101,1110,1111}, (28) и мы можем рассматривать их как восемь точек четырехмерного гиперкуба 2 х 2x2x2. Восемь точек в (28) соответствуют минитермам импликант, которые явно присутствуют в полной дизъюнктивной нормальной форме (23); но никакие
7.1.1 ОСНОВЫ БУЛЕВОЙ АЛГЕБРЫ 79 из этих импликант в действительности простыми не являются. Например, первые две точки (28) образуют подкуб ООО*, а последние четыре точки составляют подкуб 11**, если мы используем звездочку для обозначения “групповых символов” как мы делали это при рассмотрении запросов к базам данных в разделе 6.5; следо- вательно, w Лх А у является импликантой /, и то же самое относится и к w А х. Аналогично можно увидеть, что подкуб 0*00 объединяет две из восьми точек (28), делая импликантой w А у A z. В общем случае каждая простая импликанта соответствует таким способом максимальному подкубу в пределах множества точек, делающих значение f ис- тинным. (Подкуб максимален в том смысле, что он не содержится в некотором подкубе большего размера с тем же свойством; мы не можем заменить ни один из его явно указанных битов звездочкой. Максимальный подкуб имеет максимальное количество звездочек, следовательно, минимальное количество ограниченных ко- ординат, следовательно, минимальное количество переменных в соответствующей импликанте.) Максимальными подкубами восьми точек в (28) являются ООО*, 0*00, *100, *111,11**; (29) так что простыми импликантами функции f(w, х, у, z) из (23) являются (w А х А у) V (ги А у A z) V (х А у A z) V (а; А у А г) V (гс А х). (30) Дизъюнктивной простой формой булевой функции является дизъюнкция всех ее простых импликант. В упр. 30 приведен алгоритм для поиска всех простых им- пликант заданной функции на основе списка точек, в которых значения данной функции истинны. Мы можем определить простой дизъюнкт в точности таким же способом, как дизъюнктивное выражение, следующее из /, которое не имеет подвыражений с тем же свойством. А конъюнктивная простая форма f представляет собой конъюнкцию всех ее простых дизъюнктов. (Соответствующий пример можно найти в упр. 19.) Во многих простых случаях дизъюнктивная простая форма представляет собой кратчайшую возможную дизъюнктивную нормальную форму, которую может иметь функция. Но часто можно добиться лучшего результата, поскольку можно оказать- ся возможным охватить все необходимые точки только несколькими из максималь- ных подкубов. Например, простая импликанта (у A z) не является необходимой в (27). В выражении (30) нам не требуются одновременно (го А у A z) и (х А у А z); при наличии остальных членов достаточно только одного члена этой пары. К сожалению, из раздела 7.9 вы узнаете, что задача поиска кратчайшей дизъ- юнктивной нормальной формы NP-сложная, таким образом, очень трудно решаемая в общем случае. Но для достаточно малых задач разработано много полезных упрощений, неплохо поясненных в книге Introduction to the Theory of Switching Circuits Э. Д. Мак-Класки (E. J. McCluskey) (New York: McGraw-Hill, 1965). Более новые разработки можно найти в книге Petr Fiser and Jan Hlavicka, Computing and Informatics 22 (2003), 19-51. Однако имеется важный частный случай, для которого кратчайшую DNF легко описать. Булева функция называется монотонной, или положительной, если ее значение не изменяется с 1 на 0, когда любая из ее переменных изменяется от 0 до 1. Другими словами, функция f монотонна тогда и только тогда, когда f(x) < f(y)
80 КОМБИНАТОРНЫЙ ПОИСК 7.1.1 при х С у, где битовая строка х = х\... хп рассматривается как содержащаяся в битовой строке у = yi ..уп или равная ей тогда и только тогда, когда Xj < yj для всех j. Эквивалентное условие (см. упр. 21) состоит в том, что функция f либо является константой, либо может быть выражена полностью через Л и V, не используя дополнений. Теорема Q. Кратчайшей дизъюнктивной нормальной формой монотонной булевой функции является ее дизъюнктивная простая форма. Доказательство. [У. В. Куайн (W. V. Quine), Boletin de la Sociedad Matematica Mex- icana 10 (1953), 64-70.] Пусть функция f(xi,... ,xn) монотонна и пусть ui A- - 7\us — одна из ее простых импликант. Мы не можем иметь, скажем, = xt, поскольку в таком случае более краткий член иг Л • Л us также был бы импликантой из- за монотонности функции. Следовательно, никакая простая импликанта не может иметь дополненный литерал. Теперь, если мы установим гц <— «— us <— 1, а все прочие переменные — равными 0, то значение f будет равно 1, но все другие простые импликанты f примут нулевое значение. Таким образом, член их А - • Aus должен присутствовать в каждой кратчайшей DNF, поскольку очевидно, что каждая импликанта кратчайшей DNF проста. | Следствие Q. Дизъюнктивная нормальная форма является дизъюнктивной про- стой формой монотонной булевой функции тогда и только тогда, когда в ней нет дополнений и ни одна из ее импликант не содержится в другой. | Выполнимость. Булева функция называется выполнимой, если она не являет- ся тождественно равной нулю, т. е. если она имеет как минимум одну импликан- ту. Наиболее знаменитой нерешенной задачей всей информатики является поиск эффективного способа решить, является ли данная булева функция выполнимой. Точнее говоря, вопрос заключается в следующем: существует ли алгоритм, который получает булеву формулу длиной N и проверяет ее выполнимость, всегда давая корректный ответ не более чем за шагов? Если вы впервые услышали об этой задаче, у вас может возникнуть соблазн задать встречный вопрос: “Как? Вы всерьез утверждаете, что ученые до сих пор не знают, как сделать такую простую вещь?” Отлично, если вы считаете проверку выполнимости тривиальной, поделитесь с нами своим методом. Да, задача не всегда трудна; если, например, заданная формула включает всего 30 булевых переменных, простой перебор всех 230 слу- чаев— около миллиарда—действительно решит данную задачу. Но чудовищное количество практических задач, все еще ожидающих своего решения, может быть сформулировано как булевы функции со, скажем, 100 переменными, поскольку математическая логика—очень мощный способ выражения понятий. А решение этих задач соответствует векторам х = хг... т100, для которых f(x) = 1. Так что действительно эффективное решение задачи выполнимости было бы чудесным достижением. Имеется как минимум один смысл, в котором проверка выполнимости — плевое дело: если функция f(xi,... ,хп) выбрана случайным образом, так что все 2"- битовые таблицы истинности равновероятны, то f практически гарантированно
7.1.1 ОСНОВЫ БУЛЕВОЙ АЛГЕБРЫ 81 выполнима, и мы можем найти значение х, для которого f(x) — 1, после выполнения менее 2 попыток (в среднем). Это похоже на подбрасывание монетки, пока не выпадет орел; обычно этого не приходится долго ждать. Но, конечно, практические задачи не имеют случайных таблиц истинности. Хорошо, согласимся, что проверка выполнимости кажется очень сложной в об- щем случае. Фактически выполнимость оказывается сложной, даже если мы пыта- емся упростить ее путем требования, чтобы булева функция была представлена как “ЗСМЕ-формула” т. е. как конъюнктивная нормальная форма, в каждом дизъюнкте которой имеется только три литерала: /(а?!,..., хп) = (tx V V171) Л (t2 V w2 V v2) Л • A (tm V ит V vm). (31) Здесь каждое tj, Uj и Vj представляет собой х^ или х^ для некоторого к. Задача выяснения выполнимости для SCNF-формул называется “3SAT” и в упр. 39 поясня- ется, почему в действительности она не проще, чем задача выполнимости в общем случае. Мы увидим множество примеров трудных для решения задач 3SAT, например, в разделе 7.2.2.2, где задача выполнимости рассматривается очень подробно. Си- туация, однако, несколько необычна, поскольку формула должна быть достаточно длинной, чтобы нам надо было задумываться над ее выполнимостью. Например, простейшая невыполнимая формула в SCNF-виде— (tVtVt)A(t VtVt); но очевидно, что здесь не над чем задумываться. Никаких особых трудностей не предвидится, пока три литерала tj, uj, Vj дизъюнкта не станут соответствовать трем различным переменным. А в этом случае каждый дизъюнкт исключает 1/8 возможностей, по- скольку семь различных установок (tj,Uj,Vj) делают его истинным. Следовательно, каждая такая SCNF-формула с не более чем семью дизъюнктами автоматически выполнима, и случайная установка ее переменных будет успешной с вероятностью > 1-7/8 = 1/8. Таким образом, кратчайшая интересная формула в SCNF-формате имеет как минимум восемь дизъюнктов. Действительно, имеется такая восьмидизъюнктная формула, основанная на конструкции ассоциативного блока Р. Л. Ривеста (R. L. Ri- vest), рассматривавшегося в 6.5-(13): (ar2Var3VT4) Л (тгVrr3VT4) Л (txVt2VT4) Л (txVt2Vt3) Л (t2Vt3VT4) Л (txVt3Vt4) A (ti Vt2VT4) А (тхVt2Vt3). (32) Любые семь из этих восьми дизъюнктов выполнимы ровно двумя способами и опре- деляют значения трех переменных; например, из первых семи дизъюнктов вытекает, что тхт2т3 = 001. Но все восемь дизъюнктов одновременно выполнимыми быть не могут. Простые частные случаи. Можно указать два важных класса булевых формул, для которых задача выполнимости оказывается достаточно простой. Эти частные случаи осуществляются, когда проверяемая конъюнктивная нормальная форма со- стоит только из “дизъюнктов Хорна” или только из “дизъюнктов Крома’.’ Дизъ- юнкт Хорна представляет собой ИЛИ литералов, среди которых все или почти все литералы являются дополнениями — не более чем один из литералов дизъюнкта яв- ляется “чистой” недополненной переменной. Дизъюнкт Крома представляет собой
82 КОМБИНАТОРНЫЙ ПОИСК 7.1.1 ИЛИ ровно двух литералов. Таким образом, например, хУ у, w V у У z, йУ v У w\/ хУ у У z и х являются примерами дизъюнктов Хорна; а хУ х, хУ х, хУ у, хУ у, хУ у и т V у представляют собой примеры дизъюнктов Крома, причем только последний из них не является одновременно дизъюнктом Хорна. (Первый пример является дизъ- юнктом Хорна, поскольку х V х = х.) Обратите внимание, что дизъюнкт Хорна может содержать сколько угодно литералов, но если мы ограничиваемся дизъюнк- тами Крома, то, по сути, рассматриваем 28АТ-задачу. В обоих случаях, как мы увидим, вопрос о выполнимости может быть решен за линейное время, т. е. путем выполнения только O(N) простых шагов, если задана формула длиной N. Начнем с рассмотрения дизъюнктов Хорна. Почему с ними так легко работать? Основная причина этого в том, что дизъюнкт наподобие SVi'VwV5Vt/Vz может быть переписан в виде -<(и f\v f\w f\x f\y)\! z, что то же самое, что и U /XV f\W f\X /\у => Z. Другими словами, если все переменные и, V, ш, х и у истинны, то и переменная z также должна быть истинна. По этой причине параметризированные дизъюнк- ты Хорна были выбраны в качестве базового механизма языка программирования Prolog. Кроме того, имеется простой способ точно указать, какие булевы функции могут быть представлены с помощью одних дизъюнктов Хорна. Теорема Н. Булева функция f(xi,..., хп) выражается в виде конъюнкции дизъ- юнктов Хорна тогда и только тогда, когда ИЗ f(x!,...,xn) = f(yi,...,yn) = 1 вытекает f(x! Л yi,... ,хп Л уп) = 1 (33) для всех булевых значений Xj и yj. Доказательство. [Альфред Хорн (Alfred Horn), J. Symbolic Logic 16 (1951), 14-21, лемма 7.] Если мы имеем Xq V Xi V • V Xk = 1 и yo V ух V • • • V уь = 1, то (аг0 Л у0) V ХгЛуг V • V xk Л ук = (x0V XrV faV • V xkV уь) Л (у0У ХгУ fay V xkV Ук) > (х0 V X! V • • V хк) Л (уо V yi V • • • V ук) = 1; и аналогичное (но более простое) вычисление применимо, когда отсутствуют по- ложительные (без черты) литералы То и уо- Следовательно, каждая конъюнкция дизъюнктов Хорна удовлетворяет (33). И обратно, из условия (33) вытекает, что каждый простой дизъюнкт f пред- ставляет собой дизъюнкт Хорна (см. упр. 44). | Назовем функцией Хорна булеву функцию, которая удовлетворяет условию (33), и будем также называть ее определенной (definite), если она удовлетворяет допол- нительному условию /(1,..., 1) = 1. Легко видеть, что конъюнкция дизъюнктов Хорна является определенной тогда и только тогда, когда каждый дизъюнкт имеет ровно один положительный литерал, поскольку только полностью отрицательный
7.1.1 ОСНОВЫ БУЛЕВОЙ АЛГЕБРЫ 83 дизъюнкт наподобие х V у будет ложным, когда все переменные истинны. С опре- деленными функциями Хорна немного проще работать, чем с функциями Хорна в общем случае, поскольку очевидно, что они всегда выполнимы. Таким обра- зом, согласно теореме Н они имеют единственный наименьший вектор х, такой, что f(x) = 1, а именно побитовое И всех векторов, которые удовлетворяют всем дизъюнктам. Ядром определенной функции Хорна является множество всех пере- менных Xj, являющихся истинными в этом минимальном векторе х. Заметим, что переменные в ядре должны быть истинными, когда истинна f, так что мы, по сути, можем вынести их за скобки. Определенные функции Хорна возникают в разных ситуациях, например, в ана- лизе игр (см. упр. 51 и 52). Еще один красивый пример — из области компиляторов. Рассмотрим следующую типичную (хотя и упрощенную) грамматику для алгебра- ических выражений в языке программирования: (expression) —> (term) | (expression) + (term) | (expression) - (term) (term) —> (factor) | - (factor) | (term) * (factor) | (term) / (factor) (factor) —> (variable) | (constant) | ((expression)) (variable) —> (letter) | (variable)(letter) | (variable)(digit) (34) (letter) —» a | b | c (constant) —>(digit) | (constant) (digit) (digit) ->0 | 1 Например, строкаа/(-Ь0-10)+сс*ссотвечает синтаксису для (expression) иисполь- зует каждое из правил грамматики как минимум по одному разу. Предположим, что мы хотим знать, какие пары символов могут появляться в таких выражениях одна за другой. Определенные дизъюнкты Хорна предостав- ляют ответ на поставленный вопрос, поскольку мы можем сформулировать задачу следующим образом: пусть величины Хх, хХ и ху обозначают булевы “суждения” где X — один из символов {E,T,F,V,L,C,D}, обозначающих соответственно (expression), (term), ..., (digit), и где х и у — символы из множества {+, -, *, /, (,), а,Ь, с, 0,1}. Суждение Хх означает “X может заканчиваться на х”; аналогично хХ означает “X мо- жет начинаться с х”; а ху означает “в выражении непосредственно за символом х может следовать символ у” (Всего имеется 7x114-11x7+11x11 = 275 суждений.) Тогда можно записать хТ => хЕ => -Т xC => xF Vx A yL => xy => Lc Тх = > Ех xF => -х Cx => Fx Vx A yD => xy xD => xC Ех = > х+ Тх => х* => (F Dx => Vx Dx -> Cx хТ = > +х xF => *х xE => (x => aL Cx A yD => xy (35) Ех => х- Тх => х/ Ex => x) => La => OD хТ => -х xF => /х =>F) => bL => DO xF = >хТ xV => xF xL => xV => Lb => ID Fx => Тх Vx => Fx Lx => Vx => cL => DI где х и у пробегают одиннадцать терминальных символов {+,...,1}. Эта схема- тическая спецификация дает нам определенные дизъюнкты Хорна общим числом 24 х 11+Зх 11 х 11 + 13х 1 = 640, которые мы можем формально записать как (+TV+E) Л (^TV-E) Л Л (v+ V0LV+0) Л Л (D1)
84 КОМБИНАТОРНЫЙ ПОИСК 7.1.1 если предпочитаем загадочное обозначение булевой алгебры для условного обозна- чения => из (35). Почему мы это делаем? Потому что ядро всех этих дизъюнктов представля- ет собой множество всех суждений, истинных в данной конкретной грамматике. Например, можно убедиться, что -Е истинно, значит, символы (- могут следовать в выражении один за другим, а пары символов ++ и *- в выражении присутствовать не могут (см. упр. 46). Кроме того, мы можем без особых сложностей найти ядро любого данного множества определенных дизъюнктов Хорна. Мы просто начинаем с суждений, появляющихся справа от =>, для которых левая часть пуста; в (35) имеется трина- дцать дизъюнктов такого рода. После утверждения об истинности этих суждений мы можем найти один или несколько дизъюнктов, истинность левых частей которых нам известна. Следовательно, их правые части также принадлежат ядру, и мы можем продолжить нашу работу тем же способом. Вся процедура напоминает течение воды вниз, пока она не найдет свое место. На практике при выборе под- ходящих структур данных этот процесс спуска оказывается достаточно быстрым, требующим только O(N + п) шагов, где N означает общую длину дизъюнктов, а п — количество переменных в суждениях. (Здесь мы считаем, что все дизъюнкты развернуты и не используют сокращенной записи членов с параметрами наподобие х и у, как показано выше. Более интеллектуальные методы доказательства теорем могут работать с параметризованными дизъюнктами, но они выходят за рамки нашего рассмотрения.) Алгоритм С (Вычисление ядра определенных дизъюнктов Хорна). Для данного множества Р переменных суждений и множества дизъюнктов С, каждый из кото- рых имеет вид wiA---Awfc => и, где А: > 0 и {ui,...,Wfc,v} С Р, (36) данный алгоритм находит множество Q С Р всех переменных, которые обязаны быть истинными, чтобы истинными были все дизъюнкты. Мы используем для дизъюнктов с, суждений р и гипотез h следующие струк- туры данных (здесь “гипотеза” представляет собой суждение в левой части дизъ- юнкта): CONCLUSION (с) является суждением в правой части дизъюнкта с; COUNT (с) является количеством еще не утвержденных гипотез с; TRUTH(р) равно 1, если известно, что р истинно, в противном случае 0; LAST(p) является последней гипотезой, в которой появляется р; CLAUSE (Л.) является дизъюнктом, в котором h появляется в его левой части; PREV(/i) является предыдущей гипотезой, содержащей суждение h. Мы также поддерживаем стек So, Si, ..., Sa-i всех суждений, о которых известно, что они истинны, но которые пока не утверждены. С1. [Инициализация.] Установить LAST(p) <— Л и TRUTH(p) «— 0 для каждого суж- дения р. Также установить s <— 0, так что стек пуст. Затем для каждого дизъ- юнкта с, имеющего вид (36), установить CONCLUSION (с) «— v и COUNT(c) <— к.
7.1.1 ОСНОВЫ БУЛЕВОЙ АЛГЕБРЫ 85 Если к = 0 и TRUTH (г>) = 0, установить TRUTH(г) <— 1, Sa <— v и s «— s + 1. В противном случае для 1 < j < к создать запись гипотезы h и установить CLAUSE(h) <- с, PREV(h) <- LAST(uj), LAST(wj) <- h. C2. [Подготовка к утверждению р.] Завершить работу алгоритма, если з = 0; искомое ядро сейчас состоит из всех суждений, поле TRUTH которых установлено равным 1. В противном случае установить s «— в — 1, р <— Sa и А <— LAST(p). СЗ. [Гипотеза обработана?] Если h = А, вернуться к шагу С2. С4. [Проверка А.] Установить с «— CLAUSE (А) и COUNT (с) <— COUNT (с) — 1. Если новое значение COUNT (с) все еще ненулевое, перейти к шагу С6. С5. [Вывод CONCLUSION (с).] Установить р <- CONCLUSION (с). Если TRUTH (р) = 0, установить TRUTH (р) <— 1, Sa *—р, s «— s + 1. С6. [Цикл по /г.] Установить h <— PREV(/i) и вернуться к шагу СЗ. | Обратите внимание, как согласованно работают структуры данных, позволяя из- бежать любой необходимости в поиске места, где следует выполнять очередные вычисления. Алгоритм С во многих отношениях подобен алгоритму 2.2.3Т (то- пологической сортировки), который был первым примером многосвязных структур данных, рассмотренным давным-давно, в главе 2; на самом деле алгоритм 2.2.3Т можно рассматривать как частный случай алгоритма С, в котором каждое суждение появляется в правой части ровно одного дизъюнкта (см. упр. 47.) В упр. 48 показано, что небольшая модификация алгоритма С решает задачу выполнимости для дизъюнктов Хорна в общем случае. Дополнительную информа- цию можно найти в статьях W. F. Dowling and J. Н. Gallier, J. Logic Programming 1 (1984), 267-284; M. G. Scutella, J. Logic Programming 8 (1990), 265-273. Теперь мы обратимся к функциям Крома и задаче 2SAT. И вновь для решения задачи имеется алгоритм с линейным временем работы; но, вероятно, будет лучше, если сначала мы рассмотрим упрощенное практическое приложение. Предположим, что семь комиков согласились во время трехдневного фестиваля дать концерты в двух из пяти отелей. При этом у каждого из них один из дней занят другой работой, поэтому вот как выглядят возможные варианты их выступлений в отелях Лас-Вегаса:* Tomlin может выступить в отелях Aladdin и Caesars в дни 1 и 2; Unwin может выступить в отелях Bellagio и Excalibur в дни 1 и 2; Vegas может выступить в отелях Desert и Excalibur в дни 2 и 3; Williams может выступить в отелях Aladdin и Desert в дни 1 и 3; (37) Xie может выступить в отелях Caesars и Excalibur в дни 1 и 3; Yankovic может выступить в отелях Bellagio и Desert в дни 2 и 3; Zany может выступить в отелях Bellagio и Caesars в дни 1 и 2. Можно ли составить расписание так, чтобы не возникало никаких конфликтов? Для решения этой задачи можно ввести семь булевых переменных {t,u,v,w, x,y,z}, где t, например, означает выступление Tomlin в Aladdin в первый день * Имена артистов и названия отелей оставлены в оригинальном написании, так как в даль- нейшем первые буквы имен артистов и названий отелей соответствуют вводимым переменным и названиям ограничений. — Примеч. пер.
86 КОМБИНАТОРНЫЙ ПОИСК 7.1.1 и в Caesars во второй, в то время как t означает, что дни соответствуют отелям в об- ратном порядке: выступление в Aladdin—во второй день, а в Caesars — в первый. Тогда мы можем записать ограничения, означающие, что никакие два комедианта не выступают в одном отеле в один и тот же день, следующим образом. ->(t Л го) [Al] “'(У Л z) [В2] ->(t Л z) [02] ->(ш Л у) [D3] ->(и Л z) [Bl] -i(t Л х) [01] ->(t! Л у) [D2] -<(й Л х) [Е1] ->(й Л у) [В2] -<(t Л z) [С1] -<(v Л w) [D3] ->(и Л v) [Е2] ->(й Л z) [В2] —<(х Л z) [С1] ->(v Л у) [D3] —i(y Л х) [ЕЗ] Каждое из этих ограничений, конечно же, представляет собой дизъюнкт Крома; мы должны выполнить (tVw) Л (uVz) Л (nVy) Л (mVz) Л (j/Vz) Л (tVi) Л (tVz) Л (tVz) Л (tVz) Л (vVy) Л (nVw) Л (t>Vy) Л (w\/y) Л (u\Jx) Л (йХ/п) Л (vVx). (39) Кроме того, дизъюнкты Крома (подобно дизъюнктам Хорна) могут быть записаны в виде импликаций: t=>w, ti=>z, й=>у, u=>z, y=>z, t=>x, t=>z, x=>z, t=>z, v=>y, v=>w, v=>y, w=>y, й=>х, u=>v, v=>x. (40) И каждая такая импликация может также быть представлена в альтернативном, “контрапозитивном” виде: w=>t, г=>й, у=>и, z=>u, z=>y, x=>t, z=>t, z=>x, z=>t, y=>v, w=>v, y=>v, y=>w, x=>u, x=>v. (41) Ho—увы и ax! — наблюдается порочный замкнутый круг, вернее, цикл u=>z=>y=>v=>ii=>z=>t=>x=> и. (42) [Bl] [В2] [D2] [Е2] [В2] [С2] [Cl] [Е1] Этот цикл говорит о том, что и и й должны иметь одно и то же значение; так что нет никакой возможности удовлетворить все условия (37). Если расписание должно быть составлено любой ценой, организаторам фестиваля придется провести перего- воры и пересмотреть соглашение по крайней мере с одним из шести комедиантов {t,u,v,x,y,z} (см. упр. 53). Qu)—I 4 @ : j .. Qj)4 ^^) Рис. 6. Ориентированный граф, соответ- ствующий всем импликациям (40) и (41), не включающим v или г). Присваивание подхо- дящих значений литералам в каждом силь- но связном компоненте решает бинарную задачу составления расписания, которая представляет собой экземпляр 2SAT.
7.1.1 ОСНОВЫ БУЛЕВОЙ АЛГЕБРЫ 87 Организаторы могут, например, попытаться временно вывести за рамки карти- ны v. Тогда пять из шестнадцати ограничений (38) исчезнут, и останутся только 22 из импликаций (40) и (41), так что получится ориентированный граф, показанный на рис. 6. Этот ориентированный граф содержит циклы наподобие z => й => х => z и t => z => t; но в нем нет циклов, которые содержат одновременно переменную и ее дополнение. Действительно, на рис. 6 можно увидеть, что значения tuwxyz = 110000 выполняют каждый дизъюнкт (39), не включающий ни и, ни и. Эти значения дают нам расписание, которое выполняет шесть из семи исходных условий (37), начи- ная с выступления (Tomlin, Unwin, Zany, Williams, Xie) в первый день в (Aladdin, Bellagio, Caesars, Desert, Excalibur). В общем случае для любой заданной 28АТ-задачи с т дизъюнктами Крома, включающими п булевых переменных, мы можем построить ориентированный граф описанным способом. Имеется 2п вершин {ггх,х^,... ,хп,хп}, по одной для каждого возможного литерала; кроме того, имеется 2m дуг вида й —> и и v —> и, по две для каждого дизъюнкта и V и. Два литерала и и и принадлежат одному и тому же сильно связному компоненту этого ориентированного графа тогда и только тогда, когда существуют ориентированные пути из и в и и из и в и. Например, шесть сильно связных компонентов ориентированного графа на рис. 6 указаны контурами из точек. Все литералы в сильно связном компоненте должны иметь одно и то же булево значение в любом решении соответствующей 28АТ-задачи. Теорема К. Конъюнктивная нормальная форма с двумя литералами на дизъюнкт выполнима тогда и только тогда, когда ни один сильно связный компонент соответ- ствующего ориентированного графа не содержит одновременно и переменную, и ее дополнение. Доказательство. [Melven Krom, Zeitschrift fur mathematische Logik und Grundlagen der Mathematik 13 (1967), 15-20, Corollary 2.2.] Если существуют пути от х до х и от х до х, формула, определенно, невыполнима. И обратно, предположим, что таких путей не существует. Любой ориентиро- ванный граф имеет как минимум один сильно связный компонент S, являющийся “источником” который не имеет входящих дуг из любого другого сильно связного компонента. Более того, наш ориентированный граф всегда имеет привлекательную антисимметрию, проиллюстрированную на рис. 6: мы имеем и —» и тогда и только тогда, когда и —» й. Следовательно, дополнения литералов в S образуют другой сильно связный компонент S S, который является “стоком” не имеющим ис- ходящих дуг к другим сильно связным компонентам. Следовательно, мы можем назначить значение 0 всем литералам в S и 1 всем литералам в S, затем удалить их из ориентированного графа и продолжать работать таким образом далее, пока все литералы не получат свои значения. Результирующие значения удовлетворя- ют неравенству и < и при и —> v в ориентированном графе; следовательно, они удовлетворяют й V и, если й V v представляет собой дизъюнкт в формуле. | Теорема К приводит непосредственно к эффективному решению 28АТ-задачи благодаря алгоритму Р. Э. Таржана (R. Е. Tarjan), который находит сильно связные компоненты за линейное время. [См. SICOMP 1 (1972), 146-160; D. Е. Knuth, The Stanford GraphBase (1994), 512-519.] Мы детально изучим алгоритм Таржана в разделе 7.4.1. В упр. 54 показано, что условие теоремы К легко проверяется, когда
88 КОМБИНАТОРНЫЙ ПОИСК 7.1.1 алгоритм обнаруживает новый сильно связный компонент. Кроме того, алгоритм первыми обнаруживает “стоки”; таким образом, как простой побочный продукт процедуры Таржана мы можем назначить значения, устанавливающие выполни- мость путем выбора значения 1 для каждого литерала в сильно связном компоненте, который встречается до его дополнения. Медианы. Мы сосредоточились на булевых бинарных операциях наподобие х V у или х ф у. Однако имеется еще и важная тернарная операция {xyz), именуемая медианой х, у и z: {xyz) = (тЛу) V (?/Az) V (arAz) = (a:V?/) Л (?/Vz) Л (arVz). (43) Фактически {xyz), пожалуй, — наиболее важная тернарная операция во всем мире, поскольку обладает удивительными свойствами, которые постоянно открываются и перестирываются. Во-первых, можно легко увидеть, что эта формула для {xyz) описывает ма- жоритарное значение любых трех булевых значений х, у и z: (ООО) = (001) = 0 и (Oil) = (111) = 1. Мы называем {xyz) медианой, а не мажоритарным значением, поскольку, если х, у и z — произвольные действительные числа, а операции Л и V в (43) означают min и max, то {xyz) = у, когда х < у < z. (44) Во-вторых, базовые бинарные операции Л и V представляют собой частные случаи медиан: х /\у = {хОу); х\/у = {xly). (45) Таким образом, любая монотонная булева функция может быть выражена только через тернарный оператор медианы и константы 0 и 1. Фактически, если бы мы жили в мире, где нет ничего, кроме медиан, мы могли бы обозначить через Л ложь, а V использовать для обозначения истины; тогда х/\у = {х/\у) их\/у = {хУу) были бы совершенно естественными выражениями и мы могли бы при желании даже использовать польскую запись наподобие {Лху) и {Уху)1 Такая же идея применима и к расширенным действительным числам при условии интерпретации Л и V как минимума и максимума, если брать медианы по отношению к константам Л = — оо и V = +оо. Булева функция f{xi, х2,..., хп) называется самодуальной, если она удовлетво- ряет условию f{xl,x2,...,xn) = f{xi,x2,...,xn). (46) Мы отмечали, что булева функция является монотонной тогда и только тогда, когда она может быть выражена через Л и V; в соответствии с законами де Моргана (11) и (12) монотонная формула самодуальна тогда и только тогда, когда символы Л и V могут быть взаимозаменены без изменения значения формулы. Таким образом, операция медианы, определенная в (43), является как монотонной, так и самодуаль- ной. Фактически это простейшая нетривиальная функция такого рода, поскольку ни одна из бинарных операций в табл. 1 не является монотонной и самодуальной, за исключением проекций L и R. Кроме того, любое выражение, которое образовано только с помощью операто- ра медианы, без применения констант, является и монотонным, и самодуальным.
7.1.1 ОСНОВЫ БУЛЕВОЙ АЛГЕБРЫ 89 Например, функция {w{xyz){w{uvw)x)) самодуальна, поскольку {w{xyz){w{uvw)x)) = {w {xyz) {w{uvw)x)) — {w{xyz){w{uvw)x)) = {w{xyz){w{uvw)x)). Эмиль Пост (Emil Post), работая над своей диссертацией (Columbia University, 1920), доказал, что верно и обратное утверждение. Теорема Р. Каждая монотонная самодуальная булева функция f{xi,..., хп) может быть выражена только через операцию медианы {xyz). Доказательство. [Annals of Mathematics Studies 5 (1941), 74-75.] Сначала заметим, что {хху{х2у.. .y{xs-!yxs)...)) = ((ti V аг2 V • • • V xs-i V xs) А у) У (xi Ах2 А • • • Л xs-i Л т8); (47) эта формула для многократного применения оператора медианы легко доказывается по индукции по s. Теперь предположим, что f(xi,..., хп) монотонна, самодуальна и имеет дизъ- юнктивную простую форму У(хх,. , хп) - t\ V • • • V tm, tj = Xj\ А • • • A &jsj , где никакие простые импликанты tj не содержатся одна в другой (следствие Q). Лю- бые две простые импликанты должны иметь как минимум одну общую переменную. Если мы имеем, скажем, ti = хАу nt2 = u Av Aw, то значение f будет равно 1, когда x = y = lviu = v = w = 0, как и при т = у = 0иг1 = г = и,’=1, что противоречит самодуальности. Следовательно, если любая tj состоит из одной переменной х, она должна быть единственной простой импликантой, а в этом случае f является тривиальной функцией f{xi,... ,хп) = х = {ххх). Определим функции go, gi, ..., дт путем смешивания медиан следующим об- разом: g0{xi,...,xn) =хг, < . < \\ л ' . (48) Qj э • • • > ) — flyXji,. . . , XjSj , 9j—l j • • • » xn)) ДЛЯ 1 < J < 771, здесь h(xx, ...,xs;y) обозначает функцию в верхней строке (47). По индукции по j из (47) и (48) можно доказать, что gj{xi,..., xn) = 1, если ty V • • • V tj = 1, поскольку (xjj V • • • V Xjaj.) A tk = tk, когда k < j. Наконец, f(xi,... ,xn) должно быть равно gm(xi,... ,хп), поскольку обе функ- ции монотонны и самодуальны, и мы показали, что f(xi,... ,xn) < gm{xi,. ,хп) для всех комбинаций нулей и единиц. Этого неравенства достаточно для доказа- тельства равенства, поскольку самодуальная функция равна 1 ровно в половине из 2" возможных случаев. | Одним из следствий из теоремы Р является то, что мы можем выразить медиану пяти элементов через медианы трех, поскольку медиана любого нечетного чис- ла булевых переменных очевидным образом является монотонной и самодуальной
90 КОМБИНАТОРНЫЙ ПОИСК 7.1.1 булевой функцией. Будем записывать такую медиану как {xi.. ,X2k-i)- Тогда дизъюнктивная простая форма {vwxyz) представляет собой (vAwArr) V (vAwAy) V (vAiuAz) V (vAarAj/) V (vAarAz) V (vAj/Az) V {w/\x/\y) V (icArcAz) V (icAj/Az) V (arAj/Az); так что построение в доказательстве теоремы Р выражает {vwxyz) как огромного размера формулу gio{v, w,x, у, z), включающую 2046 операций получения медианы из трех элементов с максимальной глубиной вложенности 20. Конечно, это выра- жение не является кратчайшим; в действительности {vwxyz) = {v{xyz){wx{wyz))). (49) [См. Н. S. Miiller and R. О. Winder, IRE Transactions EC-11 (1962), 89-90.] * Алгебры медиан и медианные графы. Ранее мы отметили, что тернарная опе- рация {xyz) полезна, если х, у и z принадлежат любому упорядоченному множеству наподобие действительных чисел, когда Л и V рассматриваются как операторы min и max. В действительности операция {xyz) играет также полезную роль в гораздо более общих обстоятельствах. Алгебра медиан представляет собой произвольное множество М, на котором определена тернарная операция {xyz), отображающая элементы М в элементы М и подчиняющаяся трем следующим аксиомам: {хху) = х (закон мажоритарности); (50) {xyz) = {xzy) = {yxz) = {yzx) = {zxy) = {zyx) (закон коммутативности); (51) {xw{ywz)) = {{xwy)wz) (закон ассоциативности). (52) В булевом случае, например, закон ассоциативности (52) выполняется при w = 0 и w = 1, поскольку Л и V ассоциативны. В упр. 75 и 76 доказывается, что из этих трех аксиом вытекает также закон дистрибутивности для медиан, который имеет как краткую форму {{xyz)uv) = {x{yuv){zuv)), (53) так и более симметричную длинную запись {{xyz)uv) = {{xuv){yuv){zuv)). (54) Простое доказательство этого факта неизвестно, но мы можем как минимум прове- рить частный случай (53) и (54), когда у — и и z = v. Мы имеем ((rn/z)j/z) = {xyz), (55) поскольку обе части равны {xy{zyz)). Фактически закон ассоциативности (52) яв- ляется всего лишь частным случаем у = и закона (53). А с (55) и (52) мы можем также проверить случай х = и: {{uyz)uv) = {vu{yuz)) = {{vuy)uz) = {{yuv)uz) = {{{yuv)uv)uz) — {{yuv)u{vuz)) = {u{yuv){zuv)). Идеалом в алгебре медиан М является множество С С М, для которого мы имеем {xyz) € С, когда хЕС, yeCuzE М. (56)
7.1.1 ОСНОВЫ БУЛЕВОЙ АЛГЕБРЫ 91 Если и и v являются любыми элементами М, отрезок [и.. г>] определяется следую- щим образом: [u..v] = { {xuv) | х е М]. (57) Мы говорим, что “х находится между и и v” тогда и только тогда, когда х Е [и.. с]. Согласно этим определениям и и v сами принадлежат отрезку [и. .г]. Лемма М. Каждый отрезок [и.. г>] является идеалом, и х € [и.. г>] <=> х — {uxv). Доказательство. Пусть {xuv) и {yuv) представляют собой произвольные элементы [гг..г>]. Тогда {{xuv){yuv)z) = {{xyz)uv) € [w..v] для всех z € M в соответствии с (51) и (53), так что [и.. г>] является идеалом. Кроме того, каждый элемент {xuv) € [u.. v] удовлетворяет условию {xuv) = {u{xuv)v) согласно (51) и (55). | Наши отрезки [и.. г>] обладают красивыми свойствами в силу законов медиан: v € [и.. и] => и — v; (58) х € [и., г] и у е [и., а:] => з/€[и..гф (59) х е [и..v] и у е [и..z], и у е [к. .z] ==> ye[x..z], (60) Равносильно, [и..и] = {и}; если х е [и., с], то [и., a:] С [гг..г>]; и из х е [гг..т] вытекает также, что [u..z] П[г>..z] С [x..z] для всех z. (См. упр. 72.) Давайте определим граф на множестве вершин М со следующими ребрами: и — v <=> u v и {xuv) G {и, г>} для всех х е М. (61) Другими словами, и и v смежны тогда и только тогда, когда отрезок [и.. г>] состоит только из двух точек — и и v. Теорема G. Если М является любой конечной алгеброй медиан, то граф, опре- деляемый (61), является связным. Кроме того, вершина х принадлежит отрезку [и.. г>] тогда и только тогда, когда х лежит на кратчайшем пути от и до v. Доказательство. Если М не является связным, выберем и и v так, что не су- ществует пути из и в v и отрезок [и.. г>] имеет минимально возможное количество элементов. Пусть х € [а.. v] отлично от и и v. Тогда {xuv) = х v, так что v [а.. ас]; аналогично и [ас.. с]. Но [а.. ас] и [ас.. содержатся в [а.. г>] согласно (59). Так что они представляют собой наименьшие отрезки и должен иметься путь из и в х и из х в v. Таким образом, получено противоречие. Другая половина теоремы доказывается в упр. 73. | Из нашего определения отрезков вытекает, что {xyz) € [а:.. з/] П [ас.. z] П [3/.. z], поскольку {xyz) = {{xyz)xy) = {(xyz)xz) = {(xyz)yz) в соответствии с (55). И об- ратно, если w € [а:.. з/] П [а:.. z] П [3/.. z], то в упр. 74 доказывается, что w = {xyz). Другими словами, пересечение [а:.. з/] П [а:.. z] П [3/.. z] всегда содержит ровно одну точку, если х, у и z являются точками М. На рис. 7 этот принцип проиллюстрирован на кубе размером 4x4x4, где каждая точка х имеет координаты (а?1,а;2,а;з) с 0 < аг^а^агз < 4. Вершины этого куба образуют алгебру медиан, поскольку {xyz) = {{x^y^Zi), {x^yzz?), (^зЗ/з2з)); кроме
92 КОМБИНАТОРНЫЙ ПОИСК 7.1.1 того, ребра графа на рис. 7 являются ребрами, определенными в (61) и проходя- щими между вершинами, координаты которых совпадают, за исключением одной координаты, изменяющейся на ±1. Показаны три типичных отрезка: [гг..?/], [x..z] и [y..z]; единственной общей точкой для всех трех отрезков является вершина (xyz) = (2,2,1). (а) Отрезок [х.. у]. (б) Отрезок [х. .г]. Рис. 7. Отрезки между вершинами х = (0,2,1), у = (3,3,3) и z = (2,0,0) в кубе размером 4x4x4. (в) Отрезок [у.. г]. До сих пор мы начинали с алгебры медиан и использовали ее для определения графа с некоторыми свойствами. Но можно начать и с графа, который обладает этими свойствами, и воспользоваться им для определения алгебры медиан. Если и и v являются вершинами любого графа, определим отрезок [и.. г>] как множество всех точек на кратчайших путях между и и v. Назовем конечный граф медианным графом, если пересечение [х..у] П [x..z] П [у..z] трех отрезков, связывающих три данные вершины, х, у и z, представляет собой ровно одну точку; мы будем обозна- чать эту вершину как (xyz). В упр. 75 доказывается, что получающаяся в результате тернарная операция удовлетворяет аксиомам медиан. Многие важные графы в соответствии с этим определением оказываются ме- дианными графами. Например, любое свободное дерево, как легко увидеть, пред- ставляет собой медианный граф; еще одним простым примером является гиперпря- моугольник ni х яг х х Пт. Декартово произведение произвольных медианных графов также удовлетворяет указанному условию. *Медианные метки. Если и и v представляют собой произвольные элементы алгебры медиан, отображение f(x), которое отображает х н-» (xuv), является го- моморфизмом; т. е. оно удовлетворяет условию f((xyz)) = {f(x)f(y)f(z)) (62) в силу длинного закона дистрибутивности (54). Эта функция (xuv) “проецирует” любую данную точку х в отрезок [u.. v] согласно (57). Это оказывается особенно интересным в случае, когда и — v представляет собой ребро соответствующего графа, поскольку f(x) при этом оказывается функцией с двумя значениями, по сути — булевым отображением.
7.1.1 ОСНОВЫ БУЛЕВОЙ АЛГЕБРЫ 93 Например, рассмотрим типичное свободное дерево, показанное ниже, с восемью вершинами и семью ребрами. Мы можем проецировать каждую вершину х в каж- дый из отрезков ребер [и.. в], решая, находится ли х ближе к и или к и. ас Ьс cd de ef eg dh а н -> а с с d e e d 0000000 Ь н -> с Ь с d e e d 1100000 с н + с с с d e e d 1000000 d н -> с с d d e e d 1010000 е н -> с с d e e e d 1011000 f - -> с с d e f e d 1011100 9 •- -> с с d e e 9 d 1011010 h ь- * с с d d e e h 1010001 (63) Справа мы привели проекции к нулям и единицам, произвольно решив, что а 0000000. Полученные в результате битовые строки называются метками (labels) вершин, и мы пишем, например, 1(b) = 1100000. Поскольку каждая проекция является гомоморфизмом, мы можем вычислить медиану любых трех точек, про- сто находя булеву медиану для каждого компонента их меток. Например, чтобы вычислить (bgh), мы находим побитовую медиану 1(b) = 1100000, 1(g) = 1011010 и 1(h) = 1010001, а именно 1010000 = 1(d). При проецировании на все ребра медианного графа можно обнаружить, что два столбца бинарных меток идентичны. Эта ситуация невозможна в случае свободного дерева; но рассмотрим, что произойдет, если добавить к дереву (63) ребро д — h. Получающийся в результате граф остается медианным графом, но столбцы для ед и dh будут идентичны (за исключением е «-» d и д «-» h). Кроме того, новый столбец для gh окажется эквивалентным столбцу для de. В таких случаях следует убрать из меток избыточные компоненты; следовательно, вершины пополненного графа будут иметь не семибитовые, а шестибитовые метки наподобие 1(g) = 101101 и 1(h) = 101001. Элементы любой алгебры медиан всегда могут быть представлены метками таким способом. Следовательно, любое тождество, выполняющееся в булевом слу- чае, будет истинно во всех алгебрах медиан. Этот “нуль-один-принцип” делает возможной проверку для двух заданных выражений, построенных из тернарной операции (xyz), можно ли показать их эквивалентность как следствие аксиом (50), (51) и (52), хотя мы должны проверить 2*1-1 — 1 случаев при тестировании этим методом выражений с п переменными. Например, закон ассоциативности (xw(ywz)) = ((xwy)wz) предполагает, что должна иметься симметричная интерпретация обеих частей, не включающая вло- женные угловые скобки. И действительно, такая формула существует: (xw(ywz)} = ((xwy)wz) = (xwywz), (64) где (xwywz) обозначает медиану пятиэлементного мультимножества {х, w, у, w, z} = {w,w,x,y,z}. Эту формулу можно доказать, воспользовавшись нуль-один-принци- пом, замечая также, что в булевом случае медиана—это то же самое, что и мажо- ритарное значение. Аналогично можно доказать (49), и мы можем показать, что
94 КОМБИНАТОРНЫЙ ПОИСК 7.1.1 использованная Постом (Post) в (47) функция может быть упрощена до (х1у(х22/---2/(я:а-12Дса)---)) = {xiyx2y.. .yxa_iyxa)-, (65) это медиана 2s — 1 значений, где около половины из них равны у. Множество С вершин графа называется выпуклым, если [и.. г>] С С, когда и е С ии Е С. Другими словами, если конечные точки кратчайшего пути принадлежат С, то все вершины пути также должны присутствовать в С. (Следовательно, выпук- лое множество идентично тому, что мы назвали “идеал” несколько страниц назад; сейчас наш язык становится геометрическим вместо алгебраического.) Выпуклая оболочка для {гт,..., определяется как наименьшее выпуклое множество, содер- жащее каждую из вершин щ, ..., vm. Наши теоретические результаты, полученные выше, показывают, что каждый отрезок [и.. выпуклый; следовательно, [и.. г>] является выпуклой оболочкой двухточечного множества {и,г}. Но на самом деле истинно гораздо большее. Теорема С. Выпуклая оболочка множества {щ,Ц2,... ,vTO} в медианном графе представляет собой множество всех точек С = {(l>iXl>2iC. . -XVm) | X е М]. (66) Кроме того, х находится в С тогда и только тогда, когда х = {vi xv2x... xrm). Доказательство. Ясно, что Vj € С для 1 < j < т. Каждая точка С должна принадлежать выпуклой оболочке, поскольку точка х' = {v2x.. .xvm) находится в оболочке (по индукции по т) и потому что {vix.. .xvm) е [гт . .я/]. Нуль-один- принцип доказывает, что (x{viyv2y... yvm){vi zv2z... zvm)) = (vi {xyz)v2 {xyz)... {xyz)vm)-, (67) следовательно, С выпукло. Установка у = x в этой формуле доказывает, что {vixv2х...xvm) является точкой С, ближайшей к х, и что {щхи2х...xvm) € [re.. z] для всех z е С. | Следствие С. Пусть метка Vj представляет собой Vji... vjt для 1 < j < m. Тогда выпуклой оболочкой для {г>1,..., vm} является множество всех х € М, метки которых Xi ...Xt удовлетворяют условию Xj = Cj при Vij = V2j = = Vmj = Cj. | Например, выпуклая оболочка {с, g, h} в (63) состоит из всех элементов, метки которых соответствуют шаблону 10**0**, а именно {с, d, e,g, h}. Когда медианный граф содержит цикл длиной 4 и — х — v — у — и, ребра и — х и v — у эквивалентны в том смысле, что проекция в [п.. гс] и проекция в [г.. у] дают одни и те же координаты меток. Причина этого в том, что для любого z с {zux) = и мы имеем У = {uvy) = {{zux)vy) = {{zvy){uvy){xvy)) = {{zvy)yv), следовательно, {zvy) = у; аналогично из {zux) — х вытекает {zvy) = v. Ребра х — v и у — и эквивалентны по той же причине. В упр. 77 среди прочего показано, что два ребра приводят к эквивалентным проекциям тогда и только тогда, когда можно доказать их эквивалентность с помощью цепочек эквивалентности, получае-
7.1.1 ОСНОВЫ БУЛЕВОЙ АЛГЕБРЫ 95 мых описанным способом из 4-циклов. Следовательно, количество битов в каждой метке вершины равно количеству классов эквивалентности ребер, порожденных 4-циклами; отсюда следует, что сокращенные метки для вершин определяются един- ственным образом, если мы указываем вершину с меткой 00... 0. Интересный способ поиска меток вершин любого медианного графа был пред- ложен П. К. Джхой (Р. К. Jha) и Ж. Слуцки (G. Slutzki) [Ars Combin. 34 (1992), 75-92] и усовершенствован И. Хагауэром (J. Hagauer), В. Имрихом (W. Imrich) и С. Клавжаром (S. Klavzar) [Theor. Comp. Sci. 215 (1999), 123-136]. Алгоритм H (Медианные метки). Для данного медианного графа G и исходной вершины а этот алгоритм находит классы эквивалентности, определяемые цик- лами G длиной 4, и вычисляет метки l(v) = v\...vt каждой вершины, где t — количество классов, a 1(a) = 0... 0. Н1. [Инициализация.] Предварительно обработать G, посещая все вершины в по- рядке их расстояний от а. Для каждого ребра и — v мы говорим, что и является ранним соседом и, если а ближе к и, чем к v, в противном случае и является поздним соседом-, другими словами, ранние соседи v уже посещены к моменту, когда встречается v, а поздние соседи все еще дожидаются своей очереди. Перестроить все списки смежности так, чтобы ранние соседи пере- числялись первыми. Поместить сначала каждое ребро в собственный класс эк- вивалентности; для слияния классов, когда будет выяснена их эквивалентность, будет применяться алгоритм обработки отношений эквивалентности наподобие алгоритма 2.3.3Е. Н2. [Вызов подпрограммы.] Установить j «— 0 и вызвать подпрограмму I с пара- метром а. (Подпрограмма I приведена ниже. Глобальная переменная j будет использоваться для создания главного списка ребер г? — Sj для 1 < j < п, где п—общее количество вершин; для каждой вершины v а будет иметься одна запись с Sj = v.) НЗ. [Назначение меток.] Пронумеровать классы эквивалентности от 1 до t. Затем установить значение 1(a) равным t-битовой строке 0... 0. Для j = 1, 2,..., п — 1 (в указанном порядке) установить значение l(sj) равным Z(r7) с битом к, изме- ненным с 0 на 1, где к — класс эквивалентности ребра Tj —Sj. | Подпрограмма I (Обработка потомков г). Эта рекурсивная подпрограмма с па- раметром г и глобальной переменной j выполняет основную работу алгоритма Н на графе всех вершин, достижимых в настоящий момент из вершины г. В процессе выполнения все такие вершины будут записаны в главный список, за исключением самой г, а все ребра между ними будут удалены из текущего графа. Каждая вершина имеет четыре поля, LINK, MARK, RANK и МАТЕ, изначально нулевые. II. [Цикл по s.] Выбрать вершину s с ребром г — s. Если такой вершины не существует, вернуться из подпрограммы. 12. [Запись ребра.] Установить j <— j + 1, Tj «— г и Sj «— s. 13. [Начать поиск в ширину.] (Сейчас мы хотим найти и удалить все ребра теку- щего графа, эквивалентные г — s.) Установить MARK(s) «— s, RANK(s) <— 1, LINK(s) «— А и v «— q «— s.
96 КОМБИНАТОРНЫЙ ПОИСК 7.1.1 14. [Поиск пары «.] Найти раннего соседа и вершины v, для которого MARK (u) s или RANK (u) 1. (Будет иметься ровно одна такая вершина и. Вспомните, что на шаге Н1 первыми размещались ранние соседи.) Установить МАТЕ(г>) «— и. 15. [Удаление и — г;.] Сделать ребра и — v и г — з эквивалентными путем слияния их классов эквивалентности. Удалить и и v из списков смежности друг друга. 16. [Классификация соседей «.] Для каждого раннего соседа и вершины v выпол- нить шаг 17; для каждого позднего соседа и вершины v выполнить шаг 18. Затем перейти к шагу 19. 17. [Запись возможной эквивалентности.] Если MARK (u) = s и RANK(u) = 1, сделать ребро и — v эквивалентным ребру МАТЕ (и) —МАТЕ(г>). Вернуться к шагу 16. 18. [Ранг и.] Если MARK (и) = s и RANK(u) = 1, вернуться к шагу 16. В противном случае установить MARK (и) <— s и RANK (и) «— 2. Установить w равным первому соседу и (это будет ранний сосед). Если w = v, сбросить w, сделав его равным второму раннему соседу и; но вернуться к шагу 16, если и имеет только одного раннего соседа. Если MARK(w) s или RANK(w) 2, установить RANK (и) «— 1, LINK (и) <— Л, LINK(q) «— и и q «— и. Вернуться к шагу 16. 19. [Продолжить поиск в ширину.] Установить v «— LINK(v). Вернуться к шагу 14, если v / Л. Ив. [Обработка подграфа s.] Рекурсивно вызвать подпрограмму I с параметром з. Затем вернуться к шагу II. | Этот алгоритм и подпрограмма описаны в терминах относительно высокоуровневых структур данных; дальнейшая детализация оставлена читателю. Например, списки смежности должны быть дважды связанными, так что ребра на шаге 15 могут быть легко удалены. На этом же шаге может использоваться любой подходящий метод слияния классов эквивалентности. Теория, делающая данный алгоритм работоспособным, поясняется в упр. 77, а в упр. 78 доказывается, что каждая вершина на шаге 14 встречается не более 1g п раз. Кроме того, в упр. 79 показано, что медианный граф имеет не более O(nlogn) ребер. Следовательно, общее время работы алгоритма Н равно O(n(logn)2), за исключением, возможно, установки битов на шаге НЗ. Читатель может выполнить алгоритм Н вручную на медианном графе из табл. 2, вершины которого представляют двенадцать монотонных самодуальных булевых функций от четырех переменных {w,x,y,z}. Все такие функции, действительно включающие все четыре переменные, могут быть выражены как медианы пяти элементов наподобие (64). Принимая в качестве стартовой вершину а = и, алгоритм вычисляет главный список ребер Tj — Sj и бинарные метки, показанные в таблице. (Фактический порядок обработки зависит от порядка, в котором вершины появля- ются в списках смежности. Однако окончательные метки будут одинаковыми при любом порядке с точностью до перестановки столбцов.) Заметим, что количество единичных битов в каждой метке представляет собой расстояние v от стартовой вершины а. В действительности уникальность меток говорит нам о том, что расстояние между любыми двумя вершинами равно
7.1.1 ОСНОВЫ БУЛЕВОЙ АЛГЕБРЫ 97 Таблица 2 Метки для свободной алгебры медиан на четырех генераторах j Sj l{Sj) w 0000000 1 W {wwxyz} 0000001 2 {wwxyz} {wyz) 0010001 3 {wyz} {wxyzz} 0010101 4 {wxyzz) {xyz} 0010111 5 {wxyzz) z 1010101 6 {wyz} {wxyyz) 0010011 7 {wxyyz} У 0110011 8 {wwxyz} {wxz) 0000101 9 {wxz} {wxxyz} 0000111 10 {wxxyz} X 0001111 11 {wwxyz} {wxy) 0000011 количеству битовых позиций, в которых отличаются их метки, поскольку мы можем выбрать в качестве стартовой любую отдельную вершину. Специальный медианный граф в табл. 2 на самом деле можно обработать совер- шенно иным способом, не прибегая к алгоритму Н вообще, поскольку метки в этом случае, по сути, те же, что и таблицы истинности соответствующих функций. И вот почему: мы можем сказать, что простые функции и>, х, у, z имеют таблицы ис- тинности соответственно t{w) = 0000000011111111, t(ar) = 0000111100001111, t{y) = 0011001100110011, t(z) = 0101010101010101. Тогда таблица истинности {unvxyz} представляет собой побитовую мажоритарную функцию {t{w)t{w}t{x)t{y)t{z}), а именно строку 0000000101111111; аналогичные вычисления дают таблицы истинно- сти всех остальных вершин. Вторая половина таблицы истинности любой самодуальной функции такая же, как и первая, но дополненная и обращенная, так что мы можем ее отбросить. Кроме того, крайний слева бит в каждой из наших таблиц истинности всегда равен нулю. Мы всегда остаемся с семибитовыми метками, показанными в табл. 2; а свойство единственности гарантирует, что алгоритм Н даст для данного конкретного графа тот же результат с точностью до возможной перестановки столбцов. Эти рассуждения говорят нам, что ребра графа из табл. 2 соответствуют па- рам функций, таблицы истинности которых почти одинаковы. Мы перемещаемся между соседними вершинами, меняя только два комплементарных бита их таблиц истинности. Фактически степень каждой вершины оказывается в точности равной количеству простых импликант в дизъюнктивной простой форме монотонной само- дуальной функции, представленной этой вершиной (см. упр. 70 и 84). *Медианные множества. Медианное множество представляет собой коллекцию бинарных векторов X, обладающую тем свойством, что {xyz) € X, если х G X, у G X и z € X, где медианы вычисляются покомпонентно, как в случае меток меди- ан. Томас Шефер (Thomas Schaefer) заметил в 1978 году, что медианное множество предоставляет привлекательный контрапункт для характеризации функций Хорна в теореме Н. 4 Зак. 3331
98 КОМБИНАТОРНЫЙ ПОИСК 7.1.1 Теорема S. Булева функция f(xi,... ,хп) выражаема в виде конъюнкций дизъ- юнктов Крома тогда и только тогда, когда ИЗ f(xi,...,xn) = = 1 вытекает f((xiyiZi),(xnynzn)) = 1 (68) для всех булевых значений Xj, уj и Zj. Доказательство. [STOC 10 (1978), 216-226, Lemma 3.1В.] Если Xi V х? = у\ V у2 = Zi V Z2 = 1 При, скажем, Xi < yi < Zl, ТО (xiyiZi) V (x2y2Z2) = yi V {Х2У2Х?) = 1, поскольку из j/i = 0 вытекает, что Х2 = У2 = 1- Таким образом, условие (68) является необходимым. И наоборот, если выполняется условие (68), пусть щ V • V Uk — простой дизъ- юнкт /, где каждое Uj представляет собой литерал. Тогда для 1 < j < к дизъюнкт «1 V • • • V Uj-i V Uj+i V • V Uk не является дизъюнктом /; так что существует вектор х^, такой, что f(x^) = 1, но = 0 для всех i j. Если к > 3, медиана (з^з^х®) имеет щ = 0 для 1 < i < к; но это невозможно, поскольку «1 У-- - VUfc, по нашему предположению, является дизъюнктом. Следовательно, к < 2. | Таким образом, медианные множества представляют собой то же, что и “экзем- пляры 2SAT” множества точек, удовлетворяющие некоторой формуле f в 2CNF- форме. Медианное множество называется приведенным (reduced), если его векторы х = Xi.. .Xt не содержат избыточных компонентов. Другими словами, для каждой позиции координаты к приведенное медианное множество имеет как минимум два вектора х^ и у^к\ обладающих тем свойством, что х^ = 0 и у^ = 1, но = у^ для всех i / к. Мы видели, что метки медианного графа удовлетворяют этому условию; фактически, если координата к соответствует ребру и — и графа, можно положить х^ и у(к) метками и и и. И наоборот, любое приведенное медианное множество X определяет медианный граф с одной вершиной для каждого элемен- та X и со смежностью, определяемой равенствами всех координат, кроме одной. Медианные метки этих вершин должны быть идентичны исходным векторам из X, поскольку мы знаем, что медианные метки, по сути, уникальны. Медианные метки и приведенные медианные множества можно также охарак- теризовать еще одним поучительным способом, который возвращает нас к сетям модулей компараторов, которые мы изучали в разделе 5.3.4. В упомянутом разделе мы видели, что такие сети полезны для “рассеянной сортировки” (“oblivious sort- ing”) чисел, а из теоремы 5.3.4Z узнали, что сеть компараторов будет сортировать все п! возможных входных перестановок тогда и только тогда, когда она корректно сортирует все 2П комбинаций нулей и единиц. Когда модуль компаратора подклю- чается к двум горизонтальным линиям, со входами х и у слева, он дает на выходе те же два значения, но в верхней линии будет значение min(rc, у) = х Л у, а в ниж- ней— raax(x,y) = re V у. Давайте немного расширим концепцию, добавив модули инверторов, которые заменяют 0 на 1 и наоборот. Вот, например, сравнивающе- инвертирующая сеть (comparator-inverter network, или, для краткости, CI-сеть),
7.1.1 ОСНОВЫ БУЛЕВОЙ АЛГЕБРЫ 99 которая преобразует бинарное значение 0010 в 0111. о---о---о —♦— о —•— 1 о —•— 1-1 —1— 1 —•— о 1 —j— о —•— 1 —j— 1 —•— о о —1— 1-1 —1— 1 —•— о (Одиночная точка обозначает инвертор.) Действительно, эта сеть выполняет пре- образования 0000 — ОНО; 00011-0111; 0010 — 0111; 0011 — 0110; 0100 — 0111; 0101—1111; 0110—1111; 0111 — 0111; 1000 — 0111; 1001 — 0101; 1010 — 0101; 1011 — 0111; 1100 — ОНО; 1101 — 0111; 1110 — 0111; 1111 — 0110. (70) Предположим, что CI-сеть преобразует битовую строку х = хг... xt в битовую строку х^.-.х^ = f(x). Эта функция /, которая отображает t-мерный куб на себя, фактически является гомоморфизмом графа. Другими словами, мы имеем f(x) — f(y), когда в t-мерном кубе х — у: изменение одного бита х всегда приводит к изменению ровно одного бита /(а:), поскольку каждый модуль сети обладает этим поведением. Кроме того, CI-сети имеют замечательную связь с медианными метками. Теорема F. Каждое множество X из t-битовых медианных меток множеств может быть представлено CI-сетью, которая вычисляет булеву функцию f(x), обладающую тем свойством, что f(x) € X для всех битовых векторов Xi... xt и f(x) = х для всех хех. Доказательство. [Томас Федер (Tomas Feder), Memoirs Amer. Math. Soc. 555 (1995), 1-223, Lemma 3.37; см. также диссертацию Д. Г. Видеманна (D. Н. Wiedemann) (University of Waterloo, 1986).] Рассмотрим столбцы i и j медианных меток, где 1 < г < j <t. Любая такая пара столбцов содержит как минимум три из четырех вариантов {00,01,10,11}, если просматривать все множество меток, поскольку ме- дианные метки не имеют избыточных столбцов. Запишем j — г, j — г, i — j или г — J, если значение 00, 01, 10 или 11 соответственно отсутствует среди этих двух столбцов; можно также заметить эквивалентные соотношения г — j, г — J, j — г и j — г соответственно, которые включают г вместо г. Например, метки в табл. 2 дают соотношения 1 — 2,3,4,5,6,7 2,3,4,5,6,7 —Т; 2 —3,4,5,6,7 3,4,5,6,7 —2; 3-4,7 4,7-3; } 4 —5,6,7 5,6,7 —4; 5 — 7 7 — 5; 6 — 7 7 — 6. (Между 3 и 5 соотношения нет, поскольку в этих столбцах имеются все четыре возможных варианта. Но мы имеем 3 — 4, так как 11 в столбцах 3 и 4 нет. Вершины, метки которых имеют 1 в столбце 3,—это те, которые в табл. 2 ближе к (wyz), чем
100 КОМБИНАТОРНЫЙ ПОИСК 7.1.1 к {wwxyz)', они образуют выпуклое множество, в котором столбец 4 меток всегда равен 0, поскольку они также ближе к {wxxyz),чем к х.) Отношения между литералами {1,1,2,2,..., t,t} не содержат циклов, так что они всегда могут быть топологически отсортированы в антисимметричную последо- вательность Mi U2 • • • u2t, в которой Uj является дополнением u^t+i-j- Например, 17 4 2 3 5 6 6 5 3 2 4 71 (72) является одним таким способом топологической сортировки отношений в (71). Теперь перейдем к построению сети, начиная с t пустых строк и последовательно рассматривая элементы и i4jt+d в топологической последовательности для d = 2t — 2, 2t — 3, ..., 1 (в указанном порядке) и для к = 1, 2, ..., t — [d/2]. Если Wfc —> ujt+d представляет собой отношение между столбцами i и j, где г < j, мы добавляем новые модули к линиям г и j сети следующим образом. Если г —> j Если г —» J Если г —> j Если г —» j Например, из (71) и (72) мы сначала получаем 1 —> 7, затем 1 —» 4, после 1 —» 2, 7 —> 4 (т. е. 4 —» 7), и так далее, в результате чего получается следующая сеть. (Обратите внимание на то, что нет модулей, полученных, скажем, когда пред- ставляет собой 7, a i4jt+d равно 3, поскольку отношение 3 —» 7 в (71) отсутствует.) В упр. 89 доказывается, что каждый новый кластер модулей (73) сохраняет все предыдущие отношения и добавляет новые. Следовательно, если х — любой входной вектор, f{x) удовлетворяет всем отношениям; так что f{x) G X согласно теореме S. И обратно, если х € X, то каждый кластер модулей в сети оставляет х неизмененным. | Следствие F. Предположим, что метки медиан в теореме F замкнуты относитель- но операций побитового И и ИЛИ, так что х&у € X и х | у € X, когда х е X и у е X. Тогда существует перестановка координат, при которой метки представимы сетью, состоящей только из модулей компараторов. Доказательство. Побитовое И всех меток равно 0... 0, а побитовое ИЛИ равно 1... 1. Так что единственными возможными отношениями между столбцами явля- ются i —» j и j —»i. Путем топологической сортировки и переименования столбцов можно обеспечить, что, когда i < j, встречается только i —> j; а в этом случае построение из доказательства никогда не использует инверторы. | В общем случае, когда G представляет собой произвольный граф, гомомор- физм f, который отображает вершины G в подмножество этих вершин X, называ- ется ретракцией, если он удовлетворяет условию f{x) = х для всех х € X; и когда такой f существует, мы называем X ретрактом G. Важность этой концепции в теории графов впервые отмечена Паволом Хеллом (Pavol Hell) [см. Lecture Notes
7.1.1 ОСНОВЫ БУЛЕВОЙ АЛГЕБРЫ 101 in Math. 406 (1974), 291-301]. Одним из следствий, например, является то, что рас- стояние между вершинами в X — количество ребер в кратчайшем пути — остается той же четности, если ограничиться рассмотрением путей, полностью лежащих в X. (См. упр. 93.) Теорема F демонстрирует, что каждое t-мерное множество меток медиан явля- ется ретрактом t-мерного гиперкуба. И обратно, в упр. 94 показано, что ретракты гиперкуба всегда являются медианными графами. Пороговые функции. Особенно привлекательный и важный класс булевых функ- ций -,хп) появляется, когда f можно определить формулой /(xi,X2,... ,хп) = [wixi Ч- W2X2 Ч------\-wnxn>t], (75) где константы wi, w%, wn представляют собой целочисленные “веса” at— целочисленное “пороговое” значение. Например, пороговые функции важны, даже когда все веса одинаковы: мы имеем Xi A Х2 А • • • А хп = [xi + Х2 Ч--1- хп > п]; (76) Xi V х2 V • - V хп = [xi Ч- Х2 Ч-1- хп > 1]; (77) (xix2 X2t-i) = [xi Ч- х2 Ч- • • • Ч- X2t-i > t], (78) где {xiX2 • X2t-i) означает медиану (или мажоритарное значение) мультимноже- ства с нечетным числом булевых значений {xi,X2,... ,X2t-i}- В частности, поро- говыми функциями являются фундаментальные отображения х А у, х\/ у и {xyz), как и х = [—х>0]. (79) В случае более общих весов мы получим много других интересных функций, таких как [2"-1a;i Ч- 2"—2Х2 Ч- • • • Ч- хп > (tit2 • • • tn)2], (80) которая является истинной тогда и только тогда, когда бинарная строка Х1Х2 хп лексикографически не меньше заданной бинарной строки tit2 .. - tn. Для заданного множества из п объектов размерами wi, W2, • • -, wn, подмножество этих объектов помещается в рюкзак размером t — 1 тогда и только тогда, когда f{xi,Х2, ,хп) = О, где Xj = 1 представляет наличие объекта j в подмножестве. Простые модели нейронов, изначально предложенные У. Мак-Каллахом (W. McCulloch) и У. Питтсом (W. Pitts) в Bull. Math. Biophysics 5 (1943), 115-133, привели к написанию тысяч исследовательских статей о “нейронных сетях” построенных из пороговых функций. Можно избавиться от всех отрицательных весов Wj, установив Xj «— Xj, Wj <--Wj и t «— t 4- |wj|. Таким образом, обобщенная пороговая функция может быть приведена к положительной пороговой функции, в которой все веса неот- рицательны. Кроме того, любая положительная пороговая функция (75) может быть выражена как частный случай функции медианы (мажоритарной функции) нечетного числа переменных, поскольку мы имеем (0“1ьхрХ22 • • • Х„п) = [Ь ч- W1X1 Ч- W2X2 Ч-1- Wnxn > b +1], (81) где хт означает т копий х и где а и Ь определяются правилами а = max(0,2t — 1 — w), b = max(0, w 4-1 — 2t), w = wi4-w24----+wn. (82)
102 КОМБИНАТОРНЫЙ ПОИСК 7.1.1 Например, когда все веса равны 1, мы имеем (0"-1xi.. .хп) = Xi Л • • • Л хп и (l"-1xi.. .хп) = Xi V • • • V хп‘, (83) мы уже видели эти формулы в (45) для п = 2. В общем случае либо а, либо b равно нулю и левая часть (81) определяет медиану 2Т — 1 элементов, где Т = b +1 = max(t, wi + w2 Ч-----1- wn + 1 — t). (84) Точек, в которых и а, и b одновременно больше нуля, нет, так как мажоритарная функция удовлетворяет закону сокращения (Ol^Xa ..-X2t-1) = (xiX2...X2t-l). (85) Одно важное следствие (81) заключается в том, что каждая положительная пороговая функция получается из чисто мажоритарной функции д{х0,х1,х2,...,хп) = (xg+bxp^2...<") (86) путем установки хо = 0 или 1. Другими словами, мы знаем все пороговые функции п переменных тогда и только тогда, когда мы знаем все различные медианы нечетного количества элементов для п +1 или меньшего количества переменных (не содержа- щих констант). Каждая чисто мажоритарная функция монотонна и самодуальна; таким образом, мы видели чисто мажоритарную функцию от четырех переменных {w, х, у, z} в столбце Sj табл. 2 на с. 96, а именно {w), {wwxyz), {wyz), {wxyzz), {xyz), {z), {wxyyz), {y), {wxz), {wxxyz), {x), {wxy). Установив w = 0 или 1, мы получим все положительные пороговые функции f{x, у, z) трех переменных: (0), (1), {OOxyz), {Hxyz), {Oyz), {lyz), {Oxyzz), {Ixyzz), {xyz), {z), {Oxyyz), {Ixyyz), {y), {Oxz), {Ixz), {Oxxyz), {Ixxyz), {x), {Oxy), {Ixy). (87) Bee 150 положительных пороговых функций четырех переменных могут быть по- лучены подобным способом из самодуальных мажоритарных функций в ответе к упр. 84. Имеется бесконечно много последовательностей весов {wi, w2,..., wn), но поро- говых функций для заданного значения п—только конечное число. Так что оче- видно, что многие различные последовательности весов эквивалентны. Например, рассмотрим чисто мажоритарную функцию /2 „3 5 7 11 13 \ {хгХ2Х3Х^Х5 хе ), в которой в качестве весов использованы простые числа. Непосредственное рас- смотрение всех 26 возможных случаев показывает, что {xlx^xfxlx^xl3) = {xixlxlxlx^xl)-, (88) таким образом, можно выразить ту же функцию с помощью существенно меньших весов. Аналогично пороговая функция [(Х1Х2 - - - Х20)2 > (01100100100001111110)2] = (1225028^524288^,262144^,131072 частный случай (80), оказывается равной просто {l^x^a^x^x^xl^x^x^x^x^XiQX^x^XisXuXisXieXijXigXig). (89)
7.1.1 ОСНОВЫ БУЛЕВОЙ АЛГЕБРЫ 103 В упр. 103 поясняется, как находить минимальное множество весов с помощью линейного программирования, не прибегая к перебору огромного количества ва- риантов методом грубой силы. Красивая схема индексации, которая позволяет назначить каждой пороговой функции свой уникальный идентификатор, была открыта Ч. К. Чжоу (С. К. Chow) [FOCS 2 (1961), 34-38]. Пусть для любой заданной булевой функции f(xi,... ,хп) значение N(f) означает количество векторов х — (xi,..., хп), для которых f(x) = 1, а £(/)—сумму всех этих векторов. Например, если f(xi,xz) = Xi V х%, мы имеем М/) = 3 и Е(/) = (0,1) Ч- (1,0) + (1,1) = (2,2). Теорема Т. Пусть /(хг,..., хп) и g(xi,..., хп) —булевы функции с N(f) = N(g) и Е(/) = 52 (<у), где f —пороговая функция. Тогда f = g. Доказательство. Предположим, что имеется ровно к векторов а^1),..., х^к\ таких, что f(x^) = 1 и д(х^) = 0. Поскольку N(f) = N(g), должно быть ровно к векторов у&\ ..., у(к\ таких, что f(y^) = 0 и д(у^) = 1. А поскольку Е(/) = Т,(д), мы должны также иметь яД) +---------1- х^ = у^ -I-----1- у^к\ Теперь предположим, что f — пороговая функция (75); тогда мы имеем w-x^ > tnw- у^ < t для 1 < j < к. Но если f д, мы имеем к > 0 и w • (х^ Ч F х^) > kt > w • (у^ Ч-----1- у^), что приводит к противоречию. | Пороговые функции обладают многими любопытными свойствами, и некоторые из них рассматриваются ниже в упражнениях. Классическая теория пороговых функций хорошо подытожена в книге Сабуро Мурога (Saburo Muroga) Threshold Logic and its Applications (Wiley, 1971). Симметричные булевы функции. Функция f(xi,... ,хп) называется симмет- ричной, если f(xi,.. -, хп) равно f(xp^,..., жр(п)) для всех перестановок р(1)... р(п) множества {1,...,п}. Когда все Xj равны 0 или 1, это условие означает, что f зависит только от количества единиц среди ее аргументов, а именно “контрольной суммы” vx = v(xi,.. .,xn) = Xi + + хп. Для булевой функции, истинной тогда и только тогда, когда vx равно либо ki, либо кз, либо кг, обычно используется обозначение Sfc1,fc2,...,fcr(a;i,... ,хп). Например, Si,3,5(v,w, х, у, z) = v®w®x®y®z; S3,4,5(v,w,x,y,z) = (vwxyz); 84,5(0, w,x,у,z) = (OOvwxyz). Многие приложения симметрии включают базовые функции Sk(xi,... ,хп), ис- тинные только тогда, когда vx = к. Например, £з(гг1,з:2,тз,з:4,гг5,ггб) истинна тогда и только тогда, когда ровно половина ее аргументов {a?i,... ,Жб} истинны, а вторая половина—ложны. В таких случаях мы, очевидно, имеем 8к(Х1,. .. ,Xn) — S>fc(xi,.. . ,ХП) А 8>к-1-1(Х1,... ,xn), (90) где S>k(xi,..., хп) представляет собой сокращение для Sk,k+i,...,n(xi, - • -, хп)- Функ- ции S>k(xi,... ,хп), конечно, являются пороговыми функциями [a?i Ч----------F xn > fc], которые мы уже изучали. Более сложные случаи могут быть рассмотрены как пороговые функции поро- говых функций. Например, мы имеем £2,3,6,8,9(24,... ,342) = [vx > 2 + 4[vx>4] Ч- 2[рх> 7] Ч- 5[vx> 10]] = (00х! ...^^(O5^! ...Х12)4(1х1 ...Х12)2(17Х1 ...х12)5), (91)
104 КОМБИНАТОРНЫЙ ПОИСК 7.1.1 поскольку количество единиц во внешней мажоритарной функции 25 элементов ока- зывается равным соответственно (11,12,13,14,11,12,13,12,13,14,10,11,12), когда Xi + • • • + Xi2 = (0,1,..., 12). Аналогичная двухуровневая схема работает в об- щем случае [R. С. Minnick, IRE Trans. ЕС-10 (1961), 6-16]; а в случае трех или более уровней логики можно снизить количество пороговых операций еще сильнее. (См. упр. 113.) Для вычисления симметричных булевых функций открыт ряд искусных мето- дов. Например, С. Мурога (S. Muroga) приписывает следующую замечательную последовательность формул Ф. Сасаки (F. Sasaki): Xq ф 371 ф”*ф Х2тп " (*Го®1®2 • • • ^2m)i ГДе Sj — {XQXjXj+i . . . Xj^-m—iXj^-mXj^-m^-i . . . Xj^-2m—1)? (®2) если m > 0 и если рассматривать Х2т+к как эквивалентные Хк для к > 1. В част- ности, когда т = 1 и т = 2, мы получаем тождества Х0 Ф 371 ф Х2 — {xO{xOXiX2){xoX2Xi)y, (93) Xq ф • • • ф 374 — (з^о(З7о3713723:з3:4)(Э7о37237з374371) (3703733743:13:2)(з7о374371372Я7з))* (94) Правые части полностью симметричны, но это не так очевидно! (См. упр. 115.) Канализирующие функции. Булева функция f(xi ,...,хп) называется канализи- рующей (canalizing), или принуждающей (forcing), если можно вывести ее значение при изучении не более одной из ее переменных. Говоря более точно, функция f является канализирующей, если п = 0 или если существует индекс j, для ко- торого /(37) имеет константное значение либо когда мы положим Xj — 0, либо когда положим х-, = 1. Например, функция f(x, у, z) = (37 ф z) V у является канализирующей, поскольку она всегда равна 1, когда у = 0. (Когда у = 1, мы не знаем значение f без изучения значений х и z; но половина—это уже лучше, чем ничего.) Такие функции, введенные Стюартом Кауффманом (Stuart Kauffman) [Lectures on Mathematics in the Life Sciences 3 (1972), 63-116; J. Theoretical Biology 44 (1974), 167-190], весьма важны во многих приложениях, в особенности в химии и биологии. Некоторые из их свойств рассматриваются в упр. 125-129. Количественные соображения. Мы изучили много различных типов булевых функций, так что естественным образом возникает вопрос “Сколько имеется функ- ций от п переменных каждого типа?” Ответы, по крайней мере для небольших значений п, приведены в табл. 3-5. Все возможные функции подсчитаны в табл. 3. Для каждого п имеется 22" возможностей, поскольку существует 22" возможных таблиц истинности. Неко- торые из этих функций самодуальны, некоторые монотонны; есть одновременно и самодуальные, и монотонные функции, как упоминаемые в теореме Р. Некоторые функции являются функциями Хорна, как в теореме Н; некоторые—функциями Крома (теорема S); и т. д. Однако в табл. 4 две функции рассматриваются как идентичные, если они от- личаются только изменением имен переменных. Таким образом, при п = 2 есть только 12 разных случаев, поскольку, например, х\/у и xVy — по сути, одно и то же. Табл. 5 идет еще дальше: она позволяет нам дополнять отдельные переменные и даже всю функцию, по сути, не меняя ее. С этой точки зрения 256 булевых
7.1.1 ОСНОВЫ БУЛЕВОЙ АЛГЕБРЫ 105 Таблица 3 Булевы функции от п переменных п = 0 п= 1 п=2 п = 3 п = 4 п = 5 п = 6 Произвольная 2 4 16 256 65536 4 294967296 18446744073709551616 Самодуальная 0 2 4 16 256 65 536 4294967296 Монотонная 2 3 6 20 168 7581 7828354 Монотонная самодуальная 0 1 2 4 12 81 2646 Хорна 2 4 14 122 4960 2 771104 151947502 948 Крома 2 4 16 166 4170 224 716 24445368 Пороговая 2 4 14 104 1882 94572 15028134 Симметричная 2 4 8 16 32 64 128 Канализирующая 2 4 14 120 3514 1 292 276 103071426 294 Таблица 4 Булевы функции, различные при перестановках переменных п = 0 п= 1 п = 2 п = 3 п = 4 п = 5 п = 6 Произвольная 2 4 12 80 3984 37333 248 25626412 338 274 304 Самодуальная 0 2 2 8 32 1088 6 385 408 Монотонная 2 3 5 10 30 210 16353 Монотонная самодуальная 0 1 1 2 3 7 30 Хорна 2 4 10 38 368 29328 216591692 Крома 2 4 12 48 308 3028 49490 Пороговая 2 4 10 34 178 1720 590440 Канализирующая 2 4 10 38 294 15 774 149325022 Таблица 5 Булевы функции, различные при дополнениях/перестановках п = 0 п = 1 п = 2 п = 3 п = 4 п = 5 п = 6 Произвольная 1 2 4 14 222 616 126 200253952 527184 Самодуальная 0 1 1 3 7 83 109950 Пороговая Пороговая 1 2 3 6 15 63 567 самодуальная 0 1 1 2 3 7 21 Канализирующая 1 2 3 6 22 402 1228158
106 КОМБИНАТОРНЫЙ ПОИСК 7.1.1 функций от (х, у, z) разбиваются только на 14 различных классов эквивалентности. Представитель Размер класса Представитель Размер класса 0 2 х А (у ф z) 24 X 6 х Ф (у А z) 24 X /\у 24 (х A р) V (х A z) 24 х®у 6 (х V р) А (х ф z) 48 х Ар!\z 16 (х ф у) V (х ф z) 8 х ф у ф Z 2 (xyz) 8 х f\ (у У z) 48 Si(x, у, z) 16 Мы изучим способы подсчета и перечисления неэквивалентных комбинаторных объ- ектов в разделе 7.2.3. Упражнения 1. [15] (Льюис Кэрролл (Lewis Carroll).) Придайте смысл комментарию Траляля, про- цитированному в начале данного раздела. [Указание: см. табл. 1.] 2. [17] Логики на далекой планете Наурика используют символ 1 для представления “ложь” а 0—для представления “истина” Таким образом, например, у них имеется бинар- ный оператор под названием “или” со следующими свойствами: 1 или 1 = 1, 1 или 0 = 0, 0 или 1 = 0, 0 или 0 = 0, которые мы связываем с оператором Л. Какие операции будут связаны с 16 логически- ми операторами, которые науриканцы называют соответственно “противоречие” “и” ..., “отрицание конъюнкции” “достоверность” (см. табл. 1)? 3. [15] Предположим, что логическими значениями вместо 0 и 1 являются соответствен- но —1 для лжи и 4-1 для истины. Какие операции о из табл. 1 будут соответствовать (а) тах(я:, р)? (б) tnin(r,j/)? (в) —х? (г) х • у? 4. [24] (Г. М. Шеффер (Н. М. Sheffer).) Цель этого упражнения—показать, что все операции из табл. 1 могут быть выражены через НЕ-И. (а) Для каждого из 16 операторов о этой таблицы найдите формулу, эквивалентную х о р, но использующую только оператор Л. Ваша формула должна быть краткой, насколько это возможно. Например, ответ для операции |_—просто “я:” но ответом для L является “я: Л я:’.’ Не используйте в своих форму- лах константы 0 или 1. (б) Аналогично найдите 16 коротких формул, когда использование констант разрешено. Например, х |_ У может теперь быть выражено как их Л 1” 5. [24] Рассмотрите упр. 4 с базовым оператором С вместо Л. 6. [21] (Э. Шрёдер (Е. Schroder).) (а) Какие из 16 операций из табл. 1 ассоциативны — другими словами, какие из них удовлетворяют тождеству х о (р о z) = (х о у) о z? (б) Какие из них удовлетворяют тождеству (х о р) о (р о z) = х о Z? 7. [20] Какие операторы из табл. 1 обладают тем свойством, что х о у = z тогда и только тогда, когда у о z = xf 8. [24] Какие из 162 пар операций (о, о) удовлетворяют закону левой дистрибутивности я:о (poz) = (я: op) о (я: о г)? 9. [16] Истинны или ложны следующие утверждения? (а) (х ф у) V z = (х V г) ф (у V г); (б) (го ф х ф у) V z = (w V г) ф (х V г) ф (у V г); (в) (х ф у) V (р ф г) = (х ф z) V (у ф г). 10. [17] Какой вид имеет мультилинейное представление “случайной” функции (22)? 11. [М25] Существует ли интуитивный способ точно понять, когда мультилинейное пред- ставление f(xi,... ,хп) содержит, скажем, член хзхзхвхв? (См. (19).)
7.1.1 ОСНОВЫ БУЛЕВОЙ АЛГЕБРЫ 107 ► 12. [М23] Целочисленное мультилинейное представление булевой функции расширяет представления наподобие (19) на полиномы с целыми коэффициентами /(ад,..., хп) таким образом, что f(xi,..., хп) дает корректное значение (0 или 1) для всех 2" возможных 0-1- векторов (яд,..., ад,) без взятия остатка по модулю 2. Например, целочисленное мульти- линейное представление, соответствующее (19), представляет собой 1 — ху — xz — yz + 3xyz. а) Каково целочисленное мулътилинейное представление “случайной” функции (22)? б) Насколько большими могут быть коэффициенты такого представления f(xi,..., хп)? в) Покажите, что в каждом целочисленном мультилинейном представлении /(яд,..., хп), когда xi, ..., хп являются действительными числами, такими, что 0 < ад,..., хп < 1, выполняются неравенства 0 < f(xi,... ,хп) < 1. г) Аналогично покажите, что если /(яд,... ,хп) < д(ад,... ,хп), когда {ад,..., ад,} С {0,1}, то /(ад,..., яд,) <g(xi,...,xn), когда {ад,... ,ад,} С [0..1]. д) Докажите, что если / монотонна и 0 < х3; < у$ < 1 для 1 < j < п, то f(x) < f(y). ► 13. [20] Рассмотрим систему, состоящую из п модулей, каждый из которых может быть “исправным” или “поломанным’.’ Если Xj представляет условие “модуль j исправен” то булева функция наподобие xi Л (яд V хз) представляет утверждение “модуль 1 исправен, но модуль 2 или модуль 3 поломан”; a S3 (яд,... ,хп) означает “все три модуля исправны’.’ Предположим, что каждый модуль j исправен с вероятностью pj, не зависящей от состояния других модулей. Покажите, что булева функция f(xi,... ,хп) истинна с веро- ятностью F(pi,... ,Рп), где F—полином от переменных pi, ..., р„. 14. [20] Функция вероятности F(pi,...,pn) из упр. 13 часто называется доступностью системы. Найдите самодуальную функцию /(яд,яд,яд) максимальной доступности, когда вероятности (Р1,Р2,Рз) равны (а) (0.9,0.8,0.7); (б) (0.8,0.6,0.4); (в) (0.8,0.6,0.1). ► 15. [М20] Покажите, что если /(яд,... ,хп) —любая булева функция, то существует по- лином F(x), обладающий тем свойством, что F(x) целый при целом х, и f(xi,..., ад,) = F((xn яд)г) mod 2. Указание: рассмотрите (Jj) mod 2. 16. [IS] Можем ли мы заменить каждый оператор V на ® в полной дизъюнктивной нормальной форме? 17. [10] Согласно законам де Моргана обобщенная дизъюнктивная нормальная форма, такая как (25), представляет собой не только ИЛИ некоторых И, но и НЕ-И некоторых НЕ-И: _______________________________________ («и А Л«181) A •••A (umi А ••• AumSm). Оба уровня логики можно, таким образом, рассматривать как идентичные. Студент Шустрый переписал это выражение в виде («ц Л • • • Л U1SJ ) Л • • - Л (uml Л • • • Л Umsm ) Было ли это хорошей мыслью? ► 18. [20] Пусть ui Л • • • Л и3 является импликантой в дизъюнктивной нормальной форме булевой функции / и пусть гд V • • - V vt является дизъюнктомв конъюнктивной нормальной форме той же функции. Докажите, что u, = гд для некоторых г и /. 19. [20] Чему равна конъюнктивная простая форма “случайной” функции в (22)? 20. [M2J] Истинно или ложно утверждение: каждая простая импликанта конъюнкции / A g может быть записана как /'Л д', где /'—простая импликанта /, а д'—простая импликанта д. 21. [М20] Докажите, что неконстантная булева функция монотонна тогда и только тогда, когда она может быть выражена только через операции Л и V.
108 КОМБИНАТОРНЫЙ ПОИСК 7.1.1 22. [SO] Предположим, что f(xi,..., хп) -- g(xi,... ,in-i) ® h(xi,...,xn-i)/\xn как в (16). Какие условия необходимо и достаточно наложить на функции д и h, чтобы функция / была монотонной? 23. [15] Какова конъюнктивная простая форма для (vAwArr) V (uArcAz) V (гсЛз/Az)? 24. [MS0] Рассмотрим полное бинарное дерево с 2к ли- стьями, показанное здесь для к = 3. Применяя пооче- , . (лГ Тл) (аг Та) редно Л и V на каждом уровне, назначая корню Л, для аа аа аа аа данного примера мы получим ((то Л xi) V (гсг Л а?з)) Л 1—U 15111511 с®! cEZJ ((т4 Л тз) V (те Л т?)). Сколько простых импликант содержит получающаяся функция? 25. [MSI] Сколько простых импликант имеет (я^ХАгг) Л (гггХ/гсз) Л • • - Л (rcn-iVrc„)? 26. [MS3] Пусть У и Q представляют собой семейства множеств индексов для простых дизъюнктов и простых импликант монотонной конъюнктивной нормальной формы и мо- нотонной дизъюнктивной нормальной формы: = Д\/хс, д(х) = У Д Xj. renter JegjeJ Эффективно найдите х, такое, что /(т) 0 р(т), если выполняется любое из следующих условий. а) Существуют I G У и J € G, такие, что IП J = 0. б) U/eJ7 / UjGff в) Существует I € У, такое, что |7| > |£/|, или J € Q, такое, что |J| > |.F|. г) г"-111 + 2n4J| < 2"- где n = I U/6^ /|- 27. [M31 ] Продолжая выполнение предыдущего упражнения, рассмотрим следующий ал- горитм X(.F, С), который возвращает либо вектор х, такой, что f(x) д(х), либо значение Л, если f = д. XI. [Проверка необходимых условий.] Возвращает соответствующее значение х, если применимо условие (а), (б), (в) или (г) из упр. 26. Х2. [Выполнено?] Если |^||6| < 1, вернуть Л. ХЗ. [Рекурсия.] Вычислить следующие сокращенные семейства для “наилучшего” индекса к: У1={1\1еУ, к<£1], У0=У1и{1\к^1, 1и{к}еУ}; 6o = {J\JeG,k<£J], gi = G0U{J\k<£J, Ju{fc}6G}- Удалить любой член Уо или Gi, который содержит другой член того же семейства. Индекс к должен быть выбран таким образом, чтобы отношение р = min(|^i|/|^|, |Go|/|S|) было настолько малым, насколько это возможно. Если Х(^о,6о) возвра- щает вектор х, вернуть тот же вектор, расширенный значением Xk = 0. В про- тивном случае, если Х(Л,£1) возвращает вектор х, вернуть тот же вектор, рас- ширенный значением хь = 1. В противном случае вернуть Л. | Докажите, что если N = |У\+|6|, то шаг XI выполняется не более раз. Указание: покажите, что на шаге ХЗ мы всегда имеем р < 1 — 1/lg N. 28. [S1] (У. В. Куайн (W. V. Quine), 1952.) Если f(xi,... ,хп) представляет собой булеву функцию с простыми импликантами pi, ..., рч, положим g{yi,... ,yq) = A/(I;=1 V{% I Pj(t) = 1}. Например, “случайная” функция (22) истинна в восьми точках (28) и имеет пять простых импликант, описанных в (29) и (30); так что g(yi,..., 3/5) в этом случае равна (j/iVp2) Л (pi) Л (P2V3/3) Л (р4) Л (P3V3/5) Л (р5) Л (р5) Л (3/4V3/5) = (3/1Л3/2Л3/4Л3/5) V (3/1Л3/3Л3/4Л3/5).
7.1.1 ОСНОВЫ БУЛЕВОЙ АЛГЕБРЫ 109 Докажите, что каждое кратчайшее DNF-выражение для f соответствует простой импли- канте монотонной функции д. 29. [22] (Несколько последующих упражнений посвящены алгоритмам, работающим с импликантами булевых функций путем представления точек n-мерного куба как п-битовых чисел (bn-i... Ь1Ьо)г, а не как битовых строк xi...xn.) Поясните, как для заданной битовой позиции j и заданных n-битовых значений vo < vi < • • • < vm-i найти все пары (к, к'), такие, что 0 < к < к' <muvki = vk Ф 2J, в возрастающем порядке к. Время работы вашей процедуры должно быть О(т), если битовые операции над n-битовыми словами выполняются за константное время. ► 30. [27] В разделе указывалось, что импликанта булевой функции может рассматривать- ся как подкуб, такой, как 01*0*, содержащийся в множестве V всех точек, для которых эта функция истинна. Каждый подкуб может быть представлен в виде пары бинарных чисел а = (an-i • • • ао)г и b = (bn-i... Ьо)г, где а записывает позиции звездочек, а Ь записывает биты в не-*-позициях. Например, числа а = (00101)г и Ь = (01000)2 представляют подкуб с = 01*0*. Всегда выполняется условие а Ь = 0. “j-двойник” (“j-buddy” ) определен, когда aj = 0, путем изменения Ь на Ь ф V. Напри- мер, 01*0* имеет три j-двойника, а именно 4-двойника 11*0*, 3-двойника 00*0* и 1-двой- ника 01*1*. Каждому подкубу с С V может быть присвоено значение дескриптора (tag value) (tn-i - - - <0)2, где tj = 1 тогда и только тогда, когда j-двойник с определен и содер- жится в V. При таком определении с представляет максимальный подкуб (а следовательно, простую импликанту) тогда и только тогда, когда его дескриптор равен нулю. Используйте эти концепции для разработки алгоритма, который находит все макси- мальные подкубы (а,Ь) данного множества V, где V представлено n-битовыми числами vo <Vl < < vm-l. ► 31. [28] Алгоритм из упр. 30 требует полного списка всех точек, в которых булева функ- ция истинна, а этот список может быть весьма длинным. Следовательно, мы можем предпочесть работать непосредственно с подкубами, никогда не переходя на уровень яв- ных n-кортежей, если это не является необходимым. Ключом к таким высокоуровневым методам является понятие консенсуса между подкубами с и с', обозначаемого как с U cz и определяемого как наибольший подкуб с", такой, что с CcUc, с gc и с с . Такой с" не всегда существует. Например, если с = 000* и с' — *111, каждый подкуб, содержащийся в cllc', содержится либо в с, либо в с'. а) Докажите, что консенсус, если таковой существует, может быть вычислен покомпо- нентно с использованием следующих формул в каждой координатной позиции: a:Uz = a:U* = *Ua: = i и tLIt = *LJ* = * для х = 0 и х = 1. Кроме того, cUcz существует тогда и только тогда, когда правило rcUrr = ♦ используется ровно в одном компоненте. б) Подкуб с к звездочками называется fc-кубом. Покажите, что если с является /с-кубом, а с' является //-кубом и если существует консенсус с" = cldc', то с" является /с"-кубом, где 1 < к" < min(/c, к') + 1. в) Если С и С' являются семействами подкубов, то пусть С LI С' = {сП с | с € С, с' € С7 и с U с' существует}. Поясните, почему работает следующий алгоритм.
110 КОМБИНАТОРНЫЙ ПОИСК 7.1.1 Алгоритм Е (Поиск максимальных подкубов). Для заданного семейства С подкубов n-мерного куба этот алгоритм выводит максимальные подкубы множества V = Ucec с без реального вычисления самого множества V. Е1. [Инициализация.] Установить j Ч— 0. Удалить все подкубы с из С, которые содержатся в других подкубах. Е2. [Выполнено?] (В этот момент каждый j-куб С V содержится в некотором эле- менте С и С не содержит fc-кубов с fc < j.) Если С пустое, алгоритм завершает работу. ЕЗ. [Получение консенсусов.] Установить С1 Ч— С LI С и удалить все подкубы из С', которые являются fc-кубами для k < j. В процессе выполнения этого вычисления выводятся также все j-кубы с € С, для которых с LI С не производит (j + 1)-куба множества С1. Е4. [Продвижение.] Установить С Ч— Си С', но удалить все j-кубы из этого объедине- ния. Затем удалить все подкубы с € С, которые содержатся в других. Установить j ч— j + 1 и перейти к шагу Е2. | (См. в упр. 7.1.3-142 более эффективный способ выполнения этих вычислений.) 32. [M2D] Пусть ci, ..., Ст —подкубы п-мерного куба. а) Докажите, что ci U - • • U Ст содержит не более одного максимального подкуба с, не содержащегося в ci U • • • U cj-i U cj+i U • • • U Cm для любого j € {1,..., m}. (Если c существует, назовем его обобщенным консенсусом ci, ..., Ст, поскольку с = ci 1_1сг при использовании обозначений из упр. 31, когда т = 2.) б) Найдите множество т подкубов, для которых каждое из 2"* — 1 непустых подмножеств множества {ci,..., ст) имеет обобщенный консенсус. в) Докажите, что DNF с т импликантами имеет не более 2m — 1 простых импликант. г) Найдите DNF, которая имеет т импликант и 2m — 1 простых импликант. 33. [М21 ] Пусть f(xi,..., хп) — одна из ) булевых функций, истинных ровно в т точ- ках. Если / выбирается случайным образом, то чему равна вероятность того, что x\f\- -Ля:* является (а) импликантой /? (б) простой импликантой /? [Дайте ответ на п. (б) в виде суммы; но для случая к = п приведите ответ в аналитическом виде.] 34. [ЯМ37] Продолжая выполнение упр. 33, обозначим через с(т, п) среднее общее коли- чество импликант, а через р(т, п) — среднее общее количество простых импликант. а) Покажите, что если 0 < т < 2п/п, то т < с(т, п) < |т + О(т/п) и р(т, п) > те~1 + О(т/п); следовательно, в этом диапазоне р(т,п) = в(с(т,п)). б) Пусть теперь 2n/n < т < (1 — е)2п, где е—фиксированная положительная константа. Определим числа t и amn с помощью отношений n-4/3 < — атп < п~2/3, t—целое. Выразите асимптотические значения с(т, п) и р(т, п) через п, t и атп- [Указание: покажите, что почти все импликанты имеют ровно п — t или п — t — 1 литералов.] в) Оцените с(т, п)/р(т, п) при т = 2п~1 и п = [(Int — lnlnt)22 J для целого t. г) Докажите, что с(т,п)/р(т,п) = O(loglogn/logloglogn) при т < (1 — е)2п. 35. [М25] Дизъюнктивная нормальная форма называется ортогональной, если ее импли- канты соответствуют непересекающимся подкубам. Ортогональные дизъюнктивные нор- мальные формы особенно полезны при вычислениях или оценках полиномов надежности из упр. 13.
7.1.1 ОСНОВЫ БУЛЕВОЙ АЛГЕБРЫ 111 Полная дизъюнктивная нормальная форма каждой функции очевидно ортогональна, поскольку ее подкубы представляют собой отдельные точки. Но мы часто можем найти ор- тогональную дизъюнктивную нормальную форму, которая имеет значительно меньше им- пликант, в особенности когда функция монотонна. Например, функция (xi Лхг) V (тг Ляз) V (Я3ЛЯ4) истинна в восьми точках и имеет ортогональную дизъюнктивную нормальную форму (ххЛхг) V (хгЛхгЛхз) V (ягЛязЛя^)- Другими словами, перекрывающиеся подкубы 11**, *11*, **11 могут быть заменены непе- рекрывающимися кубами 11**, 011*, *011. При использовании для кубов бинарной записи из упр. 30 эти подкубы имеют коды звездочек ООП, 0001, 1000 и битовые коды 1100, 0110, ООП. Каждая монотонная функция может быть определена с помощью списка битовых кодов Bi, ..., Вр, когда кодами звездочек являются соответственно Bi, ..., Вр. Пусть для такого заданного списка “тенью” Sk кода Вк является побитовое ИЛИ Bj & Вк для всех 1 < j < к, таких, что v(Bj & Вк) = 1: Sk = fak I • • • | /3(fc_1)fc, 0jk = ((BjbBk) ф ((BjbBk) - 1)) ((BjbBk) - 1). Например, когда битовыми кодами являются (Bi, В2, Вз) = (1100,0110, ООП), мы получим коды теней (Si,S2,S3) = (0000,1000,0100). а) Покажите, что коды звездочек А'- = В,- — Sj и битовые коды Bj определяют подкубы, которые покрывают те же точки, что и подкубы с кодами звездочек Aj = Bj. б) Список битовых кодов Bi, ..., Вр называется разверткой (shelling), если Bj & Sk ненулевое для всех 1 < j < к < р. Например, (1100,0110,0011) является разверткой; но если мы расположим битовые коды в ином порядке (1100,0011,0110), то условие развертки будет нарушено при j = 1 и к = 2, хотя мы имеем S3 = 1001. Докажите, что подкубы в п. (а) непересекающиеся тогда и только тогда, когда список битовых кодов является разверткой. в) Согласно теореме Q среди В при представлении монотонной булевой функции таким способом должна появляться каждая простая импликанта. Но иногда нам требуется добавить дополнительные импликанты, если мы хотим, чтобы кубы были непересе- кающимися. Например, не существует развертки для битовых кодов 1100 и ООП. Покажите, что мы можем, однако, получить развертку для функции (xi Лхг)У(хзЛх4,), добавляя еще один битовый код. Какой вид имеет получающаяся в результате дизъ- юнктивная нормальная форма? г) Переставьте битовые коды {11000,01100,00110,00011,11010} так, чтобы получить раз- вертку. д) Добавьте два битовых кода к множеству {110000,011000,001100,000110,000011}, что- бы получить развертку. 36. [М21] Продолжая выполнение упр. 35, пусть f—любая монотонная функция, не идентичная 1. Покажите, что множество битовых векторов В = {а: | f(x) = 1 и f(x) =0}, х = x&l (х—1), всегда разворачиваемо при перечислении в уменьшающемся лексикографическом порядке. (Вектор х' получается из х путем обновления крайней справа единицы.) Например, этот метод дает ортогональную дизъюнктивную нормальную форму для (я^Ляг) V (Я3ЛЯ4) из списка (1Ю0,1011,0111,0011). 37. [AfSl] Найдите разворачиваемую дизъюнктивную нормальную форму для (11ЛТ2) V (хзКх^уч- -V(a:2n-iAa:2n), имеющую 2n —1 импликант, и докажите, что для этой функции не имеется ортогональной DNF с меньшим количеством импликант.
112 КОМБИНАТОРНЫЙ ПОИСК 7.1.1 38. [05] Сложно ли проверить выполнимость функций в дизъюнктивной нормальной форме? ► 39. [25] Пусть /(xi,... ,хп)—булева формула, представленная в виде расширенного би- нарного дерева с N внутренними узлами и N+1 листьями. Каждый лист помечен перемен- ной хь, а каждый внутренний узел помечен одним из шестнадцати бинарных операторов из табл. 1; применение операторов снизу вверх дает f(xi,..., хп) в качестве значения корня. Поясните, как построить формулу F(xi,..., хп, yi,..., ум) в виде 3CNF, имеющей ров- но 47V + 1 дизъюнктов, таких, что f(xi,..., хп) = В yi... ЗумР(х1,, хп, yi,..., ум). (Та- ким образом, / выполнима тогда и только тогда, когда выполнима F.) 40. [23] Постройте для данного неориентированного графа G следующие дизъюнкты на булевых переменных {putJ | и г;} U {gut)w | и и, и w, v w, и w], где и, v и w означают вершины G: А = (.Puv V Pvu) Л (Puv V Pvu) | и v В = Д { (puv V pvw V Puw) | и / v, и / w, v / w }; C = Д{ (^iwVput) Л (guuwVp^w) Л (guuwVpuvVp,,™) I и / v, и / w, v / w, u—/— w}; О = Д{(Уog{u,w} (Quuw V Qwvu)} | U "Wj W Докажите, что формула А Л В Л С Л D выполнима тогда и только тогда, когда G имеет гамильтонов путь. Указание: рассмотрите Puv как утверждение ‘и < v\ 41. [20] (Принцип голубиного гнезда.) На острове Перистери имеется т голубей и п гнезд. Найдите конъюнктивную нормальную форму, которая выполнима тогда и только тогда, когда каждый голубь -может сам занимать как минимум одно гнездо. 42. [20] Найдите короткую невыполнимую конъюнктивную нормальную форму, которая не является тривиальной, хотя и состоит полностью из дизъюнктов Хорна, являющихся одновременно дизъюнктами Крома. 43. [20] Существует ли эффективный способ выяснить выполнимость конъюнктивной нормальной формы, полностью состоящей из дизъюнктов Хорна и/или дизъюнктов Крома (возможно, смешанных)? 44. [М23] Завершите доказательство теоремы Н, рассматривая следствия (33). 45. [М20] (а) Покажите, что ровно половина функций Хорна от п переменных являются определенными, (б) Покажите также, что функций Хорна от п переменных больше, чем монотонных функций от п переменных (за исключением случая п = 0). 46. [20] Какие из 11 х 11 пар символов ху могут следовать одна за другой в контекстно- свободной грамматике (34)? 47. [20] Для заданной последовательности отношений j -< k с 1 < j, к < п, как в алгорит- ме 2.2.ЗТ (топологической сортировки), рассмотрим дизъюнкты Xji Л • • • Л xjt —V* Xk для 1 < к < п, где {ji,... ,jt} — множество элементов, такое, что j, -< к. Сравните поведение алгоритма С над этими дизъюнктами с поведением алгоритма 2.2.3Т. ► 48. [21] Как протестировать множество дизъюнктов Хорна на выполнимость? 49. [22] Покажите, что если и f(xi,... ,хп), и g(xi,... ,хп) определяются дизъюнктами Хорна в конъюнктивной нормальной форме, то имеется простой способ проверки выпол- нения неравенства f(xi,..., хп) < g(xi,..., хп) для всех xi, ..., хп.
7.1.1 ОСНОВЫ БУЛЕВОЙ АЛГЕБРЫ 113 50. [ЯЩ2] Существует (п + 2)2"-1 возможных дизъюнктов Хорна от п переменных. Выберем с - 2П из них случайным образом, с разрешенными повторениями, где с > 0; пусть также Рп(с) — вероятность того, что все выбранные дизъюнкты одновременно выполнимы. Докажите, что lim Р„(с) = 1 — (1 —е-с)(1 —е-2с)(1—е-4с)(1 —е-8с).... 51. [22] Большое количество игр с двумя игроками может быть определено с помощью ориентированного графа, в котором каждая вершина представляет позицию игры. Имеется два игрока, Алиса и Боб, которые строят ориентированный путь, начиная с определенной вершины, и ходы которых состоят в поочередном добавлении к пути одной дуги. Перед началом игры каждая вершина помечена либо буквой А (означающей победу Алисы), либо буквой В (означающей победу Боба), либо буквой С, или остается непомеченной. Когда путь достигает вершины v, помеченной буквой А или В, этот игрок выигры- вает. Игра заканчивается без победителя, если достигнутая на этом ходу вершина v уже посещалась ранее на ходу того же игрока. Если v помечена буквой С, текущий активный игрок может выбрать ничью; в противном случае он должен выбрать исходящую дугу, продолжающую путь, и активным становится другой игрок. (Если v представляет собой непомеченную вершину с нулевой исходящей степенью, активный игрок проигрывает.) Назначив четыре переменные суждений, А+(и), A~(v), B+(v) и B~(v), каждой вер- шине v графа, поясните, как построить множество определенных дизъюнктов Хорна, та- ких, что А+(г>) находится в ядре тогда и только тогда, когда Алиса может обеспечить победу в случае начала пути из вершины v, и если она ходит первой; A~(v) находится в ядре тогда и только тогда, когда Боб может обеспечить ее проигрыш в данной игре; B+(v) и B~(v) аналогичны А+(г>) и А-(г>), но с обменянными ролями игроков. 52. [25] (Булевы игры.) Любая булева функция f(xi,..., хп) приводит к игре под назва- нием “два шага вперед или один шаг назад” следующим образом: имеются два игрока, 0 и 1, которые многократно присваивают значения переменным х-,; игрок у пытается сделать значение f(xi,..., а?п) равным у. Изначально все переменные не имеют значений, а маркер позиции т равен нулю. Игроки делают ходы, и текущий активный игрок устанавливает либо т <— т + 2 (если т + 2 < п), либо т <— т — 1 (если т — 1 > 1), а затем устанавливает (хт <— 0 или 1, если Хт ранее не было присвоено; ( Хт <— Хт, если хт уже имеет присвоенное значение. Игра завершается, когда значения присвоены всем переменным; победителем становится игрок f(xi,..., хп). Ничья объявляется в том случае, когда некоторое состояние (включая значение т) достигается дважды. Обратите внимание, что в любой момент возможны не более четырех ходов. Изучите примеры этой игры при 2 < п < 9 для следующих четырех случаев: а) f(xi, • • • ,хп) = [яц • • -хп < хп .. .xi] (в лексикографическом порядке); б) f(xi,... ,хп) = xi ф • • • ®in; в) f(xi,...,хп) = [я1...хп не содержит двух последовательных единиц]; г) f(xi,..., хп) = [(яц - - - хп)г — простое число]. 53. [23] Покажите, что невозможное расписание фестиваля из (37) становится возмож- ным, если изменения вносятся в требования одного лишь (a) Tomlin; (б) Unwin; (в) Vegas; (г) Xie; (д) Yankovic; (е) Zany. 54. [20] Пусть S = {ui,U2,-..,u*:} представляет собой множество литералов в некото- ром сильно связном компоненте ориентированного графа, который соответствует 2CNF- формуле, как показанный на рис. 6. Покажите, что S содержит как переменную, так и ее дополнение тогда и только тогда, когда Uj = Ui для некоторого j с 2 < j < к.
114 КОМБИНАТОРНЫЙ ПОИСК 7.1.1 ► 55. [SO] Назовем f(xi,... ,хп) переименованной функцией Хорна, если существуют буле- вы константы yi, ..., уп, такие, что /(xi ф yi,...,хп Ф Уп) является функцией Хорна. а) Для заданной функции /(xi,... ,хп) в конъюнктивной нормальной форме поясните, как построить g{yi,..., t/n) в форме 2CNF так, чтобы дизъюнкты функции f(xi ®У1, .. ,хп®уп) являлись дизъюнктами Хорна тогда и только тогда, когда g(yi, ., j/n )=1. б) Разработайте алгоритм, который за О{т) шагов выясняет, могут ли все дизъюнкты данной CNF длиной т быть преобразованы в дизъюнкты Хорна путем применения дополнения к некоторому подмножеству переменных. ► 56. [20] Задача выполнимости булевой функции f{xi,X2, ,хп) формально может быть сформулирована как вопрос о том, является ли истинной формула с кванторами 3X1 ... f (я 1,Я? 2, • • • , 3?л), здесь ‘Bxj а’ означает “существует булево значение xj, такое, что выполняется а”. Гораздо более общая задача получается при замене кванторов существования Эх3 кванторами всеобщности Vxj, где ‘Vxj а’ означает “для любых булевых значений Xj вы- полняется а”. Какие из восьми квантифицированных формул 3x3yBzf(x,y,z), ЭхЗуУг f(x,y,z), ..., VxVyVzf(x, у, z) истинны, если f(x, у, z) = (xVy) Л (iVz) Л (j/Vz)? ► 57. [SO] (Б. Аспвалл (В. Aspvall), M. Ф. Пласс (M. F. Plass) и P. Э. Таржан (R. E. Tarjan).) Продолжая выполнение упр. 56, разработайте алгоритм, который за линейное время выяс- няет, является ли истинной данная полностью квантифицированная формула f(xi,..., хп), где f представляет собой произвольную 2СКР-формулу (произвольную конъюнкцию дизъ- юнктов Крома). ► 58. [S7] Продолжая выполнять упр. 57, разработайте эффективный алгоритм, выясняю- щий, является ли данная полностью квантифицированная конъюнкция дизъюнктов Хорна истинной. ► 59. [М20] (Д. Пехушек (D. Pehoushek) и Р. Фраер (R. Fraer), 1997.) Покажите, что если в таблице истинности для f(xi,X2,..., хп) единица имеется ровно в к местах, то ровно к из полностью квантифицированных формул Qu C1X2 Qxn f{xi,X2,..., xn), где каждое Q является либо В, либо V, истинны. 60. [12] Какие из приведенных выражений дают медиану (xyz), определенную в (43)? (a) (xA?/)®(t/Az)®(a:Az). (б) (xV?/)®(?/Vz)®(a:Vz). (в) {x®y)A{y®z)A{x®z). (г) {х=у)® (y=z) ф (x=z). (д) (хАу) Л (yAz) Л (xAz). (е) (хАу) V (yAz) V (xAz). 61. [13] Истинно или ложно утверждение: если о представляет собой любой из булевых бинарных операторов из табл. 1, то справедлив закон дистрибутивности w о (xyz) = {(wox) (woy)(woz)). 62. [25] (К. Шенстед (С. Schensted).) Докажите, что если f(xi,... ,хп) представляет собой монотонную булеву функцию и п > 3, то f(x±, , Хп) — , Х1, Xq, Х4, - - - , Хп) f (Х1, Х2, Х2, Х4, . . . , Хп) f(x$, Х2, Xq, Х4, - - • , Я^п)) • 63. [20] Уравнение (49) показывает, как вычислить медиану пяти элементов с помощью медианы трех элементов. Можем ли мы, наоборот, вычислить {xyz) с помощью подпро- граммы, вычисляющей медиану пяти элементов? 64. [23] (Ш. Б. Акерс-мл. (S. В. Akers, Jr.)) (а) Докажите, что булева функция /(xi,..., хп) монотонна и самодуальна тогда и только тогда, когда она удовлетворяет следующему условию. Для всех х = Xi... хп и у = yi ...уп существует к, такое, что f(x) = Хк и f(y) = ук.
7.1.1 ОСНОВЫ БУЛЕВОЙ АЛГЕБРЫ 115 (б) Предположим, что f не определена для некоторых значений, но указанное условие выполняется, когда и f(x), и /(р) определены. Покажите, что существует монотонная самодуальная булева функция д, для которой д(х) = f(x), когда f(x) определена. 65. [М21 ] Любое подмножество X множества {1,2,..., п} соответствует бинарному векто- ру х = Х1Х2 • • • хп согласно правилу Xj = [у С X]. А любое семейство X таких подмножеств соответствует булевой функции f(x) = f(xi ,хг,..., хп) от п переменных согласно правилу f(x) = [ХеХ]. Следовательно, каждое утверждение о семействах подмножеств соответ- ствует утверждению о булевых функциях, и наоборот. Семейство X называется перекрывающимся, если ХПУ 0 0, когда X,Y € X. Перекры- вающееся семейство, теряющее это свойство при попытке добавить другое подмножество, называется максимальным. Докажите, что X является максимальным перекрывающимся семейством тогда и только тогда, когда соответствующая булева функция / монотонна и самодуальна. 66. [Л/25] Комитетом (coterie) {1,...,п} является семейство С подмножеств, называю- щихся кворумами (quorums), которые обладают следующими свойствами, когда Q € С uQ1 € С: (i) Q П Q1 00; (ii) из Q С Q' следует Q = Q'. Комитет С доминирует (dominates) над комитетом С, веля С^С и если для каждого Q' € С имеется Q € С, такой, что Q С Q'. Например, над комитетом {{1, 2}, {2,3}} доминирует {{1,2}, {1,3}, {2,3}}, а также {{2}}. [Комитеты были введены в классических статьях L. Lamport, САСМ 21 (1978), 558-565; Н. Garcia-Molina and D. Barbara, JACM 32 (1985), 841-860. Они имеют массу приложений в протоколах распределенных систем, включая взаимоисключения, репликацию данных и сервера имен. В этих приложениях С предпочитается любому комитету, над которым он доминирует.] Докажите, что С является недоминируемым комитетом тогда и только тогда, когда его кворумами являются множества индексов переменных в простых импликантах монотонной самодуальной булевой функции f(xi,... ,хп). (Таким образом, в табл. 2 иллюстрируются недоминируемые комитеты множества {1,2,3,4}.) 67. [1W30] (Д. У. Милнор (J. W. Milnor) и К. Шенстед (С. Schensted).) Треугольная сетка порядка п, показанная здесь для п = 3, содержит (п + 2)(п + 1)/2 точек с неотрицательными “барицентрическими коорди- натами” xyz, где х + у + z = п. Две точки являются смежными, если они отличаются на ±1 ровно в двух координатных позициях. О точке говорят, что она лежит на стороне х, если ее координата х равна нулю, на стороне у, если ее координата у равна нулю, и на стороне z, если ее координата z равна нулю; таким образом, каждая сторона содержит п + 1 точек. Если п > 0, точка лежит на двух разных сторонах тогда и только тогда, когда она занимает одну из трех угловых позиций. “Y” представляет собой связное множество точек как минимум с од- ной точкой на каждой стороне. Предположим, что каждая вершина треугольной сетки накрывается белым или черным камнем. Например, 52 черных камня в показанной на рисунке справа треугольной сетке образуют (несколько деформированную) Y; но если любой черный за- менить белым, то получится белая Y. Если немного подумать, стано- вится интуитивно понятно, что при любом размещении черные камни образуют Y тогда и только тогда, когда белые камни ее не образуют. 0*0 оо«о 000*0 о***оо 0*00000 0*0*000*0 о*о*о**о*о оо*о**о*о*о ооо*оо*о*о*о О**О***О*О*ОО о*о*оооо*о*ооо •*оо*****оо***о 00000000000000*0 Мы можем представить цвет каждого камня булевой переменной со значением 0 для белого и 1 для черного камня. Пусть Y(t) = 1 тогда и только тогда, когда существует черная Y, где t — треугольная сетка, включающая все булевы переменные. Ясно, что эта функция Y монотонна; а интуитивно понятное утверждение из предыдущего абзаца
116 КОМБИНАТОРНЫЙ ПОИСК 7.1.1 эквивалентно утверждению, что Y, кроме того, еще и самодуальна. Цель данного упраж- нения—доказать утверждение строго, с применением алгебры медиан. Пусть для данных а, Ь, с > 0 tube представляет собой треугольную подсетку, содержа- щую все точки, координаты которых xyz удовлетворяют условиям х > а, у > b, z > с. Например, tool обозначает все точки, за исключением тех из них, которые находятся на стороне z (нижняя строка). Заметим, что если а + b + с = п, tabc является единственной точкой с координатами abc; а в общем случае tabc представляет собой треугольную сетку порядка п — а — b — с. а) Если п > 0, пусть t* —треугольная сетка порядка п — 1, определяемая правилом t^yz — (t(&+l')yzt&(y+l')ztxy(z+l')) ДЛЯ X + у + Z — П 1. Докажите, что Y(t) = Y(t*). [Другими словами, t* сжимает каждый маленький треугольник камней, беря медиану их цветов. Повторение этого процесса определяет пирамиду камней, на вершине которой будет находиться черный камень тогда и толь- ко тогда, когда в нижнем слое имеется черная Y. Очень интересно применить этот принцип сжатия к приведенной на рисунке деформированной Y.] б) Докажите, что, если п > 0, Y(t) = (Y(tioo)Y(toio)Y(tooi))- 68. [^б] Показанная в предыдущем упражнении конфигурация содержит 52 черных кам- ня. Каково наибольшее количество черных камней может быть в такой конфигурации? (Иначе говоря, сколько переменных может быть в простой импликанте функции Y(t)?) 69. [М2б] (К. Шенстед (С. Schensted).) В упр. 67 функция Y выражена через медианы. Пусть, наоборот, функция /(xi,... ,хп) является любой монотонной самодуальной булевой функцией с т + 1 простыми импликантами ро, pi, ..., рт. Докажите, что /(xi,... ,хп) = Y(T), где Т представляет собой любую треугольную сетку порядка т — 1, в которой Таьс — переменная, общая для ра и ра+ь+1, при а + Ь+ с = т — 1. Например, когда f(w, х, у,z) = (xwywz), мы имеем т = 3 и f(w, x,y,z) = (w Л х) V (w Л у) V (w Л z) V (х Л у Л z) = Y(xwyw,J • 70. [М20] (А. Мейеровиц (A. Meyerowitz), 1989.) Выберем в данной монотонной самоду- альной булевой функции f(x) = f(xi,..., хп) любую простую импликанту Xj, Л • • • Л Xj„ и положим б(®) = (№0 Л [х /1]) V [а: = t], где t = ti.. .tn — битовый вектор с единицами в позициях {ji,... ,ja}. Докажите, что д(х) также монотонна и самодуальна. (Заметим, что д(х) эквивалентна f(x), за исключением двух точек, t и t.) 71. [М21] Опираясь на аксиомы алгебры медиан (50)-(52), докажите, что длинный закон дистрибутивности (54) является следствием короткого закона (53). 72. [М22] Выведите (58)-(60) из законов медиан (50)-(53). 73. [М32] (Ш. П. Аванн (S. Р. Avann).) Дана алгебра медиан М, отрезки которой опре- деляются в (57), а соответствующий медианный граф определен в (61), и пусть d(u,v) обозначает расстояние от и до г. Пусть также '[нот]’ означает утверждение “х лежит на кратчайшем пути от и до v”. а) Докажите, что [итг?] выполняется тогда и только тогда, когда d(u, v) — d(u, х)+d(x, v). б) Предположим, что х € [и.. и] и и € [т.. р], где х и и у — v представляет собой ребро графа. Покажите, что х — и также является ребром. в) Докажите по индукции по d(u, v), что если т € [и.. г?], то [гл г?]. г) И наоборот, докажите, что из [глг?] вытекает х € [u.. v].
7.1.1 ОСНОВЫ БУЛЕВОЙ АЛГЕБРЫ 117 74. [Л/21] Покажите, что в алгебре медиан, когда w С [т .. j/], w С [т.. z] и w С [j/.. z], то в соответствии с определением (57) w = {xyz}. ► 75. [Л/56] (М. Шоландер (М. Sholander), 1954.) Предположим, что М представляет собой множество точек с отношением промежуточности их лежит между и и v" записываемым как [uxu] и удовлетворяющим трем следующим аксиомам. i) Если [uvu], то и = v. ii) Если [ити] и [зди], то [зди]. iii) Для заданных х, у и z ровно одна точка w = (xyz) удовлетворяет условиям [iwi/], [xwz] и [ywz]. Цель данного упражнения—доказать, что М является алгеброй медиан. а) Докажите закон мажоритарности (хху) = х (50). б) Докажите закон коммутативности {xyz) = (xzy) = • • - = (zyx) (51). в) Докажите, что [uxu] тогда и только тогда, когда х = (uxv). г) Докажите, что если [изд] и [uj/u], то [зди]. д) Докажите, что если [uxu] и [uyz], и [vyz], то [xyz]. Указание: постройте точки w = (yuv), р = (wux), q = (wvx), г - (pxz), s = (qxz) и t = (rsz). e) Наконец выведите короткий закон дистрибутивности (53): {{xyz)uv) = (x{yuv){zuv)). 76. [Л/33] Выведите аксиомы промежуточности (i)—(iii) из упр. 75, исходя из трех аксиом медиан (50)-(52), полагая [uxu] сокращенной записью для их = {uxv)n. Не используйте закон дистрибутивности (53). Указание: см. упр. 74. 77. [MS8] Пусть G представляет собой медианный граф, содержащий ребро г — з. Для каждого ребра и — v будем называть и ранним соседом v тогда и только тогда, когда г ближе к и, чем к v. Разобьем вершины на “левые” и “правые” где левые вершины ближе к г, чем к з, а правые ближе к з, чем к г. Каждая правая вершина v имеет ранг, который представляет собой кратчайшую дистанцию от v до левой вершины. Аналогично каждая левая вершина и имеет ранг 1 — d, где d равно кратчайшему расстоянию от и до правой вершины. Таким образом, вершина и имеет нулевой ранг, если она смежна с правой вершиной, в противном случае ее ранг отрицателен. Ясно, что вершина г имеет ранг 0, а вершина з имеет ранг 1. а) Покажите, что каждая вершина с рангом 1 смежна ровно с одной вершиной с рангом 0. б) Покажите, что множество всех правых вершин выпукло. в) Покажите, что множество всех вершин с рангом 1 выпукло. г) Докажите, что шаги 13-19 подпрограммы I корректно маркируют все вершины с ран- гом 1 и 2. д) Докажите корректность алгоритма Н. ► 78. [М26] Докажите, что если вершина v рассматривается в процессе выполнения алго- ритма Н на шаге 14 к раз, то граф имеет как минимум 2к вершин. Указание: имеется к способов начать кратчайший путь от v до а; таким образом, в l(v) имеется как минимум к единиц. ► 79. [Л/27] (Р. Л. Грэхем (R. L. Graham).) Порожденный подграф гиперкуба представляет собой граф, вершины которого v могут быть помечены битовыми строками I (v) таким образом, что и — v тогда и только тогда, когда 1(и) и l{v) отличаются ровно в одной битовой позиции. (Все метки имеют одну и ту же длину.) а) Один из способов определить подграф гиперкуба с п вершинами состоит в том, чтобы положить l(v) равными бинарному представлению v для 0 < v < п. Покажите, что этот подграф имеет ровно f(n) = 52ь=о р(^) Ребер, гДе ^(к)—функция контрольного суммирования (сумма бинарных цифр к). б) Докажите, что f(ri) < n[lgn]/2. в) Докажите, что ни один подграф гиперкуба с п вершинами не имеет больше f{n) ребер.
118 КОМБИНАТОРНЫЙ ПОИСК 7.1.1 80. [27] Неполный куб представляет собой “изометрический” подграф гиперкуба, а имен- но подграф, в котором расстояния между вершинами те же, что и в полном графе. Следо- вательно, вершины неполного куба могут быть помечены таким способом, что расстояние от и до v будет являться “расстоянием Хэмминга” между 1(и) и l(v), а именно р(/(и)ф/(г?)). Алгоритм Н показывает, что каждый медианный граф является неполным кубом. а) Найдите порожденный подграф четырехмерного куба, который не является неполным кубом. б) Приведите пример неполного куба, который не является медианным графом. 81. [16] Каждый ли медианный граф двудольный? 82. [25] Пусть дана последовательность вершин (зд, Vi,..., vt) в графе G. Рассмотрим задачу поиска другой последовательности (ио, щ,... ,ut), для которой ио = vo, а сумма (d(uo,ui) + d(ui,u2) Ч-hd(ut-i,ut)) + (d(ui,i>i) Ч-d(u2,v2) Ч--\-d(ut,vt)) минимизирована (здесь d(u,v) означает расстояние от и др v). (Каждую Vk можно рас- сматривать как запрос ресурса, необходимого в данной вершине; сервер по мере обработки запросов переходит в uk-) Докажите, что если G—медианный граф, то мы получим оптимальное решение путем выбора Uk = (uk-iVkVk+i) для 0 < k < t, я ut = vt. 83. [56] Обобщая упр. 82, найдите эффективный способ минимизировать в медианном графе (d(uo,ui) +d(ui,u2) Ч--hd(ut-i,ut)) + p(d(ui,vi) + d(u2,i>2) 4-l-d(ut,vt)) для заданного положительного отношения р. 84. [SO] Напишите программу для поиска всех монотонных самодуальных функций от пяти переменных. Что собой представляют ребра соответствующего медианного графа? (В табл. 2 проиллюстрирован случай четырех переменных.) 85. [Л/22] Теорема S говорит о том, что каждая формула в 2CNF соответствует медианно- му множеству; следовательно, каждый антисимметричный ориентированный граф, такой как показанный на рис. 6, также соответствует медианному множеству. Какой из этих ориентированных графов точно соответствует приведенному медианному множеству? 86. [15] Если v, w, х, у и z принадлежат медианному множеству X, то будет ли их вычисленная покомпонентно медиана пяти элементов (ywxyz} всегда принадлежать X? 87. [24] Какая CI-сеть строится доказательством теоремы F для свободного дерева (63)? 88. [М21] Мы можем использовать параллельные вычисления для сжатия сети (74) в позволяя каждому модулю действовать как можно ранее. Докажите, что хотя сеть, по- строенная в доказательстве теоремы F, может содержать Q(t2) модулей, она всегда требует не более O(t log t) уровней задержки. 89. [24] Докажите, что когда построение (73) добавляет новый кластер модулей для обес- печения выполнения условия и —> v для некоторых литералов и и v, то оно сохраняет все ранее обеспеченные условия и' v'. 90. [21 ] Постройте CI-сеть со входными битами xi...xt и выходными битами yt.. .yt, где yi = • - - = yt-i = 0 и yt = xi ф • • • ф xt. Попробуйте обойтись O(log t) уровнями задержки.
7.1.1 ОСНОВЫ БУЛЕВОЙ АЛГЕБРЫ 119 fll. U6] Может ли ретрагирующее отображение для меток каждого медианного графа размерности t быть вычислено с помощью CI-сети, имеющей только O(logt) уровней за- держки? [Этот вопрос возник в связи с вопросом существования асимптотически оптималь- ных сетей для аналогичной задачи сортировки; см. М. Ajtai, J. Komlos and Е. Szemer£di, Combinatorics 3 (1983), 1-19.] 92. [^6] Может ли CI-сеть сортировать п булевых входов с меньшим количеством моду- лей, чем “чисто” сортирующая сеть, не содержащая инверторов? 93. [Л/20] Докажите, что каждая ретракция X графа G является изометрическим под- графом G (другими словами, что расстояния в X те же, что и в G; см. упр. 80.) 94. [Л/21] Докажите, что каждая ретракция X гиперкуба является множеством медиан- ных меток, если не рассматривать координаты, являющиеся константами для всех х € X. 95. [Л/25] Истинно или ложно утверждение: множество всех выходных данных, генери- руемых сравнивающе-инвертирующей сетью, когда входные данные пробегают все возмож- ные битовые строки, всегда является медианным множеством. 96. [HMS5] Вместо требования, чтобы константы гщ, W2, ..., wn и t в (75) были целыми, мы можем позволить им быть произвольными действительными числами. Увеличит ли это количество пороговых функций? 97. [10] Какие медианные/мажорирующие функции получаются в (81) при п = 2, wi = w2 = 1 и t = —1, 0, 1, 2, 3 или 4? 98. [MS3] Докажите, что любая самодуальная пороговая функция может быть выражена в виде f(xi, Х2, . • •, хп) = [щ yi Ч-1- vnyn > 0], где каждое у, равно либо Xj, либо х3. Например, 2xi + Зх2 + 5хз + 7x4 + 11хз + 13хв > 21 тогда и только тогда, когда 2хi + 3x2 + 5хз — 7x4 + 11^5 — 13хв > 0. ► 99. [S0] (Й. Э. Мезеи (J. Е. Mezei), 1961.) Докажите, что ((xi . . . Х2я—1> 2/1 • • -2/24-2) = {хг . . .Х2а-1У1 --У21-2)- 100. [S0] Истинно или ложно утверждение: если /(xi,... ,хп) является пороговой функ- цией, то таковыми же являются и функции /(xi,... ,хп) Л x„+i и /(xi,... ,xn) V x„+i. 101. [MS3] Пороговая функция Фибоначчи F„(xi,..., хп) определяется формулой (xf'xp .. .x^bi1^"-2) при п > 3; например, Fr(xi,... ,х?) = (x^xlx^xsxfx?). а) Что собой представляют простые импликанты Fn(xi,... ,хп)? б) Найдите ортогональную дизъюнктивную нормальную форму для Fn(xi,..., хп) (см. упр. 35). в) Выразите Fn(xi,... ,хп) через функцию Y (см. упр. 67 и 69). 102. [MSI] Самодуализация булевой функции определяется формулами /(xo,xi,...,xn) = (хоЛ/(х1,...,х„)) V (хоЛ/(х1,...,х„)) = (xoV/(xi,... ,х„)) Л (x0V/(xi,. ..,х„)). а) Докажите, что если /(xi,..., хп) — любая булева функция, то f самодуальна. б) Докажите, что f является пороговой функцией тогда и только тогда, когда f является пороговой функцией. 103. [HMS5] Поясните, как использовать линейное программирование для проверки по заданному списку простых импликант монотонной самодуальной булевой функции, явля- ется ли она пороговой функцией. Поясните также, как, если функция является пороговой, минимизировать размер ее представления в виде функции мажоризации (х]"1 .. .х„п).
120 КОМБИНАТОРНЫЙ поиск 7.1.1 104. [25] Примените метод из упр. 103 к поиску кратчайших представлений следующих пороговых функций в виде функций мажоризации: К<У Х2Х3Х4Х5 Xq Ху Х& (б) [(3:13:23:33:4)2 > t] для 0 < t < 16 (17 случаев); (в) (з:?9з:26з:з9з:45з:52з:б з:® з:! 3:9 з:10) • 105. [М25] Покажите, что пороговая функция Фибоначчи из упр. 101 не имеет более краткого представления в виде функции мажоризации, чем то, которое использовалось для ее определения. 106. [М25] Операция медианы трех элементов, (xyz), является истинной тогда и только тогда, когда х > у + z. а) Обобщая, покажите, что условие (3:13:2 . - - з:п)2 > (j/ij/2 • • • Уп)г + z можно протестиро- вать путем вычисления медианы 2"+1 — 1 булевых переменных. б) Докажите, что медианы менее чем 2"+1 — 1 элементов недостаточно для решения этой задачи. 107. [17] Вычислите N(f) и Е(/) для 16 функций из табл. 1. (См. теорему Т.) 108. [М21] Пусть g(xo,xi,... ,хп) является самодуальной функцией; таким образом, обозначениях из теоремы Т N(g) = 2". Выразите N(f) и Е(/) через Е(р), когда f(xi,.. хп) представляет собой (а) р(0,з:1,... ,з:п); (б) р(1,з;1,... ,хп)- в 1111111 1111101 [ШОТ 1111001 1П01Ц 1110101 Рис. 8. Бинарная решетка ма- жоризации для строк длиной 5. (См. упр. 109.) iiiooiiTioiwl_______ 1011111 1110001 "7ioloii^271oll^1 1101001 11оомГ^1опгоПо1О111 1100001 10100 Ш00П01 ~~^~~ТО1ооо|^ ^7ooioii Г001001 (ГОбГГ 1000101 1000011 1000001 109. [М25] Говорят, что бинарная строка а = <ц ... ап мажоризируетп бинарную строку Р = bi... Ьп, что записывается как а > Р или Р Ч а, если <ц + • • • + аь > bi + • • + bk для 0 < к < п. а) Пусть а — ai.. ,ап. Покажите, что а > Р тогда и только тогда, когда р > а. б) Покажите, что две любые бинарные строки длиной п имеют наибольшую нижнюю границу а А Р, которая обладает тем свойством, что а > 7 и Р > 7 тогда и только тогда, когда а А Р > 7. Поясните, как вычислить а А Р для заданных а и р. в) Аналогично поясните, как вычислить наименьшую верхнюю границу а V Р, облада- ющую тем свойством, что 7 > а и 7 > Р тогда и только тогда, когда 7 > а V р. г) Истинны или ложны утверждения а /\ (рУу) — (оА/3) V (аЛу); а V (/ЗЛ7) = (aV/3) Л (0V7). д) Будем говорить, что а покрывает Р, если а>/3иа^/3и если из а > 7 > Р вытекает, что либо 7 = а, либо 7 - р. Например, на рис. 8 показано отношение
7.1.1 ОСНОВЫ БУЛЕВОЙ АЛГЕБРЫ 121 покрытия между бинарными строками длиной 5. Найдите простой способ описать строки, покрываемые данной бинарной строкой. е) Покажите, что каждый путь а = оо, oi , • • •, Or = 0... О от данной строки а до 0... О, где oij-i покрывает aj для 1 < j < г, имеет ту же длину г = т(а). ж) Пусть тп(а)—количество бинарных строк 0, таких, что 0 > а. Докажите, что т(1о) = т(а) и тп(Оа) = т(а) + тп(а'), гДе а' представляет собой а с крайней слева 1 (если таковая имеется), замененной на 0. з) Сколько строк а длиной п удовлетворяют условию а > а? 110. [МЙ5] Булева функция называется регулярной (regular), если из х Ч у вытекает, что f(x) < f(y) всех векторов хну, где Ч является отношением мажоризации из упр. 109. Докажите или опровергните следующие утверждения. а) Каждая регулярная функция монотонна. б) Если f представляет собой пороговую функцию (75), для которой wi > u>z > > wn, функция f регулярна. в) Если f такая, как в п. (б), и £(/) = (si,..., sn), то si > sz > • • • > sn. г) Предположим, что f является чистой функцией мажоризации, а именно пороговой функцией вида (86) с а = Ь = 0. Тогда из si > sz > • • • > sn следует, что wi > wz > > wn. 111. [M36] Оптимальным комитетом для системы с вероятностями работоспособности (pi,..., рп) является комитет, соответствующий монотонной самодуальной функции с мак- симальной доступностью среди всех монотонных самодуальных функций от п переменных. (См. упр. 14 и 66.) а) Докажите, что если 1 > pi > ••• > рп > |, то как минимум одна самодуальная функция с максимальной доступностью является регулярной. Опишите ее. б) Кроме того, достаточно проверить оптимальность регулярной самодуальной функ- ции f в точках у бинарной решетки мажоризации, для которых f(y) = 1, но f(x) = 0 для всех х, покрываемых у. в) Какой комитет оптимален, если некоторые из вероятностей < |? ► 112. [М37] (Й. Хастад (J. Hast ad).) Если f(xi,xz,... ,хт) представляет собой булеву функцию, то пусть M(f) является ее представлением в виде мультилинейного полинома с целыми коэффициентами (см. упр. 12). Переставим члены в этом полиноме с исполь- зованием последовательности Чейза о® = 00...0, сц = 10...0, ..., azm-i = 11... 1 для упорядочения степеней; последовательность Чейза, получаемая путем конкатенации последовательностей Ато, ^(тп-1)1, • ••, Аот из 7.2.1.3-(35), обладает тем красивым свой- ством, что aj идентично aj+i за исключением незначительного изменения, либо 0 —> 1, либо 01 —> 10, либо 001 —> 100, либо 10 —> 01, либо 100 —> 001. Например, при т = 4 последовательность Чейза имеет вид 0000,1000,0010,0001,0100,1100,1010,1001, ООП, 0101, ОНО, 1110,1101,1011,0111,1111, соответствующий членам 1, sci, хз, xt, xz, xixz, ..., 2:2X33:4, х^гхзам соответственно; так что соответствующим представлением, скажем, ((xi ф xz) А хз) V (xi А хз A ха) является хз — Х1Х3 + Х1Х4 — хзхз + 2х1Хгхз — Х1Х3Х4, когда члены переставлены в указанном порядке. Пусть теперь F(f) = [старший коэффициент M(f) положителен]. Например, старшим (последним) ненулевым членом ((xi ф xz) А хз) V (xi А хз А ха) в упо- рядочении Чейза является — х^хзха, так что в этом случае F(f) = 0. а) Определите F(f) для каждой из 16 функций в табл. 1.
122 КОМБИНАТОРНЫЙ поиск 7.1.1 б) Покажите, что F(f) является пороговой функцией от п = 2т элементов {/о...оо, /0...01, • • •, /1...11} таблицы истинности функции /. Запишите эту функцию явно для тп = 2. в) Докажите, что когда тп велико, все веса любого порогового представления F должны быть огромными: все их абсолютные значения должны превышать о(Т) у(Т) I к(Т) /«тп—1 -ix(rn) 3 7 15 ...(2 -1) _ 2’n"/2-"-2(3/2)m/ln2+°((6/4),n) п Указание: рассмотрите дискретное преобразования Фурье элементов таблицы истин- ности. 113. [24] Покажите, что трех следующих пороговых операций достаточно для вычисления функции S2,3,6,8,9(:ei, • • •,Ж12) из (91): gi(xi,... ,2:12) = [ря:>6] = (Ixi gz(xi,...,Т12) = [vx-6gi >2] = (l3rri ...хцдЧ); дз(хг,Х12) = [-2т>х + 13pi + 7р2 > 1] = (0®ж? ... ж?2Р1302>- Найдите также четырехпороговую схему, вычисляющую Si,3,5,s(xi,... ,2:12). 114. [20] (Д. А. Хаффман (D. A. Huffman).) Что собой представляет функция 8з,в(х,х, х,х,у,у, г)? 115. [М22] Поясните, почему (92) корректно вычисляет функцию четности хо Ф xj. ф • • • ф Я!2т. 116. [НМ28] (Б. Данхэм (В. Dunham) и Р. Фридшал (R. Fridshal), 1957.) Рассматривая симметричные функции, можно доказать, что булевы функции от п переменных могут иметь много простых импликант. а) .Допустим, что 0 < j < к < п. Для каких симметричных функций f(xi,..., хп) член xi - /\Xj A Xj+i А • • • А Хк является простой импликантой? б) Сколько простых импликант имеет функция £з,4,5,б(а:1, • • •, хд)? в) Пусть Ь(п)—максимальное количество простых импликант среди всех симметрич- ных булевых функций от п переменных. Найдите рекуррентную формулу для 5(п) и вычислите 5(9). г) Докажите, что 5(п) = 0(3"/п). д) Покажите, что, кроме того, существуют симметричные функции f(xi,... ,хп), такие, что и /, и / имеют 0(23п?,2/п) простых импликант. 117. [М26] Дизъюнктивная нормальная форма называется безызбыточной (irredundant), если ни одна из ее импликант не вытекает из другой. Пусть 5*(п)—максимальное ко- личество импликант в безызбыточной дизъюнктивной нормальной форме, взятое по всем булевым функциям от п переменных. Найдите простую формулу для 5*(п) и определите ее асимптотическое значение. 118. [29] Сколько булевых функций f(xi, Х2,хз,ха) имеют ровно тп простых импликант для тп = 0, 1, ... ? 119. [MJ8] Продолжим выполнение предыдущего упражнения. Пусть 5(п)—максималь- ное количество простых импликант в булевой функции от п переменных. Ясно, что 5(п) < 5(п) < 5*(п); чему равно асимптотическое значение 5(п)? 120. [23] Какой вид имеет кратчайшая дизъюнктивная нормальная форма для симмет- ричных функций (а) я:1Фя:2Ф- • -Фтп? (б) So, 1,3,4,6,7(2:1, • • • ,2:7)? (в) Докажите, что каждая булева функция от п переменных может быть выражена как дизъюнктивная нормальная форма не более чем с 2"-1 простыми импликантами.
7.1.1 ОСНОВЫ БУЛЕВОЙ АЛГЕБРЫ 123 121. [М23] Функция (1(х1®Х2)у1у2уз) является частично симметричной, поскольку она симметрична относительно переменных {rc i, Х2} и {yi, у%, уз }, но не относительно всех пяти переменных {жт, xz,yi,У2,уз}- а) Сколько в точности булевых функций f(xi, хт, У1, • • -, Уп) симметричны относи- тельно {яц,... ,хт} и {yi,. . . , уп}1 б) Сколько из этих функций монотонны? в) Сколько из этих функций самодуальны? г) Сколько из этих функций монотонны и самодуальны? 122. [М25] Продолжая выполнять упр. 110 и 121, найдите все булевы функции f(xi,X2, хз,У1,У2,уз,У4,Уз,ув), которые одновременно симметричны относительно {ti,2:2,23}, сим- метричны относительно {гд, у2, , уз}, самодуальны и регулярны. Какие из них являются пороговыми функциями? 123. [-4 б] Определите точное количество самодуальных булевых функций от десяти пере- менных, являющихся пороговыми функциями. 124. [20] Найдите булеву функцию от четырех переменных, эквивалентную 767 другим функциям в соответствии с правилами табл. 5. 125. [18] Какие из классов функций в (95) являются канализирующими? 126. [23] (а) Покажите, что булева функция является канализирующей тогда и только тогда, когда множества ее простых импликант и простых дизъюнктов обладают некоторым простым свойством, (б) Покажите, что булева функция является канализирующей тогда и только тогда, когда ее параметры Чжоу N(f) и Е(/) обладают некоторым простым свойством (см. теорему Т). (в) Определим булевы векторы V(/) = Vt* I Л®) = О и л(/) = Д{*1/(*) = 1} по аналогии с целочисленным вектором Е(/). Покажите, что решить, является ли функция / канализирующей, можно, имея всего лишь четыре вектора—V(/), V(/), А(/) и A(/). 127. [М25] Какие канализирующие функции являются (а) самодуальными? (б) опреде- ленными функциями Хорна? 128. [20] Найдите неканализирующую функцию f(xi,... ,хп), истинную ровно в двух точках. 129. [М25] Сколько существует различных канализирующих функций от п переменных? 130. [М21] Согласно табл. 3 имеется 168 монотонных булевых функций от четырех пе- ременных. Но некоторые из них, наподобие х А у, зависят только от трех или менее переменных. а) Сколько монотонных булевых функций от четырех переменных действительно зави- сят от каждой переменной? б) Сколько из этих функций различны относительно перестановки переменных, как в табл. 4? 131. [HMJ2] Из табл. 3 очевидно, что имеется гораздо больше функций Хорна, чем функ- ций Крома. Каковы асимптотические количества этих функций при п —> оо? 132. [НМЗО] Булева функция д(х) = g(xi,... ,хп) называется аффинной, если она может быть записана в виде уо Ф (xi A yi) ф • • - ф (хп А уп) = (уо + х • у) mod 2 для некоторых булевых констант уо, yi, ..., у„- а) Покажите, что для произвольной заданной булевой функции f(x) некоторая аффин- ная функция совпадает с f(x) в 2"-1 +2"7'2-1 или большем количестве точек х. Указа- ние-. положите з(у) = ^2Х(—1)^^+х'у и докажите, что s(y)s(y®z) = 22n[z = 0... 0] для всех n-битовых векторов z.
124 КОМБИНАТОРНЫЙ поиск 7.1.1 б) Булева функция f(x) называется изогнутой, если нет ни одной аффинной функции, совпадающей с исходной более чем в 2"-1 + 2”/2-1 точках. Докажите, что (Ж1 Л хъ) Ф (тз Л Х4) ф • • • ф (i„-i Л in) Ф h(x2, Х4, ..., хп) является изогнутой функцией при четном п и произвольной h(yi, у%,..., yn/z)- в) Докажите, что f(x) является изогнутой функцией тогда и только тогда, когда 52(/(®) Ф f(x ф у)) = 2”-1 для всех у / 0... 0. г) Покажите, что если изогнутая функция f(xi,... ,хп) представлена мультилинейным полиномом по модулю 2, как в (19), то она никогда не содержит член xi.. ,хг, где г > п/2 > 1. 133. [20] (Марк Э. Смит (Mark A. Smith), 1990.) Предположим, что мы независимо бросаем п монет, чтобы получить п случайных битов, где к-я монета дает бит 1 с вероятно- стью Рк- Найдите способ выбрать (pi,... ,рп) так, чтобы f(xi,... ,хп) = 1 с вероятностью (toil - - - t2n-i)2/(22n—1), где toil • • • <2”-1 является таблицей истинности булевой функции /. (Таким образом, п подходящих случайных монет могут генерировать вероятность с 2"- битовой точностью.) В общем и целом минимизация коммутационных компонентов перевешивает все иные инженерные соображения при проектировании экономичных логических микросхем. — Г. А. КЕРТИС (Н. A. CURTIS), Новый подход к проектированию коммутирующих схем (A New Approach to the Design of Switching Circuits) (1962) Чтобы преуспевать, приходится быть воистину великим вычислителем. Упрощайте, упрощайте! — ГЕНРИ Д. ТОРО (HENRY D. THOREAU), Уальден, или Жизнь в лесу (Walden; or. Life in the Woods) (1854) 7.1.2. Булевы вычисления Наша следующая цель — изучение эффективного вычисления булевых функций, похожее на изучение полиномов в разделе 4.6.4. Естественным способом изучения этой темы является рассмотрение цепочек базовых операций, аналогичных цепоч- кам полиномов, обсуждавшимся в указанном разделе. Булева цепочка (Boolean chain) для функций от п переменных (rri,... ,хп) пред- ставляет собой последовательность (rrn+i,... ,хп+г), обладающую тем свойством, что каждый последующий шаг объединяет два предыдущих: Xi = Xj(i) Oj xk(i-) для п + 1 < г < п + г, (1) где 1 < j(i) < г и 1 < k(i) < i и где — один из шестнадцати бинарных операторов из табл. 7.1.1-1. Например, при п = 3 цепочки Х4 — А 3^2 Ж4 — Х2 Ф #3 Ж5 — ^3 И Х$ — jEj Л Х4 Xq — Х4 V Х$ Я/g — (2)
7.1.2 БУЛЕВЫ ВЫЧИСЛЕНИЯ 125 вычисляют “мультиплексорную” функцию (“if-then-else”) хв = (xi? Х2'- хз), которая возвращает значение х? или хз в зависимости от того, равно ли значение rr i единице (истина) или нулю (ложь). (Обратите внимание, что примере слева в (2) использована упрощенная запись ‘хз = xi Лжз’ для операции НЕ-НО вместо записи в виде'хз = rri Сггз’, которая была использована в табл. 7.1.1-1. Главное в том, что независимо от использованных обозначений каждый шаг булевой цепочки представляет собой булеву комбинацию двух предыдущих результатов.) Булевы цепочки естественным образом соответствуют электронным схемам, при этом каждый шаг цепочки соответствует логическому элементу (“вентилю”), имею- щему два входа и один выход. Инженеры-электронщики традиционно представляют булевы цепочки (2) электронными схемами: Они должны разрабатывать экономичные схемы, зависящие от различных техно- логических ограничений; например, некоторые элементы могут быть более доро- гими, может потребоваться усиление некоторых выходных сигналов, поступающих на несколько разных входов, может быть выдвинуто требование планарности раз- водки, какие-то цепи должны быть максимально короткими... Но в этой книге нас интересует программное, а не аппаратное, обеспечение, так что мы не будем беспокоиться обо всех этих вещах. Для наших целей все логические элементы рассматриваются как равноценные с точки зрения стоимости, а выходные сигналы могут использоваться в качестве входных в любом количестве. (Иначе говоря, наши булевы цепочки сводятся к схемам, в которых каждый элемент имеет два входа и неограниченно используемый выход.)* Кроме того, мы будем изображать булевы цепочки вместо электронных схем наподобие (3) в виде бинарных деревьев, таких, как 12 13 (4) Такие бинарные деревья в случаях, когда промежуточные шаги цепочки исполь- зуются неоднократно, будут иметь перекрывающиеся поддеревья. Каждый внут- ренний узел имеет метку, которая представляет собой бинарный оператор; внешние узлы помечены целыми числами к, представляющими переменные хь- Метка в левом дереве (4) означает оператор НЕ-НО, поскольку х /\ у = [х< у]; аналогично оператор НО-НЕ х Л у может быть представлен меткой узла ‘ (5) ’. * Следует заметить, что не все так просто и в случае программного обеспечения. Даже при указанных автором условиях следует учитывать многие другие факторы. Например, на языке программирования С выражение, выясняющее, является ли данный год у високосным, часто за- писывают следующим образом [см., например, Brian W. Kernighan, Rob Pike. The Practice of Programming (2004), p. 7]: ((yX4 == 0) Mt (yXlOO != 0)) 11 (yX400 == 0). Но стбит переписать его как (уХ4 »= 0) Mt ((yXlOO != 0) II (уХ400 == 0)), что совершенно эквивалентно с точки зрения получаемого результата, как сокращенные логические вычисления С тут же уменьшают среднее время вычисления почти в четыре раза. — Примеч. пер.
126 КОМБИНАТОРНЫЙ ПОИСК 7.1.2 Несколько различных булевых цепочек могут иметь одну и ту же диаграмму в виде дерева. Например, левое дерево в (4) представляет также цепочку ГГ4 = Xi Л ггз, reg = Л a?2 > £б = £5 V з?4. Любая топологическая сортировка узлов дерева дает эквивалентную цепочку. Для заданной булевой функции f от п переменных нам часто желательно найти булеву цепочку, такую, что xn+r — f(xi,... ,хп), где г мало, насколько это воз- можно. Комбинационная сложность C(f) функции / представляет собой длину кратчайшей цепочки, вычисляющей эту функцию. Для краткости мы будем на- зывать C(f) просто стоимостью f. Мультиплексорная функция в приведенных выше примерах имеет стоимость 3, поскольку исчерпывающим перебором можно показать, что она не может быть получена ни одной булевой цепочкой длиной 2. DNF- и CNF-представления f, рассматривавшиеся нами в разделе 7.1.1, редко дают какую-то информацию о C(f), поскольку обычно оказываются возможны существенно более эффективные схемы вычисления. Например, в обсуждении по- сле 7.1.1-(30) мы выяснили, что более или менее случайная функция от четырех переменных, таблица истинности которой имеет вид 1100 1001 0000 1111, не имеет DNF-выражения, более краткого, чем (®1 Л®2 Лх3) V (xi Лх3 ЛХ4) V (ггг Лггз Л£4) V (rri ЛХз). (5) Эта формула соответствует булевой цепочке из 10 шагов. Но эта же функция может быть выражена и более понятно как (((гг2 Лх4) фхз) Ail) ©хз, (6) так что ее сложность не превышает 4. Как можно получать неочевидные формулы наподобие (6)? Мы увидим, что компьютер может находить наилучшие цепочки для функций от четырех перемен- ных без выполнения особо большого количества работы. Тем не менее результат может быть достаточно удивительным даже для людей с немалым опытом работы с булевой алгеброй. Типичный пример этого явления можно увидеть на рис. 9, ил- люстрирующем функции от четырех переменных, которые, пожалуй, представляют наибольший интерес, а именно функции, симметричные относительно перестановки их переменных. Рассмотрим, например, функцию £3,3:4), для которой имеем £1 0000 0000 1111 1111 £2 0000 1111 0000 1111 £3 ООН ООН ООН ООН Xi 0101 0101 0101 0101 £5 — £1 CD £3 ООН ООН 1100 1100 , . £6 = £1 ® £2 0000 1111 1111 0000 £7 = £з ® £4 оно оно оно оно £8 = £5 V £6 ООН 1111 1111 1100 £9 — £б ® £7 ОНО 1001 1001 оно £10 — £8 Л Хд 0001 ОНО ОНО 1000 в соответствии с рис. 9. Здесь же приведена таблица истинности, так что мы легко можем проверить каждый шаг вычислений. Шаг х» дает функцию, истинную при
7.1.2 БУЛЕВЫ ВЫЧИСЛЕНИЯ 127 Рис. 9. Оптимальные булевы цепочки симметричных функций от четырех переменных. х\ 0 12 или rex 0 ггз; а ггэ = ГГ1 ® ггг ® ® ^4 представляет собой функцию четности (гЕ1 + ггг + ггз + ГГ4) mod 2. Следовательно, конечный результат, ггщ, истинен только тогда, когда ровно две из переменных {rri, х?, гсз,гг4} равны 1; это те случаи, которые выполняют ггв и имеют четную четность. Некоторые из других вычислительных схем на рис. 9 также могут быть пояс- нены интуитивно. Но некоторые из цепочек, такие как Si >4, оказываются весьма впечатляющими. Обратите внимание, что в (7) дважды используется промежуточный резуль- тат хв. Фактически для функции 8з(х1,Х2,хз,Х4) не существует шестишаговой цепочки, в которой не использовалось бы дважды некоторое промежуточное под- выражение; все кратчайшие алгебраические формулы для Sz, включая красивые симметричные формулы наподобие ((rri Л rr2) V (гг3 Л rr4)) © ((rri V гг2) Л (rr3 V гг4)), (8) имеют стоимость 7. Но на рис. 9 показано, что все другие симметричные функции от четырех переменных могут быть вычислены оптимальным образом с помощью “чистых” бинарных деревьев без перекрытия поддеревьев, за исключением внешних узлов (которые представляют переменные). В общем случае, если f(xi,..., хп) представляет собой произвольную булеву функцию, мы говорим, что ее длина L(f) равна количеству бинарных операторов в кратчайшей формуле для f. Очевидно, что L(f) > C(f); мы можем легко убе- диться, что L(f) = C(f) при п < 3, рассматривая четырнадцать базовых типов
128 КОМБИНАТОРНЫЙ поиск 7.1.2 функций от трех переменных из 7.1.1-(95). Но мы только что видели, что £(62) = 7 превышает C(S%) = 6 при п — 4. И действительно, L(f) почти всегда существенно больше, чем C(f), при больших п (см. упр. 49). Глубина D(f) булевой функции f представляет собой другую важную меру при- сущей ей сложности: мы говорим, что глубина булевой цепочки равна длине самого длинного нисходящего пути в ее дереве, и D(f) равна минимально достижимой длине при рассмотрении всех булевых цепочек для f. Все цепочки, показанные на рис. 9, имеют не только минимальную стоимость, но и минимальную глубину—за исключением случаев и Si,2, где мы не можем одновременно достичь стоимо- сти 6 и глубины 3. Формула £2,з(Я1,Я2,ЯЗ,Я4) = ((Xj ЛХ2) ® (хз Лх4)) v ((х4 V х2) Л (х3 ® х4)) (9) показывает, что 1)(5'2]з) = 3; подобная формула работает и для Sit2- Оптимальные цепочки для п = 4. Исчерпывающие вычисления для функций от 4 переменных вполне реальны, поскольку такие функции имеют только 216 = 65 536 возможных таблиц истинности. В действительности необходимо рассмотреть только половину этих таблиц, так как дополнение f любой функции f имеет ту же стоимость, длину и глубину, что и сама /. Будем говорить, что /(xi,. •., хп) является нормальной (normal), если /(0,..., 0) = 0, и, в общем случае, что f(X1,...,xn) ф /(0,...,0) (10) представляет собой “нормализацию” f. Любая булева цепочка может быть норма- лизована путем нормализации каждого из ее шагов и соответствующих изменений ее операторов; если (х4,... ,х,-1) являются нормализациями (xi,... ,x,_i) и если Xi = Xj^ Oi xjt(i), как в (1), то Xi, очевидно, является бинарной функцией от х?(ц и xjt(i). (В упр. 7 представлен соответствующий пример.) Следовательно, без потери общности можно ограничиться рассмотрением нормальных булевых цепочек. Заметим, что булева цепочка является нормальной тогда и только тогда, когда каждый из ее бинарных операторов Oj нормален. Имеется только восемь нормаль- ных бинарных операторов, три из которых, а именно ±, L и R, тривиальны. Так что можно считать, что все интересующие нас булевы цепочки образованы пятью операторами, Л, С, Э, V и ф, которые на рис. 9 обозначаются соответственно как (л), @, ©, © и ©. Кроме того, мы можем считать, что на каждом шаге j(i) < k(i). Имеется 215 = 32768 нормальных функций от четырех переменных, и их длины можно без сложности вычислить путем систематического перечисления всех функ- ций длиной 0, 1, 2 и т. д. В самом деле, из L(f) = г вытекает, что f = д о h для некоторых д и h, где L(g) + L(h) = 1— 1, а о представляет собой один из пяти нетривиальных нормальных операторов; так что мы можем действовать следующим образом. Алгоритм L (Поиск нормальных длин). Этот алгоритм определяет L(f) для всех нормальных таблиц истинности 0 < f < 22 -1 путем построения списков всех ненулевых нормальных функций длиной г > 0.
7.1.2 БУЛЕВЫ ВЫЧИСЛЕНИЯ 129 L1. [Инициализация.] Пусть Ь(0) «— 0 и L(f) <— оо для 1 < f < 22" х. Затем для 1 < к < п установить L(xk)«— 0 и поместить Хк в список 0, где Хк = (22” - l)/(22"“fc + 1) (11) представляет собой таблицу истинности для Хк (см. упр. 8.) Наконец, устано- вить с <— 22 -1 — п — 1; с—количество мест, где L(f) = оо. L2. [Цикл по г.] Выполнить шаг L3 для г = 1, 2, ...; в конечном счете алгоритм будет завершен, когда с станет равным 0. L3. [Цикл по j и fc.] Выполнять шаг L4 для j = 0, 1, ... и к = т — 1 — j, пока j < к. L4. [Цикл по д и fc.] Выполнить шаг L5 для всех д в списке j и всех fc в списке fc. (Если j = к, достаточно ограничить fc функциями, которые следуют после д в списке fc.) L5. [Цикл по /.] Выполнить шаг L6 для f = д & h, f = д & h, f = д &h, f — g \ h и f = g®h. (Здесь g&h означает побитовое И над целыми числами g и fc; мы представляем таблицы истинности целыми числами в бинарной записи.) L6. [Функция f новая?] Если L(f) = оо, установить L(f)<— г, с <— с — 1 и поместить / в список г. Завершить работу алгоритма, если с = 0. I В упр. 10 показано, как подобная процедура вычисляет все длины D(f). Ценой небольшой дополнительной работы можно модифицировать алгоритм L так, чтобы он находил лучшую верхнюю границу C(f), вычисляя эвристический битовый вектор ф(ф), именуемый отпечатком (footprint) f. Нормальная булева цепочка может начинаться только 5(”) различными способами, поскольку первый шаггг„+1 должен быть либоххЛггг, либоа^Лггг, либоя^Ляг, либогггУггг, либоггхфхг, либо Т1 Лггз, либо • -, либо ГГп-1 ®хп. Допустим, что — битовый вектор длиной 5("), а С7(/)— верхняя граница C(f) со следующим свойством: каждый единичный бит в ф(Г) соответствует первому шагу некоторой булевой цепочки, вычисляющей f за U(/) шагов. Такие пары ф(/)) могут быть вычислены путем расширения базовой стра- тегии алгоритма L. Изначально мы устанавливаем U(/) «— 1 и устанавливаем ф(/) равным соответствующему вектору 0... 010... 0, для всех функций f стоимостью 1. Затем, для г = 2, 3, ..., мы продолжаем просмотр функций f = д о fc, где U(д) + U(h) = г — 1, как и ранее, но с двумя изменениями: (1) если отпечатки д и h имеют как минимум один общий элемент, а именно если ф(д) & ф(Ь) 0, то мы знаем, что C(f) < г — 1, так что мы можем уменьшить U(/), если оно было > г. (2) Если стоимость д о fc равна (но не меньше) нашей текущей верхней границе U(f), мы можем установить </>(/) <— </>(/) | (ф(д) | </>(fc)), если U(f) = г, и </>(/) «- </>(/) | (ф(д) к </>(fc)), если U(f) — г — 1. Детали вы можете найти в упр. 11. Оказывается, что эта “отпечаточная” эвристика достаточно мощная, чтобы находить цепочки оптимальной стоимости U(f) = C(f) для всех функций f, когда п = 4. Более того, позже мы увидим, что отпечатки также помогают решать и более сложные задачи, связанные с вычислениями. Согласно табл. 7.1.1-5, 216 = 65 536 функций от четырех переменных принад- лежат всего лишь 222 различным классам, если игнорировать мелкие отличия, связанные с перестановкой переменных и/или дополнением значений. Алгоритм L и его варианты приводят к итоговой статистике, показанной в табл. 1. 5 Зак. 3331
130 КОМБИНАТОРНЫЙ ПОИСК 7.1.2 Таблица 1 Количества функций от четырех переменных с данной сложностью C(f) Классы Функции Классы Функции Классы Функции 0 2 10 0 2 10 0 2 10 1 2 60 1 2 60 1 2 60 2 5 456 2 5 456 2 17 1458 3 20 2474 3 20 2474 3 179 56456 4 34 10624 4 34 10624 4 22 7552 5 75 24184 5 75 24184 5 0 0 6 72 25008 6 68 24640 6 0 0 7 12 2720 7 16 3088 7 0 0 *Вычисления с минимальной памятью. Предположим, что булевы значения xi, ... ,хп находятся в п регистрах, и мы хотим вычислить функцию путем выполнения последовательности операций вида Xj(i) X3(i) °» xk(i) ДЛЯ 1 - * - Г> (12) где 1 < j(i) < п и 1 < к(г) < п, a ot является бинарным оператором. В конце вычислений искомое значение функции должно находиться в одном из регистров. Например, при п — 3 четырехшаговая последовательность Х1 «— Х1 ф Х2 х3 «— х3 Л xi Х2 <— Х2 Л Х1 Хз <— Хз V Х2 вычисляет медиану {х^хзХз) (а!1 = 00001111 а?2 = 00110011 а:3 = 01010101) (ал = 00111100 гг2 = 00110011 а* = 01010101) (zi = 00111100 aj2 = 00110011 а:3 = 00010100) (!3) (зс1 = 00111100 aj2 = 00000011 а:3 = 00010100) (ал = 00111100 а?2 = 00000011 а:3 = 00010111) и помещает ее в позицию, которую изначально зани- мало значение хз. (Все восемь возможных вариантов для содержимых регистров приведены здесь в виде таблиц истинности перед и после каждой операции.) В действительности мы можем проверить вычисления, работая одновременно только с одной таблицей истинности, вместо того чтобы отслеживать все три, если проанализируем ситуацию в обратном направлении. Пусть fi(xi,... ,хп) обозначает функцию, вычисляемую шагами I, I +1,..., г последовательности, с пропущенными первыми I — 1 шагами; таким образом, в нашем примере /г(я:1,з:2,Жз) будет пред- ставлять собой результат в хз после шагов хз «— хз Aii, Х2 «— Х2 Aii и хз «— хз Va?2- Тогда функцией, вычисленной в регистре хз всеми четырьмя шагами, будет /ifcl, Х2,Х3) = /2(х1®Х2,Х2,Хз). (14) Аналогично f2(xi,X2,x3) = /з(хг,х2,хз Л хг), /з(х1,х2,х3) = /4(11,12 Aii.is), /4(2:1, £2,^3) = /5(3:1,Х2,х3 V х2) и /5(3:1,12,3:3) = хз. Следовательно, мы можем пройти в обратном направлении от /5 до /4, до • до /1, соответствующим образом работая с таблицами истинности. Предположим, например, что f(xi,Х2,хз) представляет собой функцию, табли- ца истинности которой имеет вид t — 000,10,2(130,40,5030,2', тогда таблица истинности для д(х1,Х2,хз) = f(xi ф Х2,Х2,хз), и = dQdiCieaj 0.4 0.5 (12 tz-з,
7.1.2 БУЛЕВЫ ВЫЧИСЛЕНИЯ 131 получается путем замены ах на ах,, где из х = (ячядозЪ вытекает х' = ((ачФа^яг^зЬ- Аналогично таблица истинности для, скажем, h(xi, Х2, хз) — f(xi,X2,xs Лх±), пред- ставляет собой V = Oq Oq 0,2 d2 @4 O,§ O>q Qi. Мы можем использовать побитовые операции для вычисления и и v из t (см. 7.1.3- (83)): и = t ф ((t ф (t » 4) ф (t «: 4)) & (00110011)2); (15) v = t ф ((t ф (t » 1)) & (01010000)2) (16) Пусть Cm(f)—длина кратчайшего вычисления / с минимальным использова- нием памяти. Принцип обратного вычисления говорит нам, что если мы знаем таблицы истинности для всех функций f с Cm(f) < г, то можем легко найти все таблицы истинности функций с Cm(f) = г. Иначе говоря, мы можем, как и ранее, ограничиться рассмотрением нормальных функций. Тогда для всех нормальных функций д, таких, что Ст(д) — г — 1, мы можем построить 5n(n — 1) таблиц истинности для p(*£l j • • 1 —1 j ° , • •»*^n) (^-^) и маркировать их стоимостью г, если они еще не были маркированы. В упр. 14 по- казано, что все эти таблицы истинности могут быть вычислены с помощью простых побитовых операций над таблицей истинности функции д. Когда п = 4, все, кроме 13 из 222 базовых типов функций, имеют Cm(f) = C(f), так что они могут быть вычислены с минимальным использованием памяти без повышения стоимости. В частности, все симметричные функции обладают этим свойством, хотя этот факт и не совершенно очевиден из рис. 9. Пять классов функций имеют C(f) = 5, но Ст(/) = 6; восемь классов имеют C(f) = 6, но Cm(f) = 7. Наиболее интересным примером последнего типа, вероятно, является функция (xi \/Х2)&(хз Va:4)®(a:i ЛхгАхзЛа^), которая имеет стоимость 6 благодаря формуле xi Ф (х3 V Х4) ф (х2 Л (Si V (хз Л Х4))), (18) но не имеет цепочки с минимальным использованием памяти длиной менее 7 (см. упр. 15). *Определение минимальной стоимости. Точное значение C(f) можно найти на основе наблюдения, что все оптимальные булевы цепочки (xn+i,..., хп+г) для f очевидным образом удовлетворяют как минимум одному из трех условий: i) xn+r = Xj о Хк, где Xj и хк не используют общих промежуточных результатов; ii) xn+i = Xj о Хк, где либо Xj, либо Хк не используется на шагах хп+2, , хп+г; iii) не выполняется ничто из перечисленного выше, даже при перенумерации про- межуточных шагов. В случае (i) мы имеем f = д о h, где С(д) + C(h) = г — 1, и это можно назвать “нисходящим” построением. В случае (ii) мы имеем /(х±,...,хп) — g(xi,... ,Xj~i, Xj охк,Xj+i,...,хп), где С(д) = г — 1; назовем это построение “восходящим”
132 КОМБИНАТОРНЫЙ ПОИСК 7.1.2 Наилучшие цепочки, которые рекурсивно используют только нисходящие по- строения, соответствуют минимальной длине формулы, L(f). Наилучшие цепочки, которые рекурсивно используют только восходящие построения, соответствуют вы- числениям с минимальным использованием памяти и длиной Cm(f). Мы можем поступить еще лучше, объединяя нисходящее и восходящее построения; но при этом мы не знаем, получили ли мы С(/), поскольку цепочка, принадлежащая случаю (iii), может оказаться еще короче. К счастью, такие особые цепочки редки, поскольку они должны удовлетворять более строгим условиям, и для не слишком больших п и г их можно полностью перечислить. Например, в упр. 19 доказывается, что при г < п + 2 таких цепочек не существует; а когда п = 4 и г = 6, имеется только 25 существенно различных цепочек, которые не могут быть укорочены явным образом. Систематически испытывая 5Г вариантов размещения операторов для каждой осо- бой цепочки, по одному для каждого способа назначения нормальных операторов внутренним узлам дерева, мы найдем как минимум одну функцию f в каждом классе эквивалентности, для которой минимальная стоимость C(f) оказывается достижима только в случае (iii). Фактически при п = 4 и г = 6 эти 25 56 = 390 625 проб дают только один класс функций, который не может быть вычислен за шесть шагов ни одной нисходящей- плюс-восходящей цепочкой. Этот отсутствующий класс, типизируемый частично симметричной функцией ((жх^г^з) V хл) Ф (^1 Ахг Ахз), может быть вычислен за шесть шагов соответствующей специализацией любой из первых пяти цепочек, по- казанных выше; например, одним из таких способов является способ х5 = xi А х2, хе = ij V х2, х7 = х3® х5, Х3 — Х4 А Х3, Xq —— А Х7, 1]0 — 3?8 V Хд , (19) соответствующий первой особой цепочке. Поскольку у всех прочих функций длина L(f) < 7, эти вычисления методом проб устанавливают истинную минимальную цену для всех случаев.
7.1.2 БУЛЕВЫ ВЫЧИСЛЕНИЯ 133 Историческая справка. Отчет о первых согласованных попытках оптимально- го вычисления всех булевых функций f(w,x,y,z) появился в Annals of the Com- putation Laboratory of Harvard University 27 (1951), где группа Говарда Айкена (Howard Aiken) представила эвристические методы и обширные таблицы наилучших коммутационных схем, которые они смогли построить. Их мера стоимости V(f) отличалась от рассматриваемой нами стоимости C(f), так как была основана на “управляющих сетках” электровакуумных ламп: у них было четыре типа логиче- ских элементов, НЕ(/), НЕ-И(/, д), ИЛИ(/1,..., Д) и И(Д,... ,/*,), соответственно со стоимостью 1, 2, fc и 0. Каждый вход логического элемента НЕ, НЕ-И или ИЛИ мог быть либо переменной, либо дополнением переменной, либо результатом предыдущего логического элемента; каждый вход И должен был быть выходом либо НЕ, либо НЕ-И, который не мог использоваться где-либо еще. При таком критерии функция могла иметь стоимость, отличную от стоимости ее дополнения. Можно было, например, вычислить х Л у как И(НЕ(а:),НЕ(у)) со стоимостью 2; однако стоимость х V (у Л z) = НЕ-И(х, ИЛИ(у, z)) была равна 4, в отличие от ее дополнения хЛ(у Vz) = и(НЕ(а?), НЕ-И(у, z)) со стоимостью 3. Таким образом, исследователям из Гарварда потребовалось рассмотреть 402 существенно разных класса функций от 4 переменных вместо 222 (см. ответ к упр. 7.1.1-125). Конечно, в то время они работали в основном вручную. Они нашли, что во всех случаях V(/) < 20, за исключением 64 функций, эквивалентных Sb,i (w, х, у, z) V (S2(w, х, у) Л z), которые они вычисляли с помощью 20 управляющих сеток следу- ющим образом: pi = И(НЕ(гг), НЕ(х)), р2 = HE-H(y,z), д3 =И(НЕ(гг),НЕ(х)); f = И(НЕ-И(51,р2),НЕ-И(5з,И(НЕ(у),НЕ(г))), НЕ(И(НЕ(р3), НЕ(у), HE(z))), НЕ(И(НЕ(51), НЕ(52), НЕ(рз)))) • (20) Первая компьютерная программа для поиска вероятно оптимальных схем бы- ла написана Лео Хеллерманом (Leo Hellerman) [IEEE Transactions EC-12 (1963), 198-223], который искал наименьшее количество логических элементов НЕ-ИЛИ, необходимых для вычисления любой данной функции f(x,y,z). Он потребовал, чтобы каждый вход каждого логического элемента был либо недополненной пе- ременной, либо выходом предыдущего элемента; коэффициенты ветвления входов и выходов ограничивались величиной 3. Если две схемы имели одно и то же ко- личество логических элементов, он отдавал предпочтение схеме с меньшей сум- мой входов. Например, он вычислял х = НЕ-ИЛИ(х) со стоимостью 1; х V у V z — НЕ-ИЛИ(НЕ-ИЛИ(гг, у, z)) со стоимостью 2; (xyz) = НЕ-ИЛИ(НЕ-ИЛИ(т, у), НЕ-ИЛИ(т, г),НЕ-ИЛИ(у, z)) со стоимостью 4; Si(x,y,z) = HE-ИЛИ(НЕ-ИЛИ(х,у, z), (xyz)) со стоимостью 6; и т. д. Поскольку коэффициент ветвления выходов был ограничен значением 3, он обнаружил, что каждая функция трех переменных может быть вычислена со стоимостью 7 или менее, за исключением функции четности х ф у ф z = (х = у) = z, где х = у имеет стоимость 4, поскольку представляет собой НЕ-ИЛИ(НЕ-ИЛИ(т, НЕ-ИЛИ(т, у)), НЕ-ИЛИ(у, НЕ-ИЛИ(х, у))).
134 КОМБИНАТОРНЫЙ ПОИСК 7.1.2 Таблица 2 Количества функций от пяти переменных с данной сложностью Классы Функции W) Классы Функции D(f) Классы Функции 0 2 12 0 2 12 0 2 12 1 2 100 1 2 100 1 2 100 2 5 1140 2 5 1140 2 17 5350 3 20 11570 3 20 11570 3 1789 6702242 4 93 109826 4 93 109826 4 614316 4288259592 5 389 995240 5 366 936440 5 0 0 6 1988 8430800 6 1730 7236880 6 0 0 7 11382 63401728 7 8782 47739088 7 0 0 8 60713 383877392 8 40297 250674320 8 0 0 9 221541 1519125536 9 141422 955812256 9 0 0 10 293455 2123645248 10 273277 1945383936 10 0 0 11 26535 195366784 11 145707 1055912608 11 0 0 12 1 1920 12 4423 31149120 12 0 0 Инженеры-электронщики продолжали изучение и других критериев стоимости; функции от четырех переменных казались находящимися вне пределов досягаемос- ти до 1977года, когда Франклин М. Лианг (Frank М. Liang) установил значения C(J), показанные в табл. 1. Неопубликованное решение Лианга основывалось на изучении всех цепочек, которые не могут быть сокращены восходящим построением. Случай п = 5. Согласно табл. 7.1.1-5 имеется 616126 классов существенно раз- личных функций /(тьяг^з,^,^)- В настоящее время компьютеры достаточно быстры, чтобы не пугаться таких чисел; так что автор решил во время написания этого раздела исследовать C(f) для всех булевых функций от пяти переменных. Небольшая доля везения помогла в действительности получить результаты, при- ведшие к статистике, показанной в табл. 2. Для проведения этих вычислений алгоритм L и его варианты были модифи- цированы для работы с представителями классов, а не со всем множеством 231 нормальных таблиц истинности. Метод из упр. 7.2.1.2-20 упрощает генерацию всех функций данного класса по заданной одной из них, приводя к тысячекратному ускорению работы. Восходящий метод был слегка улучшен, позволяя вывести, на- пример, что f(xiAx2,xi\/X2, хз, Х4, хз) имеет стоимость < г, если C(f) = г—2. После того как были найдены все классы со стоимостью 10, нисходящий и восходящий методы оказались способными найти цепочки длиной <11 для всех, кроме семи, классов функций. После этого началась трудоемкая часть работы, в которой были сгенерированы примерно 53 миллиона особых цепочек с п = 5 и г = 11; каждая такая цепочка вела к 511 = 48828125 функциям, некоторые из них, как следовало надеяться, делятся между семью оставшимися загадочными классами. Но, как выяснилось, только шесть из этих классов имеют ll-шаговые решения. Остался один класс, таблица истинности которого имеет вид 169ае443 в шестнадцатеричной записи, и который оказался единственным классом, у которого C(f) = 12 (так же, как и £(/) = 12). Получающиеся в результате конструкции для симметричных функций показаны на рис. 10. Некоторые из них потрясающе красивы; некоторые красиво просты; остальные — просто потрясающи. (Взгляните, например, на 8-шаговое вычисление 82,з(х1,Х2,хз,Х4,хз), или на элегантную формулу для <82,3,4, или на немонотонные
7.1.2 БУЛЕВЫ ВЫЧИСЛЕНИЯ 135 3434 23452345 12 1 2 2 3 4 5 1234 2345 Рис. 10. Булевы цепочки минимальной стоимости для симметричных функций от пяти переменных. цепочки для и £3,4,5.) Кстати, в табл. 2 показано, что все функции от пяти переменных имеют глубину < 4, но на рис. 10 не предпринималось никаких попыток минимизировать глубину. Оказывается, что все эти симметричные функции могут быть вычислены с ми- нимальным использованием памяти без увеличения стоимости. Никакого простого объяснения этому неизвестно. Многоканальный вывод. Зачастую необходимо вычислить несколько различных булевых функций fi(xi,..., хп), ..., хп) с одними и теми же входными
136 КОМБИНАТОРНЫЙ ПОИСК 7.1.2 значениями х±, ..., хп; другими словами, зачастую требуется вычислить мульти- битовую функцию у = f(x), где у = Д ... fm представляет собой бинарный вектор длиной т, ах = х± ...хп является бинарным вектором длиной п. При везении немалая часть работы, выполняемой при вычислении значения одного компонента fj(xi,..., хп), может быть использована в операциях, требуемых для вычисления значений других компонентов Д(з?1,... ,хп). Пусть C(f) = C(fi ...fm)—длина кратчайшей булевой цепочки, которая вы- числяет все нетривиальные функции Д. Точнее говоря, цепочка (xn+i,..., тп+г) должна обладать тем свойством, что для 1 < j < т либо fj(xi,... ,хп) = x^j), либо fj(xi,..., хп) = rrj(j), для некоторого l(j), где 0 < l(j) < п + г, и хо = 0. Ясно, что С(/) < С(Д) + • • • + C(fm), но может оказаться, что мы можем добиться гораздо большего. Предположим, например, что мы хотим вычислить функции Z\ и zq, определя- емые (ziz0)2 = zi+2:2+я3, (21) двухбитовой бинарной суммой трех булевых переменных. Мы имеем Z1 = (Х1Х2Х3) И Zo = 3!1ФХ2фХз, (22) так что отдельные стоимости представляют собой C(z±) = 4 и C(zq) = 2. Но легко увидеть, что объединенная стоимость C(ziZq) не превышает 5, поскольку хг ф х? представляет собой подходящий первый шаг в вычислении каждого бита Zj: Х4 — X1 3?2, %0 — Х5 —— З^з Х4, х6 = хз Л Х4, Х7 = Xi Л Х2, zi = xs = хе V Х7. (23) Кроме того, исчерпывающие вычисления показывают, что C(zjZo) > 4; следователь- но, C(zj z0) = 5. Инженеры-электронщики традиционно называют схему для вычисления (21) полным сумматором (full adder), поскольку п таких “кирпичиков” можно объеди- нить вместе для сложения двух n-битовых чисел. Частный случай (22), когда т3 = 0, также важен, хотя и упрощается до Zi = Х1 Л Х2 И Zq = Xi ф Х2 (24) и имеет сложность 2; инженеры называют его полусумматором (half adder), несмот- ря на тот факт, что стоимость полного сумматора превышает стоимость двух полу- сумматоров. Общая задача сложения в бинарной системе счисления (Хп—1 . • . 3:13:о)2 (у„-1... 3/13/0)2 (25) (zn Zn-i ... Zi Z0)2 состоит в вычислении п + 1 булевых выходов zn...zizo для данных 2п булевых входов xn-i... х^ХоУп-! . У1Уо', она легко решается с помощью формул Cj+1 = (xjy-jCj), Zj = Xj®yj®Cj для 0 < j < п, (26) где Cj представляют собой “биты переноса” и мы имеем со = 0, zn = сп. Следователь- но, можно использовать полусумматор для вычисления ci и zq, за которым следуют
7.1.2 БУЛЕВЫ ВЫЧИСЛЕНИЯ 137 Ti — l полных сумматоров для вычисления прочих си z общей стоимостью 5п — 3. На самом деле, Н. П. Редькин [Проблемы кибернетики 38 (1981), 181-216] доказал, что 5п — 3 шагов действительно необходимы, приведя скрупулезное 35-страничное доказательство по индукции, завершающееся случаем 2.2.2.3.1.2.3.2.4.3(!). Однако глубина такой схемы, равная 2п — 1, слишком велика для практических параллель- ных вычислений, так что большие усилия направлены на разработку схем сложения с глубиной O(log п) и разумной стоимостью. (См. упр. 41-44.) Теперь давайте расширим (21) и попытаемся вычислить обобщенную “контроль- ную сумму” (“sideways sum”) (zLig„j ...ZjZfJa = x1+x2 + --- + xn. (27) Если n = 2fc + 1, мы можем использовать к полных сумматоров, чтобы свести сумму к (xi + + хп) mod 2 плюс к бит с весом 2, поскольку каждый полный сумматор уменьшает количество битов с весом 1 на 2. Например, если п = 9 и к = 4, вычисление имеет вид 3!10 = ГГ1Фа:2ФЯЗ, Zll=a!4®Z5®Z6, rri2 = Z7®Z8®Z9, Я13 = Я1оФЯ11ФЯ12, 2/1 —(371^2 Жз), 2/2 —(3'4^'5^'б)) 2/3 = (^yXgTg), 2/4 — (Я'10Я'11Я'12)> и мы имеем xi Ч----1- хд — х±з + 2(2/1 + 2/2 + 2/з + 2/4)- Если п = 2к четно, применимо аналогичное приведение, но с полусумматором в конце. Биты с весом 2 могут после этого быть просуммированы таким же образом; так что мы получаем рекуррентное соотношение з(п) = 5|п/2] — 3[тг четно] + s(|n/2j), s(0) = О, (28) для общего количества логических элементов, необходимых для вычисления зна- чения ^^gnj... zrz0. (Аналитическая формула для s(ti) приведена в упр. 30.) Мы имеем s(ti) < 5тг, а первые значения 71 = 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 s(ti) = 0 2 5 9 12 17 20 26 29 34 37 44 47 52 55 63 66 71 74 81 показывают, что для небольших п этот метод достаточно эффективен. Например, когда 71 = 5, он дает схему которая вычисляет три различные симметричные функции, Z2 = <84,5(3:1,... ,х$), zi = <82,3(2:1, • ,х$), z0 = £1,3,5(3:1,..., 3:5), всего за 12 шагов. Вычисление <84,5 за 10 шагов является, согласно рис. 10, оптимальным; конечно же, оптимальным является и вычисление >81,3,5 за 4 шага. Кроме того, хотя С(<8г,з) = 8, функция <82,3 вычисляется здесь с помощью ясной 10-шаговой процедуры, которая использует совместно с >84,5 все логические элементы, кроме одного.
138 КОМБИНАТОРНЫЙ ПОИСК 7.1.2 Обратите внимание, что теперь мы можем эффективно вычислить любую сим- метричную функцию, поскольку каждая симметричная функция от {xi,... ,хп} является булевой функцией от -Z[ign] z1z0. Мы знаем, например, что любая бу- лева функция от четырех переменных имеет сложность < 7; следовательно, любая симметричная функция Ski,...,kt(xi^ • • • имеет стоимость не более s(15) + 7 = 62. Сюрприз: симметричные функции от п переменных были среди наиболее сложных для вычисления при малых п и среди простейших при п > 10. Мы также можем эффективно вычислять множества симметричных функций. Если мы хотим, скажем, вычислить все п +1 симметричных функций Sk(xi, •, хп) для 0 < к < п с помощью одной булевой цепочки, нам нужно просто вычислить первые п + 1 минитермов z0, zY, -Z[ignj- Например, когда п = 5, минитермами, дающими все функции Sk, являются соответственно So = zq Л z± Л Z2, Si = zq Л z± Л Z2, . . . , S5 = Zo A Z1 A z2. Насколько трудно вычислить все 2” минитермов от п переменных? Инженеры- электронщики называют эту функцию бинарным декодером “п-к-2”” поскольку он преобразует п бит ад .. .хп в последовательность 2” бит dgdi.. . d2"-i, ровно один из которых равен 1. Принцип “разделяй и властвуй” предполагает, что сначала мы вычисляем все минитермы для первых [п/2] переменных, как и все минитермы для последних |n/2j переменных; после этого 2” логических схем И завершают работу. Стоимость данного метода равна t(n), где t(0) = 4(1) = 0; t(n) = 2” + t([n/2]) + t([n/2j) для n > 2. (30) Так что t(n) = 2” + О(2”/2); это составляет примерно один логический элемент на минитерм. (См. упр. 32.) Функции с множественным выводом часто помогают нам при построении боль- ших функций с одним выводом. Например, мы видели, что сумматор (27) позволяет нам вычислять симметричные функции; декодер “п-к-2”” также имеет много при- менений, несмотря на тот факт, что 2” может быть огромным при болыпйх значени- ях п. Рассмотрим 2т-канальный мультиплексор Mm(xi,..., хт; уо, yi, • • ., 2/2"*-i), известный также как тп-битная функция обращения к памяти, которая имеет п = т + 2т входов и возвращает значение ук, когда (xi... хт)2 = к. По определению мы имеем 2m —1 Л1т(т1,...,з:т;з/о,У1,..-,У2">-1) = V (<1кЛук), (31) к=0 где dk представляет собой fc-й выход бинарного декодера ит-к-2т”. Таким образом, согласно (30) можно вычислить Мт с помощью 2т + (2m—1) + t(m) = Зп + О(\/п) логических элементов. Однако в упр. 39 показано, что в действительности можно уменьшить стоимость до всего лишь 2п + О(у/п). (См. также упр. 79.) Асимптотика. Когда количество переменных было мало, примененные нами ме- тоды исчерпывающего поиска выявили множество случаев, когда булева функция может быть вычислена с удивительной эффективностью. Казалось бы естественным ожидать, что чем больше переменных имеется в наличии, тем больше имеется и воз- можностей для оригинальных вычислений. Но на самом деле ситуация оказывается обратной, по крайней мере со статистической точки зрения.
7.1.2 БУЛЕВЫ ВЫЧИСЛЕНИЯ 139 Теорема S. Стоимость почти каждой булевой функции f(x4,.. .,хп) превышает 2п/п. Говоря точнее, если с(п, г) булевых функций имеют сложность < г, то (г—1)!с(п,г) < 22г+1(п + г — 1)2г. (32) Доказательство. Если функция может быть вычислена за г — 1 шагов, то она также вычислима г-шаговой цепочкой. (Это утверждение очевидно при г = 1; в прочих случаях мы можем положить xn+r = xn+r_i Л xn+r_i.) Мы покажем, что не существует очень много r-шаговых цепочек, следовательно, мы не можем вычислить очень много различных функций со стоимостью < г. Пусть тг— перестановка {1,... ,п 4- г}, которая отображает 1 •—» 1, ..., п >-> п и п + г >—<• п + г; всего имеется (г — 1)! таких перестановок. Предположим, что (тп+1, • • •, хп+г) —булева цепочка, в которой каждый из промежуточных шагов xn+i,..., xn+r_i использовался как минимум в одном из последующих шагов. Тогда переставленные цепочки, определяемые правилом °*7r *£fc(wr)n— ДЛЯ Tl < t < П + Г, (33) отличаются для различных тг. (Если тг отображает а >-» Ь, мы записываем Ь = атг и а = Ьтг-.) Например, если тг отображает 5 н-> 6 >—* 7 •—> 8 »—* 9 •—>5, цепочка (7) превращается в Исходная Переставленная Х5 = Х\ ф Х3, Х5 = Xi ф Х2, xg = xi ф х2, х6 = х3 Ф х4, Х7 = х3 ф х4, х7 = х9 V х5, (34) xg — х§ V xg, Xg — х3 ф х6, Xg = Xg ф Х7, Xg = Х4 ф X3, 2-10 — Xg A Xg, Хщ — X7 A Xg. Заметим, что у нас может быть j'(i) > k'(i) или j'(i) > г, или к'(г) > i в противопо- ложность нашим обычным правилам. Но переставленная цепочка вычисляет ту же функцию хп+г, что и ранее, и не имеет никаких циклов, согласно которым некото- рый элемент косвенно определяется через самого себя, поскольку переставленное Xt представляет собой исходное х^. Мы можем ограничиться рассмотрением нормальных булевых цепочек, как бы- ло замечено ранее. Так что с(п, г)/2 нормальных булевых функций стоимостью < г приводят к (г—1)! с(п, г)/2 различным переставленным цепочкам, где оператор о, на каждом шаге представляет собой Л, V, D или ф. Имеется не более 4г(п+г— 1)2г таких цепочек, поскольку есть четыре варианта выбора Oj и n+r— 1 вариантов выбора каждого из j(i) и к(г) для п < г < п + г. Отсюда следует уравнение (32); исходное утверждение теоремы мы получаем, полагая г = [2п/п]. (См. упр. 46.) | С другой стороны, для любителей бесконечности есть и хорошие новости: ока- зывается, в действительности любую булеву функцию от п переменных можно вы- числить лишь немного больше чем за 2п/п шагов вычислений (даже если отка- заться от применения ф и =) с помощью метода, разработанного К. Э. Шенноном (С. Е. Shannon) и усовершенствованного О. Б. Лупановым [Bel/ System Tech. J. 28 (1949), 59-98, Theorem 6; Известия ВУЗов, Радиофизика 1 (1958), 120-140].
140 КОМБИНАТОРНЫЙ ПОИСК 7.1.2 Фактически подход Шеннона-Лупанова приводит к полезным результатам даже при малых п, так что давайте познакомимся с ним, рассмотрев небольшой пример. /(х1,Х2,я:з,а:4,а:5,а:б) = [(х!Х2Х3х4Х5хе)2 простое] (35) является функцией, которая идентифицирует все 6-битовые простые числа. В ее таблице истинности содержится 26 = 64 бит, и с ними удобно работать, используя массив размером 4 х 16 вместо привязки к одномерной строке. хз = 0000000011111111 х4 = 0000111100001111 х5 = 0011001100110011 Хв = 0101010101010101 xi Х2 = 00 Х1Х2 = 01 Х1Х2 = Ю Х1Х2 = 11 00110101000101001 0101600100000101 J руппа 00000100010100011 0000010000010100 J руппа (36) Строки делятся на две группы по две строки; каждая группа строк имеет 16 столбцов четырех базовых типов, а именно о, ?, J или }. Таким образом, мы видим, что функция может быть выражена как f(xiхв) = ([xjX2 G{00}] А G {0010,0101,1011}]) V ([^1^2 G {01}] А [хз^хзХб G {0001,1111}]) V ([a?iX2 G {00,01}] А [хз^агзХб G {ООН, 0111,1101}]) V ([xiX2 6 {10}] А [хз^хзХб G {1001,1111}]) V ([xix2 G {11}] А [х3х4Х5Х6 е {1101}]) V ([Х1Х2 € {10,11}] А [хзх4х5хб G {0101,1011}]). (37) (Первая строка соответствует группе 1, тип J, затем следует группа 1, тип °, и т. д.; последняя строка соответствует группе 2 и типу }.) Функция наподобие [х3х4х3Xg G {0010,0101,1011}] представляет собой ИЛИ трех минитермов из {хз,а:4,а:5,а:б}. В общем случае можно рассматривать таблицу истинности как массив 2fc х 2п~к с I группами строк, имеющими либо по [2fc/ZJ, либо по }2fc/Z] строк в каждой группе. Группа размером т будет иметь столбцы 2т базовых типов. Мы образуем конъюнкцию (дц(х4,..., х^) A hu(xk+i, • • •, хп)) для каждой группы i и каждого ненулевого типа t, где ди представляет собой ИЛИ всех минитермов множества {xi,... ,Xk} для строк группы, где t имеет 1, a ha представляет собой ИЛИ всех минитермов множества {xt+i,..., хп} для столбцов, имеющих тип t в группе г. ИЛИ всех этих конъюнкций (ди A hu) дает f(x4,..., хп). После того как мы выбрали параметры к и I, где 1 < к < п—2 и 1 < I < 2fc, рабо- та начинается с вычисления всех минитермов множеств {a?i,... ,Xk} и {a?k+i,...,хп} 3at(fc)+t(n— к) шагов (см. (30)). Затем для 1 < i < I мы полагаем группу i состоящей из строк для значений (х4,... ,х^), таких, что (г — 1)2к/1 < (xi.. . Xfc)2 < г2к/1\ она содержит mi = {i2fc/r| — [(г — l)2fc/Z] строк. Мы образуем все функции ди для t G Si, семейства 2mi — 1 непустых подмножеств этих строк; эта задача решается с помощью 2mi — irii — 1 операций ИЛИ над ранее вычисленными минитермами. Мы также образуем все функции hu, представляющие строки ненулевого типа t; для этой цели нам потребуется не более 2п~к операций ИЛИ в каждой группе i,
7.1.2 БУЛЕВЫ ВЫЧИСЛЕНИЯ 141 поскольку мы можем добавить каждый минитерм в функцию h соответствующего типа t с помощью операции ИЛИ. Наконец мы вычисляем f = Vi=i Vtes (9it ко); каждая операция И компенсируется излишней первой операцией ИЛИ при добавлении минитерма в htt. Так что общая стоимость не превышает i t(k)+t(n-k) + (/-1) +52((2™‘-тг-1) +2n“fc + (2mi-2)); (38) 2=1 мы хотим выбрать к и I таким образом, чтобы минимизировать эту верхнюю гра- ницу. В упр. 52 обсуждается наилучший выбор при малых п. Когда же п велико, хороший выбор дает цепочку, доказуемо близкую к оптимальной, по крайней мере для большинства функций. Теорема L. Пусть С(п) обозначает стоимость наиболее дорогих функций от п переменных. Тогда при п —> оо мы имеем Доказательство. В упр. 48 показано, что нижняя граница (39) является следствием теоремы S. Для получения верхней границы мы устанавливаем к = [2 lg nJ и I = [2fc/(n — 31gn)] в методе Лупанова; см. упр. 53. | Синтез хорошей цепочки. Формула (37) —не лучший способ реализации 6-бито- вого детектора простых чисел, но она подсказывает неплохую стратегию. Например, нам не следует выбирать переменные Xj и Х2, чтобы возглавить строки: в упр. 51 показано, что получатся лучшие цепочки, если выбрать строки, основанные на х^хе, а столбцы—на Х1Х2Х3Х4, и в общем случае имеется много способов разбиения таблицы истинности путем выбора множеств из к и п — к переменных. Кроме того, можно улучшить (37), используя наши полные знания обо всех функциях от четырех переменных; нет необходимости вычислять функцию наподо- бие [Х3Х4Х5Х6 G {0010,0101,1011}] начиная с вычисления минитермов для {хз,Х4, Х5,Хб}, если мы знаем лучший способ вычисления каждой такой функции “с нуля” С другой стороны, мы должны вычислять несколько таких функций одновременно, так что подход, основанный на минитермах, в конце концов может оказаться не такой уж плохой идеей. Можем ли мы действительно улучшить его? Давайте попробуем найти хороший способ синтеза булевой цепочки, которая вычисляет заданное множество функций от 4 переменных. Шесть функций от Х3Х4Х5Х6 в (37) достаточно просты (см. упр. 54), так что рассмотрим более инте- ресный пример из повседневной жизни. Семисегментный дисплей представляет собой вездесущий в наше время способ представления 4-битных чисел (х1Х2ХзХ4)з посредством семи точно расположенных сегментов, которые могут быть видимы или невидимы. Эти сегменты традиционно именуются (a, Ь, с, d, e,f, д), как показано на рисунке; мы получаем ‘0’ при включении сегментов (а, Ь, с, d, e,f), а для ‘1’ нужно включить только сегменты (5, с). (Кстати, идея таких дисплеев была придумана Ф. В. Вудом (F. W. Wood), U.S. Patent
142 КОМБИНАТОРНЫЙ ПОИСК 7.1.2 974943 (1910), хотя исходный проект Вуда предусматривал восемь сегментов, так как он считал необходимой диагональную черту в представлении ‘4’.) Обычно се- мисегментные дисплеи поддерживают только десятичные цифры ‘О’, ‘1’, ..., ‘9’; но, конечно, часы настоящих программистов должны уметь показывать время в шестна- дцатеричном формате. Так что мы разработаем семисегментную логику для вывода шестнадцати цифр 0123Ч5БНВ 9 ЯЬсdЕF соответственно для входных данных Х1Х2Х3Х4 = 0000, 0001, 0010, ..., 1111. Другими словами, мы хотим вычислять семь булевых функций, таблицами истинности которых являются соответственно а = 1011 0111 1110 ООН, b = 1111 1001 1110 0100, с = 1101 1111 1111 0100, d = 1011 ОНО 1101 1110, е = 1010 0010 1011 1111, f = 1000 1111 1111 ООН, д = ООН 1110 1111 1111. (42) Если бы мы просто хотели вычислять каждую функцию по отдельности, то уже рассматривавшиеся ранее методы могут указать, как сделать это с минимальной стоимостью С(а) = 5, С(Ъ) = С(с) - C(d) - 6, С(е) = C(f) = 5 и С(д) = 4; общая стоимость всех семи функций будет в таком случае равна 37. Но мы хотим найти единую булеву цепочку, которая содержит их все, и, по-видимому, такая цепочка должна быть намного эффективнее. Как же нам ее найти? Ну, задача поиска истинно оптимальной цепочки для {a,b,c,d,e,f,g}, веро- ятно, неразрешима с вычислительной точки зрения. Но на удивление хорошее решение может быть найдено с помощью пояснявшейся ранее идеи “отпечатков’.’ А именно, мы знаем, как вычислить не только минимальную стоимость функции, но и множество всех первых шагов, согласующихся с этой минимальной стоимостью в нормальной цепочке. Функция е, например, имеет стоимость 5, но только если мы вычисляем ее, начиная с одной из инструкций Хз — Xi (D Х4, Х5 = Х2 Л х3, Х5 = Х2 V Хз. К счастью, один из желательных первых шагов принадлежит четырем из семи отпечатков: функции с, d, f и д могут быть вычислены оптимальным образом начи- ная с шага хз = Х2 Ф Х3. Так что это—естественный выбор; он, по сути, экономит нам три шага, поскольку мы знаем, что теперь для завершения вычислений нам нужны не более чем 33 шага из исходных 37. Теперь мы можем заново вычислить стоимости и отпечатки всех 216 функций, работая, как и ранее, но теперь инициализируя стоимость новой функции хз нулем. В результате стоимости функций с, d, f и д уменьшаются на 1, а также происходит изменение отпечатков. Например, функция а все еще имеет стоимость 5, но ее отпечаток увеличивается от {xi ф х3,Х2 Л х3} до {xi ф x3,xi Л X4,xi Л Х4,Х2 Л х3, Х2 Л Х4,Х2 Ф Х4,Х4 Л хз,Х4 ф Хз}, если функция Хз = Х2 Ф Хз доступна бесплатно.
7.1.2 БУЛЕВЫ ВЫЧИСЛЕНИЯ 143 На поверку шаг хв = xi Л является общим для четырех из новых отпечатков, так что у нас вновь имеется естественный путь для дальнейшего продвижения. А после того как будут проведены заново вычисления с нулевыми значениями стои- мости х$ и хе, следующим желательным шагом в пяти новых отпечатках окажется шаг 377 = хз Л Же- Продолжая таким “жадным” манером, мы не всегда будем такими же везучими, как до сих пор; тем не менее мы получим цепочку из 22 шагов; а Дэвид Стивенсон (David Stevenson) показал, что в действительности достаточно 21 шага при не жадном выборе 37ю: Хз = Х2 ф Хз, 376 = Х1 Л 374, Xj = Хз Л Хв, Хд — Х1 фх2, Хд —— 374 ф Х5, З7ю = хз V хз, 37 ц — Хв ф 27^0, 3712 = Х1 Л 372, Х13 = Хд Л Х12 Х14 = Хз Л Х13 3715 — Хз 3714 Х16 = X! ф X-J, Хп = Х1 V Хд, Х18 = Хз ф 3713 П — 37ig — 2715 Ф 2-18, Ъ = 272о = 2711 Л 3713, С = 3721 = Хз Л 27ц, d = 2722 = 37g Л Xie, С — 3723 27g V 2714, f = 2724 = Хв Л 2715, 9 = 2725 = 277 V Хп- (43) (Это нормальная цепочка, так что она содержит нормализации {a, b, с, d, ё, f, р} вместо {a,b,c,d,e, f,g}. Простые преобразования дают ненормализованные функ- ции без изменения стоимости.) Частично определенные функции. Зачастую на практике выходное значе- ние булевой функции определено только для некоторых входных данных xi... хп, а в прочих случаях оно не имеет никакого значения. Мы можем знать, например, что некоторая входная комбинация никогда не может осуществиться на практике. В таких случаях в соответствующей позиции таблицы истинности мы помещаем звездочку, а не 0 или 1, как в прочих местах. С такой ситуацией можно столкнуться, например, в случае семисегментного дисплея, который нередко используется для вывода лишь десятичных цифр, и его входами могут быть лишь двоично-десятичные числа, для которых (271372273374)2 < 9. Мы можем не беспокоиться о том, какие сегменты будут видны в прочих шести случаях. Так что таблица истинности (42) в действительности принимает вид а = 1011 0111 11** ****, b = 1111 1001 11** ****, с = 1101 1111 11** ****, d = 1011 ОНО 11** ****, е = 1010 0010 10** ****, f = 1000 111* 11** ****, д = ООН 1110 11** ****. (44) (Функция f имеет звездочку и в позиции xi Х2 Х3 374 = 0111, поскольку ‘7’ может выводиться и как 1, и как 9. Оба варианта встречались автору при работе над этим разделом одинаково часто. В свое время встречались также урезанные варианты цифр Б и 9, но, к счастью, они вышли из употребления.) Звездочки в таблице истинности известны как значение безразлично (don’t-ca- res)— странный термин, который могли придумать только инженеры-электронщи- ки. В табл.З показано преимущество возможности произвольного выбора выхода. Например, имеется (х36)213 = 4587520 таблиц истинности с тремя безразличными
144 КОМБИНАТОРНЫЙ ПОИСК 7.1.2 Таблица 3 Количество функций от 4 переменных с d безразличными значениями и стоимостью с c = 0 c = 1 c = 2 c = 3 c = 4 c = 5 c = 6 c = 7 d= 0 10 60 456 2474 10624 24184 25008 2720 d= 1 160 960 7296 35040 131904 227296 119072 2560 d = 2 1200 7200 52736 221840 700512 816448 166144 d= 3 5600 33600 228992 831232 2045952 1381952 60192 d = 4 18200 108816 666528 2034408 3505344 1118128 3296 d= 5 43680 257472 1367776 3351488 3491648 433568 32 d= 6 80080 455616 2015072 3648608 1914800 86016 d= 7 114400 606944 2115648 2474688 533568 12032 d= 8 128660 604756 1528808 960080 71520 896 d= 9 114080 440960 707488 197632 4160 d= 10 78960 224144 189248 20160 d= 11 41440 72064 25472 800 d= 12 15480 12360 1280 d= 13 3680 800 d = 14 480 d = 15 32 d= 16 1 значениями; 69% из них имеют стоимость 4 или менее, хотя только 21% таблиц истинности без звездочек допускают такую экономию. С другой стороны, безраз- личные значения не настолько выгодны, как мы могли бы надеяться; в упр. 63 доказывается, что случайная функция со, скажем, 30% безразличных значений в ее таблице истинности имеет тенденцию к снижению стоимости примерно на 30% по сравнению с полностью заданной функцией. Какова же кратчайшая булева цепочка, вычисляющая семь частично опреде- ленных функций из (44)? Наш жадный метод, основанный на отпечатках, легко адаптируется к наличию безразличных значений, поскольку мы можем объединить с помощью ИЛИ отпечатки всех 2d функций, которые соответствуют шаблону с d звездочками. Начальные стоимости отдельного вычисления каждой функции те- перь уменьшаются до С(а) -- 3, С(Ь) = С(с) = 2, C(d) = 5, С(е) = 2, C(f) = 3, С(д) = 4, что в сумме дает 21 вместо 37. Функция д не становится дешевле, но теперь она имеет больший след. Действуя так же, как и ранее, но с использованием преимуществ, предоставляемых безразличными значениями, теперь мы в состоянии найти подходящую цепочку длиной, равной всего лишь 11, — цепочку, в которой на один выход выполняется менее 1.6 операций(!): Х$ = V Х2, Tg — 37з ® 37g, 377 = 372 A 37g, 37g = 374 V x7i d — Xq — 37g 3-8, f — X1Q — 37g A 378 > Ъ = 37ц = 372 A Xq, a = 3712 = X3 A 379, C = 3713 = 374 A 3710, e — 3714 — 374 V 379, 9 = ^15 = 37g V 37ц. (45) Эта удивительная цепочка, найденная Кори Пловером (Corey Plover) в 2011 году, выбирает 377 нежадным способом. Крестики-нулики. Давайте теперь обратимся к несколько большей задаче, ос- нованной на популярной детской игре. Два игрока по очереди заполняют ячейки решетки 3x3. Один игрок пишет “крестики” X, а второй—“нулики” О. Игра продолжается до тех пор, пока не найдется прямая линия с тремя X или с тремя О (при этом выигрывает соответствующий игрок) или пока все девять ячеек не будут
7.1.2 БУЛЕВЫ ВЫЧИСЛЕНИЯ 145 Я приступил к изучению игры под названием “крестики-нулики".. чтобы выяснить количество комбинаций всех возможных ходов и позиций. Я обнаружил, что это количество сравнительно незначительно. .. .Однако возникла сложность нового рода. Во время хода автомата могло оказаться два хода, в равной мере ведущих его к победе. .. .Если только не принять специальные меры, машина будет пытаться сделать два противоречивых хода. — ЧАРЛЬЗ БЭББИДЖ (CHARLES BABBAGE), Отрывки из жизни философа (Passages from the Life of a Philosopher) (1864) заполнены без победителя (объявляется ничья). Например, игра может протекать следующим образом. (46) Выиграл X. Наша цель — разработать машину для оптимальной игры в крестики- нулики, которая будет делать выигрышный ход в позиции, из которой можно обес- печить победу, и никогда не делает проигрышный ход в позиции, из которой проиг- рыша можно избежать. Говоря более точно, мы хотим получить 18 булевых переменных xi, ..., xg, Oi, ..., og, которые будут управлять лампами для подсветки ячеек в текущей по- зиции. Ячейки пронумерованы цифрами от 1 до 9, как на панели телефона: зЩ. В ячейке j выводится х, если Xj = 1, О, если Oj = 1, либо ячейка остается пустой, если Xj = Oj = 0.* Мы никогда не должны получить Xj = Oj = 1, поскольку это привело бы к выводу ‘®’. Будем считать, что переменные xi... XgOi... од имеют такие значения, что выводится корректная позиция игры, в которой никто не вы- играл. Компьютер ходит крестиками, и в настоящий момент ход компьютера. Мы хотим определить девять функций yi, ..., уд, где yj означает “изменить Xj с 0 на 1” Если текущая позиция — ничья, мы должны сделать тд = • • • = уд = 0; в противном случае ровно одно значение yj должно быть равно 1, и, конечно, выходное значение yj = 1 может появляться, только если Xj = Oj = 0. При 18 переменных каждая из наших девяти функций yj будет иметь табли- цу истинности размером 218 = 262144. Оказывается, что возможны только 4520 корректных входных данных xi... XgOi... од, так что эти таблицы истинности на 98.3% заполнены безразличными значениями. Но и 4520 — слишком много, если надеяться разработать и понять имеющую смысл булеву цепочку интуитивно. В раз- деле 7.1.4 будут рассматриваться альтернативные способы представления булевых функций, при использовании которых зачастую можно работать с сотнями пере- менных, несмотря на то, что связанные с ними таблицы истинности невозможно велики. * Эта постановка задачи основана на посещении автором в начале 1950-х годов Научно-промыш- ленного музея в Чикаго, где он впервые познакомился с магией коммутационных схем. Машина в Чикаго, разработанная около 1940 года У. Кейстером (W. Keister) из Bell Telephone Laboratories, позволяла игроку сделать первый ход. Очень быстро я убедился, что победить ее невозможно; то- гда я решил делать по возможности самые глупые ходы, надеясь, что разработчик не предусмотрел такого дурацкого поведения игрока. Я позволил машине достичь позиции, в которой у нее было два выигрышных хода, и машина сделала их оба! Двойной ход, конечно же, был нарушением правил, так что я одержал моральную победу, несмотря на то, что машина объявила меня проигравшим.
146 КОМБИНАТОРНЫЙ поиск 7.1.2 Большинство функций от 18 переменных требуют более 218/18 логических эле- ментов, но будем надеяться, что нам удастся достичь лучших результатов. Действи- тельно, правдоподобная стратегия для выполнения очередного хода в крестиках- нуликах напрашивается сама собой. Она выражается через условия, которые не так сложно распознать: Wj, X в ячейке j приведет к победе, завершая линию X; bj, О в ячейке j приведет к поражению, завершая линию О; fj, X в ячейке j дает X два способа победить; dj, О в ячейке j дает О два способа победить. Например, ход X в центр игрового поля в (46) обусловлен необходимостью блокиро- вать О, так что это ход типа feg; к счастью, он одновременно является ходом типа /5, обеспечивающим победу на следующем ходу. Обозначим множество побеждающих линий как L = {{1,2,3}, {4,5,6}, {7,8,9}, {1,4,7}, {2,5,8}, {3,6,9}, {1,5,9}, {3,5,7}}. Тогда мы имеем следующее. = хз A Oj; Wj = wij /\ V{i,j,fc}eL(a:« Aik); bj = ™з А VЛ °*); fj =mj A S2({aifc I € L}) dj =m.j A S2{{Pik I {»,j,k} el}) [ход в ячейку j корректен] (47) [ход в ячейку j приносит победу] (48) [ход в ячейку j блокирующий] (49) ; [ход в ячейку j ставит вилку] (50) ; [ход в ячейку j оборонительный] (51) Здесь Oik и Pik означают один X или О вместе с пустым местом, а именно otik = {xiMnk) V (niiAXfc), Pik = (OiAmfc) V (т;Лок). (52) Например, bi = ту Л ((02А03) V (04Л07) V (05Л09)); /2 = т2 Л <8-2(013, «58) = ш2 Л О1з А азе; ds = A S2(Pw,Р2»,Рзз,Pte)- При таких определениях мы можем попытаться упорядочить ходы по рангам следующим образом: {wi,...,we} > {Ь1,...,69} > > {^1,...,<М > {ГП1,...,ТП9}. (53) “Если это возможно — победите; в противном случае, если это возможно,—бло- кируйте противника; в противном случае, если это возможно, — поставьте вилку; в противном случае, если это возможно, — защищайтесь; в противном случае сде- лайте корректный ход” Кроме того, при выборе между корректными ходами пред- ставляется разумным использовать упорядочение Ш5 > 7721 > 772з > ^9 > ^7 > 7722 > 772g > 772g > (54) поскольку средняя ячейка 5 встречается в четырех побеждающих линиях, углы 1, 3, 9 и 7—в трех, а боковые ячейки 2, 6, 8 и 4—только в двух. Мы можем принять этот же порядок индексов и во всех группах ходов {wj}, {bj}, {/>}, {dj} и {mj} в (53). Чтобы гарантировать, что будет выбрано не более одного хода, определим w', b'-, f'j, d}, m'j для обозначения “предшествующий выбор лучше последующего” Таким образом, w'5 = 0, w{ = w5, w'3 = wx V , ..., w4 = w8 V w8, b'5 - w4 V w'4, = b5 V b'5,
7.1.2 БУЛЕВЫ ВЫЧИСЛЕНИЯ 147 ..., т'4 = m8 V т8. Тогда мы можем завершить определение автомата для игры в крестики-нулики, полагая yj - (Wj-Aw<) V (Ь,Л6') V (fjAfj) V (dj-Ad') V (m/m') для 1 < j < 9. (55) Итак, мы построили 9 логических элементов для т, 48 для w, 48 для Ь, 144 для а и (3, 35 для f (с помощью рис. 9), 35 для d, 43 для начальных переменных и 80 для у. Кроме того, мы можем использовать наши знания о частично определенных функциях от 4 переменных для уменьшения шести операций в (52) до всего лишь четырех ________ ________________ otik = (xi®xk) V (о,фок), 0ik = (xi®xk) V (oi®ofc). (56) Эта хитрость экономит нам 48 логических элементов; так что общая стоимость нашего проекта—396 логических элементов. Стратегия игры в (47)-(56) хорошо работает в большинстве случаев, но имеет несколько явных проблем. Например, она позорно проигрывает в игре в которой вторым ходом X является ds, защита от вилки О и который в дей- ствительности заставляет О поставить вилку в противоположном углу! Еще один сбой возникает, например, после позиции z^, когда ход т$ приводит к ничьей z^, z^, z^., z^, z^, вместо победы X, показанной в (46). В упр. 65 вносятся необходимые исправления и получается корректный автомат для игры в крестики- нулики, требующий всего 445 логических элементов. *Функциональное разложение. Если функция f(x\хп) может быть записана в виде g(xi,...,Xfc,h(xfc+i,...,хп)), обычно имеет смысл сначала вычислить у = h(xk+i,... ,хп), а затем — д(х\,... ,хк,у). Роберт Л. Ашенхарст (Robert L. Ashen- hurst) начал изучение таких разложений в 1952 году [см. Annals Computation Lab. Harvard University 29 (1957), 74-116] и заметил, что имеется простой способ распо- знать, что f обладает этим свойством: если записать таблицу истинности f в виде массива 2к х 2п~к, как в (36), со строками для всех наборов значений xi... хк и столбцами для всех наборов значений xk+i хп, то искомые подфункции д и h существуют тогда и только тогда, когда столбцы этого массива имеют не более двух различных значений. Например, таблица истинности для функции {xiXs (13X4X5)), будучи выражена в описанном двумерном виде, представляет собой 00000000 0 0 0 1 0 1 1 1 00010111’ 11111111 Один тип столбцов соответствует случаю h(xk+i,..., тп) = 0; другой соответствует h(xk+i > • • • > хп) — 1- В общем случае переменные X = {xi,... ,хп} могут быть разбиты на любые непересекающихся подмножества Y = {«д, •.. ,ук} и Z = {zi,... ,Zn-k}, и мы можем получить f(x) = g(y,h(z)). Проверить наличие разложения (Y,Z) можно, рассмат- ривая столбцы таблицы истинности размером 2fc х 2n~fc, строки которой соответ- ствуют значениям у. Однако имеется 2П таких способов разбиения X; и все из них являются потенциальными победителями, за исключением тривиальных случаев,
148 КОМБИНАТОРНЫЙ поиск 7.1.2 когда |К| = О или |Z| < 1. Как же нам избежать изучения такого значительного количества возможностей? Практичный способ решения этой задачи был открыт В. Ю.-Ш. Шеном (V. Y.-S. Shen), А. Ч. Мак-Келларом (А. С. McKellar) и П. Вайнером (Р. Weiner) [IEEE Transactions С-20 (1971), 304-309], метод которых обычно требует только О(п2) шагов для идентификации любого потенциально полезного разбиения (У, Z), которое может существовать. Основная идея проста: предположим, что х, 6 Z, Xj 6 Z и хт 6 Y. Определим восемь бинарных векторов Si для I = (/1/2/3)21 где 61 имеет (/1,/2,/з) соответственно в компонентах (i,j, тп) и нули в остальных местах. Рассмотрим любой выбранный случайным образом вектор х = xi... хп и вычислим fl = f(x ф 6i) для 0 < / < 7. Тогда пары появятся в подматрице размером 2x4 таблицы истинности размером 2fc х 2n-fc. Так что разложение невозможно, если эти пары различны или если они содержат три различных значения. Назовем пары хорошими, если все они равны или если они имеют только два разных значения. В противном случае назовем их плохими. Если f имеет, по сути, случайное поведение, то мы быстро найдем плохие пары, если выполним этот эксперимент с несколькими случайным образом выбранными векторами х, поскольку только 88 из 256 возможных вариантов для /0/1 • • /7 соответствуют хорошему множеству пар; вероятность найти хорошую пару в строке десять раз подряд составляет всего лишь (^)10 « .00002. А когда мы найдем плохие пары, мы сможем сделать вывод, что Xi Z и Xj G Z г хт G Z, (39) поскольку альтернатива хт 6 Y невозможна. Предположим, например, что п = 9 и что / — функция, таблица истинности которой 11001001000011.. .00101 состоит из 512 старших битов числа тг в бинарной записи. (Это “более-менее случайная функция” которую мы изучали для п = 4 в (5) и (6) выше.) Плохие пары этой “тг-функции” быстро находятся в каждом из случаев (г, j, тп), для которых тп i < j тп. Фактически в экспериментах автора 170 из 252 случаев были разрешены немедленно; среднее количество случайных векторов х на один случай составило лишь 1.52; и только один случай потребовал целых восьми х др того, как появилась плохая пара. Таким образом, (59) выполняется для всех подходящих (г, j, тп) и функция, очевидно, неразложима. В действительности, как указывает упр. 73, нам не требуется выполнять 252 теста для установления факта неразложимости тг-функции; для этого должно быть достаточно лишь Q) — 36 из них. Обратимся к менее случайной функции. Пусть f(xi,... ,xg) = (det X) mod 2, где (Xi X2 x3 X4 T5 Xg Xt X8 Xg (60)
7.1.2 БУЛЕВЫ ВЫЧИСЛЕНИЯ 149 Эта функция не удовлетворяет условию (59) при г = 1, j — 2 и m = 3, поскольку в этом случае плохих пар нет. Но она удовлетворяет (59) для 4 < т < 9 при {г, j} = {1,2}. Мы можем записать это поведение с помощью удобной аббревиатуры ‘12 => 456789’; полное множество импликаций для всех пар {г, j} имеет вид 12 => 456789 18 => 34569 27 => 34569 37 24568 48 => 12369 67 12358 13 => 456789 19 => 24568 28 => 134679 38 =* 14567 49 =* 12358 68 =* 12347 14 => 235689 23 =>456789 29 => 14567 39 => 124578 56 => 123789 69 => 124578 15 => 36789 24 => 36789 34 => 25789 45 => 123789 57 => 12369 78 => 123456 16 => 25789 25 => 134679 35 => 14789 46 => 123789 58 => 134679 79 => 123456 17 => 235689 26 14789 36 => 124578 47 => 235689 59 => 12347 89 123456 (см. упр. 69). При проверке этой функции случайным образом плохие пары найти несколько сложнее: среднее количество требуемых х в экспериментах автора при этом увеличилось до примерно 3.6 (при существовании плохих пар). И, конечно же, требуется ограничить тестирование, выбирая допустимый порог t; после t последо- вательных неудачных попыток найти плохие пары дальнейшие попытки прекраща- ются. Выбор t = 10 должен привести к нахождению всех, кроме 8, импликаций из перечисленных выше 198. Импликации типа (59) являются дизъюнктами Хорна, а из раздела 7.1.1 мы знаем, что из дизъюнктов Хорна легко делать последующие выводы. Действитель- но, метод из упр. 74 приводит к выводу после рассмотрения менее чем 50 вариантов что единственным возможным разбиением с \Z\ > 1 является тривиальное разбиение (У = 0, Z = {xi,... ,xg}). Аналогичные результаты получаются и при f(xi,... ,хд) = [регХ > 0], где ‘per’ обозначает функцию перманента. (В этом случае f говорит нам о том, существует ли совершенное паросочетание в двудольном подграфе Кзд, ребра которого опреде- ляются переменными xi.. .х$.) Теперь у нас имеется всего 180 импликаций, 12 => 456789 18 = >3459 27 = >3459 37 = >2468 48 = > 1269 67 = > 1358 13 = > 456789 19 = >2468 28 = > 134679 38 = > 1567 49 = > 1358 68 = >2347 14 = > 235689 23 = > 456789 29 = > 1567 39 = >124578 56 = > 123789 69 = >124578 15 => 3678 24 = >3678 34 = >2579 45 = > 123789 57 = > 1269 78 = >123456 16 = >2579 25 = >134679 35 = > 1489 46 = > 123789 58 = >134679 79 = >123456 17 => 235689 26 => 1489 36 => 124578 47 = > 235689 59 = > 2347 89 => 123456, только 122 из которых будут обнаружены при t = 10 в качестве порогового значения. (Наилучший выбор t неясен; вероятно, он должен варьироваться динамически.) Тем не менее этих 122 дизъюнктов Хорна более чем достаточно, чтобы установить неразложимость. А что можно сказать о разложимых функциях? В случае функции f = (Х2Х3 хв xg{xiXiX5XtX8)) мы получаем для всех т $ {г, j}, за исключением случаев, когда {i,j} С {1,4,5,7,8}; в последнем случае т также должно принадлежать {1,4,5,7,8}. Хотя при пороге t = 10 находятся только 185 из этих 212 имплика- ций, очень быстро обнаруживается весьма вероятное разбиение Y = {х2,хз,Хб,хд}, Z = {Х1,Х4,Х5,Х7,Хв}. Когда потенциальное разложение оказывается обоснованным таким образом, необходимо убедиться, что соответствующая таблица истинности 2к х 2п~к действи-
150 КОМБИНАТОРНЫЙ ПОИСК 7.1.2 тельно имеет только один или два различных столбца. Но мы с удовольствием затратим 2П единиц времени на такую проверку, поскольку очень сильно упростим вычисление /. Еще одним интересным случаем является функция сравнения / = [(2:12:2^33:4)2 > (2:52:62:72:8)2 +2:9]. Ее 184 потенциально выводимыми импликациями являются 12 = >3456789 18 = > 2345679 27 = > 34689 37 = >489 48 = >9 67 = > 23489 13 = >2456789 19 = > 2345678 28 = > 34679 38 = >479 49 = >8 68 = > 23479 14 = >2356789 23 = >46789 29 = >34678 39 = >478 56 = >1234789 69 = > 23478 15 = >2346789 24 = > 36789 34 = > 789 45 = > 1236789 57 = > 1234689 78 = >349 16 = >2345789 25 = >1346789 35 = > 1246789 46 = > 23789 58 = > 1234679 79 = >348 17 = >2345689 26 = > 34789 36 = > 24789 47 = >389 59 = > 1234678 89 = > 4, и 145 из них обнаруживаются при пороге t — 10. При этом открываются три потенциальных разложения, имеющих Z = 12:4,2:8,2:9}, Z = {хз, Х4, х?, хв, хд} и Z = {2:2, хз, Х4, хв, х7, хв, 2:9} соответственно. Ашенхарст (Ashenhurst) доказал, что мы можем выполнять приведение функции / немедленно по обнаружении нетривиаль- ного разложения; прочие разложения будут обнаружены позже, когда мы будем пытаться приводить более простые функции д и h. *Разложение частично определенных функций. Когда функция / определена только частично, разложение с разбиением (Y,Z) опирается на возможность при- своения конкретных значений безразличным значениям таким образом, что в соот- ветствующей таблице истинности 2fe х 2n-fe имеется не более двух различных видов столбцов. Два вектора, ui...um и vi...vm, состоящие из нулей, единиц и звездочек, называются несовместимыми, если для некоторого j либо uj = 0 и Vj = 1, либо Uj — 1 и Vj = 0 (или, что то же самое, если подкубы m-мерного куба, опреде- ляемые и и v, не имеют общих точек). Рассмотрим граф, вершинами которого являются столбцы таблицы истинности с безразличными значениями, где и — v тогда и только тогда, когда и и v несовместимы. Мы можем присвоить значения звездочкам, чтобы получить не более двух различных видов строк, тогда и только тогда, когда этот граф является двудольным. Если щ, ..., щ взаимно совместимы, их обобщенный консенсус щ LJ • • • LJ щ, определенный в упр. 7.1.1-32, совместим со всеми ними. [См. S. L. Hight, IEEE Trans. С-22 (1973), 103-110; Е. Boros, V. Gurvich, Р. L. Hammer, T. Ibaraki, and A. Kogan, Discrete Applied Math. 62 (1995), 51-75.] Поскольку граф является двудольным тогда и только тогда, когда он не содержит нечетных циклов, мы можем легко проверить это условие с помощью поиска в глубину (см. раздел 7.4.1). Следовательно, метод Шена, Мак-Келлара и Вайнера работает и при наличии безразличных значений: четыре пары в (58) рассматриваются как плохие тогда и только тогда, когда три из них взаимно несовместимы. Мы можем работать почти так же, как и ранее, хотя плохие пары, естественно, искать при наличии множества звездочек труднее (см. упр. 72). Однако теорема Ашенхарста больше не применима. Когда имеется несколько разложений, в дальнейшем все они должны быть изучены, поскольку они могут использовать разные настройки для безразличных значений, и некоторые из них могут быть лучше других.
7.1.2 БУЛЕВЫ ВЫЧИСЛЕНИЯ 151 Хотя большинство функций f(x) не имеют простых разложений g(y,h(z)), мы не должны терять надежду слишком быстро, поскольку к эффективным цепочкам могут привести и другие виды разложений, такие как д(у,hi(z),h2(z)). Если, на- пример, функция / симметрична по трем из ее переменных {2:1,22,Z3}, мы всегда можем написать f(x) = д(у, Si^fzi, Z2, Z3), Si,3(21, г2,гз)), поскольку £1,2(2:1,2:2,23) и Sits(zi,Z2, Z3) характеризуют значение zi + z2 + Z3. (Заметим, что для вычисления как Si,2, так и 51,з достаточно всего четырех шагов.) В общем случае, как заметил Г. А. Кертис (Н. A. Curtis) [JACM 8 (1961), 484-496], f(x) может быть выражена в виде д(у, hi(z),... , hr(z)) тогда и только тогда, когда таблица истинности 2fe x2n~fe, соответствующая У и Z, имеет не более 2Г столбцов различных типов. А при наличии безразличных значений тот же результат справедлив тогда и только тогда, когда граф несовместимости для У и Z может быть раскрашен не более чем 2Г цветами. Например, рассматривавшаяся выше функция /(ж) = (det X) mod 2, как оказы- вается, имеет восемь различных столбцов, когда Z = это на удивление небольшое число, учитывая, что таблица истинности состоит из 8 строк и 64 столбцов. Этот факт может привести нас к открытию того, как разложить детерминант на алгебраические дополнения первой строки, /(а:) = XiAhi(_X4,... ,a:g) ф a^A/^fa^, • • • ,3:9) Ф хзЛЬз(х^,... ,а:д), если мы еще незнакомы с этим правилом. Когда имеется d <2Г различных столбцов, мы можем рассматривать f(x) как функцию от у и h(z), где h отображает каждый бинарный вектор zi... zn-k в одно из значений {0,1,...,d — 1}. Таким образом, (hi,...,hr), по сути, является коди- рованием различных типов столбцов, и мы надеемся найти очень простые функции hi, ..., hr, которые обеспечивают такое кодирование. Более того, если d строго меньше 2Г, функция д(у, hi,..., hr) будет иметь много безразличных значений, ко- торые могут существенно снизить ее стоимость. Различные столбцы могут также предлагать функцию д, для которой h име- ют безразличные значения. Например, мы можем использовать g(yi,y2,hi,h,2) — (j/i ф (hi А У2)) A h2, когда все столбцы представляют собой либо (0,0,0,0)т, либо (0,0,1,1)т, либо (0,1,1,0)т; тогда значение hi(z) произвольно при z, соответствую- щем ненулевому столбцу. Г. А. Кертис (Н. A. Curtis) пояснил, как использовать эту идею при |У| = 1 и \Z\ = п — 1 [см. IEEE Transactions С-25 (1976), 1033-1044]. Всеобъемлющий обзор методов разложения можно найти в Richard М. Karp, J. Society for Industrial and Applied Math. 11 (1963), 291-335. Большие значения n. Мы рассматривали только весьма малые примеры булевых функций. Теорема S говорит о том, что большйе, случайные примеры достаточно сложны; но практические примеры могут оказаться совсем не случайными, так что имеет смысл поискать возможность упрощений с помощью эвристических методов. С ростом п известные лучшие способы работы с булевыми функциями, как правило, начинаются с булевой цепочки (а не с огромной таблицы истинности) и пы- таются улучшить ее с помощью “локальных изменений” Цепочка может быть опре- делена как множество уравнений. Тогда, если промежуточный результат использу- ется в сравнительно небольшом количестве последующих шагов, можно попытаться
152 КОМБИНАТОРНЫЙ ПОИСК 7.1.2 устранить его, временно делая эти последующие шаги функциями трех переменных, и переформулируя эти функции для получения по возможности лучших цепочек. Например, предположим, что логический элемент х, — Xj о хк используется однократно, в логическом элементе xi = xi о хт, так что xi = (xj о хк) ° хт. Могут существовать и другие логические элементы, вычисляющие иные функции от Xj, Хк и хт; а из определений Xj, Хк и хт может вытекать невозможность неко- торых объединенных значений (xj,Xk,xm). Таким образом, мы можем оказаться способными вычислить xi из других логических элементов с помощью только одной дополнительной операции. Например, если х, = Xj/\Xk nxi = х,\/хт и если значения Xj\/xm и хкУхт появляются в цепочке где-то в другом месте, мы можем установить xi = (a;J Va;7n)A(a;fcVa;7n); это устранит xi и снизит стоимость на 1. Или, если, скажем, Xj Л (хк®хт) появляется где-то в другом месте и мы знаем, что XjXkXm 101, то можем установить xi = хт Ф (aj Л (з:*;фз:т)). Если Xi используется только в xi, a xi используется только в хр, то логиче- ский элемент хр зависит от четырех переменных, и мы можем снизить стоимость, используя свои знания о функциях от четырех переменных, получая хр лучшим способом и устраняя при этом х, и ц. Аналогично, если х, появляется только в xi и хр, мы можем удалить Xi, если найдем лучший способ вычисления двух различных функций от четырех переменных, возможно, с безразличными значени- ями и с другими функциями от этих четырех переменных, доступными бесплатно. И опять мы сталкиваемся с тем, что знаем, как решать такие задачи с помощью рассматривавшегося выше метода отпечатков. Если никакие локальные изменения не в состоянии снизить стоимость, мы мо- жем испытать локальные изменения, сохраняющие или даже увеличивающие сто- имость, чтобы обнаружить другие виды цепочек, которые могут быть упрощены иными способами. Такие локальные методы поиска будут широко рассмотрены в разделе 7.10. Прекрасный обзор методов булевой оптимизации, которую инженеры-электрон- щики называют задачей “многоуровневого логического синтеза” был опубликован Р. К. Брейтоном (R. К. Brayton), Г. Д. Хатчелом (G. D. Hachtel) и А. Л. Санджо- ванни-Винсентелли (A. L. Sangiovanni-Vincentelli), Proceedings of the IEEE 78 (1990), 264-300, а также в книге Д. де Мичели (G. De Micheli) Synthesis and Optimization of Digital Circuits (McGraw-Hill, 1994). Нижние границы. Теорема S гласит, что почти каждая булева функция от п > 12 переменных трудна для вычисления и требует цепочки, длина которой превышает 2п/п. Тем не менее современные компьютеры, построенные на логических схе- мах с электрическими сигналами, представляющими тысячи булевых переменных, успешно вычисляют несметное количество булевых функций каждую микросекунду. Очевидно, имеется множество важных функций, которые, невзирая на теорему S, могут быть вычислены очень быстро. Действительно, доказательство этой теоремы было косвенным; мы просто подсчитали случаи с низкой стоимостью, так что мы абсолютно ничего не знаем о конкретных примерах, которые могут возникнуть на практике. Если мы хотим вычислить некоторую функцию и можем думать только о трудоемком способе выполнения этой работы, то как мы можем быть уверены в том, что не существует никакого хитрого способа сократить количество вычислений?
7.1.2 БУЛЕВЫ ВЫЧИСЛЕНИЯ 153 Ответ на этот вопрос почти что позорный: после десятилетий целенаправленных поисков ученые оказались не в состоянии найти никакого явного семейства функций f(xi,... ,хп), стоимость которого была бы с ростом п существенно нелинейна. Ис- тинное поведение представляет собой 2п/п, но сильная нижняя граница наподобие п log log log п так и не доказана! Конечно, можно создать искусственные примеры, такие как “лексикографически наименьшая таблица истинности длиной 2п, недости- жимая ни одной булевой цепочкой длиной [2п/п] — 1”; но такие функции, конечно, не являются явно заданными. Таблица истинности явной функции f(x±,..., хп) должна быть вычислима за не более чем, скажем, 2е" единиц времени для некоторой константы с; т. е. время, необходимое для указания всех значений функций, должно быть полиномиальным от длины таблицы истинности. При таких базовых прави- лах в настоящее время неизвестно ни одно семейство функций с одним выходом с комбинационной сложностью, превышающей Зп + 0(1) при п —> оо. [См. N. Blum, Theoretical Computer Science 28 (1984), 337-345.] В целом картина не столь безрадостна, так как для ряда функций, представля- ющих практическую важность, доказаны некоторые интересные линейные нижние границы. Основной способ получения таких результатов был предложен в 1970 году Н. П. Редькиным. Предположим, что у нас имеется оптимальная цепочка стоимо- стью г для . ,хп). Установив хп <— 0 или хп «— 1, мы получаем сокращен- ные цепочки для функций g(xi,... i) = f(xi,...,xn-i,0) и h(xi,... ,xn-i) = f(xi,... ,xn-i, 1), имеющие стоимость г — и, если хп используется как входные данные для и различных логических элементов. Кроме того, если хп используется в “канализирующем” логическом элементе зг, = хп о х^, где оператор о не является ни ф, ни =, некоторые установки хп приведут к тому, что х, будет представлять собой константу, тем самым далее уменьшая цепочку для g или h. Нижние границы для g и/или h, таким образом, приводят к нижней границе для /. (См. упр. 77-81.) Но где же доказательства нелинейных нижних границ? Почти любая задача с ответом “да-нет” может быть сформулирована как булева функция, так что не имеется недостатка в явных функциях, о которых мы не знаем, как вычислить их за линейное или даже полиномиальное время. Например, любой ориентированный граф G с вершинами {Vi,..., vm} может быть представлен своей матрицей смежно- сти X, где Xij = [v»—тогда /(xi2, • • •, Xim,хт1,..., ) = [G имеет гамильтонов путь] (61) представляет собой булеву функцию от п = т(т — 1) переменных. Мы бы дорого заплатили за то, чтобы иметь возможность вычислять эту функцию, скажем, за п4 шагов. Мы знаем, как вычислить таблицу истинности для f за О(т\ 2П) = 2n+°('/" logп) шагов, поскольку существуют только т! потенциальных гамильто- новых путей; таким образом, f в действительности “явная’.’ Но никто не знает, как вычислить f за полиномиальное время или как доказать, что не существует цепочки длиной 4п. Хотя мы знаем, что могут существовать короткие булевы цепочки для f при каждом п. В конце концов, рис. 9 и 10 свидетельствуют о наличии чертовски хитрых цепочек даже для случаев 4 и 5 переменных. Эффективные цепочки для всех боль- ших задач, которые нам когда-либо понадобится решать, вполне могут оказаться “не от мира сего” —полностью вне нашей досягаемости, поскольку у нас не хватит
154 КОМБИНАТОРНЫЙ ПОИСК 7.1.2 времени, чтобы их найти. Даже если бы Всеведущий открыл нам простые цепочки, мы могли бы счесть их непостижимыми, поскольку кратчайшее доказательство их корректности может превышать по размеру количество клеток в нашем мозге. Теорема S исключает такой сценарий для большинства булевых функций. Но во всей истории нашего мира практическую важность будут иметь менее 2100 булевых функций, и теорема S ничего не говорит нам о них. Однако в 1974 году Ларри Стокмейер (Larry Stockmeyer) и Альберт Мейер (Al- bert Meyer) сумели построить булеву функцию f с доказуемо огромной сложностью. Их f не является “явной” в точном смысле, описанном выше, но и не является совершенно искусственной—она естественным образом возникает в математической логике. Рассмотрим символические высказывания, такие как 048+1015*1063; (62) Vm3n(m<n+1); (63) Vn3m(m+l<n); (64) VaVb(b>a+243ab(a<abAab<b)); (65) VAVB( AsB<H3n(n€AAn£BVn€BAntfA)); (66) VAOn.<aeA)4am(m€AAVn(n€A*m<n) ) ) ; (67) VA(3n(n€A)43m(m€AAVn(n€A^m>n))); (68) 3PVa((aePOa+3«P)Oa<1000); (69) VAVB(VCVc(C=AAc=lvC=BAc=04(Vn(n€C«n+leC)^c=l))4-iA=B). (70) Стокмейер и Мейер определили язык L, используя 63-буквенный алфавит V3-iO=€«+AV*K<=#>>abcdefghijklnmopqABCDEFGHIJKLMN0PQ0123456789 с обычными значениями этих символов. Строки строчных букв в предложениях L наподобие ‘ab’ в (65) представляют числовые переменные, ограниченные неотри- цательными целыми значениями; строки прописных букв представляют множества переменных, ограниченные конечными множествами таких чисел. Например, (66) означает “для всех конечных множеств А и В мы имеем А = В тогда и только тогда, когда не существует такого числа п, которое есть в А, но которого нет в В или которое есть в В и которого нет в А” Одни из этих утверждений истинны, другие—ложны. (См. упр. 82.) Все строки (62)-(70) принадлежат L, но в действительности язык весьма огра- ничен: единственная разрешенная арифметическая операция над числом — это при- бавление константы; мы можем записать ‘а+13’, но не ‘а+b’. Единственным разре- шенным отношением между числом и множеством являются отношения принад- лежности (€ или й). Единственным разрешенным отношением между множествами является эквивалентность (=). Кроме того, все переменные должны быть кванти- фицированы с помощью 3 или V.* Каждое предложение L, имеющее длину к < п, может быть представлено бинар- ным вектором длиной 6п с нулями в последних 6(n — fc) битах. Пусть f(x) — булева * Технически говоря, предложения L принадлежат “слабой монадической логике второго поряд- ка с одним преемником’.’ Слабая логика второго порядка допускает квантификацию на конечных множествах; монадическая логика с к преемниками представляет собой теорию непомеченных fc- арных деревьев.
7.1.2 БУЛЕВЫ ВЫЧИСЛЕНИЯ 155 функция от 6п переменных, такая, что f(x) = 1, если х представляет истинное утверждение L, и f(x) = 0, если х представляет ложное утверждение; значение f(x) не определено, если х не является осмысленным предложением. Таблица истинности для такой функции / может быть построена за конечное количество шагов согласно теоремам Бюхи (Biichi) и Элгота (Elgot) [Zeitschrift fur math. Logik und Grundlagen der Math. 6 (1960), 66-92; Transactions of the Amer. Math. Soc. 98 (1961), 21-51]. Ho “конечное” не означает “осуществимое”: Стокмейер и Мейер доказали, что C(J) > 2Г-5 при п > 460 + .302г + 5.08 In г и г > 36. (71) В частности, мы имеем C(f) > 2426 > 10128 при п = 621. Булева цепочка с таким количеством логических элементов никогда не может быть построена, поскольку 10128— заведомо избыточная верхняя граница количества протонов во вселенной. Так что перед нами достаточно небольшая конечная задача, которая никогда не может быть решена. Детали доказательства Стокмейера и Мейера приведены в JACM 49 (2002), 753-784. Основная идея заключается в том, что язык L, несмотря на его ограни- ченность, достаточно богат для описания таблиц истинности и сложности булевых цепочек с помощью достаточно коротких предложений; следовательно, / должен работать со входными данными, которые, по сути, ссылаются сами на себя. *Для дальнейшего чтения. Имеются тысячи статей, посвященных сетям логи- ческих ячеек, поскольку такие сети лежат в основе множества аспектов теории и практики. В этом разделе мы сосредоточимся в основном на темах, имеющих отношение к программированию последовательных машин. Однако основательно изучены и другие темы, в первую очередь — имеющие отношение к параллельным вычислениям, такие как схемы с малой глубиной, в которых логические элементы могут иметь любое количество входов (“неограниченный коэффициент объединения по входу”). Книга Инго Вегенера (Ingo Wegener) The Complexity of Boolean Functions (Teubner and Wiley, 1987) является хорошим введением во всю рассматриваемую тематику. Мы в основном рассматривали булевы цепочки, в которых все бинарные опера- торы имели одинаковую важность. Для наших целей такие логические элементы, как ф или С, ничуть не более или менее желательны, чем логические элементы типа Л или V. Но совершенно естественно задаться вопросом, можно ли при вычислении монотонной функции ограничиться только монотонными операторами Л и V. Алек- сандр Разборов разработал поразительные методы доказательства, чтобы показать, что в действительности монотонные операторы сами по себе обладают, по сути, ограниченными возможностями. Например, он доказал, что все И-ИЛИ-цепочки для определения того, является ли перманент матрицы пхп, состоящей из 0 и 1, нулевым или единичным, должны иметь стоимость nfi(,ogn\ [См. Доклады Академии наук СССР 281 (1985), 798-801; Математические заметки 37 (1985), 887-900.] В разделе же 7.5.1 мы видели, что эта задача, эквивалентная “двудольным паросочетаниям” разрешима всего за О(п2 5) шагов. Кроме того, эффективные методы из этого раздела могут быть реализованы как булевы цепочки лишь немного большей стои- мости, если мы разрешим отрицания или иные булевы операции в дополнение к Л и V. (Воган Пратт (Vaughan Pratt) назвал это “силой отрицательного мышления’.’) Введение в методы Разборова представлено в упр. 85 и 86.
156 КОМБИНАТОРНЫЙ ПОИСК 7.1.2 Упражнения 1. [24] “Случайная” функция в формуле (6) соответствует булевой цепочке стоимостью 4 и глубиной 4. Найдите формулу с глубиной 3, имеющую ту же стоимость. 2. [Й1] Покажите, как вычислить (a) w ф {xyz) и (б) и Л (xyz) с помощью формул с глубиной 3 и стоимостью 5. 3. [М23] (Б. И. Фиников, 1957.) Докажите, что если булева функция f{xi,... ,хп) ис- тинна ровно в к точках, то L{f) < 2п + {к — 2)2fc-1. Указание: подумайте о к = 3 и п = 106. 4. [М28] Докажите, что минимальные глубина и длина формулы булевой функции удо- влетворяют условию lgL(/) < D{f) < ealg£(/) при L{f) > 1, где а = 1/lgx ~ 2.465965 связана с “константой пластичности” х из 7.1.4-(90). Указание: если f содержит подфор- мулу д, то мы имеем f = д? fi: fo для подходящих Д и Д. ► 5. [21] Пороговая функция Фибоначчи Fn(xi,... ,хп) = (х^х^2 .x^_'i1x^n~2) анали- зировалась в упр. 7.1.1-101 для п > 3. Имеется ли эффективный способ ее вычисления? 6. [20] Истинно или ложно утверждение: булева функция f(xi,..., хп) является нор- мальной тогда и только тогда, когда она удовлетворяет обобщенному закону дистрибутив- ности f{xi,... ,хп) Г\у = f{xj. /\у,...,хпЛу)? 7. [20] Преобразуйте булеву цепочку ‘х5 = xi \/Х4, Хв = хг\/хз, ху = xi Лхз, xg = хв=хт’ в эквивалентную цепочку («5,Хб,Ж7,Хв), в которой каждый шаг является нормальным. ► 8. [20] Поясните, почему (11) представляет собой таблицу истинности переменной Хь- 9. [20] Алгоритм L определяет длины кратчайших формул для всех функций Д но не предоставляет иной информации. Расширьте алгоритм таким образом, чтобы он предо- ставлял также фактические формулы с минимальной длиной наподобие (6). ► 10. [20] Модифицируйте алгоритм L так, чтобы он вычислял D(f) вместо L(f). ► 11. [22] Модифицируйте алгоритм L так, чтобы вместо длин L(f) он вычислял верхние границы U{f) и отпечатки 4>{f), как описано в разделе. 12. [15] Какая булева цепочка эквивалентна схеме с минимальным использованием памя- ти (13)? 13. [15] Каковы таблицы истинности Д, Д, Д, Д и Д в примере (13)? 14. [22] Какой имеется удобный способ вычислить 5п(п — 1) таблиц истинности (17) при заданной таблице истинности для д? (Используйте побитовые операции, как в (15) и (16).) 15. [28] Найдите наикратчайшие возможные пути вычисления следующих функций с ми- нимальным использованием памяти: (a) Si(a:i,a:2,®3); (б) S2{xi,X2,xg,X4)- (в) Si(a?i,a?2, 13,2:4); (г) функция из (18). 16. [ДМЗЗ] Докажите, что менее чем 2118 из 2128 булевых функций f{xi,... ,х?) вычис- лимы с использованием минимального количества памяти. ► 17. [25] (М. С. Патерсон (М. S. Paterson), 1977.) Хотя булевы функции f{xi,... ,хп) не могут всегда быть вычислены с использованием п регистров, докажите, что п+1 регистров всегда достаточно. Другими словами, покажите, что для вычисления f{xi,... ,хп) всегда имеется последовательность операций наподобие (13), если разрешить 0 < j{i), к(г) < п. ► 18. [35] Исследуем оптимальные вычисления с использованием минимального количества памяти для /{х1,Х2,хз,Х4,хв). Сколько классов функций от пяти переменных имеют Cm{f) — г для Г = 0, 1, 2, ... ? 19. [М22] Докажите, что если булева цепочка использует п переменных и имеет длину г < п + 2, то она должна быть либо “нисходящим” либо “восходящим” построением.
7.1.2 БУЛЕВЫ ВЫЧИСЛЕНИЯ 157 ► 20. [^0] (Р. Шрёппель (R. Schroeppel), 2004.) Булева цепочка является канализирующей, если она не использует операторов ф или =. Найдите оптимальную стоимость, длину и глу- бину всех функций от четырех переменных при данном ограничении. Дает ли эвристика на основе отпечатков оптимальные результаты? 21. [46] Для какого количества функций от четырех переменных исследователи из Гар- варда нашли оптимальные схемы на электровакуумных лампах в 1951 году? 22. [21] Поясните цепочку для S3 на рис. 10, обратив внимание на то, что она включает цепочку для S2,з на рис. 9. Найдите аналогичную цепочку для 52(2:1,2:2,2:3,2:4,2:5). ► 23. [23] На рис. 10 показаны только 16 из 64 симметричных функций от пяти переменных. Поясните, как написать оптимальные цепочки для других функций. 24. [47] Для каждой ли симметричной функции f справедливо соотношение Cm(f) = C(f)1 ► 25. [17] Предположим, нам нужна булева цепочка, которая включает все функции от п переменных: пусть fk(xi,... ,хп) является функцией, таблица истинности которой — бинарное представление к для 0 < к < тп = 22". Что собой представляет C(fofi fm-i)? 26. [25] Истинно или ложно утверждение: если f(xo, - ,хп) = (хо Л g(xi,... ,хп)) ф Л(:С1,..., хп), где д и h представляют собой нетривиальные булевы функции, суммарная стоимость которых равна C(gh), то С(/) = 2 + C(gh)? ► 27. [23] Можно ли реализовать полный сумматор (22) пятью шагами с использованием минимального количества памяти (т. е. целиком в пределах трех однобитных регистров)? 28. [26] Докажите, что C(u'v') = C(u"v") = 5 для булевых функций с двумя выходами, определяемых следующим образом: (uv)2 = (х + у — (иг)г) mod4, (u'v")2 = (—х — у — (1411)2) mod4. Воспользуйтесь этими функциями для вычисления [(rci + • • • + хп) mod 4 = 0] менее чем за 2.5п шагов. 29. [М28] Докажите, что приведенная в разделе схема для контрольного суммирова- ния (27) имеет длину O(logn). 30. [М25] Решите бинарное рекуррентное соотношение (28) для стоимости з(п) контроль- ного суммирования. 31. [21 ] Докажите, что если функция f(x\,... ,хп) симметрична, то выполняется соотно- шение C(f) < 5п + O(n/logn). 32. [НМ16] Почему решение (30) удовлетворяет t(n) = 2" + О(2"/2)? 33. [НМ22] Истинно или ложно утверждение: если 1 < N < 2П, то первые N минитермов {a?i,..., хп} могут быть вычислены за N + O(\fN ) шагов при п —> оо и N —> оо. ► 34. [22] Приоритетный шифратор имеет п = 2т—1 входов аа ... хп и т выходов yi... ут, где (yi • • - Ут)2 = к тогда и только тогда, когда к = max{j | j = 0 или Xj = 1}. Разработайте приоритетный шифратор со стоимостью О(п) и с глубиной О(т). 35. [23] Покажите, что если п > 1, то все конъюнкции xi Л • • - Л Xk-i Л rck+i Л - Л хп для 1 < к < п могут быть вычислены из (xi,..., хп) с общей стоимостью < Зп — 6. ► 36. [М28] (Р. Э. Ладнер (R. Е. Ladner) и М. Д. Фишер (М. J. Fischer), 1980.) Пусть Ук представляет собой “префикс” х± Л • • • Л хь для 1 < к < п. Ясно, что C(yi ...уп) = п — 1 и D(yi.. .уп) = [1g п]; н0 мы не можем одновременно минимизировать и стоимость, и глубину. Найдите цепочку оптимальной глубины [1g п] со стоимостью < 4п.
158 КОМБИНАТОРНЫЙ ПОИСК 7.1.2 37. [М28] (Марк Снир (Marc Snir), 1986.) Для заданных п > т > 1 рассмотрим следую- щий алгоритм. S1. [Восходящий цикл.] Для t <- 1, 2, ..., [lg m] установить xmij^m<2»k) ч— x2Hk-i/2t Л Zmin(rn,2‘k) для к > 1 и 2f(fc - 1/2) < т. S2. [Нисходящий цикл.] Для t «- [lg m] — 1, [lgm\ — 2, ..., 1 установить x2t(k+i/2) <— x2tk Ax2t(k+i/2) для к > 1 и 2*(fc + 1/2) < m. S3. [Расширение.] Для к 4— m + 1, m + 2, ..., n установить хк <— xk-i Л хк. I а) Докажите, что этот алгоритм решает задачу префиксов из упр. 36: он преобразует (гсг.гсг, - • • ,хп) в (rci,rci Л xz,...,xi Л xz Л • • • Л хп). б) Пусть с(т,п) и d(m,n) представляют собой стоимость и глубину соответствующей булевой цепочки. Докажите для фиксированного т, что если п достаточно велико, то с(т, п) + d(m, п) = 2п — 2. в) Чему для заданного п > 1 равна величина d(n) = mini<m<n d(m,n)? Покажите, что d(n) < 21gn. г) Докажите, что существует булева цепочка со стоимостью 2п — 2 — d и глубиной d для задачи префиксов при d(n) < d < п. (Эта стоимость оптимальна согласно упр. 81.) 38. [25] В разделе 5.3.4 мы изучали сортирующие сети, в которых S(ri) компараторов могут сортировать п чисел (m, xz, ..., хп) в порядке возрастания. Если входные данные Xj представляют собой нули и единицы, каждый компаратор эквивалентен двум логическим элементам (х Л у, х V у)-, так что сортирующая сеть соответствует некоторому виду булевой цепочки, которая вычисляет п функций от (xi, xz, • • •, хп). а) Что собой представляют п функций fifz fn, которые вычисляет сортирующая сеть? б) Покажите, что эти функции {/1,/г, ••-,/«} могут быть вычислены за О(п) шагов цепочкой глубиной O(logn). (Следовательно, сортирующие сети не являются асимп- тотически оптимальными в булевом случае.) ► 39. [М21] (М. С. Патерсон (М. S. Paterson) и П. Клайн (Р. Klein), 1980.) Реализуйте 2т- канальный мультиплексор Mm(xi,... ,Хт',Уо,У1, • • • ,J/2m-i) из (31) с помощью эффектив- ной цепочки, которая одновременно устанавливает верхние границы С (Мт) < 2п + О(у/п) и D(Mm) < т + O(logzn). 40. [25] Пусть при п > к > 1 функция fnk(xi,... ,хп) представляет собой функцию “/с единиц подряд” (ti Л • • • Л хк) V (х2 Л • • • Л :cfc+i) V • • • V (in+1-k Л • • • Л хп). Покажите, что стоимость C(fnk) этой функции меньше 4п — 3fc. 41. [М23] (Сумматоры с условным суммированием.) Одним из способов выполнить би- нарное сложение (25) с глубиной O(log п) основан на трюке с мультиплексорами из упр. 4: если (xx')z + (уу')2 = (zz')z, где |т'| = |р'| = |/|, мы имеем либо (x)z + (y)z = (z)z и (x’)z + (j/h = (z')z, либо (x)z + (у)2 + 1 = (z)z и (x')z + (у')2 = (lz')2- Чтобы сэкономить время, мы можем вычислить оба значения, (x)z + (у)2 и (x)z + (</)г + 1, одновременно при вычислении (x')z+(y')2- Позже, когда мы узнаем, генерирует ли младшая часть (х')2+(у')2 перенос, мы сможем воспользоваться мультиплексорами для выбора корректных битов для старшей части. Если этот метод рекурсивно используется для построения 2п-битовых сумматоров на основе n-битовых, то сколько при этом требуется логических элементов при п = 2т? Чему равна соответствующая глубина? 42. [30] Положим в бинарном сложении (25) ик = хк Л ук и vk = хк ф ук для 0 < к < п. а) Покажите, что zk = vk®ck, где биты переноса ск удовлетворяют условию Cfc = Ufe-i V (vk-i Л (ик-2 V (vk-z Л (• • • (щ Л но) • • •))))•
7.1.2 БУЛЕВЫ ВЫЧИСЛЕНИЯ 159 б) Пусть Uk = О, = 1 и I7*+1 = «ь V (у/, Л Uj), Vj°+1 = Vk ЛУ/ для к > j. Докажите, что ск = U$ и что Uf = Uj V (V/ А Г/), V? = V/ Л V? для г < j < к. в) Пусть h(m) = 2т^т~1^2. Покажите, что, когда п = h(m), все переносы ci, ..., Сп могут быть вычислены с глубиной (т + l)m/2 ~ 1gn + >/21gn и с общей стоимостью О(2тп). ► 43. [28] Конечный преобразователь представляет собой абстрактную машину с конечным входным алфавитом А, конечным выходным алфавитом В и конечным множеством внут- ренних состояний Q. Одно из этих состояний, до, называется начальным. Для заданной строки а = а\... ап, где каждое a-j G А, машина вычисляет строку 0 = bi.. ,Ьп, где каждое bj G В, следующим образом. Т1. [Инициализация.] Установить j <— 1 и q <— до. Т2. [Выполнено?] Завершить работу алгоритма, если j > п. ТЗ. [Вывод bj.] Установить bj <— с(д, аД. Т4. [Продвижение у.] Установить д Ч— d{q,aj), j <— j + 1 и вернуться к шагу Т2. | Машина имеет встроенные инструкции, которы определяют с(д, а) 6 В и d(g, а) 6 Q для каждого состояния g 6 Q и каждого символа а 6 А. Цель этого упражнения — показать, что если алфавиты А и В любого конечного преобразователя закодировать в бинарном виде, то строка 0 может быть вычислена из а с помощью булевой цепочки размером О(п) и глубиной O(logn). а) Рассмотрим задачу изменения бинарного вектора аг ... а„ в Ьг ... Ь„ путем присвоений bj <— aj ф [aj - aj-i = • • • = aj-k = 1 и aj-k-i = 0, где к > 1 нечетно] в предположении, что ао = 0. Например, а = 1100100100011111101101010 ь-> 0 = 1000100100010101001001010. Докажите, что это преобразование может быть выполне- но конечным преобразователем, у которого |Д| = |В| = |Q| = 2. б) Предположим, что конечный преобразователь с |Q| = 2 находится в состоянии gj после прочтения ai.. .aj-i- Поясните, как вычислить последовательность gi...gn с помощью булевой цепочки стоимостью О(п) и глубиной O(logn) с использованием построения Р. Э. Ладнера (R. Е. Ladner) и М. Д. Фишера (М. J. Fischer) из упр. 36. (Из этой последовательности gi... gn легко вычислить bi... bn, поскольку bj = c(qj,aj).) в) Примените метод из п. (б) к решению задачи из п. (а). ► 44. [26] (Р. Э. Ладнер (R. Е. Ladner) и М. Д. Фишер (М. J. Fischer), 1980.) Покажите, что задача бинарного суммирования (25) может рассматриваться как конечное преобразование. Опишите булеву цепочку, которая является результатом построения из упр. 43 при п = 2т, и сравните ее с сумматором с условным суммированием из упр. 41. 45. [НМ20] Почему в доказательстве теоремы S не использовано простое рассуждение о том, что количество способов выбрать такие j(i) и /с(г), что 1 < j(i),k(i) < г, равно п2(п+1)2... (n+r—I)2? ► 46. [НМ21] Пусть а(п) = c(n, |2n/nJ)/22"—доля булевых функций от п переменных для которых C(f) < 2п/п. Докажите, что а(п) -» 0 достаточно быстро при п —> оо. 47. [М23] Распространите теорему S на функции с п входами и т выходами. 48. [НМ23] Найдите наименьшее целое число г - г(п), такое, что (г — 1)! 22” < 22r+1 х (п-Н—1)2г: (а) в точности при 1 < п < 16; (б) асимптотически при п —> оо. 49. [НМ25] Докажите, что при п —> оо почти все булевы функции f(xi,... ,хп) имеют минимальную длину формулы L(f) > 2"/lgn — 2"+2/(lgn)2.
160 КОМБИНАТОРНЫЙ ПОИСК 7.1.2 50. [24] Что собой представляют простые импликанты и простые дизъюнкты функции простых чисел (35)? Выразите эту функцию в виде (а) дизъюнктивной нормальной формы; (б) конъюнктивной нормальной формы минимальной длины. 51. [20] Какое представление детектора простых чисел будет получено вместо (37), если строки таблицы истинности будут основаны на х3хв, а не на Х1Х2? 52. [23] Какой выбор к тл1 минимизирует верхнюю границу (38) при 5 < п < 16? 53. [НМ22] Оцените (38) при к = [2 lg nJ и I = [2k/(n — 31gn)] и п —> оо. 54. [29] Найдите короткую булеву цепочку для вычисления всех шести функций fj (х) = [х1Х2хзх4еА^, где Ai = {0010,0101,1011}, А2 = {0001,1111}, А3 = {0011,0111,1101}, А4 — {1001,1111}, As = {1101}, Ав = {0101,1011}. (Эти шесть функций появляются в детекторе простых чисел (37).) Сравните свою цепочку со схемой первоначального вычисления минитермов общего метода Лупанова. 55. [3{] Покажите, что стоимость шестибитовой функции определения простых чисел не превышает 14. 56. [16] Поясните, почему все функции с 14 или более безразличными значениями в табл. 3 имеют нулевую стоимость. 57. [1Р] Какие семисегментные “цифры” выводятся при (а^тг^зя^г > 9 в (45)? 58. [30] 4х4-битовый S-блок представляет собой перестановку 4-битовых векторов {0000, 0001,..., 1111}; такие перестановки используются в хорошо известных криптографиче- ских системах, таких, как советский стандарт симметричного шифрования ГОСТ 28147-89 (1989). Каждый 4х4-битовый S-блок соответствует последовательности из четырех функ- ций fi(xi,X2,x31x4), ..., f4(xi,X2,x3,x4), которые выполняют преобразование xix3x3x4 i-> /1/2/3/4- Найдите все 4х4-битовые S-блоки, для которых C(/i) = С(/2) = С(/з) = C(J4) = 7. 59. [29] Один из S-блоков, удовлетворяющий условиям упр. 58, выполняет отображение (О,...,f) i-> (0,6,5,Ъ,3,9,f,e,c,4,7,8,d,2,а, 1); другими словами, таблицами истинности (/1,/2,/з,/д) являются соответственно (179а, 63е8,5Ь26, Зе29). Найдите булеву цепочку, которая вычисляет эти четыре “максимально трудные” функции менее чем за 20 шагов. 60. [23] (Фрэнк Раски (Frank Ruskey).) Предположим, что z = (х + у) mod 3, где х = (Х1Х3)2, У = (2/17/2)2, z = (ziz3)2 и каждое двухбитовое значение должно быть равно 00, 01 либо 10. Вычислите zi и z3 из xi, Х2, yi и у2 за шесть булевых шагов. 61. [3{] Продолжая выполнять упр. 60, найдите эффективный способ вычисления z = (х + у) mod 5 с использованием трехбитовых значений 000, 001, 010, 011, 100. 62. [НМ23] Рассмотрим случайную булеву частично определенную функцию от п пере- менных, которая имеет 2"с “интересующих” (определенных) и 2"d “безразличных” значе- ний, где с + d = 1. Докажите, что стоимость почти всех таких частично определенных функций превышает 2пс[п. 63. [7CW35] (Л. А. Шоломов, 1969.) Продолжая упр. 62, докажите, что все такие функции имеют стоимость < 2nc/n(l + O(n-1logn)). Указание: имеется множество 2m(l + fc) векторов xi... Xk, которое пересекается с каждым (fc — т)-мерным подкубом fc-мерного куба. 64. [25] (Волшебное пятнадцать.) Два игрока по очереди выбирают цифры от 1 до 9, не используя никакую цифру дважды; победителем, если таковой имеется, становится тот, кто первым выберет три цифры, сумма которых равна 15. Какой должна быть правильная стратегия игрока в эту игру? 65. [35] Модифицируйте стратегию игры в крестики-нулики из (47)-(56) так, чтобы она всегда играла корректно.
7.1.2 БУЛЕВЫ ВЫЧИСЛЕНИЯ 161 66. [20] Раскритикуйте ходы, которые делаются в упр. 65. Всегда ли они оптимальны? ► 67. [40] Вместо простого поиска одного корректного хода для каждой позиции в игре в крестики-нулики мы можем предпочесть находить их все. Другими словами, для задан- ных xi... xgoi... од мы можем попытаться вычислить девять ВЫХОДОВ Р1 . . . pg, где pj = 1 тогда и только тогда, когда ход в ячейку j корректен и минимизирует худший исход для X. Например, восклицательными знаками помечены все корректные ходы X в следующих типичных позициях: Играть с машиной, которая выбирает ход среди таких возможных вариантов, интереснее, чем с машиной, которая имеет единственную жестко фиксированную стратегию. Одним привлекательным способом решения задачи всех допустимых ходов является использование того факта, что крестики-нулики имеют восемь симметрий. Представим микросхему с 18 входами х±... xgoi... од и тремя выходами (с, в, т) для “угла” “боковой клетки” и “средины” обладающую тем свойством, что требуемые функции gj могут вычис- ляться с помощью соответствующего соединения восьми таких микросхем: gi = с(Х1Х2ХзХ4ХзХвХ7ХвХд01О2ОзО4О5ОбОтОвОд) V с(Х1Х4Х7Х2ХзХ8ХзХвХд010407020з080зОвОд), д2 = з(Х1Х2ХзХ4ХзХвХ7Х8Хд01020з040зОб07080д) V s(X3X2XlXeXsX4XgX8X70302010e05040g0807), дз = с(хзХ2Х1ХвХзХ4ХдХ8Х7ОзО2О1ОвОз04ОдО8О7) V с(хзХвХдХ2ХзХ8Х1Х4Х7ОзОвОдО2ОзО8СПО4О7), д4 = в(Х1Х4Х7Х2ХзХ8ХзХвХд010407020з080зОвОд) V 8(Х7Х4Х1Х8ХзХ2ХдХвХз070401080з020дОвОз), дд = с(хдХ8Х7ХвХзХ4ХзХ2Х10д08070бОз040з0201) V с(хдХвХзХ8ХзХ2Х7Х4Х1ОдОбОзО8ОзО2О7О401), а дь представляет собой ИЛИ т выходов от всех восьми микросхем. Разработайте логику такой микросхемы, используя менее 2000 логических элементов. 68. [М25] Рассмотрим n-битовую тг-функцию тг„(:Г1... хп), значение которой представля- ет собой (xi ... Жп)2-й бит справа от старшего бита в бинарном представлении тг. Доказыва- ет ли метод из упр. 4.3.1-39, описывающий эффективный способ вычисления произвольных битов 7Г, что <?(%„) < 2п/п для достаточно большого п? 69. [М24] Пусть мультилинейное представление f имеет вид 0^000 О аошЖгп О aoioajj ф OtguXjXm ф OlOO^i CD CD <-^HoXiXj ф ai 11 XiXjХт , где каждый коэффициент at является функцией от переменных {жт,... ,хп} \ {xi,xj,xm}- а) Докажите, что пары (58) являются “хорошими” тогда и только тогда, когда коэффи- циенты удовлетворяют соотношениям OoloOlOl = О011О100, OlOlOllO = СС100О111 и QlloCCOll = aillOOlO- б) Для каких значений пары оказываются плохими, когда / = (det X) mod 2? (См. (60).) ► 70. [М27] Пусть X — булева матрица (60) размером 3x3. Найдите эффективные цепочки для булевых функций (a) (detX) mod 2; (б) [регХ >0]; (в) [detX >0]. ► 71. [М26] Предположим, что f(x) равна 0 с вероятностью р в каждой точке х = xi... хп независимо от ее значений в других точках. 6 Зак. 3331
162 КОМБИНАТОРНЫЙ ПОИСК 7.1.2 а) Какова вероятность того, что пары (58) являются хорошими? б) Какова вероятность того, что плохие пары (58) существуют? в) Какова вероятность того, что плохие пары (58) будут найдены не более чем при t случайных испытаниях? г) Каково ожидаемое время проверки случая (i,j, т) как функция от р, t и п? 72. [М24] Распространите предыдущее упражнение на случай частично определенных функций, где f(x) = 0 с вероятностью р, f(x) = 1 с вероятностью q и f(x) = ♦ с веро- ятностью г. ► 73. [20] Покажите, что если плохие пары (58) существуют для всех таких, что т Ф * Ф 3 Ф т, т0 неразложимость / может быть выведена после тестирования всего лишь (2) тщательно отобранных троек (i,j, т). 74. [25] Расширьте идею из предыдущего упражнения, предложив стратегию для выбора последовательных троек (г, j, т) при использовании метода Шена (Shen), Мак-Келлара (McKellar) и Вайнера (Weiner). 76. [20] Что получится при применении описанной в разделе процедуры разложения к функции S0,n(xi,..., г„)? ► 76. [М26] (Д. Улиг (D. Uhlig), 1974.) Целью данного упражнения является доказатель- ство того удивительного факта, что для некоторых функций f лучшая цепочка для вы- числения булевой функции F(m,...,«„,vi,...,v„) = /(ui,...,u„) V/(vi,...,vn) стоит меньше чем 2С(/); следовательно, функциональное разложение не всегда является хорошей идеей. Положим п = т + 2т и запишем /(ii,... ,im,xo,... ,Ж2т-1) = fi(x), где г рассматри- вается как число (ii... im)2- Тогда (ui,..., ип) = (ii,..., im, хо, - - -, Ж2т-1), (щ,.. -, vn) = (.31,- • ,3т,УО, - - ,Р2">-1) и F(u,v) = fi(x) V а) Докажите, что цепочки стоимостью О(п2 ) достаточно для вычисления 2m +1 функций zt = х ф (([/< i] ф [г < у]) Л (х ф у)), 0 < I < 2"*, для заданных векторов г, j, х и у, каждое zi представляет собой вектор длиной 2т, а однобитовая величина ([I < г] ф [г<у]) использована в операции И с каждым из компонентов х ф у. б) Пусть д,(х) = fi(x) ф fi-i{x) для 0 < г < 2т, где f~i(x) = /2"* (г) = 0. Оцените стоимость вычисления 2m + 1 значений а = gi(zi) для заданных векторов zi, для 0 < I < 2т. в) Пусть dt = ci Л ([г < у] = [I < г]) и <// = с< Л ([г < у] = [у > I]). Докажите, что fi(x) = со Ф ci ф • • ф c'2m , fj(y) = со ф с" ф • • • ф С2« . г) Сделайте вывод, что C(F) < 2"/n + O(2"(logn)/n2). (Когда п достаточно велико, эта стоимость, определенно, меньше, чем 2"+1/п, но существуют функции f с C(f) > 2п/п.) д) Для ясности выпишите цепочку для F при т = 1 и /(г, хо, xi) = (г Л xd) V xi. ► 77. [35] (Н. П. Редькин, 1970.) Предположим, что булева цепочка использует только операции И, ИЛИ и НЕ; таким образом, каждый шаг представляет собой х, = Xj(f) Л Хщ) либо Xi = V ajfc(j), либо xt = Ёд<). Докажите, что если такая цепочка вычисляет либо функцию “нечетной четности” fn(xiхп) = xi ф • • • фхп, либо функцию “четной четности” fn(xi,... ,хп) = l©ri Ф---Ф хп, где п > 2, то длина цепочки оказывается не меньше 4(п — 1).
7.1.2 БУЛЕВЫ ВЫЧИСЛЕНИЯ 163 78. [26] (В. Я. Поль (W. J. Paul), 1977.) Пусть f(xi,... ,Хт,уо, ,У2™-1] является про- извольной булевой функцией, которая равна ук при (xi... хт)2 = к G S, для некоторого заданного множества S С {0,1,..., 2т — 1}; значения f в других точках нам безразличны. Покажите, что C(f] > 2||S|| — 2, когда S—непустое множество. (В частности, когда S = {0,1,..., 2m — 1}, мультиплексорная цепочка из упр. 39 является асимптотически оптимальной.) 79. [32] (К. П. Шнорр (С. Р. Schnorr), 1976.) Будем говорить, что переменные и и v являются “напарниками” в булевой цепочке, если существует ровно один простой путь между ними в соответствующей диаграмме бинарного дерева. Две переменные могут быть напарниками, только если каждая из них используется в цепочке ровно один раз; но этого необходимого условия недостаточно. Например, переменные 2 и 4 являются напарниками в цепочке для £>1,2,з на рис. 9, но они не являются напарниками в цепочке для Зз- а) Докажите, что булева цепочка от п переменных без напарников имеет стоимость > 2п — 2. б) Докажите, что C(f) = 2п — 3, если f представляет собой функцию “все равны” S0,n(xi, - , хп]- ► 80. [М29] (Л. Д. Стокмейер (L. J. Stockmeyer), 1977.) Иногда удобно еще одно обозначе- ние для симметричных функций: если а = aoai.. ,ап представляет собой произвольную бинарную строку, обозначим Sa(x) = а„х. Например, в этих обозначениях (тгггтз) = Soon, a xi ф Х2 Ф хз = Soioi- Обратите внимание, что SQ(0,хз,... ,хп] = 8а>(хз,... ,хп) и Sn(l, хз,..., х-п) = Sia(x2,. - -, хп], где а' и 'а обозначают соответственно а с удаленным последним и первым элементами. Также [f (хз, • • • , Хп], f (тз, • • • , Xn)j Хз^ • • • , Хп] — S'a1 (тз, • • • , Хп], если / представляет собой произвольную булеву функцию от п — 2 переменных. а) Функция четности имеет ао / ai / аз / • • • / а„. Будем считать, что п > 2. Докажи- те, что если Sa не является функцией четности и S/a' не является константой, то C(Sa] > тах(С(5а/)+2, C'(S«a)+2, min(C'(Sa/)+3, C(S/a)+3, C(S-a-)+5)). б) Какие нижние границы C(Sfc) и C(S>k] следуют из этого результата при 0 < к < п? 81. [23] (Марк Снир (Marc Snir), 1986.) Покажите, что любая цепочка со стоимостью с и глубиной d для задачи префиксов из упр. 36 имеет с + d > 2п — 2. ► 82. [М23] Поясните логические высказывания (62)-(70). Какие из них истинны? 83. [21] Покажите, что если существует булева цепочка для f(xi,..., хп], которая содер- жит р канализирующих операторов, то C(f] < (р + 1)(п + р/2). 84. [М20] Монотонная булева цепочка представляет собой булеву цепочку, в которой каждый оператор о, является монотонным. Длина кратчайшей монотонной цепочки для / обозначается как С+(/). Покажите, что если существует монотонная булева цепочка для f(xi,... ,хп], которая содержит р операторов Л и q операторов V, то C+(f] < min((p+ l)(n + р/2), (q + l)(n + q/2]]. ► 85. [M2S] Пусть Мп — множество всех монотонных функций от п переменных. Если L представляет собой семейство функций, содержащихся в М„, введем обозначения х U у = /\{z 6 L | z D х V р} и х П у = ^{z 6 L | z С х Л р}. Будем называть L законным (legitimate), если оно включает константные функции 0 и 1, а также проецирующие функции Xj для 1 < j < п и если аШр 6 L, 1П р £ L при х,у 6 L. а) При п = 3 можно записать Мз = {00, 01, 03, 05, 11, 07, 13, 15, Of, 33, 55, 17, If, 37, 57, 3f, 5f, 77, 7f, f f}, представляя каждую функцию ее таблицей истинности, записанной
164 КОМБИНАТОРНЫЙ ПОИСК 7.1.2 в виде шестнадцатеричного числа. Имеется 21® семейств L, таких, что {00, Of, 33,55, ft} С L С Мз. Сколько из них законны? б) Если А представляет собой подмножество {1,... ,п}, то пусть [А] = \/а€Аха и пусть также fool = 1. Предположим, что А является семейством подмножеств {1,...,п}, которые содержат все множества размером < 1 и являются замкнутыми относительно пересечения; другими словами, А П В 6 А при А 6 А и В 6 А. Докажите, что семейство L = { [А] | А G A U оо} является законным. в) Пусть (rc„4-i,..., х-п+т) является монотонной булевой цепочкой (1). Предположим, что (in+i, • • •, х-п+г) получается из той же булевой цепочки, но в которой каждый оператор Л заменен на П, а каждый оператор V—на U по отношению к некоторому законному семейству L. Докажите, что для п+1<1<п + г мы должны иметь I xi С xi V \J {ж< е (xj(i) V | о£ = V}; г=тг4~1 I Xi c T(V \J {*<e(*Xi) Лжвд) I Oi = Л}. 1=714-1 86. [BM37] Граф G с вершинами {1,...,n} может быть определен с помощью N = (") булевых переменных xuv для 1 < и < v < п, где iUv = [и—v в G]. Пусть f представляет собой функцию f(x) = [G содержит треугольник]; например, при п = 4, /(ж12,Ж1з,Ж14,Ж2з, Х24,хза) = (Ж12 Л Ж13 Л ж2з) V (Ж12 Л жм Л Ж24) V (Ж13 Л ЯТ14 Л,ж.з4) V (ж2з Л ^24 Л Ж34). Цель данного упражнения—доказать, что монотонная сложность С+(/) равна fi(n/logn)3. а) Если Uj — Vj для 1 < j < г в графе G, назовем S = {{ui,i>i},..., {ur,iy}} r- семейством, и пусть A(S) = Ui<i<j<r({u«,l’i} Г) {wjji’j})—элементы его попарных пересечений. Будем говорить, что граф G г-замкнут, если мы имеем и — v при A(S) С {и, ц} для некоторого r-семейства S. Он сильно r-замкнут, если, кроме того, мы имеем |Д(5)| > 2 для всех r-семейств S. Докажите, что сильно r-замкнутый граф является также сильно (г + 1)-замкнутым. б) Докажите, что полный биграф Кт,п является сильно r-замкнутым при г > max(m, п). в) Докажите, что сильно r-замкнутый граф имеет не более (г — I)2 ребер. г) Пусть L представляет собой семейство функций {1}U{[G] | G является сильно г- замкнутым графом на вершинах {1,... , п}}. (См. упр. 85, (б); мы рассматриваем G как множество ребер. Например, когда ребра представляют собой 1 — 3, 1 — 4, 2 — 3, 2 — 4, мы имеем [G] = Ж13 V жм V Х23 V Ж24-) Является ли L законным? д) Пусть in+1, ..., жм+р+д = f представляет собой монотонную булеву цепочку с р Л- и q V-шагами. Рассмотрим модифицированную цепочку ..., = /, основанную на семействе L из п. (г). Покажите, что если / / 1, то 2(г — 1)3р + (г — 1)2(п — 2) > (з). Указание: воспользуйтесь второй формулой из упр. 85, (в). е) Кроме того, если / = 1, мы должны иметь r2q > 2r+1. Указание: теперь воспользуй- тесь первой формулой. ж) Следовательно, р = Q(n/log п)3. Указание: положите г и 61g п и примените результат упр. 84. 87. [ЛГ22] Покажите, что если разрешены немонотонные операторы, то функция тре- угольника из упр. 86 имеет стоимость C(J) = O(nlg7(logn)2) = О(п2 81). Указание: граф имеет треугольник тогда и только тогда, когда куб его матрицы смежности имеет ненулевую диагональ. 88. [40] Медианная цепочка аналогична булевой цепочке, но вместо бинарных операций в (1) использует медианы трех значений ж, = для n+l<i<n + r.
7.1.3 БИТОВЫЕ ТРЮКИ И ТЕХНОЛОГИИ 165 Изучите оптимальную длину, глубину и стоимость медианных цепочек для всех само- дуальных монотонных булевых функций от семи переменных. Какова кратчайшая цепочка ДЛЯ (xiX2X3X4XsXeXr)? 7.1.3. Битовые трюки и технологии А сейчас мы переходим к самой интересной части: использованию булевых операций в наших программах. Люди обычно лучше знакомы с арифметическими операциями наподобие сло- жения, вычитания и умножения, чем с битовыми операциями, такими как “и” “ис- ключающее или” и другие, поскольку арифметика имеет очень долгую историю. Но мы увидим, что булевы операции над бинарными числами заслуживают того, чтобы быть широко известными. И действительно, они являются важной частью инструментария любого хорошего программиста. Проектировщики ранних вычислительных машин предоставляли в них поби- товые операции над полными словами, в первую очередь, из-за того, что такие команды могли быть включены в набор машинных инструкций практически бес- платно. Бинарная логика представлялась потенциально полезной, хотя в то время просматривалось только весьма малое количество ее приложений. Например, в вы- числительной машине EDSAC, завершенной в 1949 году, имелась команда “collate” которая, по сути, выполняла операцию z «— z + (х & у), где z — аккумулятор, х — регистр множителя, а у — определенное слово в памяти; эта команда использовалась для распаковки данных. Вычислительная машина Manchester Mark I, построенная примерно в то же время, включала не Только побитовое И, но также ИЛИ и ЛИБО. Когда Алан Тьюринг (Alan Turing) писал первое руководство по программированию Mark I в 1950 году, он отмечал, что побитовое НЕ можно было получить, применив ЛИБО (обозначавшееся как ‘ф’) в комбинации со строкой единиц. Р. Э. Брукер (R. A. Brooker), расширивший руководство Тьюринга в 1952году, когда была созда- на вычислительная машина Mark II, заметил, что ИЛИ можно использовать “для округления числа, устанавливая его бит в младшем разряде равным 1” В это же время машина Mark II, явившаяся прототипом для Ferranti Mercury, получила также новые команды для контрольного суммирования и для поиска позиции старшей 1. Кейт Точер (Keith Tocher) в 1954 году опубликовал необычное применение И и ИЛИ, которое затем было неоднократно открыто заново (см. упр. 85). В продол- жение следующих десятилетий программисты постепенно выясняли, что битовые операции могут быть на удивление полезны. Многие из этих трюков остались частью фольклора; сейчас пришло время воспользоваться тем, что было найдено. Трюк — это хитрая идея, которая может быть использована один раз, в то время как технология, метод — это старый трюк, который может быть использован как минимум дважды. В этом разделе мы увидим, что трюки естественным образом эволюционируют в методы. Улучшенная арифметика. Начнем с официального определения битовых опе- раций над целыми числами. Если х = (.. -xzxixojz, у = (- - - 3/22/12/0)2 и z = (... 22^120)2 в бинарных обозначениях, то мы имеем х & у = х Ф=> xk А ук = Xfc для всех к > 0; (1)
166 КОМБИНАТОРНЫЙ ПОИСК 7.1.3 X I у = z <=> xkVyk = Zk для всех к > 0; (2) х ф у = z <=> хк ф ук = zk для всех к > 0. (3) (Было соблазнительно записать ‘х Л у’ вместо х & у и ‘х V у’ вместо х | у, но при изучении задач оптимизации мы обнаружим, что обозначения х Л у и х V у лучше зарезервировать за min(x, у) и тах(х, у) соответственно.) Таким образом, например, 5&11 = 1, 5 | 11 = 15 и 5ф11 = 14, поскольку 5 = (0101)2, 11 = (1011)2, 1 = (0001)2, 15 = (1111)2 и 14 = (1110)2- Отри- цательные целые числа можно рассматривать в этой связи как числа с бесконечной точностью в дополнительном двоичном коде, имеющие бесконечно много единиц слева; например, —5 представляет собой (... 1111011)2- Такие числа с бесконечной точностью представляют собой частный случай 2-адических целых чисел, которые рассматривались в упр. 4.1-31, и в действительности операторы &, |, ф имеют точный смысл при применении к произвольным 2-адическим числам. Математики никогда не уделяли большого внимания свойствам & и | как опе- рациям над целыми числами. Но третья операция, ф, имеет почтенную историю, поскольку она описывает выигрышную стратегию в игре “Ним” (см. упр. 8-16). По этой причине х ф у часто называется ним-суммой (nim sum) целых чисел х и у. Все три базовые битовые операции имеют много полезных свойств. Например, каждое отношение между Л, V и ф, которое изучалось в разделе 7.1.1, автомати- чески наследуется &, | и ф для целых чисел, поскольку отношения выполняются в каждой битовой позиции. Повторим здесь основные тождества: х&у = у&х, х | у = у | х, х®у = у®х\ (4) (х&у) & z = х& (у& z), (х | у) | z = х | (у | z), (х фу) ф z = х ф (у ф z); (5) (х | у) = (x&z) | (y&z), (х&у) | z = (х | z) & (у | z); (6) (х ф у) & z = (х& z) ф (у & z); (7) (х & у) | х = х, (х | у) & х = х\ (8) (х & у) ф (х | у) = х ф у; (9) х&0 = 0, х 10 = х, хф0 = х; (10) х&х = х, х\х = х, хфх = 0; (11) х&—1 = х, х | — 1 = — 1, 1ф-1 = х; (12) х&х = 0, х | х = — 1, х®х = — 1; (13) х&у = х|у, х|у = х&у, х®у = х®у — х®у. (14) Обозначение х в (12), (13) и (14) означает битовое дополнение х, а именно значение (... 52X1X0)2, записываемое также как ~х. Заметим, что (12) и (13) —это не то же самое, что 7.1.1-(10) и 7.1.1-(18); здесь мы должны использовать —1 = (... 1111)2 вместо 1 = (... 0001)2 Для того, чтобы сделать формулы побитово корректными. Мы говорим, что х содержится в у, что записывается как х С у или у D х, если отдельные биты х и у удовлетворяют условию хк < ук для всех к > 0. Таким образом, х С у х&у = х х\у = у х&у = 0. (15)
7.1.3 БИТОВЫЕ ТРЮКИ И ТЕХНОЛОГИИ 167 Конечно, у нас нет необходимости использовать битовые операции только в свя- зи одна с другой; мы можем комбинировать их со всеми другими обычными ариф- метическими операциями. Например, из отношения х + х = (... 1111)2 = ~1 можно вывести формулу —х = х + 1, (16) которая оказывается чрезвычайно важной. Замена х на х — 1 дает также —х = х — 1; (17) и в общем случае можно свести вычитание к дополнению и сложению: х^у = х + у. (18) Нам часто требуется бинарный сдвиг чисел влево или вправо. Эти операции эквивалентны умножению и делению на степени 2 с соответствующим округлением, но для них удобно ввести специальные обозначения: х к = х сдвинуто влево на к бит = [2fcxJ; (19) х 2> к = я: сдвинуто вправо на А: бит = [2-fcxJ. (20) Здесь к может быть любым целым числом, возможно, отрицательным. В частности, мы имеем х (—к) = х 3> к и х (—к) = х к (21) для каждого числа х с бесконечной точностью. Кроме того, (х & у) к = (х к) & (у «: к) и т. д. % Когда битовые операции комбинируются со сложением, вычитанием, умноже- нием и/или сдвигом, можно получить исключительно сложные результаты даже при достаточно кратких формулах. Оценить эти возможности можно, например, на рис. 11. Кроме того, такие формулы не только демонстрируют бесцельное, хаотиче- ское поведение: знаменитая цепочка операций, известная как хак Госпера и впервые опубликованная в 1972 году, открыла всем глаза на тот факт, что можно быстро вычислять большое количество полезных и нетривиальных функций (см. упр. 20). Наша цель в данном разделе состоит в изучении того, как можно открывать такие эффективные конструкции. Рис. 11. Небольшая часть “лоскут- ного одеяла” которое определяется битовой функцией f(x,y) = ((ж® у) & ((ж - 350) » З))2; квадратная ячейка в строке ж и столбце у окрашивается в черный или белый цвет в зависимости от того, чему равно значение ((,f(x,y)^> 12) & 1)—0 или 1. (Разработано Д. Слитором (D. Sleator), 1976; см. также упр. 18.)
168 КОМБИНАТОРНЫЙ ПОИСК 7.1.3 Упаковка и распаковка. Мы изучали алгоритмы арифметики многократной точности в разделе 4.3.1, работая с ситуациями, когда целые числа оказывались слишком большими для размещения в одном слове памяти или одном регистре компьютера. Однако противоположная ситуация, когда целые числа значитель- но меньше емкости одного слова, в действительности встречаются намного чаще; Д. Г. Лемер (D. Н. Lehmer) назвал это явление дробной точностью. Зачастую можно работать с несколькими целыми числами одновременно, упаковав их в одно слово. Например, дата х, которая состоит из номера года у, номера месяца т и номера дня d может быть представлена с использованием 4 бит для т и 5 бит для d: х = (((?/ 4) + т) С 5) 4- d. (22) Ниже мы увидим, что многие операции могут выполняться с датами непосредствен- но в таком упакованном виде. Например, х < х', если дата х предшествует дате х1. Но при необходимости отдельные компоненты (у, т, d) для заданного х можно легко распаковать: d = х mod 32, т = (х 3> 5) mod 16, у = х » 9. (23) Эти операции “mod” не требуют применения деления в силу важного закона х mod 2” = х & (2” — 1) (24) для любого целого числа п >М). Мы имеем, например, d = х & 31 в (22) и (23). Такая упаковка данных, очевидно, экономит используемую память, но она эко- номит и время: мы можем быстро перемещать или копировать элементы данных из одного места в другое, если они упакованы вместе. Более того, компьютеры работают существенно быстрее, если имеют дело с числами, которые помещаются в кэш-память ограниченного размера. Предельная плотность упаковки достигается при однобитовых элементах, по- скольку мы можем затолкать в 64-битовое слово целых 64 таких элемента. Пред- положим, например, что нам нужна таблица всех нечетных простых чисел, мень- ших 1024, чтобы мы могли легко определить простоту небольшого числа. Никаких проблем; нам для этого потребуется только восемь 64-битовых чисел. Ро =0111011011010011001011010010011001011001010010001011011010000001, Pi =0100110000110010010100100110000110110000010000010110100110000100, Р2 = 1001001100101100001000000101101000000100100001101001000100100101, Р3 =0010001010001000011000011001010010001011010000010001010001010010, Р4 =0000110000000010010000100100110010000100100110010010110000010000, Р5 = 1101001001100000101001000100001000100001000100100101000100101000, Р6 =1010000001000010000011000011011000010000001011010000001011010000, Р7 =0000010100010000100010100100100000010100100100010010000010100110. Для проверки, является ли число 2/г+1 (0 < к < 512) простым, мы просто вычисляем PLfc/64j «(*&63) (25) в 64-битовом регистре и смотрим, равен ли крайний слева бит 1. Например, если регистр’pbase хранит адрес Ро, то указанные действия выполняются с помощью
7.1.3 БИТОВЫЕ ТРЮКИ И ТЕХНОЛОГИИ 169 следующих инструкций MMIX. SRU $0,k,3 $0 |fc/8J (т. е. к » 3) LDOU $1,pbase,$0 $1 <- P[$0/8J (т- е. P[fc/64J ) AND $0,k,#3f $0 4— к mod 64 (т. е. к & *3f) (26) SLU $1 ($1«: $0) mod 264 BN $1,PRIME Переход к PRIME, если s($l) <0. | Заметим, что крайний слева бит регистра равен 1 тогда и только тогда, когда содержимое регистра отрицательно. Мы можем точно так же упаковать биты в каждом слове справа налево. Qo = 1000000101101101000100101001101001100100101101001100101101101110, Qi =0010000110010110100000100000110110000110010010100100110000110010, <32 = 1010010010001001011000010010000001011010000001000011010011001001, <Эз=0100101000101000100000101101000100101001100001100001000101000100, <34 = 0000100000110100100110010010000100110010010000100100000000110000, <35 = 0001010010001010010010001000010001000010001001010000011001001011, <Эб=0000101101000000101101000000100001101100001100000100001000000101, <37 = 0110010100000100100010010010100000010010010100010000100010100000. Здесь Qj = Рр. Вместо сдвига влево, как в (25), мы теперь выполняем сдвиг вправо, <?Lfc/64J »(*&63), (27) и проверяем крайний справа бит результата. Последние две строки (26) превраща- ются в f SRU $1 $1»$0. B0D $1, PRIME Переход к PRIME, если $1 нечетно. | (28) (И, конечно, мы используем qbase вместо pbase.) В любом случае классическое решето Эратосфена легко заполнит элементы базовых таблиц Pj и Qj (см. упр. 24). Соглашения о порядке байтов. При упаковке битов или байтов в слова мы должны решить, будем ли мы размещать их слева направо или справа налево. Со- глашение о размещении слева направо называется обратным порядком (big-endian), поскольку начальные элементы оказываются в старших позициях; таким образом, при сравнении чисел они будут старше идущих за ними. Соглашение о размеще- нии справа налево называется прямым порядком (little-endian); при этом первые элементы размещаются там, где располагаются меньшие числа. Обратный порядок во многих случаях представляется более естественным, по- скольку мы приучены читать и писать слева направо. Но свои преимущества есть и у прямого порядка размещения. Например, обратимся вновь к задаче простых чисел. Пусть а*, = [2fc+l — простое число]. Наши записи в таблице {Ро, Pi, • •, Р?} используют обратный порядок, и мы можем рассматривать их как представление одного целого числа с многократной точностью длиной 512 бит: (PqPi • Pi)26i = (ao^i • • • ^511)2- (29) Аналогично наша таблица с прямым порядком записей представляет целое число с многократной точностью (Q7 • - • QiQo)264 = (йен - • -aiflob- (30)
170 КОМБИНАТОРНЫЙ ПОИСК 7.1.3 Таблица 1 Обратный порядок в случае 32-байтовой памяти октет 0 квартет 0 квартет 4 дуэт 0 дуэт 2 дуэт 4 дуэт 6 байт 0 байт 1 байт 2 байт 3 байт 4 байт 5 байт 6 байт 7 ао . . . 07 08 - - - 015 016 • • • 023 024 • • O31 032 • • • O39 040 • • О47 043 . . . 055 O56 . . . 063 октет 8 квартет 8 квартет 12 дуэт 8 дуэт 10 дуэт 12 дуэт 14 байт 8 байт 9 байт 10 байт 11 байт 12 байт 13 байт 14 байт 15 064 -071 072 -079 080 - 087 “88 . O95 Оде ... ащз ОЮ4 “111 ОЦ2 ... ОЦ9 0120 “127 о^тет 16 квартет 16 квартет 20 дуэт 16 дуэт 18 дуэт 20 дуэт 22 байт 16 байт 17 байт 18 байт 19 байт 20 байт 21 байт 22 байт 23 “128 • 0135 0136 “143 0144 - - - 0151 0152 0159 “160 - - - 0167 «168 “175 0176 - . . О183 О184 • • «191 октет 24 квартет 24 квартет 28 дуэт 24 дуэт 26 дуэт 28 дуэт 30 байт 24 байт 25 байт 26 байт 27 байт 28 байт 29 байт 30 байт 31 0192 • 0199 “200 • “207 “208 • • - 0215 0216 • • • “223 0224 • • • “231 0232 • • 0239 “240 • • • 0247 “248 • • • 0255 Последнее целое число математически более красиво, чем первое, поскольку оно представляет собой 511 511 оо Y^2fcafc = y^2fc[2fc+l— простое] = fy~^2fc[2fc+l— простоев mod2512. (31) k=0 k=0 k=0 Заметим, однако, что мы используем для получения этого простого результата (Q? • • • QiQoh64, а не (Q0<2i • • • ОтЪ64- Другое число, (QoQl • • • £?7)2в4 = (а63 • • • aiaoa127 • • • a65a64«191 • • • «385а384«511 • • • «449«44в)2, оказывается слишком жутким и не представимым никакой красивой формулой. (См. упр. 25.) Порядок байтов имеет важные последствия, поскольку большинство компьюте- ров позволяет как адресовать отдельные байты памяти, так и обращаться к байтам в регистрах. MMIX имеет архитектуру с обратным порядком байтов; следовательно, если регистр х содержит 64-битовое число #0123456789abcdef и если мы восполь- зуемся командами ‘STOU х,0; LDBU у,1’ для сохранения х в октете по адресу О и считывания байта в позиции 1, то в результате в регистре у получим значение *23. На машинах с прямым порядком байтов аналогичные команды приведут к установ- ке у «— *cd; *23 будет в байте 6.
7.1.3 БИТОВЫЕ ТРЮКИ И ТЕХНОЛОГИИ 171 Таблица 2 Прямой порядок в случае 32-байтовой памяти октет 24 квартет 28 квартет 24 дуэт 30 дуэт 28 дуэт 26 дуэт 24 байт 31 байт 30 байт 29 байт 28 байт 27 байт 26 байт 25 байт 24 «255 - • «248 “247 • 0240 0239 0232 0231 - 0224 “223 - “216 “215 - - - 0208 0207 - - • “200 0199 • 0192 октет 16 ..................................... -I*- квартет 20......................квартет 16 дуэт 22 дуэт 20 дуэт 18 дуэт 16 байт 23 байт 22 байт 21 байт 20 байт 19 байт 18 байт 17 байт 16 “191 - 0184 0183 • • • 0176 0175 - - - 0168 0167 - 0160 0159 - - - 0152 0151 - 0144 0143 - - 0136 0135 - - 0128 октет 8 квартет 12 квартет 8 дуэт 14 дуэт 12 дуэт 10 дуэт 8 байт 15 байт 14 байт 13 байт 12 байт 11 байт 10 байт 9 байт 8 0127 • • - “120 “119 “112 “111 • • - “104 “103 “96 095 . . . 088 087 080 079 . . . 072 071-.. 064 октет О квартет 4 квартет О дуэт 6 дуэт 4 дуэт 2 дуэт О байт 7 байт 6 байт 5 байт 4 байт 3 байт 2 байт 1 байт О 063 - - - 056 055 - - • 048 “47 Q40 O39 . . . 032 031 . . . 024 “23 • 016 O15 ... 08 07 . . . OQ В табл. 1 и 2 проиллюстрированы взгляды “тупоконечников” и “остроконечни- ков”* на размещение информации в памяти. Подход тупоконечников (сторонников обратного порядка байтов), по существу, нисходящий, с битом 0 и байтом 0 вверху слева; у остроконечников подход, по существу, восходящий, с битом 0 и байтом О внизу справа. Из-за этого отличия следует с особой осторожностью относиться к передаче данных с компьютера одного типа на другой и к написанию программ, ко- торые должны давать одинаковые результаты на компьютерах обоих типов. С дру- гой стороны, наш пример с таблицей Q для простых чисел демонстрирует, что мы отлично можем использовать прямую упаковку данных на компьютере с обратным порядком наподобие MMIX, и наоборот. Отличие становится заметным только тогда, когда данные загружаются и сохраняются блоками разных размеров, или переда- ются между машинами. Работа с крайними справа битами. В общем случае прямой и обратный подходы не столь легко взаимозаменяемы, поскольку законы арифметики передают сигналы влево от битов, находящихся в младших разрядах (least significant). Некоторые из наиболее важных битовых методов основаны на этом факте. * Впервые термины “big-endian” и “little-endian” использованы в Путешествиях Гулливера Джо- натана Свифта (Jonathan Swift) для обозначения сторонников разбивания яйца с тупого конца и с острого конца соответственно. — Примеч. пер.
172 КОМБИНАТОРНЫЙ ПОИСК 7.1.3 Если х представляет собой почти любое ненулевое 2-адическое целое число, то его биты можно записать в виде х = (а01°10ь)2; (32) другими словами, х состоит из некоторой произвольной (но бесконечной) бинарной строки а, за которой следует 0, а за ним — а+1 единиц и Ь нулей для некоторых а > О и b > 0. (Исключением является х = —2Ь; тогда а = оо.) Следовательно, х = (а10°01ь)2, (33) х-1 = (а01°01ь)2, (34) -х = (а10°10ь)2; (35) и мы видим, что х+1 = —х = х — 1, что согласуется с (16) и (17). Таким образом, мы можем вычислить связанные с х значения с помощью двух операций несколькими полезными способами» (т~1) = ( а 01°00ь)2 [удаление крайней справа единицы]; (36) — х = (0°°00о10ь)2 [выделение крайней справа единицы]; (37) х | — х = (1°°11“10ь)2 [распространение крайней справа единицы влево]; (38) х® — х = (1°°11о00ь)2 [удаление и распространение ее влево]; (39) х | (х— 1) = ( а 01°11ь)2 [распространение крайней справа единицы вправо]; (40) х ф (х— 1) = (0°°00°11ь)2 [выделение и распространение ее вправо]; (41) х&: (х— 1) = (0°°00о01ь)2 [выделение, удаление и распространение ее вправо]. (42) Две дополнительные операции дают еще один вариант: ((x|(x—1))+1) & х = ( а 00“00ь)2 [удаление крайней справа серии единиц]. (43) При х = 0 пять из этих формул дают 0, а три другие дают —1. [Формула (36) разра- ботана Путтило Вейденом (Peter Wegner), САСМ 3 (1960), 322; а (43) — X. Т. Глад- вином (Н. Tim Gladwin), САСМ 14 (1971), 407-408. См. также Генри С. Уоррен-мл. (Henry S. Warren, Jr.), САСМ 20 (1977), 439-441.] В этих формулах величина Ь, определяющая количество завершающих нулей в х, называется линеечной функцией от т и записывается как рх, поскольку она связана с длиной штриховых меток, часто использующихся для указания долей сантиметров: рл^т^тртттпт,тт^т]. В общем случае рх представляет собой наибольшее целое число к, такое, что 2к делит х при х 0; мы определяем также р0 = оо. Рекуррентные соотношения р(2х -I-1) = 0, р(2х) = р(х) + 1 (44) также служат для определения рх для ненулевых х. Другим удобным соотношени- ем, достойным упоминания, является р(х-у) = р(хфу). (45) Элегантная формула х & — х в (37) позволяет нам красиво выделить крайний справа бит 1, но зачастую нам надо точно определить, какой именно это бит. Лине- ечная функция может быть вычислена многими путями, и наилучший метод часто
7.1.3 БИТОВЫЕ ТРЮКИ И ТЕХНОЛОГИИ 173 сильно зависит от используемого компьютера. Например, последовательность двух команд, придуманная Д. Даллосом (J. Dallos), выполняет эту работу легко и быстро на машине MMIX (см. (42)): SUBUt,x,l; SADDrho.t.x. (46) (Случай х = 0 рассматривается в упр. 30.) Здесь мы рассмотрим два подхода, кото- рые не используют экзотические команды наподобие SADD; а позже, после изучения еще нескольких методов, мы рассмотрим и третий способ. Первый метод общего Назначения использует константы “магических масок” рк, которые доказанно полезны во многих других приложениях, а именно (Ю = (... 101010101010101010101010101010101)2 = -1/3, щ = (... 100110011001100110011001100110011)2 = -1/5, д2 = (... 100001111000011110000111100001111)2 = -1/17, ( ’ ИЗ = (... 100000000111111110000000011111111)2 = -1/257 и т. д. В общем случае рк представляет собой бесконечную 2-адическую дробь —1/(22*-|- 1), поскольку (22*+ 1)р,к = (Нк 2fe) + рк = (• • • 11111)2 = —1- На ком- пьютерах с 2^-битовыми регистрами нам, конечно, не нужна бесконечная точность, так что мы используем урезанные константы Pd,k = (22<I - 1)/(22* -I-1) для 0 < к < d. (48) Эти константы знакомы нам по булевым вычислениям, поскольку они представляют собой таблицы истинности проецирующих функций ха-к (см., например, 7.1.2-(7)). Когда х представляет собой степень 2, мы можем использовать эти маски для вычисления рх = [а: & до = 0] 4- 2[х & Д1 = 0] + 4[я; & дг = 0] + 8[т & дз = 0] -I- • • •, (49) поскольку [2-7 &д/£ = 0] = jk при j = (• • j3j2jijo)2- Таким образом, на 2d-6nTOBOM компьютере можно начать ср<—0иу<—а:& —х; затем установить р +— р + 2к, если У & Hd,k = 0, при 0 < к < d. Эта процедура дает р = рх при х / 0. (Она также дает рО = 2d — 1, аномальное значение, которое может потребоваться откорректировать; см. упр. 30.) Например, соответствующая программа MMIX может выглядеть следующим об- разом. m0 GREG #5555555555555555 m2 GREG #0f Of Of Of Of Of Of Of m4 GREG #0000f f f f OOOOf f f f NEGUy.x; ANDy.x.y; AND AND q,y,m4; ADD t,rho, 16: AND q,у ,m3; ADD t,rho,8; AND q,y,m2; ADD t,rho,4; ANDq,y,ml; ADD t,rho,2; AND q,y,m0; ADD t,rho,1; ;ml GREG #3333333333333333; ;m3 GREG #00ff00ff00f fOOf f; ;m5 GREG #00000000fff fffff; q,y,m5; ZSZ rho,q,32; ; CSZ rho,q,t; CSZ rho,q,t; CSZ rho,q,t; CSZ rho,q,t; CSZ rho,q,t; (50) Общее время работы равно 19г;. Последние три строки можно заменить строками (51) SRUy,y,rho; LDB t,rhotab,y; ADD rho,rho,t
174 КОМБИНАТОРНЫЙ ПОИСК 7.1.3 где rhotab указывает на начало соответствующей 129-байтовой таблицы (реально используются только восемь из ее записей). В этом случае общее время работы составляет // + 13и. Второй подход общего назначения для вычисления рх существенно отличается от рассмотренного. На 64-битовых машинах он начинается, как и ранее, с у <— х 8г —т; но затем он просто устанавливает р <— decode [((а • у) mod 264) 2> 58], (52) где а — подходящий множитель, a decode — соответствующая 64-байтовая таблица. Константа а = (авз ... <2100)2 должна обладать тем свойством, что ее 64 подстроки “63“62 • • • “58, “62*161 • • • “57, • • • , “5“4 • • • “0, «4“3“2“1“о0, • • , “qOOOOO различны. В упр. 2.3.4.2-23 показано, что есть много таких “циклов де Брейна”; так, можно использовать константу М. X. Мартина (М. Н. Martin) #03f79d71b4ca8b09, которая рассматривается в упр. 3.2.2-17. Таблица декодирования decode[0],..., decode [63] в таком случае представляет собой 00,01,56,02,57,49,28,03,61,58,42,50,38,29,17,04, 62,47,59,36,45,43,51,22,53,39,33,30,24,18,12,05, ( . 63,55,48,27,60,41,37,16,46,35,44,21,52,32,23,11, 54,26,40,15,34,20,31,10,25,14,19,09,13,08,07,06. [Этот метод разработан в 1967 году Лютером Вудрамом (Luther Woodrum) из от- дела системных разработок IBM (неопубликовано); многие другие программисты впоследствии открыли его независимо.] Работа с крайними слева битами. Функция Аа: = [1g я] дуальна к рх, по- скольку устанавливает местоположение крайней слева единицы при х > 0 и введена в 4.6.3-(6). Она удовлетворяет рекуррентному соотношению А1 = 0; А(2т) = А(2т 4-1) = А(х) 4-1 для х > 0 (54) и не определена, когда х не является положительным целым числом. Каким же способом лучше всего ее вычислять? И вновь MMIX предоставляет быстрое решение- трюк: FLOTU y,R0UND_D0WN,x; SUB у,у,tone; SR 1am,у,52, (55) где tone = #3ff0000000000000 — представление с плавающей точкой числа 1.0. (Общее время счета равно би.) Этот код превращает х в число с плавающей точкой, а затем выделяет его степень. Но если преобразование в число с плавающей точкой не является легко доступ- ным, на 2d-6nTOBbix машинах хорошо работает стратегия бинарного сокращения. Мы можем начать с А <— 0 и у <— х; затем мы устанавливаем А«— A-|-2fe и у <— y»2fe, если у 3> 2к /0, для к = d — 1, ..., 1, 0 (или пока к не снизится до точки, когда для завершения работы можно будет воспользоваться короткой таблицей). Код MMIX, аналогичный (50) и (51), теперь представляет собой SRUy,x,32; ZSNZ 1am,у,32; ADD t,lam, 16; SRUy,x,t; CSNZ lam,y,t; ADD t,lam,8; SRUy,x,t; CSNZ lam,y,t; SRUy,x,lam; LDB t,lamtab,y; ADD lam,lam,t;
7.1.3 БИТОВЫЕ ТРЮКИ И ТЕХНОЛОГИИ 175 а общее время работы составляет р+ Игл В данном случае таблица lamtab имеет 256 элементов, а именно Хх для 0 < х < 256. Заметим, что вместо команд ветвления здесь и в (50) используются команды “условная установка” (“conditional set” CS) и “нуль или установка” (“zero or set” ZS). Похоже, что простого способа выделения крайнего слева бита 1 из регистра, аналогичного трюку с выделением крайнего справа бита 1 в (37), не существует. Для этой цели мы можем вычислить у «— Хх, а затем 1 у, если х 0; но бинарное “распространение вправо” оказывается короче и быстрее: Установить у «— х, затем у «— у | (у 2fe) для 0 < к < d. После этого крайний слева бит 1 в ж равен у — (у 1). ' [Эти методы без применения чисел с плавающей точкой предложены Г. С. Уорреном- мл. (Н. S. Warren, Jr.).] Другие операции в левой части регистра, наподобие удаления крайней слева серии единиц, оказываются еще сложнее; см. упр. 39. Однако имеется замечатель- но простой машинно-независимый способ проверки, выполняется ли соотношение Хх = Ху, для данных беззнаковых целых х и у, несмотря на тот факт, что мы не можем быстро вычислить Ат и Ау: Хх = Ху тогда и только тогда, когда х ф у < х & у. (58) [См. упр. 40. Это красивое соотношение было открыто в 2006 году У. Ч. Линчем (W. С. Lynch).] Мы будем использовать (58) ниже для разработки другого пути вычисления Хх. Контрольное сложение. Бинарные n-битовые числа х = (xn_i...rrirroh ча- сто используются для представления подмножеств X n-элементной совокупности {0,1,... ,п — 1}, где к G X тогда и только тогда, когда 2fe С х. Функции Хх и рх в таком случае представляют наибольший и наименьший элементы X. Функция vx = xn^i -I----1- xi + х0, (59) которая называется контрольной суммой (sideways sum) или заселенностью (popu- lation count) х, также имеет очевидную важность в данной связи, поскольку пред- ставляет мощность |Х|, а именно количество элементов в X. Эта функция, которую мы рассматривали в 4.6.3-(7), удовлетворяет рекуррентному соотношению i/0 = 0; v(2x) = v(x) и i/(2x+l) = v(x) -I-1 для х > 0. (60) Она также имеет интересную связь с линеечной функцией (упр. 1.2.5-11): п рх = 1 + v(x— 1) — их', или, что эквивалентно, рк = п — vn. (61) fc=i Первый учебник по программированию, The Preparation of Programs for an Electronic Digital Computer Уилкиса (Wilkes), Уиллера (Wheeler) и Джилла (Gill), второе издание (Reading, Mass.: Addison-Wesley, 1957), 155, 191-193, содержит инте- ресную подпрограмму для контрольного суммирования, разработанную Д. Б. Джил-
176 КОМБИНАТОРНЫЙ ПОИСК 7.1.3 лисом (D. В. Gillies) и Д. Ч. П. Миллером (J. С. Р. Miller). Их метод разработан для 35-битового числа машины EDS АС, но легко преобразуется в следующую 64- битовую процедуру для их, где х = (тез • - • яд £0)2= Установить у ♦— а: — ((а:» 1)& д0). (Теперь у = (u3i .. .uiu0)4, где Uj = x2j+i + x2j.) Установить у «- (у&Д1)+((у»2)&Д1). (Теперь у = (v15 ... viv0)ie, Vj ~ «2j+i+u2j-) Установить у <— (у + (у » 4)) & д2. (Теперь у = (w? ... wiwo)256, Wj — i>2j+i + v2j.) Наконец и <— ((a • у) mod 264) 3> 56, где a = (11111111)256- (62) Последний шаг, понятно, вычисляет у mod 255 = W7 + • • • + ид 4- wq путем умноже- ния, используя тот факт, что сумма отлично помещается в восемь битов. [Дэвид Мюллер (David Muller) запрограммировал подобный метод для машины ILLIAC I в 1954 году.] Если ожидается, что значение х “разреженное” содержащее малое количество битов 1, можно воспользоваться более быстрым методом [П. Вейден (Р. Wegner), САСМ 3 (1960), 322]: Установить и «— 0, у «— х. Затем, пока у / 0, устанавливать и <— и + 1, у <— у & (у — 1). (63) Аналогичный подход, использующий у <— у | (у +1), работает в случае “плотных” х. Обращение порядка битов. В нашем следующем трюке выполним замену х = (ata • • • Т1То)г его зеркальным отображением, xR — (xqX\ ... Тб3)2- Любой, кто вни- мательно следил за событиями до этого времени и рассмотрел методы наподобие (50), (56), (57) и (62), вероятно, подумает “Ага, мы снова можем разделять (по- полам) и властвовать! Если мы уже знаем, как обращать 32-битовые числа, то сможем обратить и 64-битовое число почти так же быстро, поскольку (xy)R = yRxR. Все, что нам надо сделать, — это применить 32-битовый метод параллельно к обеим половинам регистра, а затем поменять местами левую половину и правую” Правильно. Например, мы можем обратить 8-битовую строку с помощью трех простых шагов. Задано аДЖбЯ^ЯДЯ^Я^ЯДЯд Обмен битов Хе Т7Т4 Х5 Х2 ХзХоХу Обмен пар битов Х4Х5Х6 X? XqXi Х2Хз ^оч; Обмен полубайтов ХоХ1Х2ХзХ4Х5ХвХ7 А шесть таких простых шагов обращают 64 бит. К счастью, каждая из таких опе- раций обмена оказывается достаточно простой, если воспользоваться магическими масками р*'- у <- (х » 1) & ДО, z <— (х к до) 1, х <— у | z; У <- (х»2) & ДЪ z <— (хк Д1) С 2, х «— у | z- у <- (х »4) & Д2, z «— (х к дг) <С 4, x<—y\z; у «- (я » 8) & дз, z <— (хк дз) С 8, х «— у | z; у «- (х 16) & Д4 , z <— (хк д4) 16, х <— у | z; X <— (х » 32) I ((х « 32) mod 264). (65) [Кристофер Страчи (Christopher Strachey) предсказал некоторые аспекты данного построения в САСМ 4 (1961), 146, а подобный тернарный метод был разработан
7.1.3 БИТОВЫЕ ТРЮКИ И ТЕХНОЛОГИИ 177 в 1973году Брюсом Баумгартом (Bruce Baumgart) (см. упр. 49). Тщательно прора- ботанный алгоритм (65) представлен Генри С. Уорреном-мл. (Henry S. Warren, Jr.) в книге Hacker’s Delight* (Addison-Wesley, 2002), 102.] MMIX в очередной раз оказался способным превзойти метод общего назначения с помощью менее традиционных команд, которые позволяют выполнить эту работу быстрее. Рассмотрим команды rev GREG #0102040810204080; M0Rx,x,rev; MOR х,rev,х; (66) Первая команда MOR обращает байты х из прямого порядка в обратный и наоборот, а вторая обращает биты в пределах каждого байта. Обмен битов. Предположим, что мы хотим только лишь обменять два бита в пределах регистра, т. е. выполнить Хг «-+ Xj, где i > j. Как сделать это лучше всего? (Дорогой читатель, не спеши! Попытайся решить эту задачу в уме или на бумаге, перед тем как прочесть ответ ниже.) Пусть 6 = i — j. Вот одно из решений (не подсматривайте, пока не решили задачу самостоятельно!): у «— (х »6) fy 2^, z «— (х & 2J) х «— (х & т) | у | z, где т = 2l|2J. (67) Оно использует два сдвига и пять битовых булевых операций в предположении, что i и j представляют собой заданные константы. Решение похоже на первые строки (65), за исключением того, что требуется новая маска т, поскольку у и z не учитывают все биты х. Можно, однако, поступить и лучше, сэкономив одну операцию и одну константу: у <— (х ф (х »<5)) & 2J, х <— х ф у ф (у <g <5). (68) Первое присваивание теперь помещает т^фт^- в позицию у; второе изменяет Xi на Xi® (xi®Xj) и Xj на Xj®(xi®Xj), как и требовалось. В общем случае часто оказывается разумно преобразовать задачу вида “заменить х на f(x)n в задачу “заменить х на х ф д(х)’’ поскольку д(х) может быть проще вычислить. С другой стороны, имеется смысл, в котором (67) может оказаться предпо- чтительнее (68), поскольку присваивание у и z в (67) иногда может выполняться одновременно. При использовании представления в виде схем (67) имеет глубину 4, в то время как (68) имеет глубину 5. Операция (68), конечно же, может использоваться и для одновременного обмена нескольких пар битов при использовании маски 0 более общего вида, чем 2J: у «— (х ф (х 3> <5)) & 0, х <— х ф у ф (у С <5). (69) Назовем эту операцию «5-обменом (<5-swap), поскольку она позволяет выполнять обмен любых неперекрывающихся пар битов, где биты в парах находятся на рас- стоянии <5 один от другого. Маска 0 должна иметь 1 в крайней справа позиции каждой пары, в которой должен быть выполнен обмен. Например, (69) может * Имеется перевод на русский язык: Генри С. Уоррен. Алгоритмические трюки для програм- мистов. М.: Издательский дом “Вильямс” 2003. — Примеч. пер.
178 КОМБИНАТОРНЫЙ ПОИСК 7.1.3 обменивать 25 крайних слева битов 64-битового слова с 25 крайними справа битами, оставляя 14 средних битов нетронутыми, если положить <5 = 39 и 6 = 225 — 1 = В действительности имеется изумительный способ обращения порядка 64 битов с помощью «5-обмена, а именно у <— (х » 1) & До, z <— (хк До) 1, х <— у | z, У «- (х ф (х »4)) & *0300с0303030с303, х*-х®у®(у«4), у (х ф (х 2> 8)) & *00c0300c03f00031, х <— х ф у ф (у С 8), (70) у <— (х ф (х 20)) & *000001 f c00003f f f, х<- а: ф у ф (у 20), х «- (х » 34) | ((х С 30) mod 264), который экономит две битовые операции в (65), хотя способ (65) выглядит “опти- мальным’.’ *Перестановка битов в общем случае. Только что рассмотренные методы при- менимы и для получения произвольной перестановки битов в регистре. В действи- тельности всегда существуют маски в0, .6$, 64, ..., в0, такие, что приведенные далее операции преобразуют х = (т63.. .lXiX0)2 в любую требуемую перестановку х" = (гЕбЗтг... Х1ПхОп)2 его битов: х «— 2к-обмен х с маской для к = 0, 1, 2, 3, 4, 5; х 2к-обмен х с маской вк для к = 4, 3, 2, 1, 0. В общем случае перестановка 2d бит может быть достигнута с помощью 2d — 1 таких шагов с использованием соответствующих масок 0к и 0к, ?№ расстояния обмена представляют собой сЬответственно 2°, 21, ..., 2d-1, ..., 21, 2°. Для доказательства этого факта можно воспользоваться частным случаем пере- становочных сетей, которые были независимо открыты Э. М. Дугвайдом (А. М. Du- guid) и Ж. ле Корром (J. Le Согге) в 1959 году на основе более ранней работы Д. Сле- пиана (D. Slepian) [см. V. Е. Benes, Mathematical Theory of Connecting Networks and Telephone Traffic (New York: Academic Press, 1965), Section 3.3]. На рис. 12 показана перестановочная сеть Р(2п) для 2п элементов, построенная из двух пере- становочных сетей для п элементов при п = 4. Каждое соединение J между двумя линиями представляет модуль перекрещивания, который при потоке данных слева направо либо оставляет содержимое линий неизменным, либо обменивает его. Для начала рекурсии при п = 1 мы положим Р(2) состоящим из одного перекрещивания. Каждая настройка отдельных перекрещиваний, очевидно, приводит к тому, что Р(2п) дает на выходе перестановку входных данных; и обратно, мы покажем, что любая перестановка 2п входов может быть получена при соответствующей настрой- ке перекрещиваний. Конструкцию на рис. 12 легче всего понять на конкретном примере. Предпо- ложим, мы хотим направить входы (0,1,2,3,4,5,6,7) в выходы (3,2,4,1,6,0,5,7) соответственно. Первая задача состоит в определении содержимого линий непосред- ственно после первого столбца перекрещиваний и непосредственно перед последним столбцом, поскольку тогда мы сможем применить аналогичный метод и для на-
7.1.3 БИТОВЫЕ ТРЮКИ И ТЕХНОЛОГИИ 179 Рис. 12. Внутреннее устройство черного ящика Р(2п), который выпол- няет перестановку 2п элементов всеми возможными способами при п > 1. (Иллюстрация для значения п = 4.) стройки перекрещиваний во внутренних Р(4). Таким образом, в сети 0—t—а—. 1 X U н- —А—3 п Д 9 1 • D Л ж 4 2 Т с ' Q А я С Г 4 0 • С1 и • 1 Т7 а Д 4 Т с • К А * Е» т 0 Г А П О • I и Г • и п л г Ото1 7—•—h— —< и Ф О Н—1— 7 (72) необходимо найти перестановки abcdefgh и ABCDEFGH, такие, что {а,Ь} = {0,1}, {c,d} = {2,3}, ..., {g,h} = {6,7}, {а,с,e,g} = {A,C,E,G}, {b,d,f,h} = {В,D,F,H}, {А,В} = {?,2}, {C,D} = {4,1}, ..., {G,H} = {5,7}. Начиная снизу, выберем h = 7, поскольку мы не хотим трогать содержимое линий без необходимости. Тогда мы вынуждены сделать следующий выбор: Н = 7; G= 5; е = 5; f =4; D = 4; C=l; а=1; b = 0; F = 0; Е = 6; g = 6. (73) Если бы мы выбрали h = 6, то получили бы аналогичный, но обратный шаблон F = 6; Е = 0; а = 0; b = 1; D= 1; С = 4; е = 4; f = 5; Н = 5; G = 7; g = 7. (74) Выбор и (73), и (74) может быть завершен либо выбором d = 3 (а следовательно, В = 3, А = 2, с = 2), либо выбором d = 2 (а следовательно, В = 2, А = 3, с = 3). В общем случае такой вынужденный шаблон состоит из циклов, независимо от того, с какой перестановки мы начинаем. Чтобы увидеть это, рассмотрим граф из восьми вершин {ab, cd, ef, gh, АВ, CD, EF, GH}, который содержит ребро от uv к UV тогда, когда пара на входе, подключенная к uv, имеет общий элемент с парой на выходе, подключенной к UV. Таким образом, в нашем примере ребрами являются ab — EF, ab — CD, cd — АВ, cd — АВ, ef — CD, ef — GH, gh — EF, gh — GH. Мы имеем “двойную связь” между cd и АВ, поскольку входы, подключенные к с и d, представляют собой выходы, подключенные к А и В; результат при этом несколько отклоняется от строгого определения графа. Мы видим, что каждая вершина
180 КОМБИНАТОРНЫЙ поиск 7.1.3 является соседней ровно с двумя другими вершинами, и вершины, помеченные строчными буквами, всегда являются смежными с вершинами, помеченными буква- ми прописными. Следовательно, граф всегда состоит из непересекающихся циклов четной длины. В нашем примере этими циклами являются ^EF — gh abf' ^GH CD —ef cd = AB, (75) где более длинный цикл соответствует (73) и (74). Если имеется к разных циклов, будет 2fc разных способов определить поведение первого и последнего столбцов перекрещиваний. Для завершения сети мы можем таким же образом обработать внутренние 4- элементные перестановки; таким же рекурсивным способом можно получить любую перестановку 2d элементов. Получающиеся настройки перекрещиваний определяют маски 6j и f)j из (71). Некоторые выборы перекрещиваний могут привести к маскам, состоящим полностью из одних лишь нулей; в таком случае мы можем опустить соответствующий этап вычислений. Наше построение показывает, как в случае, когда входные и выходные данные в нижних строках сети идентичны, обеспечить, чтобы никакие перекрещивания, касающиеся этих линий, не были активными. Например, 64-битовый алгоритм в (71) может использоваться и с 60-битовым регистром без необходимости в четырех дополнительных битах для любого из промежуточных результатов. Конечно, зачастую в частных случаях мы можем превзойти процедуру из (71). Например, в упр. 52 показано, что метод (71) требует девяти шагов обмена для транспонирования матрицы 8 х 8, в то время как в действительности достаточно трех обменов. Дано » 00 01 02 03 04 05 06 07 10 11 12 13 14 15 16 17 20 21 22 23 24 25 26 27 30 31 32 33 34 35 36 37 40 41 42 43 44 45 46 47 50 51 52 53 54 55 56 57 60 61 62 63 64 65 66 67 70 71 72 73 74 75 76 77 7-обмен 00 10 02 12 04 14 06 16 01 11 03 13 05 15 07 17 20 30 22 32 24 34 26 36 21 31 23 33 25 35 27 37 40 50 42 52 44 54 46 56 41 51 43 53 45 55 47 57 60 70 62 72 64 74 66 76 61 71 63 73 65 75 67 77 14-обмен 00 10 20 30 04 14 24 34 01 11 21 31 05 15 25 35 02 12 22 32 06 16 26 36 03 13 23 33 07 17 27 37 40 50 60 70 44 54 64 74 41 51 61 71 45 55 65 75 42 52 62 72 46 56 66 76 43 53 63 73 47 57 67 77 28-обмен 00 10 20 30 40 50 60 70 01 11 21 31 41 51 61 71 02 12 22 32 42 52 62 72 03 13 23 33 43 53 63 73 04 14 24 34 44 54 64 74 05 15 25 35 45 55 65 75 06 16 26 36 46 56 66 76 07 17 27 37 47 57 67 77 “Идеальное тасование” представляет собой другую часто возникающую на прак- тике перестановку битов. Если х = (... £2^120)2 и у = (... 2/2Х/13/о)г являются любы- ми 2-адическими целыми числами, определим х J у (“х zip у” функцию застежки* от х и у) как чередование их битов: Х^у = (...Х2У2Х1У1ХОУо)2- (76) Эта операция имеет важное приложение для представления двумерных данных, поскольку небольшое изменение либо в х, либо в у обычно приводит к небольшому изменению в х$у (см. упр. 86). Обратите также внимание, что константы магических масок (47) удовлетворяют условию Pk t Рк = Рк+1 (77) Zipper function. Zipper (англ.)—застежка-молния. — Примеч. пер.
7.1.3 БИТОВЫЕ ТРЮКИ И ТЕХНОЛОГИИ 181 Если х находится в левой части регистра, а у — в его правой части, то идеальное тасование представляет собой перестановку, которая заменяет содержимое регистра на х J у. Последовательность d — 1 шагов обмена идеально тасует 2^-битовый регистр; в действительности в упр. 53 показано, что имеется несколько способов решения этой задачи. Следовательно, мы еще раз оказались способными улучшить (2d — 1)- шаговый метод (71) и рис. 12. И обратно, предположим, у нас есть перетасованное значение z = х | у в 2d-6n- товом регистре; существует ли эффективный способ выделить исходное значение у? Конечно: если d — 1 обменов, осуществляющих идеальное тасование, выполнить в обратном порядке, то будут восстановлены значения х и у. Но если требуется восстановить только у, то можно сэкономить половину работы. Начнем с у +— х&до; затем установим у «— (?/+(?/3>2fc-1))&/ifc для к = 1,..., d—1. Например, когда d = 3, эта процедура выполняет (0уз0у2®У1®Уо)2 ” (ООузУзООухуоЪ (0000узУ2У1Уо)2- И вновь работает принцип “разделяй и властвуй” Рассмотрим теперь более общую задачу, когда мы хотим выделить и сжать произвольное подмножество битов регистра. Предположим, что у нас есть 2d-6HTO- вое слово z = (z2d_i... 2120)2 и маска х = (X2d-i • XiXob, в которой s бит равны 1; таким образом, их = s. Задача заключается в сборке компактного подслова ' У = (з/s-i - 2/12/0)2 = (zja_,... Zj1Zj0)2, (78) где js-i > • • > ji > jo — индексы, для которых Xj = 1- Например, если d = 3 и х = (10110010)2, мы хотим выполнить преобразование z = (узхзу2У1Х2Х1УоХо)2 в у = (,УзУ2У1Уо)2- (Задача перехода от х$у к у, рассмотренная выше, представляет собой частный случай х — До-) Из (71) мы знаем, что у может быть найдено с помощью не более 2d — 1 <5-обменов; но в нашей задаче необходимые данные всегда перемещаются только вправо, так что можно ускорить работу путем применения сдвигов вместо обменов. .Назовем <5-сдвигом х с маской 0 операцию х «— х ф ((т ф (х » 6)) 0), (79) которая изменяет бит Xj на Xj+g, если 0 содержит 1 в позиции j, но оставляет Xj неизменным в противном случае. Гай Стил (Guy Steele) открыл, что всегда суще- ствуют маски во, 0i, 0d-i, такие, что общая задача выделения (78) может быть решена с помощью небольшого количества <5-сдвигов: Начать с х «— z\ затем выполнить 2л-сдвиг х с маской 0k ,аг., для к = 0, 1, ..., d — 1; наконец установить у <— х. В действительности идея поиска соответствующих масок неожиданно проста. Каж- дый бит, который мы хотим переместить в конечном итоге на I = (/j-i /1/0)2 позиций вправо, должен перемещаться в 2л-сдвиге, для которого Ik = 1. Предположим, например, что d = 3 и х = (10110010)2- (Мы должны считать, что х 7^ 0.) Вспоминая, что в результат должно быть “вдвинуто” слева некоторое количество нулей, мы можем установить 0о = (00011001)2, 01 = (00000110)2, 02 = (11111000)2; тогда (80) выполняет отображение (УзХзУ2У1Х2Х1УоХО)2 (УзХзУ2У2У1Х1УоУо)2 (УзХзУ2У2У1У2У1Уо)2 (0000узУ2У1Уо)2-
182 КОМБИНАТОРНЫЙ ПОИСК 7.1.3 В упр. 69 доказывается, что выделяемые биты никогда не взаимодействуют один с другим во время своих путешествий. Кроме того, имеется легкий способ вычис- ления подходящих масок в^ динамически из х за O(d2) шагов (см. упр. 70). Операция “отделения агнцев от козлищ” (“sheep-and-goats”), или группировки, предназначенная для аппаратного обеспечения компьютера, расширяет (78), гене- рируя обобщенное неперетасованное слово (а?г-1 xixoya-i У1Уо)2 = (zir_1 ... zix zio z,,_x... zix zJO)2; (81) здесь ir_i > • • > ii > io—индексы, для которых Xi = 0. Однако более полезной и простой в реализации оказывается операция под названием “сбор и переворот” (“gather-flip”), которая обращает порядок немаскированных битов и дает (ХОХ1 - - - Хг-!уа-1 . . . У!Уо)2 = (Ziozit . . . Zir_1 Zj^ . . . Zjt Zj0)2. (81') Любая перестановка 2d бит достижима при использовании любой из операций не более d раз (см. упр. 72 и 73). Сдвиги также позволяют нам выйти за рамки перестановок и перейти к произ- вольным отображениям битов в регистре. Предположим, что мы хотим преобра- зовать X — (x2d- 1 • . • _Д-1^То)2 1 ► — (*^(2d—1)<р ’ ' * Х!1(рХ0ф)2, (82) где ip является одной из (2d)2<* функций, отображающих множество {0,1,..., 2d — 1} в себя. Ц. М. Чжун (К. М. Chung) и Ч. К. Вонг (С. К. Wong) [IEEE Transactions С-29 (1980), 1029-1032] предложили привлекательный способ выполнения такого преобразования за O(d) шагов с использованием циклических <5-сдвигов, которые подобны (79), за исключением того, что мы устанавливаем х «— х ф ((а: ф (х ~Э> 6) ф (х (2d — <5))) & 0). (83) Их идея заключается в том, чтобы начать с выяснения количества индексов j, таких, что = I, для 0 < I < 2d, и обозначить их как Q. Затем они находят маски во, в1, ..., 6d-i, обладающие тем свойством, что циклический 2л-сдвиг х с маской в^, выполняющийся последовательно для 0 < k < d, будет преобразовывать х в чис- ло х', которое содержит ровно с/ копий бита xi для каждого I. Наконец для замены х' ь-► xv можно использовать обобщенную процедуру перестановки (71). Предположим, например, что d = 3 и xv = (хзХхХхХо^зз^бЯбЬ- Тогда мы име- ем (ео,С1,с2,сз,с4,С5,Сб,С7) = (1,2,0,2,0,2,0,1). Используя маски во = (00011100)2, вг = (00001000)2 и й2 = (01100000)2, три циклических 2*-сдвига отображают х = (Х7ХбХ5Х4ХзХ2Х1Хо)2 * ► * ► (Я/7'^6'^5'^5'^5'^3'^1'^о)2 * ► (3:73:32:13:53:53:33:13:0)2 = з?. Затем выполняем несколько ^-обменов: х' н-► (хзХ7Х^Х±ХзХ^Х1Хо)2 * ► ^X^XiX^X^X^X^XiXq^^ * ► ^'T^XiXiXoX^X^X^X’^^2 * ► (гтзГГхГГхГГо^зЯ^з^бЪ = работа сделана! Конечно, любое 8-битовое отображение может быть достигнуто более быстро с помощью “грубой силы” по одному биту за раз. Метод Чжуна и Вонга становится более впечатляющим при 256-битовом регистре. Но он неплох даже в случае 64-битового регистра MMIX, требуя в худшем случае не более 96 тактов. Чтобы найти во, воспользуемся тем фактом, что ^2 ci — 2d, и рассмотрим ^четные = У2 С21 И Енечетные = С2Х4-1. ЕСЛИ Ечетные — Енечетные — 2 , МОЖНО установить во = 0 и пропустить циклический 1-сдвиг. Но если, скажем, S четные <
7.1.3 БИТОВЫЕ ТРЮКИ И ТЕХНОЛОГИИ 183 ^нечетные, то мы найдем четное I, такое, что q = 0. Циклический сдвиг в биты 1,1+1, ..., l + t (по модулю 2d) для некоторого t даст новые величины (cq,...,c'2d_l), для которых Е четные = ^нечетные = 2d-1; ТДК ЧТО в0 = 21 4 F 2(Z+‘> mod 2d. Тогда МОЖНО работать с битами в четных и нечетных позициях по отдельности, используя тот же метод, пока не дойдем до 1-битовых подслов. Детальное описание см. в упр. 74. Работа с фрагментированными полями. Вместо выделения битов из различ- ных частей слова и сбора их вместе часто можно просто работать с этими битами в их исходных позициях. Предположим, например, что мы хотим пройти по всем подмножествам данного множества U, где, как обычно, множество определяется с помощью маски х, такой, что [A: G17] = (х 3> к) Sz 1. Если х С х и х х, имеется простой способ вычисления следующего наибольшего подмножества U в лексикографическом порядке, а именно наименьшего целого числа а/ > х, такого, что х' С х- = (я-х)&Х- (84) В частном случае, когда i = Ои \ / 0, мы уже видели в (37), что эта формула дает крайний справа бит Xi который соответствует лексикографически наименьшему непустому подмножеству U. Почему работает формула (84)? Представим прибавление 1 к числу х |х, которое содержит единицы там, где х равно нулю. Перенос будет распространяться по всем этим единицам, пока не достигнет крайней справа позиции, где х имеет нуль, а х—единицу; кроме того, все биты справа от этой позиции станут равными нулю. Следовательно, х' = ((х | х) + 1) Sz X- Но мы имеем (х | х) + 1 = (а: 4- х) 4- 1 = а?4-(х4-1)=а:-х при х С х- QED. Обратите также внимание, что х' = 0 тогда и только тогда, когда х = X- Так что мы будем знать, когда найдем наибольшее подмножество. В упр. 79 показано, как вернуться к х, зная а?'. Мы можем также захотеть пройти по всем элементам подкуба, например, чтобы найти все битовые шаблоны, которые отвечают спецификации наподобие *10*1*01, состоящие из нулей, единиц и безразличных значений. Такая спецификация мо- жет быть представлена кодами звездочек а = (ап-1 • • • 00)2 и кодами битов Ь = (bn-i... 60)2, как в упр. 7.1.1-30; наш пример соответствует а = (10010100)2, b = (01001001)2- Задача перечисления всех подмножеств множества является частным случаем, где а = х и Ь = 0. В более общей задаче подкуба преемником данного битового шаблона х является х' = ((х — (а 4- Ь)) Sz а) 4- Ь. (85) Предположим, что биты числа z = (zn-i... 2:0)2 “сшиты” из двух подслов, х = (хг-1.-.хо)2 и у = (уз-i • .2/0)2, где г 4- s = п, с использованием произ- вольной маски х, У которой их = s, Для управления “сшиванием’.’ Например, z = (,У2х4хзУ1х2Уох1хо)2 при п = 8 и х = (10010100)2- Мы можем рассматривать z как “рассеянный аккумулятор” в котором “чужие” биты Xi спрятаны среди “своих” битов yj. С этой точки зрения задача поиска последовательных элементов подкуба, по сути, является задачей вычисления у 4-1 внутри рассеянного аккумулятора z без изменения значения х. Операция группировки (81) может разделить х и у; но она
184 КОМБИНАТОРНЫЙ поиск 7.1.3 дорога, а (85) показывает, что мы можем решить задачу без нее. Действительно, мы можем вычислить у + у', когда у' = (y's_i. 3/0)2 представляет собой любое значение внутри рассеянного аккумулятора z', если и у, и у' появляются в позициях, определенных х- Рассмотрим t = z & х и t' = z' & х- Если мы образуем сумму (t | х)+t', все переносы, образующиеся при обычном сложении у+у1, будут переданы через блоки единиц в х так же, как если бы рассеянные биты были смежными. Таким образом, ((z&X) + (*'lx))&X (86) представляет собой сумму у и у' по модулю 2®, рассеянную в соответствии с мас- кой х- Работа с несколькими байтами одновременно. Вместо того чтобы сосре- доточиваться на данных в одном поле в пределах слова, нам зачастую хотелось бы работать одновременно с двумя или более подсловами, выполняя вычисления с каждым из них параллельно. Например, многие приложения требуют обработки длинных последовательностей байтов, и мы можем ускорить работу, выполняя дей- ствия над восемью байтами одновременно; можно также использовать все 64 бит, предоставляемые нашей машиной. Обобщенные многобайтовые технологии были впервые предложены Лесли Лампортом (Leslie Lamport) в САСМ 18 (1975), 471-475, и впоследствии развиты многими программистами. Предположим сначала, что мы просто хотим взять две последовательности байтов и найти их сумму, рассматривая их как координаты векторов и для каждого байта используя арифметику по модулю 256. Говоря алгебраически, у нас имеются 8-байтовые векторы х = (xj... £1X0)256 и у = (3/7... 3/13/о)25б! мы хотим вычислить z = (г?... zizo)256, где Zj = {xj + уj) mod 256 для 0 < j < 8. Обычное сложение х с у не работает, поскольку нам нужно предотвратить распространение переносов между байтами. Так что мы выделяем биты высокого порядка и работаем с ними отдельно: z «- (х ф у) к h, гдеН = *8080808080808080; z «— ((z & Л) + (3/ & /г)) ф z. (87) Общее время, затрачиваемое MMIX на выполнение этих действий, составляет 6v плюс Зд + 3v, если учесть время на загрузку х, загрузку у и сохранение z. Восемь же однобайтовых сложений (последовательность LDBU, LDBU, ADDU и STBU, повторенная восемь раз) стоили бы 8 х (Зд + 4и) = 24р + 32гл Параллельное вычитание байтов почти такое же простое (см. упр. 88). Мы можем также вычислить побайтовое среднее с Zj — [(zj + 3/j)/2j для каж- дого j: z «- ((z Ф у) к Г) » 1, где I = *0101010101010101; z +— (х & у) + z. (88) Этот элегантный трюк, предложенный Г. Г. Дитцем (Н. G. Dietz), основан на хорошо известной формуле х + у = (z ф 3/) + ((z & 3/) « 1) (89) для двоичного сложения. (Мы можем реализовать (88) с помощью четырех, а не пяти команд MMIX, поскольку одна операция MOR меняет х ф у на ((z ф у) & 1) » 1.)
7.1.3 БИТОВЫЕ ТРЮКИ И ТЕХНОЛОГИИ 185 В упр. 88-93 и 100-104 эти идеи получают дальнейшее развитие, показывая, как работать с арифметикой в системе счисления со смешанным основанием, а также как выполнять такие действия, как сложение и вычитание векторов, компоненты которых рассматриваются по модулю т, когда m не обязательно является степе- нью 2. По сути, мы можем рассматривать биты, байты или другие подполя регистра как если бы это были элементы массива независимых микропроцессоров, работаю- щих независимо над собственными подзадачами, но при этом строго синхронизиро- ванными и сообщающимися один с другим посредством команд сдвига и битов пере- носа. Разработчики компьютеров многие годы развивали параллельные процессоры с так называемой SIMD-архитектурой, т. е. “Single Instruction stream with Multiple Data streams” (один поток команд с несколькими потоками данных); см., например, S. Н. Unger, Proc. IRE 46 (1958), 1744-1750. Увеличившаяся доступность 64-битовых регистров означает, что программисты обычных последовательных компьютеров могут теперь ощутить всю прелесть SIMD-обработки. Действительно, такие вы- числения, как (87)-(89), называются SWAR-методами (SIMD Within A Register, SIMD в пределах регистра) — имя, предложенное Р. Д. Фишером (R. J. Fisher) и Г. Г. Дитцем (Н. G. Dietz) [см. Lecture Notes in Computer Science 1656 (1999), 290-305]. См. также R. B. Lee, IEEE Micro 16, 4 (August 1996), 51-59. Конечно, байты часто содержат алфавитные данные, а не только числа, и одной из наиболее важных задач программирования является поиск в длинной строке сим- волов первого появления некоторого значения байта. Например, строки часто имеют представление в виде последовательности ненулевых байтов с завершающим нулем. Чтобы быстро найти конец строки, нужен быстрый способ определения, все ли во- семь байтов заданного слова х ненулевые (поскольку обычно так и есть). Несколько неплохих решений этой задачи были найдены Лампортом (Lamport) и другими; но Алан Майкрофт (Alan Mycroft) в 1987 году обнаружил, что достаточно всего трех команд: t «— h & (х — I) & х, (90) где h и I указаны в (87) и (88). Если каждый байт Xj не нулевой, t будет равно нулю; (xj — l)&xj будет равно 2pXj — 1, что всегда меньше *80 = 27. Но если Xj = 0, в то время как его соседи справа Xj-i, ..., хц (если таковые имеются) ненулевые, вычитание х — I даст *ff в байте jut будет ненулевым. В действительности pt будет равно 8j 4- 7. Внимание: хотя вычисления в (90) выявляют крайний справа нулевой байт х, мы не можем выявить позицию крайнего слева нулевого байта на основании только лишь значения t. (См. упр. 94.) В этом отношении прямой порядок байтов оказыва- ется предпочтительнее обратного. Приложение, которому требуется найти крайний слева нулевой байт, может использовать (90) для быстрого пропуска ненулевых слов, но после этого оно должно перейти к медленному поиску среди восьми байтов- финалистов. Следующая формула с четырьмя операциями дает совершенно точный результат проверки t = (tj ... tito)256, в котором tj = 128[a?j = 0] для каждого j: t +— h & ~(x | ((a: | h) — I)). (91) Крайний слева нулевой байт х — байт Xj, где At = 8j + 7.
186 КОМБИНАТОРНЫЙ поиск 7.1.3 Кстати, единственная команда MMIX ‘BDIF t,l,x’ немедленно решает задачу нулевого байта путем установки каждого байта tj слова t равным [xj = 0], поскольку 1 — х = [т = 0]. Но здесь нас, в первую очередь, интересуют достаточно универ- сальные методы, не полагающиеся на экзотические аппаратные решения; особые возможности MMIX будут рассмотрены ниже. Теперь, когда мы знаем быстрый способ поиска первого 0, мы можем использо- вать те же самые идеи для любого интересующего нас значения байта. Например, для проверки, является ли некоторый из байтов слова х символом новой строки (*а), мы просто ищем нулевой байт в х ф *0а0а0а0а0а0а0а0а. Эти методы открывают и многие другие двери. Предположим, например, что МЫ ХОТИМ ВЫЧИСЛИТЬ Z = (Zf . . . ZiZq)256 ИЗ X И у, ГДе Zj = Xj При Xj = yj, И Zj = '*', когда Xj yj. (Таким образом если х = 'beaching' и у = 'belching', предполагается, что будет выполнена установка z <— ' be*ching'.) Это просто: t «— h 8с ((х ф у) | (((а: ф у) | h) - Z)); т<- (f«l)-(i»7); (92) z «— х ф ((т ф ' ********') & т). На первом шаге используется вариант (91) для того, чтобы установить старшие биты каждого байта, где Xj yj. На следующем шаге создается маска для этих байтов: *00, если Xj = уj, в противном случае *ff. А на последнем шаге, который можно также записать как z «— (х8ст) | (' ********' &т), устанавливается Zj «— Xj или Zj «— ' *' в зависимости от маски. Операции (90) и (91) изначально разрабатывались для проверки равенства бай- тов нулю; но более близкое знакомство показывает, что мы можем поступить более мудро и рассматривать их как проверку значений байтов, не меньше ли они 1. В действительности, если в любой формуле заменить I на с-1 = (сссссссс)25б> где с— любая положительная константа < 128, то можно использовать (90) или (91) для того, чтобы узнать, имеются ли в j байты, меньшие, чем с. Кроме того, значение для сравнения с не обязано быть одним и тем же в каждой байтовой позиции; а ценой некоторого увеличения объема работы мы сможем также выполнять побайтовое сравнение и в случаях, когда с > 128. Вот 8-шаговая формула, которая устанавли- вает tj <— 128[а:л < yj] для каждой позиции байта j в тестовом слове t: t «— h& ~{xyz), где z = (x | h) — (y & h). (93) (См. ynp. 96.) Операция медианы в этой обобщенной формуле часто может быть упрощена; например, (93) сводится к (91) при у = I, поскольку (х(—l)z) = х | z. Найдя ненулевое t в (90), (91) или (93), мы можем захотеть вычислить pt или Xt, чтобы найти индекс j крайнего справа или слева байта, который был помечен. Задача вычисления р или А сейчас проще, чем раньше, поскольку t может принимать только 256 различных значений. Действительно, для вычисления j достаточно операции 256 — 1 j «— table[((a t) mod 264) » 56], где a = ——, (94) если иметь соответствующую 256-байтовую таблицу. А умножение здесь может зачастую быть выполнено быстрее при использовании вместо него трех операций “сдвиг и сложение” “t«— t + (t <g. 7), t <— t + (t <S 14), t«— t + (t<S 28)”
7.1.3 БИТОВЫЕ ТРЮКИ И ТЕХНОЛОГИИ 187 Вычисления с большими словами. К этому моменту мы познакомились более чем с десятком способов, которыми побитовые операции с высокой скоростью при- водят к удивительным результатам. В приведенных ниже упражнениях содержится гораздо больше сюрпризов. Элвин Берлекамп (Elwyn Berlekamp) заметил, что при разработке компьютер- ных микросхем с N триггерами продолжается наращивание значения N, хотя на практике в каждый момент реально задействовано только O(log TV) из них. Удиви- тельная эффективность битовых операций наводит на мысль о том, что компьютеры будущего сумеют воспользоваться этим нетронутым потенциалом с помощью рас- ширенных модулей памяти, которые обеспечат эффективное выполнение п-битовых вычислений для достаточно больших значений п. Готовясь к этому времени, мы должны придумать хорошее название для концепции работы с “широкими словами” Лайл Рэмшоу (Lyle Ramshaw) предложил забавный термин “broadwortf (дослов- но— “широкое слово”; здесь имеется определенная игра слов—broadword созвучно Broadway (Бродвей). Так что в русском языке можно воспользоваться не менее забавно звучащим термином “шлово”—Примеч. пер.), так что мы можем говорить о n-битовых величинах как о шловах шириной п. Многие из рассматривавшихся методов 2-адические, в том смысле что они кор- ректно работают с бинарными числами произвольной (даже бесконечной) точно- сти. Например, операция х & —х всегда выделяет 2рх, наименьший единичный бит любого ненулевого 2-адического целого числа х. Другие же методы обладают, по сути, широкословной природой, такие как методы, использующие O(d) шагов для вычисления контрольной суммы или перестановки битов 2d-6HTOBoro слова. Широкословное вычисление—это искусство работы с n-битовыми словами, когда п представляет собой не слишком малый параметр. Одни из широкословных алгоритмов представляют собой только теоретический интерес, будучи эффективными лишь в асимптотическом смысле, когда п превы- шает размер Вселенной. Другие оказываются в высшей степени практичными даже при п = 64. В общем случае широкословный склад ума часто приводит к хорошим технологиям. Одним очаровательным, но непрактичным фактом, касающимся широкослов- ных операций, является открытие М. Л. Фредманом (М. L. Fredman) и Д. Э. Уиллар- дом (D. Е. Willard) того, что достаточно 0(1) широкословных шагов для вычисления функции Аа: = [1g а:] для любого ненулевого n-битового числа х, причем величина п роли не играет. Вот эта замечательная схема при n = д2 и д, являющемся степе- нью 2: ii <- h & (х | ((а: | /г) - Z)), где h = 2»~Ч и I = (2П - 1)/(2» - 1); у «- (((а й) mod 2П) » (п - д)) I, где а = (2П~9 - 1)/(29~1 - 1); i2 - h к {у | ((у | h) - Ь)), где b = (2"+« - l)/(2s+1 - 1); m <— (t2 < 1) - (*2 > (д - 1)), m «— m ф (m » р); (95) z «— (((/ (x & m)) mod 2") » (n — g)) • I; t3 «— h &; (z | ((z | h.) - b)); A <- ((Z • ((i2 » (2g - Igg - 1)) + (t3 » (2g - 1)))) mod 2") » (n - g). (См. ynp. 106.) Этот метод непрактичен, поскольку пять из приведенных 29 шагов являются умножениями, так что они в действительности не являются “битовыми”
188 КОМБИНАТОРНЫЙ поиск 7.1.3 операциями. Позже мы докажем, что умножение на константу требует как минимум Q(log л) битовых шагов. Способ нахождения Хх без умножений, только лишь с помощью O(loglogn) битовых широкословных операций, был открыт в 1997 году Гертом Бродалом (Gerth Brodal), метод которого даже более замечателен, чем (95). Он основан на формуле, аналогичной (49), Хх = [Ах = А(я& До)] + 2[Ах = Х(х & /и)] + 4[Ах = Х(х & Дг)] Ч-, (96) и том факте, что соотношение Ах = Ху легко проверяется (см. (58)). Алгоритм В (Бинарный логарифм). Этот алгоритм использует п-битовые опера- ции для вычисления Хх = [1g zj, в предположении, что 0 < х < 2п и п = d 2d. Bl. [Уменьшение масштаба.] Установить А «— 0. Затем установить А +— А + 2fc и х «— х » 2к, если х > 22 , для к = [1gтг] — 1, [1gи] — 2, ..., d. В2. [Репликация.] (В этот момент 0 < х < 22**; остающаяся задача заключается в увеличении А на [1g zj. Мы заменяем х на d его копий, в 2d-6HTOBbix полях.) Установить х «— х | (х <g. 2d+k) для 0 < к < [lg<f|. В3. [Изменение ведущих битов.] Установить у <— х & ~(/id,d-i... ^d,iMd,o)22<<- (См. (48).) В4. [Сравнение всех полей.] Установить t «— h & (у | ((у | h) — (х ф у))), где h = (22d-1...22<‘-122<'-1)22d. В5. [Сжатие битов.] Установить t«— (t + (t (2d+fc — 2fc))) mod 2n для 0 < к < [1g d]. B6. [Завершение.] Наконец установить A <— A + (t» (n — d)). | Этот алгоритм практически конкурирует с (56) при п = 64 (см. упр. 107). Еще один удивительно эффективный широкословный алгоритм был открыт в 2006году М. С. Патерсоном (М. S. Paterson) и автором этой книги, которые рассматривали задачу идентификации всех появлений шаблона 01г в заданной п- битовой бинарной строке. Эта задача, связанная с поиском г смежных свободных блоков при распределении памяти, эквивалентна вычислению q = ifr (а:« 1) & (а: <2) fr (i<3) & & (а: <г) (97) для заданного х = (xn-i.. .xixo)2- Так, если п=16, г = 3их = (1110111101100111)2, мы имеем q = (0001000000001000)2- Интуитивно можно ожидать, что потребуется Q(logr) битовых операций. Но на самом деле для всех п > г > 0 работа выполняется с помощью следующего 20-шагового вычисления. Пусть s = [г/2], I = Efe>o 2fcs m°d 2", h = (2s-1/) mod 2" и a = (Efc>0(-l)fc+122fcs) mod2n. у <— h & x & ((x &h) +1); t <— (x + y) & x & —2r; и «— t & a, г «— t & a; (98) m <— (u — (u » r)) | (v — (v » r)); q <— t & ((x & m) + ((t^>r) & ~(m <g. 1))). В упр. Ill поясняется, почему этот интригующий набор операций корректно работа- ет. Данный метод имеет слишком малую практическую ценность; имеется простой
7.1.3 БИТОВЫЕ ТРЮКИ И ТЕХНОЛОГИИ 189 способ вычисления (97) за 2 fig г] +2 шагов, так что (98) невыгоден, пока значение г не превысит 512. Но (98)—еще один указатель неожиданной мощи широкословных методов. *Нижние границы. Существование такого большого количества трюков и методов естественным образом приводит к вопросу, не находимся ли мы в самом начале пути? Может, все сделанное до сих пор—только небольшая царапина на поверхности, и имеется множество невероятно быстрых методов, которые ожидают своего откры- тия? Известно несколько теоретических результатов, которые позволяют вывести некоторые ограничения на возможные методы. К сожалению, эти исследования все еще находятся в зачаточном состоянии. Назовем 2-адической цепочкой последовательность (xo,a?i,... ,хг) 2-адических целых чисел, в которой каждый элемент Xi для i > 0 получается из своих пред- шественников с помощью битовых манипуляций. Точнее, мы хотим, чтобы шаги цепочки определялись бинарными операциями Xi Xj(i) ИЛИ Cj Oj Xfc(i}, ИЛИ ^J(i) Oj, (99) где каждое °i представляет собой один из операторов {+, —,&, |,ф, =, С, D, С, D, А, V, С,»}, а каждое ci представляет собой константу. Кроме того, когда оператор Oi является левым или правым сдвигом, величина сдвига должна быть положительной целой константой; операции, такие как Xj^ ^хщ) или Сг'^хщу, не разрешены. (Без этого последнего ограничения мы не сможем вывести значимые нижние границы, поскольку каждая функция со значениями 0-1 от неотрицательного целого числа х может быть вычислена за два шага как “(с » х) & 1” для некоторой константы с.) Аналогично широкословная цепочка шириной п, также именуемая п-битовой широкословной цепочкой, представляет собой последовательность (xo,a?i,... ,хг) п- битовых чисел с, по сути, теми же ограничениями, где п является параметром, а все операции выполняются по модулю 2п. Во многом широкословные цепочки ведут себя, как 2-адические, но с некоторыми тонкими отличиями из-за потерь информации в левой части n-битовых вычислений (см. упр. 113). Оба типа цепочек вычисляют функцию f(x) = хг, когда мы начинаем их с неко- торого заданного значения х = xq. В упр. 114 показано, что mn-битовая широко- словная цепочка в состоянии выполнять тп, по сути, одновременных вычислений любой функции, которая вычислима n-битовой цепочкой. Наша цель заключается в изучении кратчайших цепочек, которые в состоянии вычислить данную функ- цию f. Любая 2-адическая или широкословная цепочка (tq,Ti, ... ,хг) имеет последо- вательность “множеств сдвига” (So, Si,..., Sr) и “границ” (Во,Bi,...,Вг), опреде- ляемых следующим образом. Начнем с So = {0} и Во = 1; затем для i > 1 положим Sk(i)» ' A/fcBj(jjBfc(i), AliBfc(j), еСЛИ Xi — xk(i) > еСЛИ X.i — Ci xk(i) j Si = < и Bi = < MBj(fc), если Xi = Xj(i) Oj a, (100) Д?(®) > если Xi = Xj(j) » с», . Bj(i), если Xi = Xj(i) Ci, где Mi = 2, если Oj G {+, —} и Mi = 1 в противном случае, и в этих формулах предполагается, что о4 {<^, 3>}. Например, рассмотрим следующую 7-шаговую
190 КОМБИНАТОРНЫЙ ПОИСК 7.1.3 цепочку. Xi Si Bi Хо = X {0} 1 xi = хо & —2 {0} 1 Х2 = Х1 + 2 {0} 2 З’з = 3’2 » 1 {1} 2 (101) Х4 = Х2 + Хз {0,1} 8 хз = х4 » 4 {4,5} 8 Х6 = Х4 + Хз {0,1,4,5} 128 Ху = Хо » 4 {4,5,8,9} 128 (Мы встречались с ней в упр. 4.4-9, где доказывалось, что эти операции дают ху = [ж/lOj для 0 < х < 160 при работе с 8-битовой арифметикой.) Чтобы приступить к теории нижних границ, заметим для начала, что старшие биты х = хо не могут влиять на младшие биты иначе, кроме как при сдвиге вправо. Лемма А. Пусть в данной 2-адической или широкословной цепочке бинарным представлением Xi является (... ХгъХцХцу)?- Тогда бит XiP может зависеть от бита а?о9, только если q <р + шах.Si- Доказательство. По индукции по г можно показать, что, если В, = 1, бит XiP может зависеть от бита а?о9, только если q — р G Сложение и вычитание, которые обеспечивают Bi > 1, позволяют любому конкретному биту их операндов влиять на все биты, лежащие в сумме или разности слева, но не на те, которые лежат справа. | Следствие I. Функция х — 1 не может быть вычислена 2-адической цепочкой, как не может быть вычислена любая функция, как минимум один бит f(x) которой зависит от неограниченного количества битов х. | Следствие W. n-битовая функция f{x) может быть вычислена n-битовой широко- словной цепочкой без сдвигов тогда и только тогда, когда из х = у (по модулю 2Р) вытекает f(x) = f(y) (по модулю 2Р) для 0 <р <п. Доказательство. При отсутствии сдвигов мы имеем Si = {0} для всех i. Таким образом, бит хгр не может зависеть от бита а?о9, если только не выполняется q < р. Другими словами, мы должны иметь хг = уТ (по модулю 2Р) при а?о уо (по модулю 2Р). И обратно, все такие функции достижимы с помощью достаточно длинной цепочки. В упр. 119 дана бессдвиговая n-битовая цепочка для функций fm(x) = 2р[х mod 2p+1 = j/] при 0<р<пи0<у< 2p+1, (102) из которой все интересующие нас функции получаются путем сложения. [Г. С. Уор- рен-мл. (Н. S. Warren, Jr.) обобщил этот результат для функций от т переменных в САСМ 20 (1977), 439-441.] | Множества сдвигов Si и границы Bi важны главным образом из-за фундамен- тальной леммы, которая является нашим основным инструментом для получения нижних границ.
7.1.3 БИТОВЫЕ ТРЮКИ И ТЕХНОЛОГИИ 191 Лемма В. Пусть Xpqr = {а;г & [2Р — 29J | а?о € Vpqr} в n-битовой широкословной цепочке, где Vpqr = {а; | х & [2р+® — 2,+®J = 0 для всех s G Sr} (ЮЗ) ир > q. Тогда l-Xpqrl < Вг. (Здесь р и q— целые числа, возможно, отрицательные.) Эта лемма утверждает, что, когда определенные интервалы битов в х должны быть нулями, в f{x) может иметься не более Вг различных битовых шаблонов •£r(p— 1) • - &rq- Доказательство. Этот результат, определенно, выполняется при г = 0. В против- ном случае, если, например, xr = Xj + а?ь, по индукции мы знаем, что |Xpqj| < Bj и |^pqfc| < Bk. Кроме того, Vpqr = Vpqj(~\Vpqk, поскольку Sr = SjUSk- Таким образом, возникает не более BjBk вариантов для (xj + Xk) & |2Р — 29J при отсутствии переноса в позицию q и не более BjBk при его наличии, что дает итоговое значение не более Br = 2BjBk вариантов. В упр. 122 рассматриваются другие случаи. | Теперь мы можем доказать, что линеечная функция требует О (log log п) шагов. Теорема R. Если n = d-2d, каждая n-битовая широкословная цепочка, вычисля- ющая рх для 0 < х < 2”, имеет более lg d шагов без сдвигов. Доказательство. Если имеется I бессдвиговых шагов, мы имеем |5Г| < 21 и Вг < 22 -1. Применим лемму Bcp = dnq = 0n предположим, что |XdOr| = 2d — t. Тогда имеется t значений k < 2d, таких, что {2fc, 2fc+2d, 2fc+2'2d, ..., 2fc+<d-1)2d} ClVdOr = 0- Ho VdOr исключает не более 2ld из n возможных степеней 2; так что t < 21. Если I < lg d, лемма В говорит, что 2d—t < Br < 2d-1; следовательно, 2d-1 < t < 2l < d. Но это возможно только при d < 2, когда теорема очевидно выполняется. | То же доказательство работает и в случае бинарного логарифма. Следствие L. Если n = d • 2d > 2, каждая n-битовая широкословная цепочка, которая вычисляет Хх для 0 < х < 2П, имеет более lg d шагов без сдвигов. | Используя лемму В с q > 0, мы можем вывести более сильную нижнюю границу Q(logn) для обращения битов, а следовательно и для перестановки битов в общем случае. Теорема Р. Если 2 < g < п, каждая n-битовая широкословная цепочка, которая вычисляет g-битовое обращение xR для 0 < х < 29, имеет как минимум [| lg pj бессдвиговых шагов. Доказательство. Как и ранее, считаем, что имеется I бессдвиговых шагов. Поло- жим h = Lv^pJ и предположим, что I < [lg(/i + 1)J. Тогда Sr является множеством не более 2l < |(/г + 1) величин сдвигов s. Применим лемму В с р = q + h, где р < g и q > 0, таким образом, всего в g — h+1 случаях. Ключевым наблюдением является то, что xR&|2P—29J не зависит от х& |2₽+® — 2,+®J, если не имеется таких индексов j и к, что 0<j,k<hng — l— q— j = q + s + k. Количество “плохих” выборов q, для которых такие индексы существуют, не превышает | (h+ 1)/г2 < g—h; следовательно, как минимум один “хороший” выбор q дает |ХР<7Г| = 2h. Но тогда лемма В приводит к противоречию, поскольку мы, очевидно, не можем иметь 2h < Br < 2^h~1^2. |
192 КОМБИНАТОРНЫЙ поиск 7.1.3 Следствие М. Умножение на некоторую константу по модулю 2П требует Q(logn) шагов в n-битовой широкословной цепочке. Доказательство. В хаке 167 классического меморандума НАКМЕМ (M.I.T. A.I. Laboratory, 1972) Ричард Шрёппель (Richard Schroeppel) заметил, что операции t <— ((ах) mod 2П) & Ь, у «— ((ci) mod 2n) » (n — g) (104) вычисляют у = xR для тг = з2и0<т<25с использованием констант а = (2п+в — 1)/(2в+1-1), Ь=2в~1(2п-1)/(2в-1) ис= (2п-»-1)/(29-1-1). (См. упр. 123.) | В этом месте читатель может задуматься: “Ну, хорошо, я согласен с тем, что ши- рокословные цепочки иногда должны быть асимптотически длинными. Но програм- мисты не обязаны ограничивать себя такими цепочками; мы можем использовать и другие методы, такие как условное ветвление или обращение к предвычисленным таблицам, что позволит нам преодолеть указанные ограничения’.’ Верно. Но нам везет, потому что широкословная теория может быть распро- странена и на другие, более общие модели вычислений. Рассмотрим, например, следующую идеализацию абстрактного RISC-компьютера, который называется ком- пьютером с базовой памятью (basic RAM): машина имеет n-битовые регистры И,...,п и n-битовые слова памяти {М[0],...,М[2т — 1]}. Она можетвыполнять команды rj+-rj ±rfc, Г,<—Tj-orfc, rj»Ffc, Ti <— с, Ti «— M[rj mod 2m], M[rj mod 2m] <— Ti, ' ' где о — любой битовый булев оператор и где Tk в команде сдвига рассматривается как знаковое целое число в дополнительном двоичном коде. Машина также спо- собна выполнять ветвление, если < Tj, рассматривая и как беззнаковые целые числа. Ее состояние представляет собой все содержимое регистров и памяти, а также “счетчика команд” который указывает на текущую команду. Программа начинается с предопределенного состояния, которое может включать предвычис- ленные таблицы в памяти, и с n-битовым входным значением х в регистре Г\. Это начальное состояние называется Q(x, 0), a Q(x,t) обозначает состояние после t выполненных команд. После остановки машины и будет содержать некоторое n-битовое значение f(x). Для заданной функции f(x) мы хотим найти нижнюю границу наименьшего значения t, при котором регистр равен f(x) в состоянии Q(x, t) для 0 < х < 2П. Теорема R'. Пусть е - 2-е. Базовая n-битовая память с параметром m < требует как минимум lg lg n — е шагов для вычисления линеечной функции рх при тг —> ос. Доказательство. Пусть п = 22'+/, так что т < 22‘+f~2f. В упр. 124 поясня- ется, как всезнающий наблюдатель может построить широкословную цепочку доя определенного класса входных х таким образом, что каждое х приводит к одним и тем же ветвлениям с использованием одних и тех же величин сдвигов и с обра- щениями к одним и тем же ячейкам памяти. После этого можно применить наши рассматривавшиеся ранее методы для того, чтобы показать, что эта цепочка имеет длину > /. |
7.1.3 БИТОВЫЕ ТРЮКИ И ТЕХНОЛОГИИ 193 Скептически настроенный читатель может возразить, что теорема Rz не имеет практического значения, поскольку Iglgn в реальности никогда не превысит 6. На это возражение ответить нечем. Но следующий результат несколько более суще- ствен. Теорема Pz. Базовая п-битовая память требует как минимум |lg<? шагов для вычисления g-битового обращения xR при 0 < х < 2®, если д < п и max(m,l + lgn) < 9|. —9, h = (106) 2L1g(zl + 1)J “ 2 Доказательство. Рассуждения, подобные доказательству теоремы Rz, приводятся в упр. 125. | Лемма В и теоремы R, Р, R', Pz и их следствия получены А. Бродником (A. Brod- nik), П. Б. Мильтерсеном (Р. В. Miltersen) и Д. Я. Мунро (J. I. Munro), Lecture Notes in Comp. Sci. 1272 (1997), 426-439, основывавшимися на ранней работе Мильтерсена в Lecture Notes in Comp. Sci. 1099 (1996), 442-453. Остается много нерешенных вопросов (см. упр. 126-130). Например, требует ли контрольное суммирование n-битовой широкословной цепочки с Q(logn) шагами? Можно ли вычислить функцию четности (их) mod 2 или функцию мажоризации [ux>n/2] существенно быстрее, чем само значение их “пошловно”? Приложение к ориентированным графам. Давайте теперь воспользуемся кое- чем из изученного, реализовав простой алгоритм. Для заданного ориентированного графа на множестве вершин V мы записываем и —> и, когда имеется дуга от и до v. Задача достижимости заключается в поиске всех вершин, которые лежат на ориентированных путях, начинающихся в заданном множестве Q С V; другими словами, мы ищем множество R = {п | и—* v для некоторого и € Q}, (107) где и—►* v означает существование последовательности t дуг и = ио —>ui —> • • • —= v для некоторого t > 0. (Ю8) Эта задача часто возникает на практике. Например, мы встречались с ней в разде- ле 2.3.5, когда помечали все элементы списков, не являющиеся “мусором’.’ Если количество вершин мало, скажем, |V| < 64, мы можем испытать подход к задаче достижимости, существенно отличающийся от использовавшегося ранее, работая непосредственно с подмножествами вершин. Пусть S[u] = {v | и—>n} (109) представляет собой множество преемников вершины и для всех и € V. Тогда сле- дующий алгоритм почти полностью отличается от алгоритма 2.3.5Е, хотя и решает ту же абстрактную задачу. Алгоритм R (Достижимость). Для заданного простого ориентированного графа, представленного множествами преемников S[u] из (109), этот алгоритм вычисляет элементы R, достижимые из данного множества Q. 7 Зак. 3331
194 КОМБИНАТОРНЫЙ ПОИСК 7.1.3 R1. [Инициализация.] Установить R «— Q и X «— 0. (В следующих шагах X пред- ставляет собой подмножество вершин и € R, для которых мы уже выполнили просмотр 5[и].) R2. [Выполнено?] Если X = R, завершить работу алгоритма. R3. [Проверка другой вершины.] Пусть и является элементом R \ X. Установить X <- XUu, Я <- fiU S[u] и вернуться к шагу R2. | Этот алгоритм корректно работает, поскольку (i) каждый элемент, помещенный в R, достижим; (ii) каждый достижимый элемент Uj из (108) по индукции по j присут- ствует в R; и (iii) алгоритм в конечном счете завершает свою работу, поскольку шаг R3 всегда увеличивает |Х|. Для реализации алгоритма R будем считать, что V = {0,1,..., п— 1}, где п < 64. Множество X удобно представить целым числом <т(Х) = $2{2“ | и € X}, и то же соглашение хорошо работает и для других множеств Q, R и S[о]. Заметим, что биты чисел S[0], S[l], ..., S[n — 1], по сути, представляют собой матрицу смеж- ности данного ориентированного графа, как пояснялось в разделе 7, но с прямым порядком байтов: “диагональные” элементы, которые говорят нам о том, входит ли вершина в множество преемников, и € 5[и], располагаются справа налево. Напри- мер, если п = 3 и дугами являются {0—>0,0—>1,1—>0,2—>0}, мы имеем S[0] = (011)г и 5[1] = 5[2] = (001)г, в то время как матрица смежности представляет собой (wo). Шаг R3 позволяет выбирать любой элемент из R\X, так что мы используем для выбора наименьшего элемента линеечную функцию: и <— p(<r(R) — <г(Х)). Битовые операции не требуют каких-либо иных трюков при адаптации данного алгоритма для машины MMIX. Программа R (Достижимость). Входное множество Q задается в регистре q, а каждое множество преемников S[u] находится в октете Mg [sue + 8и]. Выходное множество R будет располагаться в регистре г; другие регистры — s, t, tt, и и x— хранят промежуточные результаты. 01 1Н SET r>q 1 Rl. Инициализация. r 4— o(Q). 02 SET x,0 1 x4-a(0). 03 JMP 2F 1 Переход к шагу R2. 04 ЗН SUBU tt.t.l |R| R3. Исследование другой вершины, tt ч— t — 1. 05 SADD u,tt,t |R| и ч- p(t) [см. (46)]. 06 SLU s,u,3 |Д| s ч— 8u. 07 LDOU s,sue,s |R| s ч— cr(S[u]). 08 ANDN tt,t,tt |R| tt ч- t & ~tt - 2". 09 OR x,x,tt |Д| X 4— X U u; т. e. x 4— x | 2“, поскольку x = a(X). 10 OR r,r,s |R| R 4— R U S[u]; т. e. r 4— r | s, поскольку r = a(R). 11 2Н SUBU t,r,x |R| + 1 R2. Выполнено? t 4- r — x = a(R \ X), так как X C R. 12 PBNZ t,3B |R|+1 Переход к шагу R3, если R X. | Общее время работы равно (д + 9и) |/?| + 7и. Для сравнения в упр. 131 алгоритм R реализован с применением связанных списков; в этом случае общее время работы увеличивается до (3S+4|R|—2|^| + 1)д+(55+12|/?|—5|Q|+4)v, где S = 53иеЯ|5[и]|. (Но, конечно, зато такая программа в состоянии работать с графами с миллионами вершин.) В упр. 132 представлен другой поучительный алгоритм, в котором битовые операции хорошо справляются с небольшими графами.
7.1.3 БИТОВЫЕ ТРЮКИ И ТЕХНОЛОГИИ 195 Применение для представления данных. Компьютеры бинарны, но (увы?) окружающий мир таковым не является. Нам часто требуется найти способ коди- рования данных, не являющихся бинарными, с помощью нулей и единиц. Одной из наиболее распространенных задач такого вида является выбор эффективного представления элементов, которые могут находиться ровно в трех различных состо- яниях. Предположим, мы знаем, что х е {а, Ь, с}, и хотим представить х двумя бита- ми xixr. Мы можем, например, отобразить a —» 00, b —> 01 и с —> 10. Но есть много других возможностей: в действительности 4 варианта для а, затем 3 варианта для b и 2 для с, т. е. всего 24 варианта. С одними из них может оказаться работать проще, чем с другими, в зависимости от того, что мы хотим делать с х. Для двух заданных элементов х, у € {а, Ь, с} мы обычно хотим вычислить z = хоу для некоторой бинарной операции о. Если х = Х[ХГ и у = yiyr, то z = zizr, где zi = fi(xi,xr,yi,yr) и zr = fr(xi,xr,yi,yr); (НО) эти булевы функции ft и fr от четырех переменных зависят от о и выбранного представления. Нас интересует представление, которое упрощает вычисление fi и fr- Предположим, например, что {а, Ь,с} = {—1,0,+1} и что о представляет собой умножение. Если мы решим использовать естественное отображение х —» х mod 3, а именно 0 — 00, +1—01, -1 — 10, (111) так что х = xr — xi, то таблицы истинности для fi и fr будут иметь вид соответ- ственно fi—> 000*001*010***** и fr —> 000*010*001*****. (112) (Имеется семь безразличных значений для случаев xixr = 11 и/или yiyr = 11.) Методы из раздела 7.1.2 говорят нам, как можно оптимально вычислить zi и zr, а именно Zi = (xi ф yi) Л (хг Ф Уг), Zr = (xi ф Уг) Л (хг Ф yi); (113) к сожалению, функции ft и fr в (112) независимы в том смысле, что обе они не могут быть вычислены менее чем за C(fi) + C(fr) = 6 шагов. С другой стороны, несколько менее естественная схема отображения +1 — 00, 0->01, -1 — 10 (114) приводит к функциям преобразования fl —> 001*000*100***** и fr —> 010*111*010*****, (45) и теперь для проведения вычислений достаточно трех операций: Zr = Хг V Уг, ZI = (xi ф yi) Л zr. (116) Существует ли простой путь выявления таких усовершенствований? К счастью, нам не придется проверять все 24 возможных варианта, поскольку многие из них, по сути, одинаковы. Например, отображение х —> xrxi эквивалентно отображению
196 КОМБИНАТОРНЫЙ ПОИСК 7.1.3 х I—> xixr, поскольку новое представление = xrxt получается путем обмена координат, делающего fl&i,x'r,y'hy'r) = z't = zr = fr(xi,xr,yi,yr); новые функции преобразования f[ и определяемые как f[(xi,xr,yi,Vr) = fr(xr,xi,yr,yt), fr(xi,xr,yi,yr) = fi(xr,xi,yr,yi), (117) имеют ту же сложность, что и fi и fr. Аналогично можно дополнять координату, полагая = xtxr; тогда функциями преобразования оказываются f[(xi,xr,yi,yr) = fi(xi,xr,yi,yr), fr(xi,xr,yi,yr) = fr(xi,xr,yi,yr), (118) и сложность, по сути, остается неизменной. Многократное применение обмена и/или дополнения приводит к восьми отобра- жениям, которые эквивалентны любому заданному. Так что 24 варианта приводятся только к трем, которые мы назовем классами I, II и III: Класс I Класс II Класс III а и-> 00 01 10 11 00 10 01 11 00 01 10 11 00 10 01 11 00 01 10 11 00 10 01 11 ; Ь 01 00 11 10 10 00 11 01 01 00 11 10 10 00 11 01 11 10 01 00 11 01 10 00 ; (119) с 10 11 00 01 01 11 00 10 11 10 01 00 11 01 10 00 01 00 11 10 10 00 11 01 . Для выбора представления необходимо рассмотреть только по одному представите- лю каждого класса. Например, если а = +1, b = 0 и с = —1, представление (111) принадлежит классу II, а (114) относится к классу I. Как оказывается, класс Ш имеет стоимость 3, как и класс I. Так что представление (114), где z вычисляется как в (116), с точки зрения рассматриваемой задачи трехэлементного умножения столь же хорошее, как и любое другое. Однако обратите внимание, что мы не обязаны отображать {а, Ь, с} на един- ственные двухбитовые коды. Рассмотрим отображение “один ко многим” +1 00, 0 м 01 или 11, -1 10, (120) где и 01, и 11 разрешены как представления нуля. Таблицы истинности для fi и fr при этом достаточно сильно отличаются от (112) и (115), поскольку все входные данные разрешены, но некоторые выходы могут быть произвольными: fi «-> 0*1*****1*0***** и fr 0101111101011111. (121) При таком подходе фактически достаточно двух операций вместо трех в (116): Zi = xi®yi, zr = xrVyr. (122) Небольшое размышление показывает, что эти операции действительно дают произ- ведение z = х-у, когда три элемента, {+1,0,—1}, представлены так, как показано в (120). Такое “неединственное” представление добавляет еще 36 возможных вариантов к имеющимся 24, которые мы рассматривали выше. И вновь они сводятся к неболь- шому количеству классов эквивалентности. Во-первых, имеются три класса, кото- рые мы назовем IVa, IV& и IVC в зависимости от того, какой из элементов имеет
7.1.3 БИТОВЫЕ ТРЮКИ И ТЕХНОЛОГИИ 197 неоднозначное представление: Класс 1Уа Класс 1Уь Класс ГУС a i-> 0* 0* 1* 1* *0 *0 *1 *1 11 10 01 00 11 01 10 00 10 11 00 01 01 11 00 10; 10 11 00 01 01 11 00 10 0* 0* 1* 1* *0 *0 *1 *1 11 10 01 00 11 01 10 00; (123) с 11 10 01 00 11 01 10 00 10 11 00 01 01 11 00 10 0* 0* 1* 1* *0 *0 *1 *1. (Представление (120) принадлежит классу 1Уь- Классы IVa и 1Ус/в случае z = х-у работают плохо.) Во-вторых, имеются еще три класса с четырьмя отображениями в каждом: \ Класс Va Класс Уь Класс Ус a I—> tt tt tt tt 10 11 00 01 01 00 11 10; b 01 00 11 10 tt tt tt tt 10 11 00 01; (124) c 10 11 00 01 01 00 11 10 tt tt tt tt. Эти классы представляют собой источник ность в их таблицах истинности не может различных значений, как это было сделано первое отображение класса Va неприятностей, поскольку неопределен- быть выражена просто в терминах без- в (121). Например, если мы рассмотрим +1 00 или 11, 0^01, — 11—► 10, (125) то нам понадобятся такие бинарные переменные pqrst, что ft <->• pOlgOOOOlOrlsOlt и fr <->• plOgllUOlrOslOt. (126) Кроме того, отображения классов Va, Уь и Ус почти никогда не оказываются луч- ше, чем отображения прочих шести классов (см. упр. 138). Тем не менее, чтобы быть уверенными в том, что найдено оптимальное отображение, следует проверить представителей всех девяти классов. На практике мы часто хотим выполнять над переменными с тернарными значе- ниями не единственную операцию наподобие умножения, а несколько различных операций. Например, мы можем захотеть вычислять как тах(а;, у), так и х-у. В случае представления (120) лучшее, что мы можем сделать, — это zi = xi Л yt, zT — (xt A yr) V (тг Л (yt V yr))', но зато в этом случае выигрывает “естественное” отображение (111) с его zi = xt Л yt, zr = xrV yr. Класс III, как оказывается, имеет стоимость 4; другие классы ему проигрывают. Для выбора в этом случае между классами II, III и 1Уь нам нужно знать относительные частоты х-у и тах(х,у). Предположим, мы добавим в список операций еще и min(a;, у). Классы II, III и ГУь вычисляют эту функцию со стоимостью 2, 5 и 5 соответственно; следовательно, лучшим выглядит представление (111). Тернарные операции шах и min возникают и в других контекстах, таких как трехзначная логика, разработанная в 1917 году Яном Лукашевичем (Jan Lukasie- wicz). [См. его Selected Works, ed. by L. Borkowski (1970), 84-88,153-178.] Рассмотр- им логические значения “true” (истина), “false” (ложь) и “maybe” (может быть), обозначаемые соответственно как 1, 0 и *. Лукашевич определил три базовые one-
198 КОМБИНАТОРНЫЙ поиск 7.1.3 рации конъюнкции, дизъюнкции и импликации на этих значениях с помощью таблиц У ООО О * * 0*1 х Л у У 0*1 * * 1 111 а; V у У (0 1111 х < * * 1 1 11 0 * 1 (127) Для этих операций представленные выше методы показывают, что бинарное пред- ставление 0»—► 00, * ь-> 01, 1 >—► 11 (128) работает отлично, поскольку мы можем вычислить логические операции следующим образом: XlXr Л yiyr = (xi/\yi)(xr/\yr), xixryyiyr = {xi\Zyi)(xr\/yr), Xixr => У1Уг = ((Si V з/i) Л (хг V з/г)) (хг Vj/r). Конечно, в этом обсуждении х не обязано быть изолированным тернарным значением; нам часто приходится работать с тернарными векторами х = х^х?... хп, где каждое Xj является либо а, либо Ь, либо с. Такие тернарные векторы удобно представлять двумя бинарными векторами Х[ — ХцХ21 • • • X^ii И Хг — XifX2r • XnD (130) где Xj i—> XjiXjr, как и ранее. Можно также упаковать тернарные значения в двух- битовые поля одного вектора, X — X\lXirX2lX2r • • • Хп[Хпг у (131) который будет неплохо работать при, скажем, операторах Л и V логики Лукашевича (Lukasiewicz), но не в случае =>. Однако обычно двухвекторный подход (130) ока- зывается лучшим решением, поскольку позволяет выполнять битовые вычисления без сдвигов и масок. Приложения к структурам данных. Битовые операции предлагают множество эффективных способов представления элементов данных и отношений между ними. Например, в программах для игры в шахматы часто используется “битовая доска” для представления позиций фигур (см. упр. 143). В главе 8 мы рассмотрим важные структуры данных, разработанные Петером ван Эмде Боасом (Peter van Emde Boas) для представления динамически изме- няющихся подмножеств целых чисел между 0 и Л'. Вставки, удаления и другие операции, такие как “найти наибольший элемент, меньший, чем х” могут быть вы- полнены его методами за O(log log N) шагов; общая идея заключается в рекурсивной организации всей структуры как x/N подструктур для подмножеств интервалов размером х/N вместе со вспомогательной структурой, которая говорит о том, какие из этих интервалов заняты. [См. Information Processing Letters 6 (1977), 80-82; а также Р. van Emde Boas, R. Kaas и E. Zijlstra, Math. Systems Theory 10 (1977), 99-127.] Битовые операции делают эти операции очень быстрыми.
7.1.3 БИТОВЫЕ ТРЮКИ И ТЕХНОЛОГИИ 199 Иерархические данные иногда могут быть организованы таким образом, что связи между элементами оказываются неявными. Например, в разделе 5.2.3 мы изучали “пирамиды” где п элементов последовательного массива неявно обладают структурой бинарного дерева наподобие когда, скажем, п = 10. (Здесь номера узлов приведены как в десятичной, так и в двоичной записях.) Нет необходимости хранить в памяти указатели для связи узла j пирамиды с его родительским узлом (который представляет собой узел j »1, если j 1) или с его братом (который представляет собой узел j ф 1, если j / 1), или с его дочерними узлами (которыми являются узлы j 1 и (j 1) + 1, если эти числа не превосходят п), поскольку простые вычисления ведут непосредственно от j к любому требующемуся соседу по пирамиде. Аналогично скошенная пирамида предоставляет неявные связи для другого по- лезного семейства n-узловых структур бинарного дерева, типичным представителем которого при п = 10 является (133) (Иногда нам приходится выходить за пределы п при переходе от узла к его роди- тельскому узлу, как на показанном здесь пути от 10 через 12 к 8.) И пирамиды, и скошенные пирамиды могут рассматриваться как узлы с первого йб n-й бесконеч- ной структуры бинарного дерева: пирамида с п — оо имеет корень в узле 1 и не имеет листьев; скошенная же пирамида с п = оо имеет бесконечно много листьев 1, 3, 5, ..., но не имеет корня(!). Листьями скошенной пирамиды являются нечетные числа, а их родителями — нечетные числа, умноженные на 2. Их родители (“деды” листьев), в свою очередь, представляют собой нечетные числа, умноженные на 4, и т. д. Таким образом, линеечная функция pj говорит о том, как высоко над уровнем листьев находится узел j. Как легко видеть, родителем узла j в бесконечной скошенной пирамиде явля- ется узел (j - к) | (к <g. 1), где k=jk-j; (134) эта формула округляет j до ближайшего нечетного числа, умноженного на 21+₽-’. Дочерними узлами являются j - (к»1) и j + (к»1) (135) при четном j. В общем случае потомки узла j образуют отрезок U - 2« + 1 .. j + 2« - 1], (136)
200 КОМБИНАТОРНЫЙ ПОИСК 7.1.3 организованный в виде полного бинарного дерева с 21+pj — 1 узлами. (Эти потомки “включительные’,’ т. е. в их число входит и сам узел j.) Предком узла j на высоте h является узел (j|(l«h))&-(l«h) = ((j>h)|l)«h (137) при h > pj. Обратите внимание, что симметричный порядок обхода узлов дает натуральные числа 1, 2, 3, ... в их естественном порядке. Дов Харел (Dov Harel) указал эти свойства в своей диссертации (U. of California, Irvine, 1980) и заметил, что ближайший общий предок двух узлов скошенной пира- миды также легко вычисляется. Действительно, если узел I является ближайшим общим предком узлов i и j, где г < j, то выполняется замечательное тождество pl = тах{рх \ г < х < j} = A(j & —г), (138) которое связывает функции р и А. (См. упр. 146.) Следовательно, для вычисления I мы можем использовать формулу (137) с h = A(j & —г). Хитроумные расширения этого подхода приводят к асимптотически эффектив- ному алгоритму поиска ближайшего общего предка в любом ориентированном лесу, дуги которого растут динамически [D. Harel and R. Е. Tarjan, SICOMP 13 (1984), 338-355]. Барух Шибер (Baruch Schieber) и Узи Вишкин (Uzi Vishkin) [SICOMP 17 (1988), 1253-1262] впоследствии открыли гораздо более простой способ вычисления ближайших общих предков в произвольном (но фиксированном) ориентированном лесу с применением привлекательной и поучительной смеси битовых и алгоритми- ческих методов, которые мы рассмотрим далее. Вспомним, что ориентированным лесом с т деревьями и п вершинами является ациклический ориентированный граф с п — т дугами. Из каждой вершины выходит не более одной дуги; вершины с нулевой выходящей степенью являются корнями деревьев. Мы говорим, что v является родителем и, когда и—>г>, и что у является (включительным) предком и при и —>* и. Две вершины имеют общий предок тогда и только тогда, когда они принадлежат одному и тому же дереву. Вершина w называется ближайшим общим предком и и у, когда мы имеем и—>* z и у—>* z тогда и только тогда, когда w—>* z. (139) Шибер и Вишкин предварительно обрабатывали лес, отображая его вершины в скошенную пирамиду S размером п путем вычисления трех величин для каждой вершины у: тгу, ранг у в прямом порядке обхода (1 < ли < п); [3v, узел скошенной пирамиды S (1 < (3v < п); av, (1 + Ап)-битовый код маршрута (1 < av < 21+Ап). Если и—>и, мы имеем ли > ли по определению прямого порядка обхода. Узел (3v определяется как ближайший общий предок всех узлов скошенной пирамиды ли, такой, что у является потомком вершины и (всегда подразумевается включительный предок). Определим также av = (2p<3w | у—* w}. (140)
7.1.3 БИТОВЫЕ ТРЮКИ И ТЕХНОЛОГИИ 201 Например, ниже приведен ориентированный лес с десятью вершинами и двумя деревьями. ®8 Ф9 @10 (141) Каждый узел помечен рангом в прямом порядке обхода, откуда можно вычислить коды (3 и а. и = А В с D Е F G н I J тги = 0001 1000 0010 0100 1001 ООН 0101 0111 1010 оно (Зи = 0100 1000 0010 0100 1010 ООН оно 0111 1010 оно аи = 0100 1000 оно 0100 1010 0111 оно 0101 1010 оно Заметим, что, например, (ЗА = 4 = 0100, поскольку для потомков А ранги в прямом порядке обхода представляют собой {1,2,3,4,5,6,7}. А аН — 0101, поскольку предки Н имеют /3-коды {(3H,(3D,(3A} = {0111,0100}. Можно без труда доказать, что отображение и (Зи удовлетворяет следующим ключевым свойствам. i) Если в лесу и—*и, то (Зи является потомком (Зи в S. ii) Если несколько вершин имеют одно и то же значение (Зи, они образуют путь в лесу. Свойство (ii) выполняется потому, что ровно один дочерний узел и узла и имеет (Зи = (Зи при (Зи / тги. Теперь представим размещение каждой вершины и леса в узле (Зи скошенной пирамиды S. (142) Если к вершин отображаются в узел j, их можно расположить в виде пути W —>--------------*vk-i —*ик, где (Зи0 = (Зщ = • • • = (3uk-i = j- (143) Эти пути показаны в (142); например, J —>G—>D представляет собой путь в (141), a ‘j—о’ появляется при узле ОНО = (3J = (3G. Алгоритм предварительной обработки вычисляет также таблицу rj для всех узлов j скошенной пирамиды S, содержащую указатели на вершины ик в концах путей (143). j = 0001 0010 ООН 0100 0101 ОНО 0111 1000 1001 1010 rj = A AC A ADD А АВ В упр. 149 показано, что все четыре таблицы, тги, /Зи, аи и rj, могут быть под- готовлены за О(п) шагов. А когда эти таблицы готовы, они содержат достаточно информации для быстрого определения ближайшего общего предка любых двух заданных вершин.
202 КОМБИНАТОРНЫЙ ПОИСК 7.1.3 Алгоритм V (Ближайший общий предок). Предположим, что нам известны то, (3v, ао и rj для всех п вершин о ориентированного леса для 1 < j < п. Предпо- лагается также наличие фиктивной вершины Л, у которой тгЛ = /ЗЛ = аЛ = 0. Данный алгоритм вычисляет ближайший общий предок z для любых заданных вершин х и у, возвращая z = Л, если х и у принадлежат различным деревьям. Мы считаем, что предварительно вычислены значения Xj = [lg j] для 1 < j < п и что АО = Ап. VI. [Поиск общей высоты.] Если (Зх < (Зу, установить h <— Х((3у & — (Зх)-, в против- ном случае установить h «— A(/3rr& —(Зу). (См. (138).) V2. [Поиск истинной высоты.] Установить к «— ах & ay & —(1 <g Л.), затем h «— A(fc&—/с). V3. [Поиск (3z.\ Установить j «— (((Зх » h) | 1) С h. (Теперь j = (3z, если z Л.) V4. [Поиск х и у.] (Сейчас мы ищем наинизший предок х и у в узле j.) Если j = (Зх, установить х «— х; в противном случае установить I <— Х(ах & ((1 С h) — 1)) и х «— т((((3х ~5> I) | 1) С I). Аналогично, если j = (Зу, установить у <— у; в противном случае установить Z«— X(ayfo((l<g.h) — 1)) иу«— т((((3у^>1) 11)<Д). V5. [Поиск z.] Установить z <— х, если тх < ту, в противном случае z <— у. | Очевидно, что этот хитрый алгоритм использует (137); в упр. 152 поясняется, поче- му он корректно работает. Скошенные пирамиды могут также использоваться для реализации интересного типа очереди с приоритетами, которую Ю. Катаяйнен (J. Katajainen) и Ф. Витале (F. Vitale) назвали навигационной стопкой (navigation pile), показанной здесь для п= 10. 3 5 7 9 11 13 15 17 19 (144) Элементы данных располагаются в позициях листьев 1, 3, ..., 2п — 1 скошенной пирамиды; они могут иметь многобитовую ширину и располагаться в любом по- рядке. Позиции же ветвления 2, 4, 6, ..., напротив, содержат указатели на наи- больший потомок. Изюминкой является то, что эти указатели почти не занимают дополнительного пространства—менее двух битов на элемент данных в среднем,— поскольку для указателей 2, 6, 10, ... требуется только один бит, только два бита нужны для указателей 4, 12, 20, ... и только pj бит—для указателя j в общем случае. (См. упр. 153.) Таким образом, навигационная стопка требует очень малого количества памяти и обладает хорошим поведением по отношению к производитель- ности кэша типичного компьютера. *Ячейки на гиперболической плоскости. Гиперболическая геометрия приво- дит к поучительной неявной структуре данных существенно иной разновидности. Гиперболическая плоскость представляет собой очаровательный пример неевкли- довой геометрии, который удобно рассматривать путем проецирования ее точек на
7.1.3 БИТОВЫЕ ТРЮКИ И ТЕХНОЛОГИИ 203 Рис. 13. Два изображения пя- ти прямых на гиперболической плоскости. внутренность круга. Ее прямые линии при этом становятся круговыми дугами, пересекающимися с границами круга под прямыми углами. Например, прямые РР', QQ' и RR' на рис. 13 пересекаются в точках О, А, В, и эти точки образуют треугольник. Прямые SQ' и QQ' параллельны: они не имеют общих точек, но точки этих прямых становятся все ближе и ближе одна к другой. Прямая QT также параллельна прямой QQ'. Мы получаем различные изображения в зависимости от того, какая точка ока- зывается центральной. Например, второе изображение на рис. 13 помещает О прямо в центр. Обратите внимание, что прямые, проходящие через центр, остаются пря- мыми и после проекции; такие диаметральные хорды представляют собой частный случай “круговых дуг” с бесконечным радиусом. Большинство аксиом Евклида для планиметрии остаются верными и на гипербо- лической плоскости. Например, через любые две различные точки можно провести одну и только одну прямую; а если точка А лежит на прямой РР', то существует ровно одна прямая QQ', такая, что угол PAQ имеет заданное значение 0 < в < 180°. Но знаменитый пятый постулат Евклида не выполняется: если точка С не лежит на прямой QQ', всегда имеется ровно две прямые, проходящие через С и параллель- ные QQ'. Кроме того, имеется много пар прямых, наподобие RR' и SQ' на рис. 13, которые совершенно не пересекаются, являясь расходящимися {ultraparallel) в том смысле, что их точки никогда не становятся сколь угодно близкими. [Эти свойства гиперболической плоскости были открыты Д. Саккери (G. Saccheri) в начале 1700-х годов и строго доказаны Н. И. Лобачевским, Я. Бойяи (J. Bolyai) и К. Ф. Гауссом (С. F. Gauss) столетием позже.] Говоря количественно, когда точки проецируются на единичный круг |z| < 1, дуга, пересекающая его границу в точках егв и е-гв, имеет центр sec# и радиус tan#. Реальное расстояние между двумя точками, проекциями которых являются z и z', равно d{z, z') = ln(| 1 — zz'\ + |z — z'|) — ln(11 — zz'\ — |z — z'|). Таким образом, объекты при удалении от центра и приближении к границе круга выглядят сильно уменьшенными. Сумма углов гиперболического треугольника всегда меньше 180°. Например, углы в точках О, А и В на рис. 13 равны соответственно 90°, 45° и 36°. Десять таких 36°-45°-90°-треугольников можно разместить вместе, создав таким образом правильный пятиугольник, все углы которого — прямые (90°). А четыре таких пятиугольника легко соединяются углами в одной точке, позволяя замостить всю гиперболическую плоскость правильными пятиугольниками (см. рис. 14). Стороны таких пятиугольников образуют интересное семейство прямых, каждые две из ко- торых являются либо расходящимися, либо перпендикулярными; так что мы имеем сетчатую структуру, аналогичную единичным квадратам на обычной плоскости.
204 КОМБИНАТОРНЫЙ ПОИСК 7.1.3 Рис. 14. Пентагрид, в кото- ром гиперболическая плос- кость замощена идентичными пятиугольниками. Круговая регулярная мозаика, окруженная со всех сторон бесконечно малыми фигурами, действительно чудесна. — м. к. ЭШЕР (м. С. ESCHER), письмо Д. Эшеру (G. Escher) (9 ноября 1958 года) Назовем ее пентпагридом* (pentagrid), поскольку каждая ячейка теперь содержит пять соседей вместо четырех. Имеется красивый способ навигации по пентагриду с использованием чисел Фибоначчи, основанный на идеях Мориса Маргенштерна (Maurice Margenstern) [см. F. Herrmann and М. Margenstern, Theoretical Comp. Sci. 296 (2003), 345-351]. Однако вместо обычной последовательности Фибоначчи (Fn) мы будем использовать числа Фибоначчи с отрицательными индексами, или “негафибоначчиевы числа” (F_n), а именно F-i = 1, F-з = -1, F-з = 2, F-4 = -3, ..., = (-l)"-1^. (145) В упр. 1.2.8-34 вводится система счисления Фибоначчи, в которой каждое неотри- цательное число х может быть единственным образом записано в виде х — Fkl 4- Fk2 Ч--\-Fkr, где »-/с2 »-•••»-/сг »-0; (146) здесь ‘j »- к' означает ‘j > k + 2’. Но имеется также и система счисления, основанная на числах Фибоначчи с отрицательными индексами, которая лучше подходит для наших целей: каждое целое число х независимо от того, положи- тельное оно, отрицательное или равное нулю, может быть записано единственным * Следует заметить, что этот термин в русскоязычной технической литературе имеет и иное значение: синоним гептода, названия семиэлектродной электронной лампы с пятью сетками.— Примеч. пер.
7.1.3 БИТОВЫЕ ТРЮКИ И ТЕХНОЛОГИИ 205 способом в виде х = Fkl + Fit* Ч-----------Ь Fkr, где fci -+< fc2 -+< • • • -+< кг -+< 1. (147) Например, 4 = 5 — 1 = F_5 + F_2 и —2 = —3 + 1 = F_4 + F_i. Это представление можно удобно выразить в виде бинарного кода а= ... аза2О1, означающего N(a) = причем в строке не имеется двух последовательных единиц. Например, вот коды такого представления для всех целых чисел между —14 и +15. -14 = 10010100 -8 = 100000 —2 = 1001 4 = 10010 10 = 1001000 -13 = 10010101 —7 = 100001 -1 = 10 5 = 10000 11 = 1001001 -12 = 101010 -6 = 100100 0 = 0 6 = 10001 12 = 1000010 -11 = 101000 -5 = 100101 1 = 1 7 = 10100 13 = 1000000 -10 = 101001 —4 = 1010 2 = 100 8 = 10101 14 = 1000001 -9 = 100010 -3 = 1000 3= 101 9 = 1001010 15 = 1000100 Как и в “негадесятичной системе счисления” (см. 4.1-(6) и (7)), можно говорить о том, является ли х отрицательным или нет по тому, четно или нечетно количество цифр в его представлении. Предшественник а— и преемник а+ любого негафибоначчиева бинарного кода а может быть вычислен рекурсивно с использованием правил (aOl)- = aOO, (aOOO)- = a010, (alOO)- = aOOl, (alO)- = (a-)01, (al0)+ = «00, (a00)+ = «01, (al)+ = (a-)0. (148) (См. ynp. 157.) Однако десять элегантных 2-адических шагов выполняют это вы- числение непосредственно: у <— х ф До, z <— у ф (у ± 1), где х = (о)2; z <— z | (аг& (z С 1)); (149) w <— х ф z ф ((z + 1) » 2); тогда w = (a±)2. Мы просто используем в первой строке у — 1 для получения предшественника и у + 1—для преемника. А теперь перейдем к тому, зачем все это делалось. Каждой ячейке пентагрида можно назначить негафибоначчиев код таким образом, чтобы можно было очень легко вычислить коды ее пяти соседей. Обозначим соседей буквами n, s, е, w и о, означающими “north” (север), “south” (юг), “east” (восток), “west” (запад) и “other” (иное). Если а представляет собой код, назначенный данной ячейке, определим an = a^>2, a8 = a<S.2, ае = а8+, aw = а8—; (150) таким образом, а8П = а, а также аеп = (а01)п = а. “Иное” направление немного сложнее: f оп+, если а & 1 = 1; ао = < (151) ( aw—, если а & 1 = 0. Например, 1000о = 101001 и 101001о = 1000. Этот таинственный нарушитель лежит между севером и востоком, когда а заканчивается на 1, и между севером и западом, когда а заканчивается на 0. Если мы выберем любую ячейку и пометим ее кодом 0 и если мы также выберем ориентацию таким образом, чтобы ее соседями по часовой стрелке были n, е, s, w
206 КОМБИНАТОРНЫЙ ПОИСК 7.1.3 и о, то правила (150) и (151) будут согласованным образом назначать метки каждой ячейке пентагрида. (См. упр. 160.) Например, окрестности ячейки с меткой 1000 будут выглядеть следующим образом. (152) Однако метки с кодами не идентифицируют ячейки единственным образом, поскольку бесконечно много ячеек могут получить одну и ту же метку. (Действи- тельно, мы очевидным образом получаем 0n = 08 = 0 и 1ш = 1о = 1.) Для по- лучения уникального идентификатора добавим вторую координату, так что полное имя каждой ячейки имеет вид (а, у), где у представляет собой целое число. Когда у является константой, а а проходит все негафибоначчиевы коды, ячейки (а, у) образуют более или менее крюковидную полосу, края которой поворачиваются на 90° по соседству с ячейкой (0, у). В общем случае пятью соседями (а, у) являются (а,у)п - (апуУ + 6п(а)), (а,у)8 = (а8,у + <5s(a)), (а,у)е = (ае,у + <5е(а)), (a,y)w = {Ow,y + <5w(«)) и (а,2/)о = (ао,у + 6о(а)), где <5„(а) = [о = 0], <5s(o) =-[о = 0], <5е(а) = 0, 6w(a) = -[а= 1]; <5о(«) = sign(ao - ап)[ао & ап = 0], sign(ao - aw)[ao & aw = 0], если а & 1 = 1; если а & 1 = 0. (153) (См. рисунок ниже.) Теперь битовые операции позволяют нам легко обойти всю гиперболическую плоскость. С другой стороны, мы можем также игнорировать при движении значения координаты у, тем самым обвивая “гиперболический ци- линдр” из пятиугольников; а-координаты определяют интересный мультиграф на множестве всех негафибоначчиевых кодов, в котором каждая вершина имеет сте- пень 5.
7.1.3 БИТОВЫЕ ТРЮКИ И ТЕХНОЛОГИИ 207 (154) Растровая графика. Очень интересно писать программы, работающие с различ- ными рисунками и формами, поскольку при этом требуется включение одновремен- но и левого, и правого полушарий мозга. При работе с изображениями результаты могут оказаться увлекательными даже при наличии ошибок в коде. Книга, которую вы сейчас читаете, была набрана с помощью программного обеспечения, которое рассматривает каждую страницу как гигантскую матрицу из нулей и единиц, именуемую растром или битовой картой (bitmap), содержа- щей миллионы квадратных элементов рисунка, так называемых пикселей (pixel). Растры передаются в печатные машины, и маленькие точки типографской краски размещаются там, где в матрице находится 1. Физические свойства типографской краски и бумаги приводят к тому, что маленькие кластеры точек выглядят как гладкие кривые; но “квадратность” основы каждого пикселя станет очевидной, если десятикратно увеличить изображения, как в букве ‘А’, показанной на рис. 15, (а). С помощью битовых операций можно достичь специальных эффектов наподобие “кастеризации” при которой окруженные со всех сторон черные точки исчезают (рис. 15, (б)). Рис. 16. Буква ‘А’ до и после кастеризации. Эта операция, введенная Р. Э. Киршем (R. A. Kirsch), Л. Каном (L. Cahn), Ч. Рэем (С. Ray) и Ж. X. Урбаном (G. Н. Urban) [Proc. Eastern Joint Computer Conf. 12 (1957), 221-229], может быть выражена как custer(X) = Х&-((Х^1)&(А»1)&(Х«1)&(Х^1)), (155)
208 КОМБИНАТОРНЫЙ ПОИСК 7.1.3 где ‘Х^1’И‘ХДГ обозначают соответственно результат сдвига растра X вниз или вверх на одну строку. Обозначим однопиксельные сдвиги растра X как XN = XV1, XW=X>1, ХЕ = Х«1, Х8 = ХД1. (156) Тогда, например, символическое выражение ‘XN & (Xs | ХЕ)’ вычисляет 1 в тех позициях пикселей, в которых северный сосед черный и имеется или черный сосед к югу, или белый к востоку. При использовании этих обозначений (155) принимает вид custer(X) = X&~(XN&XW&XE&XS), (157) что можно также записать как X & (XN | Xw | ХЕ | Xs). У каждого пикселя есть четыре “соседа по ходу ладьи” с которыми он имеет общие границы сверху, снизу, слева и справа. У него также восемь “соседей по ходу короля’,’ с которыми у него имеется как минимум одна общая угловая точка. Например, “королевские” соседи, лежащие к северо-востоку от всех пикселей рас- тра X, могут быть обозначены как XNE, что в пиксельной алгебре эквивалентно обозначению (XN)E. Заметим также, что XNE = (XE)N. Клеточный автомат размером 3x3 представляет собой массив пикселей, ди- намически изменяющихся путем последовательности одновременно выполняющихся локальных преобразований: состояние каждого пикселя в момент t + 1 полностью зависит от его состояния в момент t и состояния в этот же момент его соседей по ходу короля. Таким образом, автомат определяет последовательность растров Х^°\ Х^, Х&, ... , которая начинается с любого заданного начального состояния Х^0), где X(t+D = /(х^,^},Х^,Х^,Х^\х^,Х^,Х^,Х^) (158) a f — любая битовая булева функция от девяти переменных. Таким образом часто получаются очаровательные узоры. Например, после того как Мартин Гарднер (Martin Gardner) рассказал в 1970 году всему миру об игре Джона Конвея (John Conway) “Жизнь” (“Life”), вероятно, в последующие несколько лет на изучение ее следствий было затрачено больше компьютерного времени, чем на любую другую вычислительную задачу, хотя в те годы люди, играющие на компьютере, встреча- лись очень редко!* (См. упр. 167.) Существует 2512 булевых функций от девяти переменных, так что имеется 2512 различных клеточных автоматов 3x3. Многие из них тривиальны, но большин- ство, вероятно, имеет настолько сложное поведение, что его понимание находится за пределами человеческих возможностей. К счастью, имеется также множество полезных на практике случаев, интерес к которым с экономической точки зрения оправдать проще, чем интерес к обычным играм. Например, в алгоритмах для распознавания букв, отпечатков пальцев или иных подобных рисунков часто используется процесс “утончения” который удаляет лиш- ние черные пиксели и приводит каждый компонент изображения к некоторому лежащему в его основе скелету, который относительно просто анализировать. Ряд авторов предлагали для решения этой задачи клеточные автоматы, начиная с Д. Ру- товица (D. Rutovitz) [J. Royal Stat. Society A129 (1966), 512-513], который пред- * Если вам захочется немного поразвлечься, найдите одну из наилучших реализаций по адресу http://golly.sourceforge.net/. — Примеч. пер.
7.1.3 БИТОВЫЕ ТРЮКИ И ТЕХНОЛОГИИ 209 Рис. 16. Пример результатов работы автомата 3x3 Гуо и Холла для утон- чения компонентов растрового изобра- жения. (“Пустые” пиксели изначаль- но были черными.) дожил схему 4x4. Но параллельные алгоритмы, как известно,—дело тонкое, и после того как различные методы были опубликованы, стали обнаруживаться их недостатки. Например, в компоненте наподобие Щ должны быть удалены один, два или три черных пикселя, но симметричная схема ошибочно удаляет все четыре. Удовлетворительное решение задачи утончения в конце концов было найдено 3. Гуо (Z. Guo) и Р. У. Холлом (R. W. Hall) [САСМ 32 (1989), 359-373, 759] с ис- пользованием клеточного автомата 3x3, который применяет чередующиеся правила на четных и нечетных шагах. Рассмотрим функцию /(xNw,3;n,3;ne,3'W!3'!3;e,3;sw,3'S73;se) = хЛ~— ,XW,XE,— (159) где д = 1 только в следующих 37 конфигурациях окружения черного пикселя. аиищщивщищщдвйИВНйййЕЯНВНМВВВЯВИВЯЯЯВИ Тогда на четных шагах мы используем (158), но с заменой f(xNW,xN,xNE,xw,x,xE, xsw,xs,xse) на его 180°-ный поворот f(xSE,xs,xsw,xE,x,xw,xNE,xN,xNW). Процесс завершается, когда два последовательных цикла не вносят изменений. Гуо и Холл доказали, что при использовании указанных правил клеточный автомат размером 3x3 сохраняет структуру связности изображения в строгом смысле, рассматриваемом ниже. Кроме того, их алгоритм очевидным образом оставляет изображение нетронутым, если оно уже настолько тонкое, что не содер- жит трех пикселей, являющихся “королевскими” соседями друг друга. С другой стороны, он обычно успешно “удаляет мясо с костей” каждого черного компонента, как показано на рис. 16. Немного более разреженное утончение получается при добавлении четырех дополнительных конфигураций, Л И К, (160) к 37 перечисленным выше. В любом случае функция д может быть вычислена с помощью булевой цепочки длиной 25. (См. упр. 170-172.) В общем случае черные пиксели изображения могут быть сгруппированы в сег- менты или компоненты, связанные ходом короля, в том смысле, что любой черный пиксель может быть достигнут из любого другого пикселя своего компонента с по- мощью последовательности ходов королем по черным пикселям. Белые пиксели также образуют компоненты, связанные ходом ладьи: любые две белые ячейки компонента взаимно достижимы ходами ладьи, не проходящими по черным ячей- кам. Лучше всего использовать для белых и черных ячеек разные виды связности, чтобы обеспечить сохранность топологических понятий “внутри” и “вне”, знакомые
210 КОМБИНАТОРНЫЙ ПОИСК 7.1.3 Рис. 17. Сжатие Чеширского кота путем из континуальной геометрии [см. A. Rosenfeld, JACM 17 (1970), 146-160]. Если представить, что угловые точки растра черные, то бесконечно тонкая черная кривая может пройти между пикселями в углу, в то время как для белой кривой это невозможно. (Мы могли бы также представить белые угловые точки, что привело бы к “ладейной” связности для черного цвета и “королевской”—для белого.) Занимательный алгоритм сжатия рисунка при сохранении его связности, за исключением исчезновения изолированных белых и черных точек, был представлен С. Левиальди (S. Levialdi) в САСМ 15 (1972), 7-10; эквивалентный алгоритм, но с обращением белого и черного, был также разработан в диссертации Т. Бейера (Т. Beyer) (M.I.T., 1969). Идея заключается в использовании клеточного автомата с простой функцией перехода ^(•^NWj J Я'Е J 2-SW1 *^S , *^Se) “ (ж Д (l^Vlg^'V^s)) V (S-W^^s) (161) на каждом шаге. Эта формула в действительности представляет собой правило 2 х 2, но нам все равно требуется окно размером 3x3, если мы хотим отслеживать случаи исчезновения однопиксельных компонентов. Например, на рис. 17, (а) размером 25 х 30, изображающем Чеширского кота, имеется семь “королевских” черных компонентов: контур головы, две ушные ра- ковины, два глаза, нос и улыбка. Результат после однократного применения (161) показан на рис. 17, (б): пока что остались все семь компонентов, но в одном ухе имеется одна изолированная точка, а второе ухо станет таким на следующем шаге. На рис. 17, (в) осталось только пять компонентов. После шести шагов кот теряет нос, и даже улыбка исчезает после 14 шагов. Как это ни прискорбно, на шаге 46 исчезает последний бит кота. Не более М + N — 1 переходов сотрут любое изображение размером М х N, по- скольку нижняя граница видимости, представляющая собой диагональную прямую, идущую с северо-запада на юго-восток, с каждым шагом настойчиво поднимается вверх. В упр. 176 и 177 доказывается, что разные компоненты никогда не сливаются вмести и не влияют друг на друга. Конечно, такой клеточный метод с кубическим временем работы — не самый быстрый способ подсчета или идентификации компонентов изображения. В действи- тельности мы можем выполнять эту работу в “оперативном режиме” при просмотре большого изображения по одной строке за раз, не беспокоясь о сохранении всех ранее просмотренных строк в памяти, если не хотим обращаться к ним снова.
7.1.3 БИТОВЫЕ ТРЮКИ И ТЕХНОЛОГИИ 211 Время — 10 многократного применения преобразования Левиальди. В процессе анализа компонентов мы можем также записывать отношения между ними. Будем считать, что имеется только конечное количество черных пикселей. Тогда в наличии имеется бесконечный компонент из белых пикселей, называющий- ся фоном. Черные компоненты, смежные с фоном, представляют собой главные объекты изображения. А эти объекты могут, в свою очередь, иметь дыры, которые могут служить фоном для объектов другого уровня, и т. д. Таким образом, связные компоненты любого конечного изображения образуют иерархию — ориентированное дерево, корнем которого является фон. Черные компоненты находятся на нечет- ных уровнях этого дерева, а белые—на четных, с чередующейся “королевской” и “ладейной” связностями. Каждый компонент, за исключением фона, окружен родительским компонентом. Компоненты, у которых нет потомков, называются просто связными. Например, вот компоненты Чеширского кота, помеченные цифрами для белых пикселей и буквами для черных, и соответствующее ориентированное дерево. оо ini оооооо /00000 О >000 iOOOO 000 0000 0000 000 >00 000 000 000 00 00 00 Ю0000О0ОООО00 000 о 1 ооо а оооос ооооос оооооо 0000000 0000000000 000000ОС00000000000000 0000 ------------- 000 О J 000 000 000 000 000 000 OOOvO 00000 0000 11 111111 11111 1 1 1 L 1 11 11111 11111 111 111111111111 11 -till 1 ' 11111111111 111111111111 111 0О0 о000 0000 оооооо (162) В процессе сжатия, показанного на рис. 17, компоненты исчезают в порядке ф, {ф, @,@} (все в момент времени 3), ф, О, ®, О, ф. Предположим, что мы хотим проанализировать компоненты такого изображе- ния по одной строке за раз. После того как будут просмотрены четыре строки,
212 КОМБИНАТОРНЫЙ ПОИСК 7.1.3 результат окажется следующим: 0000, 0000 000& о о он ,000000000000000, Ю0000000000000& 0Н000000 ЙИОООООО Инооооо 22Й00000 (163) и мы будем готовы сканировать пятую строку. Сравнение четвертой и пятой строк покажет, что 4» И ф должны сливаться с ©, но должны быть начаты новые компо- ненты ф и (3). В упр. 179 содержится детальное описание поучительного алгоритма, который корректно обновляет текущее дерево при просмотре новой строки. “На лету” может вычисляться и дополнительная информация; например, мы можем определить площадь каждого компонента, положение его первого и последнего пик- селей, наименьший охватывающий прямоугольник и/или его центр тяжести. *3аполнение. Давайте завершим наш быстрый тур по растровой графике обсужде- нием того, как заполнять области, ограниченные прямыми линиями и/или простыми кривыми. Особенно эффективный алгоритм имеется в том случае, когда кривые по- строены из “конических сечений” —окружностей, эллипсов, парабол или гипербол, как в классической геометрии. Отдавая дань геометрическим традициям, в данном обсуждении мы будем ис- пользовать декартовы координаты (х,у) вместо того, чтобы говорить о строках и столбцах пикселей: увеличение х будет означать перемещение вправо, а увели- чение у—перемещение вверх. Что более важно, мы сосредоточимся на границах между квадратными пикселями, а не на самих пикселях. Граница проходит между целыми точками плоскости (т, у) и (х',у'), когда |т — х'\ 4- |у — у'\ = 1. Каждый пиксель имеет четыре границы: (х,у) — (х— 1,у) — (а:—1,у—1) — (х, у— 1) — (т, у). Опыт показывает, что алгоритмы для заполнения контуров становятся проще и быстрее, если мы концентрируемся на границах между белым и черным цветом, а не на черных пикселях пастеризованной линии раздела. (См., например, рассмот- рение вопроса в В. D. Ackland и N. Weste, IEEE Trans. С-30 (1981), 41-48.) Рассмотрим непрерывную кривую z(t) = (ar(t), y(t)), вычерчиваемую при про- бегании t значений от 0 до 1. Мы считаем, что кривая не должна иметь самопере- сечений при 0 < t < 1 и что г(0) = z(l). Знаменитая теорема Джордан о кривых [С. Jordan, Cours d’analyse 3 (1887), 587-594; О. Veblen, Trans. Amer. Math. Soc. 6 (1905), 83-98] указывает, что каждая такая кривая делит плоскость на две области, внутреннюю и внешнюю. Мы можем “оцифровать” z(t), заставляя проходить ее по границам между пикселями; тогда мы получим приближение, в котором внутренние пиксели являются черными, а внешние — белыми. Этот процесс оцифровки, по сути, заменяет исходную кривую последовательностью целочисленных точек round(z(t)) = (|z(t) + |J, Ll/W + 2-0 ДДя0<<<1. (164) При необходимости кривая может быть слегка смещена так, чтобы z(t) никогда не проходила по центру пикселя. Тогда оцифрованная кривая с ростом t дискретно проходит по границам пикселей; а пиксель считается лежащим внутри оцифрован- ной кривой тогда и только тогда, когда его центр лежит внутри исходной непре- рывной кривой {z(t) | 0 < t < 1}. Например, уравнения x(t) = 20соз2тг£ и y(t) = 10sin27rt определяют эллипс. Его оцифровка, round(z(t)), начинается в точке (20,0) при t = 0, затем переходит
7.1.3 БИТОВЫЕ ТРЮКИ И ТЕХНОЛОГИИ 213 к (20,1) при t » .008, а 10 sin 2?rt = 0.5. Затем, когда t растет и принимает значения 0.024, 0.036, 0.040, 0.057, 0.062,..., 0.976,0.992, оцифровка дает точки (20,2), (19,2), (19,3), (19,4), (18,4), ..., (20,-1), (20,0). (165) Горизонтальные границы такого контура удобно представить в виде битовых векторов Н(у) для каждого у, например, 77(10) — ...000000111111111111000000... и 77(9) = ...011111000000000000111110... в (165). Если эллипс заполнен черным цветом для получения растра В, векторы Н отмечают переходы между черным и белым цветами, так что мы имеем соотношение Н = Вф(В^1). (166) И наоборот, легко получить В по заданным векторам Н: В(у) — 77(^/тах) ф77(?/тах—1) Ф • • • Ф77(у +1) = H(j/min) Ф 77(Утт+1) Ф • • • Ф Н(у). (167) Обратите внимание, что Н(ymin) Ф Н(ymin+i) Ф • - Ф Н(j/max) представляет собой ну- левой вектор, поскольку каждое растровое изображение является белым как сверху, так и снизу. Заметим также, что аналогичные векторы для вертикальных границ V(a:) являются излишними: они удовлетворяют формулам V = Вф(В<С1) и В = V® (см. упр. 36), но нам не требуется беспокоиться об их отслеживании. Работать с коническими сечениями проще, чем с большинством других кривых, поскольку при этом можно легко избавиться от параметра t. Например, эллипс, приводящий к (165), может быть задан уравнением (ж/20)2 + (у/10)2 = 1, а не синусами и косинусами. Следовательно, пиксель (т, у) должен быть черным тогда и только тогда, когда его центральная точка (х — \,у — |) лежит внутри эллипса, тогда и только тогда, когда (х — |)2/400 + (у — |)2/100 — 1 < 0. В общем случае каждое коническое сечение представляет собой множество то- чек, для которых F(x,y) = 0, где F — соответствующая квадратичная форма. Сле- довательно, имеется квадратичная форма Q(x,y) = F(x — - |) = ах2+ bxy + cy2+dx + ey +f, (168) которая отрицательна в целочисленной точке (х, у) тогда и только тогда, когда пиксель (х, у) лежит с заданной стороны оцифрованной кривой. Для практических целей можно считать, что коэффициенты (а, Ь,..., /) квад- ратичной формы Q представляют собой не слишком большие целые числа. Тогда нам повезло, поскольку вычислить точное значение Q(x,y) легко. Фактически, как указал М. Л. В. Питтвей (М. L. V. Pitteway) [Comp. J. 10 (1967), 282-289], имеется красивый “трехрегистровый алгоритм’,’ с помощью которого можно быстро отслеживать граничные точки. Пусть х и у — целые числа, и предположим, что
214 КОМБИНАТОРНЫЙ ПОИСК 7.1.3 в трех регистрах (Q, Qx, Qy) у нас имеются значения Q(x, у), Qx(x7 у) и Qy(x,y), где Qx(x, у) = 2ах + by + d и Qy(x, у) = bx + 2су + е (169) представляют собой -^Q и -g^Q- Тогда мы можем перейти в любую соседнюю целочисленную точку, поскольку Q(x±l,y) = Q(x,y)±Qx(x,y)+a, Qx(x±\,y) = Qx(x,y)±2a, Qy(x±l,y) = Qv(x,y)±b\ Q(x,y±l) = Q(x,y)±Qy(x,y)+c, Qx(x,y±l) = Qx(x,y)±b, Qy(x,y±V) = Qy{x,y)±2c. (170) Кроме того, мы можем разделить контур на отдельные части, в каждой из которых и x(t), и y(f) монотонны. Например, когда эллипс (165) идет от (20,0) к (0,10), значение х уменьшается, в то время как значение у увеличивается; таким образом, нам требуется переход только от (т, у) к (х—1, у) или к (х, j/4-l). Если в регистрах (Q, R, S) хранятся соответственно (Q,QX — a,Qy + с), то переход к (х—1, у) просто устанавливает <2 <— Q — R, R R — 2a и S <— S — Ь; переход к (х, у+1) выполняется так же быстро. При аккуратной реализации эта идея приводит к очень быстрому способу корректной оцифровки почти любой конической кривой. Например, квадратичная форма Q(x, у) для эллипса (165) имеет вид 4х2+16у2— (4х + 16у + 1595) при приведении коэффициентов к целочисленным значениям. Мы имеем Q(20,0) = F(19.5, —0.5) = —75 и Q(21,0) = +85; следовательно, пик- сель (20,0), центр которого находится в (19.5, —0.5), располагается внутри эллипса, в то время как пиксель (21,0) — нет. Давайте посмотрим на рисунок в большем масштабе. Контур можно получить без изучения Q в очень большом количестве точек. Дей- ствительно, нам не нужно исследовать <2(21,0), поскольку мы знаем, что все гра- ницы от (20,0) до (0,10) должны вести только либо вверх, либо влево. Сначала мы проверяем <2(20,1) и обнаруживаем, что значение в этой точке отрицательное (—75); так что мы движемся вверх. Отрицательное значение (—43) получается и в точке Q(20,2), так что мы продолжаем движение вверх. Затем мы проверяем <2(20,3) и обнаруживаем, что значение в этой точке положительно (21); так что мы перемещаемся влево, и т. д. При корректном применении трехрегистрового метода фактические проверяемые значения <2 представляют собой —75, —43, 21, —131, —35, 93, -51, ....
7.1.3 БИТОВЫЕ ТРЮКИ И ТЕХНОЛОГИИ 215 Алгоритм Т (Трехрегистровый алгоритм для конических сечений). Для двух заданных целочисленных точек (х, у) и (гг7,у7) и целочисленной квадратичной фор- мы Q, как в (168), этот алгоритм указывает, как оцифровывать часть конического сечения, определяемого уравнением F(x,y) — 0, где F(x,y) — Q(x + |,у + |). Он создает |гг7 — т| горизонтальных и |у7 — у| вертикальных границ, которые образуют путь от (х, у) до (т7,у7). Мы считаем, что i) существуют точки (£,т)) и (£7,т/) с действительными значениями, такие, что F(£,t]) = F(£’,rf) = 0; ii) кривая проходит от (£,т?) к (£7,т/) монотонно по обеим координатам; iii) х = [£ + |J, у = \т] + |], х' = К + U и у’ = [т]’ + |J; iv) при движении по кривой от (£, т]) до (£7,т/7) мы видим значения F < 0 слева; v) никакая граница целочисленной решетки не содержит двух корней Q (см. упр. 183). Т1. [Инициализация.] Если х = х', перейти к шагу Т11; если у = у', перейти к шагу Т10. Если х < х' и у < у', установить Q «— Q(x+l,y+l), R «— <Эх(яН-1,у+1) + a, S <— Qj,(rr+1, у+1) + с и перейти к шагу Т2. Если х < х' ну > у', установить Q «— Q(aH-l,y), R «— (ЭДгг+Еу) + a, S «— Q„(;r+1, у) — с и перейти к шагу ТЗ. Если х > х' и у < у', установить Q <— Q(x,y+1), R *— Qx(x, у+1) — a, S *— Qy(x, у+1) + с и перейти к шагу Т4. Если х > х’ ну > у', установить Q <— Q(x, у), R «— Qx(x, у) — a, S <— Qy(x, у) — си перейти к шагу Т5. Т2. [Вправо или вверх.] Если Q < 0, выполнить шаг T9; в противном случае выполнить шаг Тб. Повторять до прерывания. ТЗ. [Вниз или вправо.] Если Q < 0, выполнить шаг Т7; в противном случае выполнить шаг T9. Повторять до прерывания. Т4. [Вверх или влево.] Если Q < 0, выполнить шаг Тб; в противном случае выполнить шаг Т8. Повторять до прерывания. Т5. [Влево или вниз.] Если Q < 0, выполнить шаг Т8; в противном случае выпол- нить шаг Т7. Повторять до прерывания. Тб. [Перемещение вверх.] Создать границу (х, у) — (х, у+1), затем установить у ♦— у+1. Прерывание к шагу Т10, если у = у7; в противном случае установить Q «— Q + Sy R <— R + b, S <— S + 2с. Т7. [Перемещение вниз.] Создать границу (х, у) — (х, у— 1), затем установить у«— у — 1. Прерывание к шагу Т10, если у = у7; в противном случае установить Q<-Q-S, R<—R — Ь, S^S- 2с. Т8. [Перемещение влево.] Создать границу (х,у) — (х—1,у), затем установить х <— re—1. Прерывание к шагу Т11, если х = х'; в противном случае установить Q*—Q — R, R*—R — 2а, S «— S — Ь. T9. [Перемещение вправо.] Создать границу (т,у) — (т+1,у), затем установить х «— т+1. Прерывание к шагу Т11, если х = хг; в противном случае установить Q «— Q + Ry R «— R + 2а, S <— S + Ь. Т10. [Завершение горизонтали.] Пока х < х1, создавать границы (х, у) — (т+1,у) и устанавливать х «— х + 1. Пока х > а/, создавать границы (т, у) — (а:—1, у) и устанавливать х «— х — 1. Завершить работу алгоритма.
216 КОМБИНАТОРНЫЙ ПОИСК 7.1.3 Til. [Завершение вертикали.] Пока у < у', создавать границы (х, у) — (т, у+1) и устанавливать у «— у + 1. Пока у > у', создавать границы (х,у) — (х, у— 1) и устанавливать у «— у — 1. Завершить работу алгоритма. | Например, при выполнении для (х, у) = (20,0), (х',у') = (0,10) и Q(x,y) = 4х2 + 16у2 — 4х — 16у — 1595 этот алгоритм создаст границы (20,0) — (20,1) — (20,2) — (19,2) — (19,3) — (19,4) — (18,4) — (18,5) — (17,5) — (17,6)-----------(6,9) — (6,10), а затем прямую линию до (0,10). (См."(165) и (171).) В упр. 182 поясняется, почему этот алгоритм корректно работает. Передвижение влево на шаге Т8 удобно реализовать путем установки Н(у) «— Я(1/)Ф(1^(я:тах — х)), используя векторы Н из (166) и (167). Передвижение вправо реализуется аналогично, но с предварительной установкой х ♦— х +1. Шаг Т10 мог бы устанавливать Я(у) <- Н(у) ф ((1« (хтах - 1шп(я:, гг'))) - (1« (хтах - тах(гг, а:')))); (172) однако выполнение по одному шагу за раз может оказаться столь же эффективным, поскольку значение |гг'—гс| часто достаточно мало. Движение вверх и вниз не требует никаких действий, поскольку вертикальные границы излишни. Заметим, что алгоритм работает несколько быстрее в частном случае, когда 6 = 0; окружности всегда относятся к этому частному случаю. Еще более частным случаем являются прямые линии, когда а = Ь = с = 0 (и, конечно же, еще более быстрым); для этого случая есть простой однорегистровый алгоритм (см. упр. 185). Рис. 18. Пиксели изменяются с бе- лых на черные и обратно на грани- цах оцифрованных окружностей. При заполнении большого числа контуров в одном и том же изображении с ис- пользованием векторов Н значения пикселей изменяются между черным и белым при пересечении нечетного количества границ. На рис. 18 показано замощение ги- перболической плоскости равносторонними треугольниками 45°-45°-45°, получае- мыми наложением результатов нескольких сотен применений алгоритма Т. Алгоритм Т применим только к коническим кривым. Но на практике это не такое уж сильное ограничение, поскольку почти любую фигуру, которую нуж- но начертить, можно приближенно представить как “кусочно коническую” т. е. состоящую из частей конических сечений, именуемых квадратичными сплайнами Безье, или сквайнами (squine). Например, на рис. 19 показана типичная кривая, состоящая из сквайнов, проходящая через 40 точек (zq, Zi, ..., Z39, Z40), где Z40 = zq. Точки с четными номерами (zo,Z2,...,Z4o) лежат на этой кривой; другие точки, (zi, 23,..., Z39), называются управляющими, поскольку предназначены для управле- ния локальными изгибами. Каждый сегмент S(z2j, Z23+1, Z23+2) начинается в точке Z23 и имеет в этой точке направление Z2j+i — Z2j- Заканчивается он в точке Z23+2 с направлением Z23+2 — Зц-н Таким образом, если Z23 лежит на прямой линии,
7.1.3 БИТОВЫЕ ТРЮКИ И ТЕХНОЛОГИИ 217 37 39 Рис. 19. Сквайны, определяющие внешний контур символа ‘S’. проходящей через точки Z2j-i и ^+1, то сквайн проходит точку z^j-, не изменяя направления. В упр. 186 дается точное определение S(zzj, Z2j+i, Z2J+2), а в упр. 187 поясняет- ся, как оцифровать любую кривую из сквайнов с помощью алгоритма Т. Область внутри оцифрованного контура может быть залита черными пикселями. Кстати, задача черчения прямых и кривых линий на растре оказывается го- раздо более сложной, чем задача заполнения оцифрованного контура, поскольку требуется, чтобы диагональные отрезки выглядели имеющими ту же ширину, что и горизонтальные и вертикальные. Отличное решение этой задачи было найдено Джоном Д. Хобби (John D. Hobby), J ACM 36 (1989), 209-229. *Вычисление без ветвлений. Общая тенденция современных компьютеров — замедление вычислений при наличии в программе команд условного ветвления, по- скольку неопределенный поток управления может влиять на схемы предиктивного предпросмотра. Поэтому мы использовали команды условной установки типа CSNZ в MMIX-программах наподобие (56). Действительно, четыре такие команды, как ‘ADD z,y,l; SR t,u,2; CSNZ x,q,z; CSNZ v,q,t’, вероятно, окажутся быстрее, чем их трехкомандный аналог BZq,®+12; ADDx.y.l; SRv,u,2 (173) при измерении реального времени работы на высококонвейеризованных машинах, несмотря на то, что эмпирически вычисленная стоимость (173) составляет всего лишь Зг>, в соответствии с табл. 1.3.Г-1. Битовые операции могут помочь уменьшить необходимость в дорогостоящем ветвлении. Например, если бы MMIX не имел команды CSNZ, мы могли бы записать NEGU m,q; ADD t.y.l SR t,u,2; OR m,m,q; SR m,m,63; XOR t,t,x; AND XOR x,x,t; XOR t.t.v; AND XOR v,v,t; (174)
218 КОМБИНАТОРНЫЙ ПОИСК 7.1.3 здесь первая строка создает маску m = —[<7^0]. На некоторых компьютерах эти одиннадцать команд без ветвления все равно окажутся быстрее трех команд из (173). Внутренний цикл алгоритма сортировки слиянием является поучительным при- мером. Предположим, что мы хотим многократно выполнять следующие операции. Если Xi < yj, установить Zk «— Xi, г«— г + 1 и перейти к x-done, если г = гтах- В противном случае установить Zk «— yj, j ♦— j + 1 и перейти к у-done, если j = Jmax- Затем установить к «— к + 1 и перейти к Z-done, если к = ктах. Если реализовать эти действия “очевидным” способом, будут использованы четыре команды условного ветвления, три из которых активны на каждом пути в цикле: 1Н СМР t,xi,yj; BNN t,2F STO xi,zbase,kk ADD ii,ii,8 BZ ii,X_Done LDO xi,xbase,ii JMP 3F 2Н STO yj,zbase,kk ADD BZ jj ,Y_Done LDO yj.ybase.jj ЗН ADD kk,kk,8 PBNZ kk.lB JMP Z_Done Ветвление при xi > yj. Zk ч- Xi. г Ч— г + 1. Переход к x.done при г = гтах- Загрузка х, в регистр xi. Объединение с другой ветвью. Zk Vi- 3 <-з +1- Переход к y.done при j = jmax- Загрузка yj в регистр уj. к ч— к + 1. Повтор, если к кты- Переход к z-done. | (Здесь ii = 8(г — гтах), j j = 8(j — jmax) и kk = 8(A: — fcmax); множитель 8 необходим из-за того, что хг, yj и Zk представляют собой октеты.) Эти четыре ветвления можно свести всего лишь к одному. 1H CMP t.xi.yj t 4- sign(xi - yj). CSN yj.t.xi yj 4— тш^рД. STO yj,zbase,kk Zk ч-yj. AND t,t,8 t 4— 8[ач <yj]. ADD ii,ii,t г 4- i + [a\ <yj]. LDO xi,xbase,ii Загрузка x, в регистр xi. XOR t,t,8 t — t ф 8. ADD jj.jj.t 3 4- j + LDO yj,ybase,jj Загрузка yj в регистр уj. ADD kk,kk,8 к ч— к + 1. AND u,ii,jj; AND u,u,kk w Ч— ii & jj & kk. PBN u,lB Повтор, если ZClmax, j<jmax И fc < fcmax Когда в этой версии завершается цикл, мы можем легко решить, следует ли продол- жать с X-done, y-done или Z-done. Эти команды каждый раз загружают из памяти как Xi, так и yj, но излишнее значение уже находится в кэше. •Другие применения MOR и MXOR. Давайте завершим наше изучение работы с битами рассмотрением двух операций, разработанных специально для 64-битовой
7.1.3 БИТОВЫЕ ТРЮКИ И ТЕХНОЛОГИИ 219 работы. Команды MMIX MOR и MXOR, которые, по сути, выполняют матричное умно- жение булевых матриц размером 8x8, оказываются в высшей степени гибкими и мощными как сами по себе, так и в комбинации с другими битовыми операциями. Если х = (хг ... 2дгго)25б представляет собой октет, а а = (а?... 0100)2 является отдельным байтом, то команда MOR t,x,a выполняет установку t <— 07X7 | | | оогго, в то время как команда MXOR t,x,a устанавливает t <— 07X7 ф • • • ф 0,1X1 фаогго. Например, и MOR t,x,2, и MXOR t,x,2 устанавливают t«— ц; MOR t,x,3 устанавливает t«— ад | xq ; a MXOR t, x, 3 устанавливает t«— яд ф xq - В общем случае, конечно, MOR и MXOR представляют собой функции от окте- тов. Если у = (у7... 3/13/0)256 —обобщенный октет, команда MOR t ,х,у дает октет t, j-й байт которого tj является результатом применения MOR к х и yj. Предположим, что х = — 1 = Тогда MOR t,x,y вычисляет маску t, в которой байт tj равен *ff, когда yj / 0, а при yj = 0 байт tj равен нулю. Этот простой частный случай достаточно полезен, поскольку он выполняет всего за одну операцию то, для чего ранее в ситуации наподобие (92) требовалось семь операций. В (66) мы заметили, что двух MOR будет достаточно для обращения поряд- ка битов любого 64-битового слова, и многие другие перестановки битов также упрощаются при наличии MOR в списке команд компьютера. Предположим, что тг представляет собой перестановку {0,1,..., 7}, которая отображает 0 Отг, 1 1тг, ..., 7 н-> 7тг. Тогда октет р = (277Г... 217Г2О,Г)256 соответствует матрице перестановки, которая заставляет MOR сделать красивый трюк: MOR t, х, р приводит к перестановке байтов х, выполняя присваивания tj «— Xj^. Кроме того, MOR п,р,у выполняет перестановку битов каждого байта у в соответствии с обратной перестановкой; команда устанавливает Uj <— (07 ... 0100)2 при yj — . 01^00^)2- С помощью еще одного небольшого мошенничества мы можем быстро выпол- нять другие перестановки, такие как идеальное тасование (76), которое преобра- зовывает заданный октет z = 232х + у = (x3i... xixoysi... 2/13/0)2 в “застегнутый” октет W = х\у = (хз1Уз1...Х1У1ХоУо)2- (175) С помощью соответствующих матриц перестановок р, qn г промежуточные резуль- таты t = (хз1Х27ХзоХ2бХ29Х25Х28Х24У31У27УЗОУ2бУ29У25У28У24 Х7Х3Х6Х2Х5Х1Х4ХоУ7УзУвУ2У5У1У4Уо)2, (176) « = (У27У31У26У30У25У29У24У28Х27Х31Х26Х30Х25Х29Х24Х28 УЗУ7У2УъУ1УьУоУ4ХЗХ7Х2ХоХ1Х'1ХоХ4)2 (177) могут быть быстро вычислены с помощью четырех команд MORt,z,p; MORt,q,t; MORu,t,r; MORu,r,u; (178) см. упр. 204. Так что имеется маскат, для которой‘PUT rM,m; MUX w,t,u’завершает идеальное тасование всего лишь за шесть тактов. Традиционный же метод в упр. 53 требует 30 тактов (пяти <5-обменов). Аналогичная команда MXOR особенно полезна в бинарной линейной алгебре. Например, в упр. 1.3.Г-37 показано, что XOR и MXOR непосредственно реализуют сложение и умножение в конечном поле из 2fc элементов для k < 8.
220 КОМБИНАТОРНЫЙ ПОИСК 7.1.3 Задача циклической избыточной проверки представляет поучительный пример другого случая, где проявляется великолепие MX0R. Потоки данных часто сопровож- даются “байтами CRC” для обнаружения распространенных типов ошибок передачи [см. W. W. Peterson and D. Т. Brown, Proc. IRE 49 (1961), 228-235]. Один популяр- ный метод, используемый, например, в МР3-аудиофайлах, состоит в рассмотрении каждого байта а = (ау ... 0,10,0)2 как если бы это был полином о(х) = (а-?... aiao)x = а^х1 -----Faix + ao. (179) При передаче п байт an-i ...aia0 мы вычисляем остаток /3 = (an-i(x)xs^n~^ Ч---+ ai(x)x8 + о0(з;))з;16 modp(x), (180) гдер(х) = х16+х15+а:2+1, с применением полиномиальной арифметики по модулю 2 и добавляем коэффициенты (3 в качестве 16-битовой избыточной проверки. Обычный способ вычисления (3 заключается в обработке по одному байту за раз в соответствии с классическими методами наподобие алгоритма 4.6.1D. Основная идея состоит в определении частичного результата (Зт = (an-i(a:)a:8(n_1_’n) -I--1- am+1(a:)r8 + am(x))a:16 modp(x), так что (Зп = 0, а затем в применении рекурсии (Зт = ((/?m+i « 8) & *«00) ф crcd,able[((3m+i » 8) ф am] (181) для уменьшения т на 1, пока не будет достигнуто т = 0. Здесь crc-table[a] представ- ляет собой 16-битовую запись таблицы, которая хранит остаток а(х)х16 по модулю р(х) и по модулю 2 для 0 < а < 256. [См. A. Perez, IEEE Micro 3, 3 (June 1983), 40-50.] Но, конечно, мы бы предпочли обрабатывать за один раз 64 бит вместо 8. Решение заключается в поиске матриц А и В размером 8x8, таких, что а(х)хм = (аА)(х) + (аВ)(х)х~8 (по модулю р(х) и 2), (182) для произвольных байтов а, рассматривая а как вектор битов 1x8. Тогда мы можем дополнить заданные байты данных an-i... Qiao ведущими нулями так, чтобы п было кратно 8, и использовать следующий эффективный метод приведения. Начать сс«— 0, п — 8и4«— (оп+7 • • 071)256- Пока п > 0, устанавливать и «— t- A, v <— t - В, п <— п — 8, (183) t <— (an+7... оп)25б Ф и ф (у » 8) ф (с « 56) и с <— v k *ff. Здесь t- А и t-B обозначают матричное умножение, выполняемое с помощью команды MX0R. Искомые CRC-байты (ta16 + ex8) modp(x) при этом легко получить из 64-би- товой величины t и 8-битовой величины с. Детальное описание имеется в упр. 213; общее время работы для п байт оказывается равным всего лишь (/z + 10v)n/8 + O(l). В приведенных ниже упражнениях содержится гораздо больше примеров зна- чительной экономии при использовании команд M0R и MX0R. Несомненно, своего открытия ждут и новые трюки. Для дальнейшего чтения. В книге Hacker’s Delight Генри С. Уоррена-мл. (Henry S. Warren, Jr.) (Addison-Wesley, 2002)* глубоко рассматриваются битовые операции * Имеется перевод на русский язык: Генри С. Уоррен. Алгоритмические трюки для програм- мистов. М.: Издательский дом “Вильямс” 2003. — Примеч. пер.
7.1.3 БИТОВЫЕ ТРЮКИ И ТЕХНОЛОГИИ 221 и особое значение придается разнообразным возможностям, доступным в реальных компьютерах, не столь идеальных, как MMIX. Упражнения ► 1. [15] Каким оказывается результат присваиваний х ч— х®у, у ч— рф (х&т), х ч— х®у? 2. [15] (Г. С. Уоррен-мл. (Н. S. Warren, Jr.).) Справедливы ли следующие соотношения для всех целых чисел х и у? (i) х ф у < х | у, (ii) х & у < х | у, (iii) |ж — 3/| < х ф у. 3. [Л/20] Пусть х = (in-1 • - .£120)2 и пусть xn_i = 1. Обозначим хм = (2n-i •. .21^0)2- Таким образом, мы имеем 0м, Iм, 2м, 3м, ... = —1, 0, 1, 0, 3, 2, 1, 0, 7, 6, ..., если считать, что 0м = —1. Докажите, что (х ф у)м < |2 — р| < х ф у для всех х,у > 0. ► 4. [Ml 6] Пусть хс — х, xN = —х, xs = 2 + 1 и хр = х — 1 обозначают дополнение, отри- цание, следующее и предшествующее числа для целого числа х с бесконечной точностью. Тогда мы имеем хсс = xNN = xSP = xps = х. Что собой представляют xCN и хкс? 5. [Л/21 ] Докажите или опровергните следующие гипотезы относительно бинарных сдви- гов: а) (2 <g j)<g к = х <g (j + к)-, б) (х » j) & (у <g к) = ((х » (j + к)) & у) <g к = (2 & (у <g (j + fc))) » j. 6. [Л/22] Найдите все целые числа х и у, такие, что (а) х у = у х\ (б) г<р = р<2. 7. [Л/22] (Р. Шрёппель (R. Schroeppel), 1972.) Найдите быстрый способ преобразования бинарного числа х = (...12X1X0)2 в его негабинарный (по основанию —2) двойник х = (... x2x'ix'o)-2, и наоборот. Указание: достаточно только двух битовых операций! ► 8. [Л1Ж8] Для данного конечного множества S неотрицательных целых чисел “минималь- ный эксклудант” S определяется как mex(S') = min{ fclfc^Onfc^S1}. Обозначим через x®S множество {2фр | у 6 S}, а через S®y—множество {2фр | х 6 S}. Докажите, что если х = mex(S') и р = тех(Т'), то 2 ф р = mex((S' ф р) U (2 ф Т)). 9. [ЛГ25] (Ним.) Два игрока играют в игру с fc кучками камней, где в кучке j имеется Oj камней. Если, когда наступает ход очередного игрока, оказывается, что а± = • = ak = 0, этот игрок проигрывает; в противном случае игрок уменьшает одну из кучек на любое количество камней, отбрасывая удаленные камни, и ход переходит к другому игроку. Докажите, что игрок может обеспечить себе победу тогда и только тогда, когда щ ф • ф ak 0 0. [Указание: воспользуйтесь результатами упр. 8.] 10. [HMJO] (Нимберы, или поле Конвея.) Продолжая выполнение упр. 8, рекурсивно определим операцию “ним-умножения” х ® у с помощью формулы 2 ® у = mex{(2 ® j) ф (г ® у) ф (г ® j) | 0 < г < х, 0 < j < р}. Докажите, что фи® определяют поле на множестве всех неотрицательных целых чисел. Кроме того, докажите что если 0 < х,у < 22", то х®у < 22”, а 22"®р = 22"р. (В частности, это поле содержит подполя размером 22" для всех п > 0.) Поясните, как эффективно вычислить х ® у. ► 11. [ЛД?5] (X. В. Ленстра (Н. W. Lenstra), 1978.) Найдите простой способ охарактеризо- вать все пары положительных целых чисел (тп, п), для которых в поле Конвея тп® п = тпп. 12. [ЛЛ85] Разработайте алгоритм деления нимберов. Указание: если х < 22"+1, то мы имеем 2® (гф (2» 2П)) < 22".
222 КОМБИНАТОРНЫЙ ПОИСК 7.1.3 13. [M3S] (Ним второго порядка.) Расширим игру из упр. 9, разрешив два вида ходов: либо, как и ранее, уменьшается aj для некоторого j; либо уменьшается aj, и а, для некоторого г < j заменяется произвольным неотрицательным целым числом. Докажите, что игрок, чей ход текущий, может обеспечить свою победу тогда и только тогда, когда размеры кучек камней удовлетворяют либо условию аг аз ф • - ф а*,, либо ai аз ф (2 ® а<) Ф • • Ф ((к — 2) ® ak). Например, когда к = 4 и (ai, аг, аз, а<) = (7,5,0,5), единственным выигрышным ходом является (7,5,6,3). 14. [МЗО] Предположим, что каждый узел полного бесконечного бинарного дерева по- мечен 0 или 1. Такие метки удобно представить в виде последовательности Т = (t, to, ti,too,toi,tio,tii,tooo,. - - ) с одним битом ta для каждой бинарной строки а; корень имеет метку t, метками левого поддерева являются То = (to, too, toi, tooo, • - -а метками правого поддерева—Ti = (ti, tio, tii, tioo,... ). Любая такая маркировка может использоваться для преобразования 2-адического целого числа х = (... гг2Т1То)г в 2-адическое целое число у = (... 3/23/13/0)2 = Т(х) путем установок уо = t,yi = txo, уъ = tX0X1 и других, так, чтобы Т(х) = 27LO (La:/2J) +1- (Другими словами, х определяет бесконечный путь в бинарном дереве, а у соответствует меткам на этом пути, справа налево в битовой строке при перемещении по дереву сверху вниз.) Функция ветвления (branching function) представляет собой отображение хт = х ф Т(х), определяемое такой маркировкой. Например, если toi = 1 и все прочие tQ равны О, мы имеем хт = х ф 4[х mod 4 = 2]. а) Докажите, что каждая функция ветвления представляет собой перестановку 2-ади- ческих чисел. б) Для каких целых чисел к выражение х ф (х <S к) является функцией ветвления? в) Пусть х 1-4 хт является отображением 2-адических целых чисел в 2-адические целые числа. Докажите, что хт является функцией ветвления тогда и только тогда, когда р(х Ф з/) = р(хт ® ут) для всех 2-адических хп у. г) Докажите, что композиции и обращения функций ветвления являются функциями ветвления. (Таким образом, множество В всех функций ветвления представляет собой группу перестановок.) д) Функция ветвления является сбалансированной, если метки удовлетворяют условию ta = tQo Ф tQi для всех а. Покажите, что множество всех сбалансированных функций ветвления представляет собой подгруппу В. 15. [М2б] Студент Шустрый заметил, что ((х + 2) ф 3) — 2 = ((х — 2) ф 3) + 2 для всех х. Найдите все константы а и Ь, такие, что ((х + а) ф Ъ) — а = ((х — а) ф Ъ) + а является тождеством. 16. [Л/31] Функция от х называется анимирующей (animating), если она может быть записана в виде ((• • • ((((^ + О1) ® bi) + 02) Ф bi) + •••) + am) ф bm для некоторых целочисленных констант щ, bi, аг, Ьг, ..., am, bm, где m > 0. а) Докажите, что каждая анимирующая функция является функцией ветвления (см. упр. 14). б) Кроме того, докажите, что она является сбалансированной тогда и только тогда, когда bi ф Ьг Ф • • • Ф bm = 0. Указание: какая маркировка бинарного дерева соответствует анимирующей функции ((х ф с) — 1) ф с? в) Пусть [ж] = х Ф (х — 1) = 2₽^'+1 — 1. Покажите, что каждая сбалансированная анимирующая функция может быть записана в виде тф |_ггфр1] Ф [хфрг! Ф • • • Ф |тфр11, Pi < Р2 << Pl,
7.1.3 БИТОВЫЕ ТРЮКИ И ТЕХНОЛОГИИ 223 для некоторых целых чисел {pi,₽2, • • >pi}, где I > 0, и такое представление является единственным. г) И обратно, покажите, что каждое такое выражение определяет сбалансированную анимирующую функцию. 17. [ЯМ56] Результаты упр. 16 делают возможным вы- яснение, являются ли две заданные анимирующие функ- ции равными. Существует ли алгоритм, выясняющий, тождественно ли любое заданное выражение нулю, в слу- чае, когда это выражение построено из конечного числа целочисленных переменных и констант с применением только лишь бинарных операций + и ф? Что если мы также разрешим операцию &? 18. [М25] Показанный здесь забавный узор в строке х и столбце у имеет значение (а:2?/ »11) & 1, где 1 < х, у < 256. Существует ли простой способ пояснить некоторые основные его характеристики математически? ► 19. [М37] ( Теорема о переупорядочении Лейли.) Пусть для трех заданных векторов, А = (ао, - - -, d2"-i), В = (Ьо,..., Ьг"-1) и С = (со,... ,С2"-1), состоящих из неотрицательных чисел, f(A, В, С) = ajbkci. j®k®l=O Например, если п = 2, мы имеем f(A,B,C) = aoboco + aobici + аоЬгсг + аобзсз + aiboci + aibiCo+aib2C3-l---1-азЬзСо; в общем случае имеется 22п членов, по одному для каждого вы- бора j и к. Наша цель заключается в доказательстве того, что f(A, В, С) < f(A*,B*,C*), где А* означает вектор А, отсортированный в неувеличивающемся порядке: ag > aj > > G2n — 1* а) Докажите этот результат для случая, когда все элементы А, В н С являются нулями и единицами. б) Покажите, что, следовательно, это справедливо и в общем случае. в) Аналогично f(A,B,C,D) = 52лФк®гфт=о aJ/И*, В*,С*, D"). ► 20. [21] (Хак Госпера.) Следующие семь операций представляют собой полезную функ- цию у от х, где х — положительное целое число. Поясните, что собой представляет эта функция и чем она так полезна. и <— х — х\ v <— х + и; у ч— v + (((v ф х)/и) 2). 21. [22] Обратите хак Госпера—покажите, как вычислить х, зная у. 22. [21] Эффективно реализуйте хак Госпера на машине MMIX в предположении, что х < 264, и без использования деления. ► 23. [27] Последовательность вложенных скобок можно представить в виде бинарного чис- ла, помещая 1 в позиции каждой правой скобки. Например, ‘ ( О ) О ’ при этом соответству- ет (001101)2, числу 13. Назовем такое число скобочным следом (parenthesis trace). а) Каковы наименьший и наибольший скобочные следы, имеющие ровно т единиц? б) Предположим, что х представляет собой скобочный след, а у—следующий по вели- чине скобочный след с тем же количеством единиц. Покажите, что у можно вычислить из х с помощью короткой цепочки операций, аналогичной хаку Госпера. в) Реализуйте свой метод на машине MMIX в предположении, что их < 32. ► 24. [МЗО] Программа 1.3.2'Р указывает MMIX, как построить таблицу первых пяти сотен простых чисел с использованием пробного деления для выяснения простоты. Напишите
224 КОМБИНАТОРНЫЙ ПОИСК 7.1.3 MMIX-программу, использующую “решето Эратосфена” (упр. 4.5.4-8) для построения табли- цы всех нечетных простых чисел, меньших N, упакованную в октеты Qo, Qi, ..., Qn/128-i, как в (27). Считаем, что N < 232 и что оно кратно 128. Чему равно время работы программы для N = 3584? 25. [15] На книжной полке стоят рядом четыре тома. В каждом из них ровно 500 страниц, напечатанных на 250 листах бумаги толщиной 0.1мм; каждая книга имеет переднюю и заднюю обложки толщиной по 1 мм. Книжный червь ползет от страницы 1 тома 1 до страницы 500 тома 4. Какой длины путешествие он при этом совершит? 26. [22] Предположим, что нам требуется обеспечить произвольный доступ к таблице с 12 миллионами 5-битовых элементов данных. Можно упаковать 12 таких элементов в од- но 64-битовое слово, тем самым разместив таблицу в 8 Мбайт памяти. Но произвольный доступ при этом потребует деления на 12, что достаточно медленно, так что мы можем предпочесть затратить 12 Мбайт памяти, отводя каждому элементу целый байт. Покажите, что существует эффективный с точки зрения использования памяти под- ход, не требующий деления. 27. [21] Как бы вы вычисляли (использованы обозначения из (32)-(43)) (а) (а10°01ь)2? (б) (а10“11ь)2? (в) (а00“01ь)2? (г) (0оо11“00ь)2? (д) (0°°01“00ь)2? (е) (0°°11о11ь)2? 28. [15] Каков результат операции (з:+1) & х? 29. [20] (В. Р. Пратт (V. R. Pratt).) Выразите магическую маску рь из (47) через рь+1- 30. [20] Если х — 0, команды MMIX (46) выполняют установку р ч— 64 (что является достаточным приближением к оо). Какие изменения в (50) и (51) дадут тот же результат? 31. [20] Студент Шустрый решил вычислять линеечную функцию с помощью простого цикла следующим образом: “установить р ч— 0; затем, пока х & 1 = 0, устанавливать р ч- р + 1 и а: Ч- I > 1'.’ Он поясняет, что, когда х представляет собой случайное целое число, среднее количество правых сдвигов равно среднему значению р, которое равно 1; а стандартное отклонение составляет всего лишь \/2, так что цикл почти всегда будет быстро завершаться. Раскритикуйте это решение. 32. [20] Чему равно время вычисления рх, если запрограммировать (52) для машины MMIX? 33. [26] (Лейзерсон (Leiserson), Прокоп (Prokop) и Рэндолл (Randall), 1998.) Покажите, что если в (52) заменить ‘58’ на ‘49’, то этот метод можно использовать для быстрого распознавания обоих битов числа у = 2J' + 2к при 64 > j > к > 0. (Хотя (62) = 2016 случаев должно быть выделено.) 34. [М23] Пусть х и у являются 2-адическими целыми числами. Истинны или ложны утверждения: (а) р{х & у) = тах(рх, ру)-, (б) р(х | у) = min(px,py)-, (в) рх = ру тогда и только тогда, когда х ф у = (х — 1) ф (у — 1). 35. [М26] Согласно теореме Райтвизнера (Reitwiesner), упр. 4.1-34, каждое целое число п имеет единственное представление п = п+—п~, такое, чтоп+&п~ = (n+ |п-)&((п+|п-)^ 1) = 0. Покажите, что п+ и п~ можно быстро вычислить с помощью битовых операций. Указание: докажите тождество (х ф Зх) & ((а: ф Зх) 1) = 0. 36. [20] Для заданного х = (хвз - .3:13:0)2 предложите эффективный способ вычисления величин i) з:® = (з:?3 ... xfxf )2, где х? = х^ Ф Ф xi ф хо для 0 < к < 64; ii) з:& = (з:ез • • • зтэто )г, где х% = Xk А - A xi А хо для 0 < к < 64. 37. [15] Какие изменения в (55) и (56) сделают АО дающей результат —1? 38. [17] Сколько времени выполняется процедура выделения крайнего слева бита (57) при ее реализации на машине MMIX?
7.1.3 БИТОВЫЕ ТРЮКИ И ТЕХНОЛОГИИ 225 ► ЗА. [20] Формула (43) показывает, как удалить крайнюю справа серию единичных битов из заданного числа х. А как удалить крайнюю слева серию единичных битов? ► 40. [21 ] Докажите (58) и найдите простой способ выяснить, справедливо ли соотношение Хх < Ху для заданных х и у > 0. 41. [М22] Каковы производящие функции целочисленных последовательностей (а) рп, (б) Хп и (в) i/n? 42. [М21] Пусть п = 2е1 + + 2ег, с ei > • > ег > 0. Выразите сумму IZkZo чеРез показатели степеней ei, ..., ег. ► 43. [20] Насколько разреженным должно быть х, чтобы реализация (63) на машине MMIX была быстрее реализации (62)? ► 44. [23] (Э. Фрид (Е. Freed), 1983.) Предложите быстрый способ вычисления взвешенной СуММЫ биТОВ У jXj. ► 45. [20] (Т. Рокицки (Т. Rokicki), 1999.) Поясните, как проверить выполнение соотноше- ния xR< yR без обращения порядка битов в х и у. 46. [22] Метод (68) использует шесть операций для обмена двух битов х, <-> Xj регистра. Покажите, что в действительности этот обмен можно выполнить с помощью только трех команд MMIX. 47. [10] Может ли обобщенный 5-обмен (69) быть выполнен методом наподобие (67)? 48. [М21 ] Сколько различных 5-обменов возможны в n-битовом регистре? (Когда п = 4, 5-обмен может преобразовать 1234 в 1234, 1243, 1324, 1432, 2134, 2143, 3214, 3412, 4231.) ► 49. [МЗО] Пусть s(n) обозначает наименьшие 5-обмены, которых достаточно для обраще- ния порядка битов n-битового числа. а) Докажите, что s(n) > [log3 п] при нечетном п, s(n) > [log3 Зп/2] при четном п. б) Вычислите s(n) при п = Зт, 2 • Зт, (Зт + 1)/2 и (Зт — 1)/2. в) Чему равны s(32) и s(64)? Указание: покажите, что s(5n + 2) < s(n) + 2. 50. [М37] Продолжая упр. 49, докажите, что s(n) = log3 п + O(log log n). 51. [23] Пусть с представляет собой константу, 0 < с < 2d. Найдите все последова- тельности масок (6o,-#i, - • ,0d—i,Od—2, - •,01,во), такие, что общая схема перестановок (71) отображает х х7', где битовая перестановка тг определяется либо как (a) jit = j ф с, либо как (б) jtt = (j + с) mod 2d. [Маски должны удовлетворять соотношениям 0k С и 0k С pd,k, так что (71) соответствует рис. 12; см. (48). Заметим, что обращение порядка битов х* = xR представляет собой частный случай с = 2d — 1 п. (а), в то время как п. (б) соответствует циклическому сдвигу вправо хп = (х с) + (х (2d — с)).] 52. [22] Найдите шестнадцатеричные константы (0о, 01,02,0з, 04,05,04, &з, &2,01,0о), кото- рые заставляют (71) выполнять следующие важные 64-битовые перестановки, основан- ные на бинарном представлении j = (j5j4j3j2jijo)2: (a) jit = (303534333231)2', (6) jit = (j2jijoj5j4j3)2; (в) jit = (jijoj5j4j3j2)2; (г) jit = (joji J2J3 J4.75)2. [Случай (а) представ- ляет собой “идеальное тасование” (175), которое превращает (тез • •-тззтзгтз!- -tito)2 в (а?взтз1 ... 133X1X32X0)2', случай (б) транспонирует матрицу битов размером 8x8; слу- чай (в), аналогично, транспонирует матрицу 4 х 16; а случай (г) возникает в связи с “быст- рым преобразованием Фурье” см. упр. 4.6.4-14.] ► 53. [М25] Перестановки в упр. 52, как говорится, “вызваны перестановкой индексных цифр” поскольку мы получаем jit путем перестановки бинарных цифр j. Предположим, что jit = (j(d-i)^,. -. jivJoV’bi где ip — перестановка {0,1,... ,d — 1}. Докажите, что если •ф имеет t циклов, то 2й-битовая перестановка х i-> я” может быть получена путем только d — t обменов. В частности, покажите, что это наблюдение ускоряет все четыре случая из упр. 52. в Зак. 3331
226 КОМБИНАТОРНЫЙ ПОИСК 7.1.3 ?=г 1=1 U 1у> 2у> 3<р 4<р 5<р 6<р 54. [22] (Р. В. Госпер (R. W. Gosper), 1985.) Покажите, как транспонировать битовую матрицу размером т х т, хранящуюся в т2 крайних справа битах регистра, путем (2к(т— 1))-обменов для 0 < к < [1g ш]. Детально опишите метод при т = 7. 55. [26] Предположим, что битовая матрица размером п х п хранится в крайних справа п2 битах побитового регистра. Докажите, что для умножения двух таких матриц при п = 2d достаточно 18d + 2 битовых операций; умножение матриц может быть как булевым (наподобие M0R), так и по модулю 2 (наподобие MX0R). 56. [24] Предложите способ транспонирования битовой матрицы размером 7 х 9 в 64- битовом регистре. 57. [22] Сеть P(2d) на рис. 12 содержит (2d — l)2d-1 перекрещиваний. Докажите, что любая перестановка 2d элементов может быть осуществлена путем некоторой настройки, в которой активны не более d2d-1 из них. 58. [М32] Первые d столбцов модулей перекрещивания в перестановочной сети F(2d) выполняют 1-обмен, затем 2-обмен, ... и наконец 2</^1-обмен, когда провода сети превра- щаются в горизонтальные линии, как показано здесь для d = 3. Пусть N = 2d. Эти N линий, вместе с Wd/2 перекрещивания- ми, образуют так называемый “омега-маршрутизатор” или “об- ратную бабочку’.’ Цель данного упражнения заключается в изу- чении множества Q всех перестановок таких, что мы можем получить (0^5,1 <р,..., в качестве выходов справа от омега- маршрутизатора, когда входами слева являются (0,1,..., N — 1). а) Докажите, что |Q| = 2Nd/2. (Таким образом, lg |Q| = Nd/2 ~ | lg N\.) б) Докажите, что перестановка р множества {0,1,..., N—1} принадлежит Q тогда и толь- ко тогда, когда из i mod 2fc = j mod 2fc и i<p к — j<p к вытекает i<p = j<p (*) для всех 0 < i, j < N и всех 0 < к < d. в) Упростите условие (*) до следующего для всех 0 < i,j < N: из А(г<р ф j<p) '< p(i ф j) вытекает i = j. г) Пусть Т представляет собой множество всех перестановок т множества {0,1,..., N—1}, таких, что р(г ф j) = р(гт ф ут) для всех г и j. (Это множество функций ветвления, рассматривавшихся в упр. 14, по модулю 2d; так что в нем имеется 2N-1 членов, 2N/2+d-1 из которых являются анимирующими функциями по модулю 2d.) Докажите, что <р 6 Я тогда и только тогда, когда т<р € Q для всех т 6 Т. д) Предположим, что <р и ф являются перестановками Q, влияющими на разные элемен- ты; т. е. из j<p j вытекает jip = j для 0 < j < N. Докажите, что <рф 6 П. е) Докажите, что перестановка 0<р... (N — 1)^5 является омега-маршрутизируемой тогда и только тогда, когда она сортируема битонической сортирующей сетью Батчера по- рядка N. (См. раздел 5.3.4.) 59. [МЗО] Сколько имеется омега-маршрутизируемых перестановок, работающих только на отрезке [а.. Ь], для заданных 0<a<b<N = 2d? (Таким образом, мы хотим подсчитать количество 6 П, таких, что из j<p ф j вытекает а < j < Ь. Упр. 58, (а) представляет собой частный случай а = 0, b — N — 1.) 60. [НМ28] Для заданной случайной перестановки множества {0,1,..., 2п—1} обозначим через Рпк вероятность того, что имеется 2к способов установки перекрещиваний в первом и последнем столбцах перестановочной сети Р(2п) при осуществлении этой перестановки. Другими словами, p„k представляет собой вероятность того, что связанный граф имеет
7.1.3 БИТОВЫЕ ТРЮКИ И ТЕХНОЛОГИИ 227 к циклов (см. (75)). Что собой представляет производящая функция pnkZk? Чему равны среднее значение и дисперсия 2fc? 61. [46] Является ли выяснение, осуществляется ли заданная перестановка при исполь- зовании рекурсивного метода с рис. 12, при реализации (71) как минимум с одной маской Oj = 0, NP-сложной задачей? 62. [22] Пусть N = 2d. Можно очевидным образом представить перестановку тг множе- ства {0,1,..., N — 1} с помощью таблицы из N чисел по d бит каждое. При таком пред- ставлении мы получаем моментальный доступ к у = хтг для данного х-, но нам требуется П(АГ) шагов для поиска х = утг~ для заданного у. Покажите, что при использовании того же количества памяти можно представить произвольную перестановку таким образом, что и хп, и утг~ будут вычислимы за O(d) шагов. 63. [1Р] Для каких целых чисел w, х, у и z функция застежки удовлетворяет соотношени- ям (i) xfy = yfx? (ii) (xtj/)»z = (x»[z/2])t(2/»[2/2J)? (iii) (ш{х)&(г/{г) = (w&y)X(x&z)t 64. [22] Найдите “простое” выражение для zip-операции над суммами (х + х') { (у + у') как функцию от z = х { у и z' = х' { у'. 65. [М16] Бинарный полином и(х) = ио + гцаЯ |-Mn_ixn-1 (mod 2) можно представить целым числом и = (un-i • • гцио)г. Если и(х) и v(x) соответствуют, таким образом, целым числам и и v, то какой полином соответствует и J v? 66. [М26] Предположим, что полином и(х) был представлен как n-битовое целое число и, как в упр. 65, и что v = и® (и 5) ф (и 25) ф(и36) ф• • • для некоторого целого числа 6. а) Каким простым образом описать полином ц(х)? б) Предположим, что п велико и биты и упакованы в 64-битовые слова. Как бы вы вычисляли v при 6 = 1 с использованием булевых операций с 64-битовыми регистрами? в) Ответьте на вопрос п. (б), но при 6 = 64. г) Ответьте на вопрос п. (б), но при 5 = 3. д) Ответьте на вопрос п. (б), но при 5 = 67. 67. [М31 ] Пусть и(х) представляет собой полином степени < п, представленный, как в упр. 65. Обсудите вычисление v(x) = и(х)2 mod (хп+х’п+1), когда 0 < т < п и как т, так и п нечетны. Указание: эта задача имеет интересное отношение к идеальному тасованию. 68. [20] Какие три команды MMIX реализуют операцию 5-сдвига (79)? 69. [25] Докажите, что метод (80) всегда выделяет должные биты при надлежащей уста- новке масок Ok'- мы никогда не затрем ни один из важных битов yj. 70. [51] (Гай Л. Стил-мл. (Guy L. Steele Jr.), 1994.) Подскажите хороший способ вы- числения масок во, 01, ..., 0а-1, необходимых в обобщенной процедуре сжатия (80), для заданного х ф 0? 71. [20] Поясните, как обратить процедуру (80), переходя от сжатого значения у = (j/r-l . . .2/1Уо)2 К ЧИСЛУ Z = («63 • 212о)2, У КОТОРОГО Zj, = у, для 0 < i < г. 72. [25] (Е. Хилевиц (Y. Hilewitz) и Р. Б. Ли (R. В. Lee).) Докажите, что операция “сбор и переворот” (81') является омега-маршрутизируемой в смысле упр. 58. 73. [22] Докажите, что d тщательно отобранных шагов (а) операции “отделения агнцев от козлищ” (sheep-and-goats) или (б) операции сбора с переворотом (81') реализуют любую требуемую 2й-битовую перестановку. 74. [22] Для заданных количеств (со, ci,..., c2d_i) для процедуры Чжуна-Вонга поясни- те, почему подходящий циклический 1-сдвиг всегда может дать новые количества (сд, ci, ..., с2а_1), для которых $2с2/ = 52c2i+i, тем самым позволив применить рекурсию.
228 КОМБИНАТОРНЫЙ ПОИСК 7.1.3 75. [32] Метод Чжуна-Вонга реплицирует бит I регистра ровно ci раз, но дает результа- ты в “зашифрованном” порядке. Например, показанный в разделе случай (со,...,с?) = (1,2,0,2,0,2,0,1) дает (x7x3xixbxsx3xixo)2. В некоторых приложениях это может ока- заться неудобным; мы можем предпочесть, чтобы биты сохраняли свой исходный порядок, а именно (x7xbxsx3x3xixixo)2 для данного примера. Докажите, что перестановочная сеть F(2d) на рис. 12 может быть модифицирована для достижения этой цели для любой заданной последовательности количеств (со, ci,..., c2d_i), если заменить d 2d-1 модулей перекрещивания в правой половине обобщенными модулями отображения 2x2. (Модуль перекрещивания со входами (а, Ь) дает в качестве выхода либо (а, Ь), либо (Ь, а); модуль отображения может, кроме того, давать (а, а) или (Ь,Ь).) 76. [47] Отображающая сеть аналогична сети сортировки или перестановки, но исполь- зует модули отображения 2x2 вместо компараторов или перекрещиваний; предполагается, что такая сеть способна выводить все пп возможных отображений п входов. В упр. 75, в сочетании с рис. 12, показано, что для п = 2d существует отображающая сеть со всего лишь 4d — 2 уровнями задержки и с п/2 модулями на каждом уровне; кроме того, такая конструкция требует применения модулей отображения 2x2 (вместо простых перекрещи- ваний) только в d из этих уровней. Каково с точностью О(п) наименьшее количество G(n) модулей, достаточное для реализации обобщенной n-элементной отображающей сети? 77. [26] (Р. В. Флойд (R. W. Floyd) и В. Р. Пратт (V. R. Pratt).) Разработайте алгоритм, который проверяет, является ли данная стандартная n-сеть сортирующей, как определено в упр. раздела 5.3.4. Если заданная сеть имеет г компараторов, ваш алгоритм должен использовать О(г) битовых операций со словами длиной 2". 78. [М27] (Проверка непересекаемости.) Предположим, что каждое бинарное число xi, Х2, ..., хт представляет множество в генеральной совокупности из п — к элементов, так что каждое Xj меньше 2n-fc. Студент Шустрый решил проверять множества на непересе- каемость путем проверки выполнения условия Xi I Х2 I I Хт = (ал + Х2 Ч-1- Xrn) mod 2”. Докажите или опровергните следующее утверждение: проверка Шустрого работает тогда и только тогда, когда к > lg(m — 1). 79. [20] Пусть х ф 0 и х С х- Каким образом можно легко найти наибольшее целое число х, < х, такое, что xt С х? (Таким образом, (х,)' = (х1), = х в связи с (84).) 80. [20] Предложите быстрый способ поиска всех максимальных собственных подмно- жеств множества. Говоря точнее, для данного х с УХ = m мы хотим найти все х С х, такие, что их = т — 1. 81. [21] Найдите формулу для “рассеянной разности” парной к “рассеянной сумме” (86). 82. [21] Легко ли сдвинуть влево на 1 рассеянный аккумулятор (например, заменить (У2Х4ХзУ1Х2УоХ1ХО)г на (У1Х4ХзУоХ2ОХ1Хо)2)? 83. [55] Продолжая выполнять упр. 82, найдите способ сдвига рассеянного 2й-битового аккумулятора вправо на 1 для данных z и х за O(d) шагов. 84. [25] Поясните, как для заданных n-битовых чисел z = (zn-i £1.20)2 и х = (Xn-i • • Х1Хо)г вычислить “растянутые” величины z т— х = С?(п-1).-х • • • zi^-xzo^-x)^ и z ~* X — (Z(n-l)-rx-^1-.хг0-гх)21 гДе j г- х = max{fc I к < j и х* = 1}, 3~'Х = min{fc | к > j и Хк = 1};
7.1.3 БИТОВЫЕ ТРЮКИ И ТЕХНОЛОГИИ 229 мы полагаем Zj^x = 0, если = О для 0 < к < j, и Zj_,x = 0, если = 0 для п > к > j. Например, если п = 11 и х = (01101110010)2, то z-t~x — (zgzgzgzgzgzgziziz-iz-ityz и z—rX = (Ozs Zg Zg Ze Zg Zi Zi Zi Zl Z\ ) 2. 85. [22] (К. Д. Точер (К. D. Tocher), 1954.) Представим, что у вас имеется древняя ЭВМ 1950-х годов с барабанной памятью для хранения данных и вам нужно выполнить некото- рые вычисления с массивом a[i,j, fc] размером 32 х 32 х 32, индексы которого представляют собой 5-битовые целые числа в диапазоне 0 < i,j, к < 32. К сожалению, ваша машина имеет очень небольшую высокоскоростную память: в любой момент времени вы можете обращаться только к 128 последовательным элементам массива в быстрой памяти. По- скольку ваше приложение обычно выполняет перемещения из a[i, j, fc] в соседнюю позицию <*[»*,fc*], где I® ~ + Ь — /I + |fc — fc | = 1, вы должны разместить массив в памяти таким образом, чтобы, если г = (iiigiziiiojz, j — (j4j3j2jijo)2 и fc = (fcafcaA^fcifcob, элемент массива a[i,j, fc] хранился на барабане в позиции (fc4j4«4fc3j3«3fc2j2i2fcijiiifcojoio)2. При таком чередовании битов небольшие изменения г, j или к будут приводить к небольшим изменениям адреса. Обсудите реализацию этой функции адресации: (а) как изменяются ее значения при изменении г, j или fc на ±1? (б) как обеспечить произвольный доступ к a[i, j, fc] для данных г, j и fc? (в) как обнаруживать ошибку отсутствия страницы (т. е. когда необходимо загрузить в быструю память с барабана новый сегмент со 128 элементами)? 86. [М27] Массив из 2₽ х 2’ х 2Г элементов размещен таким образом, что элемент a[i, j, fc] находится в позиции, биты которой представляют собой р + q + г бит (г, j, к), некоторым образом переставленных. Кроме того, этот массив хранится во внешней памяти с исполь- зованием страниц размером 2®. (В упр. 85 рассмотрен случай р = </ = г = 5ив = 7.) Какая стратегия распределения такого рода минимизирует количество случаев, когда а[г, j, fc] находится на странице, отличной от страницы a[i',j',k'], при суммировании по всем г, j, к, г', j' и fc', таким, что |г — г'| + |j — /| + |fc — fc'| = 1? 87. [20] Предположим, что каждый байт 64-битового слова х содержит код ASCII, кото- рый представляет букву, цифру либо пробел. Какие три битовые операции конвертируют все буквы из нижнего регистра в верхний? 88. [20] Для заданных х = (х7... £0)256 и у = (уг... «/0)256 вычислите z = (27... 20)256, где Zj = (xj — yj) mod 256 для 0 < j < 8. (См. операцию сложения в (87).) 89. [23] Для заданных х = (хз1... £1X0)4 и у = (3/31 ... 3/12/0)4 вычислите z = (231... 2120)4, где Zj = [xj/j/jJ для 0 < j < 32, в предположении, что ни одно значение yj не равно нулю. 90. [20] Правило битового усреднения (88) всегда выполняет округление вниз при нечет- ном Xj + yj. Сделайте его менее смещенным путем округления в таких случаях к ближай- шему нечетному целому числу. 91. [26] (Альфа-каналы.) Метод (88) является хорошим способом вычисления битового среднего, но приложения компьютерной графики часто требуют более общего смешивания 8-битовых значений. Покажите, как для заданных трех октетов х = (т7... £0)256, у = (1/7 - - - «/0)256 и а = (а? ... ао)г5б битовые операции позволяют вычислить z = (27 ... 20)256, где каждый байт Zj представляет собой хорошее приближение к ((255 — a,j)xj + aj«/j)/255 без привлечения умножений. Реализуйте свой метод на машине MMIX. 92. [21] Что будет, если заменить вторую строку (88) строкой ‘2 ч— (х | у) — 2’? 93. [15] Какова основная формула для вычитания аналогична формуле (89) для сложе- ния? 94. [21] Пусть в (90) х = (17 ... £1X0)256 и t = (tj ... tito)256- Может ли tj быть ненулевым при ненулевом xj? Может ли tj быть нулевым при нулевом х3?
230 КОМБИНАТОРНЫЙ ПОИСК 7.1.3 95. [22] Как с помощью битовых операций выяснить, все ли байты х = {ху... ацздЬвв различны? 96. [21] Поясните (93) и найдите подобную формулу, которая устанавливает тестовые флаги tj «— 128[tj < yj], 97. [23] В статье Лесли Лампорта (Leslie Lamport), вышедшей в свет в 1975 году, пред- ставлена следующая “задача, взятая из реального алгоритма оптимизации компилятора”: для заданных октетов х = (ху ... то)г5б и у = (jz? • 2/0)256 вычислить t = (ty... to)256 и z — ... 20)256 так, чтобы tj 0 тогда и только тогда, когда Xj -f- 0, Xj / и Xj + Уз\ &Zj = (xj = 0? yj: (xj / /\Xj / yj? Xj)). 98. [20] Для заданных x = (xy ... £0)256 и у = (jz? - • -2/0)256 вычислить z = (zy ... zo'jzse и w = (wy ... wo)256, где Zj = max(xj,yj) и Wj = min(ij,Sj) для 0 < j < 8. 99. [28] Найдите шестнадцатеричные константы а, b, с, d и е, такие, что шесть битовых операций у <- х ф а, t+- ((((у &Ь) + с) | у) ф d) & е будут для любых байтов х = (ху ... £120)256 вычислять флаги t = (fy ... /1/0)256 7, где /о = [з:о= '!'], fi = [зц / /2 = [Х2 < /з = [жз> 'Z'], /4 = [х«> 'а'], /в = [з>5 £ {Ь1, i',..., '9'}], /в = [же < 168], fy = [ж? G {'<’, ' = ', '>', '?’}]. 100. [25] Предположим, что х = (хц.. ,xixo)ie и у = (уц ...yiyo)ie являются двоично- десятичными числами, где 0 < Xj,yj < 10 для каждого j. Поясните, как вычислить их сумму и = (ms ... «i«o)ie и разность v = («is ... «i«o)ie, где 0 < Uj, Vj < 10 и («is ... «i«o)io = ((з-15 • • • £i£o)io + (2/15 - • - У1Уо)ю) mod 101в, («is ... «1«о)1о = ((^15 • • • £i£o)io — (2/15 • • • 2/12/о) 10) mod 10le, без попыток выполнить преобразования между системами счисления. 101. [22] Два октета, х и у, содержат отрезки времени, представленные пятью полями, которые соответственно означают дни (3 байт), часы (1 байт), минуты (1 байт), секунды (1 байт) и миллисекунды (2 байт). Можете ли вы быстро складывать и вычитать эти ве- личины, не преобразовывая их из этого представления в системе счисления со смешанным основанием в бинарную и обратно? 102. [25] Обсудите подпрограммы для сложения и вычитания полиномов по модулю 5, когда в 64-битовое слово упаковано (а) 16 4-битовых коэффициентов или (б) 21 3-битовый коэффициент. 103. [22] Иногда удобно представлять небольшие числа в унарной записи, так что 0, 1, 2, 3, ..., к выглядят в компьютере соответственно как (0)г, (1)г, (11)г, (111)2, ..., 2fc — 1. Тогда max и min легко реализовать как | и &. Предположим, что байтами х = (ху... £0)256 являются такие унарные числа, в то время как байты у = (уу... 2/0)256 представляют собой либо 0, либо 1. Поясните, как “сложить” у с х или “вычесть” у из х, получая « = («7 ... «0)256 и v = («7 ... «0)256, где _ 2nlin(8,18(®j+l)+vj) _ j и Vj = — 1. 104. [22] Используйте битовые операции для проверки корректности даты, представлен- ной полями “год-месяц-день” (у,т, d), как в (22). Вам нужно вычислить значение t, которое равно нулю тогда и только тогда, когда 1900 < у < 2100, 1<т<12и1< d < mox_day(m), где месяц т имеет не более max_day(m) дней. Можно ли сделать это менее чем за 20 операций?
7.1.3 БИТОВЫЕ ТРЮКИ И ТЕХНОЛОГИИ 231 105. [30] Обсудите битовые операции, позволяющие отсортировать заданные значения х = (х? ... то) 256 и у = (у? ... 2/0)256, так что в результате получится хо < уо < • • • < хч < р?. 106. [27] Поясните процедуру Фредмана-Уилларда (95). Покажите также, что простая модификация их метода будет вычислять 2Хх без выполнения левых сдвигов. ► 107. [22] Реализуйте алгоритм В на машине MMIX при d = 4 и сравните свою реализацию с (56). 108. [26] Адаптируйте алгоритм В для случаев, когда п не имеет вида d 2d. 109. [20] Вычислите рх для n-битовых чисел х за O(log log п) широкословных шагов. ► 110. [30] Предположим, что п = 22 и 0 < х < п. Покажите, как вычислить 1 х за О(е) широкословных шагов, используя команды сдвига только на константные величины. (Таким образом, вместе с алгоритмом В мы можем выделить старший бит n-битового числа за O(log log п) таких шагов.) 111. [23] Поясните, как работает распознавание шаблона 01г в (98). 112. [46] Можно ли идентифицировать все появления шаблона 1г0 за 0(1) широкослов- ных шагов? 113. [23] Сильная широкословная цепочка представляет собой широкословную цепочку определенной ширины п, которая является также 2-адической цепочкой для всех п-битовых выборов хо- Например, 2-битовая широкословная цепочка (то, Ti) ci, = то+1 не является сильной, поскольку хо = (П)г делает ti = (00)г. Но (to,ti, ... ,х^) является сильной широкословной цепочкой, которая вычисляет (то + 1) mod 4 для всех 0 < то < 4, если мы установим Т1 = То Ф 1, Т2 = То & 1, Тз = Т2 1 И Т4 = Т1 ф Тз- Для заданной широкословной цепочки (то, Ti,..., тг) шириной п постройте сильную широкословную цепочку (то, х{,..., х'г,) той же ширины, такую, что г' = О(г), а (то, Ti,..., тг) является подпоследовательностью (т[,т1,... ,x'ri). 114. [16] Предположим, что (to,ti, ... ,тг) представляет собой сильную широкословную цепочку шириной п, которая вычисляет значение /(т) = тг по заданному п-битовому числу т = то- Постройте широкословную цепочку (Xo,Xi,... , Хг) шириной mn, которая вычисляет Xr = (/(£1) • • •/(£т))2" для любого заданного mn-битового значения Хо = (6 -- €т)2», где 0 < £1,. . . ,£т < 2”. ► 115. [24] Для заданного 2-адического целого числа т = (... Т2Т1То)г мы хотим вычислить у = (- - - 3/22/13/0)2 = f(x) из т путем обнуления всех блоков из последовательных единиц, которые обладают тем свойством, что (а) непосредственно за блоком не следуют два нуля; или (б) за блоком следует нечетное количество нулей, за которым начинается новый блок из единиц, или (в) блок содержит нечетное количество единиц. Например, если т имеет вид (...01110111001101000110)2, то у представляет собой (а) (...00000111000001000110)2; (б) (...00000111000000000110)2; (в) (...00000000001100000110)2. (Считается, что справа от то имеется бесконечно много нулей. Таким образом, в случае (а) мы имеем у, =Xj A ((xj-iAXj-2) V (Х3-1ЛХ3-2ЛХ3-3) V (xj-iAxj-2AXj-3Axj-4) V • • •) для всех j, где Xk = 0 для к < 0.) Найдите 2-адические цепочки для у в каждом случае. 116. [НМЗО] Предположим, что х = (...Т2Т1То)2 и у = (...2/22/12/0)2 = f(x), где у вы- числяется с помощью 2-адической цепочки без операций сдвига. Пусть L — множество всех бинарных строк, таких, что yj = [т^ ... tito € L], и будем считать, что все константы, использованные в цепочке, являются рациональными 2-адическими числами. Докажите, что L является регулярным языком. Какие языки L соответствуют функциям в упр. 115, п. (а) и (б)?
232 КОМБИНАТОРНЫЙ ПОИСК 7.1.3 117. [ЯЗЩ6] Продолжая выполнение упр. 116, ответьте, существует ли простой способ охарактеризовать регулярные языки L, возникающие в 2-адических цепочках без сдвигов? (Язык L = 0*(10*10*)*, кажется, не соответствует ни одной такой цепочке.) 118. [SO] Согласно лемме А мы не можем вычислить функцию х 1 для всех п-битовых чисел х, используя только сложения, вычитания и битовые булевы операции (без сдвигов и ветвлений). Покажите, однако, что О(п) таких операций будет необходимо и достаточно, если добавить в репертуар оператор “монус” у — z. 119. [20] Вычислите функцию fPy(x) в (102) с помощью четырех широкословных шагов. ► 120. [М25] Имеется 2"2 функций, которые отображают n-битовые числа (х±,... ,хт) в n-битовое число f(xi,..., хт)- Сколько из них можно реализовать с помощью сложений, вычитаний, умножений и несдвиговых битовых булевых операций (по модулю 2”)? ► 121. [M2S] Согласно упр. 3.1-6, функция, отображающая [0.. 2") в себя, является в ко- нечном итоге периодической. а) Докажите, что если f является любой n-битовой широкословной функцией, которая может быть реализована без команд сдвига, то длины периодов таких функций всегда представляют собой степени 2. б) Однако для каждого р между 1 и п существует n-битовая широкословная цепочка длиной 3, имеющая период р. 122. [М22] Завершите доказательство леммы В. 123. [М23] Пусть ад представляет собой константу 1 + 2’ + 22’ -I-1- = (2’2 — 1)/ (2я — 1). Используя (104), покажите, что существует бесконечно много q, таких, что операция умножения на ад, по модулю 2’2 требует fl (log д) шагов в любой п-битовой широкословной цепочке с п > Q? 124. [М38] Завершите доказательство теоремы R' путем определения n-битовой широко- словной цепочки (xo,xi,... ,xj) и установки (Uo, Ui,..., Uj), так, что для 0 < t < f, все входные данные х 6 Ut приводят к, по сути, подобному состоянию Q(x,t) в следующем смысле: (i) текущая команда в Q(x, t) не зависит от ж; (й) если регистр rj имеет известное значение в Q(x,t), он хранит Xj> для некоторого определенного индекса j' < t-, (iii) если ячейка памяти M[z] была изменена, она содержит xz*> для некоторого определенного индекса z" < t. (Значения j' и z" зависят от j, z и t, но не от ж.) Кроме того, |С4| > п/22‘-1, и программа не может гарантировать, что п = рх при t < f. Указание: из леммы В следует, что при малом t требуется рассмотреть ограниченное количество величин сдвигов и адресов памяти. 125. [Л/SS] Докажите теорему Р'. Указание: лемма В остается справедливой, если заме- нить в (103) ‘= 0’ на ‘= аа’, для любых значений аа. 126. [MJ6] Требует ли операция извлечения старшего бита, 2Ai, Q(loglogn) шагов на п- битовой машине с базовой памятью? (См. упр. 110.) 127. [HMJ0] Докажите, что необходимо как минимум fl(log n/log log п) широкословных шагов для вычисления функции четности, (их) mod 2, с использованием теории сложности схем. [Указание: каждая широкословная операция принадлежит классу сложности АСо-] 128. [MJ6] Можно ли вычислить (их) mod 2 за O(log n/log log п) широкословных шагов? 129. [MJ6] Требует ли контрольное сложение fl(logn) широкословных шагов? 130. [MJ6] Существует ли n-битовая константа а, такая, что функция (а a:)mod2n требует fl(log п) n-битовых широкословных шагов? ► 131. [23] Напишите MMIX-программу для алгоритма R, когда граф представлен списками дуг. Узлы вершин имеют как минимум два поля, именуемые LINK и ARCS, а узлы дуг
7.1.3 БИТОВЫЕ ТРЮКИ И ТЕХНОЛОГИИ 233 имеют поля TIP и NEXT, как поясняется в разделе 7. Изначально все поля LINK нулевые, за исключением заданного множества вершин Q, которое представлено циклическим списком. Ваша программа должна изменить этот циклический список так, чтобы он представлял множество R всех достижимых вершин. 132. [М27] Клика в графе представляет собой множество взаимно смежных вершин; кли- ка является максимальной, если она не содержится ни в какой другой. Цель данного упражнения заключается в рассмотрении алгоритма Д. К. М. Муди (J. К. М. Moody) и Д. Холлиса (J. Hollis), которые предложили удобный способ поиска каждой максималь- ной клики в не слишком большом графе с использованием битовых операций. Предположим, что G представляет собой граф с п вершинами V = {0,1,..., п — 1}. Пусть pv = 52{2“ | и — v или и = г}—строка v рефлексивной матрицы смежности G и пусть 6V = 52 {2U | и и} — 2” — 1 — 2". Каждое подмножество U С V представимо в виде n-битового целого числа a(U) = 52пец2и! например, 6V = a(V \ v). Мы также определим битовое пересечение t(U) = & (и е U7 ри-. <5И). 0<и<п Например, если п = 5, мы имеем т({0,2}) = ро & <51 & рг & <5з & <54- а) Докажите, что U представляет собой клику тогда и только тогда, когда т(Г7) = <т(17). б) Покажите, что если t(U) = сг(Т), то Т является кликой. в) Для 1 < к < п рассмотрим 2к битовых пересечений Cfc = | 0<&<fc(u € U1 ри. | U С {0,l,...,fc-l}}, и пусть —максимальный элемент Сь- Докажите, что U является максимальной кликой тогда и только тогда, когда a(U) 6 С„. г) Поясните, как вычислить G* из начиная с С+ = {2" - 1}. 133. [20] Как можно применить алгоритм из упр. 132 к заданному графу G, чтобы найти (а) все максимальные независимые множества вершин? (б) все минимальные вершинные покрытия (множества, соприкасающиеся со всеми ребрами)? 134. [15] В (119), (123) и (124) встречаются девять классов отображений тернарных зна- чений. К какому классу принадлежит представление (128), если а = О, b = *, с = 1? 135. [22] В свою трехзначную логику Лукашевич (Lukasiewicz), помимо (127), включил несколько других операций: ->х (отрицание) обменивает Ос 1, но оставляет неизменным значение *; ох (возможность) определена как ->х => х; ох (необходимость) определена как -o-ix; и х<=>у (эквивалентность) определена как (х=>у)К(у=>х). Поясните, как выполнять эти операции с использованием представления (128). 136. [29] Предложите двухбитовое кодирование для бинарных операций на множестве {в, Ь, с}, которые определены следующими “таблицами умножения”: (а Ь с \ Ь с с I; с с с / (а с Ъ\ с b а I; b а с / (в) а Ь а а а с а b с 137. [21] Покажите, что операция из упр. 136, (в) проще с упакованными векторами на- подобие (131), чем с неупакованными векторами (130). 138. [24] Найдите пример двухбитовой кодировки трех состояний, для которой класс Vo является наилучшим. 139. [25] Если хну представляют собой знаковые биты 0, +1 или —1, то какое двухби- товое кодирование подходит для вычисления их суммы (2122)3 = х + у, где 21 и Z2 также являются знаковыми битами? (Это “полусумматор” для сбалансированных тернарных чисел.)
234 КОМБИНАТОРНЫЙ поиск 7.1.3 140. [27] Разработайте экономичный полный сумматор для сбалансированных тернар- ных чисел: покажите, как вычислять знаковые биты и и и, такие, что Зи+ v = x + y + z при x,y,z € {0,+1,-1}. 141. [30] Числа Улама (Ui, U2,...) = (1,2,3,4,6,8,11,13,16,18,26,...) для п > 3 опре- деляются следующим образом: Un представляет собой наименьшее целое число > Un-i, которое имеет единственное представление Un = Uj + Uk для 0 < j < к < п. Покажите, что с помощью битовых методов можно быстро вычислить миллион чисел Улама. 142. [33] Подкуб, такой как *10*1*01, может быть представлен с помощью кодов звездо- чек 10010100 и кодов битов 01001001, как в (85); но возможны и многие другие методы. Какая схема представления подкубов работает лучше всего в случае поиска простых им- пликант с помощью алгоритма на основе консенсуса из упр. 7.1.1-31? 143. [20] Пусть х является 64-битовым числом, которое представляет шахматную доску размером 8x8, где бит 1 в любой позиции означает наличие в ней коня. Найдите формулу для 64-битового числа f(x), которое имеет 1 в каждой позиции, достижимой за один ход конем из х. Например, белые кони в начале игры соответствуют х = *42; тогда f(x) = *а51800. 144. [16] Какой узел является братом узла j в скошенной пирамиде? (См. (134).) 145. [17] Поясните (137), когда h меньше высоты j. 146. [М20] Докажите соотношение (138), связывающее функции р и Л. 147. [М20] Какие значения ttv, (3v, av и rj получаются в алгоритме V, когда лес пред- ставляет собой а) пустой ориентированный граф с вершинами {щ,..., v„} и без дуг? б) ориентированный путь г>„ —>--->г>г —> щ? 148. [Л121] Может ли при предвычислениях для алгоритма V в S иметься (Зхз—>•* (Зу2—►* (Зх2 —>* (3yi —>* (3xi, если в лесу хз —>Т2 —>a:i —>Л и у2 —>pi —>Л? (Если может, то два различных дерева в S “переплетены”) 149. [23] Разработайте процедуру предвычислений для алгоритма V. 150. [25] Для заданного массива элементов Ai, ..., Ап задача поиска минимума на от- резке заключается в определении fc(i,y), такого, что Акц^ = ппп(А,,..., Aj) для любых заданных индексов г и j с 1 < г < j < п. Докажите, что алгоритм V будет решать эту задачу после выполнения О(п) шагов предвычислений, которые на основе массива А подготовят необходимые таблицы (тг,/3,а,т). Указание: рассмотрите бинарное дерево поиска, построенное из последовательности ключей (р(1),р(2),... ,р(п)), где р представляет собой перестановку {1,2,..., п}, такую, что Ар(!) < Ap(2j < • • • < Ар(п). 151. [22] И обратно, покажите, что любой алгоритм для поиска минимума на отрезке можно использовать для поиска ближайших общих предков, по сути, с той же эффектив- ностью. 152. [М21] Докажите корректность алгоритма V. 153. [М20] Указатели в навигационной стопке наподобие (144) могут быть упакованы в бинарную строку, такую, как 0 1 0 0 10 0 0 0 0 1 0 10 0 0 0 0 0 0 0 0 2 4 6 8 10 12 14 16 18 20 22 24 В какой битовой позиции (слева) заканчивается указатель для узла у? 154. [20] Серые линии на рис. 14 показывают, как каждый пятиугольник составлен из десяти треугольников. Какое разложение гиперболической плоскости определяется одними этими серыми линиями, без черных ребер пятиугольников?
7.1.3 БИТОВЫЕ ТРЮКИ И ТЕХНОЛОГИИ 235 155. [М21] Докажите, что если а представляет собой негафибоначчиев код х, то справед- ливо соотношение (хф) mod 1 = (aO)i/^,. 156. [21] Разработайте алгоритм (а) для преобразования данного целого числа х в его негафибоначчиев код а и (б) для преобразования данного негафибоначчиева кода а в х = N(a). 157. [М21] Поясните рекурсию (148) для негафибоначчиевых предшественника и преем- ника. 158. [М26] Пусть а = ап... ai представляет собой бинарный код F(aO) = anFn+i + • • • + aiPi в стандартной фибоначчиевой системе счисления (146). Разработайте методы, аналогичные (148) и (149), для увеличения и уменьшения таких кодовых слов. 159. [М34 ] В упр. 7 показано, что преобразования между бинарной и негабинарной систе- мами счисления выполняются весьма просто. Рассмотрите преобразования между негафи- боначчиевыми кодовыми словами и обычными фибоначчиевыми кодами из упр. 158. 160. [М29] Докажите, что (150) и (151) дают согласованные метки кодов для пентагрида. 161. [20] Клетки шахматной доски можно раскрасить черным и белым цветами таким образом, чтобы соседние клетки имели разные цвета. Обладает ли этим свойством пента- грид? 162. [НМ37] Поясните, как начертить пентагрид (рис. 14). Какие окружности в нем при- сутствуют? 163. [НМ41] Разработайте способ навигации по треугольникам в мозаике на рис. 18. 164. [23] Исходное определение пастеризации в 1957 году имело вид не (157), а custer (А) = X^(Anw & Хм & Ane & Xw & Хе & Xsw & Xs & ^Cse). Почему определение (157) предпочтительнее? 165. [21] (Р. Э. Кирш (R. A. Kirsch).) Обсудите вычисление клеточного автомата разме- ром 3 х 3, у которого X(t+1) = custer(X(f)) = ~X(t) & (Х^ | Х&} | Х^ | Х^). 166. [М23] Пусть f(M,N) представляет собой максимальное число черных пикселей в растре X размером М х N, для которого X = custer(X). Докажите, что = iMN + О(М + N). 167. [24] (Жизнь.) Если растр X представляет массив ячеек, которые либо мертвы (0), либо живы (1), булева функция /(^NW, --, Т, . . . , S-sb) = [2 < !TNW-|-irN-|-ZENE-|-2:W-|-^ir-|-irE-|-irsW-|-irs-|-a'SE < 4] может привести к изумительным жизненным историям под управлением клеточного авто- мата, как в (158). а) Найдите способ вычисления f с помощью булевой цепочки длиной не более 26 шагов. б) Пусть Х^ обозначает строку j растра X в момент t. Покажите, что Xjf+1^ можно вычислить не более чем за 23 широкословных шага, как функцию трех строк— 168. [23] Чтобы изображение оставалось конечным, мы можем потребовать, чтобы кле- точный автомат размером 3x3 рассматривал растр размером MxN как тор, со “сшитыми” границами: верхней с нижней, а левой с правой. Задача эффективного моделирования действий такого автомата оказывается несколько сложнее: нам необходимо минимизиро- вать обращения к памяти, но каждое новое значение пикселя зависит от старых значений
236 КОМБИНАТОРНЫЙ ПОИСК 7.1.3 пикселей со всех сторон. Кроме того, сдвиг битов между соседними словами обычно неудобен, будучи ограниченным емкостью регистра. Покажите, что эти трудности можно преодолеть, поддерживая массив n-битовых слов Ajk для 0<j<Mn0<k<N' = [N/(n — 2)]. Если j / М и к / 0, слово Ajk должно содержать пиксели строки j и столбцов с (к — 1)(п — 2) по к(п — 2) + 1 включительно; другие слова Амк и А^о обеспечивают вспомогательное буферное пространство. (Обратите внимание, что некоторые биты растра встречаются дважды.) 169. [22] Продолжая выполнение двух предыдущих упражнений, ответьте, что произой- дет с Чеширским котом на рис. 17, (а), если применить к нему правила игры “Жизнь” на торе размером 26 х 31? ► 170. [21] Что получится в результате применения утончающего автомата Гуо-Холла к черному прямоугольнику с М строками и N столбцами? Сколько времени это займет? 171. [24] Найдите булеву цепочку длиной < 25 для вычисления локально утончающей функции g(xNW,xN,xNE,xw,XE,xSw,xs,xSE) из (159), с или без дополнительных ситуаций из (160). 172. [М29] Докажите или опровергните следующее утверждение: если шаблон содержит три черных пикселя, являющихся соседями один другого по ходу короля, то процедура Гуо-Холла, расширенная (160), будет уменьшать его до тех пор, пока ни один из указанных пикселей не сможет быть удален без уничтожения связности. ► 173. [М50] Растровые изображения часто требуют очистки от шумов. Например, слу- чайные черные или белые точки могут существенно повлиять на работу утончающего алгоритма для оптического распознавания символов. Будем говорить, что растр X закрыт, если каждый белый пиксель является частью квадрата размером 2x2, состоящего из белых пикселей, и открыт, если каждый черный - пиксель является частью квадрата размером 2x2, состоящего из черных пикселей. Пусть XD = &{У |УЭХиУзакрыт}; XL = | {У | У С X и Y открыт}. Растр называется чистым, если он равен XDL для некоторого X. Мы можем, например, иметь В общем случае XD “темнее” чем X, в то время как XL “светлее”: XD D X D XL. а) Докажите, что (XDL)DL = XDL. Указание: из X С У вытекает, что XD С YD б) Покажите, что XD может быть вычислен за один шаг клеточным автоматом 3x3. 174. [ЛГ^б] (М. Мински (М. Minsky) и С. Пейперт (S. Papert).) Существует ли трехмерный сжимающий алгоритм, аналогичный (161)? 175. [15] Сколько черных компонентов, связанных ходом ладьи, имеется у Чеширского кота? 176. [М24] Пусть G представляет собой граф, вершины которого являются черными пик- селями заданного растра X, с и — v, когда и и v связаны ходом короля. Пусть G'— соответствующий граф после применения сжимающего преобразования (161). Цель дан- ного упражнения — показать, что количество связных компонентов G' равно количеству компонентов G минус количество изолированных вершин G. Пусть = {(i, j), (г—1, j), (г—1, j+1), (г,у+1)} является пикселем (г, j) вместе с его северным и/или восточным соседями. Пусть S(y) = {г/ € G' | v' 6 М,} для каждой v € G. а) Докажите, что S(v) пусто тогда и только тогда, когда v представляет собой изолиро- ванную вершину в G.
7.1.3 БИТОВЫЕ ТРЮКИ И ТЕХНОЛОГИИ 237 б) Докажите, что и' —* v' в G' (т. е. они находятся в одном и том же компоненте), если и — v в G, и' G S(u) и г/ G S(v). в) Для каждой v' G G' введем S'(у') = {г> € G | v' G Nv}. Всегда ли множество S'(у') пустое? г) Докажите, что и—* v в G, если и' —v' в G', и € S'(и') и v € S'(у'). д) Следовательно, существует взаимно однозначное соответствие между нетривиальны- ми компонентами G и компонентами G'. 177. [М22] Продолжая выполнять упр. 176, докажите аналогичный результат для белых пикселей. 178. [20] Если X представляет собой растр размером М х N, обозначим М х (2N +1)- НИ"ЧиИ растр X f (X | (X 1)) как X*. Покажи- те, что компоненты X*, связанные ходом ко- роля, связаны также и ходом ладьи, и что растр X" имеет то же “дерево окружение- сти” (162), что и X. 179. [34] Разработайте алгоритм, который строит дерево окруженности данного растра размером М х N, сканируя изображение построчно, как говорилось в разделе. (См. (162) и (163).) 180. [М24 ] Вручную оцифруйте гиперболу у2 = х2 + 13 для 0 < у < 7. 181. [НМ20] Поясните, как подразделить обобщенное коническое сечение (168) с раци- ональными коэффициентами на монотонные части, чтобы можно было применить алго- ритм Т. 182. [Af51] Почему корректно работает трехрегистровый метод (алгоритм Т)? 183. [М29] (Г. Роте (G. Rote).) Поясните, почему алгоритм Т может некорректно рабо- тать, если ложно условие (v). 184. [М22] Найдите квадратичную форму Q'(x,y), такую, чтобы при применении алго- ритма Т к (х',у'), (х,у) и Q' он давал ту же самую границу, что и для (х, у), (х’,у’) и Q, но в обратном порядке. Указание: имеется простой ответ. 185. [23] Путем упрощения алгоритма Т разработайте алгоритм, корректно оцифровы- вающий прямую линию от (С, 7?) Д° (€,,’?/)> когда 7), и ту' являются рациональными числами. 186. [НМ22] Для трех заданных комплексных чисел (го, 21,22) рассмотрим кривую, вы- черчиваемую следующим образом: B(t) = (1 - t)2zo + 2(1 — t)tzi + t222 для 0 < t < 1. а) Как себя ведет B(t) при t, близком к 0 или 1? б) Пусть 5(20,21,22) = {B(t) | 0 < t < 1}. Докажите, что все точки £(20,21,22) лежат на треугольнике с вершинами го, 21 и 22 или внутри него. в) Истинно или ложно следующее утверждение: S(w + <zo,w + <2i,w + Cz2) = w + <5(20,21,22)? г) Докажите, что 5(го, 21,22) является частью прямой линии тогда и только тогда, когда zo, 21 и 22 коллинеарны; в противном случае это часть параболы. д) Докажите, что если 0 < 0 < 1, то мы имеем рекуррентное соотношение 5(20,21,22) = 5(20, (1-0)20 + 021, В(69) U 5(В(0), (1-0)21 +0Z2, 22). 187. [М29] Продолжая выполнять упр. 186, покажите, как оцифровать £(20,21,22) с по- мощью трехрегистрового метода (алгоритм Т). Для получения наилучших результатов
238 КОМБИНАТОРНЫЙ ПОИСК 7.1.3 оцифровка S(z2, zi, zo) и S(zo, zi, Z2) должна давать одинаковые границы, но в противопо- ложных направлениях. 188. [25] Растровые изображения часто удобно рассматривать с использованием пикселей с оттенками серого цвета, а не просто черных или белых. Такие “уровни серого” обычно представляют собой 8-битовые значения в диапазоне от 0 (черный) до 255 (белый); отме- тим, что соглашение “черный/белый” традиционно обратное используемому в 1-битовом случае. Растр размером т х п с разрешением 600 dpi (точек на дюйм) прекрасно соот- ветствует изображению (т/8) х (п/8) в оттенках серого с разрешением 75 ppi (пикселей на дюйм), которое получается путем отображения каждого подмассива 8x8 однобитовых пикселей в серый цвет уровня [255(1 — /с/64)1'''1' + |], где 7 = 1.3, а к представляет собой число единиц в подмассиве. Напишите MMIX-программу для преобразования заданного массива т х п BITMAP в со- ответствующее изображение (т/8) х (n/8) GRAYMAP в предположении, что т = 8m' и п = 64п'. 189. [25] Как эффективно (а) транспонировать и (б) повернуть на 90° против часовой стрелки растр размером 64 х 64, используя операции с 64-битовыми числами? 190. [23] Шаблон четности длиной т и шириной п представляет собой матрицу разме- ром т х п, состоящую из нулей и единиц, обладающую тем свойством, что каждый элемент представляет собой сумму “ладейных” соседей, взятую по модулю 2. Например, 11 ООН Л 1 л л 01010 100 но OHIO 10101 00, U 1 ии 1 1 Л 1 ’ 11011, 101 и 11011 11 1 1 U 1 Л 1 Л 1 01010 он 10101 U1U1 001 OHIO являются шаблонами четности размеров 3x2, 4x4, 3x5, 5 х 3 и 5 х 5. а) Покажите, что если бинарные векторы сц, аг, •, ат являются строками шаблона четности, то аг, ..., ат могут быть вычислены из верхней строки ai с помощью битовых операций. Таким образом, с любого заданного вектора может начинаться не более одного шаблона четности размером т х п. б) Истинно или ложно утверждение: сумма (по модулю 2) двух шаблонов четности размером т х п представляет собой шаблон четности. в) Шаблон четности называется идеальным, если он не содержит строки или столбца, полностью состоящего из нулей. Например, три из приведенных выше матриц иде- альны, но примеры размером 3 х 2 и 3 х 5 таковыми не являются. Покажите, что каждый шаблон четности размером т х п содержит идеальный шаблон четности в качестве подматрицы. Кроме того, все такие подматрицы имеют один и тот же размер, т' х п', где т' + 1 является делителем т + 1, а п' + 1—делителем п + 1. г) Имеется идеальный шаблон четности, первая строка которого имеет вид ООН, но не существует такого шаблона, начинающегося с 01010. Есть ли простой способ опре- делить, является ли данный бинарный вектор верхней строкой идеального шаблона четности? д) Докажите, что имеется единственный идеальный шаблон четности, начинающийся п—1 с 1o”~~o. 191. [А150] Завернутый шаблон четности аналогичен шаблону четности из упр. 190, за исключением того, что крайний слева и крайний справа элементы каждой строки также являются соседями. а) Найдите простое соотношение между шаблоном четности шириной п, который начи- нается с а, и завернутым шаблоном четности шириной 2п + 2, который начинается с 0а0ай.
7.1.3 БИТОВЫЕ ТРЮКИ И ТЕХНОЛОГИИ 239 б) Полиномы Фибоначчи Fj (ж) определены рекуррентным соотношением F0(x) = 0, Fi(x) = 1, и Fj+i(x) = xFj(x) + FJ_1(a:) для j > 1. Покажите, что имеется простое соотношение между завернутыми шаблонами четно- сти, которые начинаются с 10... О (N— 1 нулей), и полиномами Фибоначчи по модулю xJV+1. Указание: рассмотрите Fj (x~l +1 +т) и выполняйте арифметические действия как по модулю 2, так и по модулю a:2V+ 1. в) Если а является бинарной строкой ai... а„, введем обозначение fa(ж) = aix + • • • + апхп. Покажите, что Ла ОаЯ)^) = (fa(x) + fa(x~1))Fj(x~1 +1+ж) mod (xN + 1) И mod 2, когда N = 2п + 2, a ctj является строкой j шаблона четности шириной п, начинаю- щегося с а. г) Следовательно, можно вычислить a.j из а всего лишь за O(n2 log j) шагов. Указания: см. упр. 4.6.3-26; воспользуйтесь также тождеством Fm+n(x) = Fm(x)Fn+i(x) + Fm-i(x)Fn(x), которое обобщает формулу 1.2.8-(6). 192- [НМ38] Кратчайший шаблон четности, начинающийся с заданной строки, может оказаться достаточно длинным; например, оказывается, что идеальный шаблон шири- ной 120, первая строка которого—10... 0, имеет длину 36 028 797 018 963 966(1). Цель дан- ного упражнения—рассмотреть, как вычислить следующую интересную функцию: с(д) 1 + niax{ т | существует идеальный шаблон четности длиной т и шириной q— 1}, начальные значения которой (1,3,4,6,5,24,9,12,28) для 1 < q < 9 легко вычисляются вручную. а) Охарактеризуйте c(q) алгебраически, используя полиномы Фибоначчи из упр. 191. б) Поясните, как вычислить с(д), если мы знаем число М, такое, что с(д) делит М, и если мы также знаем простые делители М. в) Докажите, что с(2е) = 3 • 2е-1 при в > 0. Указание: F^y) имеет простой вид по модулю 2. г) Докажите, что, когда q нечетно и не кратно 3, c(q) является делителем 22е — 1, где е — степень 2 по модулю q. Указание: F?e-i(y) имеет простой вид по модулю 2. д) Что будет, когда q будет представлять собой нечетное число, кратное 3? е) Наконец, поясните, как справиться со случаем четного q. . . А 193. [М21] Покажите, что если существует идеальный шаб- , лон четности т х п при нечетных т и п, то существует также у!»сА идеальный шаблон четности (2т + 1) х (2п + 1). (Многократ- ' ное применение этого наблюдения приводит к замысловатым Ъ фракталам; например, шаблон размером 5 х 5 из упр. 190 . Хх'’1' приводит к рис. 20.) 194. [M2J] Найдите все п < 383, для которых существует идеальный шаблон четности размера п х п с восьмикратной симметрией, как в примере на рис. 20. Указание: диагональ- рис. 20. Идеальный ные элементы всех таких шаблонов должны быть нулевыми. 333 х 383-шаблон четности. 195. [ЯМ85] Пусть А представляет собой бинарную матрицу со строками ai, ..., ат длиной п. Поясните, как воспользоваться битовыми операциями для вычисления ранга т — г матрицы А над бинарным полем {0,1} и как найти линейно независимые бинарные векторы 01, 0Г длиной т, такие, что 0jА = 0...0 для 1 < j < г. Указание: см. алгоритм триангуляризации 4.6.2N.
240 КОМБИНАТОРНЫЙ поиск 7.1.3 196. [21] (К. Томпсон (К. Thompson), 1992.) Целые числа из диапазона 0 < х < 231 можно закодировать в виде строки а(х) = ai... оц длиной до 6 байт следующим образом: если х < 27, установить I <— 1 и ai <— х. В противном случае пусть х = (х$.. . :ri:ro)64; установить I ч— [(Ля:)/5], ai Ч— 28 — 28-z + xi-i и оу ч— 27 + xi-j для 2 < j < I. Обратите внимание, что а(х) содержит нулевой байт тогда и только тогда, когда х = 0. а) Что собой представляют коды для *а, *ЗаЗ, *7Ь97 и *ldl41? б) Докажите, что если х < х', то а(т) < а(х') в лексикографическом порядке. в) Предположим, что последовательность значений х^х^.. .хР1 закодирована в виде байтовой строки а(х^)а(х^) ... а(х^), и пусть ctk представляет собой fc-й байт этой строки. Покажите, что легко найти значение х^г\ из которого получено at, путем просмотра при необходимости нескольких соседних байтов. 197. [22] Универсальный набор символов (Universal Character Set — UCS), известный так- же как Unicode, представляет собой стандартное отображение символов на целочисленные кодовые точки х в диапазоне 0 < х < 220 + 216. Кодировка, известная как UTF-16, представляет такие целые числа как один или два двухбайтовых слова (“дуэта”) (3(х) — /31 или Р(х) = flifrz следующим образом: если х < 216, то Р(х) = х-, в противном случае /31 = *d800 + L1//21OJ и /За = *dcOO + (j/mod210), где у = х — 216. Ответьте на вопросы (а)-(в) упр. 196 для данной кодировки. 198. [21] Символы Unicode часто представляются в виде строк байтов с использованием схемы под названием “UTF-8’,’ которая представляет собой кодировку из упр. 196, ограни- ченную целыми числами из диапазона 0 < х < 220 + 216. Обратите внимание, что UTF-8 сохраняет нетронутым стандартный набор символов ASCII (кодовые точки с х < 27) и тем самым существенно отличается от UTF-16. Пусть ai является первым байтом строки UTF-8 а(х). Покажите, что существуют достаточно небольшие целочисленные константы а, Ь и с, такие, что достаточно только четырех битовых операций (а » ((ai » Ъ) & с)) & 3 для определения количества I — 1 байт между от и концом а(х). 199. [23] Можно попытаться закодировать в UTF-8 *а как *с08а или как *е0808а, или даже как *f080808а, поскольку очевидный алгоритм декодирования даст в каждом случае один и тот же результат. Но такой излишне длинный код некорректен, поскольку может привести к “дырам” в системе безопасности. Предположим, что ai и а? представляют собой байты, такие, что di > *80 и *80 < аг < *с0. Найдите не использующий ветвлений способ определить, являются ли сц и а.2 первыми двумя байтами как минимум одной корректной строки UTF-8 а(х). 200. [20] Поясните, что будет находиться в регистре $3 после выполнения следующих трех команд MMIX: MOR $1 ,$0,#94; MXOR $2,$0,#94; SUBU $3,$1,$2. 201. [20] Предположим, что х = (xis ... xixo)ie состоит из шестнадцати шестнадцате- ричных цифр. Какая единственная команда MMIX заменит каждую ненулевую цифру на f, оставляя нули нетронутыми? 202. [20] Какие две команды заменят ненулевые двухбайтовые дуэты октета на *ffff? 203. [22] Предположим, что мы хотим преобразовать тетрабайт х = (х? .. .xixo)ie в ок- табайт у = (у? ... 2/12/0)256, где yj представляет собой ASCII-код шестнадцатеричной циф- ры Xj. Например, если х = *1234abcd, у должно представлять 8-символьную строку '1234abcd'. Какой очевидный выбор констант а, b, с, d и е заставит приведенные далее
7.1.3 БИТОВЫЕ ТРЮКИ И ТЕХНОЛОГИИ 241 команды MMIX выполнить требуемую работу? MORt,x,a; SLU s,t,4; XORt,s,t; AND t,t,b ADD MORs.d.t; ADD ADD y,t,s 204. [22] Каковы поразительные константы p, q, г и m, которые позволяют выполнить идеальное тасование с помощью всего лишь шести команд MMIX? (См. (175)-(178).) 205. [22] Как выполнить операцию, обратную идеальному тасованию, на MMIX, возвра- щаясь от w из (175) назад к г? 206. [20] Идеальное тасование (175) иногда называют внешним (outshuffle), в противопо- ложность внутреннему (inshuffle), которое выполняет отображение z •-> у { х = (?/з1Жз1... yixiyoxo)i\ внешнее тасование сохраняет крайние слева и справа биты z, но внутреннее тасование не имеет фиксированных точек. Можно ли выполнить внутреннее тасование столь же эффективно, как и внешнее? 207. [22] Используйте MOR для выполнения тройного идеального тасования, которое от- ображает (жвз • • • жо)? в (т21Ж42ЖбзЖ20 ••• 2^2^23^44^1^22^43^0)2, а также обратного к нему преобразования. 208. [23] Как на MMIX быстро выполнить транспонирование булевой матрицы размером 8x8? 209. [21 ] Легко ли выполнить операцию вычисления суффиксной четности х® из упр. 36 с помощью MXOR? 210. [22] Головоломка: регистр х содержит число 8/ + fc, где 0 < j, к < 8. Регистры а и b содержат произвольные октеты (07... 0100)266 и (£>7... 6160)256- Найдите последователь- ность четырех команд MMIX, которые поместят aj 8г Ьк в регистр х. 211. [М25] Таблица истинности булевой функции f(xi,... ,хв), по сути, представляет собой 64-битовое число / = (/(0,0,0,0,0,0) .../(1,1,1,1,1,0)/(1,1,1,1,1,1))2. Покажите, что две команды MOR преобразуют / в таблицу истинности наименьшей монотонной булевой функции, /, которая не меньше / в каждой точке. 212. [М32] Предположим, что а = (авз • - 0100)2 представляет полином о(т) —— (оез ... О10о)я: -~ ОбзЖ I • • • | aix I OQ. Рассмотрите применение MXOR для вычисления произведения с(гг) = а(х)Ь(х) по модулю ж64 и модулю 2. 213. [.НМ26] Реализуйте процедуру CRC (183) на машине MMIX. 214. [НМ28] (Р. В. Госпер (R. W. Gosper).) Найдите короткий, без ветвлений, способ обращения на машине MMIX любой заданной матрицы размером 8x8, состоящей из нулей и единиц, по модулю 2, если ее определитель det X нечетен. 215. [21] Как на машине MMIX быстро проверить, делится ли заданное 64-битовое число на 3? 216. [М26] Для заданных n-битовых целых чисел xi,... ,хт > 0, п > Хт, за О(т) шагов вычислите наименьшее у > 0, такое, что у {01Ж1 + • • • + amrrm | 01,..., ат € {0,1}}, если Хх требует единичного времени. 217. [40] Исследуйте упаковку длинных строк текста: представьте 64 последовательных символа как последовательность 8 октабайт шо ... W7, где Шк содержит все 64 их fc-x бита. 218. [ЛГ50] (Ганс Петтер Селаски (Hans Petter Selasky), 2009.) Разработайте для фиксиро- ванного d > 3 алгоритм вычисления а-ху mod 2d для заданных целых а, х и у, где х нечетно, использующий O(d) сложений и битовых операций, а также единственное умножение на у.
242 КОМБИНАТОРНЫЙ поиск 7.1.4 В распространенном использовании термин БДР почти всегда означает “приведенная упорядоченная бинарная диаграмма решений" (в литературе это название употребляется, когда необходимо подчеркнуть ее упорядоченность и сжатость). — Wikipedia, The Free Encyclopedia (7 июля 2007 года) 7.1.4. Бинарные диаграммы решений Обратимся теперь к важному семейству структур данных, которые быстро ста- ли распространенным средством представления и работы с булевыми функциями в компьютерах. Основная идея заключается в схеме “разделяй и властвуй” чем-то похожей на бинарные лучи из раздела 6.3, но с рядом новых особенностей. На рис. 21 показана бинарная диаграмма решений для простой булевой функ- ции от трех переменных, а именно для медианы (хххгхз) из 7.1.1-(43). Ее мож- но понимать следующим образом. Верхний узел называется корнем. Каждый внутренний узел (J), именуемый также узлом ветвления, помечен именем или индексом j = который обозначает переменную; например, корневой узел (Т) на рис. 21 обозначает xi. Узлы ветвления имеют по два наследника, указываемые нисходящими линиями. Один из наследников изображается с помощью пунктирной линии и называется LO (“нижний” “младший”); другой изображается с помощью сплошной линии и называется HI (“верхний’,’ “старший”). Эти узлы ветвления опре- деляют путь в диаграмме для любых значений булевых переменных, если начать с корня и двигаться из узла (J) по пути LO при Xj = 0 и по пути HI при Xj = 1. В конечном итоге этот путь заканчивается в узле стока, который представляет собой либо [Z] (обозначение для FALSE (ЛОЖЬ)), либо рг] (обозначение для TRUE (ИСТИНА)). Легко убедиться, что на рис. 21 этот процесс дает значение FALSE, когда как минимум две из переменных {х1,Х2,хз} равны 0, в противном случае он Рис. 21. Бинарная диаграмма решений (БДР) для функции мажоризации {xixzxz}. Многие авторы для обозначения узлов стока используют [0] и [Т]. Мы при- меняем [Т] и [т], чтобы избежать малейшей возможности спутать их с узлами В компьютере рис. 21 может быть представлен как множество из четырех узлов в произвольных ячейках памяти, где каждый узел имеет три поля: | V | L0 | HI |. Поле V хранит индекс переменной, а каждое из полей L0 и HI указывает на другой узел или сток. (1)
7.1.4 БИНАРНЫЕ ДИАГРАММЫ РЕШЕНИЙ 243 В случае 64-битовых слов можно, например, использовать 8 бит для V и по 28 бит для L0 и HI. Такая структура называется бинарной диаграммой решений или, для краткости, БДР. Небольшие БДР легко начертить на листе бумаги или на экране компьютера, как обычные диаграммы. Но по сути каждая БДР является абстрактным мно- жеством связанных узлов, которое, пожалуй, более правильно было бы называть бинарным ациклическим ориентированным графом решений — бинарным деревом с общими поддеревьями, ациклическим ориентированным графом, в котором из каждого нестокового узла выходят ровно две дуги. Мы будем считать, что каждая БДР подчиняется двум важным ограничениям. Во-первых, она упорядочена: когда дуга LO или HI идет из узла ветвления (Т) в узел ветвления (7), то должно выполняться г < j. Таким образом, в частности, никакая переменная Xj не будет запрошена дважды при вычислении функции. Во- вторых, БДР должна быть приведенной в том смысле, что она не расходует память понапрасну. Это означает, что указатели узла ветвления LO и HI не могут быть рав- ны и что никакие два узла не могут иметь одинаковые тройки значений (V, LO, HI). Каждый узел должен также быть доступным из корня. Например, диаграммы (2) не являются БДР, поскольку первая из них не является упорядоченной, а вторая не является приведенной. Были разработаны многие другие разновидности диаграмм решений, и в ком- пьютерной литературе можно встретить массу разнообразных аббревиатур наподо- бие EVBDD, FBDD, IBDD, OBDD, OFDD, OKFDD, PBDD, ..., ZDD. В этой книге, если явно не оговорено иное, мы всегда будем понимать под БДР упорядоченную и приведенную, как описано выше, бинарную диаграмму решений и использовать простую и незатейливую аббревиатуру “БДР” (“BDD”), так же как используем слово “дерево” для обозначения упорядоченного (плоского) дерева, поскольку такие БДР и такие деревья наиболее распространены на практике. Вспомним из раздела 7.1.1, что каждая булева функция f(xi,..., хп) соответ- ствует таблице истинности, которая представляет собой 2п-битовую бинарную строку, которая начинается со значения функции /(0,...,0) и продолжается зна- чениями функции /(0,... ,0,1), /(0,... ,0,1,0), /(0,... ,0,1,1), ..., /(1,..., 1,1,1). Например, таблица истинности функции медианы (а^а^з) равна 00010111. Обра- тите внимание, что эта таблица совпадает с последовательностью листьев в непри- веденном дереве решений (2) с 0 н-+ [Т] и 1 н-+ рг|. На самом деле это не совпадение, а важное соотношение между таблицами истинности и БДР, которое проще всего понять в терминах класса бинарных строк, именуемых “бусинами” (“beads”). Таблица истинности порядка п представляет собой бинарную строку длиной 2П. Бусиной порядка п является таблица истинности (3 порядка п, которая не является квадратом, т. е. (3 не имеет вид аа для некоторой строки а длиной 2П-1. (Матема- тики бы сказали, что бусина является “примитивной строкой длиной 2П”) Имеется
244 КОМБИНАТОРНЫЙ поиск 7.1.4 две бусины порядка 0, а именно 0 и 1; и две бусины порядка 1, а именно 01 и 10. В общем случае имеется 22"—22" бусин порядка п при п > 0, поскольку существует 22" бинарных строк длиной 2п и 22”- из них являются квадратами. 16 — 4 = 12 бусинами порядка 2 являются 0001, 0010, ООН, 0100, ОНО, 0111,1000,1001,1011,1100,1101,1110; (3) это также таблицы истинности всех функций f(xi, гсг), которые зависят от xi в том смысле, что функция /(0,Х2) отлична от функции /(l,a?2). Каждая таблица истинности т является степенью единственной бусины, имену- емой ее корнем. Если т имеет длину 2П и не является бусиной, то она представляет собой квадрат другой таблицы истинности т'; а по индукции по длине т мы должны иметь т' = рк для некоторого корня [3. Следовательно, т = /32к, и (3 является корнем как т, так и г7. (Конечно же, к является степенью 2.) Таблица истинности т порядка п > 0 всегда имеет вид тотг, где то и ti яв- ляются таблицами истинности порядка п — 1. Ясно, что т представляет функцию f(xi,X2, • - ,жп) тогда и только тогда, когда т0 представляет /(0,Х2,... ,xn), a Ti представляет /(1, Х2, • , жп). Эти функции /(0, Х2, , жп) и /(1, Х2, , жп) назы- ваются подфункциями f; а их таблицы истинности, то и Ti, называются подтабли- цами т. Подтаблицы подтаблиц также рассматриваются как подтаблицы, в том числе таблица рассматривается как подтаблица самой себя. Таким образом, в общем слу- чае таблица истинности порядка п имеет 2к подтаблиц порядка п — к для 0 < к < п, соответствующих 2к возможным установкам первых к переменных (xi,... ,Хк). Многие из этих подтаблиц часто оказываются идентичными; в таких случаях можно представить т в сжатом виде. Бусами булевой функции являются подтаблицы ее таблицы истинности, ко- торые оказываются бусинами. В качестве примера вновь рассмотрим функцию медианы (а^а^тз) с ее таблицей истинности 00010111. Различными подтаблицами этой таблицы истинности являются {00010111,0001,0111,00,01,11,0,1}; и все они, за исключением 00 и 11, представляют собой бусины. Следовательно, бусами (а^ягжз) являются {00010111,0001,0111,01,0,1}. (4) А теперь перейдем к сути дела: узлы БДР булевой функции взаимно однозначно соответствуют ее бусам. Например, можно перерисовать рис. 21, помещая в каждый узел соответствующую бусину: (00010111) .0001) (0111, (5) В общем случае таблицы истинности порядка п + 1 — к функции соответствуют ее подфункциям /(ci,..., Cfc_i, Хк, • • -, хп) указанного порядка; так что бусы функции порядка п + 1 — к соответствуют тем подфункциям, которые зависят от их первой переменной, Хк- Следовательно, каждая такая бусина соответствует узлу ветвле- ния (Т) в БДР. А если (Т) представляет собой узел ветвления, соответствующий
7.1.4 БИНАРНЫЕ ДИАГРАММЫ РЕШЕНИЙ 245 таблице истинности т' = Tqt{, его ветви LO и HI указывают на узлы, которые соответствуют корням Tq и т{. Это соответствие между бусами и узлами доказывает, что каждая булева функ- ция имеет одно и только одно представление в виде БДР. Отдельные узлы такой БДР могут, конечно, располагаться в разных местах в памяти компьютера. Если f является некоторой булевой функцией, обозначим через B(f) количество бусин, которые она имеет. Это значение представляет собой размер ее БДР — общее количество узлов, включая стоки. Например, B(f) — 6 в случае, когда f представ- ляет собой функцию медианы трех элементов, поскольку (5) имеет размер 6. Для определенности давайте разберем другой пример, “более или менее случай- ную” функцию из 7.1.1-(22) и 7.1.2-(6). Ее таблица истинности, 1100100100001111, является бусиной, и то же относится к ее подтаблицам 11001001 и 00001111. Таким образом, мы знаем, что корнем ее БДР будет ветвь (Т) и что оба узла, LO и Ш, под корнем являются (2). Подтаблицы длиной 4 имеют вид {1100,1001,0000,1111}; первые две из них являются бусинами, а вторые две—квадратами. Чтобы перейти к следующему уровню, мы разбиваем бусины пополам и переносим квадратные корни не бусин, идентифицируя дубли; это дает {11,00,10,01}. И вновь у нас имеются две бусины, и последний шаг приводит к искомой БДР: (На этой диаграмме и на прочих диаграммах, приведенных ниже, оказывается удоб- ным повторять стоковые узлы [±~| и [~г|, чтобы избежать слишком длинных соеди- няющих линий. В действительности же в БДР присутствуют только один узел [Т] и один узел [т]; так что размер (6) равен 9, а не 13.) Внимательный читатель в этом месте может задуматься: “Все это хорошо, но что если БДР окажется огромной?” Действительно, можно легко построить функции, БДР которых будут до невозможности огромными; позже мы изучим такие случаи. Но удивительно то, что очень много важных с практической точки зрения булевых функций имеют достаточно небольшие значения B(f). Так что мы должны сосредоточиться на этой хорошей новости и оставить плохие до тех пор, пока не поймем, почему БДР столь популярны. Достоинства БДР. Если /(х) = /(xi,..., хп) представляет собой булеву функцию, БДР которой достаточно мала, мы можем выполнять множество действий быстро и просто. Например, так. • Мы можем вычислить f(x) не более чем за п шагов для любого заданного входного вектора х = xi.. .хп, просто начав с корня и выполняя ветвления, пока не достигнем стока. • Мы можем найти лексикографически наименьшее х, такое, что f(x) = 1, начав с корня и многократно поворачивая на ветвь LO, если только она не ведет непо- средственно в [Т]. Решение имеет Xj = 1, только когда в (j) необходимо свернуть
246 КОМБИНАТОРНЫЙ ПОИСК 7.1.4 на ветвь Ш. Например, эта процедура дает х^х2хз = 011 в случае БДР, показанной на рис. 21, и XiХ2Х3Х4 = 0000 в случае (6). (Метод определяет значение х, соот- ветствующее крайней слева 1 в таблице истинности /.) Для поиска требуется всего лишь п шагов, поскольку каждый узел ветвления соответствует ненулевой бусине; мы всегда можем найти нисходящий путь к рг| без возврата. Конечно, этот метод не работает, если корень сам по себе является|±~|. Но это случается только тогда, когда f тождественно равна нулю. • Мы можем подсчитать количество решений уравнения f(x) = 1, используя приведенный ниже алгоритм С. Этот алгоритм выполняет B(f) операций с п-бито- выми числами; так что время его работы в худшем случае составляет О(пВ(/)). • После работы алгоритма С можно быстро сгенерировать случайные решения уравнения f(x) = 1 таким образом, что каждое решение окажется равновероятным. • Можно также сгенерировать все решения х уравнения f(x) = 1. Алгоритм из упр. 16 делает это за O(n7V) шагов при наличии N решений. • Мы можем решить задачу линейного булева программирования: найти х, такое, что «да?] -I--Ь шпхп максимально, при условии f(xi,..., xn) = 1, (7) для заданных констант («д,... ,шп). Приведенный ниже алгоритм В решает эту задачу за О(п + В(/)) шагов. • Мы можем вычислить производящую функцию ао + a^z -I--+ anzn, где — количество решений f(xi,... ,хп) = 1, таких, что ад +-F хп = j. (См. упр. 25.) • Мы можем вычислить полином надежности F(pi,.. .,Рп), который представ- ляет собой вероятность того, что f(xiхп) = 1, когда каждое Xj независимо устанавливается равным 1 с заданной вероятностью Pj. В упр. 26 это делается за О(В(/)) шагов. Кроме того, мы увидим, что бинарные диаграммы решений могут эффективно объединяться и модифицироваться. Например, несложно образовать бинарные диа- граммы решений для f(xi,..., a:n) Ap(a?i,..., хп) и f(xi,..., , д(ад,..., xn),xj+i, , хп) из бинарных диаграмм решений для f и д. Алгоритмы для решения фундаментальных задач с использованием бинарных диаграмм решений часто описываются наиболее просто, если задать бинарную диа- грамму решений как последовательный список инструкций ветвления Is-i, Is-2, . • •, 71, Iq, где каждое Д имеет вид (v*? Ik'.hk). Например, (6) можно представить как список из s = 9 инструкций, 1в = (1?7:6), 17 = (2? 5:4), 76 = (2? 0:1), 75 = (3?1:0), Ц = (3?3:2), 73 = (4?1:0), I2 = (4?0:1), Л = (5? 1:1), То = (5? 0:0), (8) с t'8 = 1, /в = 7, hs = 6, V7 = 2, I7 = 5, hj = 4, ..., vq = 5, l0 = h0 = 0. В общем случае инструкция ‘(г>?Z: /г)’ означает “если xv = 0, перейти к 7/, в противном случае перейти к Ih”, за исключением особенных последних инструкций 71 и /о- Мы требуем, чтобы LO- и HI-ветви Ik и hk удовлетворяли условиям 1к < к, hk < к, vik > vk и Vhk > vk для s > к > 2; (9)
7.1.4 БИНАРНЫЕ ДИАГРАММЫ РЕШЕНИЙ 247 другими словами, все ветви идут вниз, к переменным с большими индексами. Но стоковые узлы [т] и |~Т~| представлены фиктивными инструкциями Д и Iq, в кото- рых Ik = hk = к, а “индекс переменной” Vk имеет невозможное значение п + 1. Эти инструкции могут быть пронумерованы любым способом, который не на- рушает топологическое упорядочение бинарной диаграммы решений, что требуется в (9). Корневой узел должен соответствовать Is-i, а стоковые узлы должны со- ответствовать 1у и То, но другие номера индексов не являются предписанными так строго. Например, (6) можно выразить и как 7' =(1?7:2), 7j = (2?4:6), 7'=(3?3:5), 7' = (4?0:1), /; = (3?1:0), /' = (4? 1:0), % = (2? 0:1) 7[ =(5?1:1) 7'= (5? 0:0) (Ю) и еще 46 другими изоморфными способами. В компьютере бинарная диаграмма решений не обязана располагаться в последовательных ячейках памяти; мы можем легко обходить узлы любого ациклического ориентированного графа в топологиче- ском порядке, когда узлы связаны так, как в (1). Но мы будем представлять, что они расположены последовательно, как в (8), чтобы проще было понимать работу различных алгоритмов. Стоит отметить одну формальность: если f(x) = 1 для всех х, так что бинарная диаграмма решений представляет собой просто стоковый узел [т], в таком последо- вательном представлении мы полагаем s = 2. В противном случае s равно размеру бинарной диаграммы решений. Тогда корень всегда представлен как 7s~i. Алгоритм С (Подсчет решений). Для заданной бинарной диаграммы решений булевой функции f(x) = f(xi,... ,хп), представленной в виде последовательности Is-i, . • •, 70, как описано выше, этот алгоритм определяет |/|, количество бинарных векторов х = xi... хп, таких, что f(x) = 1. Он также вычисляет таблицу со, Q, ..., cs-i, где cjt представляет собой количество единиц в бусине, соответствующей Ik- С1. [Цикл по Л.] Установить со «— 0, Q «— 1 и выполнить шаг С2 для fc = 2, 3, ..., s — 1. Затем вернуть ответ 2t,’-1~1cs_i. С2. [Вычисление с*;.] Установить I <— Ik, h <— hk и Ск «— 2v‘~Vk~1ci + 2Vh~Vk~1Ch- I Например, для представления (8) этот алгоритм вычисляет с2 «— 1, сз <— 1, С4 <— 2, с5 <— 2, се <— 4, су <— 4, с8 «— 8; общее количество решений /(34,3:2,3:3,3:4) = 1 равно 8. Целые числа Ск в алгоритме С удовлетворяют условию 0 < ck < 2n+1~Vk для 2 < к < s, (П) и эта верхняя граница—наилучшая возможная. Следовательно, при больших п может потребоваться арифметика с многократной точностью. Если дополнитель- ная память для высокой точности проблематична, можно использовать вместо нее модулярную арифметику, выполняя алгоритм несколько раз и вычисляя Ск mod р для разных простых чисел р с однократной точностью; затем окончательный ответ можно вывести с помощью алгоритма, основанного на китайской теореме об остат- ках (4.3.2-(24)). С другой стороны, на практике обычно достаточно арифметики с плавающей точкой.
248 КОМБИНАТОРНЫЙ поиск 7.1.4 Давайте взглянем на несколько примеров, более интересных, чем (6). Бинарные диаграммы решений Независимые множества Ядра представляют функции от шести переменных, которые соответствуют подмноже- ствам вершин в циклическом графе Св- В этом случае такой вектор, как xi.. .хв = 100110, обозначает подмножество {1,4,5}; вектор 000000 обозначает пустое подмно- жество; и т. д. Слева показана БДР, для которой мы имеем f(x) = 1, когда х неза- висимы в Св; справа показана БДР для максимальных независимых подмножеств, именуемых также ядрами Св (см. упр. 12). В общем случае независимые подмно- жества Сп соответствуют расположениям нулей и единиц в окружности длиной п, в которых нет двух рядом стоящих единиц; ядра соответствуют таким размещениям, в которых, кроме того, нет трех последовательных нулей. Алгоритм С “украшает” БДР значениями сь снизу вверх, где сь представляет собой число способов перехода от узла к к [т] путем выбора значений xi.. .хп, где I представляет собой метку узла к. При применении этого алгоритма к БДР в (12) мы получим (13) следовательно, Св имеет 18 независимых множеств и 5 ядер. Эти величины делают генерацию равномерно распределенных случайных реше- ний очень простой задачей. Например, чтобы получить случайный вектор незави- симого множества xi... хв, воспользуемся знанием о том, что 13 решений находятся в левой части БДР и имеют xi = 0, а прочие 5 имеют х± = 1. Так что мы устанавливаем rri «— 0 с вероятностью 13/18 и движемся по ветви LO; в противном случае мы устанавливаем rri «— 1 и движемся по ветви HI. В последнем случае xi = 1 приводит к Х2 «— 0, но затем ггз может быть любым.
7.1.4 БИНАРНЫЕ ДИАГРАММЫ РЕШЕНИЙ 249 Предположим, что мы выбрали установки яд <— 1, х? <— 0, хз <— 0 и «— 0; эта ситуация возникает с вероятностью • | • | • | = Затем имеется ветвь от (4) к (б), так что мы можем подбросить монетку и установить гг5 совершенно случайным образом. В общем случае ветвь от (Т) в (j) означает, что j — г — 1 промежуточных битов xt+i... Xj~i должны независимо устанавливаться равными 0 или 1 с равной вероятностью. Аналогично ветвь от (7) к |~т| должна назначать случайные значения для ад+i... хп. Конечно, имеются и более простые способы случайного выбора из 18 решений комбинаторной задачи. Более того, правая бинарная диаграмма решений в (13) представляет собой весьма сложный способ представления пяти ядер С§: ведь мож- но просто перечислить их, 001001, 010010, 010101,100100,101010! Но суть заключа- ется в том, что один и тот же метод дает как независимые множества, так и ядра Сп при гораздо больших п. Например, цикл Сщо длиной 100 имеет 1630 580 875 002 яд- ра, но при этом описывающая их БДР имеет только 855 узлов. Так что совершенно случайное ядро из этой неимоверной коллекции получается всего за 100 шагов. Булево программирование и связанные задачи. Восходящий алгоритм, ана- логичный алгоритму С, способен также найти наилучшие взвешенные решения (7) булева уравнения f(x) = 1. Основная идея состоит в том, что легко вывести оптимальное решение для любой бусины /, если известны оптимальные решения для бусин LO и Ш, лежащих непосредственно под рассматриваемой. Алгоритм В (Решения наибольшего веса). Пусть 7s-i, • • •, Хо представляет собой последовательность инструкций ветвления, которая представляет БДР для булевой функции /, как в алгоритме С, и пусть (ид,... ,шп) представляет собой произволь- ную последовательность целочисленных весов. Данный алгоритм находит бинарный вектор х = ... хп, такой, что значение идад Ч-1-ыпхп максимально среди всех х, обладающих тем свойством, что f(x) = 1. Мы считаем, что s > 1; в противном слу- чае функция f(x) тождественно равна 0. Вспомогательные целочисленные векторы ...ms-i и Wi... Wn+1 используются для вычислений, как и вспомогательный битовый вектор <2 ... ts-i- Bl. [Инициализация.] Установить Wn+i <— 0 и Wj «— Wj+i + тах(ид,0) для п > 3 > 1- В2. [Цикл по fc.] Установить тгц <— 0 и выполнить шаг ВЗ для 2 < к < s. Затем выполнить шаг В4. ВЗ. [Обработка Д.] Установить v <— ujt, I <— Ik, h <— hk, ♦- 0. Если I 0, установить тпк ★— ггц + Wv+i — WVI. Затем, если h 0, выполнить следующее: вычислить m <— тд + Wv+i — WVh + wv; и если I = 0 или m > тпк, установить тпк <— m и tk <— 1. В4. [Вычисление а:.] Установить j «— 0, к *— s — 1 и выполнять следующие операции до тех пор, пока не будет достигнуто равенство j = п: пока j < Vk — 1, устанавливать j «— j + 1 и Xj <— [wj >0]; если к > 1, установить j «— j + 1 и Xj *-tk,nk <— (tk =0? Ik- hk). I Простой случай этого алгоритма разработан в упр. 18. На шаге ВЗ выполняются технические действия, которые могут выглядеть пугающе, но их конечный эффект
250 КОМБИНАТОРНЫЙ ПОИСК 7.1.4 заключается просто в вычислении тпк «— max(mi + И4+1 - WVl, тк + И4+1 - WVh + wv) (14) и в записи в tk, что лучше— I или h. В действительности обычно и vi, и vk равны v + 1; тогда вычисления просто устанавливают тпк <— max.(rni,mh + wv), соответ- ствующие случаям xv = 0 и xv = 1. Все это связано с нашим желанием избежать выборки значения mg, равного —оо, и с тем, что vi или vk может превысить v + 1. С этим алгоритмом мы можем, например, быстро найти оптимальное множество вершин ядра в n-цикле Сп, используя веса, основанные на последовательности “Тью-Морзе” Wj = (-1)"'; (15) здесь vj обозначает контрольное суммирование 7.1.3-(59). Другими словами, Wj равно —1 или +1, в зависимости от того, имеет ли j, выраженное в виде бинарного числа, нечетную или четную четность. Максимум w^xi + • • • + wnxn достигается, когда в ядре вершины с четной четностью 3, 5, 6, 9, 10, 12, 15, ... наиболее сильно превышают по численности вершины с нечетной четностью 1, 2, 4, 7, 8, 11, 13, .... Оказывается, что в этом смысле оптимальным ядром при п = 100 оказывается {1,3,6,9,12,15,18,20,23,25,27,30,33,36,39,41,43,46,48, 51,54,57,60,63,66,68,71,73,75,78,80,83,86,89,92,95,97,99}. (16) В это множество из 38 вершин, удовлетворяющих условиям ядра, необходимо вклю- чить только пять вершин с нечетной четностью, а именно {1,25,41,73,97}, следова- тельно, max(wiTi -|--1- Wioo^ioo) = 28. Благодаря алгоритму В нескольких тысяч компьютерных инструкций достаточно для выбора (16) из более чем триллиона возможных ядер, поскольку БДР для всех этих ядер малы. Математически исходные задачи, связанные с комбинаторными объектами на- подобие ядер циклов, могут также эффективно решаться с помощью более тради- ционных методов, основанных на рекуррентности и индукции. Но красота методов бинарных диаграмм решений в том, что они применимы и к реальным задачам, не имеющим такой элегантной структуры. Например, рассмотрим граф из 49 штатов из 7—(17) и 7-(61). Булева функция, представляющая все максимальные неза- висимые множества этого графа (все ядра), имеет БДР размером 780, которая начинается следующим образом. (17) Алгоритм В быстро находит следующие ядра наибольшего и наименьшего весов, в случае, когда каждая вершина, представляющая штат, имеет вес, равный сумме
7.1.4 БИНАРНЫЕ ДИАГРАММЫ РЕШЕНИЙ 251 букв в его почтовом коде (wca = 3+1, шцс = 4 + 3, ..., = 23 + 25). Наименьший вес —155 Наибольший вес—492 (18) Этот граф имеет 266137 ядер; но в случае применения алгоритма В не нужно генери- ровать их все. Фактически правый пример в (18) можно получить с помощью мень- шей БДР размером 428, которая характеризует независимые множества, посколь- ку все веса в этом случае положительны. (В этих случаях ядро максимального веса представляет собой то же, что и независимое множество максималь- ного веса.) У данного графа имеется 211954906 независимых мно- жеств, намного больше, чем ядер; но мы можем найти незави- симое множество максимального веса быстрее, чем ядро макси- мального веса, поскольку в этом случае БДР меньше по размеру. Рис. 22. Сеть Рз □ Рз и БДР для ее связанных подграфов. Совершенно иной вид БДР, связанных с графами, приведен Е.И 58 (58 (58 68 58 58 ш 24 47) (47 47 (47 35 35 36 36 (36 36 (36 Ш (57)(57)(57 58 Ш (25) (25} (25) "Щ '(25 рис. 22. Показанная здесь БДР основана на решетке Р3ОР3 размером 3x3; она характеризует множества ребер, связывающие вместе все вершины решетки. Таким образом, это функция /(я^г.а^з,... ,х»д) от двенадцати ребер 1 — 2, 1 —3, ..., 8 —- 9, а не от девяти вершин {1,.. - ,9}. В упр. 55 описан один из способов ее построения. Алгоритм С после применения к этой БДР говорит о том, что из 212 — 4096 остовных подграфов Рз оРз ровно 431 является связным. Простое расширение алгоритма С (см. упр. 25) улучшает полученный результат и вычисляет производящую функцию для этих решений, а именно G(z) = ^zvxf(x) = 192z8 + 164z9 + 62z10 + 12г11 + z12. X (19) Таким образом, Рз □ Рз имеет 192 остовных дерева, плюс 164 остовных подграфа, являющихся связными и имеющими девять ребер, и т. д. В упр. 7.2.1.6-106, (а) дана формула количества остовных деревьев в Рт □ Рп для произвольных тип; но полная производящая функция G(z) содержит значительно больше информации и, вероятно, не имеет простой формулы, если только значение min(m, п) не является достаточно малым.
252 КОМБИНАТОРНЫЙ ПОИСК 7.1.4 Предположим, что каждое ребро и — v присутствует с вероятностью puv, независимо от всех других ребер Р3 оР3. Какова вероятность того, что получен- ный в результате подграф связный? Ответ дает полином надежности, который имеет также множество других названий в связи с тем, что появляется во многих других приложениях. В общем случае, как описывается в упр. 7.1.1-12, каждая булева функция f(xi,... ,хп) имеет единственное представление в виде полинома F(xi,.. .,хп), обладающего теми свойствами, что i) F(xi,.. .,хп) = f(xi,... ,хп), когда каждое Xj представляет собой 0 или 1; ii) F(xi,... ,хп) является мультилинейным: его степень Xj имеет значение < 1 для всех j. Этот полином F имеет целочисленные коэффициенты и удовлетворяет базисному рекуррентному соотношению F(xi,...,xn) = (1-Х1)Р0(х2,...,Хп) + Х1Р1(х2,...,Хп), (20) где Fq и Fi —целочисленные мультилинейные представления f(0,X2, - ,хп) и /(1, Х2,.. - ,хп). В действительности (20)—это ни что иное, как “закон разложения” Джорджа Буля (George Boole). Из рекуррентного соотношения (20) следуют две важные вещи. Во-первых, F представляет собой в точности ни что иное, как упоминавшийся ранее полином надежности F(pi,... ,рп), поскольку последний очевидным образом удовлетворяет тому же рекуррентному соотношению. Во-вторых, F легко вычисляется из бинарной диаграммы решений для функции f работой в восходящем направлении и примене- нием (20) для вычисления надежности каждой бусины. (См. упр. 26.) Функция связности для решетки Pg □ Pg размером 8x8, конечно, гораздо более сложная, чем таковая для решетки Р3оР3; она представляет собой булеву функцию от 112 переменных, а ее бинарная диаграмма решений имеет 43 790 узлов (сравните со всего лишь 37 узлами на рис. 22). Тем не менее вычисления с помощью этой бинарной диаграммы решений достаточно практичны, и за секунду-две можно вычислить G(z) = 126231322912498539682594816г63 4-1006611140035411062600761344г64 4- • • • 4- 6212г110 4- 112г111 4- z112, а также вероятность F(p) связности и ее производ- ную F'(p), когда каждое ребро присутствует с вероят- ностью р (см. упр. 29): (21) *Широкое обобщение. Алгоритмы В и С и алгоритмы для восходящего сканиро- вания БДР в действительности представляют собой частные случаи гораздо более общей схемы, которая может применяться многими дополнительными способами.
7.1.4 БИНАРНЫЕ ДИАГРАММЫ РЕШЕНИЙ 253 Рассмотрим абстрактную алгебру с двумя ассоциативными бинарными оператора- ми о и •, удовлетворяющими законам дистрибутивности а • (J3 07) = (а • (3) о (а • 7) и (/? о 7) • а = (/?• а) о (7 • а). (22) Каждая булева функция f(xi,..., хп) соответствует полностью детализированной таблице истинности, включающей символы о, •, ± и Т наряду с Xj и Xj для 1 < j < п способом, который проще всего понять при рассмотрении небольшого примера: при п = 2 и обычной таблице истинности f, имеющей вид 0010, полностью детализированная таблица истинности представляет собой (ГЕ1 • х2 • -L) О (яч • х2 • -L) О (хг • £2 • т) о (а;1 • х2 • ±). (23) Смысл этого выражения зависит от значений, вкладываемых в символы о, •, ±, Т и в литералы Xj и Xj; но что бы ни означало это выражение, его можно вычислить непосредственно из бинарной диаграммы решений для /. Например, вернемся к рис. 21 — БДР для (х\х2хз). Развитием узлов |~JL~| и [т] являются а± = 1 и ат = Т соответственно. Тогда развитием (З) является аз = (ёз • Qj.) о (я:3 • ат); развитием узлов, помеченных (2), являются а^ = (х2 • (хз оа?3) • Qj.) ° (х2 • аз) слева и а£ = (х2 • аз) ° (х2 • (ёз ° ) • ат) справа; а развитием узла (Т) является Qi = (xi • а^) о (xi • а^). (Общая процедура рассматривается в упр. 31.) Раскрытие этих формул с использованием законов дистрибутивности (22) приводит к полному виду с 2П = 8 “членами”: Qi = (®i*®2*®3*-L) о (х!»х2»хз»А.) о (х!»х2»хз»Л-) о (ях*а:2*яз*Т) о (xi»x2»X3»l.) о (ж1*я:2*а:з*Т) о (х1*я:2*а:з*Т) о (а7*:Г2*Яз*Т). (24) Алгоритм С представляет собой частный случай, когда ‘о’ является сложением, является умножением, ‘±’ представляет собой 0, ‘Т’ представляет собой 1, и как lXj', так и ‘х^ являются единицами. Алгоритм В получается, когда ‘о’ представляет собой оператор максимума, а *•’ — сложение; законы дистрибутивности а + тах(/3,7) - тах(а+/7, а+7) и max(j0,7) + а = тах(/?+а, 7+а) (25) легко проверяемы. Мы интерпретируем ‘±’ как —00, ‘Т’ как 0, (Xj’ как 0, а ‘х/ как Wj. Тогда, например, (24) превращается в шах(—оо, —оо, — oo,w2 + W3, — 00, wi + W3, wi + w2,w^ + w2 + W3); и в целом полное преобразование при такой интерпретации дает выражение max{wia7 -I-----1- wnxn | f(xv,...,xn) = 1}. Дружественные функции. Известны многие семейства функций, имеющие БДР довольно скромного размера. Если f представляет собой, например, симметричную функцию от п переменных, то легко видеть, что B(f) = О(п2). Действительно, при
254 КОМБИНАТОРНЫЙ ПОИСК 7.1.4 п = 5 можно начать с треугольного шаблона и устанавливать листья как |±~| или [т~| в зависимости от соответствующих значе- ний f, когда значение их = хг + • • • + х$ равно 0, 1, 2, 3, 4 или 5. Затем можно удалить избыточные или эквивалентные узлы, всегда получая БДР размером не более (п+х) + 2. Предположим, что мы берем произвольную функцию f(xi,... ,хп) и делаем равными две соседние переменные: • • • j ~ • • • j 1» % к, 3'k+2> • • •, *^n)* (27) В упр. 40 доказывается, что В(д) < B(f). Повторяя этот процесс сжатия, мы обнаружим, что функция наподобие f(xi,Xi,хз,хз,хз,хв) имеет малую БДР, если мало B(f). В частности, пороговая функция [2ti -I- Зхз Ч- Xq > t] должна иметь малую БДР для любого значения t, поскольку это сжатая версия симметричной функции f(xi,..., хе) = [^1 +--!- Те > t]- Эти рассуждения показывают, что любая пороговая функция с неотрицательными целыми весами, f(xi,X2,... ,хп) = [wiTi 4- w2x2 Ч--I- wnxn > t], (28) может быть получена сжатием симметричной функции от wi -I- w2 Ч----Ч- wn пере- менных, так что размер ее БДР составляет O(wi Ч- w2 Ч--------------1- wn)2. Пороговые функции часто оказываются простыми даже при экспоненциальном росте весов. Например, пусть t = (tit2 .. .tn)2, и рассмотрим ft(xi,x2,... ,хп) = [2n-1a:i Ч- 2п~2х2 Ч--1- хп > £]. (29) Эта функция истинна тогда и только тогда, когда бинарная строка х^х2.. .хп лек- сикографически больше или равна tit2 ... tn, а ее БДР всегда имеет ровно п Ч- 2 узлов при tn = 1. (См. упр. 170.) Другой вид функции с малой БДР —это 2т-канальный мультиплексор из урав- нения 7.1.2-(31), функция от п = т Ч- 2™ переменных: • - • j xrm "Em+lj • 5 ^п) — ...2:^)2 • (30) Ее БДР начинается с 2fc-1 узлов ветвления (к) для 1 < к < т. Но ниже этого полного бинарного дерева имеется только по одному (к) для каждого Xk из ос- новного блока переменных, такого, что т < к < п. Следовательно, В(Мт) = 1 Ч- 2 Ч- • • - Ч- 2"1-1 Ч- 2™ Ч- 2 = 2го+1 Ч-1 < 2п. Линейная сетевая модель вычислений, показанная на рис. 23, помогает прояс- нить ситуации, когда БДР особенно эффективна. Рассмотрим размещение вычис-
7.1.4 БИНАРНЫЕ ДИАГРАММЫ РЕШЕНИЙ 255 лительных модулей Mi, М2, -, Мп, при котором булева переменная Хк является входом для модуля Мк', между соседними модулями имеются также провода, про- водящие булевы сигналы, с а к проводами, идущими от модуля Мк к Mk+i, и Ьк проводами от модуля Mk+i к Мк для 1 < к < п. Отдельный провод, выходящий из модуля Мп, содержит вывод функции, f(xi,... ,хп). Мы определяем ао = Ьо — Ьп = 0 и ап = 1, так что модуль Мк имеет ровно Ск = 1 + ak-i + Ьк входных портов и ровно dk = ак + Ьк-i выходных портов для каждого к. Он вычисляет dk булевых ФУНКЦИЙ ОТ СВОИХ Ск входов. Индивидуальные функции, вычисляемые каждым модулем, могут быть про- извольно сложными, но они должны быть вполне определенными в том смысле, что их объединенные значения полностью определяются значениями х: каждый выбор (xi,... ,хп) должен вести к единственному способу установки сигналов во всех проводах, согласующемуся со всеми данными функциями. Теорема М. Если f может быть вычислена такой сетью, то B(f) < 2“fc2bfc. Доказательство. Мы покажем, что БДР для f имеет не более 2“fc~12 k~1 узлов ветвления (fc), для 1 < к < п. Это очевидно, если bk-i = 0, поскольку для любых заданных значений от xi до Xk-i возможны не более 2°*-* подфункций. Так что мы покажем, что любая сеть, которая имеет ak-i прямых и bk-i обратных проводов между Mk-i и Мк, может быть заменена эквивалентной сетью, которая имеет afc_i2bfc-1 прямых проводов и ни одного обратного. Для удобства рассмотрим случай fc = 4 на рис. 23 с аз = 4 и Ьз — 2; мы хотим заменить эти 6 проводов на 16, которые идут только вперед. Предположим, что Алиса отвечает за модуль М3, а Боб—за модуль М4. Алиса отправляет 4-битовый сигнал а Бобу, в то время как он отправляет 2-битовый сигнал b Алисе. Точнее гово- ря, для любого фиксированного значения (xiхп) Алиса вычисляет некоторую функцию А, а Боб вычисляет функцию В, где А(Ь) = а и В (а) = Ь. (31) Функция Алисы А зависит от (т1,Т2,тз), так что Боб не знает ее; функция Боба В точно так же неизвестна Алисе, поскольку она зависит от (х^,... ,хп). Но эти неизвестные функции обладают тем ключевым свойством, что для каждого выбора (xi,..., хп) имеется ровно одно решение (а, Ь) уравнений (31). Рис. 23. Обобщенная сеть булевых модулей, для которой справедлива теорема М. Так что Алиса изменяет поведение модуля М3: она посылает Бобу четыре 4-битовых значения, А(00), А(01), А(10) и А(11), тем самым раскрывая свою функ-
256 КОМБИНАТОРНЫЙ ПОИСК 7.1.4 цию А. А Боб изменяет поведение М4: вместо того чтобы отослать ответ, он смотрит на полученные сообщения вместе со своими прочими входными данными (а именно с битами хц и 64, полученными от М&) и находит уникальные а и Ь, решающие (31). Его новый модуль использует это значение а для вычисления битов 04, которые он отправляет модулю М5. | Теорема М гласит, что размер бинарной диаграммы решений будет достаточно невелик, если мы можем построить такую сеть с небольшими значениями и Ьк- Действительно, B(f) будет равно О(п), если а и b ограничены, хотя входящая в О(п) константа может быть огромной. Давайте рассмотрим функцию “три единицы подряд” f(xi, . . . , Хп) = Х1Х2Х3 V Х2Х3Х4 V • • • V Хп-2Хп-1Хп V Xn-iXnXi V XnXiX2, (32) которая истинна тогда и только тогда, когда циклическое “ожерелье” состоящее из битов ц, ..., хп, содержит три последовательные единицы. Один из способов ее реализации с помощью булевых модулей заключается в передаче Мк трех входных значений (uk,Vk,Wk) от Mk-i и двух входных значений (ук, Zk) от Mk+i, где Uk = Хк—1, Vk = Хк—2%к—1, ^к = Хп—\ХпХ\ V • • • V Хк—зХк—2Хк—lj , . Ук ~ Хп, Zk — Хп—\ХТ1. Здесь индексы рассматриваются по модулю п, и при k = 1 или k > п — 1 слева и справа вносятся соответствующие изменения. Тогда Мк вычисляет функции Ufc+i = хк, ик+1 = икхк, Ык+i =ыкУ икхк, Ук-i = Ук, z;k-i = zk (34) почти для всех значений fc; детали вы найдете в упр. 45. При таком построении мы имеем < 3 и Ьк < 2 для всех fc; следовательно, согласно теореме М, B(f) < 212п = 4096п. Действительность существенно приятнее: B(f) на самом деле < 9п (см. упр. 46). Совместно используемые БДР. Зачастую нам приходится работать одновре- менно с несколькими функциями, и такие связанные функции часто имеют общие подфункции. В таких случаях мы можем работать с “базой БДР” (BDD base) для {fi(xi,... ,хп), , fm(xi,... ,хп)}, представляющей собой ориентированный ацик- лический граф, который содержит по одному узлу для каждой бусины, встреча- ющейся в таблицах истинности любой из функций. База БДР также имеет т “корневых указателей” Fj, по одному для каждой функции /j; БДР для fj при этом представляет собой множество всех узлов, достижимых из узла Fj. Обратите внимание, что сам узел Fj достижим из узла Ft тогда и только тогда, когда fj представляет собой подфункцию fa. Рассмотрим, например, задачу вычисления п + 1 бит суммы двух п-битовых чисел, (fn+lfnfn-l • • • /1)2 = (Х1Х3 . . . Х2п-1)2 + (Х2Х4 . . . Х2п)2- (35)
7.1.4 БИНАРНЫЕ ДИАГРАММЫ РЕШЕНИЙ 257 База БДР для этих п + 1 бит при п = 4 имеет следующий вид. XiXsXsXT “Г Т-2 Т4 TgTg /5 Л/зЛ Л (36) Способ нумерации х в (35) в данном случае важен (см. упр. 51). В общем случае имеется ровно B(/i,..., /п+1) = 9n — 5 узлов при п > 1. Узел, находящийся непосредственно слева от Fj, для 1 < j <п, представляет подфункцию для переноса Cj из у-й битовой позиции справа; узел, находящийся непосредственно справа от Fj, представляет дополнение этого переноса, Cj\ а узел Fn+i представляет последний перенос сп. Операции над БДР. Мы рассмотрели множество вещей, которые можно сделать с помощью уже имеющейся БДР. Но пока что остается открытым вопрос, как же нам сперва получить эту БДР в компьютере? Один из способов заключается в том, чтобы начать с упорядоченной бинарной диаграммы решений, такой, как (26) или изображенная в правой части примера (2), и выполнить ее приведение, с тем чтобы она превратилась в настоящую БДР. Приве- денный далее алгоритм, основанный на идеях Д. Зилинга (D. Sieling) и И. Вегенера (I. Wegener) [Information Processing Letters 48 (1993), 139-144], показывает, как про- извольная TV-узловая бинарная диаграмма решений с правильно упорядоченными ветвями может быть приведена к БДР за O{N+ri) шагов при наличии п переменных. Конечно, нам требуется некоторая дополнительная память для того, чтобы при выполнении приведения решить, эквивалентны ли два узла. Только лишь трех описанных в (1) полей (V,LO,HI) в каждом узле недостаточно для маневра. К счастью, достаточно только одного дополнительного поля с размером указателя, которое мы назовем AUX, а также двух дополнительных битов состояния. Для удобства будем считать, что биты состояния неявно присутствуют в знаках полей L0 и AUX, так что алгоритм должен работать только с четырьмя полями: (V, LO, HI, AUX). Резервирование знака означает, что 28-битовое поле L0 будет принимать не более 227 узлов (около 134 миллионов) вместо 228. (На компьютерах типа MMIX можно предпочесть иной путь — считать, что все адреса узлов четны, и добавлять к полю 1, а не выполнять дополнение, как делается здесь.) Алгоритм R {Приведение к БДР). Этот алгоритм трансформирует заданную бинарную диаграмму решений, которая является упорядоченной, но необязательно приведенной, в корректную БДР путем удаления излишних узлов и перенаправле- ния соответствующим образом всех указателей. Каждый узел считается имеющим четыре поля (V, L0,HI,AUX), как описано выше, a ROOT указывает на верхний узел диаграммы. Начальные значения полей AUX несущественны, но должны быть неот- рицательными; по завершении процесса они вновь будут неотрицательными. Все 9 Зак. 3331
258 КОМБИНАТОРНЫЙ поиск 7.1.4 удаленные узлы вносятся в стек, адресуемый указателем AVAIL, связываясь вместе с помощью полей HI их узлов. (Поля L0 этих узлов будут отрицательными; их дополнения указывают на эквивалентные узлы, которые не были удалены.) Мы считаем, что поля V узлов ветвления пробегают от V(ROOT) до vmax в возрас- тающем порядке сверху вниз в данном ациклическом ориентированном графе. Узлы стока [JL~| и [т] рассматриваются как узлы 0 и 1 соответственно, с неотрицательными полями L0 и HI. Они никогда не удаляются; фактически они остаются нетронутыми, если не считать их полей AUX. Вспомогательный массив указателей HEAD[i>] для V(ROOT) < v < i?max используется для создания временных списков всех узлов, имеющих данное значение V. R1. [Инициализация.] Завершить работу алгоритма немедленно, если ROOT < 1. В противном случае установить AUX(O) «— AUX(l) «— AUX (ROOT) «--1 и для V(ROOT) < v < Umax установить HEAD[v] «--1. (Мы используем тот факт, что —1 — ~0 представляет собой битовое дополнение 0.) Затем установить з <— ROOT и выполнять следующие операции, пока з 0. Установить р «— s, з «— ~AUX(p), AUX(p) «— HEAD[V(p)J, HEAD[V(p)J «— ~p. Если AUX(L0(p)) > 0, установить AUX(L0(p)) «— ~s и s «— L0(p). Если AUX(HI(p)) > 0, установить AUX(HI(p)) «— ~s и s «— HI(p). (По сути, мы выполняем поиск в глубину в ациклическом ориентированном графе, временно помечая все узлы, достижимые из ROOT, путем установки отрицательных значений их полей AUX.) R2. [Цикл по v.] Установить AUX(O) <— AUX(l) «— 0 и v <— vmax. R3. [Карманная сортировка.] (В этот момент все остающиеся узлы, поле V которых превышает v, были корректно приведены, а их поля AUX неотрицательны.) Установить р <— ~HEAD Ы, з «— 0, и выполнять следующие шаги, пока р 0. Установить р'«— ~AUX (р). Установить q «— HI (р); если L0 (д) < 0, установить HI (р) «— ~L0 (<?). Установить q «— L0 (р); если LO(q) < 0, установить L0(p) «— -~LO(g) и q <— L0(p). Если q = HI (p), установить L0 (p) «— ~g, HI(p) «- AVAIL, AUX(p) <- 0, AVAIL «—p; в противном случае при AUX(g) > 0 установить AUX(p) «— s, s «— и AUX(g) «— ~p; в противном случае установить AUX(p) <-AUX(~AUX(g)) и AUX(~AUX(q)) <-p. Затем установить p«— p'. R4. [Очистка.] (Узлы c L0 = х HI были связаны вместе с помощью их полей AUX, начиная с ~AUX(a:).) Установить г «— ~s, з «— 0, и выполнять следующие действия, пока г > 0. Установить q <— ~AUX(r) и AUX(r) «— 0. Если з = 0, установить з «— q\ в противном случае установить AUX (р) «— q. Установить р «— q; затем, пока AUX(p) > 0, устанавливать р «— AUX(p). Установить г <— ~AUX(p).
7.1.4 БИНАРНЫЕ ДИАГРАММЫ РЕШЕНИЙ 259 R5. [Цикл по р.] Установить р «— з. Перейти к шагу R9, если р = 0. В противном случае установить q «— р. R6. [Проверка кармана.] Установить s <— L0 (р). (В этот момент р = q.) R7. [Удаление дублей.] Установить г «— HI(g). Если AUX(r) > 0, установить AUX(r) <— в противном случае установить LO(g) «— AUX (г), HI(<?) <— AVAIL и AVAIL <— q. Затем установить q «— AUX(g). Если q 0 и LO(q) = з, повторить шаг R7. R8. [Еще одна очистка.] Если L0(p) > 0, установить AUX(HI(p)) «— 0. Затем уста- новить р «— AUX(p) и повторять шаг R8, пока не будет выполнено условие р = q. R9. [Выполнено?] Если р 0, вернуться к шагу R6. В противном случае при v > V (ROOT) установить v «— v — 1 и вернуться к шагу R3. В противном случае при LO(ROOT) < 0 установить ROOT «— ~L0(R00T). | Запутанные манипуляции связями в алгоритме R проще запрограммировать, чем объяснить, но они очень поучительны и на самом деле не так уж и сложны. Насто- ятельно советуем читателю проработать пример из упр. 53. Алгоритм R можно также использовать для вычисления БДР для любого огра- ничения заданной функции, а именно для любой функции, получающейся “про- шивкой” константных значений вместо одной или нескольких переменных. Идея заключается в выполнении небольшой дополнительной работы между шагами R1 и R2, устанавливающей HI (р) «— L0 (р), если переменная V (р) рассматривается как фиксированный 0, или L0 (р) «— HI (р), если V (р) рассматривается как фиксирован- ная 1. Нам также нужно удалить все узлы, которые становятся недоступными после выполнения такого ограничения. Детали этого процесса освещаются в упр. 57. Синтез БДР. Теперь мы готовы приступить к наиболее важному алгоритму, связанному с БДР, который берет БДР для одной функции, f, и комбинирует ее с БДР для другой функции, д, получая в результате БДР для других функций, таких как /Л<? или f®g. Операции синтеза такого рода являются основным способом построения БДР для сложных функций, и тот факт, что это может быть сделано эффективно, и является основной причиной популярности структур данных БДР. Мы рассмотрим несколько подходов к проблеме синтеза, начиная с простого метода, а затем ускоряя его различными способами. Базовым понятием, лежащим в основе синтеза, является операция произведения структур БДР, которую мы назовем слиянием (melding). Предположим, что а = (v, I, h) и а' = (v', I', h') представляют собой узлы БДР, каждый из которых содержит индекс переменной вместе с указателями LO и HI. “Смесь” а и а' (записывается как а о а') определяется следующим образом (в предположении, что а и а' не являются одновременно узлами стока): а о а' = < (v, lol', hoh'), (v, I о a', ho а'), (v', а о I', a oh'), если v = v'; если v < v’; если v > v'. (37) Например, на рис. 24 показано, как выполняется слияние двух небольших, но типич- ных БДР. БДР слева, с узлами ветвления (а,(3,-у,8), представляет f(xi,Х2,хз, %л) — (xi \/а:2)Л(я:з VX4); БДР в средине, с узлами ветвления (a>,ip,x,<p,v,r), представляет
260 КОМБИНАТОРНЫЙ ПОИСК 7.1.4 g(xi, Х2, хз, Х4) — (xi фхг) V (хз ФХ4). Узлы 6 и т — это, по сути, один и тот же узел, так что мы бы имели 6 — т, если бы fug были частью одной базы БДР; но слияние может быть применено и к БДР, не имеющим общих узлов. Справа на рис. 24 оош представляет собой корень диаграммы, которая имеет одиннадцать узлов ветвления и, по сути, представляет упорядоченную пару (f,g)- Рис. 24. Две БДР могут быть слиты с помощью операции о (37). Упорядоченная пара двух булевых функций может быть визуализирована путем размещения таблицы истинности одной из них над таблицей истинности другой. При такой интерпретации аош означает упорядоченную пару а /?<>Х означает , и т. д. Слитые БДР на рис. 24 соответствуют диаграмме (38) которая аналогична (5) с тем отличием, что каждый узел обозначает упорядоченную пару функций, а не единственную функцию. Бусины и подтаблицы определяются на упорядоченных парах так же, как и ранее. Но теперь у нас имеется четыре возможных стока вместо двух, а именно ±о±, 1оТ, То1 и ТоТ, (39) соответствующие упорядоченным парам q , °, J и *. Для вычисления конъюнкции f /\ д мы выполняем операцию И с таблицами истинности функций f и д. Эта операция соответствует замене °, J и J на 0, 0, 0 и 1 соответственно; так что мы получаем БДР для f Л д из fog путем замены соответствующих стоковых узлов (39) на |±~|, |±~|, [Т] и [т] с последующим приведением результата. Аналогично БДР для f ®д получается, если мы заменим стоки (39) на [Т], [т], [т] и Щ. (В этом частном случае f®g оказывается симметричной функцией Siti(xi,X2,X3,Xi), показанной на рис.9 в разделе 7.1.2.) Полученная слиянием диаграмма fog содержит всю информацию, необходимую для
7.1.4 БИНАРНЫЕ ДИАГРАММЫ РЕШЕНИЙ 261 вычисления любой булевой комбинации f и g; и БДР для каждой такой комбинации имеет не более B(f од) узлов. Ясно, что B(f о д) < B(f)B(g), поскольку каждый узел fog соответствует узлу f и узлу д. Следовательно, слияние небольших БДР не может дать очень большую диаграмму. Фактически обычно процедура слияния дает результат, ко- торый значительно меньше этой верхней границы для наихудшего случая с чем-то наподобие B(f) + B(g) узлов вместо B(f)B(g). В упр. 60 обсуждаются более строгие границы, которые проливают свет на то, почему слияние часто оказывается неболь- шим. Но в упр. 59, (б) и 63 имеются интересные примеры, в которых наблюдается квадратичный рост. Слияние предлагает простой алгоритм для синтеза: мы можем образовать мас- сив из B(f)B(g) узлов с узлом аоа' в строке а и столбце а' для каждого а в БДР для f и каждого а' в БДР для д. Затем мы можем преобразовать четыре стоковых узла (39) в [Т] или [т] и применить алгоритм R к корневому узлу fog. Вуаля! Мы получили БДР для f /\д или f ф д, или f V д, или для чего нам хочется. Ясно, что время работы этого алгоритма имеет порядок B(f)B(g). Мы можем снизить его до порядка B(fog), поскольку не требуется заполнять все записи матри- цы ооо'; играют роль только те узлы, которые достижимы из fog, и мы можем при необходимости генерировать их “на лету” Но даже с таким усовершенствованием простой алгоритм неудовлетворителен из-за размещения B(f)B(g) узлов в памяти. При работе с БДР время дешево, а память дорога: попытки решать большие задачи чаще проваливаются из-за нехватки памяти, а не времени. Вот почему алгоритм R выполнял свои “махинации” используя только одну вспомогательную связь на узел. Приведенный далее алгоритм решает задачу синтеза с требованием порядка B(f ° д) рабочего пространства; фактически он требует только около 16 байт на элемент БДР для fog. Этот алгоритм разработан для использования в каче- стве основного процессора “калькулятора булевых функций” который представляет функции в виде БДР в сжатом виде в последовательном стеке. Этот стек поддер- живается на нижнем конце большого массива, именуемого пулом. Каждая БДР в стеке является последовательностью узлов, каждый из которых имеет три поля: (V, LO, HI). Остаток пула доступен для хранения временных результатов, именуемых шаблонами (templates), каждый из которых, в свою очередь, имеет четыре поля: (L, Н, LEFT, RIGHT). Узел обычно занимает один октет памяти, в то время как шаблон занимает два октета. Целью алгоритма S является изучение двух верхних булевых функций в стеке, f и д, и замена их булевой комбинацией fog, где о представляет собой один из 16 возможных бинарных операторов. Этот оператор идентифицируется своей 4-бито- вой таблицей истинности ор. Например, алгоритм S образует БДР для f ®д, когда ор представляет собой (0110)2 = 6, и для f Л д, когда op = 1. Когда алгоритм начинает работу, операнд f находится в позициях [/о. .до) пула, а операнд д — в позициях [go .. NT0P). Все более высокие позиции [NT0P.. POOLSIZE) доступны для хранения шаблонов, в которых нуждается алгоритм. Эти шаблоны располагаются в позициях [ТВОТ.. POOLSIZE) в верхнем конце пула; маркеры границ NT0P и ТВОТ динамически изменяются в процессе работы алгоритма. Получающаяся в результате бинарная диаграмма решений для f о д в конечном итоге будет поме- щена в позиции [/о.. NT0P), занимая пространство, ранее занятое fag. Мы счита-
262 КОМБИНАТОРНЫЙ ПОИСК 7.1.4 ем, что шаблон занимает пространство двух узлов. Таким образом, присваивания “t <— ТВОТ — 2, ТВОТ <— t” выделяют память для нового шаблона, на который указы- вает t; присваивания “р <— NTOP, NT0P <— р + 1” распределяют новый узел р. Для простоты описания алгоритм S не проверяет выполнимости условия NTOP < ТВОТ в процессе работы; но, конечно, такие проверки существенны на практике. В упр. 69 эта оплошность исправлена. Входные функции /ид передаются алгоритму S как последовательности ин- струкций (7S_!,..., Д, 70) и (7',_27q), как в алгоритмах В и С выше. Длины этих последовательностей равны s = B+(f) и s' = В+(д), где B+(f) = B(f) + [/ тождественна 1] (40) представляет собой число узлов бинарной диаграммы решений при вынужденном наличии стока [Т]. Например, две бинарные диаграммы решений слева на рис. 24 могут быть определены с помощью инструкций к = (1? 4: 3), Ц = (3? 2: 1), Ц = (2? 0: 3), к = (4? 0: 1); Ц = (1? 5: 6), к = (3? 2: 3), к = (2? 1: 4), J' = (4? 1: 0), (41) к = (2? 4: 1), к = (4? 0: 1); как обычно, к, 10, и 1'0 являются стоками. Эти инструкции упакованы в узлы, так что если к = (vjt? к- hk), то, когда алгоритм S начинает работу, мы имеем V(/o + ^) = Vk, L0(/o + ^) = к и HI(/o + fc) = hk для 2 < к < s. Аналогичные соглашения применимы к инструкциям 1'к, которые определяют д. Кроме того, V(/o) = V(/o + 1) = V(so) = V(5o + 1) = + 1, (42) где мы считаем, что fug зависят только от переменных xv для 1 < v < vmax. Подобно простому, но требующему большого количества памяти алгоритму, описанному ранее, алгоритм S работает в два этапа: сначала он строит бинарную диаграмму решений для fog, конструируя шаблоны так, чтобы каждое важное слияние а о а' было представлено в виде шаблона t, для которого LEFT(t) = a, RIGHT(t) = o', L(t) = ЬО(аоа'), H(t) = Ш(аоа'). (43) (Поля L и Н указывают на шаблоны, а не на узлы.) Затем на втором этапе выпол- няется приведение этих шаблонов с использованием процедуры, подобной алгорит- му R; она заменяет шаблон t из (43) на LEFT(t) = ~K(t), RIGHT(t) = r(t), ,Д4>. L (t) = -r(LO(a о a')), H(t) = r(HI(a о a')), где r(t)—уникальный шаблон, к которому был приведен t, и где к(<) является “клоном” t, если т(£) = t. Каждый приведенный шаблон t соответствует узлу инструкции в БДР fog, a K,(t) представляет собой индекс этого узла по отношению к позиции /о в стеке. (Установка LEFT(t) равным ~/c(t) вместо K(t) представляет собой хитрый трюк, который заставляет шаги S7-S10 выполняться быстрее.) Для стоков в нижней части пула постоянно зарезервированы специальные перекрыва- ющиеся шаблоны, так что мы всегда имеем LEFT(O) = ~0, RIGHT(O) = 0, LEFT(l) = ~1, RIGHT(l) = 1 в соответствии с соглашениями (42) и (44). (45)
7.1.4 БИНАРНЫЕ ДИАГРАММЫ РЕШЕНИЙ 263 Нам не требуется делать шаблон для а о а', когда значение а о а' является очевидной константой. Например, если мы вычисляем f Л д, то знаем, что а о а' в конечном счете будет приведено к [Т], если а = 0 или а' = 0. Такие упроще- ния выявляются подпрограммой под названием find-level (f,g), которая возвращает положительное целое число j, когда корень fog начинается с ветви (J), если только f о д не является очевидной константой; в последнем случае find-level (f, д) возвращает значение —(fog), которое равно 0 или —1. Процедура носит немного формальный характер, но проста и использует глобальную таблицу истинности ор. Подпрограмма find-level (f, д) использует локальную переменную t: Если f < 1 и д < 1, вернуть — ((ор (3 — 2/ — д)) & 1), равное — (f о д). Если f < 1 и д > 1, установить t «— (/? ор & 3: ор 2); вернуть 0, если t = 0, и —1, если t = 3. (46) Если f > 1 и д < 1, установить t <— (д’? op: op 1) & 5; вернуть 0, если t = 0, и —1, если t = 5. Иначе вернуть min(V(/o + + р))- Основная трудность, возникающая перед нами при генерации шаблона для по- томка а о а' согласно (37), заключается в том, чтобы решить, существует ли уже такой шаблон, и, если существует, то осуществить с ним связь. Наилучший спо- соб решения таких задач обычно состоит в применении хеш-таблицы; но тогда нам придется также решать, где поместить эту таблицу и сколько дополнительной памяти выделить для нее. Такие альтернативы, как бинарные деревья поиска, гораздо легче адаптировать для наших целей, но они добавляют ко времени работы нежелательный множитель log B(fog). Проблема синтеза в действительности может быть решена с использованием O(B(fog)) памяти за такое (O(B(fog))) время путем применения метода карманной сортировки, аналогичного алгоритму R (см. упр. 72); но такое решение оказывается более сложным, и его труднее реализовать. К счастью, имеется красивый способ разрешения этой дилеммы, почти не тре- бующий дополнительной памяти и с умеренно сложным кодом, если генерировать за один раз шаблоны на одном уровне. Перед генерацией шаблонов для уровня I мы будем знать количество Ni шаблонов, запрашиваемых на этом уровне. Так что мы можем временно выделить память на вершине текущей свободной области для 2Ь шаблонов, где b = [IgATj], и поместить туда новые шаблоны, выполняя хеширование в той же области. Идея заключается в использовании цепочек с от- дельными списками, как на рис. 38 в разделе 6.4; поля Н и L наших шаблонов и потенциальных шаблонов играют роли головных узлов и связей на этом рисунке, в то время как ключи находятся в (LEFT, RIGHT). Вот более детальное описание используемой логики. Подпрограмма make-template (f,g), использует локальную переменную t. Установить h <— HBASE + 2(((314159257/ + 271828171р) mod 2d) ~S> (d — b)), где d представляет собой удобную верхнюю границу размера указателя (обычно d = 32). Затем установить t <— Пока t / Л и либо LEFT(t) /, либо RIGHT(t) д, устанавливать t <— L(t). Если t = Л, установить t <— ТВОТ — 2, ТВОТ «- t, LEFT(t) «- f, RIGHT(t) «- g, L(O «- H(/i) и H(/i) «- t. Наконец вернуть значение t. (47)
264 КОМБИНАТОРНЫЙ ПОИСК 7.1.4 Вызывающая программа в шагах S4 и S5 обеспечивает выполнение условия NTOP < HBASE < ТВОТ. Эта стратегия “синтеза в ширину” по одному уровню за раз, имеет дополнитель- ное преимущество, заключающееся в поддержке “локальности ссылок”: обращения к памяти в этом случае имеют тенденцию сосредоточиваться в близких позициях, которые недавно были просмотрены, так что количество промахов кэша и ошибок отсутствия страницы оказывается существенно сниженным. Кроме того, узлы БДР, помещаемые в конечном итоге в стек, также будут упорядочены, так что все ветв- ления для одной и той же переменной будут располагаться последовательно. Алгоритм S (Синтез БДР в ширину). Этот алгоритм вычисляет БДР для fog, как описано выше, с использованием подпрограмм (46) и (47). Используются вспо- могательные массивы LSTART[Z], LCOUNT [Z], LLISTEZ] и HLISTEZ] для 0 < I < vmax. S1. [Инициализация.] Установить f <— go — 1 — fa, д <— NTOP — 1 — до и I <— findllevel(f,g). См. упр. 66, если I < 0. В противном случае установить LSTARTLZ - 1] <- POOLSIZE и LLIST[fc] «- HLIST[fc] «- Л, LCOUNT[fc] «- 0 для I < к < «max- Установить ТВОТ «- POOLSIZE-2, LEFT(ТВОТ) «- f и RIGHT(ТВОТ) «- д. S2. [Сканирование шаблонов уровня Z.] Выполнить установки LSTARTEZ] <— ТВОТ и t <— LSTARTEZ — 1]. Пока t > ТВОТ, составлять запросы для будущих уровней, выполняя следующие действия. Установить t <— t—2, /♦— LEFT(t), д *— RIGHT (t), vf♦— V(/o+/)> vg «— V(go+g), ll <— find-level((vf < vgl L0(/o + D- f), (vf > vgl L0(go + g)' g)), Ih <— findJevel((vf < vgl HI(/0 + /): /), (vf > vgl HI(g0 + g)- g))- Если ll < 0, установить L(t) <---1Г, в противном случае установить L(O «- LLISTCU], LLIST[ZZ] «- t, LCOUNT[ZZ] «- LCOUNT[ZZ] + 1. Если Ih < 0, установить H(t) <---lh\ в противном случае установить Н(О «- HLIST[Z/i], HLISTC/Л] <- t, LCOUNT [Z/i] <- LCOUNT [Z/i] + 1. S3. [Выполнен ли первый этап?] Перейти к шагу S6, если I = vmax. В противном случае установить I <— I + 1 и вернуться к шагу S2, если LCOUNT [Z] = 0. S4. [Инициализация для хеширования.] Установить b <— [lgLCOUNT[ZJ], HBASE <— ТВОТ - 2b+1 и H(HBASE + 2fc) <— Л для 0 < к < 2Ь. S5. [Создание шаблонов для уровня Z.] Установить t <— LLISTEZ]. Пока t Л, устанавливать з <— L(Z), f <— LEFT(t), д <— RIGHT(Z), vf «— V(/q + /), vg <— V(go + g), L(Z) *— make-template ((vf < vgl LO(.f0+f): f), (vf > vgl LO(go+g): g)), t <— s. (Половина сделана.) Затем установить t «— HLIST[Z]. Пока t Л, устанавливать s <— H(Z), f «— LEFT(t), g «— RIGHT(Z), vf <— V(/o + /), vg «— V(go + g), H(O «- make_template((vf < vgl HI(/0+/): /), (vf > vgl HI(g0+p): g)), t«— s. (Теперь сделана вторая половина.) Вернуться к шагу S2. S6. [Подготовка ко второму этапу.] (В этот момент можно безопасно стереть узлы f и д, поскольку мы уже построили все шаблоны (43). Теперь мы будем приводить их к виду (44). Заметим, что V(/o) = V(/o + 1) = vmax +1.) Установить NTOP «— fo + 2.
7.1.4 БИНАРНЫЕ ДИАГРАММЫ РЕШЕНИЙ 265 S7. [Карманная сортировка.] Установить t <— LSTART [Z — 1]. Пока t > LSTART [Z], выполнять следующие действия. Установить t«- t - 2, L(0 <- RIGHT(L(O) и H(0 <- RIGHT(H(Z)). Если L(t) — H(t), установить RIGHT(t) <— L(Z). (Это ветвление избыточно.) В противном случае установить RIGHT (t) <--1, LEFT(Z) <— LEFT(L(Z)), LEFT(L(О) «- t. S8. [Восстановление адресов клонов.] Если t = LSTART [Z — 1], установить t «— LSTART [Z] — 2 и перейти к шагу S9. В противном случае, если LEFT (Z) < О, установить LEFT(L(O) «— LEFT(Z). Установить t«— t + 2 и повторить шаг S8. S9. [Уровень завершен?] Установить t <— t + 2. Если t = LSTART [Z— 1], перейти к шагу S12. В противном случае, если RIGHT (t) > 0, повторить шаг S9. S10. [Проверка кармана.] (Допустим, что L(iT) = Щ2) = L(ta), где ti > t2 > t2 = t и на уровне Z нет иных шаблонов с данным значением L. Тогда в этот момент мы имеем LEFT(Z3) = t2, LEFT(Z2) = ti, LEFT(Zi) < 0 и RIGHT(Zi) = RIGHT(Z2) = RIGHT (Z3) = —1.) Установить s «— t. Пока s > 0, выполнять следующие дей- ствия. Установить г «— H(s), RIGHT(s) <— LEFT(r); если LEFT(r) < 0, установить LEFT (г) <— s и установить s <— LEFT(s). Наконец вновь установить з <— t. S11. [Клонирование.] Если s < 0, вернуться к шагу S9. В противном случае при RIGHT (s) > 0 установить s «— LEFT(s). В противном случае установить г <— LEFT(s), LEFT(H(s)) «- RIGHT(s), RIGHT(s) «- s, g «- NTOP, NTOP «- g + 1, LEFT(s) ---------(<Z-/o), LO(g) ----LEFT(L(s)), HI(g) -----LEFT(H(s)), V(g) <- Z, s <— г. Повторить шаг Sil. S12. [Цикл no Z.] Установить I <— I — 1. Вернуться к шагу S7, если LSTART [Z] < POOLSIZE. В противном случае при RIGHT (POOLSIZE — 2) = 0 установить NTOP «— NTOP — 1 (поскольку fog тождественно равно 0). | Как обычно, наилучший способ понять алгоритм наподобие данного—это выпол- нить его трассировку на небольшом примере. В упр. 67 рассматриваются действия алгоритма S при вычислении f/\g для бинарных диаграмм решений, заданных в (41). Алгоритм S может использоваться, например, для построения бинарных диа- грамм решений для таких интересных функций, как “функция монотонной функ- ции” д„ (xi,..., а;2п), которая истинна тогда и только тогда, когда xi... х2п является таблицей истинности монотонной функции: дп(гг1,...,гг2«) = Д [xi+i <xj+i]. (48) 0<iCj<2n Начиная с до(зт) = 1 эта функция удовлетворяет рекурсивному соотношению Дп(*^1 > • • •, *^2”) — дп_1(а;1,а;3,... Л р,п-1(х2,Х4,... ,х2п) Л G2„(xlt... ,х2„), (49) где G2n(a;i,... ,х2>») = [xi <а;2] Л [а;3 < Х4] Л - • Л [x2„_i <х2„]. Так что ее бинарную диаграмму решений легко получить с помощью калькулятора БДР наподобие алго- ритма S: БДР для //п-!(Х1,Хз,. . .,Х2п-1) И /Лп-1(х2,Х4, . . .,Х2п) являются простыми вариантами БДР для //n-i(xi,x2,... ,x2n-i), a G2n имеет исключительно простую БДР (рис. 25).
266 КОМБИНАТОРНЫЙ ПОИСК 7.1.4 Рис. 25. Ц2(Х1,Хз,Хб,Х7) Лр,2(Х2,Х4,Хб,Х»)/\Gs(Xl, . . . ,Х») = Дз(Х1, ... ,Х8); вычис- ление с помощью алгоритма S. Повторение этого процесса шесть раз даст БДР для Дб, которая имеет 103924 узла. Имеется в точности 7 828 354 монотонные булевы функции от шести перемен- ных (см. упр. 5.3.4-31); эта БДР отлично характеризует их все, и для ее вычисления с помощью алгоритма S необходимо около 4.8 миллиона обращений к памяти. Кроме того, 6.7 миллиарда обращений к памяти будет достаточно для вычисления БДР для Д7, которая имеет 155 207320 узлов и характеризует 2414682040998 монотон- ных функций. На этом нам следует остановиться, поскольку В(дв) имеет колоссальное значе- ние 69258301585604 (см. упр. 77). Синтез в базе БДР. Другой подход применйм, когда мы работаем со многими функциями одновременно, вместо вычисления одной БДР “на лету? Функции базы БДР часто совместно используют общие подфункции, как в (36). Алгоритм S разработан так, чтобы, взяв две непересекающиеся БДР, эффективно их объеди- нить, с последующим уничтожением оригиналов; но во многих случаях желательно образовывать комбинации функций, БДР которых перекрываются. Кроме того, после образования новой функции, скажем, f Л д, мы можем захотеть сохранить f и д для будущего использования; более того, новая функция может также совместно использовать узлы вместе с функцией f или д или с обеими. Поэтому давайте рассмотрим разработку инструментария общего назначения, предназначенного для работы с коллекцией булевых функций. Для этой цели БДР в особенности привлекательны, поскольку большинство необходимых операций име- ют простую рекурсивную формулировку. Мы знаем, что каждая неконстантная булева функция может быть записана как /(xi,х2,...,хп) = (xv? fi: fh), (50) где v = fv индексирует первую переменную, от которой зависит /, и где мы имеем fi = fh = f xv+1,...,xn). (51)
7.1.4 БИНАРНЫЕ ДИАГРАММЫ РЕШЕНИЙ 267 Это правило соответствует узлу ветвления (v) на вершине БДР для /; а остаток БДР получается рекурсивным использованием (50) и (51), пока мы не достигнем константных функций, соответствующих [Т] или рг|. Подобная рекурсия опре- деляет любые комбинации функций fog- если f и д не являются одновременно константами, то мы имеем /(xi,...,xn) = (xvl fr. fh) и p(xi,...,xn) = (xv? gf. gh), (52) где v = min(/v,<7v) и где fi, fh, gi, дь задаются формулами (51). Тогда тут же получается fog = (xv? fl о gf. fh O gh). (53) Эта важная формула представляет собой другой способ записи правила (37), опре- деляющего слияние. Предостережение. Следует правильно понимать записанное выше: подфунк- ции fi и fh в (50) могут не быть теми же, что и fi и fh в (52). Предположим, например, что f = х^ V а?з, в то время как д = х^ ф х3. Тогда уравнение (50) выполняется с fv — 2 и f = (хг? ff- fh), где fi = хз и fh = 1. Мы также имеем gv = 1 и д = (xi? Хз: хз). Но в (52) мы используем одну и ту же переменную ветвления xv для обеих функций, и в нашем примере и = min(fv,gv) = 1; так что уравнения (52) выполняются с f = (xi? ff. fh) и fi = fh = x% V X3. Каждый узел базы БДР представляет булеву функцию. Кроме того, база БДР является приведенной; следовательно, две из ее функций или подфункций равны тогда и только тогда, когда они соответствуют в точности одному и тому же узлу. (Это удобное свойство уникальности не выполнялось в алгоритме S.) Формулы (51)-(53) непосредственно предлагают рекурсивный способ вычисле- ния f /\д: {Если f /\д имеет очевидное значение, вернуть его. В противном случае представить f и д, как в (52); . . вычислить п <- H(fi,gi) и rh <- VL(fh, gh)-, вернуть функцию (xv? rf. rh)- (Рекурсии всегда должны завершаться при достижении достаточно простых ситуа- ций. “Очевидные” значения в первой строке соответствуют терминальным случаям / Л 1 = /, 1Лр = р, / Л0 = 0Лр = 0и/Лр = / при f = д.) Когда fag являются функциями из нашего примера выше, (54) сводит f /\д к вычислению (X2VX3) Л хз и (X2VX3) Л хз- Затем (X2VX3) Л хз сводится к х3 Л хз и 1 Л хз; и т. д. Однако при попытке непосредственной реализации (54) “как есть” мы столкнем- ся с проблемами, поскольку каждый нетерминальный шаг приводит к появлению двух экземпляров рекурсии. Вычисления просто взрываются, приводя на глубине к-го уровня к 2fc экземплярам И! К счастью, имеется хороший способ избежать этого взрыва. Поскольку f имеет только B(f) различных подфункций, может осуществиться не более B(f)B(g) явно различных вызовов И. Чтобы ограничить количество выполняемых вычислений, следует просто запоминать, что мы уже делали раньше, занося в память тот факт, что возвращаемое значение г получается в результате вычисления f /\д = г. В таком случае, когда та же самая подзадача возникнет позже, можно будет прочесть запись и сказать: “Да ведь мы это уже делали раньше!” Таким образом, ранее сохраненные
268 КОМБИНАТОРНЫЙ ПОИСК 7.1.4 вычисления превращаются в терминалы, и только отличающиеся от уже решенных подзадачи могут требовать новых вычислений. (Технология вычислений с запоми- нанием (memoization) будет детально рассмотрена в главе 8.) Алгоритм в (54) решает и другую задачу: не так просто “вернуть функцию (xvl rf. Th)”, поскольку мы должны поддерживать базу БДР приведенной. Если ri = rh, мы должны вернуть узел гг, а если г/ г^, нам нужно выяснить, не существует ли уже узел ветвления (xv? г г. г^), прежде чем создавать новый. Таким образом, необходимо поддерживать дополнительную информацию, по- мимо самих узлов БДР. Нам нужны записи об уже решенных задачах; нам так- же нужно уметь находить узел по его содержимому, а не по адресу. Здесь на помощь приходят алгоритмы из главы 6, указывающие, как выполнить оба эти поиска, например, с помощью хеширования. Для записи информации о том, что f /\д = г, можно хешировать ключ ‘(/, Л, <?)’ и связать его со значением г; для записи существования имеющегося узла (V, LO,HI) можно хешировать ключ ‘(V, LO,HI)’ и связать его с адресом узла в памяти. Словарь всех существующих узлов (V, LO,HI) в базе БДР традиционно име- нуется таблицей уникальности (unique table), поскольку мы используем ее для обеспечения крайне важного критерия уникальности, запрещающего дублирование. Однако оказывается, что вместо помещения всей информации в один гигантский словарь лучше поддерживать коллекцию меньших таблиц уникальности, по одной для каждой переменной V. При наличии таких отдельных таблиц можно эффек- тивно находить все узлы, выполняющие переходы по конкретной переменной. Вычисления с записью удобны, но не так критичны, как записи таблицы уни- кальности. Если так случится, что мы забудем записать отдельный факт, что f Л д = г, то мы всегда сможем выполнить вычисления заново. Экспоненциальный взрыв не должен нас беспокоить, если ответы к подзадачам fi/\gi и fh Лдь записыва- ются с достаточно высокой вероятностью. Следовательно, можно использовать ме- нее дорогостоящие методы запоминания, разработанные для выполнения “хорошей, но не идеальной” работы по выборке данных: после хеширования ключа ‘(/,Л,дУ в позицию таблицы р нужно просмотреть записи только в этой одной позиции, не беспокоясь о возможных коллизиях с другими ключами. Если у нескольких ключей оказывается один и тот же хеш-адрес, позиция р будет содержать только последнюю запись. Такая упрощенная схема остается вполне адекватной на практике, если хеш- таблица достаточно велика. Назовем такую близкую к идеальной таблицу кэшем записей, поскольку она аналогична аппаратным кэшам, с помощью которых ком- пьютер пытается запомнить важные значения, для получения которых приходится работать с относительно медленными устройствами хранения. Итак, давайте конкретизируем алгоритм (54), явно указав, как он взаимодей- ствует с таблицами уникальности и кэшем записей. И(/,р) = < Если f /\д имеет очевидное значение, вернуть его. В противном случае: если f f\g = г находится в кэше записей, вернуть г. Иначе представить fag, как в (52); вычислить п <— H(fi,gt) и rh «— H(/h,ph); установить г «— UNIQUE (и, ri,rh), используя алгоритм U; поместить ‘f /\д — г’ в кэш записей и вернуть г. (55)
7.1.4 БИНАРНЫЕ ДИАГРАММЫ РЕШЕНИЙ 269 Алгоритм U (Поиск в таблице уникальности}. Для заданного (v,p, q), где v представляет собой целое число, а р и q указывают на узлы базы БДР с рангом переменных > v, этот алгоритм возвращает указатель на узел UNIQUE(v,p, q), ко- торый представляет функцию (xv? р: q). Если этой функции еще нет в наличии, в базу добавляется новый узел. U1. [Простой случай?] Если р — q, вернуть р. U2. [Проверка таблицы.] Выполнить поиск ключа (р, q) в таблице уникальности переменной xv. Если поиск успешен и находит значение г, вернуть г. U3. [Создание узла.] Выделить память для нового узла г и установить V (г) «— г, L0(r) «— р, HI (г) «— q. Поместить г в таблицу уникальности xv с использова- нием ключа (р, q). Вернуть г. | Обратите внимание, что обнулять кэш записей после окончания вычисления верх- него уровня И (/,<?) не нужно. Каждая запись, которую мы создали, указывает на соотношение между узлами в структуре; эти факты остаются корректными и мо- гут оказаться полезными позднее, когда мы захотим вычислить И(/, д) для новых функций f и д. Небольшое усовершенствование (55) приведет к дальнейшему улучшению этого метода. Это обмен f <-> д в случае, когда мы выясняем, что f > д при неочевидном значении f /\д. Мы не хотим терять время на вычисление f /\д, если уже вычислено 5 Л/. Внеся небольшие изменения в (55), можно легко вычислять другие бинарные операторы, такие как ИЛИ(/,р), ЛИБО(/,<?), НО-НЕ(/,д), НЕ-ИЛИ (/,<?), ...; см. упр. 81. Комбинация (55) и алгоритма U выглядит значительно проще алгоритма S. Таким образом, можно спросить, зачем вообще трудиться и изучать другой метод? Подход с поиском в ширину выглядит существенно сложнее вычислений “в глубину” в рекурсивной структуре (55); тем более что алгоритм S способен работать только с непересекающимися бинарными диаграммами решений, в то время как алгоритм U и рекурсии наподобие (55) применимы к любой базе БДР. Однако внешность может быть обманчивой: алгоритм S был описан на низком уровне, с явным описанием всех изменений каждого элемента структур данных. Напротив, высокоуровневое описание в (55) и алгоритма U предполагает наличие “за сценой” серьезной инфраструктуры. Кэш записей и таблицы уникальности следует настроить, их размеры при росте или сокращении базы БДР должны аккуратно изменяться. Когда все это будет сделано, общая длина программы, корректно реализующей алгоритмы (55) и U “с нуля” будет грубо на порядок большей, чем аналогичная программа для алгоритма S. На самом деле поддержка базы БДР влечет за собой интересные вопросы дина- мического распределения памяти, поскольку мы хотим освобождать память, когда узлы становятся более недостижимыми. Алгоритм S решает эту проблему способом “последним вошел, первым вышел” просто содержа узлы и шаблоны в последова- тельных стеках и работая с единственной небольшой хеш-таблицей, которая может быть легко интегрирована с другими данными. Однако обобщенная база БДР требует более сложной системы.
270 КОМБИНАТОРНЫЙ ПОИСК 7.1.4 Пожалуй, наилучший способ подцержки динамической базы БДР заключается в использовании счетчиков ссылок, рассматривавшихся в разделе 2.3.5, поскольку бинарные диаграммы решений ацикличны по определению. Таким образом, будем считать, что каждый узел БДР в дополнение к полям V, LO и HI имеет поле REF. Это поле REF говорит нам о том, сколько имеется ссылок на этот узел— из указателей LO или HI других узлов или из внешних корневых указателей Fj, как в (36). Например, поля REF для узлов, помеченных (з) в (36) равны соответственно 4, 1 и 2; а все узлы, помеченные (2), (4) или (6) в этом же примере, имеют REF = 1. В упр. 82 рассматривается такой непростой вопрос, как корректное увеличение и уменьшение счетчиков REF в процессе рекурсивных вычислений. Узел становится мертвым, когда его счетчик ссылок становится равным нулю. Когда это происходит, нужно уменьшить поля REF двух узлов ниже его; они также могут “умереть” тем же образом, рекурсивно распространяя эпидемию уничтоже- ния узлов. Однако мертвый узел не требует немедленного удаления из памяти. Он все еще представляет потенциально полезную булеву функцию, и может оказаться, что эта функция вновь потребуется нам при проведении вычислений. Например, на шаге U2 можно обнаружить мертвый узел, поскольку указатели из таблицы уникальности не подсчитываются, как ссылки. Аналогично в (55) мы можем случайно обнаружить, что кэш записей говорит нам о том, что f/\g = г, в то время как г в настоящее время мертв. В таких случаях узел г возвращается к жизни. (И мы должны увеличить счетчики REF его потомков LO и HI, возможно, заставив их при этом рекурсивно выполнить те же действия по отношению к своим потомкам.) Периодически, однако, хотелось бы очищать память, удаляя мертвецов. В таких случаях следует выполнять две вещи: убирать из кэша все записи, в которых f, д либо г мертвы, а также удалять все мертвые узлы из памяти и из их таб- лиц уникальности. В упр. 84 рассматриваются типичные эвристические стратегии, с помощью которых автоматизированные системы могут решать, когда следует прибегать к такой очистке и когда надо динамически изменять размеры таблиц. Из-за дополнительных механизмов, необходимых для поддержки базы БДР, нельзя ожидать, что эффективность алгоритма U и нисходящих рекурсий типа (55) сравняется с эффективностью алгоритма S в таких единичных примерах, как функ- ция монотонной функции р,п из (49). Время работы при применении к этому приме- ру более общего подхода оказывается примерно учетверенным, а требования к па- мяти вырастают примерно в 2.4 раза. База БДР начинает реально проявлять себя в ряде других приложений. Пред- положим, например, что нам нужны формулы для каждого бита произведения двух бинарных чисел, (-2Д . . . ZTn-f.n)2 — (я*! • • • ®m)2 X (j/1 • • • ?/п)2* Ясно, что zj... zm = 0... 0 при п = 0 и что простое рекуррентное соотношение (яд ... хт)2 х (yi • • • УпУп+1 )г = (zi... zm+n0)2 + (яд ... xm)2yn+i (57) позволяет увеличить п на 1. Это рекуррентное соотношение легко закодировать для базы БДР. Далее показано, что мы получаем при т = п = 3 с индексами, выбранными таким образом, чтобы соответствовать аналогичной диаграмме для
7.1.4 БИНАРНЫЕ ДИАГРАММЫ РЕШЕНИЙ 271 бинарного сложения из (36). Ж3 Ж5 X /б /б А /з/г/1 (58) Ясно, что битовое умножение гораздо сложнее битового сложения. (Действительно, если бы это было не так, то разложение на множители не было бы таким слож- ным.) Соответствующая база БДР для бинарного умножения при тп = п = 16 оказывается огромной, с B(fi,... ,/32) = 136398751 узлом. Ее можно получить после выполнения порядка 56 миллиардов обращений к памяти при вычислениях с помощью алгоритма U, при этом требуется 6.3 Гбайт памяти и выполняется около 1.9 миллиарда вызовов рекурсивных процедур с сотнями динамических изменений размеров таблиц уникальности и кэша записей, а также десятки длительных сбо- рок мусора. Аналогичные вычисления с использованием алгоритма S практически невообразимы, хотя отдельные функции в этом конкретном примере не так часто совместно используют общие подфункции: оказывается, что B(/i) + • —F В(/зг) = 168640131, с максимумом в “среднем бите’,’ B(/i6) = 38174143. *Тернарные операции. Если даны три булевы функции, / — f(xi,... ,хп), д = g(xi,хп) и h = h(xi,..., хп), из которых не все являются константными, можно обобщить (52) до / = fi: fh) и д = (я„? gt: gh) и h = (я„? ht: hh), (59) беря v = min(fv,gv, hv). Тогда, например, (53) обобщается до {fgh) = (xv? {figihi): {fhghhhY); (60) аналогичные формулы выполняются для любых тернарных операций над f,gnh, включая (61) (/? д: h) = (я„? (/,? gV. hi)-. (fh? gh: hh)). (Читателя этих формул просим простить два разных значения lh’ в ‘hh’.) Теперь легко обобщить (55) на тернарные комбинации наподобие мультиплек- сирования. ' Если (/? д: h) имеет очевидное значение, вернуть его. В противном случае если (/? д: h) = г находится в кэше записей, вернуть г. MUX(/, д, Л,) = В противном случае представить f,gnh как в (59); вычислить п «— M\JX(fi,gi,hi) и 77, <— MUX(/h,gh,/ih); установить г <— UNIQUE(i>, 77,77,), используя алгоритм U; . поместить ‘(/? д: h) = г' в кэш записей и вернуть г. (62)
272 КОМБИНАТОРНЫЙ ПОИСК 7.1.4 (См. упр. 86 и 87.) Время работы составляет O(B(J)B(g)B(h)). Кэш записей теперь должен работать с более сложными ключами, чем ранее, содержащими три указателя (/, д, h) вместо двух, вместе с кодом соответствующей операции. Но каж- дая запись (op,f,g,h,r) все еще может быть удобно представлена, скажем, двумя октабайтами, если количество различных адресов указателей не превышает 231. Интересным частным случаем является тернарная операция f /\gf\h. Ее можно вычислить с помощью двух вызовов (55), либо как И(/,И(д, h)), либо как И(д, И(Л, /)), либо как И(Л,, И(/, д)); либо можно использовать тернарную подпрограмму И-И (/,g, h), аналогичную (62). Эта тернарная подпрограмма сначала сортирует операнды таким образом, чтобы указатели удовлетворяли соотношению f < д < h. Тогда, если f = 0, она возвращает 0; если f = 1 или f = д, она возвращает И(д, h); если д — h, она возвращает И (/,<?); в противном случае l<f<g<hm операция на данном уровне рекурсии остается тернарной. Предположим, например, что f = рз(х1,хз,... ,хвз), 9 = /15(2:2,2:4,... ,Тб4) и h = вб4(®1, • • • ,£б4)> как в (49). Вычисление И(/, И(д, Л,)) в экспериментальной реализации автора имеет стоимость 0.2 + 6.8 = 7.0 миллионов обращений к памяти; И(д, И(Л, /)) имеет стоимость 0.1 + 7.0 = 7.1; И(Л,И(/, </)) имеет стоимость 24.4 + 5.6 = 30.0 (!); а И-И (/,g, h) имеет стоимость 7.5. Так что в данном случае побеждает бинарный подход, если только не выбрать плохой порядок вычислений. Но иногда тернарная операция И-И выигрывает у всех трех бинарных соперников (см. упр. 88). *Кванторы. Если f = f(xiхп) представляет собой булеву функцию и 1 < j < п, логики традиционно определяют квантификацию существования и всеобщности с помощью формул 3xjf(xi,...,xn) = f0 V/i и VTj/(rci,...,rcn) =/о Л/i, (63) где /с = f(xi,...,Xj-i,с, Xj+i,...,Хп). Таким образом, квантор ‘Эгс^’ (произносится как “существует Xj, такое, что”) заменяет / функцией от остальных переменных (rci,.. -, Xj-i, Xj+i,..., хп), которая истинна тогда и только тогда, когда как мини- мум одно значение Xj удовлетворяет f(xi,... ,хп); квантор ‘Vrcj’ (произносится как “для всех Xj”) заменяет / функцией, которая истинна тогда и только тогда, когда, когда оба значения Xj удовлетворяют /. Зачастую одновременно применяется несколько кванторов. Например, форму- ла 3x2 Згсз Зтв f(xi, • •, хп) означает ИЛИ восьми членов, представленных восемью функциями от переменных (х1,х^,хз,хт,... ,хп), которые получаются, когда мы подставляем значения 0 или 1 вместо переменных Х2, хз и хв всеми возможными способами. Аналогично Vrc2 Чхз \/х^ f(xi,..., хп) означает И с теми же восемью членами. Одно из распространенных приложений — когда функция f(ii,... • •, jm) представляет собой значение на пересечении строки (ii.. .11)2 и столбца (ji... jm)2 булевой матрицы F размером 2г х 2т. Тогда функция h(ii,... ,ii;ki,..., kn), зада- ваемая как • •. 3jm(/(ii,..., ii; ji,..., jm) Л g(ji,... ,jm;ki,... ,kn)) (64) представляет матрицу H, являющуюся булевым произведением F G. Удобный способ реализовать множественную квантификацию в базе БДР был предложен Р. Л. Руделлом (R. L. Rudell). Пусть д = хд А • • • A Xjm представ-
7.1.4 БИНАРНЫЕ ДИАГРАММЫ РЕШЕНИЙ 273 ляет собой конъюнкцию положительных литералов. Тогда мы можем рассматри- вать Згсл ... 3rcjm f как бинарную операцию fEg, реализуемую следующим вариан- том (55). ' Если fEg имеет очевидное значение, вернуть его. В противном случае представить fug как в (52); если г! 0 f„, вернуть EXISTS (/,<?/,). В противном случае если f Ер = г находится в кэше записей, 'ТЯТЯ Г 7 = вернутьг- u у В противном случае, п <— EXISTS (/ц рь) и г/,«— EXISTS (Д, рь); ' ' если v 0 gv, установить г «— UNIQUE(w, г;,гь) с использованием алгоритма U, в противном случае вычислить г <— ИЛИ(г|,г/1); . поместить ‘fEg^r’ в кэш записей и вернуть г. (См. упр. 94.) Операция Е не определена, когда р не имеет указанного вида. Обрати- те внимание, как хорошо кэш записей восстанавливает вычисления существования, выполнявшиеся ранее. Время работы (65) очень изменчиво (в отличие от (55), где мы знали, что наи- худшим возможным случаем является О(В(/)В(р))), поскольку, когда р определяет m-кратную квантификацию, выполняется m операций ИЛИ. Теперь наихудший слу- чай может быть порядка B(/)2’n, если вся квантификация осуществляется вблизи корня БДР для /; это значение составляет всего лишь О(В(/)2) при т = 1, но с ростом т может стать невероятно огромным. С другой стороны, если все кван- тификации осуществляются вблизи стоков, то время работы превращается в просто О(В(/)), независимо от размера т. (См. упр. 97.) Стоит упомянуть и несколько других столь же простых кванторов, хотя они и не так известны, как 3 и V. Булева разность и кванторы да/нет определяются формулами, аналогичными (63): О^/ = /оФ/1; = Ntj/ = /oA/i. (66) Булева разность, G, — наиболее важный из указанных кванторов: Qxj f истинно для всех значений {rci,..., , Xj+i,..., тп}, таких, что f зависит от Xj. Если муль- тилинейное представление f имеет вид f = (xjg + 7i)mod2, где g и h являются мультилинейными полиномами от {ж1,... ,Xj_i,Xj+i,... ,жп}, то Gxj f = gmod2. (См. 7.1.1-(19).) Таким образом, G действует над конечным полем как производная в дифференциальном исчислении. Булева функция f(xi,..., хп) является монотонной (неубывающей) тогда и только тогда, когда Wj=iNxjf = 0, что то же самое, что сказать, что Ntj f = О для всех j. Однако в упр. 105 представлен более быстрый способ проверки БДР на монотонность. Давайте теперь рассмотрим особенно поучительный детальный пример кванти- фикации существования. Если G представляет собой произвольный граф, можно образовать булевы функции IND(rc) и KER(rc) для его независимых множеств и ядер следующим образом, где х — битовый вектор с одной записью xv для каждой вер-
274 КОМБИНАТОРНЫЙ ПОИСК 7.1.4 шины v графа G: IND(x) = - \/ (хи Л xv); (67) и — V KER(rc) = IND (ж) Л /\(xv V \/ хи). (68) V и — V Можно образовать новый граф Q, вершины которого являются ядрами G, а именно векторами х, такими, что KER(rc) = 1. Будем говорить, что два ядра, хну, являются смежными в Q, если они отличаются только в двух записях для и и и, где {xu,xv) = (1,0) и (уи,Уъ) = (0,1), и в этом случае мы также имеем и — и. Ядра можно рассматривать как определенные способы размещения маркеров на вершинах G; перемещение маркера из одной вершины в соседнюю дает смежное ядро. Формально мы определяем ADJ (ж, у) = [у(х ф у) = 2] Л KER(rc) Л KER(y). (69) Тогда х — у в Q тогда и только тогда, когда ADJ (я, у) = 1. Заметим, что если х — xi...хп, то функция [ь'(т) = 2] является симметричной функцией <82(^1 , хп)- Кроме того, f(x ф у) имеет узлов не более чем в три раза больше, чем f(x), если чередовать переменные в стиле застежки-молнии, так что порядок ветвления имеет вид (х\,у\,... ,хп,уп). Так что Б (ADJ) не может быть чрезвычайно большим, если только B(KER) не велико. Квантификация облегчает задачу выражения условия, что х является изолиро- ванной вершиной Q (вершиной нулевой степени, ядром без соседей): ISO(rc) = KER(rc) Л->3yADJ(rr, у). (70) Предположим, например, что G представляет собой граф граничащих штатов США, как в (18). Тогда каждый вектор ядра х имеет 49 записей xv для v G {ME, NH,... ,СА}. Граф Q имеет 266137 вершин, а ранее мы уже находили, что размеры БДР для IND(rr) и KER(rc) равны соответственно 428 и 780 (см. (17)). В этом случае ADJ (х, у) в (69) имеет бинарную диаграмму решений только с 7260 узлами, несмотря на то что это функция от 98 булевых переменных. БДР для выражения Зу ADJ(я, у), описывающего все ядра х графа G, которые имеют хотя бы одного соседа, как выясняется, имеет 842 узла; а бинарная диаграмма решений для ISO (я) имеет их только 77. Мы находим, что G имеет ровно три изолированных ядра, а именно (71) а оставшееся является смесью двух приведенных. Полное вычисление, основанное на приведенных выше алгоритмах и начинающееся со списка вершин и ребер G (не Q), может быть выполнено с общей стоимостью около 4 миллионов обращений
7.1.4 БИНАРНЫЕ ДИАГРАММЫ РЕШЕНИЙ 275 к памяти и с использованием около 1.6 Мбайт памяти; это составляет всего лишь около 15 обращений к памяти на ядро графа G. Подобным образом можно использовать бинарные диаграммы решений для ра- боты с другими “неявными графами” которые имеют больше вершин, чем может быть представлено в памяти, если эти вершины могут быть охарактеризованы как векторы решений булевых функций. При не слишком сложных функциях можно отвечать на запросы об этих графах, на которые мы бы никогда не смогли ответить при явном представлении вершин и дуг. *Функциональная композиция. Piece de resistance* рекурсивных алгоритмов для работы с бинарными диаграммами решений является обобщенная процедура для вычисления f(gi,g2, -,дп), где f—заданная функция от {ж1, х%, ,хп}, и таковой же является каждый аргумент gj. Предположим, что мы знаем число т > 0, такое, что gj = Xj для т < j < п; тогда процедуру можно выразить следующим образом. COMPOSE (/,5i,...,5n) = < Если f = 0 или f = 1, вернуть /. В противном случае положим / = (xv? fr. fh), как в (50); если v > т, вернуть /; в противном случае, если f(gi,..., дп) — г находится в кэше записей, вернуть г. (72) Вычислить ri «— COMPOSE(/[,gi,... ,дп) wrh^~ COMPOSE(Д,gi,... ,5П); установить г <— MUX(5„, п, rh) с использованием (62); поместить ‘/(<71 > • • • > 9п) — г’ в кэш и вернуть г. Представление записей кэша наподобие ‘/(51,..., дп) = г’ в этом алгоритме вызы- вает определенные сложности; мы вскоре рассмотрим этот вопрос. Хотя вычисления здесь выглядят в основном такими же, как и те, с которыми мы встречались в предыдущих рекурсиях, в действительности они существенно отличаются: функции п и г/, в (72) могут включать все переменные {ж1,... ,гсп}, а не только х вблизи нижнего края бинарных диаграмм решений. Так что время работы (72) может оказаться огромным. Но имеется множество случаев, когда все работает гармонично и эффективно. Например, вычисление [р(т ф у) = 2] в (69) не представляет проблем. Ключ записи наподобие ‘/(51,..., дп) = г’ не должен быть полностью детальной спецификацией (/,51,... ,дп), поскольку мы хотим эффективно его хешировать. Поэтому мы храним только ‘/[G] = г’, где G представляет собой идентификаци- онный номер последовательности функций (51,... ,дп)- При изменении этой после- довательности можно использовать новый номер G; и мы можем помнить G для отдельных последовательностей функций, многократно встречающихся в опреде- ленном вычислении, пока отдельные функции gj остаются “живыми” (См. также альтернативную схему в упр. 102.) Вернемся к графу граничащих штатов, как к еще одному примеру. Это планар- ный граф; предположим, что мы хотим раскрасить его в четыре цвета. Поскольку Основное блюдо, лучший кусок (фр.) — Примеч. пер.
276 КОМБИНАТОРНЫЙ ПОИСК 7.1.4 цвета могут быть заданы двухбитовыми кодами {00,01,10,11}, легко выразить кор- ректную раскраску как булеву функцию от 98 переменных, которая истинна тогда и только тогда, когда коды цветов ab различны у каждой пары граничащих штатов: COLOR(anE, Ьне, • •, ас*, 5с*) = IND(anE Л Ьце, ..., ас* Л Ьс*) Л IND(ohe Л Ьце, ..., ас* Л 6 с*) (73) Л IND(6me Л 6це, ..., ас* Л 6с*) Л IND(6me Л 6це, ...,ас* Л 6с*). Каждая из четырех IND имеет бинарную диаграмму решений из 854 узлов, которые могут быть вычислены с помощью (72) со стоимостью около 70 тысяч обращений к памяти. Функция COLOR оказывается имеющей только 25579 узлов бинарной диаграммы решений. Алгоритм С быстро выясняет, что общее количество вари- антов раскраски данного графа четырьмя красками равно ровно 25 623183 458 304 (или, если выполнить деление на 4! для удаления симметричных решений, около 1.1 триллиона).* Общее время, требующееся для данного вычисления, начиная с описания графа, составляет менее 3.5 миллионов обращений к памяти, а требуемое количество памяти — 2.2 Мбайт. (Мы можем также найти случайную раскраску четырьмя красками, и т. д.) Трудные функции. Конечно, имеются также функции от 98 переменных, не столь приятные, как COLOR. Действительно, общее количество функций от 98 перемен- ных равно 22°8; в упр. 108 доказывается, что не более 22"*6 из них имеют бинарную диаграмму решений размером менее триллиона и что почти все булевы функции от 98 переменных в действительности имеют B(f) ~ 298/98 ~ 3.2 х 1027. Просто не существует способа сжатия 298 бит данных до небольшого объема, если только эти данные не оказываются высоко избыточными. Каков же наихудший случай? Если f представляет собой булеву функцию от п переменных, то как велико может быть значение B(f)? Ответ не так уж сложно найти, если рассмотреть профиль данной бинарной диаграммы решений, который представляет собой последовательность (6q, • • •,bn-i,bn), когда имеется Ьк узлов ветвления для переменной Xk+i и Ьп стоков. Ясно, что #(/) = Ьо + • —F bn-i + Ьп. (74) Мы также имеем bo < 1, 61 < 2, 62 < 4, Ьз < 8 и в общем случае Ьк < 2к, (75) поскольку каждый узел имеет только две ветви. Кроме того, Ьп = 2, когда f не является константой; а Ьп-1 < 2, поскольку имеется только два корректных выбора для ветвей LO и HI для (п). Действительно, мы знаем, что Ьк представляет собой количество бусин порядка п — к в таблице истинности /, а именно количество раз- личных подфункций от (sfc+i,..., хп), зависящих от Xfc+i после указания значений (xi,..., Хк)- Возможны только 22"1 — 22”1- бусин порядка т, так что мы должны иметь Ьк < 22 — 22 для 0 < к < п. (76) * Для графа областей Украины соответствующая БДР содержит 2949 узлов, а общее количество вариантов раскраски равно 13 777 920 (574080 после деления на 4!). — Примеч. пер.
7.1.4 БИНАРНЫЕ ДИАГРАММЫ РЕШЕНИЙ 277 При п = 11, например, (75) и (76) говорят нам, что (Ьо, • • •, 5ц) не превышают (1, 2, 4, 8,16, 32, 64, 128, 240,12, 2, 2). (77) Таким образом, B(f) < 1 + 2 + • • • + 128 + 240 + • • • + 2 = 255 + 256 = 511, когда п — 11. Эта верхняя граница в действительности достигается при таблице истинности, имеющей вид 00000000 00000001 00000010 ... 1111111011111111, (78) или при любой строке длиной 211, которая представляет собой перестановку 256 возможных 8-битовых байтов, поскольку очевидно наличие всех 8-битовых бусин и поскольку все подтаблицы длиной 16, 32, ..., 211 очевидным образом являют- ся бусинами. Аналогичные примеры можно построить для всех п (см. упр. 110). Следовательно, наихудший случай известен. Теорема U. Каждая булева функция f(xi,..., хп) имеет B(f) < Un, где Un = 2 + min(2fc, 22"“ - г2"-*-1) = 2п-А(п-Ап> + г2**"-*"’- 1. (79) к=0 Кроме того, для всех п существуют явные функции fn с B(fn) = Un. | Если мы заменим A Haig, то правая часть (79) примет вид 2n/(n—lgn) + 2n/n—1. В общем случае Un представляет собой ип, умноженное на 2п/п, где множитель ип лежит между 1 и 2 + O(^^i). БДР с около 2п+1/п узлами требует около п + 1 — 1g п бит для каждого из двух указателей в каждом узле плюс 1g п бит для указания переменной для ветвления. Так что общее количество памяти, занимаемое БДР для любой функции f(xi,... ,хп), никогда не превышает около 2п+2 бит, что в четыре раза превышает размер ее таблицы истинности, даже если / оказывается одной из наихудших возможных функций с точки зрения представления БДР. Средний случай оказывается почти таким же, как и наихудший, если выбирать таблицу истинности f случайным образом среди всех 22" возможных вариантов. Вычисления вновь оказываются несложными: среднее число узлов (fc+1) составляет ровно bk = (22"’-22"-'t“1)(22n-(22"’-l)2fc)/22", (80) поскольку имеется 22" —22" * 1 бусин порядка п—к и (22" —I)2* таблиц истинности, в которых любая конкретная бусина не встречается. В упр. 112 показано, что эта сложно выглядящая величина Ьк всегда лежит очень близко к оценке для наихудше- го случая min(2fc, 22”-—22"-*-1), за исключением двух значений к. Исключительные уровни встречаются, когда к ~ 2п~к и “min” имеет малое влияние. Например, средний профиль (Ьо, • • •,bn-i,bn) при п = 11 приближенно представляет собой (1.0, 2.0,4.0,8.0,16.0,32.0,64.0,127.4,151.9,12.0,2.0,2.0) (81) при округлении до одного десятичного знака, и эти значения почти неотличимы от наихудшего случая (77) за исключением случаев к = 7 или 8. Важной оказывается и родственная концепция квози-БДР, или “КДР” (“QDD”). Каждая функция имеет уникальную КДР, которая подобна ее БДР, за исключением
278 КОМБИНАТОРНЫЙ ПОИСК 7.1.4 того, что корневой узел всегда (Т), а каждый узел (к) для к < п имеет ветвления в два узла (fc+1); таким образом, каждый путь от корня до стока имеет длину п. Чтобы сделать это возможным, мы позволяем указателям LO и HI узла КДР быть идентичными. Но КДР должна оставаться приведенной в том смысле, что различ- ные узлы не могут иметь одну и ту же пару указателей (LO, HI). Например, КДР для (ГС1Т2Т3) представляет собой (82) она имеет в два раза больше узлов, чем соответствующая БДР на рис. 21. Обратите внимание, что в КДР поля V оказываются излишними, так что их незачем хранить в памяти. Квазипрофиль функции представляет собой вектор (до, • • • , gn-i,gn), где qk-i является количеством узлов (к) в КДР. Легко видеть, что является также коли- чеством различных подтаблиц порядка п — к в таблице истинности, так же, как Ьк является количеством различных бусин. Каждая бусина является подтаблицей, так что имеем Як > Ьк для 0 < к < п. (83) Кроме того, в упр. 115 доказывается, что Як < 1 + Ьо Ч----Н bk-i и qk < Ьк Ч-----1- Ьп для 0 < к < п. (84) Следовательно, каждый элемент квазипрофиля является нижней границей размера БДР: B(f) > %Як - 1 для 0 < к < п. (85) Пусть Q{f) = Яо Ч- ••• Ч- Ч- Яп—общий размер КДР для /. Очевидно, что Q(/) > B(f) согласно (83). С другой стороны, Q(f) не может быть намного больше B{f), поскольку из (85) вытекает, что Q(f) < ^(В(/)ч-1). (86) В упр. 116 и 117 исследуются другие базовые свойства квазипрофилей. Таблица истинности для наихудшего случая (78) в действительности соответ- ствует знакомой функции, которую мы уже видели ранее, — восьмиканальному мультиплексору -Л<7з(тд, Тю, Тц, ,.. • , Те) — (87) Однако мы перенумеровали переменные, так что мультиплексирование теперь вы- полняется по отношению к трем последним переменным (rcg,rcio,rcn), а не к трем первым, как в (30). Это простое изменение порядка переменных увеличивает размер БДР для М3 от 17 до 511; а аналогичное изменение при п = 2т Ч- т приводит к колоссальному прыжку В{Мт) от 2п — 2т Ч-1 до 2n-m+1 — 1. Р. Э. Брайант (R. Е. Bryant) ввел интересный “самозацикленный” мультиплек- сор под названием скрыто взвешенная битовая функция {hidden weighted bit func-
7.1.4 БИНАРНЫЕ ДИАГРАММЫ РЕШЕНИЙ 279 tiori), определяемый следующим образом: hn (ti у..., тп) — —|_Жтг — з+х, (88) с соглашением, что хо = 0. Например, 1ц(х1,Х2,хз,Х4) имеет таблицу истинности 0000011110011011. Он доказал [ZEEE Trans. С-40 (1991), 208-210], что hn имеет большую бинарную диаграмму решений, независимо от способов перенумерации ее переменных. В случае стандартного порядка переменных профиль (Ьо, • • •, 611) функции hn представляет собой (1,2,4,8,15,27,46,40,18, 7, 2, 2); (89) следовательно, В(Ь,ц) = 172. Первая половина этого профиля фактически пред- ставляет собой немного замаскированную последовательность Фибоначчи с Ьк = Fk+4 — к — 2. В общем случае hn всегда имеет это значение Ьк для к < п/2; таким образом, значения изначального профиля растут как фк, в то время как в наихудшем случае это рост 2к. Эта скорость роста замедляется после того, как к превышает п/2, так что, например, В (6,32) имеет скромное значение 86636. Но в конечном итоге экспоненциальный рост берет свое, и В(/гюо) оказывается вне пределов видимости: 17530618296680. (Когда п = 100, максимальным элементом профиля является Ьъэ = 2 947 635 944 748, по сравнению с которым Ь0Н 1*649 — 139583861115 кажется карликом.) В упр. 125 доказывается, что B(hn) асимптотически равно суп + О(п2), где Х = (/54 = 1.32471795724474602596090885447809734073440405790173+ (90) представляет собой так называемую “константу пластичности” (“plastic constant”), положительный корень у3 = х + 1, а коэффициент с равен 7х — 1 + 14/(3 + 2у) и 10.75115. С другой стороны, можно поступить существенно лучше, если изменить по- рядок, в котором в бинарной диаграмме решений проверяются переменные. Если f(xi,... ,хп) представляет собой произвольную булеву функцию и если тг представ- ляет собой некоторую перестановку {1,..., п}, будем записывать У (Т1,...,ХП) = f (Z'lir, • • • , Я'птг) • (91) Например, если f(xi, Х2, Х3, Х4) = (хз V (xi Л Х4)) Л (х2 V Х4) и если (1тг, 2тг, Зтг, 4тг) = (3,2,4,1), то f”(xi,X2,X3,X4) = (Х4 V (хз Л xi)) Л (х2 V ii); и мы имеем B(f) = 10, B(f") = 6, поскольку бинарные диаграммы решений имеют вид (92)
280 КОМБИНАТОРНЫЙ поиск 7.1.4 БДР для f* соответствует БДР для /, которая имеет нестандартный порядок, в котором ветви из (¥) в (V) разрешены, только если гтг < утг: (93) Корнем является (Т), где i — 1тг_ —индекс, для которого гтг = 1. Когда переменные ветвления перечисляются сверху вниз, мы имеем (4тг, 2тг, 1тг, Зтг) = (1,2,3,4). Применяя эти идеи к скрыто взвешенной битовой функции, мы имеем ^п(®1» • — ®(а:1Ч-------Нхп)тг, (94) с соглашением, что Отт = 0 и хо = 0. Например, fig (0,0,1) = 1, если (1тг, 2тг, Зтг) — (3,1,2), поскольку Т(11+12+1з)к - х3 = 1. (См. упр. 120.) Элемент qk квазипрофиля подсчитывает количество различных подфункций, которые возникают, когда известны значения от xi до Хк- Используя (94), мы можем представить все такие подфункции посредством реестра вариантов [го,... ,rn_fc], где Tj представляет собой результат подфункции, когда Zfc+i + + хп = j. Пред- положим, ЧТО Xi = С1, . . . , Хк = Cfc, И ПУСТЬ S = C1 + - + Cfc. Тогда Tj = Cfs+j'fr, если (s + j)tt < к; в противном случае Tj = Однако, если ятг > к, мы устанавливаем го «— 0, и гп_к 1, если (s + n — к)тг > к, так что первый и последний варианты каждого реестра являются константами. Например, вычисления показывают, что следующая перестановка 1тг... 100тг снижает размер бинарной диаграммы решений Тгюо от 17.5 триллиона до В(Л.(ГОО) = 1124432105. 2 4 6 8 10 12 14 16 18 20 97 57 77 37 87 47 67 27 92 52 72 32 82 42 62 22 100 60 80 40 90 50 70 30 95 55 75 35 85 45 65 25 98 58 78 38 88 48 68 28 93 53 73 33 83 43 63 23 99 59 (95) 79 39 89 49 69 29 94 54 74 34 84 44 64 24 96 56 76 36 86 46 66 26 91 51 71 31 81 41 61 21 19 17 15 13 11 9 7 5 3 1 Такие вычисления могут основываться на подсчете всех реестров, которые могут возникнуть, для 0 < s < к < п. Предположим, что мы тестировали Xi, ..., х33 и об- наружили, что Xj = [j < 42], скажем, для 1 < j < 83. Тогда s = 42; а подфункция от оставшихся 17 переменных (я?84, ,£ioo) задается реестром [т0,...,Г17] = [с25,£98, С58, с78, с38, £88, С48, Сб8, С33, Хд3, С53, С73, С33, С33, C43, СбЗ, C23, £99], КОТОРЫЙ СВОДИТСЯ К [1, Х98, о, 0,1, х88,0,0,1, Т93, о, 0,1,0,0,0,1,1]. (96) Это одна из 214 подфункций, подсчитанных <?8з при s — 42. В упр. 124 поясняется, как поступить аналогичным образом с другими значениями к и s. Теперь мы готовы к доказательству теоремы Брайанта (Bryant). Теорема В. Размер БДР для h„ превышает для всех перестановок тг.
7.1.4 БИНАРНЫЕ ДИАГРАММЫ РЕШЕНИЙ 281 Доказательство. Сначала заметим, что две подфункции h„ равны тогда и только тогда, когда они имеют одинаковые реестры. Если [г0,..., rn_fc] [т^,..., предположим, что Tj ф Tj. Если и г^, и г' являются константами, подфункции отличаются, когда Xk+i + + хп = j. Если rj является константой, но г' = х^ мы имеем 0 < j < п — к; подфункции отличаются, поскольку rrfc+i + • • + хп может быть равно j с Xi ф Tj. А если Tj = Xi, но r'j = xit с i ф г', мы можем иметь Xk+i Н----1- хп = j с Xi Xi>. (Последний случай может возникнуть, только когда реестры соответствуют разным смещениям s и s'.) Поэтому qk представляет собой количество различных реестров [г0,... ,rn_fc]. В упр. 123 доказывается, что это число для любых заданных к, п и s, как описано выше, в точности равно где w — количество индексов j, таких, что s<j<s+n— к и jn < к. Теперь рассмотрим случай к = [3n/5j + 1, и пусть s = к — [п/2], s' = [n/2j + 1. (Представьте п = 100, к = 61, s = 11, s' = 51. Мы можем считать, что п > 10.) Тогда w + w' = к — w", где w" подсчитывает индексы, такие, что jir < к и либо j < s, либо j > s'+n—k. Поскольку w" < (s—l) + (fc—s') = 2k —2—n, мы должны иметь w+w' > п + 2 — к = [2п/5] + 1. Следовательно, либо w > |n/5j, либо w’ > [n/5j; и в обоих случаях (97) превосходит 2Ln/5J-1. Утверждение теоремы следует из (85). | И обратно, всегда имеется перестановка тг, такая, что B(h„) = О(2°-2029п), хотя константа, скрытая в О-обозначении, достаточно велика. Этот результат доказан в В. Bollig, М. Lobbing, М. Sauerhoff and I. Wegener, Theoretical Informatics and Applications 33 (1999), 103-115, с применением перестановки наподобие (95): первые индексы, обладающие свойством jir < п/5, поочередно поступают от j > 9п/10 и j < п/10; прочие упорядочены с помощью чтения бинарного представления 9n/10 — j справа налево (солексный порядок). Давайте также рассмотрим вкратце гораздо более простой пример: функцию перестановки Pm(xi,... ,хтг), которая равна 1 тогда и только тогда, когда бинар- ная матрица с элементами X(i-i)m+j на пересечении строки i и столбца j является матрицей перестановки: т Дп(Т1, . . . jXms) — Si [X(i-i)mj-i, X(j_1)тп+2, • »*^(г— i=l т т А Si(xj,xm+j,..., xmz_mj.j). (98) j=i Несмотря на свою простоту, эта функция не может быть представлена небольшой бинарной диаграммой решений ни при каком переупорядочении ее переменных. Теорема К. Размер БДР для Р^ превышает т2т~1 для всех перестановок тг. Доказательство. [См. I. Wegener, Branching Programs and Binary Decision Diagrams (SIAM, 2000), Theorem 4.12.3.] Заметим, что для заданной БДР для Р£ каждый из т! векторов х, таких, что Р£(х) = 1 отслеживает путь длиной п = т2 от корня до [т]; должна быть протестирована каждая переменная. Пусть Vk(x)—узел, из
282 КОМБИНАТОРНЫЙ поиск 7.1.4 которого путь для х получает свою к-ю ветвь HI. Ветвление этого узла выполняется по значению в строке i и столбце j заданной матрицы для некоторой пары (i,j) = (ik(x),jk(x)). Предположим, что vk(x) = vk>(x'), где х ф х'. Построим х", совпадающее с х до vk(x) и с х' после. Тогда P^(x") = 1; следовательно, мы должны иметь к = к'. Фактически эти рассуждения показывают, что мы должны также иметь {ii (rr), г2(х),ik-i (ж)} = {ii (rr'), гз(х'),..., ik-i (rr')} и {ji(x),j2(x),..., jfc_i(ж)} = {ji(rr'), j2(x'),..., jfc-i (*')} (99) Представим этикетки m цветов, при этом имеется т! этикеток каждого цвета. Поместим этикетку цвета к на узел vk(x) для всех к и всех х. Тогда никакой узел не получит этикетки разных цветов и никакой узел с цветом к не получит всего более (к— 1)! (т—/с)! этикеток согласно (99). Следовательно, как минимум m!/((fc—1)! (m— fc)!) = различных узлов должны получить этикетки цвета к. Суммирование по к дает m2"1-1 нестоковых узлов. | В упр. 184 показано, что В(Рт) меньше, чем тп2т+1, так что нижняя граница в тео- реме К близка к оптимальной, за исключением множителя 4. Хотя размер растет экспоненциально, поведение не безнадежно плохо, поскольку тп = у/п. Например, В(Рго) равно всего лишь 38797317, хотя Р2о представляет собой булеву функцию от 400 переменных. *Оптимизация порядка. Пусть Bm,n(/) и Втах(/) обозначают наименьшее и наи- большее значения B(f^), взятые по всем перестановкам тг, которые могут предпи- сывать порядок переменных. Мы видели несколько случаев, когда Вт,п и Втах существенно отличались друг от друга; например, 2т-канальный мультиплексор имеет Вт-,п(Мт) ~ 2п и Bmax(Mm) « 2п/п при п = 2т + т. И действительно, простые функции, для которых критичен хороший порядок переменных, не так уж необычны. Рассмотрим, например, f(xi,x2,... ,хп) = (xi V х2) А (х3 V хь) А • • A (in-i V хп), п четно; (100) это важная функция подмножества [rri%з • xn-i С гг2гг4 ... хп], и мы имеем B(f) = Bmin(f) = п + 2. Но размер БДР взлетает до B(f”) = B^^f) = 2n/2+1, когда тг представляет собой “порядок органных труб” а именно упорядочение, для которого f*(xi,x2, ...,хп) = (xi V rrn) A (rr2 V rrn_i) А - A (rrn/2 Vrrn/2+i). (101) Для упорядочения [rri - - - хп/2 С rrn/2+i - хп] получается такое же плохое поведение. В этих случаях БДР должна “помнить” состояния п/2 переменных, в то время как исходная формулировка (100) требует очень малого количества памяти. Каждая булева функция f имеет главную профилограмму (master profile chart), которая инкапсулирует множество всех ее возможных размеров B(f!T). Если f имеет п переменных, эта профилограмма имеет 2" вершин, по одной для каждого подмножества переменных; и она имеет п2п~1 ребер, по одному для каждой пары подмножеств, отличающихся только одним элементом. Например, главная профи-
7.1.4 БИНАРНЫЕ ДИАГРАММЫ РЕШЕНИЙ 283 лограмма для функции из (92) и (93) имеет вид (Ю2) Каждое ребро имеет вес, показанный здесь количеством линий; например, вес меж- ду {1,2} и {1,2,3} равен 3. Профилограмма имеет следующую интерпретацию: если X представляет собой подмножество к переменных, и если х £ X, то вес между X и X U х равен количеству подфункций f, которые зависят от х, когда перемен- ные X заменяются константами всеми 2к возможными способами. Например, если X = {1,2}, мы имеем /(0,0,хз,х4) = хз, /(0,1,13,3:4) = /(1,1,£3,2:4) = хз Л £4 и /(1,0, £3, £4) = хз V £4; все три эти подфункции зависят от £3, но только две из них зависят от £4, что и показано в виде весов под {1,2}. Имеется п! путей длиной п от 0 до {1,...,п}, и мы можем считать путь 0 —> {ai} —> {01,02} —»•••—» {ai,...,ап} соответствующим перестановке тг, если oitt = 1, огтг = 2, ..., аптг = п. Тогда сумма весов на пути тг равна B(f^), если добавить 2 для узлов стока. Например, путь 0 —> {4} —> {2,4} -» {1,2,4} —> {1,2,3,4} дает единственный способ достичь B(fn) = 6, как в (93). Обратите внимание, что главная профилограмма представляет собой знакомый граф — n-мерный куб, ребра которого оформлены так, что они подсчитывают ко- личество бусин в разных множествах подфункций. Граф имеет экспоненциальный размер, ri2n~1-, все же это намного меньше, чем общее количество перестановок, п!. В упр. 138 показано, что, когда п равно, скажем, 25 или меньше, вся профило- грамма может быть вычислена без особого труда, и мы можем найти оптимальную перестановку для любой заданной функции. Например, скрыто взвешенная битовая функция, как оказывается, имеет Bmin(/i2s) = 2090 и Bmax(/i2s) = 35441; минимум достигается при (1тг,... ,25тг) = (3, 5, 7, 9, 11, 13, 15, 17, 25, 24, 23, 22, 21, 20, 19, 18, 16, 14, 12, 10, 8, 6, 4, 2, 1), в то время как максимум представляет собой результат странной перестановки (22, 19, 17, 25, 15, 13, 11, 10, 9, 8, 7, 24, 6, 5, 4, 3, 2, 12, 1, 14, 23, 16, 18, 20, 21), которая сначала проверяет много “средних” переменных. Вместо вычисления всей главной профилограммы иногда можно сэкономить время, исследуя только то, что необходимо для определения пути с наименьшим весом (см. упр. 140.) Но когда п растет и функции становятся более причудливыми, вряд ли нам удастся точно определить Bmsn(/), поскольку задача поиска наилучше- го упорядочения является NP-полной (см. упр. 137). Мы определили профиль и квазипрофиль для одной булевой функции /, но те же идеи применимы и к произвольной базе БДР, которая содержит тп функций {/1,..., /т}- А именно, профиль представляет собой вектор (Ьо,..., Ъп), когда име- ется Ьк узлов на уровне к, а квазипрофиль имеет вид (Qo, • , 9п)> когда имеется qk
284 КОМБИНАТОРНЫЙ поиск 7.1.4 si S2 S3 S4 Рис. 26. Обмен двух верхних уровней базы БДР. Здесь (si,S2,S3,S4)—функции-источ- ники; (ti, t%, t3, <4)—целевые узлы, представляющие подфункции на нижних уровнях. узлов на уровне к соответствующей базы КДР; таблицы истинности этих функций имеют bk различных бусин порядка п — к и gk различных подтаблиц. Например, профиль функций (4 + 4)-битового сложения {/1,/2,/з>/4,/5} в (36) представля- ет собой (2,4,3,6,3,6,3,2,2), а квазипрофиль выводится в упр. 144. Аналогично концепция главной профилограммы приложима к т функциям, переменные кото- рых переупорядочиваются одновременно; и мы можем использовать ее для поиска -Bmin(/i, • • •, fm) и Bmax(/i, • • •, /т), минимума и максимума Ьо Ч-1- Ьп, взятых по всем профилям. ♦Локальное переупорядочение. Что произойдет с базой БДР, если мы решим сначала выполнить ветвление по х%, а затем — по xi, Х3,..., хп? На рис. 26 показано, что структура двух верхних уровней кардинально изменилась, но все прочие уровни остались прежними. Более детальный анализ показывает, что этот процесс обмена уровнями нетруд- но понять или реализовать. Узлы (Т) до обмена можно разделить на два вида, “связанные” и “одиночные” в зависимости от того, имеют ли они узлы (2) в качестве потомков; например, слева на рис. 26 имеются три связанных узла, на которые указывают si, и S3, в то время как S4 указывает на одиночный узел. Аналогично узлы (2) до обмена являются либо “видимыми” либо “скрытыми” в зависимости от того, представляют ли они независимые функции-источники или доступны только через узлы (Т); все четыре узла (2) в левой части рис. 26 являются скрытыми. После обмена одиночные узлы (Т) просто перемещаются на один уровень вниз; связанные же узлы превращаются в (2), в соответствии с процессом, который мы вскоре поясним. Скрытые узлы (2) (если таковые имеются) исчезают, а видимые просто перемещаются на один уровень вверх. В процессе превращения могут также появиться дополнительные узлы; такие узлы, помеченные (Т), называются нович- ками. Например, в правой части рис. 26 над 4г появляются два новичка. Этот процесс уменьшает общее количество узлов тогда и только тогда, когда скрытые узлы численно превосходят новичков. Обращение обмена представляет собой, конечно же, такой же обмен, но с из- мененными ролями (Т) и (2). Если начать с правой диаграммы на рис. 26, мож- но увидеть, что она имеет три связанных узла (с метками (2)) и один видимый (с меткой (Т)); два узла скрыты, а одиночных узлов нет. Процесс обмена в общем случае превращает (связанные, одиночные, видимые, скрытые) узлы в (связанные, видимые, одиночные, новые) узлы соответственно — после чего новички становятся скрытыми при обратном обмене, а изначально скрытые узлы вновь возрождаются как новички.
7.1.4 БИНАРНЫЕ ДИАГРАММЫ РЕШЕНИЙ 285 Понять превращения проще всего, если рассматривать все узлы ниже верхних двух уровней так, как если бы они были стоками, имеющими константные значения. Тогда каждая функция-источник f (xi, х?) зависит только от xi и х^; следовательно, она принимает четыре значения а = /(0,0), Ь = /(0,1), с = /(1,0) и d = /(1,1), где а, Ь, с и d представляют стоки. Можно предположить, что имеется q стоков, [~1~|, |~2~|, ..., |~д~|, и что 1 < а, Ь, с, d < q. Тогда /(xi,^) полностью описывается ее расширенной таблицей истинности, /(0,0)/(0,1)/(1,0)/(1,1) = abed. А после обмена мы остаемся с f(x2,xi), которая имеет расширенную таблицу истинности aebd. Например, рис. 26 можно перерисовать с использованием расширенных таблиц истинности в качестве меток узлов так, как показано на рис. 27. 1224 2324 1324 3344 1224 2234 1234 3434 Рис. 27. Другой способ представления преобразований на рис. 26. В этих терминах функция-источник abed указывает на одиночный узел, когда а = Ь / с = d, и на видимый узел, когда а = с / b = d; в противном случае она указывает на связанный узел (кроме случая а — b = с — d, когда она указывает непосредственно на сток). Связанный узел abed обычно имеет LO = ab и HI = cd, кроме случаев а = b или с = d; в этих исключительных случаях LO или HI представляет собой сток. После превращения аналогичным образом LO = ас и HI = bd, где эти узлы будут либо новичками, либо видимыми узлами, либо стоками (но не оба стоками одновременно). Интересным случаем является 1224, дочерние узлы которого 12 и 24 слева являются скрытыми узлами, в то время как 12 и 24 справа являются новичками. В упр. 147 рассматривается эффективная реализация этого преобразования, разработанная Ричардом Руделлом (Richard Rudell) в IEEE/ACM International Conf. Computer-Aided Design CAD-93 (1993), 42-47. Она обладает тем важным свой- ством, что не требует изменения указателей, за исключением указателей внутри уз- лов на двух верхних уровнях: все исходные узлы Sj продолжают указывать на одни и те же места в памяти компьютера, а все стоки сохраняют их предыдущую идентич- ность. Мы описывали такое преобразование как обмен между узлами (I) и (2), но в действительности такое же преобразование будет выполнять обмен (J) и (к), когда переменные Xj и х^ соответствуют ветвлениям на соседних уровнях. Дело в том, что верхние уровни любой базы БДР, по сути, определяют функции-источники для низших уровней, составляющих собственную базу БДР. Из нашего изучения сортировки мы знаем, что любое переупорядочение пере- менных базы БДР может быть выполнено путем последовательности обменов между соседними уровнями. В частности, мы можем использовать смежные обмены для преобразования подъема, выносящего переменную х^ на верхний уровень без вли- яния на относительный порядок других переменных. Легко, например, перенести на верхний уровень х^: мы просто выполняем обмены (4) <-> (З), затем (4) «-> (2),
286 КОМБИНАТОРНЫЙ ПОИСК 7.1.4 затем (4) «-> (Т), поскольку хц после второго обмена окажется на месте х2 и будет смежной с a?i. Поскольку многократные обмены могут приводить к любому упорядочению, иногда они способны увеличивать базу БДР до тех пор, пока она не оказывается слишком большой для работы с ней. Насколько плохим может оказаться один от- дельный обмен? Если ровно (s, t, v, h, и) узлов являются одиночными, связанными, видимыми, скрытыми и новичками, то верхние два уровня оказываются с s+t+v+v узлами; и это количество при тп функциях-источниках не превышает m+v < m + 2t, поскольку m > s + t + v. Таким образом, новый размер этих уровней не может превышать исходный более чем в два раза плюс количество источников. Если один обмен может удвоить размер, то перенос хк угрожает экспоненци- альным увеличением размера, поскольку при этом выполняется к — 1 обменов. Но, к счастью, в этом отношении переносы вверх не хуже отдельных обменов. Теорема J+. После операции подъема B(ff,<т + 2В(Д,..., /т). Доказательство. Пусть aia2 - - .а2к^1а2к—расширенная таблица истинности для функции-источника f(xi,... ,Хк)', узлы на более низких уровнях рассматриваются как стоки. После подъема расширенная таблица истинности для fn(xi,... ,Хк) = f(xi„,... ,Xkn) = f(x2, - ,Xk,Xi) имеет вид агаз .. .а2к_!а2а4 .. .а2к. Таким обра- зом, мы можем видеть, что каждая бусина на уровне j функции выводится из некоторой бусины на уровне j — 1 функции f для 1 < j < к; но каждая бусина на уровне j — 1 функции f порождает в не более двух бусин половинного разме- ра. Следовательно, если соответствующие профили для {/i,..., fm} и {/f,..., имеют вид (bo,...,bn) и (b'0,...,b'n), мы должны иметь b'o < т, Ь'г < 2Ь0, ..., 6^! < 25fc_2, b'k = bk, ..., b'n = bn. Таким образом, итоговое значение < m + , • - , fm) + Ьо +-1- bk-2 ~ bk-1 I Обратным к подъему является “спуск” который приводит к перемещению верх- ней переменной вниз на к — 1 уровней. Как и ранее, эта операция может быть реализована с помощью к — 1 обменов. Но в этот раз мы устанавливаем более слабую верхнюю границу для получающегося в результате размера. Теорема J-. После операции спуска B(ff,..., < B(fi,..., /т)2. Доказательство. Теперь расширенная таблица истинности из предыдущего доказа- тельства изменяется с czj... a2k на czj... o^k—i Jcz2fc—... o^k —- tzitz2fc—i_j_j ... cz2fc—itz2fe, “функцию застежки” 7.1.3-(76). В этом случае мы можем идентифицировать каж- дую бусину после спуска с помощью упорядоченной пары исходных подфункций, как в операции слияния (37) и (38). Например, при к = 3 таблица истинности 12345678 превращается в 15263748, бусина 1526 которой может рассматриваться как смесь 12 о 56. | Это доказательство указывает, почему может получиться квадратичный рост. Если, например, /(Т1,. . . , Xn) — Т1? Л/т(х2, • • , Хт+1 j Х2т+2> > Хп)' ^т{Хт+2-> • , X2m+li X2m^2i. . . , Хп)9 (103) где n = 1 + 2m + 2m, спуск на 2m уровней заменяет B(f) = 4n — 8m — 3 на B(f*) - 2п2 — 8т(п — т) — 2(n — 2m) + 1 «.
7.1.4 БИНАРНЫЕ ДИАГРАММЫ РЕШЕНИЙ 287 Поскольку подъем и спуск являются обратными друг к другу операциями, мы можем также использовать теоремы J+ и в обратном направлении: операция подъема уменьшит размер БДР до порядка его квадратного корня, но операция спуска не может уменьшить размер сильнее, чем в два раза. Это плохие новости для любителей спуска, хотя они могут утешиться знанием того, что спуск иногда оказывается единственным приемлемым способом получить из заданного упорядо- чения оптимальное. Теоремы J+ и J- опубликованы в В. Bollig, М. Lobbing and I. Wegener, Inf. Processing Letters 59 (1996), 233-239. (См. также упр. 149.) ♦Динамическое переупорядочение. На практике естественный способ упоря- дочения переменных зачастую напрашивается сам собой, в частности на основе теоремы М и сетей булевых модулей (рис. 23). Но иногда подходящее упорядочение неочевидно, и мы можем надеяться только на везение; возможно также, что нам на помощь придет компьютер и найдет требуемое упорядочение. Кроме того, даже если мы знаем хороший способ начать вычисления, упорядочение переменных, ведущее себя наилучшим образом на начальных этапах, может оказаться совершенно неудо- влетворительным на этапах более поздних. Следовательно, мы можем получить лучшие результаты, если не будем настаивать на фиксированном упорядочении. Вместо этого можно попытаться подстроить текущий порядок ветвления, когда база БДР станет громоздкой. Например, можно попытаться выполнить обмен ajj-i <-> Xj для 1 < j < п, отме- няя его, если в результате количество узлов при этом увеличивается; эти действия можно продолжать до тех пор, пока никакие обмены не будут давать улучшений. Этот метод легко реализуется, но, к сожалению, он слишком слаб и не дает боль- шого снижения размера. Гораздо лучший метод переупорядочения был предложен Ричардом Руделлом (Richard Rudell) одновременно с алгоритмом обмена “на месте” (без привлечения дополнительной памяти) из упр. 147. Как доказано, его метод, названный “просеиванием” (“sifting”) достаточно успешен. Идея заключается в том, чтобы взять переменную х^ и попытаться поднять или опустить ее на все прочие уровни, т. е., по сути, полностью удалить Xk из упорядочения, а затем вставить ее на- зад, выбрав место для вставки, которое позволит получить наименьший возможный размер БДР. Всю необходимую работу можно выполнить с помощью последователь- ности элементарных обменов. Алгоритм J (Просеивание переменной). Этот алгоритм переносит переменную в оптимальную позицию по отношению к текущему упорядочению других перемен- ных {xi,..., Хк-i, xic+i, - , хп} в заданной базе БДР. Он работет путем многократ- ного вызова процедуры из упр. 147 для обмена смежных переменных Xj-i <-> Xj. Во всем этом алгоритме S обозначает текущий размер базы БДР (общее количество узлов); операция обмена обычно изменяет S. Л. [Инициализация.] Установить р «— 0, j <— к и s «— S. Если к > п/2, перейти к шагу J5. J2. [Просев вверх.] Пока j > 1, обменивать Xj-i Xj и устанавливать j «— j — 1, s <— min(Sl, s).
288 КОМБИНАТОРНЫЙ поиск 7.1.4 J3. [Конец прохода.] Если р — 1, перейти к шагу J4. В противном случае, пока j ф к, устанавливать j «— j + 1 и обменивать Xj-i xj; затем установить р«— 1 и перейти к шагу J5. J4. [Завершение спуска.] Пока s ф S, устанавливать j «— j + 1 и обменивать Xj_i «-> Xj. Остановиться. J5. [Просев вниз.] Пока j<n, устанавливать j *— j + 1, обменивать Xj-i^Xj и уста- навливать s«— min (S', s). J6. [Конец прохода.] Если р = 1, перейти к шагу J7. В противном случае, пока j к, обменивать Xj-i w Xj и устанавливать j «— j — 1; затем устанавливать р <— 1 и перейти к шагу J2. J7. [Завершение подъема.] Пока s ф S, обменивать Xj-i Xj и устанавливать j «— j — 1. Остановиться. | Всякий раз, когда алгоритм J обменивает Xj-i <-> Xj, исходная переменная Хк в этот момент называется либо Xj-\, либо Xj. Общее количество обменов варьируется от около п до примерно 2.5п, в зависимости от fc и оптимальной конечной позиции Хк- Но можно существенно улучшить время работы без серьезного влияния на полу- чаемые результаты, если модифицировать шаги J2 и J5 так, чтобы выполнялся немедленный переход к шагам J3 и J6 соответственно, когда S становится больше, чем, скажем, 1.2s или даже 1.1s или 1.05s. В таких случаях дальнейший просев в том же направлении вряд ли уменьшит s. Процедура просева Руделла заключается в применении алгоритма J ровно п раз, по одному разу для каждой имеющейся в наличии переменной; см. упр. 151. Мы можем продолжать просев вновь и вновь, пока не прекратятся улучшения; но получаемый при этом выигрыш обычно не стоит затрачиваемых дополнительных усилий. Давайте рассмотрим подробный пример, чтобы сделать абстрактные идеи впол- не конкретными результатами. Мы заметили, что когда граничащие штаты распо- ложены в порядке ME NH VT МА RI СТ NY NJ РА DE MD DC VA NC SC GA FL AL TN KY WV OH MI IN IL WI MN IA MO AR MS LA TX OK KS NE SD ND MT WY CO NM AZ UT ID WA OR NV CA ' как в (17), то это приводит к БДР размером 428 узлов для функции независимого множества -((xal A tfl) V (xal A xGa) V (tal А ths) V • • V (тцт А twy) V (zv* A twv))- (105) Автор выбрал упорядочение (104) вручную, начав с исторического/географического перечисления штатов, которому его обучили еще ребенком, а затем пытался мини- мизировать размер границы между штатами-уже-перечисленными и штатами-еще- не-рассмотренными, так что БДР для (105) не нуждалась в “запоминании” слишком большого количества частичных результатов на любом уровне. Получающийся в результате размер, 428, достаточно хорош для функции от 49 переменных; но просеивание способно сделать его еще лучше. Например, рассмотрим WV. Вот некоторые возможности изменения его положения с изменяющимися размерами S. |RI|CT|NY|NJ|PA|DE|MD|DC|VA|NC|SC|GA|FL|AL|TN|KY|OH|MI|IN|IL| 424 422 417 415 414 412 411 410 412 412 415 420 421 426 425 427 428 428 436 442 453
7.1.4 БИНАРНЫЕ ДИАГРАММЫ РЕШЕНИЙ 289 Таким образом, можно сэкономить 428 — 410 = 18 узлов, если переместить WV в по- зицию между MD и DC. Применяя алгоритм J для просеивания всех переменных — сначала ME, затем NH, затем ..., затем СА, — мы закончим работу с упорядочением VT МА ME NH СТ RI NY NJ DE РА MD WV VA DC KY ОН NC GA SC AL FL MS TN IN . . IL MI AR TX LA OK MO IA WI MN CO NE KS MT ND WY SD UT AZ NM ID CA OR WA NV, ' ' а размер БДР при этом уменьшится до 345(!). Всего процесс просеивания включает 4663 обмена, требуя менее 4 миллионов обращений к памяти. Вместо аккуратного выбора упорядочения рассмотрим более ленивую альтер- нативу: начнем со списка штатов в алфавитном порядке AL AR AZ СА СО СТ DC DE FL GA IA ID IL IN KS KY LA MA MD ME MI MN MO MS MT NC ND NE NH NJ NM NV NY OH OK OR PA RI SC SD TN TX UT VA VT WA WI WV WY ' и будем работать с ним. Тогда БДР для (105) оказывается содержащей 306214 узлов; ее можно вычислить с помощью алгоритма S (примерно за 380 миллионов обращений к памяти) или с помощью (55) и алгоритма U (565 миллионов обращений к памяти). В этом случае просеивание дает существенно иные результаты: упомя- нутые 306 214 узлов превращаются во всего лишь 2871 со стоимостью 430 миллионов дополнительных обращений к памяти. Кроме того, стоимость просеивания умень- шается от 430 М/г до 210 М/г, если циклы в алгоритме J прерывать при S > 1.1s. (Более радикальный выбор прерывания при S > 1.05s снижает стоимость до 155 М/г; но тогда размер БДР снижается лишь до 2946.) В действительности мы можем поступить гораздо, гораздо лучше, если бу- дем просеивать переменные во время вычисления (105), не дожидаясь, пока будет полностью вычислена вся длинная последовательность дизъюнкций. Например, предположим, что мы автоматически вызываем просеивание, когда размер БДР в два раза превышает количество узлов, имевшихся в наличии после предыдущего просеивания. Тогда вычисление (105), начиная с алфавитного порядка (107), ав- томатически доводит БДР до размера всего лишь 419 узлов, после всего лишь 60 миллионов обращений к памяти! Ни гениальность человека, ни “геометрические соображения” не требуются, чтобы получить упорядочение NV OR ID WA AZ СА UT NM WY CO MT OK TX NE M0 KS LA AR MS TN IA ND MN SD /1Пй\ GA FL AL NC SC KY WI MI IL OH IN WV MD VA DC PA NJ DE NY CT RI NH ME VT MA ' которое выигрывает у авторского (104). Для его получения компьютер прибегает к автопросеиванию 39 раз на меньших БДР. Какое же упорядочение штатов является наилучшим для функции (105)? Ответ на этот вопрос, вероятно, никогда не будет известен достоверно, но можно сделать весьма неплохие предположения. Прежде всего, немного дополнительных просеи- ваний (108) дают лучшее упорядочение OR ID NV WA AZ СА UT NM WY CO MT SD MN ND IA NE OK KS TX M0 LA AR MS TN /1ЛО\ GA FL AL NC SC KY WI MI IL OH IN WV MD DC VA PA NJ DE NY CT RI NH ME VT MA ' с БДР размером 354. Дальнейшие просеивания не улучшают (109); но просеивание обладает ограниченной силой, поскольку исследует только (п — I)2 альтернативных упорядочений среди п\ возможных. (Действительно, в упр. 134 продемонстрирована функция от всего лишь четырех переменных, БДР которой не может быть улучшена путем просеивания, несмотря на то что упорядочение ее переменных не оптимально.) 10 Зак. 3331
290 КОМБИНАТОРНЫЙ ПОИСК 7.1.4 В нашем колчане имеется, однако, и другая стрела: можно воспользоваться главны- ми профилограммами, чтобы оптимизировать каждое окно из, скажем, шестнадцати последовательных уровней БДР. Имеется 34 таких окна; и алгоритм из упр. 139 достаточно быстро их оптимизирует. После примерно 9.6 Gp вычислений этот алгоритм находит нового чемпиона OR ID NV WA AZ CA ЦТ NM WY CO МТ SD MN ND IA NE OK KS TX MO LA AR MS WI KY MI IN IL AL TN FL NC SC GA WV OH MD DC VA PA NJ DE NY CT RI NH ME VT MA ' ' путем искусной перестановки 16 штатов в (109). Это упорядочение с БДР размером всего лишь 339, может оказаться оптимальным, поскольку не может быть улучше- но ни просеиванием, ни оптимизацией ни одного окна размером 25. Однако эта гипотеза остается весьма шаткой: упорядочение AL GA FL TN NC SC VA MS AR TX LA OK KY MO NM WV MD DC PA NJ DE OH IL MI , . IN IA NE KS WI SD WY ND MN MT UT CO ID CA AZ OR WA NV NY CT RI NH ME VT MA ' ' также оказывается неулучшаемым просеиваниями или оптимизацией окон разме- ром 25, но его БДР при этом имеет 606 узлов и очень далека от оптимальности. При улучшенном упорядочении (ПО) функция COLOR от 98 переменных из (73) требует только 22 037 узлов БДР вместо 25 579. Просеивание снижает это количе- ство до 16098. *Бесповторные функции. Булевы функции, такие как (xi 2> хг) ф ((хз = Х4) Axs), которые можно выразить в виде формул, в которых каждая переменная встреча- ется только один раз, образуют важный класс, для которого легко вычисляется наилучшее упорядочение переменных. Формально будем говорить, что /(xi,..., хп) является бесповторной функцией (функцией с однократным чтением), если либо (i) п = 1 и /(xi) = xi; либо (ii) /(xi,... ,хп) = g(xi,. ..,х*) о h(xk+i,- -,хп), где о представляет собой один из бинарных операторов {A, V, Л,\7, D, С, 5, С, Ф, =}, и где и д, и h являются бесповторными функциями. В случае (i) мы очевидным образом имеем B(f) = 3. А в случае (ii) в упр. 163 доказывается, что Г В(д) + B(h) - 2, t В(д) + B(h, h) - 2, если о е {Л, V, Л, V, D, С, D, С}; если о G {ф, =}. (112) Чтобы получить рекуррентное соотношение, нам нужны также аналогичные фор- мулы 4, 2В(д) + B(h, h) - 4, В(д,д) + B(h,h) — 2, B(f,f) = < если п = 1; если о е {Л, V, А, V, D, С, 5, С}; если о G {ф, =}. (ИЗ) Особенно интересное семейство бесповторных функций получается, когда мы определяем > • • • > Х2”»+1) — Y7m(xi,. . . , X2m) Л Vm(^2m+1 j • • , X2m+1), (114) Цп-l-l (xi,. . . , X2m+1) — Um(x1,. . . , X2^*) Ф Um(x2m-j-l, • • • , X2m+i), и uo(^i) = ttoCci) = xi; например, нз(хх,... ,xg) = ((xi Лхг)Ф(хз ЛХ4)) A ((xsAxe)® (X7 Axe))- В упр. 165 показано, что размеры БДР для этих функций, вычисляемые
7.1.4 БИНАРНЫЕ ДИАГРАММЫ РЕШЕНИЙ 291 с помощью (112) и (113), включают числа Фибоначчи: B(u2m) = 2mF2m+2 + 2, B(u2m+1) = 2m+1F2m+2 + 2; B(v2m) = 2mF2m+2+2, B(v2m+1) = 2mF2m+4 + 2. 1 } Таким образом, um и vm представляют собой функции от п = 2т переменных, размеры БДР которых растут как 0(2т/2</>"*) = 0(п^), где 0 = 1/2 + 1g</>« 1.19424. (116) В действительности размеры БДР в (115) являются наилучшими для функций и и v среди всех перестановок переменных в силу фундаментального результата, по- лученного М. Зауэрхофом (М. Sauerhoff), И. Вегенером (I. Wegener) и Р. Верхнером (R. Werchner). Теорема W. Если f(xi,..., хп) = g(xi,..., Хк)°h(xk+i, • • -, хп) является бесповтор- ной функцией, существует перестановка тг, которая минимизирует B(f'rr) и B(f'rr, f*) одновременно и в которой переменные {xi,..., встречаются либо первыми, либо последними. Доказательство. Любая перестановка (1тг,..., птг) естественным образом приводит к “неперетасованной” перестановке (1<т,... ,па), в которой первыми к элементами являются {1,..., к}, а последними п — к элементами являются {к + 1,... ,п} при сохранении порядка тг в пределах каждой группы. Например, если к = 7, п = 9 и (1тг,..., 9тг) = (3,1,4,5,9,2,6,8,7), мы имеем (1сг,..., 9<т) = (3,1,4,5,2,6,7,9,8). В упр. 166 доказывается, что при соответствующих обстоятельствах B(Ja) < B(f^) ИВ(Г,Г)<В(Г,Г). I Используя эту теорему вместе с (112) и (113), можно легко оптимизировать порядок переменных для БДР любой бесповторной функции. Рассмотрим, напри- мер, (xi V х2) ф (хз Л х4 Л xs) = p(xi,x2) ф h(x3,x4,xs). Мы имеем В(д) = 4 и В(д,д) = 6; B(h) = 5 и B(h, h) = 8. Для общей формулы f = уф h теорема W гласит, что имеются два кандидата на наилучшее упорядочение (1тг,..., 5тг), а имен- но (1,2,3,4,5) и (4,5,1,2,3). Первое из них дает B(fn) = В(д) + B(h,h) — 2 = 10; второе с B(fn) = B(h) + В(д, д) —2 = 9 превосходит его. Алгоритм из упр. 167 находит наилучшую перестановку тг для любой беспо- вторной функции f(xi,... ,хп) за О(п) шагов. Более того, тщательный анализ доказывает, что в наилучшем упорядочении B(fn) = О(п@), где 0— константа из (116). (См. упр. 168.) *Умножение. Одними из наиболее интересных в математическом отношении буле- вых функций являются т + п бит, получающихся при умножении тп-битового числа на п-битовое: (xm...x2xi)2 х (yn...y2yi)2 = (zm+„...z2zi)2. (117) В частности, “старший бит” zm+n и “средний бит” zn при т = п особенно примеча- тельны. Чтобы устранить зависимость этой записи от т и п, можно представить, что т = п = оо, полагая Xi = yj = 0 для всех i > т и j > п; тогда каждое Zk является функцией от 2к переменных, Zk = Zk(xi,... ,Xk',yi, ,уь), а именно средним битом произведения (хк • . xi)2 х (?д ... yi)2.
292 КОМБИНАТОРНЫЙ ПОИСК 7.1.4 Таблица 1 Наилучшее и наихудшее упорядочения для среднего бита zn умножения ХЦХ10Х9Х7Х8Х6Х13Х15 X Х16Х14Х12Х5Х4Х3Х2Х1 Bmint^fi) = 756 Х24Х20Х18Х16Х9Х8Х10ХЦХ7Х12Х14Х21 X Х22Х19Х17Х15Х6Х5Х4Х3Х2Х1Х13Х2З Bmin(Zl2) = 21931 Х10ХЦХ9Х8Х7Х16Х6Х15 X 3:5X4X3X12X13X2X1X14 Bm&x(Zs) = 6791 Х16Х17Х15Х14Х24Х13Х12Х11Х20Х10Х9Х23 X £33:73:6X5X18X4X22X3X2X19X1X21 Bmax(-Z12) = 866283 Таблица 2 Наилучшее и наихудшее упорядочения для всех битов {zi,..., zm_|-n} умножения Х11Х16Х15Х14Х13Х12Х10Х9 X Х8Х7Х6Х5Х4Х3Х2Х1 Bmi„(Zg^g,..., Zg*g}) = 9700 #15#17#24#23#22#21#20#19#18#16#14#13 X #1#2#3#4#5#6#7#8#9#10#11#12 Bmin(^1(^12,..., Z™2) = 648957 X10X8X9X13X2X1X11X7 X 3:16X5X15X6X4X14X3X12 Втах(4^,..., Z$>) = 28678 Х17Х22Х14Х1зХ1бХ10Х20ХзХ2Х1Х1дЗ:12 X Х24Х15ХдХ8Х21Х7ХбХцХ2зХ5Х43?18 Bm^(Z^12...........Z^2) = 4224195 #17#16#10#9#ll#12 - - - #15#18#19#24#23 • • • #20 X #i#2#3#4#5#6#7#8 Bmi„(Z$8.....Z$) = 157061 X13X14X12X15X16X17X22X10X8X7X18X9X2X1X19X6 X Х24ХЦХ21Х5Х4Х23Х3Х2О Bmax(Z$8,..., Z&V) = 1236251 Средний бит оказывается трудным с точки зрения БДР, даже если у является константой. Пусть ZniO(xi,..., хп) = Zn(xi,, хп; ai,..., ап), где а = (ап ... ai)2. Теорема X. Существует константа а, такая, что Bmin(Zn<a) > • 2 LTi/2J — 2. Доказательство. [П. Вёльфель (Р. Woelfel), J. Computer and System Sci. 71 (2005), 520-534.] Можно считать, что п = 2t четно, поскольку Zzt+i.ia = ^2t,a- Пусть х = (xn.. -Xi)2 и т = ([птг < t]... [1тг< t])2. Тогда х = p + q, где q = xSzm представляет “известные” биты х после t ветвлений в БДР для Zn<a с упорядочением тг, а р = х&т представляет пока еще неизвестные биты. Пусть Р = {х&щ|0<х<2п} и Q = {х & тп | 0 < х < 2n}. (118) Для любого фиксированного а функция Zn<a имеет 2* подфункций /9(р) = ((pa + qa) » (n - 1)) & 1, q G Q. (119) Мы хотим показать, что некоторое n-битовое число а будет делать многие из этих .подфункций различными; другими словами, мы хотим найти большое подмножество Q* Q Q, такое, что q G Q* и д' G Q*, и q ± д' влечет за собой /9(р) 7^ fq’(p) для некоторого р G Р. (120) В упр. 176 детально рассматривается, как это может быть сделано. | Хорошая верхняя граница для размера БДР для среднего бита, когда ни один операнд не является константой, была найдена в работе К. Amano and A. Maruoka, Discrete Applied Math. 155 (2007), 1224-1232.
7.1.4 БИНАРНЫЕ ДИАГРАММЫ РЕШЕНИЙ 293 Теорема А. Пусть f{xi,... ,xzn) = Zn{xi,xz,... ,x2n-i',x2,X4,... ,x2n)- Тогда B{f) < Q{f) < ^2Г6п/51. (121) Доказательство. Рассмотрим два n-битовых числа, х = 2кхь + xi и у = 2куь + yi, с п — к неизвестными битами в каждой из их старших частей (хн,Ун), в то время как обе их fc-битовые младшие части {xi, yi) известны. Тогда средний бит ху определяется путем сложения трех (п — /г)-битовых величин при к > п/2, а именно Xhyi mod 2п~к, xiyh mod 2п~к и {xiyC§>k) mod 2п~к. Следовательно, уровень 2к КДР требует “запоминания” только п — к младших битов каждой из предшествующих величин xi, yi и xiyi^k, всего Зп—ЗА: бит, и мы имеем q2k < 23n-3fc в квазипрофиле f. Упр. 177 завершает доказательство. | Амано (Amano) и Маруока (Maruoka) открыли также другую важную верхнюю границу. Пусть Zm,n(Ti,..., хт; yi,..., уп) означает р-й бит zp произведения (117). Теорема Y. Для всех констант (ат... «1)2 и для всех р БДР и КДР для функции Zm^n(ai,...,ат; xi,..., хп) имеют менее 3 • 2^п+1^2 узлов. Доказательство. В упр. 180 доказывается, что для этой функции q^ < 2п+1~к. Теорема будет доказана, когда мы объединим этот результат с очевидной верхней границей < 2к. | Теорема Y показывает, что нижняя граница теоремы X является наилучшей возможной, если не считать константного множителя. Она также показывает, что база БДР для всех т + п функций произведения Zm,n(xi,...,хт;xm+i,...,хт+п) не столь велика, как величина &{2т+п), которую мы получаем почти для всех экземпляров т + п функций от т + п переменных. Следствие Y. Если m <п, B(Zm?n, • •, Z^n^) < 3(m + n)2m+(n+1)/2. | Наилучшее упорядочение переменных для функции среднего бита Zn и для полной базы БДР остается загадкой, но эмпирические результаты для малых тип дают основания для гипотезы, что верхние границы из теоремы А и следствия Y недалеки от истины (табл. 1 и 2). Вот, например, наилучшие результаты Zn при п < 12. п = 1 2 3 4 5 6 7 8 9 10 11 12 Bmin{Zn) = 4 8 14 31 63 136 315 756 1717 4026 9654 21931 ^Gn/5 2 5 12 28 64 147 338 776 1783 4096 9410 21619 Значения Bmax/Bmin по отношению к полной базе БДР {Zm.n, ,Z^nn^} в табл. 2 на удивление малы. Следовательно, все упорядочения для этой задачи могут оказаться грубо эквивалентными. БДР с подавлением нулей: комбинаторная альтернатива. При применении БДР к комбинаторным задачам зачастую беглого взгляда на данные достаточно, чтобы увидеть, что большинство полей HI просто указывает на [Т]. В таких случа- ях лучше использовать иную структуру данных, носящую название бинарной диа- граммы с подавлением нулей {zero-suppressed binary decision diagram), или “НДР” (“ZDD”) для краткости, введенную Шин-ичи Минато (Shin-ichi Minato) [АСМ/IEEE Design Automation Conf. 30 (1993), 272-277]. НДР, подобно БДР, имеет узлы, но
294 КОМБИНАТОРНЫЙ ПОИСК 7.1.4 интерпретируются они иначе: когда узел (Т) выполняет ветвление в узел (J) для j > i + 1, это означает, что булева функция ложна, если только не выполняется условие - • • • = %j-i = 0. Например, БДР для независимых множеств и ядер в (12) имеют много узлов с HI = [Т]. Эти узлы можно убрать из соответствующих НДР, хотя при этом и потребуется добавить несколько новых узлов. Обратите внимание, что в НДР в силу новых соглашений мы можем иметь LO = HI. Кроме того, пример слева показывает, что НДР не обязана содержать [Т] вообще! Из каждой диаграммы (12) в результате оказывается удалено около 40% узлов. Один из хороших способов понимания НДР заключается в рассмотрении ее как сжатого представления семейства множеств. Действительно, бинарные диаграм- мы решений с подавлением нулей в (122) представляют соответственно семейства всех независимых множеств и всех ядер Св- Корневой узел НДР указывает наи- меньший элемент, имеющийся как минимум в одном из множеств; его ветви HI и LO представляют остаточные подсемейства, которые соответственно содержат и не содержат этот элемент; и т. д. Внизу [Т] представляет пустое семейство ‘0’, а {т| представляет ‘{0}’. Например, правая НДР в (122) представляет семей- ство {{1,3,5}, {1,4}, {2,4,6}, {2,5}, {3,6}}, поскольку ветвь HI корня представляет {{3,5}, {4}}, а ветвь LO —{{2,4,6}, {2,5}, {3,6}}. Каждая булева функция /(xi,... ,хп), конечно, эквивалентна семейству под- множеств множества {1,..., п}, и наоборот. Но концепция семейства дает нам точку зрения, отличную от функциональной. Например, семейство {{1,3}, {2}, {2,5}} имеет одну и ту же НДР для всех п > 5; но если, скажем, п = 7, то БДР для функ- ции /(xi,... ,хг), которая определяет это семейство, нуждается в дополнительных узлах, обеспечивающих х^ = х§ = x-j = 0, когда /(х) = 1. Почти каждое понятие, которое мы рассматривали при обсуждении бинарных диаграмм решений, имеет своего двойника в теории бинарных диаграмм решений с подавлением нулей, хотя фактические структуры данных зачастую поразительно отличаются. Мы можем, например, взять таблицу истинности для любой заданной функции /(xi,..., хп) и построить ее уникальную НДР простым способом, анало- гичным построению ее БДР, как показано в (5). Мы знаем, что узлы БДР для / соот- ветствуют “бусинам” таблицы истинности /; аналогично узлы НДР соответствуют “г-бусинам", которые представляют собой бинарные строки вида а/3, где |о| = |/3| и (3 0... 0, или |о| = |/3| — 1. Любая бинарная строка, соответствующая уникальной
7.1.4 БИНАРНЫЕ ДИАГРАММЫ РЕШЕНИЙ 295 z-бусине, получается путем при необходимости многократного отсечения правой половины, пока строка не будет иметь нечетную длину или ее правая часть не станет ненулевой. Уважаемый читатель, пожалуйста, поработайте сейчас над упр. 187. (Это не шутка.) z-профиль , хп) представляет собой (zo,..., zn), где z* — количество z-бусин порядка п — к в таблице истинности f для 0 < к < п, а именно коли- чество узлов (fc+1) в НДР; zn равно количеству стоков. Для общего количества узлов мы записываем Z(f) = zo + • • • + zn. Например, функции в (122) имеют z-профили (1,1,2,2,2,1,1) и (1,1,2,2,1,1,2) соответственно, так что Z(f) = 10 в каждом случае. Основные соотношения (83)-(85) между профилями и квазипрофилями остают- ся истинными и для z-профилей, но дк подсчитывает только ненулевые подтаблицы порядка п — к: qk > zk для 0 < к < п; (123) qk < 1 + zo Ч----Ь Zfc_i и qk < zk-i--Г zn для 0 < к < п; (124) Z(f) > 2qk — 1 для 0 < к < п. (125) Следовательно, размеры БДР и НДР не могут отличаться слишком сильно: 7? 77 ад < -(В(/) + 1) + 1 и B(f) < _(ад + 1) + 2. (126) С другой стороны, множитель 50, получающийся при п = 100, не настолько мал, чтобы его можно было не замечать. Когда бинарные диаграммы решений с подавлением нулей используются для поиска независимых множеств и ядер граничащих штатов в исходном порядке (17), размеры БДР, равные 428 и 780, опускаются до 177 и 385 соответственно. Просе- ивание уменьшает эти размеры НДР до 160 и 335. Как вам такой результат? Это удивительно хорошо для сложных функций от 49 переменных. Зная НДР для fug, мы можем выполнить синтез для получения НДР для ff\g, f\/g, f®g и так далее, используя алгоритмы, очень похожие на методы, применявши- еся для БДР. Кроме того, мы можем подсчитать и/или оптимизировать решения f с помощью аналогов алгоритмов С и В; фактически методы подсчета и оптимизации на основе НДР оказываются более простыми по сравнению с соответствующими алгоритмами на основе БДР. С помощью небольшой модификации БДР-методов можно также выполнять динамическое переупорядочение переменных путем просе- ивания. В упр. 197-209 обсуждаются детали всех основных НДР-процедур. В общем случае НДР обычно оказывается лучше БДР при работе с функциями с разреженными решениями, в том смысле, что при f(x) = 1 значение их достаточно мало. И если f(x) сама по себе разреженная, в том смысле, что имеет относительно немного решений, то ситуация оказывается еще лучше. Например, НДР хорошо подходит для задачи точного покрытия, определяемой матрицей из нулей и единиц размером т х п: мы хотим найти все способы выбора строк, которые дают в сумме (1,1,..., 1). Наша цель может быть, скажем, покрытие
296 КОМБИНАТОРНЫЙ ПОИСК 7.1.4 шахматной доски 32 костями домино, наподобие — — Это задача точного покрытия, матрица которой имеет 8x8= 64 столбцов, по одному для каждой ячейки. Всего имеется 2x7x8 = 112 строк, по одной для каждой пары смежных ячеек: /1 10000000000...00000000000\ 100000001000...00000000000 01 1000000000...00000000000 010000000100...00000000000 000000000000...00000001 100 000000000000...000000001 10 \000000000000...00000000011/ (128) Пусть переменная Xj представляет выбор (или напротив, не выбор) строки j. Таким образом, три решения в (127) имеют (гьЯг^з^ь.-.^пв^ш^пг) = (1, 0,0,0,..., 1,0,1), (1,0,0,0,..., 1,0,1) и (0,1,0,1,..., 1,0,0) соответственно. В общем случае решение задачи точного покрытия представляется функцией п п f(x1,...,xm) = Д51(Х>) = Д[!/Х3 = 1], (129) j=i j=i где Xj = {xi | atj = 1} и (а<з)—заданная матрица. Как оказывается, НДР для покрытия шахматной доски домино имеет только Z(J) = 2300 узлов, несмотря на то что в данном случае функция f имеет тп = 112 переменных. Мы можем использовать ее для доказательства того факта, что имеется ровно 12 988816 покрытий, таких как (127). Аналогично можно исследовать и более экзотические виды покрытий. Напри- мер, в (130) шахматная доска покрывается мономино, домино и/или тримино, т. е. многоуголь- никами, состоящими из одного, двух или трех квадратов, соединенных сторонами. Всего имеется ровно 92109458286284989468604 способа такого покрытия(!); это число мы можем вычислить почти мгновенно, выполнив всего 75 миллионов обра- щений к памяти и образовав НДР размером 512 227 от 468 переменных.
7.1.4 БИНАРНЫЕ ДИАГРАММЫ РЕШЕНИЙ 297 Можно разработать специальный алгоритм для поиска НДР для любой за- данной задачи точного покрытия; можно также синтезировать результат, исполь- зуя (129). См. упр. 212. Кстати, задача покрытия костями домино, как в (127), эквивалентна поиску совершенного паросочетания графа решетки Pg □ Pg, являющегося двудольным. В разделе 7.5.1 мы увидим, что имеются эффективные алгоритмы, позволяющие изучать совершенные паросочетания графов, гораздо больших, чем те, с которыми можно работать методами, основанными на БДР/НДР. Фактически имеется даже явная формула для количества покрытий костями домино решетки размером тп х п. Напротив, обобщенные покрытия, такие как (130), оказываются в более широкой категории задач на гиперграфах, для которых вряд ли существуют методы решения с полиномиальным временем при тп, п —> оо. Интересный вариант покрытия костями домино под назва- нием “обрезанная шахматная доска” был рассмотрен Максом Влеком (Max Black) в его книге Critical Thinking (1946), с. 142 и 394: предположим, что мы удалили противоположные уг- лы шахматной доски и пытаемся покрыть остатки 31 костью домино. Очень легко разместить 30 из них, например, как показано здесь; но затем мы застреваем. Действительно, если рассмотреть соответствующую задачу точного покрытия 108 х 62, но отбросить два последних ограничения из (129), то можно получить НДР с 1224 узлами, из которой можно вывести, что имеется 324480 способов выбрать строки, которые суммируются в (1,1,..., 1,1, *, *). Но каждое из этих решений имеет как минимум две единицы в столбце 61; следовательно, НДР приводится к [Т] после выполне- ния И в ограничении [i/Xgi^l]- (“Критичное мышление” поясняет, почему; см. упр. 213.) Этот пример напоминает нам, что (i) размер окончательной НДР или БДР в вычислении может быть гораздо меньше, чем время, необходимое для ее вычисления; и что (ii) использование мозга может сэкономить огромное количество машинного времени... НДР как словари. Давайте теперь немного сменим тему и заметим, что НДР имеют массу преимуществ и в приложениях совершенно иного типа. Их мож- но использовать, например, для представления пятибуквенных английских слов, множества W0RDS(5757) из Stanford GraphBase, с которыми мы уже встречались в начале этой главы. Один из способов сделать это заключается в рассмотрении функции f(xi,... ,Х2б), которая определена таким образом, что она возвращает 1 тогда и только тогда, когда пять чисел (xi... 3:5)2, (хе .. -хю)2, (х21...Х25)г кодируют буквы английского слова (здесь а = (00001)2, -.., z = (11010)2). Напри- мер, /(0,0,1,1,1,0,1,1,1,1,0,1,1,1,1,0,0,1,1,0,1,1,0,0, Х25) = Х25- Эта функция от 25 переменных имеет Z(f) = 6233 узла, что не так уж плохо для представления 5757 слов. Конечно, в главе 6 мы изучали множество других способов представления 5757 слов. Подход с использованием НДР не может тягаться с бинарными деревьями, лучами или хеш-таблицами, если все, что нам нужно,—это простой поиск. Но в случае НДР мы можем также получать частично специфицированные данные, или данные, которые соответствуют ключу только приближенно; можно легко об- рабатывать многие сложные запросы.
298 КОМБИНАТОРНЫЙ ПОИСК 7.1.4 Кроме того, при использовании НДР нам не нужно слишком беспокоиться о большом количестве переменных. Вместо работы с 25 переменными Xj, рассмот- ренными выше, можно представить эти пятибуквенные слова как разреженную функцию F(ai,..., Zi, а2,..., Z2,..., as,..., zs), которая имеет 26 х 5 = 130 перемен- ных, где переменная аг (например) контролирует, является ли вторая буква слова буквой ‘а’. Чтобы указать, что crazy является словом, мы делаем F истинной, когда ci = тг = аз = Z4 = Уб = 1, а все другие переменные равны 0. Или, что то же самое, мы рассматриваем F как семейство, состоящее из 5757 подмножеств: {wi,h2, ±з, С4,Ьб}, {11,Ь2,ез,Г4,е5} и т. д. В этом случае 130 переменных размер НДР Z(F) оказывается равным только 5020 вместо 6233. Кстати, B(F) равно 46189 — что более чем в девять раз превосходит Z(F). Но в случае 25 переменных отношение B(J)/Z(f) равно всего лишь 8870/6233 ~ 1.4. Мир НДР, несмотря на схожесть алгоритмов и теории, во многом отличается от мира БДР. Одним из следствий этого различия является необходимость в новых прими- тивных операциях, с помощью которых можно легко построить сложные семейства подмножеств из элементарных семейств. Обратите внимание, что простое под- множество {fi,иг,43,114,Уб} в действительности представляет собой очень скучную булеву функцию ai Л • • • Л ё1 Л fi Л gi Л • • • Л ?2 Л а2 Л v2 Л • • Л х5 Л у5 Л z5, (131) минитерм из 130 булевых переменных. В упр. 203 рассматривается важная алгебра семейств, в которой это подмножество выражается более естественным путем как ‘f lUi^LlnsLJiiiLJye’. С помощью алгебры семейств можно легко описать и вычислить много интересных коллекций слов и фрагментов слов (см. упр. 222). НДР для представления простых путей. Важная связь между произвольными ориентированными ациклическими графами и специальным классом НДР показана на рис. 28. Когда каждая вершина-источник ориентированного ациклического гра- фа имеет исходящую степень 1, а каждая вершина-сток имеет входящую степень, равную 1, НДР для всех ориентированных путей от источника до стока имеет, по сути, ту же “форму” что и исходный ориентированный ациклический граф. Переменные в этой НДР являются дугами ориентированного ациклического графа в подходящем топологическом порядке. (См. упр. 224.) Рис. 28. Ориентированный ацикличес- кий граф и НДР для его путей от ис- точника к стоку. Дуги графа соответ- ствуют вершинам НДР. Все ветви к [±] в НДР опущены, чтобы более ясно пока- зать структурное подобие. Можно также использовать НДР для представления простых путей в неориентированном графе. Например, имеется 12 способов пройти от верхнего левого угла решетки 3 х 3 в нижний правый угол, не посещая
7.1.4 БИНАРНЫЕ ДИАГРАММЫ РЕШЕНИЙ 299 никакую из вершин дважды. ffiffiffiffifflfflffiffiffifflffiffi (132) Эти пути можно представить с помощью НДР, показанной справа, которая харак- теризует все множества подходящих вершин. Например, мы получаем первый путь, беря Ш-ветви в (13), (36), (68) и (89) этой НДР. (Как и на рис. 28, эта (й)- <и) диаграмма упрощена путем отбрасывания всех не интересующих @ @ нас ветвей LO, которые просто ведут в [Т].) Конечно, эта НДР не (Ж X является наилучшим способом представления (132), поскольку это семейство путей имеет только 12 членов. Но на большей решетке FgE-Pe количество простых путей из угла в угол оказывается равным /SfZ лК | 789 360 053 252; и все они могут быть представлены НДР не более (I / I X И чем с 33 580 узлами. В упр. 225 поясняется, как быстро построить АД/ \ X // такую НДР. ут Аналогичный алгоритм, который рассматривается в упр. 226, строит НДР, которая представляет все циклы заданного графа. Ш С помощью НДР с размером 22 275 можно вывести, что решетка Pg □ Pg имеет ровно 603841648931 простой цикл. Эта НДР может также являться наилучшим способом представления всех этих циклов в компьютере и наилучшим способом их систематической генерации при необходимости. Те же идеи работают и в случае графов из “реального мира” не имеющих изящной математической структуры. Например, их можно использовать для от- вета на вопрос, заданный в 2008году автору Рэндалом Брайантом (Randal Bryant): “Предположим, я хочу совершить тур по континентальной части США, посещая все столицы штатов и проезжая через каждый штат только один раз. Какой марш- рут мне выбрать, чтобы минимизировать общее расстояние?” Приведенная далее диаграмма показывает кратчайшие расстояния между соседними столицами штатов при ограничении, что каждый путь пересекает только одну границу штата. Задача заключается в выборе подмножества ребер, которые образуют гамильтонов путь с наименьшей общей длиной.* * Традиционно приведем соответствующий граф для областей и областных центров Украины (для экономии места названия областных центров пришлось сократить до двух букв). Данные
300 КОМБИНАТОРНЫЙ ПОИСК 7.1.4 Понятно, что каждый гамильтонов путь в этом графе должен начинаться или заканчиваться в Огасте, штат Мэн (ME). Предположим, что мы начинаем путе- шествие из Сакраменто, штат Калифорния (СА). Действуя, как и ранее, мы можем найти НДР, характеризующую все пути от СА до ME; оказывается, что эта НДР имеет только 7850 узлов и быстро находит, что всего возможно 437 525 772 584 простых пути от СА до ME. Фактически производящая функция по числу ребер имеет вид 4г11 + 124г12 + 1539г13 + + 33385461г46 + 2707075г47; (134) так что наидлиннейшие такие пути оказываются гамильтоновыми, и их имеется ровно 2 707 075. Кроме того, в упр. 227 показано, как построить наименьшую НДР размером 4726, которая описывает только гамильтоновы пути от СА до ME. Этот эксперимент можно повторить для каждого из штатов вместо Калифор- нии. (Начальную точку лучше выбирать вне Новой Англии, если мы хотим быть приняты в Нью-Йорке, являющемся точкой сочленения этого графа.) Например, имеется 483194 гамильтоновых пути от N J до ME. Но в упр. 228 показано, как постро- ить единую НДР размером 28808 для семейства всех гамильтоновых путей от ME до любого другого конечного штата, общее число каковых составляет 68 656 026. Ответ для задачи Брайанта получается немедленно с помощью алгоритма В. (Читатель может попытаться найти кратчайший маршрут вручную, перед тем как обратиться к упр. 230 и узнать, каково же наилучшее решение этой задачи.) *НДР и простые импликанты. В заключение давайте рассмотрим поучительное приложение, в котором одновременно используются и БДР, и НДР. Согласно тео- реме 7.1.1Q каждая монотонная булева функция f имеет единственное кратчайшее двухуровневое представление в виде ИЛИ, примененного к ряду И, именуемое дизъ- юнктивной простой формой—дизъюнкции всех ее простых импликант. Простые импликанты соответствуют минимальным точкам, где f(x) = 1, а именно бинарным векторам х, для которых мы имеем fix') = 1 и х' С х тогда и только тогда, когда х' = х. Если, например, /(Т1,Т2,Т3) =Х1 V (х2 Ат3) (135) то простыми импликантами f являются xi и х2 Атз, в то время как минимальными решениями являются Т1Т2Т3 = 100 и 011. Эти минимальные решения можно также удобно выразить как щ и ег U вз, используя алгебру семейств (см. упр. 203). о расстояниях между областными центрами Украины взяты на сайте http://e-meridian.eu/.— Примеч. пер. 256 144 137 204 200 289 (Уд)— 298 —(ДО)— 164 —(МП) (133, у)
7.1.4 БИНАРНЫЕ ДИАГРАММЫ РЕШЕНИЙ 301 В общем случае х^ Л • • • Л х^ является простой импликантой монотонной функ- ции f тогда и только тогда, когда е», LJ • • • LJ ejs является минимальным решением f. Таким образом, мы можем рассматривать простые импликанты f PI(f) как ее се- мейство минимальных решений. Заметим, однако, что х^ Л Л Xia С Xj, Л • • • Л Xjt тогда и только тогда, когда е$, LJ • LJ D ед LJ • • • LJ ед; так что говорить о том, что одна простая импликанта “содержит” другую, не совсем корректно. Вместо этого мы говорим, что короткая импликанта “поглощает” длинную. Любопытное явление показано в примере (135): диаграмма® представля- ет собой не только БДР для f, но и НДР для PI(/)! Аналогично на рис. 21 в начале этого раздела показана не только БДР для (а^а^з), но и НДР для Р1((зцхзхз)). С другой стороны, пусть д = (xi Л хз) V Х2- Тогда БДР для д представляет собой > но НДР для PI(g) имеет вид . Что же тут происходит? ш m ш ш ш ш Ключ к решению этой тайны лежит в рекурсивной структуре, на которой осно- ваны БДР и НДР. Каждая булева функция может быть представлена в виде f(xi,...,xn) = (хД f0: fi) = (xi Л/о) V (rri АД), (136) где fc — значение f, когда xi заменено на с. Когда f монотонна, мы также имеем f = foV(xi Лfi), поскольку fo Q fi- Если fo fi, БДР для f получается путем создания узла (Г), ветви LO и HI которого указывают на БДР для /о и fi- Аналогично нетрудно видеть, что простыми импликантами f являются Р1(7) = Р1(/о) и (в! и (Р1(Л) \Р1(/о))). (137) (См. упр. 253.) Это рекуррентное соотношение определяет НДР для PI(f), если мы добавим к нему условие завершения рекурсии для константных функций: НДР для Р1(0) и Р1(1) представляют собой рГ| и [т]. Будем называть булеву функцию f “легкой” (sweet), если она монотонна и если НДР для Pl(f) в точности такая же, как и БДР для f. Ясно, что константные функции — легкие. А неконстантную легкость легко охарактеризовать. Теорема S. Булева функция, зависящая от xi, является легкой тогда и только тогда, когда ее простыми импликантами являются Р U (a?i LJ Q), где Р и Q —легкие и не зависят от xi и каждый член Р поглощается некоторым членом Q. Доказательство. См. упр. 246. (То, что “Р и Q являются легкими” означает, что каждое из них является семейством простых импликант, которое определяет легкую булеву функцию.) | Следствие S. Функция связности любого графа является легкой. Доказательство. Простые импликанты функции связности f представляет собой остовные деревья графа. Каждое остовное дерево, не включающее дугу xi, име- ет как минимум одно поддерево, которое будет остовным при добавлении к нему дуги xi. Кроме того, все подфункции f представляют собой функции связности меньших графов. | Таким образом, например, БДР на рис. 22, которая определяет все 431 связанных подграфа Р3 0Р3, представляет также собой НДР, которая определяет все его 192 остовных дерева.
302 КОМБИНАТОРНЫЙ ПОИСК 7.1.4 Независимо от того, является ли f легкой, мы можем использовать (137) для вычисления НДР для Р1(/), когда f монотонна. При этом мы можем в действи- тельности полагать узлы БДР и узлы НДР сосуществующими в одной и той же большой базе данных: два узла с идентичными полями (V, LO, HI) могут встре- чаться в памяти только один раз, несмотря на то что они имеют совершенно разные значения в разных контекстах. Мы используем одну подпрограмму для синтеза f/\g, когда f и д указывают на бинарные диаграммы решений, и другую подпрограмму для образования f \ д, когда f и д указывают на бинарные диаграммы решений с подавлением нулей; никаких неприятностей из-за совместного использования уз- лов этими подпрограммами не возникает, пока переменные не переупорядочиваются. (Конечно, записи кэша должны отличать факты, относящиеся к БДР, от фактов, относящихся к НДР.) Например, в упр. 7.1.1-67 определен интересный класс самодуальных функций, называющихся У-функциями, а БДР для У) 2 (которая представляет собой функцию от 91 переменной) имеет 748 416 узлов. Эта функция имеет 2178 889 774 простых импликанты; а 2(Р1(У1г)) равно только 217388. (Стоимость поиска этой НДР составляет около 13 миллиардов обращений к памяти и 660 Мбайт памяти.) Краткая историческая справка. Зерна бинарных диаграмм решений были неяв- но посеяны Клодом Шенноном (Claude Shannon) [Ibans. Amer. Inst. Electrical Engine- ers 57 (1938), 713-723] в его иллюстрациях релейно-контактных схем. В разделе 4 указанной статьи показано, что любая симметричная булева функция от п пере- менных имеет БДР не более чем с ("J1) узлами ветвления. Шеннон предпочитал работать с булевой алгеброй; но Ч. Ю. Ли (С. Y. Lee), в Bell System Tech. J. 38 (1959), 985-999, указал на некоторые преимущества того, что он назвал бинарными решающими программами (binary-decision programs), поскольку любая функция от п переменных могла быть вычислена в такой программе не более чем за п инструкций ветвления. Ш. Акерс (S. Akers) придумал название “бинарные диаграммы решений” и про- должил развитие идей в IEEE Trans. С-27 (1978), 509-516. Он показал, как полу- чить БДР из таблицы истинности восходящим методом или нисходящим методом из алгебраических подфункций. Он пояснил, как подсчитать пути от корня к [т] или [±], и заметил, что эти пути делят п-мерный куб на непересекающиеся подкубы. Тем временем очень похожая модель булевых вычислений возникла при теоре- тическом изучении автоматов. Например, А. Кобхэм (A. Cobham) [FOCS 7 (1966), 78-87] связал минимальные размеры ветвящихся программ для последовательности функций fn(xi,. • • ,хп) с пространственной сложностью неоднородных машин Тью- ринга, вычисляющих эту последовательность. Что еще более важно, С. Форчун (S. Fortune), Д. Хопкрофт (J. Hopcroft) и Э. М. Шмидт (Е. М. Schmidt) [Lecture Notes in Comp. Sci. 62 (1978), 227-240] рассмотрели “свободные В-схемы” ныне известные как FBDD, в которых ни на каком пути никакие булевы переменные не тестируются дважды (см. упр. 35). Среди прочего они разработали алгоритм с полиномиальным временем работы для проверки, выполняется ли условие f — д для данных FBDD для fug при условии, что как минимум одна из этих FBDD последовательно упорядочена, как БДР. Была также разработана теория конечных автоматов, которая имеет глубокую связь со структурой БДР; таким образом, од-
7.1.4 БИНАРНЫЕ ДИАГРАММЫ РЕШЕНИЙ 303 новременно ряд исследователей работали над задачами, эквивалентными анализу размера B(f) для различных функций /. (См. упр. 261.) Все эти работы были концептуальными, не реализованными в виде компьютер- ных программ, хотя программисты сразу нашли применение для лучей и деревьев метода “Патриция” которые подобны бинарным диаграммам решений, но отличают- ся тем, что являются деревьями, а не ориентированными ациклическими графами (см. раздел 6.3). Но позже Рэндал Э. Брайант (Randal Е. Bryant) открыл, что бинарные диаграммы решений достаточно важны на практике, если потребовать, чтобы они были упорядочены и приведены. Его введение в предмет [IEEE Trans. С-35 (1986), 677-691] стало на многие годы наиболее цитируемой статьей в области компьютерных наук, поскольку революционизировало структуры данных, исполь- зуемые для представления булевых функций. В своей статье Брайант указал, что БДР для любой функции при таких усло- виях, по сути, уникальна и что большинство функций, встречающихся на практике, имеют БДР вполне разумного размера. Он представил эффективный алгоритм для синтеза БДР для f /\д и f(£)g и других функций на основе БДР для fug. Он также показал, как вычислить лексикографически наименьшее х, такое, что f(sc) = 1, и многое другое. Ли (Lee), Акерс (Akers) и Брайант (Bryant) заметили, что многие функции могут с выгодой сосуществовать в базе БДР, совместно используя общие подфунк- ции. Высокопроизводительный “пакет” для операций с базами БДР, разработанный К. С. Брейсом (К. S. Brace), Р. Л. Руделлом (R. L. Rudell) и Р. Э. Брайантом (R. Е. Bryant) [АСМ/IEEE Design Automation Conf. 27 (1990), 40-45], сильно по- влиял на все последующие реализации инструментария для работы с БДР. Брай- ант резюмировал ранние применения БДР в работе Computing Surveys 24 (1992), 293-318. Как упоминалось ранее, в 1993 году Шин-ичи Минато (Shin-ichi Minato) пред- ставил бинарные диаграммы решений с подавлением нулей, повышавшие произво- дительность комбинаторной работы. В своей работе Software Tools for Technology Transfer 3 (2001), 156-170, он привел ретроспективный обзор ранних приложений НДР. Начало применению булевых методов в теории графов было положено X. Мафу- том (К. Maghout) [Comptes Rendus Acad. Sci. 248 (Paris, 1959), 3522-3523], который показал, как выразить максимальные независимые множества и минимальные доми- нирующие множества любого графа или ориентированного графа в виде простых импликант монотонной функции. Позже Р. Форте (R. Fortet) [Cahiers du Centre d’Etudes Recherche Operationelle 1,4 (1959), 5-36] рассмотрел булев подход к ряду других задач; например, он ввел идею 4-раскраски графа путем назначения каждой вершине двух булевых переменных, как мы делали это в (73). П. Камен (Р. Camion) в том же журнале [2 (1960), 234-289] преобразовал задачи целочисленного про- граммирования в эквивалентные задачи булевой алгебры в надежде решить их методами символьной логики. Эта работа была продолжена и расширена другими, в особенности П. Л. Хаммером (Р. L. Hammer) и С. Рудеану (S. Rudeanu), книга которых Boolean Methods in Operations Research (Springer, 1968) резюмировала эти идеи. К сожалению, их подход потерпел неудачу, поскольку в то время не име- лось хороших методов булевых вычислений. Сторонники булевых методов были
304 КОМБИНАТОРНЫЙ поиск 7.1.4 вынуждены ждать пришествия бинарных диаграмм решений, чтобы решить общую задачу булева программирования (7) с помощью алгоритма В. Частный случай алгоритма В, когда все веса неотрицательны, был предложен Б. Линем (В. Lin) и Ф. Соменци (F. Somenzi) [International Conf. Computer-Aided Design CAD-90 (IEEE, 1990), 88-91]. Ш. Минато (S. Minato) [Forma] Methods in System Design 10 (1997), 221-242] разработал программное обеспечение, которое автоматически преобразует линейные неравенства между целочисленными переменными в БДР, с которыми можно удобно работать (на возможность этого надеялся ряд исследова- телей в 1960-х годах). Классическая задача поиска ДНФ минимального размера для заданной функ- ции также стала впечатляюще простой, когда стали понятны методы БДР. Послед- ние методы решения этой задачи выходят за рамки данной книги, но вы можете обратиться к отличному обзору Оливье Кудера (Olivier Coudert) по этой теме в In- tegration 17 (1994), 97-140. Отличная книга Инго Вегенера (Ingo Wegener) Branching Programs and Binary Decision Diagrams (SIAM, 2000) содержит обзор огромного количества литературы по данной теме и тщательную разработку математических основ, а также рассмат- ривает различные пути обобщения и развития базовых идей. Примечание переводчика: отличный программный пакет CUDD: CU Decision Diagram Package для работы с различными диаграммами решений, разработанный Ф. Соменци (F. Somenzi), на момент перевода этой книги находился по адресу http://vlsi.Colorado.edu/~fabio/CUDD/. Предостережение. Мы видели десятки примеров, когда применение БДР и/или НДР позволяло решить широкий спектр комбинаторных задач с удивительной эф- фективностью, а приведенные далее упражнения содержат десятки дополнительных примеров блестящего применения этих методов. Но структуры БДР и НДР не являются панацеей; это только два вида вооружения из нашего арсенала. Главным . образом они применяются к задачам, у которых решений гораздо больше, чем можно рассмотреть поочередно, и к задачам, решения которых обладают локальной структурой, позволяющей нашим алгоритмам работать в каждый момент толь- ко с относительно небольшими подзадачами. В последующих разделах Искусства программирования мы изучим дополнительные методы, позволяющие справиться с комбинаторными задачами других видов. Упражнения ► 1. [20] Начертите БДР для всех 16 булевых функций f(xi,xz). Чему равны их размеры? ► 2. [21 ] Начертите планарный ориентированный ациклический граф с шестнадцатью вер- шинами, каждая из которых представляет собой корень одной из 16 БДР в упр. 1. 3. [16] Сколько булевых функций f(x\,..., хп) имеют БДР размером не более 3? 4. [21] Предположим, что поля | V | L0 | HI | упакованы в 64-битовое слово х, где V занимает 8 бит, а два других поля занимают по 28 бит. Покажите, что пяти широкословных инструкций достаточно для выполнения преобразования х i-> х', где х' равно х, за исклю- чением того, что нулевое значение L0 или HI заменяется на 1 и наоборот. (Повторение этой операции в каждом узле ветвления х бинарной диаграммы решений для f даст БДР для комплементарной функции /.)
7.1.4 БИНАРНЫЕ ДИАГРАММЫ РЕШЕНИЙ 305 5. [20] Если взять БДР для f(xi,... ,хп) и обменять указатели LO и HI в каждом узле и если также обменять два стока [Т| [т], то что вы получите? 6. [10] Пусть g(xi,£2,23,24) = /(£4,£з,£2,£1), где f имеет БДР из (6). Что собой представляет таблица истинности д и каковы ее бусины? 7. [21] Пусть для заданной булевой функции f(xi,хп) gki^XOy Х1, . . . , Хп) — f (2о, - - ,2fc—2,2ft— 1 V Хк, 2fc-|-l, . . . , Хп) ДЛЯ 1 fc 71. Найдите простое соотношение между (а) таблицами истинности и (б) БДР f и «д. 8. [22] Выполните упр. 7 с Tfc_i ф Tit вместо Tfc_iV Th. 9. [16] Поясните, как для заданной БДР для функции f(x) = f(x\,... ,хп), представ- ленной последовательно, как в (8), определить лексикографически наибольшее х, такое, что f(x) = 0. ► 10. [21] Разработайте для двух заданных БДР, которые определяют булевы функции f и f и представлены последовательно, как в (8) и (10), алгоритм, проверяющий выполнение равенства f = f'. 11. [20] Дает ли алгоритм С корректный ответ при применении к бинарной диаграмме решений, которая (а) упорядочена, но не приведена? (б) приведена, но не упорядочена? ► 12. [М21] Ядро ориентированного графа представляет собой множество вершин К, такое, что из v Е К вытекает v-f-^u для всех и 6 К; из v К вытекает v—>и для некоторого и Е К. а) Покажите, что, когда ориентированный граф представляет собой обычный граф (т. е. когда и—тогда и только тогда, когда v—>и), ядро представляет собой то же самое, что и максимальное независимое множество. б) Опишите ядра ориентированного цикла Сп- в) Докажите, что ориентированный ациклический граф имеет единственное ядро. 13. [ЛГ15] Каким образом концепция ядра графа связана с концепцией (а) максимальной клики? (б) минимального вершинного покрытия? 14. [M2J] Насколько большим (требуется точное значение) является БДР для (а) всех независимых множеств цикла Сп и (б) всех ядер Сп при п > 3? (Нумеруйте вершины, как в (12)-) 15. [М23] Сколько (а) независимых множеств и (б) ядер имеет Сп при п > 3? ► 16. [22] Разработайте алгоритм для последовательной генерации всех векторов £i.. .хп, для которых /(21,... ,хп) = 1, для заданной БДР для /. 17. [32] Если это возможно, улучшите алгоритм из упр. 16, так, чтобы его время работы составляло О(В(/)) + O(N) при наличии N решений. 18. [15] Пройдите алгоритм В с БДР (8) и (wi,..., им) = (1,—2,—3,4). 19. [20] Каковы наибольшее и наименьшее возможные значения переменной ть в алго- ритме В, основанном на весах (wi,..., wn), но не на всех деталях функции /? 20. [15] Разработайте быстрый способ вычисления весов Тью-Морзе (15) для 1 < j < п. 21. [05] Может ли алгоритм В вместо максимизации минимизировать wixi -I--(-ui„£n? ► 22. [М21] Предположим, что шаг ВЗ был упрощен таким образом, что ‘Wr,+i — WVl’ и ‘Ж„+1 — WVh’ были удалены из формул. Докажите, что алгоритм будет оставаться работоспособным при применении к БДР, представляющим ядра графов. ► 23. [М20] Все пути от корня до [т] на рис. 22 состоят ровно из восьми сплошных дуг. Почему это не случайное совпадение?
306 КОМБИНАТОРНЫЙ ПОИСК 7.1.4 24. [М22] Предположим, ребрам решетки на рис. 22 назначены 12 весов (W12, W13,..., wsg). Поясните, как найти наименьшее остовное дерево в таком графе (а именно, остовное дерево, ребра которого имеют наименьший общий вес) путем применения алгоритма В к показанной здесь бинарной диаграмме решений. 25. [М20] Измените алгоритм С так, чтобы он вычислял производящую функцию для ре- шений уравнения f(xi,..., хп) = 1, а именна функцию G(z) = 52*1=О • - • гХ1+"+Хп х /(Т1, • • • , Т„). 26. [Л/ЙО] Измените алгоритм С так, чтобы он вычислял полином надежности для задан- ных вероятностей, а именно 1 1 F(P1,...,Pn)= ^2 ••• xj—0 xn=0 27. [М2б] Предположим, что F(pi, -. - ,рп) и G(pi,... ,рп) представляют собой полиномы надежности для булевых функций f(xi,... ,хп) и д(х\,... ,хп), где f д. Пусть q — простое число, и выберем независимые случайные целые числа qi, ..., qn, равномерно распределенные в диапазоне 0 < qk < q- Докажите, что F(qi,... ,qn) modq G(qi,qn) tnodq с вероятностью > (1 — \/q)n- (В частности, если n = 1000 и q = 231 — 1, при такой схеме различные функции приводят к различным “хеш-значениям” с вероятностью, не меньшей 0.9999995.) 28. [ЛНб] Пусть F(p) представляет собой значение полинома надежности F(pi,...,pn) при pi = • • • = рп = р. Покажите, что F(p) легко вычислить из производящей функции G(z). 29. [НМ20] Измените алгоритм С таким образом, чтобы он вычислял полином надежно- сти F(p) из упр. 28, а также его производную F'(p) для заданного р и БДР для /. 30. [Л/Й1] Полином надежности представляет собой сумму вкладов всех “минитермов” (1 — pi)1*1?]1 ... (1 — Рп)1~х"Рп" по всем решениям f(xi,...,xn) = 1- Поясните, как для заданной БДР для f и последовательности вероятностей (pi,...,pn) найти решение Т1... хп, вклад которого в общую надежность наибольший. 31. [M2J] Измените алгоритм С таким образом, чтобы он вычислял полностью детали- зированную таблицу истинности /, формализуя процедуру, с помощью которой (24) было получено из рис. 21. 32. [Л/ЙО] Какие интерпретации ‘о’, ‘Т’, ‘х/ и ‘х/ делают из общего алгоритма из упр. 31 специализированные версии из упр. 25, 26, 29 и 30? 33. [Мйй] Специализируйте упр. 31 так, чтобы можно было эффективно вычислить (will -I---1- WnTn) И У2 (W1X1 -I---------1- U)„I„)2 /(х)=1 /(х)=1 из БДР булевой функции f(x) = f(xi,... ,хп)- 34. [Л/Й5] Специализируйте упр. 31 так, чтобы можно было эффективно вычислить max{ max (wi^i -I---1- wk-ixk-i + w'kxk + wfc+iTfc+i -I-1- wnxn + w'fc') | f(x) = 1} l<k<n из БДР для f, для заданных Зп произвольных весов (114,..., w„, wl, -. -, w'n, w",..., w").
7.1.4 БИНАРНЫЕ ДИАГРАММЫ РЕШЕНИЙ 307 ► 35. [22] Свободная бинарная диаграмма решений (free binary decision diagram—FBDD) представляет собой бинарную диаграмму решений, такую как % в которой переменные ветвления не обязаны находиться в некотором строгом порядке, но ни одна переменная не может встречаться на пути вниз от корня более одного раза. (FBDD “свободна” в том смысле, что возможен каждый путь в ориентированном ациклическом графе: никакое ветвление никак не ограничивает другое.) а) Разработайте алгоритм для проверки того, что предполагаемая FBDD действительно свободная. б) Покажите, что легко вычислить полином надежности F(pi,... ,р„) булевой функции f(xi,... ,хп) для заданных (pi,... ,рп) и FBDD, которая определяет /, и вычислить количество решений f(xi,..., я:п) = 1. 36. [25] Поясните путем расширения упр. 31, как вычислить полностью детализирован- ную таблицу истинности для любой заданной FBDD, если абстрактные операторы о и • коммутативны, а также дистрибутивны и ассоциативны. (Таким образом, мы можем находить наилучшие решения, как в алгоритме В, или решать задачи, такие как в упр. 30 и 33, с использованием FBDD так же, как и с применением БДР.) 37. [М20] (Р. Л. Ривест (R. L. Rivest) и Ж. Вюллемин (J. Vuillemin), 1976.) Булева функция f(xi,... ,хп) называется уклончивой, если каждая FBDD для f содержит нис- ходящий путь длиной п. Пусть G(z) представляет собой производящую функцию для /, как в упр. 25. Докажите, что f уклончива, если G(—1) 0. ► 38. [27] Пусть Д-i, ..., 1о представляют собой инструкции ветвления, которые определя- ют неконстантную булеву функцию f(xi,... ,хп), как в (8) и (10). Разработайте алгоритм, который вычисляет переменные состояния ti... tn, где {+1, если f(xi,... ,хп) = 1 при Xj = 1; —1, если f(xi,... Дп) = 1 при Xj = 0; 0 в противном случае. (Если ti... tn 0... 0, функция f является канализирующей, как определено в разде- ле 7.1.1.) Время работы вашего алгоритма должно составлять О(п Ч- s). 39. [М20] Чему равен размер БДР для пороговой функции [ti + + хп> fc]? ► 40. [22] Пусть g представляет собой “сжатие” /, получающееся путем установки Tfc+i <— Xk, как в (27). а) Докажите, что B(g) < B(f). [Указание: рассмотрите подтаблицы и бусины.] б) Предположим, что h получается из / путем установки хь+2 «— Хк- Выполняется ли соотношение B(h) < B(f)? 41. [М25] В предположении, что п > 4, найдите размер БДР для пороговых функций Фибоначчи (а) (х^'х?2 ... x^"22^n-'ilxnn~2) и (Ь) (хп1хп-1 X3n~2X2n~1xf"~2). 42. [22] Изобразите базу БДР для всех симметричных булевых функций от трех пере- менных. ► 43. [22] Чему равно B(f), когда (a) f(xi,... ,х?п) = [ti Ч-Ьгп = 1п+1'1--ГяДп]? (б) /(Ti,...,T2n) = [я?1 +я:з Ч-1-я:2п-1 = Х2 Ч-Т4 Ч-hT2n]? ► 44. [М32] Определите Еп—наибольший возможный размер B(f), когда f является сим- метричной булевой функцией от п переменных.
308 КОМБИНАТОРНЫЙ ПОИСК 7.1.4 45. [22] Дайте точные описания булевых модулей, которые вычисляют функцию “три единицы подряд” как в (33) и (34), и покажите, что эта сеть вполне определена. 46. [М23] Каков истинный размер БДР функции “три единицы подряд” ? 47. [М21] Разработайте и докажите обращение теоремы М: каждая булева функция f с малой БДР может быть реализована эффективной сетью модулей. 48. [М22] Реализуйте скрыто взвешенную битовую функцию с помощью сети модулей наподобие показанной на рис. 23, с использованием аь = 2 + Хк и Ьк = 1+ Х(п — к) соединительных проводов для 1 < к < п. Из теоремы В заключите, что верхняя граница в теореме М не может быть улучшена до 2р^ак,Ьк^ для любого полинома р. 49. [20] Изобразите базу БДР для следующих множеств симметричных булевых функ- ций: (a) {S>k(xi,X2,X3,X4) | 1 < к < 4}; (б) {Sk(xi,X2,X3,хц) | 0 < к < 4}. 50. [22] Изобразите базу БДР для функций ^сегментного дисплея (7.1.2-(42)). 51. [22] Опишите базу БДР для бинарного сложения, когда входные биты нумеруются справа налево, а именно (fn+ifnfn-i ---/1)2 = (я2п-1... £3^1)2 + (ягп - - • £4^2)2, вместо нумерации слева направо, как в (35) и (36). 52. [20] Имеется смысл, в котором база БДР для т функций {/1,..., fm] не очень отли- чается от БДР всего с одним корнем: рассмотрим функцию соединения J(ui,... ,un',vi, , vn) = (wi? щ: U2? V2: • • • un? vn: 0), и пусть f(71, , 7m+l, Я-1, . , In) — <7(^1,•••, ^m+1, fl (Т1, • • • , In), • • • , fm(xi, . . . , In), 1), где (ti,..., tm+i) являются новыми фиктивными переменными, которые размещаются пе- ред (xi,...,in). Покажите, что B(f) имеет почти то же значение, что и размер базы БДР ДЛЯ {/1,...,/т}. 53. [23] Примените алгоритм R вручную к бинарной диаграмме решений с семью узлами ветвления в (2). 54. [17] Постройте БДР для f(xi,... ,хп), исходя из таблицы истинности /, за 0(2”) шагов. 55. [Л/30] Поясните, как построить “БДР связности” графа (наподобие показанной на рис. 22). 56. [20] Модифицируйте алгоритм R так, чтобы вместо помещения всех излишних узлов в стек AVAIL он создавал разновидность новой БДР, состоящей из последовательных ин- струкций Is-i, ..., Ii, Io, имеющих компактный вид (щ,? Ik'- hk), принятый в алгоритмах В и С. (Исходные входные узлы алгоритма могут затем быть удалены все вместе.) 57. [25] Укажите дополнительные действия, которые должны быть предприняты между шагами R1 и R2, когда алгоритм R расширяется для вычисления ограничения функции. Будем считать, что FIX[t>] = t 6 {0,1}, если переменная и получает фиксированное значение t; в противном случае FIX [и] < 0. 58. [20] Докажите, что “смешанная” диаграмма, определяемая рекурсивным использо- ванием (37), является приведенной. 59. [M2S] Пусть h(xi,... ,хп) является булевой функцией. Опишите смешанную БДР fog в терминах БДР для h, когда (a) f(xi, - ,Х2п) = h(xi,..., хп) и g(Ti,... ,я:2п) = h(xn+l, • - - , 2.2п), (0) f(xi, Х2, - - - , Х2п) — /l(xi, Хз, • • , Х2п— 1) И g(xi, Х2, - - - , Х2п) — h(X2, Х4, - -. ,Х2п)- [В обоих случаях очевидно, что B(f) = В(д) = В(/г).] 60. [М22] Предположим, что f(xi,... ,хп) и g(xi,...,хп) имеют профили (Ъо, - - -,Ьп) и (Ь'о,... ,Ь'п) соответственно, а соответствующими квазипрофилями являются (до,- - ,Чп) и (оь,... ,qli). Покажите, что их смесь fog имеет B(f о д) < 52”_0(qjfej + bjQj — bjb'f) узлов.
7.1.4 БИНАРНЫЕ ДИАГРАММЫ РЕШЕНИЙ 309 ► 61. [М27] Докажите, что если а и /3 являются узлами соответствующих БДР для f ид, то в смешанной БДР fog входящая степень(а о /3) < входящая степень(а) • входящая степень(/3). (Представим, что корень БДР имеет входящую степень, равную 1.) ► 62. [М21] Если f(x) = Лт2>) и д(х) = (xi /\хп) V A^j+i), то чему равны асимптотические значения B(f), В(д), B(f од) и B(f V д) при п -> оо? 63. [Л/27] Пусть f(xi,. . . ,Хп) = Mm(ll 0l2,l3 9l4,...,l2m-l ©I2m;i2>n+l,...,ln) и g(xi,... ,хп) = Мт(х2 фтз, • • ,Х2т-2 ® Х2т-1,Х2т-,Х2т+1,..., хп), где п = 2т + 2т. Чему равны B(f), В(д) и В(/ Л д)? 64. [М21] Медиану (/1/2/3) трех булевых функций можно вычислить, образуя /4 = /1 V /2, /5 = /1 Л /2, /в = /з Л /4, /т = /5 V /в. Тогда В(/4)=О(В(/1)В(/2)), В(/5) = О(В(/1)В(/2)), В(/в) = О(В(/з)В(/4)) = О(В(/1)В(/2)В(/з)); следовательно, В(/?) = О(В(/5)В(/в)) = О(В(/1)2В(/2)2В(/з)). Докажите, однако, что В(/у) в действительности представляет собой лишь О(В(/1)В(/2)В(/з)) и что время ее вычисления из /5 и /в также составляет О(В(/1)В(/2)В(/з)). ► 65. [М25] Докажите, что если h(xi,... ,хп) = f(xi,...,xj-i,g(xi,...,xn),xj+i,...,xn), то B(h) = O(B(f)2B(g)). Можно ли улучшить эту верхнюю границу до О(В(/)В(д)) в общем случае? 66. [20] Завершите алгоритм S, пояснив, что следует делать на шаге S1, если fog ока- зывается тривиальной константой. 67. [24] Набросайте действия алгоритма S, когда fug определяются в (41), a op = 1. 68. [20] Ускорьте работу шага S10 путем выделения и оптимизации распространенного случая LEFT (О < 0. 69. [21] В алгоритме S должна быть одна или несколько инструкций проверок, таких как “если NTOP > ТВОТ, завершить работу алгоритма неудачей” для случаев нехватки памяти. Где лучше всего размещать такие инструкции? 70. [21] Рассмотрите присвоение переменной Ъ значения [lg LCOUNT [Z]J вместо значения [lg LCOUNT [Д ] на шаге S4. 71. [20] Подумайте, как распространить алгоритм S на тернарные операторы. 72. [25] Поясните, как избавиться от хеширования в алгоритме S. ► 73. [25] Рассмотрите применение “виртуальных адресов” вместо действительных в ка- честве связей БДР: каждый указатель р имеет вид тг(р)2е + ст(р), где тг(р) = р е яв- ляется “страницей” р, а ст(р) = р mod 2е — “слотом” р; параметр е можно выбирать из соображений удобства. Покажите, что при таком подходе в узле БДР нужны только два поля (LO,HI), поскольку идентификатор переменной V(p) можно вывести из самого виртуального адреса р. ► 74. [М23] Поясните, как путем модификации (49) подсчитать количество самодуальных монотонных булевых функций от п переменных.
310 КОМБИНАТОРНЫЙ ПОИСК 7.1.4 75. [Л/20] Пусть pn(xi,... ,а?2»») представляет собой булеву функцию, которая истинна тогда и только тогда, когда a?i... тгп является таблицей истинности регулярной функции (см. упр. 7.1.1-110). Покажите, что БДР для рп может быть вычислена процедурой, подобной таковой для вычисления в (49). 76. [М22] “Клаттер”* представляет собой семейство <S взаимно несравнимых множеств; другими словами, S <Z S', когда S и S' являются различными членами <S. Каждое мно- жество S С {0,1,...,п — 1} может быть представлено в виде n-битового целого числа s = $2{2е | е 6 S}; так что каждое семейство таких множеств соответствует бинарному вектору To^i . ..T2n-i с ха = 1 тогда и только тогда, когда s представляет множество семейства. Покажите, что БДР для функции ‘[rro^i • • . 3J2"-i соответствует клаттеру]’ имеет про- стую СВЯЗЬ с БДР ДЛЯ функции МОНОТОННОЙ функции Дп(Х1, • • ,^2")- 77. [М30] Покажите, что существует бесконечная последовательность (bo, bi, Ъ?,...) = (1,2,3,5,6,...), такая, что профиль БДР для имеет вид (bo, bi , . . . , &2п — 1_1 > ^2п ~ 1_1, • • • , bi,bo,2). (См. рис. 25.) У скольких узлов ветвления такой БДР LO = [Т[? 78. [25] Воспользуйтесь бинарными диаграммами решений для определения количества графов с 12 помеченными вершинами, максимальная степень вершины которых равна d для 0 < d < 11. 79. [20] Вычислите для 0 < d < 11 вероятность того, что граф на вершинах {1,..., 12} имеет максимальную степень d, если каждое ребро присутствует в графе с вероятно- стью 1/3. 80. [23] Рекурсивный алгоритм (55) вычисляет f Л д методом поиска в глубину, в то время как алгоритм S выполняет поиск в ширину. Одинаково ли часто оба алгоритма сталкиваются с одной и той же подзадачей f' Л д' во время работы (хотя и в разном порядке) или один из алгоритмов рассматривает меньше таких случаев, чем другой? 81. [20] Модифицируя (55), поясните, как вычислить f ф д в базе БДР. 82. [25] Поясните, как в случае, когда узлы базы БДР снабжены полями REF, следует работать с этими узлами в (55) и в алгоритме U. 83. [М20] Докажите, что если и /, и д имеют количество ссылок, равное 1, то нам нет необходимости обращаться к кэшу записей при вычислении И (/,<?) согласно (55). 84. [24] Предложите стратегии для выбора размера кэша записей и размеров таблиц уникальности при реализации алгоритмов для баз БДР. Предложите также хороший способ периодической сборки мусора. 85. [16] Сравните размер базы БДР для 32 функций 16 х 16-битового бинарного умноже- ния с альтернативой, заключающейся в хранении таблицы всех возможных произведений. 86. [21] В подпрограмме MUX в (62) упоминаются “очевидные” значения. Что собой представляют эти значения? 87. [20] Если оператор медианы {fgh) реализован с помощью рекурсивной подпрограм- мы, аналогичной (62), то что собой представляют “очевидные” значения в этом случае? 88. [М25] Найдите функции /, д и h, для которых рекурсивное тернарное вычисление f Л д Л h превосходит любые бинарные вычисления (/ Л д) Л h, (<? Л b) Л /, (Л Л /) Л д. 89. [15] Истинны или ложны следующие квантифицированные формулы? (а) ЗтхЗтг/— 3a?23a;i/. (б) Va?iVa;2/ = (в) VxiHxzf < (г) УцЭжг/ > 3x2^xif. Дословно — “беспорядок’.’ — Примеч. пер.
7.1.4 БИНАРНЫЕ ДИАГРАММЫ РЕШЕНИЙ 311 90. [Л/20] При I = т = п = 3 формула (64) соответствует операции MOR компьютера MMIX. Имеется ли аналогичная формула, соответствующая инструкции MXOR (матричное умножение по модулю 2)? ► 91. [26] На практике зачастую желательно упростить булеву функцию f по отношению к некоторому интересующему нас множеству д путем поиска функции f с малым значени- ем B(f), такой, что f(x) Л д(х) < f(x) < f(x) V д(х) для всех х. Другими словами, f(x) должна совпадать с f(x), когда х удовлетворяет условию д(х) = 1, значения же f(x) при д(х) = 0 нам безразличны. Привлекательным кандидатом в такие f является функция f Д. д, uf, ограниченное д” определяемая следующим образом: если д(х) тождественно равна 0, f Д. д = 0. В противном случае (/ Д. д)(х) = /(у), где у — первый элемент последовательности х, х ф 1, х ф 2, ..., такой, что д(у) = 1. (Здесь мы рассматриваем х и у как n-битовые числа (a?i.. .хп)2 и (j/i... уп)?. Таким образом, тф1 = тф0...01=Т1... тп_1Тп; х ф 2 = х ф 0... 010 = xi... тп_2Тп-1я:п; и т. д.) а) Что собой представляют f Д. 1, f Д. Xj и f Д. Xj? б) Докажите, что (/ Л /') Д. д = (/ Д. д) Л (f Д. д). в) Истинно или ложно утверждение: f Д. д = f Д. д. г) Упростите формулу f(xi,..., а;п) Д. (х2 Л хз Л хз Л а?в). д) Упростите формулу f(xi,..., хп) Д. (xi ф х? ф • • • ф а;п). е) Упростите формулу f(xi,..., хп) Д. ((яч Л • • • Л хп) V (xi Л • • • Л тп)). ж) Упростите формулу f(xi,..., хп) Д. (a?i Л д(х?,... ,хп)). з) Найдите функции f(xi,xz) и <?(гг 1,2:2), такие, что B(f Д.<?) > B(f). и) Разработайте рекурсивный способ вычисления f Д. <7, аналогичный (55). 92. [М27] Операция f Д. д из упр. 91 иногда зависит от порядка переменных. Докажите, что для заданной д = g(xi,... ,хп) для всех перестановок тг множества {1,... ,п} и для всех функций f = f(xi,..., т„) условие (f” Д. д”) = (/ Д- д)” выполняется тогда и только тогда, когда д = 0 или д является подкубом (конъюнкцией литералов). 93. [36] Для заданного графа G на вершинах {1,..., п} постройте булевы функции fug, обладающие тем свойством, что приближенная функция f с малым значением B(f) (см. упр. 91) существует тогда и только тогда, когда G может быть раскрашен тремя красками. (Следовательно, задача минимизации B(f) является NP-полной.) 94. [21] Поясните, почему (65) корректно выполняет квантификацию существования. ► 95. [20] Улучшите (65) путем проверки условия rj = 1 перед вычислением гь. 96. [20] Покажите, как достичь (а) универсальной квантификации Vxj, ... = fkg и (б) разностной квантификации 0а;Л1 ... Qa:Jm f = / D д путем модификации (65). 97. [М20] Докажите, что можно вычислить произвольную квантификацию низа БДР, такую как 3a;n-5Va;n-4Ga;n-33a;n-2Aa;n-iVa;n/(Ti,... ,хп), за О(В(/)) шагов. ► 98. [22] В дополнение к (70) поясните, как определить вершины ENDPT(rr) графа Q, которые имеют степень < 1. Охарактеризуйте также PAIR(х, у), компоненты с размером 2. 99. [20] (Р. Э. Брайант (R. Е. Bryant), 1984.) Каждая раскраска карты США в четыре цвета, рассматривавшаяся в разделе, соответствует 24 решениям функции COLOR (73) при перестановке цветов. Как эффективно избежать этой избыточности? ► 100. [24] Сколькими способами можно раскрасить граф США четырьмя красками так, чтобы каждым цветом было окрашено ровно по 12 штатов? (Уберите из графа вершину DC.) 101. [20] Продолжая выполнять упр. 100 и используя цвета {1,2,3,4}, найдите раскраску, максимизирующую величину У (вес штата) х (цвет штата), где веса штатов такие же, как и в (18).
312 КОМБИНАТОРНЫЙ ПОИСК 7.1.4 102. [23] Разработайте метод кэширования результатов функциональной композиции с использованием следующих соглашений: система в любой момент поддерживает массив функций [<д,... ,ffn], по одной для каждой переменной xj. Изначально gj представляет собой просто проецирующую функцию Xj для 1 < j < п. Этот массив может быть изменен только подпрограммой NEWG(j, д), которая заменяет gj на д. Подпрограмма COMPOSE (/) всегда выполняет функциональную композицию по отношению к текущему массиву функций замещения. ► 103. [20] Преподаватель хочет вычислить формулу 3j/i. — /i(xi,...,a:n)) Л - Л (ут = fm(xi,... ,хп)) Л g(yi,... ,ут)) для ряда функций /1, ..., fm и д. Но его студент Шустрый нашел гораздо более простую формулу для той же самой задачи. В чем заключается идея Шустрого? ► 104. [21] Разработайте эффективный способ выяснения по заданным БДР для fug, выполняется ли f < д или f > д, или f || д (здесь f || д означает, что f и д несравнимы). 105. [25] Булева функция f(xi,... ,хп) называется унатной (unate) с полярностями (щ, ...,уп), если функция h(xi,хп) — f(xi (& yi,... ,xnQ уп) монотонна. а) Покажите, что f может быть проверена на унатность с использованием кванторов А и N. б) Разработайте рекурсивный алгоритм для проверки унатности для заданной БДР для f не более чем за O(B(f)2) шагов. Если функция f унатная, ваш алгоритм должен также находить соответствующие полярности. 106. [25] Пусть f$g$h означает отношение “для всех х и у из f(x) = д(у) = 1 вытекает h(x Л у) = 1’.’ Покажите, что это отношение может быть вычислено не более чем за O(B(f)B(g)B(h)) шагов. [Мотивация: теорема 7.1.1Н гласит, что f является функцией Хорна тогда и только тогда, когда /$/$/; таким образом, мы можем проверить, является ли функция функцией Хорна, за O(B(f)3) шагов.] 107. [26] Продолжая выполнять упр. 106, покажите, что за O(B(f)4) шагов можно опре- делить, является ли функция f функцией Крома. [Указание: см. теорему 7.1.1S.] 108. [НМ24] Пусть b(n, в) представляет собой количество булевых функций от п перемен- ных, таких, что B(f) < в. Докажите, что (з — 3)! b(n, s) < (n(s — I)2)8-2 при s > 3, и иссле- дуйте варианты этого неравенства при s = [2"/(n + l/ln2)J. Указание: см. доказательство теоремы 7.1.2S. ► 109. [НМ17] Продолжая выполнять упр. 108, покажите, что почти все булевы функции от п переменных имеют B(f7r) > 2n/(n + 1/1п 2) для всех перестановок тг множества {1,... ,п} при п —> оо. 110. [25] Постройте явные функции наихудшего случая /п с B(fn) = Un из теоремы U. 111. [М21] Проверьте формулу суммирования (79) из теоремы U. 112. [НМ23] Докажите, что min(2fc,22" *— 22” * ) — bk (где bk—число, определенное в (80)) очень мало, за исключением случая, когда п — lg п — 1 < к <п — Ign + 1. 113. [20] Вместо двух стоковых узлов, по одному для каждой булевой константы, мы мог- ли бы иметь 216 стоков, по одному для каждой булевой функции от четырех переменных. Тогда БДР могла бы завершаться четырьмя уровнями ранее, после ветвления по а?п-4- Насколько хороша эта идея? 114. [20] Существует ли функция с профилем (1,1,1,1,1,2) и квазипрофилем (1,2,3,4, 3,2)? ► 115. [М22] Докажите неравенства для квазипрофилей (84) и (124).
7.1.4 БИНАРНЫЕ ДИАГРАММЫ РЕШЕНИЙ 313 116. [М21] Что можно сказать о случайном квазипрофиле (а) в наихудшем случае и (б) в среднем? 117. [М20] Сравните Q(f) с B(f), когда f = Mm(xi,..., хmj ^m+1» • ») 118. [M23] Покажите, что с точки зрения раздела 7.1.2 скрыто взвешенная битовая функ- ция имеет стоимость C(hn) — О(п). Чему равно точное значение G(/m)? 119. [20] Истинно или ложно следующее утверждение? Каждая симметричная буле- ва функция от п переменных является частным случаем /i?n+i- (Например, xi ф xz = /is(0,1,0, a?i,a;2).) 120. [7S] Поясните формулу (94). ► 121. [М22] Если f(xi,... ,а;„) —произвольная булева функция, то дуальная функция fD представляет собой f(xi,..., хп), а ее отображением fR является f(xn - - •, xi). Заметим, что fDD = fRR = f и fDR = fRD. а) Покажите, что h£R(xi,...,хп) = hn(xz, ,xn,xi). б) Покажите, что скрыто взвешенная битовая функция удовлетворяет рекуррентному соотношению /И (*Г1) = Х1, Л-п+1 (*Г1, • • • , «Гп+1) = («Гп+1? /Гп(т2, • - - , ХП) Ti); hn(xi,..., тТ1))- в) Определим хчр, перестановку на множестве всех бинарных строк х, с помощью ре- курсивных правил еф = е, (xi.. .xnQ)tl> = (xi.. .xnip)Q, (xi.. .хп1)ф = (xz .. .xnxi)ipl. Например, HOIV’ = (101^)1 = (01^)11 = (0^)111 = (V’)Olll = 0111; и мы также имеем 0111V> = 1101. Является ли ф инволюцией? г) Покажите, что hn(x) = КГ1(хф), где функция hn имеет очень малую БДР. 122. [27] Постройте FBDD для Л„, которая имеет менее чем п2 узлов при п > 1. 123. [М20] Докажите формулу (97), подсчитывающую все реестры для смещения s. ► 124. [27] Разработайте эффективный алгоритм для вычисления профиля и квазипрофи- ля h„ для заданной перестановки тг. Указание: когда реестр [го,... ,rn-k] соответствует бусине? ► 125. [НМ34] Докажите, что В(/гп) можно точно выразить через последовательности —±(V) - «•=£&;*)• к—О к=0 126. [НМ42] Проанализируйте B(h„) для перестановки в порядке органных труб тг = (2,4,... ,п,... ,3,1). 127. [^6] Найдите перестановку тг, которая минимизирует В(ЛГоо). ► 128. [25] Поясните, как для заданной перестановки тг множества {1,... ,т + 2т} вычис- лить профиль и квазипрофиль переставленного 2т-канального мультиплексора А^т (*^1, ••• , Xrrit 1 j - - , Xm-i-Zm ) — А4щ (з?1тг, . • • , Тпгтг, *Г(т+1)лч • • , 'Г(тп+2тп)тг ) - 129. [М25] Определим Qm(xi,... ,xmz) как равное 1 тогда и только тогда, когда 0 1- матрица (a?(i_i)m+j) не имеет полностью нулевых строк и полностью нулевых столбцов. Докажите, что B(Qm) = Q(2m/m2) для всех тг. 130. [НМ31 ] Матрица смежности неориентированного графа G на вершинах {1,..., т} со- стоит из (™) записей xuv = [н— v в G] для 1 < и < v < т. Пусть Ст,ь представляет собой булеву функцию [G имеет fc-клику] для некоторого упорядочения этих (™) переменных.
314 КОМБИНАТОРНЫЙ ПОИСК 7.1.4 а) Докажите, что если 1 < к < у/т, то В(Ст,к) > С**), где s = (j) -1 и t = m + 2- fc2. б) Следовательно, B(Cmjm/2]) = f2(2m^3/y/rn), независимо от упорядочения перемен- ных. 131. [М28] (Покрывающая функция.) Булева функция C(xltX2, ...,Хр\2/11,2/12, • • • , У1д, 2/21, , У2д, , Ур1, Ур2, , Урд) = ((a>iA3/n)V(a;2Aj/2i)V • V(tpA2/pi)) Л - - Л ((xiAj/iq)V(a;2Aj/2Q)V • У(хрЛуРд)) является истинной тогда и только тогда, когда все столбцы произведения матриц x-Y = (х^Х2 ... Хр) (Уп У21 У12 ... У1д \ У22 У2д \Ур1 Ур2 ... Урд/ положительны, т. е. когда строки У, отобранные с помощью х, “покрывают” каждый столбец этой матрицы. Полином надежности для С играет важную роль в анализе от- казоустойчивости систем. а) Покажите, что, когда БДР для С тестирует переменные в порядке ^1,2/11,2/12, • • • ,У1д,Х2,2/21,2/22, • • • ,У2д, ,Хр, Ур1,Ур2, -,Урд, количество узлов асимптотически равно рд2’-1 для фиксированного q при р —> оо. б) Найдите упорядочение, для которого размер асимптотически равен рд2₽-1 для фик- сированного р при q —> 00. в) Докажите, что в общем случае Вш\п(С) = Q(2mln^p'4^2). 132. [32] Какие булевы функции /(х1,Х2,хз,Х4,х$) имеют наибольшее Bmin(/)? 133. [20] Поясните, как вычислить Bmin(/) и Втлх(/) из главной профилограммы /. 134. [24] Постройте главную профилограмму, аналогичную (102), для булевой функции a?i ф ((а?2 ф (xi V (хз Л хз))) Л (хз ф Х4)). Что собой представляют Bmin(/) и Втах(/)? Указание: тождество /(х1,Х2,хз,хь) = f(xi,X2,X4,xs) сэкономит вам половину работы. 135. [М27] Для всех п > 4 найдите булеву функцию 0п(ху,... ,хп), уникально тонкую в том смысле, что В(в„) = п+2 ровно для одной перестановки тг. (См. (93) и (102).) ► 136. [М34] Что собой представляет главная профилограмма функции медианы медиан ((Т11Т12 ... Tl„) (Т21Т22 ... Х2п) ... (Хт1Хт2 • • • Хтп)), при нечетных целых тип? Какое упорядочение является наилучшим? (Всего имеется тп переменных.) 137. [М38] Задача оптимального линейного размещения заданного графа заключается в поиске такой перестановки вершин тг, которая минимизирует |гиг — г>тг|. Постройте булеву функцию /, для которой это минимальное значение характеризуется оптимальным размером БДР Вт,п(/). ► 138. [МЗб] Целью этого упражнения является разработка эффективного алгоритма, ко- торый вычисляет главную профилограмму для функции /, заданной ее КДР (а не БДР). а) Поясните, как найти ("J1) весов главной профилограммы из одной КДР. б) Покажите, что операция подъема может быть легко осуществлена в КДР, без сборки мусора или хеширования. Указание: см. “карманную сортировку” в алгоритме R. в) Рассмотрим 2"-1 упорядочений переменных, где (г + 1)-е получается из i-го путем подъема с глубины pi + vi до глубины vi — 1. Например, мы получим 12345 21345 32145 31245 43125 41325 42135 42315 54231 52431 53241 53421 51342 51432 51243 51234
7.1.4 БИНАРНЫЕ ДИАГРАММЫ РЕШЕНИЙ 315 в (28), что B(f) = 2 т пп — к „„„ — 2 для при п = 5. Покажите, что каждое fc-элементное подмножество множества {1,... ,п} встречается на верхних fc уровнях одного из этих упорядочений. г) Объедините эти идеи для разработки искомого алгоритма построения профило- граммы. д) Проанализируйте используемую память и время работы вашего алгоритма. 139. [22] Обобщите алгоритм из упр. 138 так, чтобы (i) он вычислял общую профило- грамму для всех функций базы БДР, а не для одной функции; и (ii) ограничивал профи- лограмму переменными {то,а:и+1, ,ть}, сохраняя {a?i,...,ха-1} вверху и {a?(,+i,... ,а;п} внизу. 140. [27] Поясните, как найти Bmin(/) без знания главной профилограммы всех /. 141. [30] Истинно или ложно следующее утверждение? Если Xi, Х2, ..., Хт представ- ляют собой непересекающиеся множества переменных, то оптимальное упорядочение БДР для переменных g(hi(Xi), hz(Xi),..., hm(Xm)) может быть найдено путем ограниченного рассмотрения случаев, когда переменные каждого Xj являются последовательными. ► 142. [НМ32] Представление пороговых функций с помощью БДР удивительно загадочное. Рассмотрим самодуальную функцию f(x) = (a;™1 ...x„n), где каждое Wj представляет собой положительное целое число, a Wi 4- • —I- wn нечетно. Мы видели O(wi 4- • • • + wn)2; и B(f) зачастую представляет собой О(п), даже когда веса растут экспоненциально, как в (29) или в упр. 41. а) Докажите, что, когда Wi = 1, Wk = 2fc-2 для 1 < к < т и Wk т < к < 2т = n, B(f) при п —> оо растет экспоненциально, но Bmin(/) = О(п2). б) Найдите веса {wi,..., ш„}, для которых Bmin(/) = Q(2v/"^2). 143. [24] Продолжая выполнять упр. 142, (а), найдите оптимальное упорядочение пере- менных для функции (a;ia;2a:3a:4a:5a:66a;72a;84a;928a;i06a;ii2a;i28a:i36a:i40a:i52a;i608a:}716a:i820a;1922 1023\ х20 / 144. [16] Что собой представляет квазипрофиль в случае функций сложения {/1,/г,/з, А,/5} в (36)? 145. [24] Найдите Bmin(/i,/2, /з, /4,/з) и Bmax(/i,/2,/3, /4,/5) для этих функций. ► 146. [М22] Пусть (Ъо,..., Ьп) и (до, • • •, 9п) представляют собой профиль и квазипрофиль базы БДР. а) Докажите, чтобо < min(go,(6i4-g2)(6i4-g2 — 1)), 61 < min(6o4-go,92(g2 —1)) и6о4-61 > 9о — 92- б) И обратно, если 6о, 61, до и 92 являются неотрицательными целыми числами, удовле- творяющими указанным неравенствам, то существует база БДР с такими профилем и квазипрофилем. ► 147. [27] Конкретизируйте детали алгоритма Руделла, работающего без привлечения до- полнительной памяти, используя соглашения из алгоритма U и счетчики ссылок из упр. 82. 148. [М21] Истинно или ложно следующее утверждение? После обмена (Т)ч->(2) выпол- няется неравенство B(f*,f™) < 2B(/i,...,/т). 149. [М20] (Боллиг (Bollig), Лёббинг (Lobbing) и Вегенер (Wegener).) Покажите, что в дополнение к теореме J- мы также имеем B(/jr,... ,/^>) < (2fc—2)6o + B(/i,... ,/т) после операции подъема-спуска fc — 1 уровней, где профилем {/1,..., /т} является (6о,.. -, 6П)- 150. [30] Когда для реализации подъемов или спусков используются многократные обме- ны, промежуточные результаты могут оказаться гораздо большими, чем начальная или ко- нечная БДР. Покажите, что перемещения переменных могут быть выполнены более непо- средственным методом, время работы которого составляет O(B(/i,..., /т)+В(/(г,..., /т)) в наихудшем случае.
316 КОМБИНАТОРНЫЙ ПОИСК 7.1.4 151. [20] Предложите способ вызова алгоритма J, такой, чтобы каждая переменная про- сеивалась только однократно. 152. [25] Скрыто взвешенная битовая функция Лцю имеет более чем 17.5 триллиона узлов в своей БДР. Насколько сильно просеивание снижает это число? Указание: воспользуйтесь упр. 124 вместо реального построения бинарных диаграмм решений. 153. [30] Поместите функцию “крестиков-нуликов” {щ,... ,3/9} из упр. 7.1.2-65 в базу БДР. Каким будет ее размер при тестировании переменных в порядке a?i, а?2, ..., хд, oi, 02, ..., од сверху вниз? Чему равно значение jBmin(j/i,..., уд)? 154. [20] Сравнивая (104) и (106), можете ли вы сказать, насколько далеко сместился каждый штат при просеивании? ► 155. [25] Пусть /1 представляет собой функцию независимого множества (105) для графа смежных штатов США и пусть /2 является соответствующей функцией ядра (см. (68)). Найдите упорядочение штатов тг, такое, чтобы (а) В(/г ) и (б) ^(/Г,/?) были настолько малы, насколько вы сумеете этого достичь. (Заметим, что упорядочение (ПО) дает B(fi) = 339, B(ff) = 795 и B(J?,f£) = 1129.) 156. [30] Теоремы J+ и J- говорят, что мы можем сэкономить время переупорядочения, выполняя при просеивании только подъемы и не беспокоясь о спусках. Получается, что мы можем убрать шаги J3, J5, J6 и J7 из алгоритма J. Будет ли это разумно? 157. [М24] Покажите, что если т + 2™ переменных 2т-канального мультиплексора Мт размещаются в любом порядке, таком, что В(Л4^) > 2m+1 + 1, то просеивание приведет к уменьшению размера БДР. 158. [М24] Если булева функция f(xi,... ,хп) симметрична относительно переменных {a?i,..., жр}, естественно ожидать, что эти переменные будут находиться в последователь- ных позициях как минимум в одном из переупорядочений f”(xi,...,xn), минимизирующих B(f7r). Покажите, однако, что если f(xi,.. ,,хп) = [a?i + - + Хр — |_p/3j] + [a;i -I-Нтр = [2p/3]]g(xp+i,... ,тр+гп), где р = п — т и g(yi, , Ут) представляет собой любую неконстантную булеву функцию, то B(f7r) = |п2 + О(п) при п —> оо, когда {ici,..., а?р} являются последовательными в тг, но B(f“) = |п2 4- О(п), когда тг размещает около половины этих переменных в начале и половину в конце. 159. [20] Базовые правила игры Джона Конвея (John Conway) “Жизнь” (см. упр. 7.1.3- 167) представляет собой булеву функцию L(xn-w,Xk,Xke>xw,x,Xe,xsw,xs,xse)- Какое упорядочение этих девяти переменных сделает БДР как можно меньше? ► 160. [24] (Шахматная “Жизнь?) Рассмотрим матрицу X = (xij) размером 8x8, состо- ящую из нулей и единиц, и окруженную со всех сторон бесконечным количеством нулей. Пусть Lij(X) = L(x(i-i^j_\),... ,xtj,... ,X(i+1y(j+\)) представляет собой базовое правило Конвея в позиции (i, j). Назовем X “ручной” если Lij(X) = 0 при г £ [1. .8] или j $ [1.. 8]; в противном случае X является “дикой” поскольку активирует ячейки вне матрицы. а) Сколько ручных конфигураций X исчезают за один шаг “Жизни” делая все Ьц(Х)=0? б) Каков максимальный вес Xij среди всех таких решений? в) Сколько диких конфигураций исчезает внутри матрицы после одного шага “Жизни”? г) Чему равны минимальный и максимальный веса среди всех таких решений? д) Сколько конфигураций X делают Lij (X) = 1 для 1 < г, j < 8?
7.1.4 БИНАРНЫЕ ДИАГРАММЫ РЕШЕНИЙ 317 е) Найдите ручных 8 х 8-предшественников следующих шаблонов. (1) (4) (Здесь, как и в разделе 7.1.3, черные ячейки обозначают единицы в матрице.) 161. [28] Продолжая выполнять упр. 160, запишем L(X) = Y = (уу), если X представ- ляет собой ручную матрицу, такую, что Lij(X) = yij для 1 < i, j < 8. а) Сколько X удовлетворяют условию L(X) = X (“натюрморт”)? б) Найдите натюрморт размером 8 х 8 с весом 35. в) “Перевертыш” представляет собой пару различных матриц, обладающих тем свой- ством, что L(X)=Y, L(Y)=X. Подсчитайте их. г) Найдите перевертыш, у которого и X, и Y имеют вес 28. 162. [30] (Запертая “Жизнь’!) Если X и L(X) ручные, но L(L(X)) дпкяя, мы говорим, что X “сбегает” из клетки за три шага. Сколько матриц 6x6 сбегают из своих клеток 6x6 ровно после к шагов для к = 1, 2, ... ? 163. [23] Докажите формулы (112) и (113) для размеров БДР бесповторных функций. 164. [М27] Чему равен максимум B(f) среди всех бесповторных функций /(ял,..., хп)? 165. [М21] Проверьте формулы с числами Фибоначчи (115) для В(ит) и B(vm). 166. [M2ff] Завершите доказательство теоремы W. 167. [21] Разработайте эффективный алгоритм для вычисления перестановки тг, для ко- торой для заданной бесповторной функции f(xy,... ,хп) минимизированы как B(f7r), так и вег, Г). 168. [HMJ0] Рассмотрим следующие бинарные операции над упорядоченными парами z = (а:,!/): z о z = (х,у) о (х ,у ) = (х + х', min(it 4- у, х 4- у))\ z»z = (х, у) • (х', у) = (х 4- х 4- min(j/, у), max(j/, у)). (Эти операции являются ассоциативными и коммутативными.) Пусть Si — {(1,0)} и sn = JJ {z о z | z е Sk, z е sn~k} и U {z • z | z е Sk, z е sn-k} для п > 1. k=l к=1 Таким образом, S2 = {(2,0), (2,1)}; S3 = {(3,0), (3,1), (3,2)}; S4 = {(4,0),..., (4,3), (5,1)} и т. д. а) Докажите, что существует бесповторная функция /(ял,..., хп), для которой мы име- ем min„ B(fn) = с и min„ B(fn, f7’) = с' тогда и только тогда, когда (|с' — 1, с— |с' — 1) е Sn- б) Истинно или ложно следующее утверждение? 0 < у < х для всех (х, у) 6 Sn- в.) Покажите, что если zT = (х 4- у, х — у)/>/2, то zT о z'T = (z» z')T и zT • z'T = (z о z')T. г) Докажите, что если (1 представляет собой константу в (116), то х2 4- у2 < п2^ для всех (х, у) 6 Sn- Указания: пусть \z\2 = х2 + у2; достаточно доказать, что |z • z'| < 2*3 = у/т.ф при 0 < у < х, 0 < у' < х', \z\ = г = (1— 6)13, \z'\ = г' = (l-l-fS)^ и 0 < <5 < 1. Если также у = у', z • z' лежит внутри эллипса (a cos 6 4-5 sin в, b sin в), где а = г 4- г' иЬ = у/г г'. 169. [MJ6] Выполняется ли условие min7rB(/’r) < B(v2m+i) Для каждой бесповторной функции / от 22m+1 переменных?
318 КОМБИНАТОРНЫЙ ПОИСК 7.1.4 170. [М25] Будем называть булеву функцию “худой” (“skinny”), если ее БДР включает все переменные простейшим возможным способом: худая БДР имеет ровно один узел ветвления (j) для каждой переменной х3, и либо LO, либо HI в каждом ветвлении является стоковым узлом. а) Сколько булевых функций f(xi,...,хп) является худыми в указанном смысле? б) Сколько из них монотонных? в) Покажите, что ft(xi,..., a?n) = [(ti ... a?n)2 > t] является худой, когда 0 < t < 2П и t нечетно. г) Что собой представляет функция, дуальная функции ft из п. (в)? д) Поясните, как найти кратчайшие формулы CNF и DNF для ft для заданного t. 171. [М26] Продолжая выполнять упр. 170, покажите, что функция является бесповтор- ной и регулярной тогда и только тогда, когда она худая и монотонная. 172. [Л/27] Сколько худых функций являются также функциями Хорна? Сколько из них обладают тем свойством, что как /, так и / удовлетворяют условию Хорна? 173. [НМ88] Сколько в точности булевых функций f(xi,... ,хп) являются худыми после некоторого переупорядочения переменных f(xi„,...,sw)? 174. [M3ff] Пусть Sn представляет собой количество булевых функций f(xi,хп), БДР которых является “тонкой” в том смысле, что она имеет ровно один узел, помеченный как (J), для 1 < ji < п. Покажите, что Sn также является количеством комбинаторных объектов следующих типов. а) Перестановки Деллака порядка 2п (т. е. перестановки pvp-i .. .р2п, такие, что [fc/2] < Pk < п + [fc/2] для 1 < к < 2п). б) Разупорядочения Дженоччи порядка 2п + 2 (а именно, перестановки щдг • • • <?2п+2, такие, что дь > к тогда и только тогда, когда fc нечетно, для 1 < к < 2п+2; кроме того, в разупорядочении дь ф к). в) Неприводимые пистолеты Дюмона порядка 2п + 2 (а именно, последовательности Г1Г2 .. .Г2п+2, такие, что к < гк < 2п + 2 для 1 < к < 2п+2 и {п,Г2,... ,Г2п+г} = {2,4,6,..., 2п, 2п+2}, с тем особым свойством, что 2к Е {и,..., T2k-i} для 1 < к < п). г) Пути от (1,0) до (2п + 2,0) в ориентированном графе (7,3)—>(8,3)—> t 4 (5,2)—> (6,2)—> (7,2)—> (8,2)—> t i t i (3,1)—>(4,1)—>(5,1)—>(6,1)—>(7,1)—>(8,1)—> (1,0)—> (2,0)—> (ЗД)—> (4Д))—> (5?0) —> (6Д))—> (7Д)—> (8Д))—> • (Обратите внимание, что подсчитать объекты типа (г) очень легко.) 175. [МЗО] Продолжая выполнять упр. 174, найдите способ подсчета булевых функций, БДР которых содержит ровно b3-i узлов, помеченных @, при заданном профиле (Ъо,..., Ьп—1 , Ьп). 176. [М35] Для завершения доказательства теоремы X мы воспользуемся упр. 6.4-78, которое гласит, что {Ло,ь | a Е А и Ь 6 В} является универсальным семейством хеш- функций, отображающих п бит на I бит, когда /ги,ь(т) = ((ах + Ь) (#Г— I))mod21, А = {а | 0 < а < 2", а нечетно}, В = {Ь | 0 < Ь < 2П-1} и 0 < I < п. Пусть I — {ha,b(p) I р е F} и J = {ha,b(q) | д Е Q}. а) Покажите, что если 21 — 1 < 2t-1e/(l — е), то существуют константы а 6 А и b 6 В, для которых |7| > (1 -е)2‘ и |J| > (1 -е)2‘. б) Для таких заданных а положим J = {Д,...,где 0 = ji < •• < j\j\, и вы- берем О' = {gi,...,g|j|} С Q, так что Ло,ь(дк) = jk для 1 < к < |J|. Пусть д(д)
7.1.4 БИНАРНЫЕ ДИАГРАММЫ РЕШЕНИЙ 319 обозначает средние I — 1 бит aq, а именно (aq ~Э> (п — I + 1)) mod2* \ Докажите, что g(q) / g(q')> когда q и </ представляют собой различные элементы множества Q" = {91,9з, • • •, <?2П J|/2] -1}- в) Докажите, что следующее множество Q* удовлетворяет условию (120), когда I > 3 и у = а: Q* = {д | 9 6 Q", g(q) четно, и д(р) + g(q) = 2i-1 для некоторого р 6 Р}. г) Наконец покажите, что |Q*| достаточно велико для доказательства теоремы X. 177. [Л1£2] Завершите доказательство теоремы А путем ограничения всего квази-про- филя. 178. [МЯ4] (Амано (Amano) и Маруока (Maruoka).) Улучшите константу в (121), исполь- зуя лучшее упорядочение переменных: Zn(a?2n-i,a;i,a;3, - - -, Х2п-з; Х2п, Х2, Х4, • • ,^2п-2)- 179. [MJ7] Удовлетворяет ли средний бит умножения условию Bm-,n(Zn) = 0(26"^5)? 180. [МЯТ] Докажите теорему Y, используя указания из раздела. 181. [МЯ1 ] Пусть Lm,n является функцией старшего бита Z^„n^(a?i,..., хт; У1, , Уп)- Докажите, что Bmin(Pm,n) = О(2тп) при т < п. 182. [Л156] (И. Вегенер (I. Wegener).) Растет ли jBmin(Ln,n) экспоненциально при п —> оо? ► 183. [МЯ5] Изобразите несколько первых уровней БДР для “ограничивающей функции старшего бита” [(.Т1Т3Т5 ... )г • (.Х2Х4Я6 • • • )г > |], которая имеет бесконечно много булевых переменных. Сколько узлов Ъь имеется на уров- не fc? (Мы не можем позволить (.2:12:32:5 ... )г или (.Х2Х4%е ... )г заканчиваться бесконечным количеством единиц.) 184. [МЯЗ] Что собой представляют профили БДР и НДР функции перестановки Рт7 185. [МЯ5] Насколько большим может быть значение Z(f), когда f представляет собой симметричную булеву функцию от п переменных? (См. упр. 44.) 186. [10] Какая булева функция от {11,2:2,2:3,2:4,2:5,2:6} имеет НДР l(-^jj’? ► 187. [Я0] Изобразите НДР для всех 16 булевых функций f(xi,X2) от двух переменных. 188. [16] Выразите эти 16 булевых функций f(xi,X2) в виде семейств подмножеств мно- жества {1,2}. 189. [1S] Какие функции /(a?i,... ,хп) обладают НДР, совпадающей с БДР? 190. [Я0] Опишите все функции /, для которых (a) Q(f) = B(f); (б) Q(f) — Z(f). ► 191. [НМЯ5] Сколько функций f(xi,..., з;п) не имеют [Т] в своих НДР? 192. [МЯО] Определим ^-преобразование бцнарных строк следующим образом: ez = е, 0z = 0, lz = 1 и (a/3)Z = < az0n, azfiz, если |а| = п и fi = О"; если |а| = п и fi = а; если |а| = |/3| — 1 или если |а| = |/3| = п и а fi 0". а) Что собой представляет 1100100100001llllz? б) Истинно или ложно следующее утверждение? (rz)z = г для всех бинарных строк т. в) Если f(xi,... ,хп) представляет собой булеву функцию с таблицей истинности т, обозначим как fz(xi,... ,хп) булеву функцию, таблицей истинности которой явля- ется tz . Покажите, что профиль / почти идентичен z-профилю fz, и наоборот. (Следовательно, теорема U выполняется как для НДР, так и для БДР, и статистика, такая как (80), корректна и для z-профилей.)
320 КОМБИНАТОРНЫЙ поиск 7.1.4 193. [Л/21] Продолжая выполнять упр. 192, ответьте, что собой представляет (xi,..., а?п) при 0 < к < п? 194. [М25] Сколько f(xi,хп) имеют z-профиль (1,..., 1)? (См. упр. 174.) 195. [24] Найдите Z(Mz), Zm\n(Mz) и 2тах(Мг), где Мг представляет собой 4-канальный мультиплексор. 196. [М21] Найдите функцию f(xi,..., а;п), для которой Z(f) = О(п) и Z(f) = П(п2). 197. [25] Модифицируйте алгоритм из упр. 138 так, чтобы он вычислял “главную z- профилограмму” /. (Тогда Zmin(/) и Zmax(/) можно найти, как в упр. 133.) 198. [23] Поясните, как вычислить И(/,р) с использованием НДР вместо БДР (см. (55)). 199. [21] Аналогично реализуйте (а) ИЛИ(/, р), (б) ЛИБО(/, д), (в) НО-НЕ(/,д). 200. [21] И еще раз аналогично реализуйте MUX(/,p, h) для НДР (см. (62)). 201. [22] Каждая проецирующая функция Xj имеет простую трехузловую БДР, но их НДР-представление более сложное. Предложите способ реализации этих функций с ис- пользованием инструментария НДР общего назначения. 202. [24] Какие изменения требуется внести в алгоритм без привлечения дополнительной памяти из упр. 147, когда обмен уровней (и) <-> (у) выполняется не в базе БДР, а в базе НДР? 203. [М24] (Алгебра семейств.) При работе с конечными семействами конечных подмно- жеств положительных целых чисел и их представлениями в виде НДР полезны следующие алгебраические соглашения. Простейшими такими семействами являются пустое семей- ство, обозначаемое как 0 и представляемое [Т]; единичное семейство {0}, обозначаемое как е и представляемое [Т]; и элементарные семейства {{/}} для j > 1, обозначаемые как ej и представляемые узлом ветвления (7) с LO = [±~| и HI = [т]. (В упр. 186 показана НДР для е3.) Два семейства, f и д, можно скомбинировать с помощью обычных операций с мно- жествами. • Объединение fUg={a\aef или a G д] реализуется с помощью ИЛИ(/,р). • Пересечение /Пр = {а|а€/иа€р} реализуется с помощью И(/, д). • Разность f\g={a\aefwa^g} реализуется с помощью НО-НЕ(/, д). • Симметричная разность f ®д = (f\g)O(g\f) реализуется с помощью ЛИБО(/, д). Мы также определяем три новых способа построения семейств подмножеств. • Соединение (join) fUg={aUft\aefnfteg}, иногда записываемое просто как fg. • Встреча (meet) /Пр={аГ))3|ае/и /71= р}. • Дельта (delta) fHig = {a(&ft\oiefiifte р}. Все три операции коммутативны и ассоциативны: f U р = р U /, f U (р U h) = (f LJ р) LI h и т. д. а) Предположим, что f = {0, {1,2}, {1,3}} = е U (ei LJ (ег U е3)) и р = {{1,2},{3}} = (ei LJ ег) U е3. Что собой представляют / Lip и (f П р) \ (f ЕВ ei)? б) Любое семейство f можно также рассматривать как булеву функцию f(xi, Х2, ), где a G f <=> /([1 G а], [2 G а],...) = 1. Опишите операции LJ, П и ЕВ через булевы логические формулы. в) Какие из приведенных далее формул выполняются для всех семейств f,gtifi? (i) fU (gUh) = (fUg)U(fUh); (ii) /n(pUh) = (/Пр)и(/ПА); (iii) /U(pnh) = (/Up)n(/Ufc); (iv) f U (p LJ h) = (f U p) LJ (f U h); (v) f ffl 0 = 0 П p = h Li 0; (vi) f П e = e. г) Мы говорим, что f и p ортогональны, записывая это как f ± р, если а Г) ft = 0 для всех a G f и всех ft G р. Какие из приведенных далее утверждений истинны
7.1.4 БИНАРНЫЕ ДИАГРАММЫ РЕШЕНИЙ 321 для всех семейств fug? (i) f ± д <=> f П д = е; (ii) f ± д => |/ LJ р| = |/||р|; (iii) |/ LJ р| = |/| |р| => / ± р; (iv) / ± д <=> / U д = / Н д. д) Опишите все семейства /, для которых справедливы следующие утверждения: (i) /U д = д для всех д; (ii) fUg = д для всех g; (iii) /Пр = р для всех р; (iv) /U(ei Lle2) = /; (v) / U (ei U e2) = /; (vi) / ffi ((ei U e2) U e3) = /; (vii) / ffi / = e; (viii) / П / = /. ► 204. [M25] Продолжая выполнять упр. 203, рассмотрим две другие важные операции над семействами / и р. • Частное (quotient) f /д = {а | a U ft € / и artfl = 0 для всех (3 € р}. • Остаток (remainder) f modp = / \ (р LJ (f/g))- Частное иногда также называют “кофактором” (“cofactor”) / по отношению к р. а) Докажите, что //(р U h) = (f/g) О (f/h). б) Предположим, что / = {{1, 2}, {1,3}, {2}, {3}, {4}}. Что собой представляют //е2 и fKf/viyi в) Упростите выражения //0, //е, /// и (/ modp)/p для произвольных / и р. г) Покажите, что f/g = f/(f/(f/g))- Указание: начните с отношения р С //(//р). д) Докажите, что f/g можно также определить как |J {h | р LJ h С / и р ± h}. е) Покажите, что для заданных / и j семейство / имеет единственное представление (ej LJ р) U h с ej±(pU h). ж) Истинны или ложны следующие утверждения? (/LJp) mod e5 =(/mod е5) U(p mod e5); (/ П g)/ej=(f/ej) П (д/с,). 205. [М25] Реализуйте пять базовых операций алгебры семейств, а именно (a)/LJp, (б)/П р, (в) / ЕВ р, (г) f/g и (д) / mod р, используя соглашения из упр. 198. 206. [MJ6] Чему равно время работы алгоритмов из упр. 205 в наихудшем случае? ► 207. [М25] Когда в приложениях требуется одна или несколько проецирующих функ- ций xj, как в упр. 201, очень удобным оказывается следующий “симметризующий” опе- ратор: (е,, Uе*2 U • • • Uei,) § k = S^x^,!^,...,!^), целое fc > 0. Например, ej § 1 = Xj-, ej § 0 = Xj\ (et U ej) §1 = 1,® Xj; (e2 Ue3U e3) § 2 = (a;2 Л хз Л хъ) V (г2 Л хз Л хъ) V (хз Л хз Л х$). Покажите, что этот оператор легко реализуется. (Заметим, что е,, U • • • U ej, имеет при I > 0 очень простую НДР размером I 4- 2.) ► 208. [16] Покажите путем модификации алгоритма С, что все решения булевой функции можно легко подсчитать и в ситуации, когда вместо БДР функции задана ее НДР. 209. [М21] Поясните, кгйгвычислить полностью детализированную таблицу истинности булевой функции из ее НДР-представления. (См. упр. 31.) ► 210. [23] Покажите, как при заданной НДР для / построить НДР для функции д(х) = [/fa) = 1 и i/a? = max{i/p| f(y) = 1}]. 211. [М20] Справедливо ли соотношение Z(f) < B(f), когда / описывает решения задачи точного покрытия? ► 212. [25] Укажите эффективный способ вычисления НДР для задачи точного покрытия. 213. [J6] Почему нельзя покрыть костями домино обрезанную шахматную доску? ► 214. [21] Когда некоторая фигура покрывается костями домино, мы будем говорить, что покрытие является безошибочным, если каждая прямая линия, пересекающая внутрен- ность фигуры, пересекает также внутренность некоторого домино. Например, правое покрытие в (127) является безошибочным, в отличие от среднего, таковым не являющегося; о левом не приходится и говорить. Сколько покрытий шахматной доски костями домино являются безошибочными? 11 Зак. 3331
322 КОМБИНАТОРНЫЙ поиск 7.1.4 215. [21] Японские циновки татами являются прямоугольниками 1x2, которые традици- онно используются для покрытия прямоугольных полов таким образом, чтобы ни в одном углу не встретились 4 циновки одновременно. Например, на рис. 29, (а) показано покрытие прямоугольника 6 х 5 из издания 1641 года книги Мицуёши Ёшиды (Mitsuyoshi Yoshida) Jinkoki, которая впервые была опубликована в 1627 году. Найдите все покрытия шахматной доски костями домино, отвечающие правилам покрытия татами. Рис. 29. Два красивых примера: (а) покрытие татами XVII века; (б) трехцветное покрытие домино. 216. [50] На рис. 29, (б) показано покрытие шахматной доски красными, синими и белыми домино таким образом, что никакие два домино одного цвета не прилегают одно к другому. а) Сколькими способами это можно сделать? б) Сколько из 12988816 покрытий костями домино являются раскрашиваемыми в 3 цвета? 217. [20] Покрытие мономино/домино/тримино, показанное в (130), как оказывается, удо- влетворяет дополнительному ограничению: никакие две конгруэнтные фигуры не являют- ся смежными. Сколько из упомянутых в тексте 92 секстиллионов покрытий являются “раздельными” в указанном смысле? 218. [24] Примените методы работы с БДР и НДР к задаче поиска пар Лэнгфорда, рас- сматривавшейся в начале этой главы. 219. [20] Чему равно Z(F), когда F является семейством (a) WORDS(IOOO); (б) WORDS(2000); ...; (д) W0RDS(5000)? 220. [21] z-профиль для 5757 слов из Stanford GraphBase, представленных 130 перемен- ными ai.. zb, как рассматривалось в (131), имеет вид (1, 1, 1, ..., 1, 1, 1, 23, 3, ..., 6, 2, 0, 3, 2, 1, 1, 2). \ а) Поясните элементы профиля 23 и 3, соответствующие переменным аг и Ь2. б) Поясните последние элементы 0, 3, 2, 1, 1, 2, соответствующие переменным tig, ws, х& и т. д. 221. [М27] Чтобы представить 5757 наиболее распространенных пятибуквенных слов ан- глийского языка с использованием 130 переменных, достаточно 5020 узлов, что связано с лингвистическими свойствами обрабатываемых данных. Однако всего существует 26® = 11881 376 возможных пятибуквенных слов. Предположим, что мы выбираем 5757 из них случайным образом. Насколько большой, в среднем, окажется при этом НДР? 222. [27] При применении алгебры семейств к пятибуквенным словам, как в (131), 130 переменных называются ai, bi, ..., zg вместо a?i, а?2, ..., а?1зо; а соответствующие элемен- тарные семейства обозначаются символами ai, bi, ..., zg вместо ei, е2, ..., ещо- Таким образом, семейство F = WORDS (5757) можно построить путем синтезирования формулы F = (wi U h2 U i3 U с4 U h5) U • • • U (f 1 U и2 U пз U п4 U у5) U • • • U (р! U и2 U pg U а4 U 15). а) Пусть р обозначает универсальное семейство всех подмножеств {щ,... ,zs}, именуе- мое также “показательным множеством’.’ Что означает формула F П р? б) Пусть X = Xi U • • • U Хъ, где Xj = {а^,Ь5,..., Zj}. Поясните формулу F ПХ.
7.1.4 БИНАРНЫЕ ДИАГРАММЫ РЕШЕНИЙ 323 в) Найдите простую формулу для всех слов F, которые соответствуют шаблону t*u*h. г) Найдите формулу для всех слов SGB, которые содержат ровно к гласных, для О < к < 5 (рассматривайте как гласные только а, е, i, о и и). Положите Vj = a.j U ej U ij U Oj U uj. д) Сколько имеется шаблонов, в которых определены ровно три буквы, соответству- ют как минимум одному слову SGB? (Например, таким шаблоном является m*tc*.) Приведите формулу. е) Сколько из этих шаблонов соответствуют не менее чем двум словам (как, например, шаблон ♦ate*)? ж) Выразите все слова, которые остаются словами, когда ‘Ъ’ заменяется на ‘о’. з) Какой смысл заключен в формуле FfVit и) Сравните (Xi U V2 LJ V3 U V4 U X5) П F c (Xi U X5) \ ((p\F)/(V2 U V3 LI V4)). 223. [28] “Медианное слово” представляет собой пятибуквенное слово р = pi... р3, кото- рое может быть получено из трех слов а = оц .. .а3, /3 = Д ... /Зв, 7 = 71... 75 согласно правилу [а» = д<] 4- [/3i = pi] 4- [7» = pt] = 2 для 1 < г < 5. Например, mixed является медианой слов {fixed,mixer,mound}, а также слов {mated,mixup,nixed}. Но noted не яв- ляется медианой {notes, voted,naked}, поскольку каждое из этих слов имеет е в четвертой позиции. а) Покажите, что {d(a, p),d(/3, p),d(7,p)} представляют собой либо {1,1,3}, либо {1,2, 2}, когда д является медианой {а, /3,7}. (Здесь d означает расстояние Хэмминга.) б) Сколько медиан можно получить из WORDS(п), когда п = 100? 1000? 5757? в) Сколько из этих медиан принадлежат WORDS(тп), когда т = 100? 1000? 5757? ► 224. [20] Предположим, что мы образуем НДР для всех путей от источника к стоку в ориентированном ациклическом графе, как на рис. 28, когда этот ориентированный ацик- лический граф представляет собой лес; т. е. считаем, что каждая вершина ориентиро- ванного ациклического графа, не являющаяся источником, имеет входящую степень 1. Покажите, что соответствующая НДР, по сути, такая же, как и бинарное дерево, пред- ставляющее лес при условии “естественного соответствия между лесами и бинарными деревьями” (см. 2.3.2-(1)-2.3.2-(3)). ► 225. [50] Разработайте алгоритм, который будет строить для заданного графа и двух различных вершин {s, t] этого графа НДР для всех множеств ребер, образующих простой путь от ^ до t. ► 226. [20] Модифицируйте алгоритм из упр. 225 так, чтобы он давал НДР для всех про- стых циклов заданного графа. 227. [20] Аналогично модифицируйте его так, чтобы он рассматривал только гамильто- новы пути от з до t. 228. [21 ] Измените его еще раз для гамильтоновых путей от з до любой другой вершины. 229. [15] Имеется 587218421488 путей от СА до ME в графах (18), но в (133) только 437 525 772 584 таких пути. Поясните такое различие. 230. [25] Найдите гамильтоновы пути в (133), имеющие минимальную и максимальную общие длины. Чему равна средняя длина, если все гамильтоновы пути равновероятны? 231. [23] Сколькими способами шахматный король может пройти из одного угла шахмат- ной доски в противоположный, не посещая одну и ту же клетку дважды? (Это простые пути из угла в угол графа Р3 и Р3.) ► 232. [23] Продолжая выполнять упр. 231, рассмотрим обход королем шахматной доски, который представляет собой гамильтонов цикл в Р3 и Р3. Определите точное количество обходов шахматной доски королем. Какой обход является наидлиннейшим в смысле прой- денного королем евклидова расстояния?
324 КОМБИНАТОРНЫЙ поиск 7.1.4 233. [25] Разработайте алгоритм для построения НДР для семейства всех ориентирован- ных циклов данного ориентированного графа. (См. упр. 226.) 234. [22] Примените алгоритм из упр. 233 к ориентированному графу из 49 почтовых кодов AL, AR, ..., WY из (18), с XY —> YZ, как в упр. 7-54, (б). Например, одним таким ориентированным циклом является NC —>СТ —>TN —>NC. Сколько всего ориентированных циклов может быть? Какова минимальная и максимальная длина такого цикла? 235. [22] Постройте ориентированный граф для пятибуквенных английских слов, в кото- ром х —> у, когда последние три буквы х соответствуют первым трем буквам у (например, crown—> owner). Сколько ориентированных циклов имеется в таком графе? Какие из них самые длинные и самые короткие? 236. [Л/25] Многие расширения алгебры семейств из упр. 203 напрашиваются сами собой при применении НДР к комбинаторным задачам, включая следующие пять операций над семействами множеств. • Максимальные элементы f* = {Из й€/|/3€/иаС/3 вытекает а = ft}. • Минимальные элементы = {Из а 6 f | ft 6 f и a D ft вытекает а = ft}. • Неподмножества f 7 g = {Из а 6 f | ft 6 g вытекает а 2 ft}- • Ненадмножества f \.g = {Из a G f | ft G g вытекает а 2 ft}- • Минимальные совпадающие множества = {Из а | ft G f вытекает а П ft Ф 0р. Например, когда f и g представляют собой семейства из упр. 203, (а), мы имеем /т = ci LJ (е2 U е3), fl = е, 7s = 0, рт = gl = g, р# = (ei U е2) LJ е3, f 7 g = ei Ll e3, f X g = e, g^f = g^f = 9- а) Докажите, что f 7 g = f \ (f П g), и приведите подобную формулу для f \ g. б) Пусть fc = {а | a G /} = f ЕВ U, где U = ei Ll е2 LJ • является “универсумом’.’ Ясно, что /сс' =/,(/ и g)c = fc и дс, (f П д)с = fc П дс, (f \ д)с = fc \ дс. Покажите, что имеются также законы дуальности /тс = fCi, fic = fc\ (f U g)c = fc П gc, (f П g)c = fcU gc-, (f 7 g)c = fc^gc,(f^ 9)c = fcs 9C', /» = (p Z fc)1- в) Истинны или ложны следующие утверждения? (i) xf = ei; (ii) a;} = ei; (iii) xj = ei; (iv) (xi V x2p = ei U e2; (v) (xi Л x2)^ = ei LJ e2. г) Какие из следующих формул выполняются для всех семейств f,gnh? (i) = /т; (ii) /п = fl; (iii) /и = /т; (iv) /|т = /г; (v) f61 = (vi) fn = (vii) fu = (viii) 7™ = /в; (ix) /и = (x) f 7 (g U h) = (f 7 g) П (/ 7 h); (xi) f 4 (g U h) = (/^P)n(/\h); (xii) 7\(pU/i) = (/Xfl)\A; (xiii) f 7gr = f 7g; (xiv) 7\pf = f\g; (xv) (7 Lip)1* = (/s Up’)1; (xvi) (7 Up)" = (7" U p1*)1. д) Предположим, что p = (Ju_„(cuLle^) является семейством всех ребер графа, и пусть 7 является семейством всех независимых множеств. Используя операции расширенной алгебры семейств, найдите простые формулы для выражения (i) f через р; (ii) р через 7- 237. [25] Реализуйте пять операций из упр. 236 в стиле упр. 205. 238. [22] Используйте НДР для вычисления максимальных порожденных двудольных подграфов графа смежных штатов США G из (18), а именно максимальных подмножеств U, таких, что G | U не имеет циклов нечетной длины. Сколько таких множеств U существует? Приведите примеры наименьшего из них и наибольшего. Рассмотрите также максималь- ные порожденные трехдольные (раскрашиваемые тремя цветами) подграфы. 239. [21] Поясните, как вычислить максимальную клику графа G с использованием ал- гебры семейств, когда G определен своими ребрами р, как в упр. 236, (д). Найдите мак- симальное множество вершин, которое может быть покрыто к кликами, для к = 1, 2, ..., когда G представляет собой граф (18).
7.1.4 БИНАРНЫЕ ДИАГРАММЫ РЕШЕНИЙ 325 ► 240. [22] Множество вершин U называется доминирующим множеством графа, если каждая вершина удалена не более чем на один шаг от U. а) Докажите, что каждое ядро графа является минимальным доминирующим множе- ством. б) Сколько минимальных доминирующих множеств имеет граф США (18)? в) Найдите семь вершин (18), доминирующих над 36 прочими. ► 241. [28] Граф ферзя Q& состоит из 64 полей шахматной доски, с и — v, когда поля и и v лежат в одном и том же ряду, столбце или на диагонали. Насколько велика НДР для его (а) ядер? (б) максимальных клик? (в) минимальных доминирующих множеств? (г) минимальных доминирующих множеств, являющихся кликами? (д) максимальных порожденных двудольных подграфов? Проиллюстрируйте каждую из этих пяти категорий наименьшим и наибольшим при- мерами. 242. [24] Найдите все максимальные способы выбора точек на решетке 8x8 так, чтобы никакие три точки не лежали на прямой линии с любым наклоном. 243. [М23] Замыканием fn семейства множеств f является семейство всех множеств, которые могут быть получены путем пересечения одного или нескольких членов /. а) Докажите, что /п = {а | а= Р|{/3 | ft е f и ft D а}}. б) Как эффективно вычислить НДР для /п при заданной НДР для /? в) Найдите производящую функцию для Fn при F = WORDS (5757), как в упр. 222. 244. [25] Что собой представляет НДР для функции связности для РзпРз (рис. 22)? Какой вид имеет БДР для функции остовного дерева того же графа? (См. следствие S.) ► 245. [М22] Покажите, что простые дизъюнкты монотонной функции f представляют собой Р1(/)#. 246. [М21] Докажите теорему S в предположении, что (137) истинно. ► 247. [М27] Определите количество легких булевых функций от п переменных для п < 7. 248. [М22] Истинно или ложно следующее утверждение? Если f и g легкие, то таковой же является и f(xi,..., хп) Л g(xi,..., хп). 249. [7ЯИ51] Функция связности графа “сверхлегкая” в том смысле, что она легкая при всех перестановках ее переменных. Имеется ли эффективный способ описания сверхлегких булевых функций? 250. [28] Имеется 7581 монотонная булева функция f(xi, х?, хз, Х4, хъ). Чему равны сред- ние значения B(f) и Z(PI(/)), когда одна из них выбрана случайным образом? Че- му равна вероятность того, что Z(PI(/)) > B(f)? Чему равно максимальное значение Z(PI(/))/B(/)? 251. [М46] Выполняется ли Z(PI(/)) = О(В(/)) для всех монотонных булевых функ- ций /? 252. Когда булева функция не является монотонной, ее простые импликанты вклю- чают отрицательные литералы; например, простыми импликантами функции (a?i? хг: а?з) являются Х1ЛХ2, Х1ЛХ3 и Х2ЛХ3. В таких случаях можно легко представить их с помощью НДР, если рассматривать их как слова на основе 2п-буквенного алфавита {е j, е\,..., еп, е'п}. “Подкуб” такой как 01*0*, при этом представляет собой e'j Ь1ег LJe4 в алгебре семейств (см. 7.1.1-(29)); a PI(xi? Х2: хз) = («i LJ е2) U (e'i LJ е3) U (е2 LJ е3). В упр. 7.1.1-116 показано, что симметричные функции от п переменных могут иметь fi(3n/n) простых импликант. Насколько большим может быть значение Z(PI(/)), когда функция / симметрична?
326 КОМБИНАТОРНЫЙ ПОИСК 7.1.4 253. [Л/26] Продолжая выполнять упражнение 252, докажите, что если f = (xiA/o) V (xiAfi), то мы имеем PI(/) = A U (ejUB) U (e1UC), где А = Р1(/о Л /1), В = Р1(/о) \ А и С = PI(/i)\А. (Уравнение (137) представляет собой частный случай, когда f монотонна.) 254. [М23] Пусть функции f и д из (52) монотонны, а также f С д. Докажите, что PI(fl)\PI(/) = (PI(fli)\PI(/O)u(PI(flh)\PI(AUflI)). 255. [25] Мультисемейство множеств, в котором члены / могут встречаться более одного раза, может быть представлено как последовательность НДР (/о, /1, /г,... ), в которой Д является семейством множеств, которые встречаются в f (... 020100)2 раз, где аь = 1. Например, если а появляется в мультисемействе ровно 9 = (1001)2 раз, а должно быть в /3 и /о. а) Поясните, как вставлять элементы в такое представление мультисемейства и удалять их из него. б) Реализуйте объединение мультимножеств h = / W д для мультисемейств. 256. [М32] Любое неотрицательное целое число х можно представить в виде семейства подмножеств двоичных степеней U = {22* | к > 0} = {21,22,24,28,...} следующим образом: если х = 2е1 + - • + 2е‘, где ei > • • > et > 0 и t > 0, соответствующее семейство имеет t множеств Ej С U, где 2ej = П{и | и € Е,-}. И обратно, каждое конечное семейство конечных подмножеств U соответствует неотрицательному целому числу х. Например, число 41 = 2® 4-23 + 1 соответствует семейству {{21,24},{21,22},0}. а) Найдите простую связь между бинарным представлением х и таблицей истинности булевой функции, которая соответствует семейству для х. б) Пусть Z(x) является размером НДР для семейства, которое представляет х, когда элементы U проверяются в обратном порядке ..., 24, 22, 21 (наивысшие степени ближе к корню); например, 2(41) = 5. Покажите, что Z(x) = O(loga;/logloga;). в) Целое число х называется “разреженным” если Z(x) существенно меньше верхней границы из п. (б). Докажите, что сумма разреженных целых чисел является разре- женной в том смысле, что Z(x 4- у) = O(Z(x)Z(y)). г) Всегда ли разреженна разность с насыщением разреженных целых чисел х — у? д) Всегда ли разреженно произведение разреженных целых чисел? 257. [40] (Ш. Минато (S. Minato).) Исследуйте применение НДР для представления поли- номов с неотрицательными целыми коэффициентами. Указание: любые такие полиномы от х, у и z могут рассматриваться как семейства подмножеств {2,22,24,...,х,х2,х4, ...,у, у2, у4,... , z, z2, z4, - -. например, х3 + Зху-I-2z естественным образом соответствует семей- ству {{а;, а;2}, {а;, у}, {2, х, у], {2, z}}. 258. [25] Каков минимальный размер БДР, имеющей ровно п решений, для заданного положительного целого числа п? Ответьте на этот вопрос и для минимального размера НДР. 259. [25] Последовательность скобок можно закодировать как бинарную строку, в кото- рой 0 представляет ‘(’, а 1 представляет Например, ())(() кодируется как 011001. Каждый лес из п узлов соответствует последовательности из 2п корректно вложен- ных скобок в том смысле, что левые и правые скобки соответствуют одна другой обычным образом. (См., например, 2.3.3-(1) или 7.2.1.6-(1).) Пусть Nn(xi,..., а?2п) = [a?i... а?2п представляет корректно вложенные скобки]. Например, Nz(0,1,1,0,0,1) = 0 и Мз(0,0,1,0,1,1) = 1; в общем случае Nn имеет Сп и 4п/(х/тгп3/2) решений, где Сп — число Каталана. Чему равны B(Nn) и Z(Nn)?
7.1.4 БИНАРНЫЕ ДИАГРАММЫ РЕШЕНИЙ 327 260. [Л/27] В разделе 7.2.1.5 мы увидим, что каждое разбиение {1, ...,п} на непересе- кающиеся подмножества соответствует “ограниченно растущей строке” щ... ап, которая является последовательностью неотрицательных целых чисел с тем свойством, что ai = 0 и aj+i < 1 4- max(ai,..., a5) для 1 < j < п. Элементы j и к принадлежат одному и тому же подмножеству разбиения тогда и только тогда, когда а} = аь- а) Пусть Xjtk = [aj = fc] для 0 < к < j < пи пусть Rn представляет собой функцию от этих ("J1) переменных, которая истинна тогда и только тогда, когда ai... ап представляет собой ограниченно растущую строку. (Изучая эту булеву функцию, можно изучить семейство всех разбиений множества, а накладывая дополнительные ограничения на Rn, можно изучить разбиения множеств со специальными свойства- ми. Имеется татюо ~ 5 х 10115 разбиений множеств при п = 100.) Вычислите B(Rioo) и Z(Rioo). Приблизительно насколько велики B(Rn) и Z(Rn) при п —> оо? б) Покажите, что в случае надлежащего упорядочения переменных Xj,k база БДР для [Ri,..., Rn} имеет то же количество узлов, что и БДР для одной Rn. в) Можно также использовать меньшее количество переменных, примерно nlgn вместо ("J1), если представить каждое аь как бинарное целое число с [lg fc] бит. Насколько велики базы БДР и НДР в этом представлении разбиений множеств? 261. [НМ21] “Детерминированный конечный автомат с наименьшим количеством состо- яний, принимающий любой заданный регулярный язык, является единственным" Какая имеется связь между этой знаменитой теоремой теории автоматов и теорией бинарных диаграмм решений? 262. [М26] Определение оптимальных булевых цепочек в разделе 7.1.2 существенно уско- ряется, если ограничиться рассмотрением булевых функций, являющихся нормальными в том смысле, что /(0, ...,0) = 0. (См. 7.1.2-(10).) Аналогично можно ограничить БДР так, что каждый из их узлов будет обозначать нормальную функцию. а) Поясните, как это сделать путем введения “дополняющих связей” которые указывают на дополнение подфункции вместо нее самой. б) Покажите, что каждая булева функция имеет единственную нормализованную БДР. в) Изобразите нормализованные БДР для 16 функций из упр. 1. г) Пусть B°(f)—размер нормализованной БДР для /. Найдите средний и наихудший случаи В°(/) и сравните В°(/) с B(f). (См. (80) и теорему U.) д) База БДР для умножения 3 х 3 из (58) имеет B(Fi,..., Fe) = 52 узла. Чему равно B°(Fi,...,F6)? е) Как следует изменить (54) и (55) при реализации И с дополняющими связями? 263. [RM25] Линейный блочный код представляет собой множество бинарных векторов- столбцов х = (а?1,..., хп)т, таких, что Нх = 0, где Н — заданная “матрица проверки четности” (parity check matrix) размером m х n. а) Линейный блочный код с n = 2m -1, столбцы которого представляют собой ненулевые бинарные тп-кортежи от (0,..., 0,1)т до (1,..., 1,1)т, называется кодом Хэмминга. Докажите, что код Хэмминга исправляет одну ошибку в смысле упр. 7-23. б) Пусть f(x) = [Вх = 0], где Н является матрицей размером m х п, в которой нет полностью нулевых столбцов. Покажите, что профиль БДР для f имеет простую связь с рангами подматриц Н mod 2, и вычислите B(f) для кода Хэмминга. в) В общем случае пусть f(x) = [а; является кодовым словом] определяет произвольный блочный код. Предположим, что некоторые кодовые слова передаются через, возмож- но, зашумленный канал, и мы получили биты у = yi. .уп, причем канал передает сигнал так, что уь = хь с вероятностью рк для каждого fc независимо. Поясните, как
328 КОМБИНАТОРНЫЙ поиск 7.1.4 определить наиболее вероятное кодовое слово х для заданных у, pi, ..., рп и БДР для /. 264. [М^б] “Широкое обобщение” алгоритмов В и С в тексте раздела, основанное на (22), включает много важных приложений; но, похоже, оно не включает такие величины, как п п—1 п— 1 П—j max (WfcXfc + w'kXkXk+i ) или max [ Wj^ хк .Хк+3 1 fc—1 fc=i /С1) 1 k=i которые также могут быть эффективно вычислены из БДР или НДР для /. Разработайте еще более широкое обобщение. 265. [21] Разработайте алгоритм, который находит т-е наименьшее в лексикографиче- ском порядке xi... хп решение уравнения f(x) — 1 для заданного т и БДР для булевой функции f от п переменных. Ваш алгоритм должен выполняться за O(nB(f) +п2) шагов. 266. [20] Каждый лес F, узлы которого пронумерованы как {1,..., п} в прямом порядке обхода, определяет два семейства множеств: a(F) = {апс(1),..., апс(п)} и d(F) = {dec(l),..., dec(n)}, где anc(fc) и dec(k) представляют собой включительно предков и потомков узла fc. Напри- мер, если F имеет вид то a(F) = {{1}, {1,2}, {3}, {3,4}, {3,5}} и d(F) = {{1,2}, {2}, {3,4,5}, {4}, {5}}. И обратно, F можно восстановить либо из a(F), либо из d(F). Докажите, что НДР для семейства a(F) имеет ровно п + 2 узлов. 267. [НМ32] Продолжая выполнять упр. 266, найдите минимальный, максимальный и средний размеры НДР для семейства d(F) при F, пробегающем все леса с п узлами. Мы не смеем более удлинять эту книгу, дабы соблюсти пропорции и не отпугнуть читателя ее размерами. — АЛЬФРИК (7LFRIC), Проповеди (Catholic Homilies //) (ок. 1000 г.)
7.2.1.1 ГЕНЕРАЦИЯ ВСЕХ п-КОРТЕЖЕЙ 329 7.2. ГЕНЕРАЦИЯ ВСЕХ ВОЗМОЖНЫХ ОБЪЕКТОВ — Все в наличии или учтены, сэр! (—All present or accounted for, sir.) — Традиционный рапорт в американской армии — Все в наличии и на месте, сэр! (—All present and correct, sir.) — Традиционный рапорт в английской армии 7.2.1. Генерация основных комбинаторных объектов В этом разделе рассматриваются методы обхода всех возможных объектов некото- рой комбинаторной генеральной совокупности, поскольку часто приходится сталки- ваться с задачами, в которых необходим или желателен исчерпывающий перебор. Например, нам могут потребоваться все перестановки некоторого множества. Одни авторы называют эту задачу перечислением (enumerating) всех возможно- стей; однако это не совсем верное слово, так как “перечисление” чаще всего означает, что мы хотим просто подсчитать общее количество вариантов, а не просмотреть их все. Если некто просит вас перечислить перестановки множества {1,2,3}, вы вполне обоснованно утверждаете, что ответом является 3! = 6; вам. не приходится давать более полный ответ {123,132,213,231,312,321}. Другие авторы говорят о составлении списка (listing) всех возможностей, но это также не слишком удачный термин. Ни один человек в здравом уме не станет составлять список из 10! = 3 628 800 перестановок множества {0,1,2,3,4,5,6,7,8,9} ни путем печати на тысячах листов бумаги, ни даже записывая их в текстовый файл. Все, что нам в действительности нужно, — это чтобы каждая из них некоторое время пребывала в определенной структуре данных с тем, чтобы программа могла по очереди поработать со всеми возможными перестановками. Поэтому мы говорим о генерации (generating) всех требующихся нам комби- наторных объектов и о поочередном посещении (visiting) каждого объекта. Так же, как при изучении алгоритмов для обхода деревьев в разделе 2.3.1, где наша цель состояла в посещении каждого узла дерева, нам требуются алгоритмы для систематического обхода комбинаторного пространства возможностей. Он всех их зачислил — Он всех их зачислил; И никто не упущен— Никто не пропущен. — УИЛЬЯМ С. ГИЛЬБЕРТ (WILLIAM S. GILBERT), Микадо (The Mikado) (1885) 7.2.1.1. Генерация всех n-кортежей. Начнем с малого, рассмотрев обход всех 2П строк, состоящих из п двоичных цифр. Иначе говоря, попробуем обойти все п- кортежи (щ,..., ап), где каждый элемент aj является либо нулем, либо единицей.
330 КОМБИНАТОРНЫЙ ПОИСК 7.2.1.1 (2) Эта задача, по сути, эквивалентна просмотру всех подмножеств данного множества {a?i,...,а?п}, поскольку можно сказать, что Xj находится в подмножестве тогда и только тогда, когда aj = 1. Конечно, такая задача имеет до абсурда простое решение. Все, что нужно,— начать с двоичного числа (0... 00) 2 = 0 и многократно добавлять к нему 1, пока не будет достигнуто число (1... 11)г = 2n — 1. Однако вскоре, при более глубоком анализе, мы увидим, что эта очень простая задача имеет удивительно интересные особенности. Изучение n-кортежей окупится позже, при изучении особенностей генерации более сложных комбинаторных шаблонов. Прежде всего, нетрудно заметить, что двоичная запись может быть расши- рена и на другие типы n-кортежей. Например, если нужно генерировать все ва- рианты (ai,... ,ап), где каждое aj представляет собой одну из десятичных цифр {0, 1, 2, 3, 4, 5, 6, 7, 8, 9}, можно просто выполнить перечисление чисел от (0...00)ю = 0 до (9...99)ю = Юп — 1 в десятичной системе счисления. А если нужно решить более общую задачу обхода всех случаев, в которых 0 < aj < rrij для 1 < j < п, (1) где верхние границы rrij разных компонентов вектора (ai,..., ап) могут отличаться, то задача, по сути, сводится к многократному прибавлению единицы к числу , • • , Ш1, 7712,_, 7Пп в смешанной позиционной системе счисления; см. уравнение 4.1-(9) и упр. 4.3.1-9. Притормозим и опишем этот процесс более формально. Алгоритм М {Генерация в смешанной позиционной системе счисления). Этот алгоритм посещает все n-кортежи, удовлетворяющие (1), путем многократного до- бавления 1 к числу в смешанной позиционной системе счисления (2) до тех пор, пока не будет достигнуто переполнение. Вспомогательные переменные оо и то введены для удобства. Ml. [Инициализация.] Установить aj <— 0 для 0 < j < п и установить то «— 2. М2. [Посещение.] Посетить n-кортеж (oi,... ,ап). (Программа, которая должна посетить все n-кортежи, приступает к работе.) М3. [Подготовка к прибавлению единицы.] Установить j <— п. М4. [Перенос при необходимости.] Если aj =m,j — 1, установить aj «— 0, у «— у — 1, и повторить этот шаг. М5. [Увеличение, если еще не выполнено.] Если j = 0, завершить работу алгоритма. В противном случае установить aj <— aj + 1 и вернуться к шагу М2. | Алгоритм М прост и прямолинеен, но не следует забывать, что вложенные циклы при достаточно малых константах п еще проще. Например, для п = 4 можно было бы записать следующие инструкции. Для ai = 0, 1, ..., mi — 1 (в указанном порядке) выполнить следующее: Для аг = 0, 1, ..., m2 — 1 (в указанном порядке) выполнить следующее: Для аз = 0, 1, ..., m3 — 1 (в указанном порядке) выполнить следующее: (3) Для 04 = 0, 1, ..., 7714 — 1 (в указанном порядке) выполнить следующее: Посетить (01,02,03,04).
7.2.1.1 ГЕНЕРАЦИЯ ВСЕХ П-КОРТЕЖЕЙ 331 Рис. 30. (а) Лексикографический бинарный код. (б) Бинарный код Грея. Эти инструкции эквивалентны алгоритму М и легко выражаются на любом языке программирования. Бинарный код Грея. Алгоритм М проходит по всем вариантам (ai,..., an) в лек- сикографическом порядке, как в словаре. Однако имеется много ситуаций, когда посещение n-кортежей предпочтительнее выполнить в некотором другом порядке. Наиболее известным альтернативным упорядочением является так называемый би- нарный код Грея, который перечисляет все 2П строк из п бит таким образом, что каждый раз простым и регулярным способом изменяется только один бит. Напри- мер, бинарный код Грея для п = 4 имеет вид 0000,0001, ООН, 0010, ОНО, 0111,0101,0100, 1100,1101,1111,1110,1010,1011,1001,1000. (4) Такие коды особенно важны в приложениях, в которых аналоговая информация преобразуется в цифровую или наоборот. Предположим, например, что с помощью четырех сенсоров, различающих белый и черный цвета, мы хотим идентифициро- вать наше текущее положение на вращающемся диске, который поделен на 16 секто- ров. Если использовать лексикографический порядок для обозначения секторов от 0000 до 1111, как показано на рис. 30, (а), то при пересечении границ секторов могут возникнуть ошибки; но в случае кода, показанного на рис. 30, (б), ошибок быть не может. Бинарный код Грея можно определить многими эквивалентными способами. Например, если Гп обозначает бинарную последовательность Грея, состоящую из n-битовых строк, то можно определить Гп рекурсивно, с помощью следующих двух правил: Го = с; в (5) Гп+1 = 0Гп, 1Г„. Здесь е обозначает пустую строку, 0Гп обозначает последовательность Гп с префик- сом 0 в каждой строке, а 1Г„ обозначает последовательность Гп в обратном порядке с префиксом 1 в каждой строке. Поскольку последняя строка в Гп эквивалентна первой строке в Г^, из (5) ясно, что на каждом шаге Гп+1 изменяется ровно один бит, если Гп обладает тем же свойством.
332 КОМБИНАТОРНЫЙ поиск 7.2.1.1 Другой способ определения последовательности Гп = р(0), р(1), ..., p(2n — 1) заключается в указании явной формулы для отдельных элементов д(к). Действи- тельно, поскольку Гп+1 начинается с 0Гп, бесконечная последовательность roo = ff(0),5(l),ff(2),fi(3),ff(4),... = (0)2, (1)2, (11)2, (10)2, (110)2,... 1 J является перестановкой всех неотрицательных целых чисел, если рассматривать каждую строку из нулей и единиц как двоичное целое число с необязательными ведущими нулями. Тогда Гп состоит из первых 2П элементов (6), преобразованных в n-битовые строки за счет вставки при необходимости ведущих нулей. Когда к = 2п + г, где 0 < г < 2п, соотношение (5) говорит нам, что д(к) равно 2n + д(2п— 1 — г). Следовательно, по индукции по п можно доказать, что целое число к с двоичным представлением (.. .626160)2 имеет эквивалент д(к) в бинарном коде Грея с представлением (... a2aiao)2, где aj = bj ф bj+i для j > 0. (7) (См. упр. 6.) Например, д((111001000011)2) = (100101100010)2. И наоборот, если дано д(к) = (... a2aiao)2, можно найти к = (.. .626i6o)2, обращая систему уравне- ний (7)и получая bj = aj ф aj+i ф aj+2 ф • • • для j > 0; (8) эта бесконечная сумма на самом деле конечна, поскольку aj+t = 0 для всех боль- ших t. Одно из многочисленных приятных следствий уравнения (7) заключается в том, что д(к) можно очень легко вычислить с помощью битовой арифметики: д(к) = fc®[fc/2J. (9) Аналогично обратная функция в (8) удовлетворяет равенству 5t-l](Z) = Z®[Z/2J® [//4J®...; (10) однако для этой функции требуется больше вычислений (см. упр. 7.1.3-117). Из (7) можно также вывести, что если к и к' — произвольные неотрицательные целые числа, то д(к@к?) = д(к) ®д(к'). (11) Еще одним следствием является то, что (п + 1)-битовый бинарный код Грея может быть записан как Гп+1 = 0Гп, (0Гп)ф110.. .0; этот шаблон наблюдается, например, в (4). Сравнивая этот шаблон с (5), можно заметить, что обращение порядка бинарного кода Грея эквивалентно дополнению первого бита: п-1 = Гп ф 10... 0, также записывается как Гп ф 10п-1. (12) В приведенных ниже упражнениях показано, что функция д(к), определенная в (7), и обратная ей функция 11, определенная в (8), имеют много других ин- тересных свойств и приложений. Порой эти функции рассматриваются как преоб- разующие бинарные строки в бинарные строки; их можно также рассматривать
7.2.1.1 ГЕНЕРАЦИЯ ВСЕХ п-КОРТЕЖЕЙ 333 как функции, преобразующие целые числа в целые числа с их промежуточным представлением в виде бинарных строк с игнорируемыми ведущими нулями. Бинарный код Грея назван по имени Фрэнка Грея (Frank Gray), физика, просла- вившегося разработкой метода, долгое время использовавшегося для обеспечения совместимости цветного телевещания [Bell System Tech. J. 13 (1934), 464- 515]. Он изобрел код Гп для применения в кодово-импульсной модуляции, методе аналоговой передачи цифровых сигналов [см. Bell System Tech. J. 30 (1951), 38-40; U.S. Patent 2632058 (17 March 1953); W. R. Bennett, Introduction to Signal Transmission (1971), 238-240]. Однако сама идея “бинарного кода Грея” была известна задолго до начала его работы над этой проблемой, например в U.S. Patent 2307868 Джорджа Стибитца (George Stibitz) (12 January 1943). Более важно другое его появление — код Г5 использовался в телеграфной машине, продемонстрированной в 1878 году Эмилем Бодо (Emile Baudot), (в его честь была названа единица измерения “бод”). Пример- но в то же время аналогичный, но менее систематический код для телеграфии был независимо разработан Отто Шаффлером (Otto Schaffler) [см. Journal Telegraphique 4 (1878), 252-253; Annales Telegraphiques 6 (1879), 361, 382-383].* Бинарный код Грея неявно присутствует в классической головоломке, которая веками забавляла людей и которая известна под общим названием “Китайские коль- ца” хотя ее часто называют попросту утомительными железками (tiring irons). На рис. 31 показан пример этой головоломки с семью кольцами. Задача заключается в том, чтобы снять кольца со стержня, но кольца переплетены так, что возможны только два основных действия (хотя это может и не быть очевидно при рассматри- вании рисунка). а) Крайнее справа кольцо можно снять или одеть в любой момент. б) Любое другое кольцо можно снять или одеть тогда и только тогда, когда кольцо справа от него находится на стержне, а все кольца правее него сняты. Рис. 31. Головоломка “Китайские кольца’.’ Текущее состояние головоломки можно представить в двоичной системе счисления, где 1 означает, что кольцо находится на стержне, а 0 — что кольцо снято. Таким образом, на рис. 31 показано состояние колец 1011000. (Второе кольцо слева обозна- чено нулем, поскольку оно полностью находится над стержнем.) Французский судья Луи Грос (Louis Gros) продемонстрировал явную связь го- ловоломки с двоичными числами в анонимно опубликованной брошюре Theorie du Baguenodier (Теория безделья [отлично!]) (Lyon: Aime Vingtrinier, 1872). Если кольца находятся в состоянии ап_]... ао, и если определить двоичное число к = (Ьп 1 ...60)2 согласно (8), то ровно к шагов будет необходимо и достаточно для * Некоторые авторы утверждают, что код Грея был изобретен Элишей Греем (Elisha Gray), который создал печатающую телеграфную машину в то же время, что и Бодо и Шаффлер. Эти заявления не соответствуют действительности, хотя с Элишей обошлись несправедливо в отноше- нии приоритета в изобретении телефона [см. L. W. Taylor, Amer. Physics Teacher 5 (1937), 243-251].
334 КОМБИНАТОРНЫЙ ПОИСК 7.2.1.1 Несомненно, не должно быть дома, в котором бы не было этой очаровательной, исторической и поучительной головоломки. — ГЕНРИ Э. ДЬЮДЕНИ (HENRY Е. DUDENEY) (1901) того, чтобы решить головоломку. Таким образом, истинным первооткрывателем бинарного кода Грея является именно Грос. Если кольца находятся в произвольном состоянии, отличном от 00... О или 10...0, то возможны ровно два действия: первое—типа (а), а второе—типа (б). Только одно из этих действий дает продвижение к заданной цели, а другое пред- ставляет собой шаг назад. Действие типа (а) изменяет к на к ф 1; таким образом, его следует выполнять при нечетном к, поскольку тем самым будет выполнено уменьшение к. Действие типа (б) в позиции, заканчивающейся на (1(У-1)2 для 1 < у < п, изменяет к на к ф (1,+1)г = к ф (2j+1 — 1). [В этой формуле ‘Р+1’ означает J + 1 повторений ‘1’, но ‘2J+1’ означает степень двойки.] Если к четно, нужно приравнять к ф (2^+1 — 1) к к — 1, что означает, что к должно быть кратно 2J, но не 2^+1; другими словами, 3 = (13) где р—“линеечная функция” из соотношений 7.1.3 (44). Следовательно, для кор- ректного решения головоломки кольца должны следовать красивому шаблону. Если пронумеровать кольца 0, 1, ..., п — 1 (начиная от свободного конца), то последова- тельность снятий и одеваний колец представляет собой последовательность чисел, которая заканчивается ..., р(4), /э(3), р(2), р(1). Идя в обратном направлении, нужно, начав с 00... 0, последовательно одевать или снимать кольца до тех пор, пока не будет достигнуто конечное состояние 10... 0 (которое, как заметил Джон Уоллис (John Wallis) в 1693 году, получить гораздо сложнее, чем на первый взгляд более сложное состояние 11... 1), что приводит нас к алгоритму счета в бинарном коде Грея. Алгоритм G (Генерация бинарного кода Грея). Этот алгоритм посещает все бинар- ные n-кортежи (an-i > • • •, ai> во)> начиная с (0,..., 0,0) и изменяя только по одному биту за раз, а также поддерживая бит Доо, такой, что Доо = «п-1 Ф • • • Ф Д1 ф До- (14) Он последовательно дополняет биты р(1), р(2), р(3), ..., p(2n — 1), после чего алго- ритм останавливается. G1. [Инициализация.] Установить aj <— 0 для 0 < j < п; установить также Доо «— 0. G2. [Посещение.] Посетить n-кортеж (дп-1,... ,Д1, до). G3. [Изменение четности.] Установить Доо «— 1 — Доо. G4. [Выбор у.] Если Доо = 1, установить j «— 0. В противном случае пусть j > 1 — минимальное, при котором flj_] = 1. (После к-го выполнения этого шага 3 = Р(*)-) G5. [Дополнение координаты у.] Завершить работу алгоритма, если j = тг, в про- тивном случае установить aj <— 1 — aj и вернуться к шагу G2. | Бит четности Доо пригодится при вычислении сумм наподобие -Хооо — -Xooi — -Хою + -Xoii — -Хщо + -X1Q1 + Хцо — Хщ
7.2.1.1 ГЕНЕРАЦИЯ ВСЕХ П-КОРТЕЖЕЙ 335 ИЛИ Х$ — Ха — Хь + Хаъ — Хс + Хас + ХЬс — Хаьс, где знак зависит от четности бинарной строки или количества элементов подмноже- ства. Такие суммы часто возникают в формулах “включения-исключения” таких, как 1.3.3-(29). Бит четности необходим также для эффективности: без него было бы не так просто выбрать один из двух способов определения значения j, которое соответствует выполнению действий типа (а) или типа (б) в “Китайских кольцах” Однако наиболее важной особенностью алгоритма G является то, что шаг G5 вы- полняет изменение только одной координаты. Следовательно, обычно требуется только простое изменение суммируемых членов X или иных структур, с которыми приходится иметь дело при посещении каждого п-кортежа. Конечно, невозможно избежать неоднозначности в младшем разряде, за исключением способа, к которому, по слухам, прибегла одна ирландская железнодорожная компания, убрав во всех поездах последний вагон как наиболее уязвимый при столкновениях поездов. — Д. Р. СТИБИТЦ (G. R. STIBITZ) и Д. А. ЛАРРИВИ (J. A. LARRIVEE), Математика и компьютеры (Mathematics and Computers') (1957) Еще одно ключевое свойство бинарного кода Грея было открыто Д. Л. Уолшем (J. L. Walsh) в связи с важной последовательностью функций, которые ныне извест- ны как функции Уолша [см. Amer. J. Math. 45 (1923), 5-24]. Пусть w0(x) = 1 для всех действительных чисел х и wk(x) = (—l)L2a:J Tfc/21 wLfc/2j (2а;) для fc > 0. (15) Например, Wi(z) = (—1) L2a;J изменяет знак всякий раз, когда х является целым числом или целым плюс |. Отсюда следует, что wk(x) = wk(x + 1) для всех fc и что wk(x) = ±1 для всех х. Более важно то, что wk(0) = 1 и wk(x) ровно к раз меняет знак в диапазоне (0..1), так что она стремится к (—l)fc при х, стремящемся к 1 слева. Следовательно, wk(x) ведет себя скорее как тригонометрическая функция на- подобие cos ктгх или sin ктгх, и другие функции можно представить в виде линейной комбинации функций Уолша почти так же, как они традиционно представляются с помощью ряда Фурье. Этот факт, вместе с простой дискретной природой шк(х), делает функции Уолша исключительно полезными в компьютерных вычислениях, связанных с передачей информации, обработкой изображений и многими другими приложениями. На рис. 32 показаны первые восемь функций Уолша вместе с их тригонометриче- скими собратьями. Инженеры обычно называют wk(x) функцией Уолша порядка к, по аналогии с тригонометрическими функциями совктгх и sinfcyrz с частотой к/2. [См., например, книгу Н. F. Harmuth, Sequency Theory: Foundations and Applications (New York: Academic Press, 1977).] Хотя, на первый взгляд, выражение в (15) может показаться пугающим, на самом деле оно представляет простой способ увидеть по индукции, почему wk(x) имеет ровно к изменений знака. Если к четно, скажем, к = 21, то мы имеем W2i(x) = wi(2x) для 0 < х < в результате функция wi(x) просто сжимается вдвое, так что W2i(x) содержит I изменений знака. Тогда W2i(x) = (—l)lwi(2x) = (—l)lwi(2x — 1) в диапазоне | < х < 1; это позволяет присоединить вторую копию wi(2x), обращая
336 КОМБИНАТОРНЫЙ ПОИСК 7.2.1.1 Рис. 32. Функции Уолша шк(х) для О < к < 8 и аналогичные тригоно- метрические функции у/2 cos kirx (по- казаны серым цветом). при к = (.. .62^1^0)2- (17) знак из-за необходимости избежать измен аналогична, но она заставляет изменить <>.«»„. ~ — 2 Какое отношение ко всему этому имеет бинарный код Грея? Уолш обнаружил, что его функции могут быть компактно выражены через более простые функции Радемахера [см. Hans Rademacher, Math. Annalen 87 (1922), 112-138], rk(x) = (-1)^2Ч (16) которые принимают значение (—l)c_*, где (... C2CiCo-C-iC_2 - - - )г является бинарным представлением х. Действительно, wi(x) = ri(x), и>2(х) = Ti(x)r2(x), из(х) = гз(х) и в общем случае и>к(х) = n^+i(a;)b3®bj+1 j>0 (См. упр. 33.) Таким образом, согласно (7) степень rj+i(a:) в wk(x) представляет собой j-й бит бинарного числа Грея д(к), и мы имеем wk(x) = rp(fc)+i(a;)wfc_i(a:) для к > 0. Из уравнения (17) следует удобная формула wfc(a:)wfc,(a;) = wk<sk,(x), (19) которая гораздо проще, чем соответствующие формулы для произведения синусов и косинусов. Это тождество легко проверить, поскольку Tj(x)2 = 1 для всех j (18)
7.2.1.1 ГЕНЕРАЦИЯ ВСЕХ П-КОРТЕЖЕЙ 337 и х, следовательно, г^(а;)“®ь = Tj(x)a+b. Отсюда, в частности, вытекает, что функ- ция Wk(x) ортогональна Wk'(x), если к к', в том смысле, что среднее значение wk(x)wk'(x) равно нулю. Мы также можем воспользоваться (17) для определения Wk(x) для дробных значений к наподобие 1/2 или 13/8. Преобразование Уолша 2п чисел (Хо,.. .,X2^~i) представляет собой вектор (х0, ...,я:2"-1), определяемый уравнением (а?0,... ,x2™-i)T = Wn(Xo,.-.,Xz^-i)T, где Wn является матрицей размером 2П х 2" с элементами Wj(fc/2n) на пересечении строки j и столбца к для 0 5 преобразование Уолша при п = 3^ < 3 имеет 2”. вид Например, рис. 32 говорит нам, что ( £ооо > £001 £0Ю £011 #100 £101 £110 '£ш / = /1 1 1 1 1 1 1 \1 1 1 1 1 Т т т т 1 1 т т т 1 1 1 1 1 т I 1 1 т т 1 Т I 1 1 т т 1 1 Т Т 1 I 1 1 т 1 т 1 т I 1 т 1 1\ 1 1 т 1 т 1 Т/ <-Хооо > -Xooi -Х010 -Хон -Хюо -Xioi -Хцо '-Хт / (20) (Здесь 1 обозначает —1, а подстрочные индексы рассматриваются как обычные бинарные строки 000-111, а не целые числа 0-7.) Преобразование Адамара опреде- ляется аналогично, но вместо Wn используется матрица Нп, где Нп на пересечении строки j и столбца к содержит элементы (—l)j fc; здесь ‘J fc’ обозначает скалярное произведение an-ibn-i -I--1- a^bo бинарных представлений j = (an_i... ао)г и к = (6n-i... Ьо)г- Например, преобразование Адамара для п = 3 имеет вид <£(юо^ X1 1 1 1 1 1 1 1\ / -ХоооХ £(х>1 1 т 1 т 1 I 1 1 -Xooi Здю 1 1 т т 1 1 I I -Х010 Здн 3-100 = 1 1 т 1 I 1 1 1 1 1 т 1 т т 1 1 -Хон -Хюо (21) 3-Ю1 1 I 1 т I 1 т 1 -Xioi Злю 1 1 т I т т 1 1 -Хцо / \1 т т 1 т 1 1 v \-Xni / Это то же самое, что и дискретное преобразование Фурье на n-мерном кубе 4.6.4- (38), и его можно легко вычислить “на месте” если адаптировать метод Ятса, рас- сматривавшийся в разделе 4.6.4. Дано Первый шаг Второй шаг Хооо Xqoo+Xooi Xooo+Xooi+Xoio+Xon Xooi Хооо — Xooi Хооо —Xooi +Х010—Хон Х010 Хою+Хон Хооо+Х001 — Хою — Хон Хон ХОю— Хон Хооо —Xooi —Хою+Хон Хюо Хюо+Xioi Хюо+Xioi+Xiio+Xin Xioi Хюо—Хю1 Хюо—Xioi+Хцо—Хщ Хцо Хцо+Хщ Хюо+Xioi— Хцо- Хщ Хщ Хцо— Хщ Хюо—Хю1 —Хно+Хц! Третий шаг Xooo+Xooi+Xoio+Xoii+Xioo+Xioi+Xho+Xih Хооо — Xooi 4-Xoio —Хон +Хюо -Xioi +Хпо—Хш Xooo+Xooi —-Xqio — -Xqh +-Х100+-Х101 — Хно- -Хт -Хооо — -Xooi — -Х010+-Х011+-Х100 — -Х101 — Хно+-Х1 н -Х000+-Х001+-Х010+-Х011 — -Хюо— -Xioi — Хцо- Хщ -Хооо— -Х001+-Х010— -Хон — -Х100+-Х101 — Хцо+Xih -Х000+-Х001 —-Xoio--Хон — Xioo — -Х101+Х110+-Х111 Хооо —Xooi —Хою+Хон —Хюо+Xioi 4-Хцо — Хщ Обратите внимание, что строки Н3 являются перестановками строк W$. Это вер- но и в общем случае, а потому преобразование Уолша можно выполнить за счет
338 КОМБИНАТОРНЫЙ ПОИСК 7.2.1.1 перестановки элементов преобразования Адамара. Этот прием подробно рассмат- ривается в упр. 36. Ускорение. Анализируя 2П возможностей, обычно хочется максимально сокра- тить время вычислений. Алгоритм G должен выполнять дополнение только одного бита aj на одно посещение (an_i,...,ао), но на шаге G4 имеется цикл для выбора соответствующего значения j. Другой подход был предложен Гидеоном Эрлихом (Gideon Ehrlich) [JACM 20 (1973), 500-513], который ввел понятие комбинаторной генерации без циклов. В алгоритме без циклов количество операций между после- довательными посещениями заранее ограничено, поэтому долго ждать генерации очередного шаблона не приходится. В разделе 7.1.3 мы познакомились с некоторыми хитрыми способами быстрого определения количества ведущих или замыкающих нулей в двоичном числе. Эти методы можно использовать на шаге G4, чтобы сделать алгоритм G алгоритмом без циклов, если п не слишком велико. Однако метод Эрлиха существенно иной и более универсальный, так что он расширяет наш арсенал технологий эффектив- ных вычислений. Вот как этот подход можно применить для генерации бинарных n-кортежей [см. Bitner, Ehrlich, and Reingold, САСМ 19 (1976), 517-521]. Алгоритм L {Генерация бинарного кода Грея без циклов). Этот алгоритм, как и алгоритм G, посещает все бинарные n-кортежи (an_i,..., ао) в порядке бинарного кода Грея. Однако вместо бита четности в нем используется массив “фокусных указателей” (/п,..., /о), важность которых рассматривается ниже. L1. [Инициализация.] Установить aj <— 0 и fj «— j для 0 < j < п; также установить fn <— п. (Алгоритм без циклов может иметь цикл на этапе инициализации, если это оправдано с точки зрения эффективности; в конце концов, каждая программа должна быть загружена и запущена.) L2. [Посещение.] Посетить тг-кортеж (an_i,...,ai, ао). L3. [Выбор у.] Установить j «— /о, /о «— 0. (Если это fc-e выполнение данного шага, то j равно р{к).) Завершить работу алгоритма, если j = п; в противном случае установить fj «— fj+i и /j+i «— J 4-1. L4. [Дополнение координаты /.] Установить aj 1 — aj и вернуться к шагу L2. | Например, для п = 4 вычисления происходят следующим образом (элемент aj в приведенной таблице подчеркнут, если соответствующий бит bj равен 1 в бинарной строке 5зЬгЬ1Ьо, такой, что 03020100 = дфзЪзЬгЬо)). аз 0000000011111111 а2 0000111111110000 ai 0011110000111100 а0 0110011001100110 /з 3333333344443333 /2 2222332222224422 /11121113111211141 /о 0102010301020104 Хотя двоичное число к — {Ьп_!.. .60)2 никогда явно не появляется в алгоритме L, фокусные указатели fj неявно представляют его таким образом, что можно много-
7.2.1.1 ГЕНЕРАЦИЯ ВСЕХ п-КОРТЕЖЕЙ 339 кратно получать д(к) = (a„-i... 00)2 путем дополнения бита ap(t). Будем говорить, что бит aj пассивен, когда он подчеркнут, и активен в противном случае. Тогда фокусные указатели удовлетворяют следующим инвариантным соотношениям. 1) Если бит aj пассивен, а бит a,_i активен, то fj—наименьший индекс j' > j, такой, что бит aj> активен. (Биты ап и a_i рассматриваются в данном правиле как активные, хотя в алгоритме они реально не присутствуют.) 2) В противном случае fj = j. Таким образом, крайний справа элемент aj блока пассивных элементов ... aj+1aj с уменьшающимися индексами имеет фокусный указатель fj, который указы- вает на элемент ai, находящийся первым слева от этого блока. Все прочие элементы aj имеют фокусные указатели fj, указывающие на эти элементы. В рассмотренных терминах первые операции ‘j «— fo, f0 «—О’ на шаге L3 экви- валентны высказыванию “установить j равным индексу крайнего справа активного элемента и активизировать все элементы справа от aj” Заметим, что если /о = 0, то операция f0 «— 0 оказывается излишней, но это не причиняет никакого вреда. Две другие операции шага L3, ‘/j fj+i, fj+i 3' + 1’, эквивалентны высказыванию “сделать aj пассивным” поскольку мы знаем, что aj и aj~i в этот момент вычислений активны. (И вновь операция /j+i «— j + 1 может быть избыточной, но безвредной.) Общий результат активизации и пассивизации, таким образом, эквивалентен под- счету в бинарной записи (как в алгоритме М, с пассивными единичными битами и активными нулевыми). Алгоритм L поразительно быстр, так как он выполняет только пять операций присваивания и одну проверку завершения алгоритма между посещениями генери- руемых n-кортежей. Но можно улучшить и его. Чтобы увидеть, как это сделать, давайте рассмотрим его применение в занимательной лингвистике. Рудольф Ка- стаун (Rudolph Castown) в своей работе Word Ways 1 (1968), 165-169, заметил, что все 16 способов смешения букв слова sins (грехи) с соответствующими буквами слова fate (судьба) дают слова, которые имеются в достаточно большом словаре английского языка: sine, sits, site и т. д.; и все слова, кроме трех (а именно fane, fite и sats), достаточно распространены и, бесспорно, являются неотъемлемой частью английского языка. Следовательно, естественно задать вопрос для слов из пяти букв: какие две строки из пяти букв порождают максимальное количество слов из Stanford GraphBase, где буквы в соответствующих позициях обмениваются всеми 32 возможными способами? Для ответа на этот вопрос не нужно проверять все (226)5 = 3625908203125 существенно разных пар строк; достаточно просмотреть все (5^57) = 16568646 пар слов из GraphBase, при условии, что как минимум одна из пар порождает не меньше 17 слов, поскольку каждое множество из 17 или более пятибуквенных слов, которые можно получить из двух пятибуквенных строк, должны содержать два слова, являющиеся “антиподами” (не имеющими одинаковых соответствующих букв). Для каждой пары антиподов следует максимально быстро определить, дают ли 32 возможные перестановки слова английского языка. Каждое пятибуквенное слово можно представить в виде 25-битового числа с ис- пользованием пяти битов на букву, от "а" = 00000 до "г" = 11001. Таблица из 225 битов или байтов позволит быстро определить, является ли данная пятибуквенная строка словом английского языка. Так что задача сводится к генерации битовых
340 КОМБИНАТОРНЫЙ ПОИСК 7.2.1.1 шаблонов 32 потенциальных слов, получающихся смешением букв двух заданных слов, и поиску этих слов в таблице. Для каждой пары 25-битовых слов w и и>' можно действовать следующим образом. W1. [Проверка различий.] Установить z <— wffiw'. Отвергнуть пару слов (w, w1), если т' & (г — т) & т / 0, где т = 220 + 215 + 210 + 25 + 1 и т' = 25т; эта проверка исключает случаи, когда w и w' имеют общую букву в некоторой позиции (см. 7.1.3-(90). Оказывается, что 10614085 из 16568646 пар слов не имеют таких общих букв). W2. [Формирование индивидуальных масок.] Установить то <— z & (25 — 1), тг <— z & (210 - 25), m2 — z & (215 - 210), т3 — z & (220 - 215) и m4 <- z & (225 - 220) в качестве подготовки к следующему шагу. W3. [Подсчет слов.] Установить I «— 1 и Ао w; переменная I будет содержать количество найденных к этому моменту слов, начиная с w. Затем выполнить описанные ниже операции swap (4). W4. [Вывод максимального решения.] Если I больше или равно текущему макси- муму, вывести Aj для 0 < j < I. | Сердцем этого высокоскоростного метода является последовательность операций swap(4), которая должна быть встроена в код (например, с помощью макропро- цессора) для устранения всех накладных расходов. Она определяется в терминах базовой операции sw(j): установить w <— w ф m,j. Затем, если w— слово, установить А/ <— w и / <— / + 1. Для заданной операции sw(j), которая обменивает буквы в положении j, определим swap(0) = sw(0); swap(l) — swap(0), sw(l), swap(0); swap(2) = swap(l), sw(2), swap(l); (22) swap(3) = swap (2), sw(3), swap (2); swap (4) = swap(3), sw(4), swap(3). Таким образом, swap(4) раскрывается в последовательность из 31 шага sw(0), sw(l), sw(0), sw(2), ..., sw(0) = sw(p(l)), sw(p(2)), ..., sw(p(31)); эти шаги будут исполь- зоваться 10 миллионов раз. Очевидно, что выигрыша в скорости можно добиться путем вставки значений линеечной функции р(к) непосредственно в программу, а не вычислять их для каждой пары слов с использованием алгоритмов М, G и L. Пара-победитель генерирует набор из 21 слова, а именно ducks, ducky, duces, dunes, dunks, dinks, dinky, dines, dices, dicey, dicky, dicks, picks, picky, (23) pines, piney, pinky, pinks, punks, punky, pucks. Если, например, w = ducks, а w' = piney, то то = s ф у, так что первая операция sw(0) меняет строку ducks на строку ducky, которая является словом. Следующая операция sw(l) применяет mi, что дает к ф е в предпоследней позиции и приводит
7.2.1.1 ГЕНЕРАЦИЯ ВСЕХ П-КОРТЕЖЕЙ 341 к строке ducey, словом не являющейся. Еще одно применение sw(0) меняет ducey на duces (корректное слово, за которым обычно следует слово tecum*). И так далее. Таким методом все пары слов можно обработать всего за несколько секунд. Этот метод можно оптимизировать. Например, после обнаружения пары, ко- торая дает к слов, можно отбрасывать пары после генерации ими 33 — к строк, не являющихся словами. Но рассмотренный нами метод и так достаточно быстрый и демонстрирует тот факт, что даже алгоритм L без циклов может быть превзойден. Поклонники алгоритма L могут, конечно, возразить, что процесс ускорен только в частном случае п = 5, в то время как алгоритм L решает задачу генерации для произвольного п. Однако аналогичная идея применима и в общем случае для п > 5: программу можно расширить так, чтобы она быстро генерировала все 32 варианта для крайних справа битов адазагбцащ как показано выше; затем можно применить алгоритм L после каждых 32 шагов, используя его для генерации последовательных изменений других битов an_i...as. Такой подход снижает количество лишней работы, выполняемой алгоритмом L, почти в 32 раза. Другие бинарные коды Грея. Бинарный код Грея р(0), р(1), ..., д(2п — 1) представляет собой только один из множества способов обхода всех возможных п- битовых строк с изменением на каждом шаге только одного бита. Назовем в об- щем случае “циклом Грея” для бинарных n-кортежей любую последовательность (г>о, г>1,..., г)2»-1), которая включает все возможные n-кортежи и обладает тем свой- ством, что Vk отличается от f(fc+i) mod2** только одним битом. Таким образом, на языке теории графов цикл Грея является ориентированным Гамильтоновым циклом в n-мерном кубе. Мы можем считать, что индексы выбраны таким образом, что vq = 0... 0. Если рассматривать v как двоичные числа, то существуют такие целые числа <50 <52п-1, что f(fc+i) mod 2" - Vk Ф 26к для 0 < к < 2П. (24) Эта так называемая “дельта-последовательность” представляет собой еще один спо- соб описания цикла Грея. Например, дельта-последовательность для стандартного бинарного кода Грея при п = 3 имеет вид 01020102; по сути, это линеечная функция 6к = р{к + 1) из (13), но последнее значение <52**-1 равно п — 1, а не п, так что цикл замыкается. Отдельные элементы 6к всегда находятся в диапазоне 0 < 6к < п и называются координатами. Пусть d(n) — количество разных дельта-последовательностей, которые опреде- ляют n-битовый цикл Грея, а с(п)—количество “канонических” дельта-последова- тельностей, в которых каждая координата к появляется перед первым появлени- ем к + 1. Тогда d(n) = п! с(п), поскольку каждая перестановка координат в дельта- последовательности очевидным образом порождает другую дельта-последователь- ность. Легко видеть, что единственными возможными каноническими дельта-по- следовательностями для п < 3 являются 00; 0101; 01020102 и 01210121. (25) * Duces tecum (лат., юр.) — повестка о явке в суд для представления суду имеющихся у лица письменных доказательств. — Примеч. пер.
342 КОМБИНАТОРНЫЙ ПОИСК 7.2.1.1 Рис. 33. (а) Комплементарный код Грея. (б) Сбалансированный код Грея. Следовательно, с(1) = с(2) = 1, с(3) = 2; d(l) = 1, d(2) = 2 и d(3) = 12. Прямые компьютерные вычисления с помощью методов, предназначенных для перечисления Гамильтоновых циклов (они будут рассмотрены позже), дают следующие значения: с(4) = 112; d(4) = 2688; с(5) = 15109096; d(5) = 1813091520. 1 ' Никакая простая закономерность не просматривается, а числа растут очень быстро (см. упр. 47); так что можно спорить, что никто не знает точные значения с(8) и d(8). Поскольку количество возможностей так велико, имеет смысл поискать до- полнительные полезные свойства циклов Грея. Например, на рис. 33, (а) показан четырехбитовый цикл Грея, в котором каждая строка 03020100 диаметрально про- тивоположна своему дополнению 03020100. Такая схема кодирования возможна при четном количестве битов (см. упр. 49). Еще более интересен цикл Грея, найденный Д. К. Тутиллом (G. С. Tootill) [Proc. IEE 103, Part В Supplement (1956), 435] и приведенный на рис. 33, (б). Этот цикл имеет одинаковое количество изменений на каждой из четырех координатных дорожек, а следовательно, все координаты проявляют равную активность. Сбалан- сированные подобным образом циклы Грея могут быть построены для всех больших значений п с помощью следующего универсального метода расширения цикла от п др п + 2 бит. Теорема D. Пусть aiji Q2J2 - • • c*iji представляет собой дельта-последовательность для n-битового цикла Грея, где каждое jk является одной координатой, каждое oik может быть пустой последовательностью координат, а I нечетно. Тогда «j (n+lja^naj ^о:2по12(п+1)о12 j2ot3(n+V)ot3noi3 ... jt-ioi^n+ljafnai (27) (n+ljofj^of-!. ..og^ofn является дельта-последовательностью (n + 2)-битового цикла Грея. Например, если начать с последовательности 01020102 для п = 3 и рассматривать три подчеркнутых элемента как ji, j?, 7’3, то новая последовательность (27) для 5-битового цикла будет иметь вид 01410301020131024201043401020103. (28)
7.2.1.1 ГЕНЕРАЦИЯ ВСЕХ п-КОРТЕЖЕЙ 343 Доказательство. Пусть имеет длину гпк и пусть является вершиной, до- стигнутой при начале с 0... О и применении изменения координат сц ji... ak-ijk-i и первых t из ак- Нам нужно доказать, что при использовании (27), для 1 < к < I и 0 < t < тпк, встречаются все вершины OOvkt, Olvkt-, Wvkt и llifcj. (Крайняя слева координата—п+1.) Начиная с ООО... О = 001ю, мы получаем вершины ООпи, ..., 00г>1ТО1, 10г>1ТО1, ..., 10цо, Ицо, •, lliimi; затем ji дает 1112о, за которой следует 11г>21, , 11^27712 , 10127772 , - • - , 10120, 0012О, • • • 7 00127772 5 после этого идет ОО130, и т. д., и в конечном итоге мы достигаем lli/mi. В заклю- чение третья строка из (27) используется для генерации всех недостающих вершин OIi/ttii , • - -, Oliio и возврата к 000... 0. | Количества переходов {transition counts) (со,. -. ,cn_i) дельта-последовательно- сти определяются в предположении, что Cj — количество раз, когда 6к = j. Напри- мер, для (28) количества переходов представляют собой (12,8,4,4,4) и получаются из последовательности с количествами переходов (4,2,2). Если аккуратно выбрать исходную дельта-последовательность и подчеркнуть соответствующий элемент jk, можно получить настолько близкие количества переходов, насколько это возможно. Следствие В. Для всех п > 1 существует п-битовый цикл Грея с количествами переходов (со, Ci,..., cn_i), удовлетворяющими условию | Cj — Ck I < 2 для 0 < j < k < п. (29) (Это наилучшее возможное условие сбалансированности, поскольку каждое количе- ство Cj ДОЛЖНО быть ЧетНЫМ ЧИСЛОМ И ДОЛЖНО ВЫПОЛНЯТЬСЯ Cfl + Ci Ч-hCn-i = 2П. Действительно, условие (29) выполняется тогда и только тогда, когда п—г количеств равны 2q, а г количеств равны 2q + 2, где q = [2п-1/п] и г = 2n-1 mod п.) Доказательство. Для заданной дельта-последовательности для n-битового цикла Грея с количествами переходов (со,.. -,Cn-i) количества для цикла (27) получа- ются, начиная со значений (с^,,... = (4cq, •••,4cn_1,Z+l,Z+1), затем вычитанием 2 из c'Jk для 1 < k < I и вычитанием 4 из с'г Например, когда п = 3, можно получить 5-битовый сбалансированный код Грея с количествами переходов (8 — 2,16 — 10,8,6,6) = (6,6,8,6,6), если применить теорему D к дельта- последовательности 01210121. В упр. 51 подробно рассматриваются случаи с дру- гими значениями п. | Другой важный класс п-битовых циклов Грея, в которых каждая дорожка координат обладает равной ответственностью, получается при рассмотрении длин серий, т. е. расстояний между последовательными появлениями одного и того же значения S. Стандартный бинарный код Грея имеет длину серии 2 в младшей позиции, и это может привести к потере точности при необходимости прецизион- ных измерений [см., например, обсуждение этого вопроса в G. М. Lawrence and W. Е. McClintock, Proc. SPIE 2831 (1996), 104-111]. Но в замечательном 5-битовом
344 КОМБИНАТОРНЫЙ ПОИСК 7.2.1.1 цикле Грея с дельта-последовательностью (0123042103210423)2 (30) все серии имеют длину не менее 4. Пусть г(п) — максимальное значение г, такое, что можно найти n-битовый цикл Грея, в котором все серии имеют длину > г. Ясно, что г(1) — 1, а г(2) = г(3) = г(4) = 2; легко увидеть, что г(п) должно быть меньше п при п > 2, следовательно, (30) доказывает, что г(5) = 4. Исчерпывающий компьютерный поиск дает значения г(6) = 4 и г(7) = 5. Прямое вычисление с возвратом для случая п = 7 требует дерево примерно с 60 миллионами узлов, чтобы выяснить, что г(7) < 6, а в упр. 61, (а) строится 7-битовый цикл с длинами серий не короче 5. Точные значения г(п) для п > 8 неизвестны; однако г(10) почти наверняка равно 8, и имеются интересные построения, с помощью которых можно доказать, что г(п) = п—O(logn) при п —» оо (см. упр. 60-64.) *Бинарные пути Грея. Мы определили n-битовый цикл Грея как способ упо- рядочения всех бинарных n-кортежей в виде последовательности (г>0, щ,..., i^-i), обладающей тем свойством, что Vk (0 < к < 2" — 1) смежно с Vk+i в п-мерном кубе, а кроме того, i>2"-i смежно с г>о- Свойство цикличности прекрасно, но не всегда критично, и порой можно добиться большего, если от него отказаться. Итак, мы говорим, что n-битовый путь.Грея, часто именуемый кодом Грея, представляет собой любую последовательность, которая удовлетворяет условиям цикла Грея, за исключением того, что последний элемент не обязан быть смежным с первым. Другими словами, цикл Грея представляет собой гамильтонов цикл на вершинах n-мерного куба, а код Грея является просто гамильтоновым путем в этом графе. Наиболее важными бинарными путями Грея, не являющимися циклами Грея, являются n-битовые последовательности (г>0,г>1,...,i>2n-i), обладающие свойством монотонности, т. е. такие, что И’-’к) < ^(^к+г) для 0 < к < 2П- 2. (31) (Здесь, как и везде в книге, символ м обозначает “вес” или “контрольную сумму” (sideways sum) бинарной строки, т. е. количество содержащихся в ней единиц.) Методом проб и ошибок можно найти, что имеются, по сути, только два моно- тонных n-битовых кода Грея для каждого п < 4, один из которых начинается с 0”, а другой — с 0п-11. Для п = 3 это последовательности 000, 001, 011, 010, 110, 100, 101, 111; (32) 001, 000, 010, 110, 100, 101, 111, 011. (33) Для п = 4 они немного менее очевидны, но находятся без особого труда. Поскольку м(г>*,+1) = M(vfc) ± 1 всякий раз, когда Vk смежно с Vfc+i, очевидно, что мы не можем усилить условие (31) требованием, чтобы все n-кортежи были отсортированы по весу. Однако соотношение (31) достаточно строгое для того, чтобы определить вес каждого Vk для данного к и вес г>о, поскольку мы знаем, что среди n-кортежей ровно имеют вес j. На рис. 34 подведены итоги нашего рассмотрения бинарных кодов Грея до те- кущего момента в виде семи из несметного количества кодов Грея, проходящих
7.2.1.1 ГЕНЕРАЦИЯ ВСЕХ 71-КОРТЕЖЕЙ 345 Рис. 34. Примеры 8-битовых кодов Грея: а) стандартный; б) сбалансированный; в) комплементарный; г) длинносерийный; д) нелокальный; е) монотонный; ж) бестрендовый.
346 КОМБИНАТОРНЫЙ ПОИСК 7.2.1.1 по всем 256 возможным восьмибитовым байтам. Черные квадратики представля- ют единицы, а белые—нули. На рис. 34, (а) показан стандартный бинарный код Грея, на рис. 34, (б) — сбалансированный код с 256/8 = 32 переходами в каждой координатной позиции. На рис. 34, (в) показан код Грея, аналогичный коду на рис. 33, (а), в котором нижние 128 кодов являются дополнениями верхних 128 кодов. На рис. 34, (г) переходы в каждой координатной позиции осуществляются не ближе чем через 5 шагов; другими словами, все длины серий не меньше 5. Цикл на рис. 34, (д) нелокальный в смысле упр. 59. Монотонный путь для п — 8 показан на рис. 34, (е) — обратите внимание на черноту в нижней части рисунка. И на- конец на рис. 34, (ж) показан полностью немонотонный код Грея, в том смысле, что центр тяжести черных квадратов находится точно в средней точке каждого столбца. Стандартный бинарный код Грея обладает этим свойством в семи позициях координат, но код на рис. 34, (ж) достигает полного равновесия во всех восьми столб- цах. Такие коды называются бестрендовыми (trend-free) и имеют важное значение в аграрной области и других видах деятельности (см. упр. 75 и 76). Карла Сэведж (Carla Savage) и Питер Винклер (Peter Winkler) [J. Combinatorial Theory A70 (1995), 230-248] нашли элегантный способ построения монотонного бинарного кода Грея для всех п > 0. Такие пути обязательно строятся на основе подпутей Pnj, в которых все переходы осуществляются между n-кортежами с весами j и j + 1. Сэведж и Винклер определили подходящие подпути рекурсивно, полагая Рю = 0,1, и для всех п > 0 ^(n+ilj — 0PnJ; Pnj = 0, если j < 0 или j > п. (34) (35) Здесь 7гп — перестановка координат, которая будет определена позже, а запись Р71 означает, что каждый элемент an~i... гцйо последовательности Р заменяется эле- ментом Ьп_1...Ь1Ьо5 где bjv = aj. (Мы не определяем Р", полагая bj = aj^, поскольку хотим, чтобы (2J)7r было равно 2J7r.) Отсюда, например, следует, что Р2о — ОРщ — 00, 01 поскольку последовательность Рц-i) пуста; также Р21 = IPfJ = 10, 11, (36) (37) поскольку последовательность Рц пуста и ти должна быть тождественной пере- становкой. В общем случае Pnj является последовательностью n-битовых строк, содержащих ровно (п~1) строк с весом j, которые перемежаются ("J1) строками с весом j + 1. Пусть anj и ujnj являются первым и последним элементами Pnj-. Тогда мы легко находим, что iunJ = 0n->-1P+1 «по = оп Q.nj = для 0 < j < п; для п > 0; Для 1 < j < п. (38) (39) (40)
7.2.1.1 ГЕНЕРАЦИЯ ВСЕХ п-КОРТЕЖЕЙ 347 В частности, anJ- всегда имеет вес j, a a>nj всегда имеет вес j + 1. Определим перестановку тгп множества {0,1,... ,п — 1} так, что последовательности ^nO, Рп1, РП2, Рп3, (41) иР*, Рп1, Рпй2, Рп3, ... (42) являются монотонными бинарными путями Грея для п = 1, 2, 3, .... Действи- тельно, монотонность очевидна, так что остаются только сомнения по поводу при- надлежности к коду Грея. Последовательности (41) и (42) хорошо связываются, поскольку смежность элементов О,г1 • • O^n(n—1), ^пО ^п1 * * ’ ^n(n—1) (43) непосредственно вытекает из (34), вне зависимости от перестановок тгп. Таким образом, ключевым пунктом является переход в месте запятой в формуле (34), который делает P(n+i)j подпутем Грея тогда и только тогда, когда <Ь-1) - anj для 0 < J < п. (44) Например, при п = 2 и j = 1 нам, в соответствии с (38)-(40), требуется, чтобы (Ol)”2 = «21 = Ю; следовательно, перестановка тгг должна переставлять координаты 0 и 1. Общая формула (см. упр. 71) имеет вид я-n = ^n^n-i, (45) где <тп является n-циклом (п—1 ... 10). Первые несколько случаев, таким образом, имеют вид 7Г1 = (0), 7Г4 = (03), ТГ2 = (01), тг5 = (04321), 7Гз = (021), 7Г6 = (052413). Похоже, аналитической записи для магических перестановок тгп не существует. В упр. 73 показано, как можно эффективно генерировать коды Сэведж-Винклера. Небинарные коды Грея. Мы подробно рассмотрели бинарные n-кортежи, по- скольку это простейшая, наиболее классическая, широко применяемая и хорошо изученная тема. Но, конечно же, имеются многочисленные приложения, в которых требуется генерация кортежей (oj,..., ап) с целыми компонентами в более широких диапазонах 0 < aj < mj, чем в алгоритме М. Коды Грея прекрасно подходят и для этого случая. Рассмотрим, например, десятичные цифры, где 0 < ол- < 10 для каждого j. Существует ли в десятичной системе счисления способ перечисления, аналогичный бинарному коду Грея, с изменением за один раз только одной цифры? Да; дей- ствительно, есть две естественные схемы. В первой, рефлексивном десятичном коде Грея, последовательность для перечисления чисел до тысячи с помощью строк из трех цифр, имеет вид 000,001,..., 009,019,018,..., 011,010,020,021,..., 091,090,190,191,..., 900, где каждая координата изменяется попеременно от 0 до 9, а затем назад от 9 до 0. Во второй схеме, которая называется модульным десятичным кодом Грея, цифры
348 КОМБИНАТОРНЫЙ ПОИСК 7.2.1.1 всегда увеличиваются на 1 по модулю 10, “сворачиваясь” от 9 до 0: ООО, 001,..., 009,019,010,..., 017,018,028,029,..., 099,090,190,191,..., 900. В обоих случаях цифра, которая изменяется на шаге к, определяется линеечной функцией по основанию 10 — Рю(&), наибольшей степенью 10, на которую делится к. Следовательно, каждый n-кортеж цифр появляется ровно однажды: мы генерируем 10J различных состояний j крайних справа цифр перед тем, как изменять любые другие, для 1 < j < п. В общем случае рефлексивный код Грея в произвольной смешанной системе счисления можно рассматривать как перестановку неотрицательных целых чисел, т. е. как функцию, которая отображает обычное число в смешанной системе счис- ления ь Ь b к = п-1’ Ъ = ЬП_1ТПП_2 - - .mim0 Ч-------------F bim0 + b0 (46) Lmn_i,..., mi, mo J в его эквивалент в рефлексивном коде Грея д\к) = I = an_imn_2 ... mim0 -I--F airno + a®, (47) Lmn_i,..., mi, mo J как это делается в (7) в частном случае двоичных чисел. Пусть ГОп-Ь ...,Ojl, ГЬп-i, ..., 6,1 Lmn-i,..., m,j J Lmn-i,..., mj J где An = Bn = 0, так что при Q < j < n мы имеем Aj = mjAj+i + aj и Bj = mjBj+i + bj. (49) Правило, связывающее а и b, нетрудно вывести по индукции по п — j: ( bj, если Bj+i четно; а, = < , „ (50) ( mj — 1 — bj, если Bj+i нечетно. (Здесь координаты n-кортежей (an-i,..., ai, ао) и (bn-i,..., t>i, t>o) нумеруются спра- ва налево для согласованности с (7) и соглашениями смешанной системы счисления в 4.1-(9). Читатели, которые предпочитают запись наподобие (ai,...,an), могут при желании заменить во всех формулах j на п — j.) Идя обратным путем, получим [ aj, если aj+i + aj+2 + • • • четно; Ь, = < , (51) I mii — 1 — aj> если aj+i + aj+2 + • • нечетно. Забавно, что правило (50) и обратное ему правило (51) оказываются идентичными, если все основания mj нечетны. В тернарном коде Грея, например, где то = mi = • • = 3, мы имеем р((10010211012)3) = (12210211010)3 и <)((12210211010)3) = (10010211012)3. В упр. 78 доказываются соотношения (50) и (51) и рассматриваются подобные формулы для модульного случая. Такие последовательности Грея можно генерировать без привлечения циклов, обобщая алгоритмы М и L. Алгоритм Н (Генерация рефлексивных кодов Грея без циклов). Этот алгоритм посещает все n-кортежи (an-i, ..,ао), такие, что 0 < aj < mj для 0 < j < п, изме- няя на каждом шаге на ±1 только один компонент. В нем поддерживаются массив
7.2.1.1 ГЕНЕРАЦИЯ ВСЕХ п-КОРТЕЖЕЙ 349 фокусных указателей (/п,..., /о) для управления действиями, как в алгоритме L, а также массив направлений (оп_15..., оо)- Предполагается, что каждое основание mj > 2. Hl. [Инициализация.] Установить aj <— 0, fj <— j и Oj «— 1 для 0 < j < п; установить также fn «— п. Н2. [Посещение.] Посетить n-кортеж (an_i,...,ai, ао). НЗ. [Выбор j.] Установить j <— /0 и /о <— 0. (Как и в алгоритме L, j представляет крайнюю справа активную координату; все элементы справа от нее должны быть реактивизированы.) Н4. [Изменение координаты j.] Завершить работу алгоритма, если j = п; в против- ном случае установить aj <— aj + Oj. Н5. [Отражение?] Если aj = 0 или aj = mj — 1, установить Oj <— —Oj, fj <— fj+i и fj+i «— j + 1. (Координата j, таким образом, становится пассивной.) Вернуться к шагу Н2. | Аналогичный алгоритм генерирует модульную версию кода Грея (см. упр. 77). *Подлеса. Интересное и поучительное обобщение алгоритма Н, открытое Я. Кода (Y. Koda) и Ф. Раски (F. Ruskey) [J. Algorithms 15 (1993), 324-340], проливает свет на дополнительные особенности кода Грея и генерации без применения циклов. Предположим, что у нас имеется лес из п узлов и нам нужно посетить все его “главные подлеса” (“principal subforests”), т. е. все подмножества узлов S, такие, что если х находится в S и не является корнем, то и родительский по отношению к х узел также находится в S. Например, семиузловой лес имеет 33 таких подмножества, соответствующих черным узлам в приведенных далее 33 диаграммах. !<&> <52) Обратите внимание, что если считывать верхнюю строку слева направо, среднюю строку — справа налево, а нижнюю — вновь слева направо, то на каждом шаге меняется состояние ровно одного узла. Если заданный лес состоит из вырожденных неветвящихся деревьев, то главные подлеса эквивалентны числам со смешанным основанием. Например, лес наподобие О О О О имеет 3 х 2 х 4 х 2 главных подлесов, соответствующих 4-кортежам (а?1,а;2>тз,а;4), таким, что 0 < Ж1 < 3, 0 < х? < 2, 0 < хз < 4 и 0 < Хд < 2; значение Xj представляет собой количество узлов, выбранных в j-м дереве. Когда алгоритм Кода и Раски применяется к такому лесу, он посещает подлеса в том же порядке, что и рефлексивный код Грея для оснований (3,2,4,2).
350 КОМБИНАТОРНЫЙ ПОИСК 7.2.1.1 Алгоритм К {Рефлексивная генерация подлесов, не использующая циклов). Для заданного леса, узлы которого при обходе в обратном порядке имеют номера (1,..., п), этот алгоритм посещает все бинарные n-кортежи (<ц,..., ап), такие, что Op > aq, когда р является родительским по отношению к q узлом. (Таким образом, ар = 1 означает, что р— узел в текущем подлесу.) Между двумя последовательными посе- щениями изменяется ровно один бит aj. Фокусные указатели (/о, /1, •, /п) анало- гичны таковым в алгоритме L и используются вместе с дополнительными массивами указателей {lo,li,... ,1п) и (то,Г1,... ,гп), которые представляют дважды связанный список, именуемый текущей каймой (current fringe). Текущая кайма содержит все узлы текущего подлеса и дочерние по отношению к ним; го указывает на ее крайний слева узел, а 1о — на ее крайний справа узел. Вспомогательный массив (со, Ci,..., сп) определяет лес следующим образом: ес- ли р не имеет дочерних узлов, то ср = 0; в противном случае ср является крайним слева (наименьшим) дочерним узлом р; со же является крайним слева корнем самого леса. В начале работы алгоритма предполагается, что rp = q и lq = р, если р и q — последовательные дочерние узлы одного и того же семейства. Таким образом, например, лес в (52) в обратном порядке обхода имеет следующую нумерацию узлов: следовательно, в этом случае в начале шага К1 должно быть (со,..., су) = (2,0,1,0, 0,0,4,3) и г2 = 7, I? = 2, гз = 6, /в = 3, Г4 = 5 и /5 = 4. К1. [Инициализация.] Установить а? «— 0 и /j «— j для 1 < j < п, тем самым делая исходный подлее пустым, а все узлы активными. Установить /о «— 0, 1о <— п, гп «— 0, го «— со и 1Со «— 0, тем самым помещая все корни в текущую кайму. К2. [Посещение.] Посетить подлее, определяемый (щ,...,ап). КЗ. [Выбор р.] Установить q «— lo, р «— fq. (Теперь р—крайний справа активный узел каймы.) Также установить fq*—q (тем самым активизировав все узлы справа от р). К4. [Проверка ар.] Завершить работу алгоритма, если р = 0. В противном случае перейти к шагу Кб, если ар = 1. К5. [Вставка дочерних узлов р.] Установить ар «— 1. Затем, если ср / 0, установить q «— rp, lq «— р — 1, rp-i «— q, гр «— ср, 1Ср «— р (тем самым помещая дочерние узлы р справа от р в кайме). Перейти к шагу К7. Кб. [Удаление дочерних узлов р.] Установить ар «— 0. Затем, если ср 0, уста- новить q «— гp-i, гр «— q, lq «— р (тем самым удаляя из каймы дочерние узлы Р)- К7. [Пассивизация р.] (В этот момент мы знаем, что р—активен.) Установить fr и fiP 1р- Вернуться к шагу К2. | Читателю предлагается поэкспериментировать с данным алгоритмом на примерах наподобие (52), чтобы изучить прекрасный механизм, с помощью которого кайма растет и сокращается как раз в нужные моменты.
7.2.1.1 ГЕНЕРАЦИЯ ВСЕХ п-КОРТЕЖЕЙ 351 "Последовательности со сдвигом регистра. Возможен и совершенно иной способ генерации всех n-кортежей из m-арных цифр. Можно последовательно генериро- вать по одной цифре за раз и многократно работать с п последними сгенериро- ванными цифрами, таким образом переходя от одного n-кортежа (xq,xi,. .. ,a:n_i) к другому (a?i,..., a?n-i, хп) путем сдвига новой цифры вправо. Например, на рис. 35 показано, как можно получить все пятибитовые числа как блоки из пяти последо- вательных битов в некоторой циклической структуре длиной 32. Эта общая идея уже рассматривалась в некоторых упражнениях из разделов 2.3.4.2 и 3.2.2, и теперь можно приступить к ее дальнейшему исследованию. Рис. 35. Цикл де Брейна для 5-битовых чисел. Алгоритм S (Обобщенная генерация со сдвигом регистра). Этот алгоритм посе- щает все n-кортежи (щ,...,ап), такие, что 0 < aj < т для 1 < j < п, при условии использования на шаге S3 подходящей функции /. S1. [Инициализация.] Установить aj «— 0 для — п < j < 0 и А:«— 1. S2. [Посещение.] Посетить n-кортеж (ak-n, - - - ,аь-1). Завершить работу алгорит- ма, если к = тп. S3. [Продвижение.] Установить а^ «— /(<ifc_n, -, ajt-i), к *— А: 4-1 и вернуться к шагу S2. | Каждая функция f, делающая алгоритм S корректным, соответствует циклу из тп цифр в системе счисления с основанием т, таких, что в этом цикле последова- тельно встречается каждая комбинация п цифр. Например, случай т = 2 и п = 5, проиллюстрированный на рис. 35, соответствует бинарному циклу 00000100011001010011101011011111; (53) а первые т2 цифр бесконечной последовательности 0011021220313233041424344... (54) дают соответствующий цикл для п = 2 и произвольного т. Такие циклы обычно на- зываются m-арными циклами де Брейна, по имени Н. Г. де Брейна (N. G. deBruijn), который рассмотрел бинарный случай для произвольного п в Indagationes Mathe- maticae 8 (1946), 461-467.
352 КОМБИНАТОРНЫЙ ПОИСК 7.2.1.1 Таблица 1 Параметры для алгоритма А 3 : 1 8: 1,5 13 : 1,3 18 : 7 23 : 5 28 : 3 4 : 1 9:4 14 : 1,11 19 : 1,5 24 : 1,3 29 : 2 5 : 2 10:3 15 : 1 20 : 3 25 : 3 30 : 1,15 6 : 1 11 : 2 16 : 2,3 21 : 2 26 : 1,7 31 :3 7 : 1 12 : 3,4 17 : 3 22 : 1 27 : 1,7 32 : 1,27 Записи ‘п : s’ и ‘п : з, V означают, что полиномы хп + xs + 1 и хп + (xs + 1)(т1 + 1) примитивны по модулю 2. Дополнительные значения до п = 168 табулированы в работе W. Stahnke, Math. Comp. 27 (1973), 977-980. В упр. 2.3.4.2-23 доказывается, что ровно m!m" 1/тп функций / обладают тре- буемыми свойствами. Это очень большое число, но только некоторые из этих функций могут быть быстро вычислены. Мы рассмотрим три типа функций /, которые представляются наиболее полезными. Первый важный случай — когда т является простым числом, a f — почти ли- нейным рекуррентным соотношением {ci, если (a:i,a:2, • ,хп) = (0,0,... ,0); 0, если (a:i,a:2, ,Жп) = (1,0,...,0); (55) (cia?i + С2Х2 -I-1- спхп) mod т в противном случае. Здесь коэффициенты (ci,..., сп) должны быть такими, что ХП — CnX71-1----— С2Х — Ci (56) является примитивным полиномом по модулю т в рассматривавшемся после фор- мулы 3.2.2-(9) смысле. Количество таких полиномов равно <р(тп — 1)/п, достаточно много, чтобы позволить нам найти такой, в котором только несколько из коэффи- циентов с не равны нулю. [Это построение берет начало в пионерской работе Willem Mantel, Nieuw Archief voor Wiskunde (2) 1 (1897), 172-184.] Предположим, например, что m = 2. Тогда бинарные п-кортежи можно гене- рировать с помощью очень простой процедуры без циклов. Алгоритм А (Почти линейная генерация со сдвигом битов). Этот алгоритм посещает все n-битовые векторы с помощью либо одного специального смещения s [случай 1], либо двух специальных смещений s и t [случай 2], указанных в табл. 1. А1. [Инициализация.] Установить (xq,xi, ... ,xn_i) «— (1,0,...,0) и к «— 0, j «— s. В случае 2 также установить г <— t и h <— s + t. А2. [Посещение.] Посетить n-кортеж (xk-i..,хо,xn_i,...,ijt+i,Хк). АЗ. [Проверка окончания.] Если Хк / 0, установить г «— 0; в противном случае установить г «— г + 1 и перейти к шагу А6, если г — п — 1. (Мы имеем г последовательных нулей.) , А4. [Сдвиг.] Установить к <— (к — 1) mod п и j <— (j — 1) mod п. В случае 2 также установить i<— (i — 1) mod п и h <— (h — 1) mod n. A5. [Вычисление нового бита.] Установить Хк «— Хк ф Xj [случай 1] или Хк «— Хк Ф xj ф Xi® Xh [случай 2]. Вернуться к шагу А2. А6. [Завершение.] Посетить (0,..., 0) и завершить работу алгоритма. |
7.2.1.1 ГЕНЕРАЦИЯ ВСЕХ П-КОРТЕЖЕЙ 353 Подходящие параметры сдвига s и, возможно, t почти наверняка существуют для всех п, поскольку примитивных полиномов достаточно много; например, при п = 32 имеется восемь различных вариантов (s,t), и в табл. 1 указан просто наименьший из них. Однако строгое доказательство существования для всех случаев выходит за рамки современных математических знаний. Наше первое построение циклов де Брейна в (55) было алгебраическим и основы- валось на теории конечных полей. Подобный метод, применимый для составных т, имеется в упр. 3.2.2-21. Наше следующее построение, напротив, будет чисто ком- бинаторным. Фактически оно прочно связано с идеей модульных m-арных кодов Грея. Алгоритм R (Генерация рекурсивного цикла де Брейна). Предположим, что /() — сопрограмма, которая при многократном вызове выводит последовательные цифры m-арного цикла де Брейна длиной тп, начиная с п нулей. Этот алгоритм пред- ставляет собой подобную подпрограмму, которая выводит цикл длиной тп+1, при условии, что п > 2. Алгоритм поддерживает три закрытые переменные: х, у и t; переменная х изначально равна нулю. R1. [Вывод.] Вывести х. Перейти к шагу R3, если х / 0 и t > п. R2. [Вызов /.] Установить у «— /(). R3. [Подсчет единиц.] Если у = 1, установить t «— t + 1; в противном случае установить t«— 0. R4. [Пропуск единицы?] Если t = п и х ф 0, вернуться к шагу R2. R5. [Подгонка а:.] Установить х <— (х + у) mod т и вернуться к шагу R1. | Например, пусть т = 3 и п = 2. Если /() производит бесконечный цикл длиной 9 0011021220011021220..., (57) то алгоритм R будет производить следующий бесконечный цикл длиной 27 на ша- ге R1. у= 001021220011110212200102122 001... t= 001001000012340010000100100 001... х = 000110102220120020211122121 0001... Доказательство корректной работы алгоритма R интересно и поучительно (см. упр. 93). А доказательство следующего алгоритма, который удваивает размер окна п, еще более интересно и поучительно (см. упр. 95). Алгоритм D (Генерация удвоенного рекурсивного цикла де Брейна). Предположим, что /() и f'() — сопрограммы, которые при многокоратном вызове выводят последо- вательные цифры m-арного цикла де Брейна длиной тп, начиная с п нулей. (Эти два цикла могут быть идентичны, но они должны генерироваться независимыми сопрограммами, поскольку их значения будут использоваться с разной скоростью.) Этот алгоритм подобен сопрограмме, которая выводит цикл длиной т2п. В нем поддерживаются шесть закрытых переменных: х, у, t, х', у’ и tz; переменные х и х' изначально должны быть равны т. 12 Зак. 3331
354 КОМБИНАТОРНЫЙ ПОИСК 7.2.1.1 Специальный параметр г должен быть установлен равным константе, для ко- торой выполняются следующие условия: О < г < т и gcd(mn — г, тп + г) = 2. (58) Обычно наилучшим выбором является г — 1 для нечетного т и г = 2 для четного т. D1. [Возможный вызов /.] Если t / п или х > г, установить у «— /(). D2. [Подсчет повторов.] Если х у, установить х *— у nt <— 1. В противном случае установить t«— t + 1. D3. [Вывод из /.] Вывести текущее значение х. D4. [Вызов /'.] Установить у'«— /'(). D5. [Подсчет повторов.] Если х1 у1, установить а/ «— у' и tz «— 1. В противном случае установить tz«— tz + 1. D6. [Возможный отказ от /'.] Если t' = п и х' < г и либо t < п, либо х' < х, перейти к шагу D4. Если t' = п, х' < г и х' = х, перейти к шагу D3. D7. [Вывод из /'.] Вывести текущее значение х'. Вернуться к шагу D3, если t' = п и я/ < г; в противном случае вернуться к шагу D1. | Основная идея алгоритма D состоит в поочередном выводе значений из /() и /'() со специальной обработкой, когда любая из последовательностей генерирует п по- следовательных х для х < г. Например, если /() и /'()дают цикл (57) длиной 9, мы берем г = 1 и получаем «на шаге D2: 12 31211112 12312111 12123121 11121231 21111212 ... х на шаге D3: 00001102122 00011021 22000110 21220001 102122000... *' на шаге D5: 121211112121211112121211112121211112121211112121 ... х' на шаге D7: О 11021220 11021220 11021220 11021220 11021220 1 ...; так что на шагах D3 и D7 получается цикл 00001011012...2222 00001... дли- ной 81. Случай т = 2 алгоритма R был открыт Абрамом Лемпелем (Abraham Lempel) [IEEE Trans. С-19 (1970), 1204-1209]. Алгоритм D был открыт только 25 лет спустя [С. J. Mitchell, Т. Etzion, and К. G. Paterson, IEEE Trans. IT-42 (1996), 1472-1478]. Используя их совместно, начиная с простых сопрограмм для п = 2 на основе (54), можно построить интересное семейство сотрудничающих сопрограмм, которые будут генерировать цикл де Брейна длиной тп для любых заданных тп > 2 и п > 2 с помощью всего лишь O(log п) простых вычислений для каждой выводимой цифры (см. упр. 96). Кроме того, в простейшем случае т = 2 этот комбинирован- ный “метод R&D”* обладает тем свойством, что его /с-й вывод можно вычислить непосредственно, как функцию от к, с помощью O(nlogn) простых операций с п- битовыми числами. И наоборот, для любого заданного n-битового шаблона /3 его позицию в цикле также можно вычислить за O(nlogn) шагов (см. упр. 97-99). В настоящее время неизвестны никакие иные семейства бинарных циклов де Брейна, которые обладали бы последним свойством. * Игра слов: в английском языке R&D означает Research & Development—научно-исследова- тельские и опытно-конструкторские работы (НИОКР). — Примеч. пер.
7.2.1.1 ГЕНЕРАЦИЯ ВСЕХ //-КОРТЕЖЕЙ 355 Наше третье построение циклов де Брейна основано на теории простых строк, которые будут иметь огромное значение при изучении операций сопоставления с шаблоном в главе 9. Пусть 7 = а(3 представляет собой конкатенацию двух строк; мы говорим, что а является префиксом 7, а /3— суффиксом. Префикс и суффикс 7 называются собственными (proper), если их длина положительна, но меньше дли- ны 7. Таким образом, /3 является собственным суффиксом а(3 тогда и только тогда, когда а / е и (3 / е. Определение Р. Строка является простой, если она непуста и (лексикографиче- ски) меньше любого собственного суффикса. | Например, 01101 не является простой строкой, поскольку она больше 01; строка же 01102 — простая, поскольку она меньше 1102, 102, 02 и 2. (Мы считаем, что строки состоят из букв, цифр или других символов линейно упорядоченного алфавита. Лексикографический, или словарный, порядок представляет собой обычный способ сравнения строк, поэтому мы записываем, что a < (3, и говорим, что а меньше (3, если а лексикографически меньше, чем (3. В частности, всегда a < a(3, а a < a(3 тогда и только тогда, когда (3 е.) Простые строки часто называют словами Линдона, поскольку они были введены Р. К. Линдоном (R. С. Lyndon) [TYans. Amer. Math. Soc. 77 (1954), 202-215]; сам Линдон называл их стандартными последовательностями. Термин “простой” более обоснован, так как связан с фундаментальной теоремой о разложении из упр. 101. Но из уважения к Линдону мы будем часто использовать для обозначения простой строки букву А. Ряд наиболее важных свойств простых строк был получен Ченом (Chen), Фок- сом (Fox) и Линдоном (Lyndon) в важной статье по теории групп [Annals of Math. (2) 68 (1958), 81-95], включая следующий простой, но фундаментальный результат. Теорема Р. Непустая строка, которая меньше всех своих циклических сдвигов, является простой. (Циклическими сдвигами строкй ai... an являются строки а? anai, <13 ... anaia2, .. . , Оп®1 • • ®n—1*) Доказательство. Пусть строка 7 = а(3 не является простой, поскольку а е и 7 > (3 -ф- е; допустим также, что 7 меньше, чем ее циклический сдвиг (За. Тогда из условий (3 < 7 < (За вытекает, что 7 = (Зв для некоторой строки в < а. Следовательно, если 7 также меньше, чем ее циклический сдвиг в(3, то в < а < а(3 < в(3. Но это невозможно, поскольку а и в имеют одну и ту же длину. | Пусть Lm(n) — количество m-арных простых строк длиной п. Каждая строка ai... ап вместе со своими циклическими сдвигами дает d разных строк для некоторо- го делителя d значения п, соответствующего ровно одной простой строке длиной d. Например, из 010010 с помощью циклического сдвига можно получить строки 100100 и 001001, а наименьшей из периодических частей {010,100,001} является простая строка 001. Следовательно, мы должны получить ^2^^tn(d) = тп для всех m,n > 1. (59)
356 КОМБИНАТОРНЫЙ поиск 7.2.1.1 Это семейство уравнений можно решить относительно Ьт(п) с помощью упр. 4.5.3- 28, (а), и мы получим Дп(п) = - y>(d)mn/d. (60) d\n В 1970-х годах Гарольд Фредриксен (Harold Fredricksen) и Джеймс Майора- на (James Maiorana) открыли простой красивый способ генерации всех т-арных простых строк длиной п или менее в возрастающем порядке [Discrete Math. 23 (1978), 207-210]. Для понимания этого алгоритма нужно рассмотреть п-расширение непустой строки А, а именно — первых п символов бесконечной строки АЛА.... Например, 10-расширение строки 123 есть 1231231231. В общем случае, если |А| = fc, ее n-расширением является ALn/fcJ А', где А' — префикс А с длиной п mod fc. Определение Q. Строка является предпростой, если она представляет собой непустой префикс простой строки на некотором алфавите. | Теорема Q. Строка длиной п > 0 является предпростой тогда и только тогда, когда она является n-расширением простой строки А длиной к < п. Эта простая строка определяется единственным образом. Доказательство. См. упр. 105. | Теорема Q, по сути, гласит, что существует взаимно однозначное соответствие меж- ду простыми строками длиной < п и предпростыми строками длиной п. Приведен- ный далее алгоритм генерирует все m-арные экземпляры в порядке возрастания. Алгоритм F (Генерация простых и предпростых строк). Этот алгоритм посещает все m-арные п-кортежи (ai,..., an), такие, что строка ai... ап является предпро- стой. Он также определяет индекс j, такой, что aj.. .ап представляет собой п- расширение простой строки ai ...aj. Fl. [Инициализация.] Установить ai ап «— 0 и j «—1; также установить а0 <--1- F2. [Посещение.] Посетить (ai,..., ап) с индексом j. F3. [Подготовка к увеличению.] Установить j <— п. Затем, если aj = т — 1, уменьшать j, пока не будет найдено aj <т — 1. F4. [Прибавление единицы.] Завершить работу алгоритма, если j — 0. В противном случае установить aj <— aj + 1. (Сейчас ai... aj — простая строка согласно упр. 105, (а).) F5. [п-расширение.] Для к «— j + 1, ..., п (в указанном порядке) установить а*, «— ak-j. Вернуться к шагу F2. | Например, алгоритм F посещает 32 тернарные предпростые строки при т = 3 и п = 4. 0000 ООП 0022л ош 0122л 0212 1111 1242 0001 0012 0101* 0112 0202* 0220* 1П2л 12*21 0002* 0020 0102л 0120 0210 0221л 1121* 1222 0010Л 0021 оиол 0121 0211 0222* 1122 2222 (61)
7.2.1.1 ГЕНЕРАЦИЯ ВСЕХ п-КОРТЕЖЕЙ 357 (Цифры, предшествующие символу ‘ представляют собой простые строки 0, 0001, 0002, 001, ООН, -. -, 2.) Теорема Q поясняет, почему этот алгоритм корректен. Шаги F3 и F4, очевидно, находят наименьшую m-арную простую строку длиной < п, которая превосходит предыдущую предпростую строку щ. ..ап. Заметим, что после того, как ai увели- чивается от 0 до 1, алгоритм посещает все (тп — 1)-арные простые и предпростые строки, увеличенные на 1... 1. Алгоритм F очень красив, но как он связан с циклами де Брейна? Изюминка вот в чем: если мы выводим цифры ai, ..., а,- на шаге F2 всякий раз, когда j является делителем п, то последовательность всех таких цифр образует цикл де Брейна! Например, в случае тп = 3 и п = 4 выводится следующая 81 цифра: 0 00010002 ООН 0012 00210022 010102 01110112 01210122 02 02110212 02210222111121122121222 2. (62) (Здесь опущены простые строки 001, 002, ОН, ..., 122 из (61), поскольку их длина не делит 4.) Причины этого почти магического свойства поясняются в упр. 108. Обратите внимание, что согласно (59) цикл имеет корректную длину. В определенном смысле вывод этой процедуры фактически эквивалентен “де- душке” всех построений циклов де Брейна, работающих при всех тп и п, а именно построения, впервые опубликованного в работе М. Н. Martin, Bull. Amer. Math. Soc. 40 (1934), 859-864. Оригинальный цикл Мартина для тп = 3 и п = 4 имел вид 2222122202211... 10000, т. е. дополнение (62) до 2. Фредриксен (Fredricksen) и Майорана (Maiorana) открыли алгоритм F почти случайно, при поисках простого способа генерации последовательности Мартина. Явная связь между их алгоритмом и предпростыми строками не была замечена еще много лет, пока Раски (Ruskey), Сэведж (Savage) и Ванг (Wang) не выполнили тщательный анализ времени работы алгоритма [J. Algorithms 13 (1992), 414-430]. Основные результаты их анализа можно найти в упр. 107, в частности: i) среднее значение п — j на шагах F3 и F5 приближенно равно l/(m — 1); ii) общее время работы алгоритма по генерации цикла де Брейна наподобие (62) составляет О(тпп). Упражнения 1. [10] Поясните, как сгенерировать все n-кортежи (<ц,... ,an), в которых lj < aj < Uj, для заданных нижних границ lj и верхних границ Uj для каждого компонента (считаем, ЧТО lj <Uj). 2. [15] Каков 1000000-й n-кортеж, посещенный алгоритмом М, если п = 10 и mj = j для l<j<n? Указание: [?; °; °; °] = 1000000. ► 3. [1W20] Сколько раз алгоритм М выполняет шаг М4? ► 4. [!<?] В большинстве компьютеров быстрее вести счет по убыванию до 0, чем по воз- растанию до тп. Переделайте алгоритм М так, чтобы он посещал все n-кортежи в обратном порядке, начиная с (mi — 1,..., тп — 1) и заканчивая (0,..., 0). ► 5. [20] Алгоритмы наподобие “быстрого преобразования Фурье” (упр. 4.6.4-14) часто завершаются массивом ответов в порядке с обращенными битами, А[(Ьо • Ьп-1)2] там, где требуется A[(t>n-1 - Ьо)?]- Предложите эффективный способ переупорядочения ответов в правильном порядке. [Указание: обратите алгоритм М.]
358 КОМБИНАТОРНЫЙ поиск 7.2.1.1 6. [Ml 7] Докажите (7) — основную формулу бинарного кода Грея. 7. [20] На рис. 30, (б) показан бинарный код Грея для диска, разделенного на 16 секто- ров. Каким должен быть код типа кода Грея для 12 или 60 секторов (для часов или минут на циферблате часов) или для 360 секторов (для градусов окружности)? 8. [15] Предложите простой способ обхода всех n-битовых строк с нулевой четностью с изменением на каждом шаге двух битов. 9. [16] Какой ход следует сделать при решении головоломки “Китайские кольца” в по- ложении, показанном на рис. 31? ► 10. [Л121] Найдите простую формулу для общего количества шагов Ап и Вп, когда кольцо (а) снимается или (б) одевается, в случае кратчайшей процедуры снятия п китайских колец. Например, Аз = 4 и Вз = 1. 11. [М22] (Г. Д. Пуркисс (Н. J. Purkiss), 1865.) Два самых маленьких кольца головолом- ки можно снимать или одевать одновременно. Сколько шагов потребуется для решения головоломки при таком ускорении? ► 12. [25] Композициями п называются последовательности положительных целых чисел, дающих в сумме число п. Например, композициями 4 являются 1111, 112, 121, 13, 211, 22, 31 и 4. Целое число п имеет ровно 2П-1 композиций, соответствующих всем подмножествам точек {1, ...,п — 1}, которые могут использоваться для разбиения интервала (0..п) на подынтервалы с целочисленными длинами. а) Разработайте алгоритм без циклов для генерации всех композиций п, представляющий каждую композицию в виде последовательного массива целых чисел S1S3 ...Sj. б) Аналогично разработайте алгоритм без циклов, который представляет композиции неявно в виде массива указателей qgqi qt, где элементами композиции являются (до — Qi)(?i — g2)---(gt-i — ?t) и go = п, qt = 0. Например, композиция 211 при использовании такой схемы должна быть представлена указателями до = 4, gi = 2, дг = 1, дз = 0 и t = 3. 13. [21] Продолжая предыдущее упражнение, вычислите также мультиномиальный ко- эффициент С = („,”,..) при посещении композиции Si... Sj. 14. [20] Разработайте алгоритм для генерации всех строк щ .. .а>, таких, что 0 < j < п и 0 < а, < mt для 1 < г < j, в лексикографическом порядке. Например, если mi = тз = п = 2, ваш алгоритм должен последовательно посетить е, 0, 00, 01, 1, 10, 11. ► 15. [25] Разработайте алгоритм без циклов для генерации строк из предыдущего упраж- нения. Все строки одной и той же длины должны, как и ранее, посещаться в лексико- графическом порядке, но строки с разными длинами могут быть перемешаны в любом удобном порядке. Например, при mi = тз = п - 2 таким допустимым порядком может быть 0, 00, 01, е, 10, 11, 1. 16. [23] Очевидно, что алгоритм без циклов не в состоянии генерировать все бинарные векторы (ai,...,an) в лексикографическом порядке, поскольку количество компонентов aj, которые должны измениться между последовательными посещениями, не ограниче- но. Покажите, что, тем не менее, бесцикловая лексикографическая генерация становится возможной, если вместо последовательного представления использовать связанное. Пред- положим, что имеется 2п + 1 узлов {0,1,..., 2п}, каждый из которых содержит поле LINK. Бинарный n-кортеж (ai,..., an) представляется с помощью следующих значений полей: LINK(O) = 1 + nai; LINK(j — 1 + naj-i) = j + naj для 1 < j < n; LINK(n + nan) = 0; а другие n полей LINK могут содержать любые удобные значения.
7.2.1.1 ГЕНЕРАЦИЯ ВСЕХ П-КОРТЕЖЕЙ 359 17. [20] Хорошо известная конструкция, именуемая картой Карно [М. Karnaugh, Amer. Inst. Elect. Eng. Trans. 72, part I (1953), 593-599], использует бинарный код Грея в двух измерениях для вывода всех 4-битовых чисел в торе размером 4x4. 0000 0001 ООН 0010 0100 0101 0111 ОНО 1100 1101 1111 1110 1000 1001 1011 1010 (Элементы тора “склеиваются” слева и справа, а также сверху и снизу, как если бы они были частью мозаики, покрывающей плоскость.) Покажите, что можно аналогично упорядочить все 6-битовые числа в виде тора размером 8x8 так, что при перемещении в горизонтальном или вертикальном направлении на один элемент изменяется только одна координатная позиция. ► 18. [20] Вес Ли вектора и = («1,-.. ,un), где каждый компонент удовлетворяет условию 0 < Uj < mj, определяется следующим соотношением: п Kt(u) = min(uj, mj — Uj); 3=1 расстояние Ли между двумя такими векторами и и v равно db(u,v) = vl(u — v), где и — v = ((ui — ui) mod mi,..., («n — vn) mod mn). (Это минимальное количество шагов, необходимых для преобразования и в и, если на каждом шаге изменять некоторую из компонент Uj на ±1 (по модулю mj).) У кватернарного вектора mj = 4 для 1 < j < п, а у бинарного все mj = 2. Найдите простое взаимно однозначное соответствие между кватернарными векторами и = (щ,..., ип) и бинарными векторами и' - (и'х,..., и^п), обладающими теми свойствами, что vl(u) = м(и') и db(u, v) = v(u ф v'). 19. [Й5] (Октакод.) Пусть д(х) = х3 + 2х2 + х — 1. а) Используйте один из алгоритмов данного раздела для вычисления полинома от пере- менных zo, zi, Z2 и гз — $2z«oz«iz«2z«3z’‘4z«Bz«ez«oo, гДе суммирование выполняется по всем 256 полиномам (vo + vix + игх2 + изх3)д(х) mod 4 = ио + uix + u%x2 + изх3 + шг4 + us®5 + uex6 для 0 < ЗД, vi,i>2,из < 4, где Uoo выбирается так, что 0 < Uoo < 4 и (uo + ui + «2 + из + U4 + us + ив + Uoo) mod 4 = 0. б) Постройте множество из 256 16-битовых чисел, которые отличаются одно от другого по меньшей мере в шести различных битовых позициях. (Такое множество, впервые открытое Нордстромом (Nordstrom) и Робинсоном (Robinson) [Information and Control 11 (1967), 613-616], по сути, является единственным.) 20. [Л/56] 16-битовые кодовые слова в предыдущем упражнении можно использовать для передачи 8 бит информации с возможностью исправления ошибок передачи данных в одном или двух поврежденных битах. Кроме того, код обнаруживает (но не всегда в состоянии исправить) ошибки в трех битах. Разработайте алгоритм, который либо находит ближай- шее кодовое слово для данного 16-битового числа и', либо определяет, что в и' ошибочны по меньшей мере три бита. Как ваш алгоритм декодирует число (1100100100001111)2? [Указание: воспользуйтесь тем фактом, что х7 = 1 (по модулю д(х) и 4) и что каждый кватернарный полином степени < 3 сравним с х>+2хк (по модулю д(х) и 4) для некоторого j, к 6 {0,1,2,3,4,5,6, оо}, где х°° = 0.]
360 КОМБИНАТОРНЫЙ ПОИСК 7.2.1.1 21. [Af30] t-подкуб n-мерного куба можно представить строкой наподобие »»10»»0», со- держащей t звездочек и п—t конкретных битов. Если все 2П бинарных n-кортежей записа- ны в лексикографическом порядке, то элемент, принадлежащий такому подкубу, появится в 2*' кластерах последовательных записей, где t’ — количество звездочек, лежащих слева от крайнего справа определенного бита. (В приведенном примере п — 8, t = 5 и t‘ = 4.) Но если записать n-кортежи в порядке бинарного кода Грея, то количество кластеров может быть уменьшено. Например, (п—1)-подкубы *... *0 и * ... *1 при использовании бинарного кода Грея появляются только в 2"-2+1 и 2"-2 кластерах соответственно, а не в 2"-1 из них. а) Поясните, как вычислить С(а), количество бинарных кластеров Грея подкуба, опре- деляемого заданной строкой а, состоящей из звездочек, единиц и нулей. Чему равно б) Докажите, что С(а) всегда лежит между 2* -1 и 2* включительно. в) Чему равно среднее значение С(а), взятое по всем 2"-t(") возможным t-подкубам? ► 22. [22] Назовем “правым подкубом” подкуб типа 0110**, в котором все звездочки по- являются после всех определенных битов. Любой бинарный луч (trie) (раздел 6.3) мо- жет рассматриваться как способ разбиения куба на непересекающиеся правые подкубы (рис. 36, (а)). Если поменять местами левый и правый подлучи каждого правого подлуча, проходя от корня сверху вниз, то мы получим бинарный луч Грея наподобие приведенного на рис. 36, (б). Докажите, что если “листья” бинарного луча Грея обходятся слева направо, то после- довательные листья соответствуют смежным подкубам. (Подкубы являются смежными, если они содержат смежные вершины. Например, 00** смежный с 011*, поскольку первый содержит 0010, а второй — 0110; однако 011* не является смежным с 10**.) 010* 011* 100* 1010 1011 Рис. 36. (а) Обычный бинарный луч. 011* 010* 1010 1011 (б) Бинарный луч Грея. 23. [20] Предположим, что д(к) ф 23 = д(Г). Как проще всего найти I для заданных j и к? 24. [М21] Рассмотрим расширение бинарной функции Грея д на все 2-адические целые числа (см. раздел 7.1.3). Какой будет соответствующая обратная функция д^~ *1? ► 25. [М25] Докажите, что если д(к) и д(Г) отличаются t > 0 битами, и если 0 < к,1 < 2", то [2‘/3] < |fc -/| < 2" - [2‘/3]. 26. [25] (Фрэнк Раски (Frank Ruskey).) Для каких целых чисел /V можно сгенерировать все неотрицательные целые числа, меньшие N, таким образом, чтобы на каждом шаге изменялся только один бит в двоичном представлении этих чисел? ► 27. [20] Пусть So — {1} и S„+i = 1/(2 + Sn) U 1/(2 — Sn); таким образом, например, и Sn содержит 2” элементов, лежащих между | и 1. Вычислите 10(б) * * * 1о-й наименьший элемент S100-
7.2.1.1 ГЕНЕРАЦИЯ ВСЕХ П-КОРТЕЖЕЙ 361 28. [М27] Медианой n-битовых строк {ai,...,at}, где а* имеет битовое представление at = efc(n_i)... ato, является строка а = an-i... ao, биты которой aj ддя 0 < j < п соот- ветствуют большинству битов akj для 1 < к < t. (Если t четно и биты atj поровну равны О и 1, то бит медианы oj может быть как 0, так и 1.) Например, строки {0010,0100,0101,1110} имеют две медианы, 0100 и ОНО, которые можно записать как 01*0. а) Найдите простой способ описания медиан Gt - {р(0),... ,p(t—1)} — первых t бинарных строк, когда 0 < t < 2". б) Докажите, что если а = an_! ...a0 является такой медианой и если 2"-1 < t < 2", то строка /?, полученная из а дополнением произвольного бита ajt также является элементом Gt- 29. [МЯ{ ] Если целочисленные значения к передаются как n-битовые бинарные коды Грея д(к) и получаются с ошибками, описываемыми битовым шаблоном р = (рп-1 • -Ро)2, то средняя числовая ошибка равна 2Л —1 к=О в предположении равновероятности всех значений к. Покажите, что эта сумма равна ELoKfc фр) — fc|/2", как если бы бинарный код Грея не использовался, и вычислите ее. ► 30. [МЯТ] (Перестановка Грея.) Разработайте однопроходный алгоритм для замены эле- ментов массива (Xo,Xi,X2,.• • , X2"-i) элементами (Хэ(о),Хэ(1),Хэ(2),... ,Xg(2n-i)) с ис- пользованием только фиксированного количества вспомогательной памяти. Указание: рассматривая функцию д(п) как перестановку всех неотрицательных целых чисел, пока- жите, что множество L = {0,1, (Ю)2, (100)2, (Ю0*)2, (100*0)2, (100»0»)2, -.. } является множеством веф/щигг элементов цикла, т. е. его наименьших элементов. 31. [ЯМ35] (Поля Грея.) Пусть fn(x) = д(гп(х)) обозначает операцию отражения битов n-битовой бинарной строки, как в упр. 5, с последующим преобразованием в бинарный код Грея. Например, операция /з(х) имеет вид (001)г (110)2 »-> (010)г •-> (011)г •-> (101)г »-> (111)2 •-> (100)2 •-> (001)2, поэтому все ненулевые возможности находятся в единственном цикле. Следовательно, можно использовать /з для определения поля из 8 элементов с ф в качестве операции сложения и с умножением, определяемым правилом /Р’(1) х /Г](1) = zP+fc,(i) = W(i)). Тем же приятным свойством обладают функции /2, /5 и /в, но не функция /4, поскольку /4((Ю11)2) = (Ю11)2. Найдите все п < 100, для которых fn определяет поле из 2" элементов. 32. [МЯО] Истинно или ложно следующее утверждение? Функции Уолша удовлетворяют соотношению Wk(—х) = (—l)fcWk(x). ► 33. [МЯО] Докажите закон Радемахера-Уолша (17). 34. [МЯ1] Функция Пейли рь(х) определяется следующими соотношениями: Ро(х) = 1 и pk(x) = (-l)L2lJfcpLfc/2j(2a:). Покажите, что рь(х) можно достаточно просто выразить через функции Радемахера, ана- логичные (17), и свяжите функции Пейли с функциями Уолша.
362 КОМБИНАТОРНЫЙ ПОИСК 7.2.1.1 35. [НМ23] Матрица Пейли Рп размером 2" х 2" получается из функций Пейли так же, как матрица Уолша Wn получается из функций Уолша. (См. (20).) Найдите интересные соотношения между Рп, Wn и матрицей Адамара Нп. Докажите, что все три матрицы симметричны. 36. [21] Подробно опишите эффективный алгоритм вычисления преобразования Уолша (хо, • - -,х?п_i) заданного вектора (Хо,... ,X2»»-i). 37. [НМ23] Пусть гм —положение l-то изменения знака в Wk(x) для 1 < 1 < fc и 0 < zm < 1. Докажите, что ]zti — l/(k + 1)| = O((logfc)/fc). ► 38. [М25] Разработайте тернарное обобщение функций Уолша. ► 39. [НМЗО] (Д. Д. Сильвестер (J. J. Sylvester).) Строки матрицы (ь _?о) ортогональны одна другой и имеют одинаковую величину; следовательно, из матричного тождества (А В) (а2 + Ь2 к 0 0 \(А\=(.АВ)(а b\(a b \ (А\ а2 + Ь2 ) \В) \Ь —а) \Ь —а) \В) _ ( Аа + Bb АЬ — Ва ) / а А + ЬВ \ \ ЪА — аВ ) вытекает тождество суммы двух квадратов (а2 + Ь2)(А2 + В2) = (аА + ЬВ)2 + (ЪА — аВ)2. Аналогично матрица abed b —a d —с d с —Ь —а с —d —а Ъ приводит к тождеству суммы четырех квадратов (а2 + Ь2 + с2 + d2)(A2 + В2 + С2 + Ь2) = (аА + ЬВ + сС + dD)2 + (ЪА -aB + dC- cD)2 + (dA + сВ — ЬС — aD)2 + (cA - dB - aC + bD)2. а) Присвойте знаки матрицы Нз в (21) символам {а, Ь, с, d, е, f, g, /1} и получите матрицу с ортогональными строками и тождество суммы восьми квадратов. б) Выполните обобщение на На и матрицы более высокого порядка. ► 40. [21 ] Будет ли схема вычисления на основе пятибуквенных слов давать правильные ответы, если на шаге W2 вычислять маски как mj = z& (25j — 1) для 0 < j < 5? 41. [25] Если мы ограничимся только тремя тысячами наиболее распространенных пя- тибуквенных слов, тем самым опуская ducky, duces, dunks, dinks, dinky, dices, dicey, dicky, dicks, picky, pinky, punky и pucks из (23), то сколько корректных слов может быть сгенерировано из одной пары при таких ограничениях? 42. [35] (М. Л. Фредман (М. L. Fredman).) Алгоритм L использует 0(nlogn) бит вспо- могательной памяти для фокусных указателей при выборе бита aj бинарного кода Грея, который будет дополнен на следующем шаге. Шаг L3 проверяет 0(logn) вспомогательных битов и изменяет Q(log п) из них. Покажите, что с теоретической точки зрения можно поступить лучше: п-битовый бинарный код Грея может быть сгенерирован путем изменения между посещениями не более двух вспомогательных битов. (Мы позволяем себе исследовать на каждом шаге O(log п) вспомогательных битов, так что мы знаем, какие из них должны быть изменены.) 43. [^1] Определите d(6)— количество 6-битовых циклов Грея. (См. (26).) 44. [М20] Покажите, что d(n) < {М^), если n-мерный куб имеет М(п) совершенных паросочетаний.
7.2.1.1 ГЕНЕРАЦИЯ ВСЕХ П-КОРТЕЖЕЙ 363 45. [MJO] (Т. Федер (Т. Feder) и К. Суби (С. Subi), 2009.) В этом упражнении строится большое количество циклов Грея в (4г + 2)-мерном кубе G = G4ClGf3lZlGf2ClGfioGf()nGf-i, где Gt представляет собой г-мерный куб для г > 0, и Go = G-i - Р2. Вершины v представляют собой (4т -I- 2)-битовые строки гм ... здг>-1, где г>, содержит г бит при г > 0 и один бит при г < 0. “Сигнатурой” v является четырехбитовая строка <т(г>) = S4S3S2(si®tio), где s,— четность V,. Мы рассматриваем битовые строки как двоичные числа. Обозначим через Mi(v) (1 < I < 4) совершенное паросочетание в G, такое, что v— v' = V4... VgvLi и v' = Vt для i l. (Заметим, что Mt(v') = v.) Определим также Л4о(г») = г>ф 2. Рассмотрим циклы, образованные ребрами v — Мцку(и), где l(v) зависит от сигнатуры v. <r(t>) = 0000 0001 0011 0010 ОНО 0111 0101 0100 1100 1101 1111 1110 1010 1011 1001 1000 l(v) =0203120412131204 а) Предположим, что г = 2 и Л4/(г>) = v ф 22,+®‘-1 для I > 1 и Л41(у) = v ф 22+(”°®”-1\ Какому циклу принадлежит вершина 0... 0 в этом случае? б) Вершина, сигнатура которой представляет собой степень двойки, называется зазем- ленной (ground) вершиной. Четыре вершины с одними и теми же гм ...гд называются братскими. Определим и = г>, если и и v находятся в одном и том же цикле или если и и v являются братскими заземленными вершинами, или если цепочка таких эквивалентностей ведет от и к v. Поясните, как построить циклы в G для каждого класса эквивалентности. в) Кроме того, если и и v являются братскими заземленными вершинами, существует такой цикл, который включает ребра {иф2— и, г>®2 — г>} исходных циклов. г) Наконец покажите, как преобразовать циклы из (б) и (в) в единый цикл. д) Сколько различных Гамильтоновых циклов можно получить при изменении Лй, ..., Л14? 46. [М23] Распространите упражнение 45 на (fcr + 2)-мерный куб для четного fc. 47. [НМ2/] Какова асимптотическая оценка d(n)1^2" вытекающая из упр. 44 и 46? 48. [ЯЛЦЗ] Определите асимптотическое поведение d(n)1^2 при п —> оо. 49. [20] Докажите, что для всех п > 1 существует 2п-битовый цикл Грея, в котором г»ц.+22„-1 является дополнением Vk для всех к > 0. ► 50. [21 ] Найдите конструкцию, подобную использованной в теореме D, но с четным I. 51. [M2J] (Сбалансированные циклы Грея.) Завершите доказательство следствия В тео- ремы D. 52. [М20] Докажите, что если количество переходов n-битового цикла Грея удовлетворя- ет условию со < ci < • • • < Сп—1, то со -I-1- Cj-i > 23, причем равенство достигается при 3 = п. 53. [ЛГ^б] Если числа (со,... ,Cn-i) четные и удовлетворяют условию из предыдущего упражнения, то всегда ли существует n-битовый цикл Грея с указанными количествами переходов? 54. [М20] (Г. С. Шапиро (Н. S. Shapiro), 1953.) Покажите, что если последовательность целых чисел (ai,..., a2n) содержит только п различных значений, то существует подпо- следовательность для некоторых 0 < к < I < 2", произведение ak+iak+2 <Ч которой является идеальным квадратом. Однако это утверждение может оказаться неверным, если запретить случай I = 2". ► 55. [35] (Ф. Раски (F. Ruskey) и К. Сэведж (С. Savage), 1993.) Если (зд,... ,г>2"-1) — n-битовый цикл Грея, то пары{ {г>2к,г»2*:+1} | 0 < к < 2”*1 } образуют совершенное паро- сочетание между вершинами n-мерного куба с четной и нечетной четностями. Каждое ли
364 КОМБИНАТОРНЫЙ ПОИСК 7.2.1.1 такое совершенное паросочетание возникает как “половина” некоторого n-битового цикла Грея? 56. [AfSO] (Э. Н. Гильберт (Е. N. Gilbert), 1958.) Назовем два цикла Грея эквивалентны- ми, если их дельта-последовательности можно сделать равными путем перестановки имен координат, обращения цикла и/или начала цикла с другого места. Покажите, что 2688 различных 4-битовых циклов Грея делятся на всего лишь 9 классов эквивалентности. 57. [32] Рассмотрим граф, вершинами которого являются 2688 возможных 4-битовых циклов Грея и в котором два цикла смежны, если они связаны друг с другом одним из следующих простых преобразований. О Ф © © о До После типа 1 После типа 2 После типа 3 После типа 4 (Изменение типа 1 проявляется, когда цикл может быть разбит на две части с обращением одной из них. Типы 2-4 означают, что цикл можно разбить на три части и собрать вновь после обращения 0, 1 или 2 частей. Части не обязаны иметь одинаковые размеры. Такие преобразования очень часто оказываются возможными для Гамильтоновых циклов.) Напишите программу, которая выясняет, какие 4-битовые циклы Грея могут быть преобразованы один в другой, путем поиска связных компонентов графа. Ограничьтесь только одним из четырех типов преобразований. 58. [21] Пусть а—дельта-последовательность n-битового цикла Грея, а (3 получается из а путем изменений q появлений 0 на п, где q—нечетно. Докажите, что ДО является дельта-последовательностью (n -I- 1)-битового цикла Грея. 59. [22] 5-битовый цикл Грея из (30) является нелокальные в том смысле, что никакие 2* последовательные элементы не принадлежат одному t-подкубу для 1 < t < п. Докажите, что существуют нелокальные n-битовые циклы Грея для всех п > 5. [Указание: см. предыдущее упражнение.] 60. [20] Покажите, что функция границ длин серий удовлетворяет условию r(n + 1) > г(п). 61. [AfSO] Покажите, что г(т + п) > г(т) + г(п) — 1, если (а) тп = 2 и 2 < г(п) < 8; или (б) тп < п и г(п) < 2”1-3. 62. [46] Верно ли, что г(8) = 6? 63. [30] (Луи Голдин (Luis Goddyn).) Докажите, что г(10) > 8. 64. [7ЙИ35] (Л. Годдин (L. Goddyn) и П. Гвоздяк (Р. Gvozdjak).) п-битовым потоком Грея называется последовательность перестановок (<то,<71,..., <tj-i), в которой каждая пред- ставляет собой перестановку вершин n-мерного куба, перемещающую каждую вершину на место одного из ее соседей. а) Предположим, что (но,. •., П2та-1) является тп-битовым циклом Грея, а (сто, <ri,..., <Т2"*-1) — n-битовым потоком Грея. Пусть vq = 0...0nvk+i = иьсгк,гдесгк =<7itmod2’", если к >2™. При каких условиях последовательность W — (lioVo, , ЩО1, U1U2, - --, U2m+n — 1 —1—1, —1 Т?2т+п —1 ) является (тп -I- побитовым циклом Грея? б) Покажите, что если тп достаточно велико, существует п-битовый поток Грея, удо- влетворяющий условиям (а), для которого все длины серий из последовательности (зд, vi,...) не меньше п — 2. в) Примените эти результаты для доказательства того факта, что г(п) > п — O(logn).
7.2.1.1 ГЕНЕРАЦИЯ ВСЕХ П-КОРТЕЖЕЙ 365 65. [30] (Бретт Стивенс (Brett Stevens).) Пьеса Сэмюэля Беккетта (Samuel Beckett) Чет- верка (Quad) начинается и заканчивается пустой сценой; на нее выходят п актеров, появ- ляясь на сцене во всех 2” возможных подмножествах, и при этом покидающий сцену актер всегда тот, который появился на сцене раньше других присутствующих на ней актеров. При п — 4, как в реальной пьесе, некоторые подмножества вынужденно повторяются. Покажите, что при п = 5 имеется совершенный шаблон с ровно 2" входами и выходами. 66. [^0] Существует ли идеальный шаблон Беккетта-Грея для 8 актеров? 67. [20] Иногда желательно пройти по всем n-битовым бинарным строкам путем измене- ния как можно большего количества битов на каждом шаге, например при тестировании надежности схемы в наихудших условиях. Поясните, как обойти все бинарные п-кортежи так, чтобы на каждом шаге поочередно изменялись п или п — 1 бит. 68. [21 ] Математик И. 3. Вращенец намерен построить тернарный код анти-Грея, в ко- тором каждое n-значное троичное число отличается от своих соседей во всех цифрах. Сможет ли он создать такой код для любого п? ► 69. [М25] Изменим определение бинарного кода Грея (7), полагая h(k) = (... (be Ф Ьв)(Ьб ф bijfbt ф Ьз ф Ьг Ф Ьо)(Ьз Ф Ьо)(Ьг Ф bi Ф bo)bi)2, когда к = (... ЬвЬ4ЬзЬ2Ь1Ьо)2. а) Покажите, что последовательность /г(0), Л(1), ..., h(2n— 1) проходит по всем п-битовым (п > 3) числам таким образом, что всякий раз изменяются ровно 3 бит. б) Обобщите указанное правило для получения последовательностей, в которых на каж- дом шаге изменяются ровно t бит, где t нечетно и п > t. 70. [21 ] Каково количество монотонных n-битовых кодов Грея при п = 5 и п = 6? 71. [М22] Выведите (45) — рекуррентное соотношение, определяющее перестановки Сэ- ведж-Винклера. 72. [20] Как выглядит код Сэведж-Винклера для перехода от 00000 к 11111? ► 73. [32] Разработайте эффективный алгоритм для построения дельта-последовательно- сти n-битового монотонного кода Грея. 74. [М25] (Сэведж (Savage) и Винклер (Winkler).) Насколько в монотонном коде Грея далеко друг от друга могут находиться смежные вершины n-мерного куба? 75. [32] Найдите все 5-битовые пути Грея зд, ..., i>3i без тренда, т. е. такие, что в каждой координатной позиции j сумма ^(—I)”*’ = 0. 76. [М25] Докажите, что бестрендовые n-битовые коды Грея существуют для всех п > 5. 77. [21 ] Модифицируйте алгоритм Н так, чтобы можно было обойти n-кортежи со сме- шанным основанием в модульном порядке Грея. 78. [М26] Докажите формулы преобразования (50) и (51) для рефлексивных кодов Грея со смешанными основаниями и выведите аналогичные формулы для модульного случая. ► 79. [М22] Когда последний n-кортеж (а) рефлексивного (б) модульного кода Грея со смешанным основанием смежен с первым? 80. [М20] Поясните, как пройти по всем делителям числа, если задано его разложение на простые множители pf1 ... Pt‘, выполняя на каждом шаге умножение или деление на одно простое число. 81. [М21] Пусть (ao,bo), (ai,bi), ..., (am2_1,bm2_1) является 2-значным m-арным модуль- ным кодом Грея. Покажите, что если т > 2, то каждое ребро (х, у) — (х, (у -I-1) mod т)
366 КОМБИНАТОРНЫЙ ПОИСК 7.2.1.1 и (х, у) — ((х + 1) mod т, у) присутствует в одном из двух циклов: (ао,Ьо) — (ai,bi)----------------------------(Om2-i,bm2_i) — (ао,Ьо), (Ьо.ао) — (bi,ai)---------— (bo.ao). 82. [М25] (Г. Рингель (G. Ringel), 1956.) Воспользуйтесь предыдущим упражнением для вывода того факта, что существует четыре 8-битовых цикла Грея, которые вместе покрывают все ребра 8-мерного куба. 83. U1] Можно ли покрыть все ребра 8-мерного куба четырьмя сбалансированными 8- битовыми циклами Грея? 84. [25] (Говард Л. Дикман (Howard L. Dyckman).) На рис. 37 показана замечательная головоломка “Сумасшедшая петля” или “Гордиев узел” в которой нужно снять гибкую веревку с жестких окружающих ее петель. Покажите, что решение этой головоломки тесно связано с рефлексивным тернарным кодом Грея. Рис. 37. Головоломка “Сумасшедшая петля” 85. [М25] (Дана Ричардс (Dana Richards).) Если Г = (ao,...,ot_i) представляет собой произвольную последовательность t строк, а Г' = (ао,... , а^'-г)—произвольная последо- вательность t' строк, то их двумерным произведением (boustrophedon product) Г1Г' является последовательность tt' строк, начинающаяся с (O0Q0, • - - > ao«t'-l> OlOt'-l, i ala0, a2a0, >а2а«'-1> a3at'-li — ) и заканчивающаяся at_ia'o, если t четно, и atесли t нечетно. Например, фунда- ментальное определение бинарного кода Грея в (5) можно выразить с помощью данного обозначения как Гп = (0,1) I Гп-1 при п > 0. Докажите, что операция I ассоциативна, следовательно, Гт+п = Гт I Гп. 86. [26] Определите бесконечный код Грея, который проходит по всем возможным неот- рицательным целым n-кортежам (ai,..., an) таким образом, что если (ai,..., а'п) следует за (ai,...,an), то max(ai,...,a„) < max(a'1,...,a„). 87. [27] Продолжая предыдущее упражнение, определите бесконечный код Грея, кото- рый проходит по всем целочисленным n-кортежам (ai,...,an) таким образом, что если (a'j,... ,а'п) следует за (ai,... ,a„), то max(|ai|,..., |an|) < max(|a'i|,..., |<4|). 88. [25] Что произойдет, если после того, как алгоритм К завершится на шаге К4, он будет немедленно перезапущен на шаге К2? 89. [25] (Код Грея для кода Морзе.) Словами кода Морзе длиной п (упр. 4.5.3-32) явля- ются строки из точек и тире, где п—количество точек плюс удвоенное количество тире. а) Покажите, что можно сгенерировать все слова кода Морзе длиной п путем последо- вательной замены тире двумя точками и наоборот. Например, путь для п = 3 имеет вид • —, • • •, — • или обратный к нему. б) Какая строка следует за строкой ------------- -- в вашей последовательности для п = 15? 90. [26] Для каких значений п можно расположить слова кода Морзе в виде цикла при использовании правил из упр. 89? [Указание: количество слов кода равно Fn+i-]
7.2.1.1 ГЕНЕРАЦИЯ ВСЕХ П-КОРТЕЖЕЙ 367 ► 91. [«/] Разработайте алгоритм без циклов для посещения всех бинарных п-кортежей (ai,...,an), таких, что aj < аг > аз < ад > • • •. [Количество таких n-кортежей равно ^п+2-] 92. [Л/30] Существует ли такая бесконечная последовательность Фп, в которой первые тп элементов при всех т образуют пг-арный цикл де Брейна? [Случай п = 2 решен в (54).] ► 93. [М28] Докажите, что алгоритм R, как и обещано, выводит цикл де Брейна. 94. [22] Каким будет вывод алгоритма D при т = 5, п=1иг = 3, если сопрограммы /() и /'() генерируют тривиальные циклы 01234 01234 01...? ► 95. [М23] Предположим, что бесконечная последовательность aoaiaz... с периодом р перемежается с бесконечной последовательностью bobibi с периодом q и образует бес- конечную циклическую последовательность C0C1C2C3C4C5 — = aoboaibiazbz — . а) При каких условиях сощсг ... имеет период pq? (Под “периодом” последовательности aoaiaz... в данном упражнении подразумевается наименьшее целое число р > 0, такое, что а* = аь+р для всех к > 0.) б) Какие 2п-кортежи будут встречаться в последовательных выводах алгоритма D, если шаг D6 заменить на “Если t' = п и х' < г, перейти к шагу D4”? в) Докажите, что алгоритм D, как и обещано, выводит цикл де Брейна. ► 96. [М28] Предположим, что у нас имеется семейство сопрограмм для генерации циклов де Брейна длиной т” с использованием алгоритмов R и D, рекурсивно основанных на простых сопрограммах типа алгоритма S для базового случая п = 2, й с использованием алгоритма D, когда п > 2 четно. а) Сколько может иметься сопрограмм каждого типа (Rn, Dn, Sn)? б) Какое максимальное количество активизаций сопрограмм требуется для получения в выводе одной цифры верхнего уровня? 97. [M2S] Цель этого упражнения—анализ циклов де Брейна, построенных алгоритма- ми R и D в важном частном случае тп = 2. Пусть fn(k) представляет собой (к -I- 1)-й бит 2"-цикла, так что fn(k) = 0 для 0 < к < п. Пусть также jn — индекс, такой, что 0 < jn < 2” и fn(k) = 1 для jn < к < jn + п. а) Запишите циклы (/„(0) ... /П(2П — 1)) для п = 2, 3, 4 и 5. б) Докажите, что для всех четных значений п существует такое число 6п = ±1, что , (м = J если 0 < fc < или 2" + jn < к < 2n+1, "+I 11 + S/n(fc + <5„), если jn < к < 2n + jn, где сравнение выполняется по модулю 2. (В этой формуле Е/ означает функцию суммирования E/(fc) = /О)-) Следовательно, j„+i = 2"— 6п, когда п четно. в) Пусть (с„(0)сп(1) ... Cn(22"— 5)) является циклом, созданным путем применения упро- щенной версии алгоритма D из упр. 95, (б) к /«()• Где в этом цикле появляются (2n—1)- кортежи 12"-1 и (01)"-10? г) Воспользуйтесь результатами п. (в), чтобы выразить f2n(k) через /п(). д) Найдите (в определенной степени) простую формулу для jn как функции от п. 98. [М34 ] Продолжая выполнение предыдущего упражнения, разработайте эффективный алгоритм для вычисления fn(k) для заданных п > 2 и к > 0. ► 99. [М23] Воспользуйтесь технологиями из предыдущих упражнений для разработки эф- фективного алгоритма обнаружения любой заданной n-битовой строки в цикле (/«(0) /„(1).../п(2"-1)).
368 КОМБИНАТОРНЫЙ поиск 7.2.1.1 100. [40] Является ли цикл де Брейна из упр. 97 при больших п полезным источником псевдослучайных битов? 101. [Af30] (Уникальное разложение строк на неувеличивающиеся простые строки.) а) Докажите, что если А и А' простые, то А А' является простой при А < А'. б) Следовательно, каждую строку а можно записать в виде а = А1А2 ... At, Ai > А2 > > At, где каждая А^ —простая. в) В действительности возможно только одно такое разложение. Указание: покажите, что At должна быть лексикографически наименьшим непустым суффиксом а. г) Истинно или ложно следующее утверждение? Ai представляет собой наидлиннейший простой префикс а. д) Каковы простые множители строки 3141592653589793238462643383279502884197? 102. [НМ28] Выведите количество m-арных простых строк длиной п из теоремы об един- ственности разложения из предыдущего упражнения. 103. [М20] Воспользуйтесь (59) для доказательства малой теоремы Ферма о том, что тр = т (по модулю р). 104. [17] Согласно формуле (60) примерно 1/п всех n-буквенных слов—простые. Сколь- ко простых слов среди 5757 пятибуквенных слов GraphBase? Какое из них является наименьшей непростой строкой? А наибольшей простой строкой? 105. [AfSl] Пусть а — предпростая строка длиной п на бесконечном алфавите. а) Покажите, что если увеличить последнюю букву а, то полученная строка будет простой. б) Покажите, что если а разложена на простые строки, как в упр. 101, то она является n-расширением Ai. в) Кроме того, а не может быть n-расширением двух разных простых строк. 106. [МЗО] Путем обратной реконструкции алгоритма F разработайте алгоритм, который посещает все m-арные простые и предпростые строки в убывающем порядке. 107. [ЯМЗО] Проанализируйте время работы алгоритма F для фиксированного т при п —> оо. 108. [Л/35] Пусть Ai < • • < At представляют собой тп-арные простые строки, длины ко- торых являются множителями п, и пусть ai... ап является произвольной тп-арной строкой. Цель данного упражнения—доказать, что «и... ап появляется в Ai... AtAi А2; следователь- но, Ai... At представляет собой цикл де Брейна (поскольку его длина—тп). Для удобства можно считать, что т = 10 и что строки соответствуют десятичным числам; те же самые аргументы применимы и для произвольного т > 2. а) Покажите, что если ai... ап - а(3 отличается от всех ее циклических сдвигов и если (За = А* — простая строка, то а(3 представляет собой подстроку АцАц+1, за исключе- нием случая, когда а = 9J для некоторого j > 1. б) Где в Ai... At появится а/?, если (За является простой строкой, а а состоит толь- ко из девяток? Указание: покажите, что если a„+i_i...a„ = 91 на шаге F2 для некоторого I > 0 и если j не является делителем п, то на предыдущем шаге F2 Оп—1... ап — 9 + . в) Рассмотрим теперь n-кортежи вида (a/?)d, где d > 1—делитель п, а /За = Ац — простая строка. г) Где появятся 899135, 997879, 913131, 090909, 909090 и 911911 при п=6? д) Является ли Ai ...At лексикографически наименьшим тп-арным циклом де Брейна длиной тп?
7.2.1.2 ГЕНЕРАЦИЯ ВСЕХ ПЕРЕСТАНОВОК 369 109. [ЛШ] m-арный тор де Брейна размером т2 х т2 д ля окон 2x2 представляет собой матрицу тп-арных цифр d,j, такую, что каждая из гп4 подматриц dij di(j+l) d(i+l)O+l) О < i, j < т2 отличается от других (здесь индексы “свернуты в кольцо” по модулю т2). Таким образом, каждая возможная m-арная подматрица 2x2 получается только один раз; Ян Стюарт (Ian Stewart) [Game, Set, and Math (Oxford: Blackwell, 1989), Chapter 4] назвал этот объект m-арным ауротором (ourotorus). Например, О 0 1 0\ 0 0 0 1 0 111 10 11; является бинарным ауротором; фактически это единственная такая матрица для т = 2, если исключить сдвиги и/или транспонирование. Рассмотрим бесконечную матрицу D, элемент которой в строке г = (. ..020100)2 и столбце j = (... 626160)2 представляет собой dij = (... 020100)2, где со = (ао Ф bo)(ai Ф bi) Ф bi', Ск = (а2кОо Ф t>2fc)bo Ф (а2к-цао Ф 62fc+i)(6o Ф 1) для к > 0. Покажите, что верхняя левая 22п х 22”-подматрица D представляет собой 2”-арный ауротор для всех п > 0. 110. [М25] Продолжая выполнять предыдущее упражнение, постройте тп-арные аурото- ры для всех т. 111. [20] Число 100 можно получить путем вставки знаков -I- и — в последовательность 123456789 (в том числе и перед первой ее цифрой) двенадцатью способами: 100 = 123 - 45 - 67+89 = 123 -4 - 5 - 6- 7+ 8-9 = 123+45 -67+8- 9 = 123+4- 5+67- 89 = 12- 3- 4 + 5- 6 + 7 + 89 = 12+ 3- 4 + 5 +67+ 8 + 9 = 12+ 3 + 4 + 5- 6- 7 + 89 = 1 + 23 - 4 + 56 + 7 + 8 + 9= 1 + 23 - 4 + 5 + 6 + 78 - 9 = 1 + 2 + 34 - 5 + 67 - 8 + 9 = 1 + 2 + 3- 4 + 5 + 6 + 78+ 9 =-1 + 2- 3 + 4 + 5 + 6 + 78+ 9 а) Какое наименьшее положительное число нельзя получить таким образом? б) Рассмотрите также вставку знаков + и — в последовательность 9876543210. ► 112. [25] Продолжая предыдущее упражнение, как далеко вы сможете зайти, вставляя знаки среди цифр 12345678987654321? Например, 100 = —1234— 5 —6+7898— 7—6543—2—1. 7.2.1.2. Генерация всех перестановок. После n-кортежей следующим по важ- ности элементом практически в любом списке пожеланий в области комбинаторной генерации является посещение всех перестановок некоторого заданного множества или мультимножества. Для решения этой задачи разработано много различных спо- собов. В этом разделе мы изучим только наиболее важные генераторы перестановок, начав с классического метода—одновременно простого и гибкого. Алгоритм L [Лексикографическая генерация перестановок). Для заданной по- следовательности из п элементов 0,10,2...On, изначально отсортированной таким образом, что ^т — < < tin, (1)
370 КОМБИНАТОРНЫЙ поиск 7.2.1.2 этот алгоритм генерирует все перестановки {ai,O2,...,an}, посещая их в лексико- графическом порядке. (Например, лексикографически упорядоченными переста- новками {1,2,2,3} являются 1223, 1232, 1322, 2123, 2132, 2213, 2231, 2312, 2321, 3122, 3212, 3221.) Вспомогательный элемент а® используется для удобства; значение ац должно быть строго меньше, чем значение наибольшего элемента On. L1. [Посещение.] Посетить перестановку а^а^ -. • ап. L2. [Поиск j.] Установить j «— п—1. Если aj > aj+i, уменьшать j на 1, пока не будет выполнено условие aj < - Завершить работу алгоритма, если j = 0. (В этот момент j представляет собой наименьший индекс, такой, что все перестановки, начиная с щ ... а, , уже были посещены. Так что лексикографически следующая перестановка увеличивает значение aj.) L3. [Увеличение aj.] Установить I «— п. Если aj > ai, уменьшать Z на 1, пока не будет выполнено условие aj < ai- Затем выполнить обмен aj <-> at. (Поскольку aj+i > > ап, элемент ai является наименьшим элементом, который больше aj и который может законным образом следовать в перестановке за щ .. .aj-i- Перед обменом мы имели aj+i > • • • > ai-i > ai > aj > ai+i > • • • > On', после мы получаем Oj+i > • • • > ai-i > aj > ai> ai+i > > On.) L4. [Обращение aj+i. ..an.] Установить j + 1 и! «- n. Затем, пока к < I, выполнять обмен а^ <-» ai и установки к «— к + 1, I «— I — 1. Вернуться к шагу L1. | Этот алгоритм восходит к Нараяне Пандита (Narayana Pandita), жившему в XIV ве- ке в Индии (см. раздел 7.2.1.7); он также упоминается в предисловии К. Ф. Гин- денбурга (С. F. Hindenburg) к книге Specimen Analyticum de Lineis Curvis Secundi Ordinis X. Ф. Рюдигера (C. F. Rudiger) (Leipzig: 1784), xlvi-xlvii, и неоднократно переоткрывался впоследствии. Пояснения, как он работает, приводятся в скобках на шагах L2 и L3. В общем случае объект, лексикографически следующий за данным объектом щ... ап, получается с помощью следующей трехшаговой процедуры. 1) Найти наибольшее j, такое, что aj может быть увеличено. 2) Увеличить aj на наименьшее допустимое значение. 3) Найти лексикографически наименьший способ расширения новой части ai... aj до полного объекта. Алгоритм L следует этой общей процедуре в случае генерации перестановок, так же как алгоритм 7.2.1.1М следует ей при генерации n-кортежей; позже мы увидим еще множество иных примеров при рассмотрении других комбинаторных шабло- нов. Обратите внимание, что в начале шага L4 > • • • > ап. Следователь- но, первая перестановка, начинающаяся с текущего префикса ai-..aj, имеет вид щ... ajOn... flj+i, и шаг L4 генерирует ее с помощью [(n — J)/2j обменов. На практике шаг L2 находит j = п — 1 в половине случаев, если все элементы различны, поскольку ровно у п!/2 из п! перестановок an~i < ап. Следователь- но, алгоритм L можно ускорить, выделяя этот частный случай без существенно- го усложнения самого алгоритма (см. упр. 1.) Аналогично вероятность того, что
7.2.1.2 ГЕНЕРАЦИЯ ВСЕХ ПЕРЕСТАНОВОК 371 Тин тан дин дан бим бам бом бо— тан тин дин дан бам бим бо бом — тин тан дан дин бим бам бом бо — тан тин дан дин бам бим бо бом — тан дан тин бам дин бо бим бом — ... Тин тан дин да бим бам бом бо. — ДОРОТИ Л. СОЙЕРС (DOROTHY L. SAYERS), Девять портных {The Nine Tailors') (1934) Перестановка десяти десятичных цифр—это просто десятичное число из 10 цифр, в котором все цифры различны. Следовательно, все, что требуется сделать,—это сгенерировать все числа из десяти цифр и выбрать из них те, в которых все цифры различны. Разве не чудесно, что высокоскоростные компьютеры избавляют нас от необходимости думать? Мы просто программируем k + 1 —» к и проверяем цифры к на наличие нежелательных совпадений. Причем так мы получаем все перестановки в словарном порядке! По зрелом размышлении... нам не нужно задумываться о чем-либо ином. — Д. Г. ЛЕМЕР (D. Н. LEHMER) (1957) j < n — t, составляет лишь 1/t!, когда все а различны; следовательно, обычно циклы на шагах L2-L4 очень быстрые. В упр. 6 анализируется время работы в общем случае и демонстрируется, что алгоритм L достаточно эффективен даже при наличии равных элементов, если только в мультимножестве {0,1,02,... ,ап} некоторые элементы не появляются значительно чаще других. Смежные обмены. В разделе 7.2.1.1 мы видели, что коды Грея позволяют эф- фективно генерировать n-кортежи. Те же рассуждения применимы и к генерации перестановок. Простейшим возможным изменением перестановки является обмен соседних элементов, а из главы 5 мы знаем, что любая перестановка может быть упо- рядочена при использовании соответствующей последовательности таких обменов (например, так работает алгоритм пузырьковой сортировки 5.2.2В). Следовательно, можно пойти обратным путем и получить любую требуемую перестановку, если начать с упорядоченного размещения всех элементов и использовать только обмен в подходящих парах смежных элементов. При этом возникает естественный вопрос “Можно ли обойти все перестановки заданного мультимножества, обменивая на каждом шаге местами только два со- седних элемента?” Если можно, то программа обхода всех перестановок в целом зачастую будет проще и быстрее, поскольку будет требовать каждый раз вычисле- ния только одного обмена вместо обработки всего нового массива щ ... а„. Увы, если мультимножество содержит повторяющиеся элементы, такую “грее- образную” последовательность можно найти не всегда. Например, шесть пере- становок мультимножества {1,1,2,2} связаны одна с другой смежными обменами следующим образом: 2112 1122 --- 1212 ZL 2121 --- 2211; (2) 1221 у этого графа нет гамильтонова пути.
372 КОМБИНАТОРНЫЙ поиск 7.2.1.2 Однако большинство приложений работают с перестановками различных эле- ментов, а в этом случае нас ждет хорошая новость: простой алгоритм позволяет сгенерировать все п! перестановок с помощью тг! — 1 смежных обменов. Кроме того, еще один смежный обмен возвращает нас в начальное состояние, так что мы получаем гамильтонов цикл, аналогичный бинарному коду Грея. Идея заключается в том, чтобы взять такую последовательность для {1,..., п — 1} и вставить число п в каждую из перестановок всеми возможными способами. Например, если п = 4, то последовательность (123,132,312,321,231,213) при встав- ке 4 во все четыре возможные позиции приводит к следующим столбцам массива. 1234 1324 3124 3214 2314 2134 1243 1342 3142 3241 2341 2143 (3) 1423 1432 3412 3421 2431 2413 ( ' 4123 4132 4312 4321 4231 4213 Теперь мы получаем искомую последовательность. , читая первый столбец сверху вниз, второй — снизу вверх, третий — сверху вниз, ..., последний — снизу вверх: (1234,1243,1423,4123,4132,1432,1342,1324,3124,3142,..., 2143,2134). В разделе 5.1.1 мы изучали инверсии перестановки, а именно пары элементов (не обязательно смежные), находящиеся не в упорядоченном состоянии. Каждый обмен смежных элементов изменяет общее количество инверсий на ±1. Действительно, если мы рассмотрим так называемую таблицу инверсий а ... Сп из упр. 5.1.1-7, где Cj—количество элементов, лежащих справа от j и меньших j, то мы обнаружим, что перестановки в (3) имеют следующую таблицу инверсий. 0000 0010 0020 0120 ОНО 0100 0001 ООН 0021 0121 0111 0101 (ДА 0002 0012 0022 0122 0112 0102 0003 0013 0023 0123 0113 0103 А если читать эти столбцы попеременно сверху вниз и снизу вверх, как и ранее, то получится в точности рефлексивный код Грея для смешанных оснований (1,2,3,4), как в уравнениях (46)-(51) из раздела 7.2.1.1. Как заметил Э. В. Дейкстра (Е. W. Di- jkstra) [Acta Informatica 6 (1976), 357-359], это свойство выполняется для всех п, что приводит нас к следующей формулировке алгоритма. Алгоритм Р (Простые изменения). Для заданной последовательности -.. ап из п различных элементов этот алгоритм генерирует все их перестановки путем многократных обменов смежных элементов. Алгоритм использует вспомогатель- ный массив ciC2...Cn, который представляет инверсии, как было описано выше, и проходит по всем последовательностям целых чисел, таких, что О < Cj < j для 1 < j < п. (5) Другой массив, о\О2 - оп, управляет направлениями изменений элементов Cj. Pl. [Инициализация.] Установить Cj <— 0 и Oj «— 1 для 1 < j < п. Р2. [Посещение.] Посетить перестановку ai<i2 • • • On- РЗ. [Подготовка к изменению.] Установить j «— п и s «— 0. (Следующие шаги определяют координату j, для которой будет изменяться Cj, сохраняя (5); пере- менная s представляет собой количество индексов к > j, таких, что Ск = к — 1.)
7.2.1.2 ГЕНЕРАЦИЯ ВСЕХ ПЕРЕСТАНОВОК 373 Р4. [Готовность к изменению?] Установить q*— Cj + Oj. Если q < 0, перейти к шагу Р7; если q = j, перейти к шагу Р6. Р5. [Изменение.] Обменять a,j_Cj+s ** aj-q+s- Затем установить Cj «— q и вернуться к шагу Р2. Р6. [Увеличение s.] Завершить работу алгоритма, если j = 1; в противном случае установить s «— s + 1. Р7. [Переключение направления.] Установить Oj «— —Oj, j «— j — 1 и вернуться к шагу Р4. | Эта процедура, которая, очевидно, работает для всех п > 1, появилась в Англии XVII века, когда звонари придумали обычай перезвона множества колоколов во всех возможных перестановках. Алгоритм Р они называли методом простых изме- нений. На рис. 38, (а) показана неупорядоченная специальная последовательность “Кембридж 48” из 48 перестановок 5 колоколов, которая использовалась в нача- ле 1600-х годов, до того как принцип простых изменений позволил получить все 5! = 120 возможных перестановок. Почтенная история алгоритма Р прослеживается до манускрипта Питера Манди (Peter Mundy), написанного около 1653года и хра- нящегося ныне в библиотеке имени Бодлея при Оксфордском университете. Эта история перепечатана Эрнестом Моррисом (Ernest Morris) в The History and Art of Change Ringing (1931), 29-30. Вскоре после этого известная книга Tintinnalogia, анонимно опубликованная в 1668 году (как ныне известно, она была написана Ричар- дом Даквортом (Richard Duckworth) и Фабианом Стедманом (Fabian Stedman)), посвятила первые 60 страниц детальному описанию метода простых изменений, начиная со случая п = 3 и заканчивая произвольно большими п. Последовательность ‘Кембридж 48" многие годы была величайшим Перезвоном, который когда-либо звонил или был изобретен; но теперь ни “48" ни “100" ни “720" или какое-то иное число не может нас сдержать — мы открыли метод изменения звона колоколов до бесконечности. .. .Для четырех колоколов имеется 24 разных варианта перезвона; один из них называется ‘Колебание”, еще три— ‘Особые Колокола"; ‘Колебание" движется, постоянно колеблясь вверх и вниз...; два из ‘Особых колоколов" меняются всякий раз, когда перед ними или после них следует 'Колебание'.' — Р. ДАКВОРТ (R. DUCKWORTH) и Ф. СТЕДМАН (F. STEDMAN), Tintinnalogia (Тинтинналогия, или Искусство колокольного звона) (1668) Британские энтузиасты колокольного звона вскоре придумали более сложные схемы, в которых одновременно меняются местами две или более пар колоколов. Например, они придумали приведенный на рис. 38, (в) шаблон, известный под на- званием “Дубли деда” “наилучший и наиболее искусный перезвон, когда-либо при- думанный для пяти колоколов” [Tintinnalogia, с. 95]. Такие методы, однако, более интересны, чем алгоритм Р, с музыкальной точки зрения, но не с точки зрения вычислительной, так что мы не будем рассматривать их здесь. Заинтересованный читатель может обратиться к книге W. G. Wilson, Change Ringing (1965); см. также А. Т. White, АММ 103 (1996), 771-778. X. Ф. Троттер (Н. F. Trotter) опубликовал первую компьютерную реализацию алгоритма простых изменений в САСМ 5 (1962), 434-435. Это достаточно эффек-
374 КОМБИНАТОРНЫЙ поиск 7.2.1.2 (а) Последовательность “Кембридж 48’.’ (неполностью) (б) Последовательность “Простые изменения’.’ (в) Последовательность “Дубли деда’.’ (г) Последовательность “Дубли Стедмана’.’ Рис. 38. Четыре последовательности, использовавшиеся в Англии XVII века для перестановки пяти разных церковных колоколов. Последовательность (б) соответствует алгоритму Р. тивный алгоритм, особенно если он отлажен, как в упр. 16, поскольку п — 1 из каж- дых п перестановок генерируются без использования шагов Р6 и Р7. У алгоритма же L наилучшие варианты встречаются только в половине случаев. Тот факт, что алгоритм Р выполняет только по одному обмену на посещение, означает, что генерируемые им перестановки попеременно четны и нечетны (см. упр. 5.1.1-13). Следовательно, можно сгенерировать все четные перестановки, про- пуская нечетные. Действительно, таблицы с и о облегчают отслеживание текущего общего количества инверсий, ci + • + сп. Во многих программах необход имо повторно генерировать одни и те же переста- новки, и в таких случаях не требуется каждый раз проходить все шаги алгоритма Р. Можно просто подготовить список подходящих переходов, используя описанный далее метод. Алгоритм Т {Переходы простых изменений). Этот алгоритм вычисляет таблицу t[l], t[2], ..., t[n! — 1], такую, что действия алгоритма Р эквивалентны последова- тельным изменениям <-» at[k]+i для 1 < к < nl. Считаем, что п > 2. Т1. [Инициализация.] Установить N «— n!, d «— N/2, t[d] «— 1 и m «— 2. Т2. [Цикл по т.] Завершить работу алгоритма, установить m «— т+1, d «— d/m и к <— 0. п!/т!.) если т = п. В противном случае (Мы поддерживаем условие d = ТЗ. [Колебание вниз.] Установить fc «— к + d и j t- т — 1. Затем, пока j > 0, устанавливать t[fc] «— j, к <— к + d и j «— j — 1. Т4. [Смещение.] Установить t[fc] «— t[fc] +1. Т5. [Колебание вверх.] Установить к «— к + d, j «— 1. Пока j < m, устанавливать t[fc] «— j, к «— к + d, j «— j + 1. Затем вернуться к шагу ТЗ, если к < N, в противном случае вернуться к шагу Т2. |
7.2.1.2 ГЕНЕРАЦИЯ ВСЕХ ПЕРЕСТАНОВОК 375 Например, если п = 4, мы получаем таблицу (t[l], t[2],..., t[23]) — (3,2,1,3,1,2,3,1, 3,2,1,3,1,2,3,1,3,2,1,3,1,2,3). Буквометики. Давайте теперь рассмотрим простую головоломку, в решении ко- торой полезны перестановки: какое корректное суммирование зашифровано в при- веденном далее примере, где каждая буква означает какую-то свою десятичную цифру, не совпадающую с другими? SEND + MORE (6) MONEY [Н. Е. Dudeney, Strand 68 (1924), 97, 214.] Такие головоломки часто называют буквометиками (alphametics) с легкой руки Д. А. X. Хантера (J. А. Н. Hunter) [Globe and Maj] (Toronto: 27 October 1955), 27]; имеется еще одно название, предло- женное С. Ватриквантом (S. Vatriquant) [Sphinx 1 (May 1931), 50]: “криптарифм” (“cryptarithm”). Классический буквометик (6) легко решить вручную (см. упр. 21). Но предпо- ложим, что необходимо решить большое количество сложных буквометиков, часть из которых неразрешима, а другие могут иметь десятки решений. В таком случае можно сэкономить время, написав программу, перебирающую все подстановки цифр и ищущие те из них, которые дают корректную сумму. [Такая программа была опубликована Джоном Бейдлером John Beidler в Creative Computing 4,6 (November- December 1978), 110-113.] Мы можем не ограничивать себя и рассмотреть ад дитивные буквометики в об- щем случае, т. е. не только простые суммы наподобие (6), но и примеры посложнее, наподобие VIOLIN+VIOLIN+VIOLA = TRIO+SONATA. Эта головоломка эквивалентна следующей: 2(VI0LIN) + VIOLA — TRIO — SONATA = 0, / (7) где фигурирует сумма членов с целочисленными коэффициентами, которая в итоге должна быть равна нулю при верной подстановке различных десятичных цифр вместо различных букв. Каждая буква в такой задаче имеет “сигнатуру” получаю- щуюся путем подстановки 1 вместо данной буквы и 0 вместо других букв; например, сигнатура для I в (7) имеет вид 2(010010) + 01000 - 0010 - 000000, а именно 21010. Если произвольным образом присвоить индексы (1,2,..., 10) бук- вам (V, 1,0, L, N, A, T,R, S, X), то соответствующими сигнатурами для (7) будут si = 210000, s2 = 21010, s3 = -7901, s4 = 210, s5 = -998, se = -100, s7 = -1010, s8 = -100, s9 = -100000, sw = 0. (Добавлена дополнительная буква X, поскольку нам требуется набор из десяти букв.) Теперь задача заключается в поиске всех перестановок щ ...аю множества {0,1, ..., 9}, таких, что 10 а-s = ^ajSj = 0. (9) >=i
376 КОМБИНАТОРНЫЙ поиск 7.2.1.2 Обычно имеется одно побочное условие, заключающееся в том, что в буквометике числа не могут начинаться с нуля. Например, суммы 7316 5731 6524 2817 + 0823 и + 0647 и + 0735 и + 0368 08139 06378 07259 03185 и еще двадцать подобных, несмотря на арифметическую корректность, решениями буквометика (6) не являются. В общем случае существует множество F первых букв, такое, что должно выполняться условие aj 0 для всех j € F\ (10) множество F, соответствующее (7) и (8), имеет вид {1,7,9}. Одним из способов работы с аддитивными буквометиками является использо- вание алгоритма Т для подготовки таблицы из 10! — 1 переходов t[fc]. Затем для каждой задачи, определенной последовательностью сигнатур (si,..., вщ) и множес- твом первых букв F, можно выполнить исчерпывающий поиск решения следующим образом. А1. [Инициализация.] Установить аю2 - • • ою «— 01.. .9, v «— 52]=i(j — l)sj, к *— 1 И 6j «— Sj+1 — Sj для 1 < j < 10. А2. [Проверка.] Если v = 0 и если выполняется (10), вывести решение щ ... ащ. АЗ. [Обмен.] Завершить работу алгоритма, если к = 10!. В противном случае установить j «— t[fc], v «— v — (aj+i — aj)6j, aj+i aj, к «— к + 1 и вернуться к шагу А2. | Шаг АЗ оправдывается тем фактом, что обмен aj с aj+i просто уменьшает а - s на (aj+i — aj)(sj+i — Sj). Несмотря на то что 10! равно достаточно большому числу 3628800, операции на шаге АЗ столь просты, что на современных компьютерах работа выполняется за доли секунды. Буквометик называется чистым, если имеет единственное решение. К сожале- нию, буквометик (7) не является чистым. Перестановки 1764802539 и 3546281970 удовлетворяют условиям (9) и (10), следовательно, имеется два решения: 176478 + 176478 + 17640 = 2576 + 368020 354652 + 354652 + 35468 = 1954 + 742818. Кроме того, в (8) se = s8, так что еще два решения можно получить путем обмена цифр, назначенных буквам А и R. С другой стороны, буквометик (6) является чистым, хотя данный метод нахо- дит две различные решающие его перестановки. Дело в том, что буквометик (6) включает только восемь различных букв, следовательно, нам приходится исполь- зовать две фиктивные сигнатуры sg = «ю = 0. В общем случае буквометик с m различными цифрами включает 10 — m фиктивных сигнатур sm+i = • • • = «ю = 0, и каждое решение будет найдено (10 —т)! раз, если только не потребовать, скажем, выполнения условия am+i < • • • < flio-
7.2.1.2 ГЕНЕРАЦИЯ ВСЕХ ПЕРЕСТАНОВОК 377 Общая структура. Для генерации перестановок различных объектов было пред- ложено очень много алгоритмов, и наилучший способ понять их — применение муль- типликативных свойств перестановок, которые мы изучали в разделе 1.3.3. С этой целью мы слегка изменим систему обозначений, используя индексирование с нуля и запись aoai... ап-1 для перестановок {0,1,..., п — 1} вместо записи а\й2 • • • ап для перестановок {1,2,...,п}. Что более важно, мы будем рассматривать схемы для генерации перестановок, в которых основная работа будет выполняться слева, так что все перестановки {0,1,..., к — 1} будут генерироваться на первых к\ шагах, 1 < к < п. Например, одной такой схемой для п = 4 является 0123,1023,0213,2013,1203,2103,0132,1032,0312,3012,1302,3102, 0231,2031,0321,3021,2301,3201,1230,2130,1320,3120,2310,3210, (11) называемая “обратный солексикографический (солексный) порядок” поскольку, ес- ли обратить строки справа налево, мы получим 3210, 3201, 3120, ..., 0123, т. е. обратный лексикографический порядок. Еще один способ представления (11) за- ключается в рассмотрении элементов в виде (п—ап)... где 0-10,2 .ап лексикографически проходит по всем перестановкам {1,2,...,п}. Вспомним из раздела 1.3.3, что перестановка наподобие а = 250143 может быть записана либо в двустрочном виде /012345Х а~ \250143/’ либо в более компактном циклическом виде а = (0 2)(1 5 3), который означает, что в а имеет место 0 •—>2, 1 i-» 5, 2 1—>0, 3 н> 1, 4 •—> 4и 5 н>3; цикл из одного элемента типа ‘(4)’ можно не указывать. Поскольку 4 представляет собой фиксированную точку данной перестановки, мы говорим, что “а фиксирует 4” Мы также записываем 0a = 2, la = 5 и т. д., говоря, что ja является “образом j при перестановке а” Произведение перестановок наподобие а, умноженной на fi, где fi = 543210, легко записать либо в двустрочном виде /012345Х /012345Х _ /012345ч /250143Х _ /012345Х а^~ \250143/\543210/ “ \25014зД305412/ “ V305412/’ либо в циклическом afi = (0 2)(1 5 3) • (0 5)(1 4)(2 3) = (0 3 4 1)(2 5). Обратите внимание, что образом 1 при перестановке afi является l(a/3) — (la) fi = 5/3 = 0, и т. д. Предупреждение: почти в половине всех книг о перестановках их умножают иначе (справа налево), полагая, что afi означает, что fi применяется до а. Причина этого в том, что традиционная функциональная запись, в которой записывается а(1) = 5, естественным образом приводит к мысли, что afi(l) должно означать а(/3(1)) = а(4) = 4. Однако в данной книге используется иная философия, и перестановки в ней умножаются слева направо. Порядок умножения необходимо особенно внимательно учитывать, когда пере- становки представлены массивами чисел. Например, если “применить” отражение fi = 543210 к перестановке а = 250143, то результат 341052 представляет собой
378 КОМБИНАТОРНЫЙ поиск 7.2.1.2 не а/3, а /За. В общем случае операция замены перестановки а = оощ ... ап_1 некоторым переупорядочением аорацз.. -a(n_i)p дает к н-> акр = kfia. Перестановка позиции с помощью /3 соответствует умножению слева (предумножению, premulti- plication) на fi, заменяющему а на /За; перестановка значений с помощью /3 соответ- ствует умножению справа (постумножению, postmultiplication) на /3, заменяющему а на а/3. Таким образом, например, генератор перестановок, который обменивает ai <->О2, умножает слева текущую перестановку на (1 2) и умножает ее справа на (ai а2). Следуя работе Эвариста Галуа (Evariste Galois) 1830 года, будем говорить, что непустое множество перестановок G образует группу, если оно замкнуто относитель- но операции умножения, т. е. если произведение afi принадлежит G тогда, когда а и fi являются элементами G [см. Ecrits et Memoires Mathematiques d’Evariste Galois (Paris: 1962), 47]. Рассмотрим, например, четырехмерный куб, представленный в виде тора размером 4x4 0 13 2 4 5 7 6 с d f е 8 9 b a (12) как в упр. 7.2.1.1-17, и пусть G представляет собой множество всех перестановок вершин {0,1,..., f}, сохраняющих отношение смежности: перестановка а находится в G тогда и только тогда, когда из и — v в четырехмерном кубе вытекает иа — иа. (Здесь для обозначения целых чисел (0,1,..., 15) мы используем шестнадцатерич- ные цифры (0,1,..., f). Метки в (12) выбраны так, что и — v тогда и только тогда, когда и и и отличаются на одну битовую позицию.) Это множество G, очевидно, является группой, а его элементы называются симметриями или “аутоморфизмами” четырехмерного куба. Группы перестановок G удобно представлять в компьютере с помощью таблицы Симса, предложенной Чарльзом К. Симсом (Charles С. Sims) [Computational Meth- ods in Abstract Algebra (Oxford: Pergamon, 1970), 169-183], которая представляет собой семейство подмножеств Si, S%, ... множества G, обладающих следующим свойством: Sk содержит ровно одну перестановку Okj, которая отображает к н-> j и фиксирует значения всех элементов, больших к, если такая перестановка содер- жится в G. Перестановка Окк является тождественной перестановкой, которая всегда имеется в G; когда 0 < j < к, для роли Okj может быть выбрана любая подходящая перестановка. Главным преимуществом таблицы Симса является то, что она позволяет удобно представлять всю группу в целом. Лемма S. Пусть Si, S2, ..., Sn-i —таблица Симса для группы G перестановок {0,1,..., п — 1}. Тогда каждый элемент а из G имеет единственное представление а = oio2 .. .on-i, где Ok € Sk для 1 < к < п. (13) Доказательство. Если а имеет такое представление и если <rn-i представляет собой перестановку ё Sn-i, то а отображает п — 1 н-> j, поскольку все элементы Si U • - • U Sn-2 фиксируют значение п — 1. И обратно: если а отображает п — 1>—> 3, то а = a'o(n_i)j, где а' = «ст(п-1)>
7.2.1.2 ГЕНЕРАЦИЯ ВСЕХ ПЕРЕСТАНОВОК 379 является перестановкой G, которая фиксирует п — 1. (Как и в разделе 1.3.3, ст- обозначает инверсию ст.) Множество G' всех таких перестановок является группой, a Si, ..., Sn_2 — таблицей Симса для G'; таким образом, результат следует по индукции по п. | Например, вычисления показывают, что одной возможной таблицей Симса для аутоморфизма группы четырехмерного куба является St = {(), (01)(23)(45)(67)(89)(ab)(cd)(ef), ..., (0f)(le)(2d)(3c)(4b)(5a)(69)(78)}; Se = {(), (12)(56)(9a)(de), (14)(36)(9c)(be), (18)(3a)(5c)(7e)}; Sd = {(), (24)(35)(ac)(bd), (28)(39)(6c)(7d)}; (14) Sc = {()}; Sb = {(), (48)(59)(6a)(7b)}; Sa = S9 = • • • = Si = {()}; здесь Sf содержит 16 перестановок <jfj для 0 < j < 15, которые соответственно отображают i i—> г ф (15 — j) для 0 < i < 15. Множество Sa содержит только четыре перестановки, поскольку аутоморфизм, который фиксирует f, должен отображать е в соседа f; таким образом, образом е должно быть либо е, либо d, либо Ь, либо 7. Множество Sc содержит только тождественную перестановку, поскольку аутоморфизм, который фиксирует f, е и d, должен фиксировать и с. У большинства групп Sk = {()} для всех малых значений к, как в данном примере; следовательно, таблица Симса обычно нуждается в наличии только достаточно малого количества перестановок, хотя сама по себе группа может быть весьма большой. Представление Симса (13) упрощает проверку наличия данной перестановки а в группе G: сначала мы определяем ct„_i = CT(„_i)j, где а отображает п — 1 •—> j, и полагаем а' = аа~_1; затем мы определяем ст„_2 = Ст(„_2)^<, где о! отображает п — 2 I—> j', и полагаем а" = а'ст~_2; и т. д. Если на каком-то этапе требуемая перестановка отсутствует в St, то исходная перестановка а не принадлежит G. В случае (14) этот процесс должен привести а к тождественной перестановке после обнаружения о’с и сть. Пусть, например, а является перестановкой (14)(28)(3c)(69)(7d)(be), которая соответствует транспозиции (12) относительно главной диагонали {0,5, f,a}. По- скольку а фиксирует f, ст* будет тождественной перестановкой (), а о! = а. Тогда ста является членом Sa, который отображает е н-> Ь, а именно (14)(36)(9с)(be), и находим о!' = (28)(39)(6c)(7d). Эта перестановка принадлежит Sd, так что а действительно является аутоморфизмом четырехмерного куба. И наоборот, (13) также упрощает генерацию всех элементов соответствующей группы. Мы просто проходим по всем перестановкам вида СТ(1, С1)ст(2, С2) . - . СТ(П - 1, Cn-i), где <т(к,Ск) является (с& + 1)-м элементом Sjt для 0 < с& < s* = |Sjt| и 1 < к < п, с помощью любого алгоритма из раздела 7.2.1.1, который проходит по всем (п — 1)- кортежам (щ,...,Cn-i) для соответствующих оснований (si,..., sn-i)-
380 КОМБИНАТОРНЫЙ ПОИСК 7.2.1.2 Применение общей структуры. Основной интерес вызывает группа всех пе- рестановок {0,1,..., п — 1}, а в этом случае каждое множество Sk таблицы Симса будет содержать к + 1 элементов {а(к,О),а(к, 1),... ,<т(к, к)}, где а(к,0) является тождественной перестановкой, а другие отображают к на значения {0,..., к — 1} в некотором порядке. (Перестановка а(к, j) необязательно должна быть такой же, как и и обычно отличается от нее.) Каждая такая таблица Симса приводит к генератору перестановок согласно следующей схеме. Алгоритм G (Обобщенный генератор перестановок). Этот алгоритм генерирует для заданной таблицы Симса (Si, S2, •, Sn-i), где каждое множество Sk содержит к + 1 элементов a(k,j), как было описано выше, все перестановки ao^i -On-i для {0,1,..., п — 1}, используя вспомогательную управляющую таблицу сп ... С2С1. G1. [Инициализация.] Установить aj ♦— j и cj+i ♦— 0 для 0 < j < п. G2. [Посещение.] (В этот момент число в системе счисления со смешанным основа- нием з2’ 21] представляет собой количество перестановок, посещенных до сих пор.) Посетить перестановку aoai... an-i- G3. [Добавление 1 к Сп.. .C2C1.] Установить к *— 1. Пока с* = к, устанавливать Ск *—Оик*—к + 1. Завершить работу алгоритма, если к = п; в противном случае установить Ск *— Ск + 1- G4. [Перестановка.] Применить перестановку т(к,Ск)а>(к — 1)_ к ао«1 • ..an-i, как поясняется ниже, и вернуться к шагу G2. | Применение перестановки тг к ао®1 • • -оп-1 означает замену aj на aJ7r для 0 < j < п; это соответствует поясненному ранее умножению слева на тг. Определим r(k,j) = a(k,j)a(k,j - I)- для 1 < j < к; (15) uj(k) = <т(1,1).. .<т(к, к). (16) Тогда шаги G3 и G4 поддерживают следующее свойство: ао«1 - «п-i является перестановкой <т(1,ci)<r(2,С2)...а(п — 1,cn_i), (17) и лемма S доказывает, что каждая перестановка посещается ровно один раз. Дерево на рис. 39 иллюстрирует алгоритм G в случае ti = 4. Согласно (17) каж- дая перестановка ао«1«2«з множества {0,1,2,3} соответствует контрольной строке из трех цифр, C3C2C1, где 0 < с3 < 3, 0 < сг < 2 и 0 < q <1. Некоторые узлы дерева помечены только одной цифрой, с3; они соответствуют перестановкам <т(3, с3) используемой таблицы Симса. Другие узлы, помеченные двумя цифрами, C3C2, соответствуют перестановкам а(2,с2)а(3,сз). Толстая линия соединяет узел с3
7.2.1.2 ГЕНЕРАЦИЯ ВСЕХ ПЕРЕСТАНОВОК 381 с узлом С3О, а узел C3C2 с узлом C3C2O, поскольку <т(2,0) и <т(1,0) представляют собой тождественные перестановки и данные узлы, по сути, эквивалентны. Прибавление 1 к числу со смешанным основанием С3С2С1 на шаге G3 соответствует перемещению от одного узла на рис. 39 к следующему за ним в прямом порядке обхода, а преобра- зование на шаге G4 соответственно изменяет перестановки. Например, когда C3C2C1 меняется со 121 на 200, шаг G4 умножает слева текущую перестановку на т(3,2) ш(2)" = т(3,2) ст(2,2)" ст( 1,1)"; умножение слева на <т(1,1)_ дает переход от узла 121 к узлу 12, умножение сле- ва на <т(2,2)_ дает переход от узла 12 к узлу 1, а умножение слева на т(3,2) = <т(3,2)<т(3,1)~ дает переход от узла 1 к узлу 2 = 200, который является преем- ником узла 121 в прямом порядке обхода. Иначе говоря, умножение слева на т(3,2)ai(2)-—это именно то, что требуется для изменения <т(1,1)<т(2,2)<т(3,1) на <т(1,0)<т(2,0)<7(3,2), с сохранением (17). Алгоритм G определяет огромное количество генераторов перестановок (см. упр. 37), так что не удивительно, что в литературе встречается множество его частных случаев. Конечно, одни из его вариантов более эффективны, чем другие, и хотелось бы найти примеры, когда выполняемые операции особенно эффективны на используемом компьютере. Можно, например, получить перестановки в обратном солексном порядке как частный случай алгоритма G (см. (11)), делая а(к, j) (j + 1)-циклом СТ(М) = (fc-J k-j+1 ... к). (18) Дело в том, что а(к, j) должна быть перестановкой, которая соответствует cn .. .ci в обратном солексном порядке, когда с& = j и с, = 0 для г к, и эта пере- становка aoai. ..an-i имеет вид 01... (к—j—1)(к—J+1)... (k)(k—j)(k+l)... (n—1). Например, когда п = 8 и сп... ci = 00030000, соответствующая перестановка в обратном солексном порядке—01345267, или (2345) в циклическом виде. Когда <r(k,j) задается формулой (18), уравнения (15) и (16) приводят к формулам r(k,j) = (k—j к); (19) ш(к) = (01)(012)... (01 ... fc) = (0А)(1 A—l)(2fc—2)... = ф(к)-, (20) здесь ф(к)— “(к + 1)-переворот’,’ который изменяет ао .. .а^ на а*.. .ао- В этом случае ш(А;) оказывается равной uj(k)~, поскольку ф(к)2 = (). Уравнения (19) и (20) неявно присутствуют за кулисами алгоритма L и его эквивалента в обратном солексном порядке (упр. 2), где шаг L3, по сути, применяет транспозицию, и шаг L4 — переворот. В действительности сначала шаг G4 выпол- няет переворот; но тождество (k—j к)ф(к - 1) = ф(к - l)(j-l к) (21) показывает, что переворот, за которым следует транспозиция, эквивалентен (дру- гой) транспозиции, за которой следует переворот. Действительно, уравнение (21) является частным случаем важного тождества тг- 0'1 h 3t) тг = (jin j27r ... jt7r), (22)
382 КОМБИНАТОРНЫЙ ПОИСК 7.2.1.2 которое справедливо для любой перестановки тг и любого t-цикла (ji j? jt)- В левой части (22) мы имеем, например, j’itt i—»ji j2 j27t в соответствии с цик- лом в правой части. Следовательно, если а и тг представляют собой произвольные перестановки, то перестановка 7г_атг (называющаяся сопряжением а по отношению к тг) имеет точно такую же циклическую структуру, как и а; мы просто заменяем каждый элемент j в каждом цикле на jir. Еще один важный частный случай алгоритма G рассмотрен Р. Д. Орд-Смитом (R. J. Ord-Smith) [САСМ 10 (1967), 452; 12 (1969), 638; см. также Comp. J. 14 (1971), 136-139], алгоритм которого получается установкой a(k,j) = (k ... 10)< (23) Теперь из (15) ясно, что r(k,j) = (k ... 10); (24) и еще раз мы получаем ш(к) = (0 fc)(1 fc—1)(2 к-2)... = ф(к), (25) поскольку перестановка а(к, к) = (0 1 ... А:) та же, что и ранее. Интересное в этом методе то, что перестановка, необходимая на шаге G4, а именно т(к,Ck)w(k — 1)_, не зависит от Cfc: 7(fc,j)w(fc - I)" = (к ... 1 О)ф(к - I)" = ф(к). (26) Таким образом, алгоритм Орд-Смита является частным случаем алгоритма G, в ко- тором на шаге G4 просто выполняются обмены ао ак, ai ajt-i, • • •! эта операция r(k,j)u>(k - 1) = обычно очень быстрая, поскольку к мало, и это экономит часть работы алгоритма L. (См. упр. 38 и ссылку на Г. С. Клюгеля (G. S. Kliigel) в разделе 7.2.1.7.) Можно добиться большего, поступая так, чтобы на шаге G4 каждый раз тре- бовалось выполнять только одну транспозицию, примерно как в алгоритме Р, но необязательно со смежными элементами. Возможно множество таких схем. Веро- ятно, наилучшим является следующий способ—положить (к 0), если к четно, , , . " I. (27) (к j—1), если к нечетно, как предложено Б. Р. Хипом (В. R. Heap) [Comp. J. 6 (1963), 293-294]. Обратите внимание, что в методе Хипа всегда выполняется транспозиция ак ао, за исклю- чением к = 3, 5, ...; а значение к в 5 шагах из 6 равно либо 1, либо 2. В упр. 40 доказывается, что метод Хипа действительно генерирует все перестановки. Пропуск нежелательных блоков. Одним из важных преимуществ алгоритма G является то, что, прежде чем начать работу с ак, он проходит по всем перестановкам ао .. .ajt-i; затем перед очередным изменением ак выполняются другие kl циклов, и т. д. Следовательно, если в некоторый произвольный момент мы дойдем до последних элементов ак .an~i, которые не представляют важности для решаемой задачи, можно быстро пропустить все перестановки, которые заканчиваются не интересующими нас суффиксами. Точнее говоря, можно заменить шаг G2 следую- щими под шагами.
7.2.1.2 ГЕНЕРАЦИЯ ВСЕХ ПЕРЕСТАНОВОК 383 G2.0. [Приемлемо?] Если ak-..an-i—неприемлемый суффикс, перейти к шагу G2.1. В противном случае установить к ♦— к — 1. Затем, если к > 0, повторить данный шаг; если к = 0, перейти к шагу G2.2. G2.1. [Пропуск суффикса.] Пока с*, = к, применять а(к, к)~ к ао-..On-i и уста- навливать Ск *— 0, к *— к + 1. Завершить работу алгоритма, если к = п\ в противном случае установить Ск *— Ск + 1, применить т(к, Ск) к од... ап-1 и вернуться к шагу G2.0. G2.2. [Посещение.] Посетить перестановку <ю.. - an-i- I Шаг G1 должен также устанавливать к ♦— п — 1. Обратите внимание на то, что на новых шагах сохраняется выполнение условия (17). Алгоритм становится более сложным, поскольку теперь в дополнение к перестановкам т(к, j)w(k —1)_, появля- ющимся на шаге G4, требуется знать перестановки т(к, j) и а(к, к). Однако дополни- тельные усложнения часто стоят затрачиваемых усилий, поскольку получающаяся программа может работать значительно быстрее. Рис. 40. Нежелательные ветви с дерева на рис. 39 можно обрезать, если соответствующим образом расширить алгоритм G. Например, на рис. 40 показано, что произойдет с деревом с рис. 39, если рассмат- ривать как неприемлемые суффиксы 00010203, соответствующие узлам 00, 11, 121 и 2. (Каждый суффикс ajt... an_i перестановки ao... an-i соответствует префиксу Сп.. .Ск управляющей строки сп... ci, поскольку перестановки <т(1, ci)... а(к — 1, Cfc-i) не влияют на а* an-i-) На шаге G2.1 выполняются умножение слева на r(k,j) для перехода от узла cn_i... Ck+i(j—1) к его правому брату cn_i ...Ck+ij и умножение слева на а(к,к)~ для перехода от узла cn_i ...Ck+ik к его родите- лю Сп-i... Ck+i. Таким образом, чтобы перейти от отвергнутого префикса 121 к его преемнику в прямом порядке обхода, алгоритм выполняет умножение слева на сг(1,1)_, сг(2,2)_ и т(3,2), тем самым переходя от узла 121 к узлу 12 и далее к узлам 1 и 2. (Это в определенной степени исключительный случай, поскольку префикс с к = 1 отвергается, только если нам не нужно посещать единственную перестановку ао ai... an-i, имеющую суффикс ai... an-i ) После отвержения узла 2 т(3,3) перемещает нас к узлу 3, и т. д. Заметим, кстати, что пропуск суффикса ак an~i в этом расширении алгорит- ма G, по сути, представляет собой то же самое, что и пропуск префикса <ц ... а, в наших исходных обозначениях, если вернуться к идее генерации перестановок ai... ап для {1,..., п} и выполнять основную часть работы с правого конца. Наши исходные обозначения соответствуют выбору сначала ai, затем аг, затем ап; обозначения в алгоритме G, по сути, сначала выбирает an-i, затем an-2, • •, за- тем ао- Соглашения алгоритма G могут показаться обратными, но они существенно упрощают формулы для работы с таблицей Симса. Хороший программист быстро научится без труда переходить от одной точки зрения к другой.
384 КОМБИНАТОРНЫЙ ПОИСК 7.2.1.2 Эти идеи можно применить и к буквометикам, поскольку, например, ясно, что большая часть вариантов выбора значений для букв D, Е и Y делают невозможным равенство суммы SEND и MORE значению MONEY: в этой задаче требуется выполнение условия (D + Е — Y) mod 10 = 0- Следовательно, множество перестановок может вообще не рассматриваться. В общем случае, если г* — максимальная степень 10, которая делит значение сигнатуры Sfc, можно сортировать буквы и присваивать коды {0,1,..., 9} так, чтобы выполнялось условие го > г\ > > гд. Например, для решения задачи (7) можно использовать (0,1,..., 9) соответственно для (X, S, V, A, R, I, L, Т, 0, N), получая сигнатуры во = 0, si = —100000, S2 = 210000, S3 = —100, «4 = —100, s5 = 21010, s6 = 210, s7 = -1010, s8 = -7901, s9 = -998; следовательно, (го,..., r9) = (00,5,4,2,2,1,1,1,0,0). Теперь, если обратиться к ша- гу G2.0 за значением к с условием rjt-i / г*, то можно сказать, что суффикс а* ... а9 неприемлем, если только OfcSfc-l-Ha9s9 не кратно 10rfc-1. Кроме того, (10) говорит нам, что суффикс ... а9 неприемлем, если ajt = 0 и к G F; множество первых букв F теперь имеет вид {1,2,7}. В нашем предыдущем подходе к буквометикам с шагами А1-АЗ, изложенном выше, использовался метод грубой силы для прохода по всем 10! вариантам. Он работает весьма быстро, так как метод транспозиции смежных элементов позволяет обойтись только шестью обращениями к памяти на одну перестановку; но 10! все еще равно 3628800, так что общая стоимость процесса—почти 22 миллиона обращений к памяти независимо от решаемого буквометика. Расширение же алгоритма G на основе метода Хипа с только что описанными пропусками находит все четыре решения (7) ценой всего лишь 128 тысяч обращений к памяти! Таким образом, технология пропуска суффиксов работает в 170 раз быстрее предыдущего метода, слепо перебирающего все варианты. Большинство из 128 тысяч обращений к памяти в новом подходе тратятся на применение т(к, cjt) на шаге G2.1. Другие обращения к памяти связаны с применени- ем на этом шаге <т{к, к)~,тт требуется 7812 раз, в то время как а~ требуется только 2162 раза. Причину легко понять из рис. 40, поскольку “сокращенное перемещение” т(к,Ск)ш(к — 1)_ на шаге G4 почти никогда не применяется; в данном случае оно используется только четыре раза, по одному для каждого решения. Таким образом, обход дерева в прямом порядке выполняется почти полностью за т шагов вправо и <т~ шагов вверх. В задачах наподобие приведенной, где посещается очень мало перестановок, доминируют т шагов, поскольку каждый шаг <т(к, к)~ предваряется к шагами т(к, 1), т(к, 2), ..., т(к, к). Благодаря этому анализу ясно, что метод Хипа—который идет на все, чтобы оптимизировать перестановки т(к, j)aj(k — 1)_, так что каждый переход на шаге G4 представляет собой простую транспозицию— не слишком хорош для расширенного алгоритма G, если только на шаге G2.0 не отвергается относительно небольшое количество суффиксов. Более простой обратный солексный порядок, для которо- го сама r(k,j) всегда является простой транспозицией, теперь оказывается более привлекательным (см. (19)). Действительно, алгоритм G с обратным солексным порядком решает буквометик (7) ценой лишь 97 тысяч обращений к памяти.
7.2.1.2 ГЕНЕРАЦИЯ ВСЕХ ПЕРЕСТАНОВОК 385 Подобные результаты можно получить и для других буквометиков. Например, если применить расширенный алгоритм G к буквометикам из упр. 24, пп. (а)-(з), то вычисления потребуют соответственно тысяч обращений к памяти при исполь- зовании (551, 110, 14, 8, 350, 84, 153, 1598) метода Хипа; , (429, 84, 10, 5, 256, 63, 117, 1189) обратного солексного порядка. ' “Коэффициент ускорения” для обратного солексного порядка в данных примерах по сравнению с методом грубой силы из алгоритма Т находится в диапазоне от 18 в случае (з) до 4200 в случае (г) и составляет в среднем 80; в случае метода Хипа среднее ускорение—около 60. Однако из алгоритма L известно, что лексикографический порядок легко об- рабатывается без усложнения управляющей таблицы Сп... ci, используемой алго- ритмом G. А более внимательное изучение алгоритма L показывает, что можно улучшить его поведение при частых пропусках перестановок, используя связанный список вместо последовательного массива. Улучшенный алгоритм хорошо подходит для широкого спектра алгоритмов генерации ограниченных классов перестановок. Алгоритм X (Лексикографические перестановки с ограниченными префиксами). Этот алгоритм генерирует все перестановки aia2-..an для {1,2,...,п}, которые удовлетворяют заданной последовательности проверок ^1(®1)j ^2(^1 1^2)1 •••, ^n(oi,в2,. - -,ап), посещая их в лексикографическом порядке. Алгоритм использует вспомогательную таблицу связей lo, h, • • ,1п для поддержания циклического списка неиспользуемых элементов, так что если текущими доступными элементами являются {l,...,n} \ {ai,...,afc} = {bi,...,bn_fc}, где bi < < bn_fc, (29) то мы имеем /о = 5i, ibb=5j+i для 1 < j < п - к и /ь„_*=0. (30) Он также использует вспомогательную таблицу щ ... ип для отката операций, вы- полненных над массивом I. XI. [Инициализация.] Установить Ik <— к + 1 для 0<к<пн1п<- 0. Затем установить к «— 1. Х2. [Вход на уровень /с.] Установить р «— 0, q *— lo- ХЗ. [Проверка ai.. .а*,.] Установить а* «— q. Если tk(ai,... , а*) ложно, перейти к шагу Х5. В противном случае при к = п посетить ai... ап и перейти к ша- гу Х6. Х4. [Увеличение А.] Установить Uk *— р, 1Р *— lg, к ♦— к + 1 и вернуться к шагу Х2. Х5. [Увеличение а*;.] Установить р «— q, q «— 1Р. Если q / 0, вернуться к шагу ХЗ. Х6. [Уменьшение А:.] Установить к ♦— к — 1 и завершить работу алгоритма, если к = 0. В противном случае установить р «— Uk, q ♦— Ofc, lp «— q и перейти к шагу Х5. | Этот элегантный алгоритм основан на идее, принадлежащей М. Ч. Эру (М. С. Ег) [Comp. J. 30 (1987), 282]. Мы можем применить его для решения буквометиков, 13 Зак. 3331
386 КОМБИНАТОРНЫЙ ПОИСК 7.2.1.2 слегка изменив систему обозначений, получая перестановки ао ...ад для {0,...,9} и позволяя lio играть прежнюю роль 1д. Получающийся в результате алгоритм требует только 49 тысяч обращений к памяти для решения буквометика (7), а бук- вометики из упр. 24, (а)-(з) он решает с использованием (248, 38, 4, 3, 122, 30, 55, 553), (31) тысяч обращений к памяти соответственно. Таким образом, он работает примерно в 165 раз быстрее алгоритма, основанного на грубой силе. Еще один способ применения алгоритма X для решения буквометиков зачастую оказывается еще более быстрым (см. упр. 49). Рис. 41. Дерево, которое неявно обходит алгоритм X для п = 4, если посеща- ются все перестановки, за исключением начинающихся с 132, 14, 2, 314 или 4312. * Дуальные методы. Если Si, ..., Sn-i представляют собой таблицу Симса для группы перестановок G, то, как известно из леммы S, каждый элемент G можно единственным способом выразить в виде произведения <л ...an-i, где а к G см. (13). В упр. 50 показано, что каждый элемент а также может быть выражен единственным способом в дуальном виде о = а1 , где <Tfc е Sk для 1 < к < п, (32) и этот факт приводит к другому большому семейству генераторов перестановок. В частности, когда G является группой всех п! перестановок, каждая перестановка может быть записана в виде о(п — 1, Сп—1)— ...<т(2, с2)—<т(1, ci)-, (33) где 0 < Ск < к для 1 < к < п, а перестановки о(к, j) —те же, что и в алгоритме G. Однако теперь мы хотим варьировать cn-i более быстро, a ci —менее быстро, так что получается алгоритм иного типа. Алгоритм Н {Дуальный генератор перестановок). Данный алгоритм для задан- ной таблицы Симса, как и в алгоритме G, генерирует все перестановки ад - ап-1 множества {0,..., п — 1}, используя вспомогательную таблицу сд - - Cn-i. Hl. [Инициализация.] Установить aj «— j и Cj ♦— 0 для 0 < j < п. Н2. [Посещение.] (В этот момент число со смешанным основанием [ j1’ 32’ Спп *] представляет собой количество посещенных до сих пор перестановок.) Посетить перестановку aoai... an-i. НЗ. [Прибавление 1 к cgci... cn-i ] Установить к «— п — 1. Если Ск = к, установить Ск *— 0, к *— к— 1 и повторять эти действия до тех пор, пока не будет выполнено
7.2.1.2 ГЕНЕРАЦИЯ ВСЕХ ПЕРЕСТАНОВОК 387 условие к = 0 или с* < к. Завершить работу алгоритма, если к = 0; в противном случае установить ct«— cjt + 1. Н4. [Перестановка.] Применить перестановку т(к,Ск)ш(к + 1)~ к aoai • • an-i, как поясняется ниже, и вернуться к шагу Н2. | Хотя этот алгоритм выглядит практически идентично алгоритму G, перестановки тиш, требующиеся на шаге Н4, существенно отличаются от перестановок, требую- щихся на шаге G4. Новыми правилами, заменяющими (15) и (16), являются т(к, j) = a(k,j)~a(k,j - 1) для 1 < j < к-, (34) ш(к) = а(п — 1,п — 1)-<т(п — 2,п — 2)“ .. .а(к, к)~. (35) Количество вариантов так же велико, как и в случае алгоритма G, так что здесь мы ограничимся только небольшим количеством случаев, обладающих особыми достоинствами. Одним из таких случаев, естественно, является таблица Симса, которая заставляла алгоритм G генерировать перестановки в обратном солексном порядке, а именно СТ(М) = (k-j k—j+1 ... к), (36) как в (18). Получающийся в результате генератор перестановок оказывается очень похожим на метод простых изменений; так что можно сказать, что алгоритмы L и Р, по сути, дуальны друг другу. (См. упр. 52.) Другая естественная идея заключается в построении таблицы Симса, для кото- рой на шаге Н4 всегда выполняется одна транспозиция двух элементов, по аналогии с построением (27), достигающим максимальной эффективности шага G4. Но сей- час это невозможно: мы не можем достичь этого даже для тг = 4. Если начать с тождественной перестановки aoaia^a^ = 0123, то переходы управляющей таблицы от С0С1С2С3 = 0000 к 0001, к 0002, к 0003 должны перемещать 3; так что, если они являются транспозициями, то они должны иметь вид (За), (аЬ) и (5с) для некоторой перестановки abc множества {0,1,2}. Перестановка, соответствующая C0C1C2C3 = 0003, теперь имеет вид ст(3,3)~ = (Ьс)(аЬ)(За) = (ЗаЬс); а следую- щая перестановка, которая соответствует С0С1С2С3 = 0010, будет ст(2,1)“, которая должна фиксировать элемент 3. Единственная подходящая транспозиция — (Зс), следовательно, ст(2,1)- должна быть (Зс)(ЗаЬс) = (аЬс). Аналогично мы находим, что а(2,2)_ должна быть (ас Ь), а перестановкой, соответствующей С0С1С2С3 = 0023, будет (ЗаЬс)(асЬ) = (Зс). Теперь шаг Н4, как предполагается, преобразует ее в перестановку <т(1,1)_, которая соответствует управляющей таблице 0100, следую- щей за 0023. Но единственной транспозицией, преобразующей (3 с) в перестановку, которая фиксирует 2 и 3, является (Зс); а полученная в результате перестановка фиксирует также 1, так что это не может быть <т(1,1)_. Доказательство в предыдущем абзаце показывает, что алгоритм Н нельзя ис- пользовать для генерации всех перестановок с помощью минимального количества транспозиций. Но из него также следует простая схема генерации, которая очень близка к этому минимуму, а получающийся в результате алгоритм очень привлека- телен, поскольку требует выполнения дополнительной работы только один раз на п(п — 1) шагов (см. упр. 53.) Наконец рассмотрим метод, дуальный методу Орд-Смита, когда a(k,j) = (k ... 10)> (37)
388 КОМБИНАТОРНЫЙ поиск 7.2.1.2 как в (23). Значение т{к, j) вновь не зависит от j, r(fc, j) = (0 1 ... к), (38) и этот факт особенно благоприятен для алгоритма Н, поскольку позволяет обойтись без управляющей таблицы cqCi ... cn_i. Дело в том, что вследствие (32) на шаге НЗ Cn-i = 0 тогда и только тогда, когда an-i = п — 1; и действительно, когда Cj = О для к < j < п на шаге НЗ, мы получаем cjt = 0 тогда и только тогда, когда ак = к. Следовательно, можно переформулировать данный вариант алгоритма Н следующим образом. Алгоритм С {Генерация перестановок циклическими сдвигами). Этот алгоритм посещает все перестановки ai ...ап различных элементов {a?i,...,хп}. С1. [Инициализация.] Установить Oj <— Xj для 1 < j < п. С2. [Посещение.] Посетить перестановку ... ап и установить к «— п. СЗ. [Сдвиг.] Заменить ai ... а* циклическим сдвигом аг... a^ai и вернуться к ша- гу С2, если ajt х^. С4. [Уменьшение fc.] Установить к ♦— к — 1 и вернуться к шагу СЗ, если fc > 1. | Например, последовательные перестановки {1,2,3,4}, генерируемые при п = 4, имеют вид 1234, 2341, 3412, 4123, (1234), 2314, 3142, 1423, 4231, (2314), 3124, 1243, 2431, 4312, (3124), (1234), 2134, 1342, 3421, 4213, (2134), 1324, 3241, 2413, 4132, (1324), 3214, 2143, 1432, 4321, (3214), (2134), (1234), где в скобках показаны непосещенные промежуточные перестановки. Этот алгоритм может оказаться самым простым генератором перестановок с точки зрения мини- мального размера кода программы. Он предложен Г. Д. Лангдоном-мл. (G. G. Lang- don, Jr.) [САСМ 10 (1967), 298-299; 11 (1968), 392]; аналогичный метод был ранее опубликован Ч. Томпкинсом (С. Tompkins) [Proc. Symp. Applied Math. 6 (1956), 202-205] и, в более явном виде, Р. Зайтцем (R. Seitz) [Unternehmensforschung 6 (1962), 2-15]. Эта процедура в особенности хороша для приложений, в которых эффективна операция циклического сдвига, например, когда последовательные перестановки хранятся в регистре компьютера, а не в массиве. Главным недостатком дуальных методов является то, что они обычно плохо адаптируются к ситуациям, когда нужно пропустить большие блоки перестановок, поскольку множество всех перестановок с заданным значением первых управляю- щих элементов cqCi .. .cjt-i обычно не имеет большого значения. Однако частный случай (36) иногда является исключением, поскольку n!/fc! перестановок с cqCi ... Ck-i = 00.. .0 в этом случае представляют собой именно те перестановки aoai... an-i, в которых 0 предшествует 1, 1 предшествует 2,..., а fc — 2 предшествует fc — 1. *Метод обмена Эрлиха. Гидеон Эрлих (Gideon Ehrlich) открыл совершенно иной подход к генерации перестановок, основанный на еще одном способе использования управляющей таблицы ci.-.Cn-i. Его метод получает каждую перестановку из предыдущей путем обмена крайнего слева элемента с другим.
7.2.1.2 ГЕНЕРАЦИЯ ВСЕХ ПЕРЕСТАНОВОК 389 Алгоритм Е (Обмены Эрлиха). Этот алгоритм генерирует все перестановки раз- личных элементов ао .. - an-i с использованием вспомогательных таблиц Ьо - - bn-i и C1 ... Сп. Е1. [Инициализация.] Установить bj <— j и cj+i «— 0 для 0 < j < п. Е2. [Посещение.] Посетить перестановку во ... ап-1- ЕЗ. [Поиск Л:.] Установить к ♦— 1. Затем, пока с* = к, устанавливать с& «— О и к ♦— к + 1. Завершить работу алгоритма, если к = п, в противном случае установить cjt <— +1. Е4. [Обмен.] Выполнить обмен ао аьк Е5. [Переворот.] Установить j *— 1, к *— к — 1. Пока j < к, обменивать bj <-> Ьк и устанавливать j <— j +1, к ♦— к — 1. Вернуться к шагу Е2. | Обратите внимание на то, что шаги Е2 и ЕЗ идентичны шагам G2 и G3 алгорит- ма G. Наиболее удивительное в этом алгоритме, как писал Эрлих Мартину Гарднеру в 1987 году, то, что он работает; доказательство этого приведено в упр. 55. Анало- гичный метод, который упрощает операции на шаге Е5, может быть проверен таким же образом (см. упр. 56). Среднее количество обменов, выполняемое алгоритмом на шаге Е5, меньше 0.18 (см. упр. 57). Алгоритм Е не быстрее других рассматривавшихся нами методов. Но он обла- дает тем приятным свойством, что минимально изменяет каждую перестановку, используя только п — 1 различных транспозиций. В то время как алгоритм Р использует обмены смежных элементов at-i <-> at, алгоритм Е обменивает с другими первый элемент ао <-> at (иногда такой обмен называют звездной транспозицией (star ranspositions)), используя для этого некоторую отобранную последователь- ность индексов t[l], t[2],..., t[n! — 1]. И если требуется повторно генерировать пере- становки для некоторого достаточно небольшого значения п, можно предвычислить эту последовательность (как это делалось в алгоритме Т для последовательности индексов алгоритма Р). Заметим также, что звездные транспозиции обладают по сравнению со смежными обменами тем преимуществом, что обмениваемое значе- ние ао известно из предыдущего обмена, а значит, его не требуется считывать из памяти. Пусть Еп— последовательность п! — 1 индексов t, таких, что алгоритм Е на шаге Е4 обменивает ао с at. Поскольку En+i начинается с Еп, можно рассматривать Еп как первые п! — 1 элементов бесконечной последовательности = 121213212123121213212124313132131312.... (39) Например, если п = 4 и аоа^аз = 1234, то перестановки, посещенные алгорит- мом Е, имеют вид 1234, 2134, 3124, 1324, 2314, 3214, 4213, 1243, 2143, 4123, 1423, 2413, 3412, 4312, 1342, 3142, 4132, 1432, * ' 2431, 3421, 4321, 2341, 3241, 4231. *Меныпие генераторы. После знакомства с алгоритмами Р и Е вполне есте- ственно было бы спросить, а не могут ли все перестановки быть получены путем использования только двух базовых операций вместо п — 1? Например, Ньенхьюз
390 КОМБИНАТОРНЫЙ поиск 7.2.1.2 (Nijenhuis) и Вильф (Wilf) [Combinatorial Algorithms (1975), Exercise 6] заметили, что все перестановки для п = 4 можно сгенерировать путем замены на каждом шаге 010203... Оп либо на 0203.. .anai, либо на a2<ii 03... On, и заинтересовались вопросом, существует ли такой метод для всех п. В общем случае, если G — произвольная группа перестановок и если от,..., oik являются элементами G, то граф Кейли для G с генераторами (от,..., at) пред- ставляет собой ориентированный граф, вершины которого являются перестановка- ми тг из G, а дуги идут от тг к огтг, ..., о^тг. [Arthur Cayley, American J. Math. 1 (1878), 174-176.] Вопрос Ньенхьюза и Вильфа эквивалентен вопросу о суще- ствовании гамильтонова пути в графе Кейли для всех перестановок {1,2, ...,п} с генераторами а и т, где а — циклическая перестановка (12 ... п), а т — транспо- зиция (1 2). Основная теорема Р. А. Ранкина (R. A. Rankin) [Proc. Cambridge Philos. Soc. 44 (1948), 17-25] позволяет нам сделать вывод о том, что во многих случаях графы Кейли с двумя генераторами не имеют гамильтонова цикла. Теорема R. Пусть G—группа из д перестановок. Если граф Кейли для G с ге- нераторами (а, (3) имеет гамильтонов цикл и если перестановки (ot,fl,afi~) имеют соответственно порядок (а, Ь, с), то либо с четно, либо д]аи д/b нечетны. (Порядком перестановки а называется наименьшее положительное целое число а, такое, что аа является тождественной перестановкой.) Доказательство. См. упр. 73. | В частности, когда а = о и (i = т, как в случае выше, д = п\, а — n, b = 2 и с = n — 1, поскольку ат~ = (2 ... п). Следовательно, можно заключить, что гамильтонов цикл невозможен для четных п > 4. Однако легко построить гамильтонов путь для п = 4, поскольку можно соединить 12-шаговые циклы 1234 -> 2341 -> 3412 -> 4312 -> 3124 -> 1243 -> 2431 -> 4231 -> 2314 -> 3142 ->1423 -> 4123 ->1234, 2134 ->1342 -> 3421 -»4321 -> 3214 -> 2143 ->1432 ( ' -> 4132 -> 1324 -> 3241 -* 2413 -* 4213 -* 2134, начиная с 2341 и переходя от 1234 к 2134, и заканчивая 4213. Раски (Ruskey), Джанг (Jiang) и Вестон (Weston) [Discrete Applied Math. 57 (1995), 75-83] предприняли исчерпывающий поиск в сг-т графе для п — 5 и вы- яснили, что он имеет пять существенно различных гамильтоновых циклов, один из которых (“самый красивый”) показан на рис.42, (а). Они также обнаружили гамильтонов путь для п = 6; это оказалось очень сложной задачей, так как потре- бовало бинарного дерева принятия решений с 720 шагами. К сожалению, открытое ими решение не имеет видимой логической структуры. Немного менее сложный путь описан в упр. 70, но даже этот путь нельзя назвать простым. Таким образом, подход на основе и-т графа, вероятно, не будет иметь практического интереса для больших значений п, если только не будут открыты какие-либо новые походы. Р. К. Комптон (R. С. Compton) и С. Д. Вильямсон (S. G. Williamson) [Linear and Multilinear Algebra 35 (1993), 237-293] доказали, что если допустить применение трех генераторов ст, <т- и т, то гамильтоновы циклы существуют для всех п. Их циклы обладают тем
7.2.1.2 ГЕНЕРАЦИЯ ВСЕХ ПЕРЕСТАНОВОК 391 интересным свойством, что каждое п-е преобразование является т, а промежуточ- ные п — 1 преобразований являются преобразованиями либо только ст, либо только а~. Однако их метод слишком сложен, чтобы можно было кратко рассказать о нем в этой книге. В упр. 69 описан общий алгоритм перестановок, достаточно простой и требу- ющий только трех генераторов, каждый — второго порядка. На рис. 42, (б) этот метод проиллюстрирован для случая п = 5, побудительным мотивом для которого послужили ранее упоминавшиеся перезвоны пяти колоколов. (а) Используются только переходы (12345) и (12). (б) Используются только переходы (12)(34), (23)(4 5) и (34). Рис. 42. Гамильтоновы циклы для 5! перестановок. Быстрее, еще быстрее. Но какой же способ генерации перестановок самый быстрый? Этот вопрос часто возникает в публикациях, посвященных информатике, поскольку для перебора всех п! перестановок желательно сократить время работы как можно сильнее. Но в общем ответы оказываются противоречивыми, поскольку имеется много способов сформулировать вопрос. Давайте попытаемся разобрать- ся в данном вопросе, изучая, как наиболее быстро генерировать перестановки на компьютере MMIX. Сначала положим, что наша цель заключается в получении перестановок в мас- сиве п последовательно расположенных в памяти слов (октабайтов). Наиболее быст- рый способ сделать это среди всех рассмотренных в данном разделе, как подсказы- вает Р. Седжвик (R. Sedgewick) [Computing Surveys 9 (1977), 157-160], — применить оптимизированный метод Хипа (27). Ключевая идея заключается в оптимизации кода для наиболее распространен- ных случаев на шагах G2 и G3, а именно для случаев, в которых вся деятельность сосредоточивается в начале массива. Если регистры и, v и w содержат первые три слова и если очередные шесть генерируемых перестановок получаются путем пере- становок данных слов всеми шестью возможными способами, то можно выполнить эту работу следующим образом. PUSHJ 0,Visit STO v,A0; STO w,A0; STO u,Al; STO v,A2; PUSHJ 0,Visit PUSHJ 0,Visit STO и,АО; STO w.Al; PUSHJ 0,Visit STO v,A0; STO u,A2; PUSHJ 0,Visit STO w,A0; STO v,Al; PUSHJ 0,Visit (42) (Здесь АО — адрес октабайта ао, и т. д.) Полная программа, которая отвечает за корректное заполнение регистров и, v и w, приводится в упр. 77, но прочие инструк-
392 КОМБИНАТОРНЫЙ поиск 7.2.1.2 ции менее важны, так как выполняются только | всего времени работы. Общая стоимость одной перестановки, без учета 4v, необходимых для выполнения операций PUSHJ и POP при каждом вызове Visit, при таком подходе доходит приблизительно до 2.77/z+5.69v. Если использовать четыре регистра, и, v, w, х, и расширить (42) до 24 вызовов Visit, то время работы на одну перестановку сокращается до примерно 2.19/z + 3.07v. А в случае г регистров и г! вызовов Visit, как показано в упр. 78, стоимость оказывается равной (2 + O(l/r!))(/z + v), т. е. очень близкой к стоимости двух инструкций ST0. Последнее значение, конечно, представляет собой минимально возможное время для любого метода генерации всех перестановок в последовательный массив... Или нет? Мы предполагали, что процедура посещения просматривает перестановки в по- следовательных местоположениях массива, но, возможно, эта процедура способна считывать перестановки из различных стартовых точек. Тогда можно организовать работу таким образом, чтобы зафиксировать an-i и хранить две копии других элементов поблизости: aoai. . an-2an-i(ioai • • оп-2- (43) Если теперь позволить ао«1 • • «п-2 пробегать (п — 1)! перестановок, всегда изменяя обе копии одновременно с помощью двух команд ST0 вместо одной, можно обеспе- чить посещение каждым вызовом Visit не одной, а п последовательно размещаю- щихся перестановок —1» —1^0» , —i^o • an—2« (44) Стоимость одной перестановки при этом снижается до стоимости трех простых инструкций наподобие ADD, CMP, PBNZ, плюс О(1/п). [См. Varol and Rotem, Comp. J. 24 (1981), 173-176.] Кроме того, можно вообще не тратить время на сохранение перестановок в па- мяти. Предположим, например, что наша цель заключается в генерации всех пе- рестановок {0,1,— 1}. Значение п вряд ли превысит 16, поскольку 16! = 20922789888000, а 17! = 355687428096000. Следовательно, вся перестановка мо- жет быть размещена в 16 полубайтах октабайта, и ее можно хранить в одном регистре. Преимущества этого способа хранения проявляются только в том случае, если подпрограмме посещения не требуется распаковывать отдельные полубайты; но пусть это и в самом деле так. Насколько же быстро можно генерировать пере- становки в полубайтах 64-битового регистра? Одна идея, основанная на предложении А. Д. Голдштейна (A. J. Goldstein) [U.S. Patent 3383661 (14 May 1968)], состоит в предвычислении таблицы (<[1],... ,t[5039]) переходов простых изменений для семи элементов с использованием алгоритма Т. Эти числа t[A:] находятся между 1 и 6, так что можно упаковать 20 таких чисел в одно 64-битовое слово. Оказывается удобным поместить число 52t=i 23fc-1t[20j+А:] в слово j вспомогательной таблицы (0 < j < 252) и считать £[5040] = 1; например, таблица начинается с кодового слова 00|001|010|011|100|101jll0|100ill0|101|100i011|010|001|110|001|010|011|100|101ill0|00.
7.2.1.2 ГЕНЕРАЦИЯ ВСЕХ ПЕРЕСТАНОВОК 393 Приведенная далее программа эффективно считывает эти коды. Perm ( Установить регистр а равным первой перестановке.) ОН LDA р,Т р ч— адрес первого кодового слова. JMP 3F 1Н ( Посетить перестановку в регистре а.) ( Обмен полубайтов а, лежащих в t битах справа.) SRU с, с, 3 с <— с » 3. 2Н AND t,c,#lc te-с & (11100)2. PBNZ t, IB Ветвление, если t 0. ADD p,p,8 ЗН EDO c ,p, 0 с <— следующее кодовое слово. PBNZ с, 2B (За последним кодовым словом идет 0.) ( Если не конец, продвинуть ведущие п — 7 полубайтов и вернуться к шагу ОВ.) (45) В упр. 79 показано, как операция (Обмен полубайтов...) выполняется с помощью семи инструкций, с помощью побитовых операций, предусмотренных на большин- стве компьютеров. Следовательно, стоимость одной перестановки чуть больше 10гл (Стоимость инструкций для выборки новых кодовых слов равна всего лишь (д + 5г)/20; а стоимость инструкций продвижения п — 7 ведущих полубайтов прене- брежимо мала, так как делится на 5040.) Заметим, что сейчас нет необходимости в инструкциях PUSHJ и POP, как в (42); ранее мы их игнорировали, но их стоимость равна 4v. Однако можно получить еще лучший результат, если адаптировать метод цик- лического сдвига Лангдона, алгоритм С. Предположим, мы начинаем с лексикогра- фически наибольшей перестановки и действуем следующим образом. GREG б ОН ОСТА #fedcba9876543210&(1«(4*N)-1) Perm LD0U а,0В JMP 2F Установить а . 3210. 1Н SRU a,a,4*(16-N) e<- L«/i6ie-nJ- OR a,a,t а <— а 11. (46) 2Н ( Посещение перестановки в регистре а.) SRU t,a,4*(N-l) t <- La/16n-1J- SLU a,a,4*(17-N) а ч— 1617-namod 16ie. PBNZ t,lB ( Продолжение работы методом Лангдона.) В 1В, если t 0. Время работы на одну перестановку теперь равно всего лишь 5v + O(l/n), вновь без необходимости использовать PUSHJ и POP. В упр. 81 описан интересный способ рас- ширения (46) до полной программы, что дает в результате замечательно короткую и быструю процедуру. Быстрые генераторы перестановок интересны и занимательны, но на практи- ке можно сэкономить больше времени, оптимизировав процедуру посещения, а не ускорив генератор. Топологическая сортировка. Вместо обработки всех п! перестановок {1,..., п} зачастую требуется просмотреть только те перестановки, которые удовлетворяют
394 КОМБИНАТОРНЫЙ ПОИСК 7.2.1.2 определенным ограничениям. Например, нас могут интересовать только те пере- становки, в которых 1 предшествует 3, 2 предшествует 3 и 2 предшествует 4; всего имеется пять таких перестановок множества {1,2,3,4}, а именно 1234, 1243, 2134, 2143, 2413. (47) Задача топологической сортировки, которую мы рассматривали в разделе 2.2.3 как первый пример нетривиальной структуры данных, является общей задачей поиска перестановки, которая удовлетворяет т условиям xi -< t/i, ..., хт -< ут, vjie х -< у означает, что х в перестановке должно предшествовать у. Эта задача часто возникает на практике, а потому имеет несколько названий; например, ее часто называют задачей линейного вложения, поскольку объекты следует выстро- ить в линию с сохранением определенных отношений упорядочения. Ее также называют задачей расширения частичного упорядочения до полного упорядочения (см. упр. 2.2.3-14). Нашей целью в разделе 2.2.3 был поиск одной перестановки, удовлетворяющей всем соотношениям. Но теперь мы хотим найти все такие перестановки, т. е. все топологические сортировки. В этом разделе мы будем считать, что элементы х и у, для которых определены отношения, являются целыми числами от 1 до п и что, когда х -< у, мы имеем х < у. Следовательно, перестановка 12... п всегда тополо- гически корректна. (Ek л и это упрощенное предположение не удовлетворяется, мы можем предварительно обработать объекты с помощью алгоритма 2.2.3Т, чтобы затем соответствующим образом их переименовать.) Многие важные классы перестановок являются частными случаями этой задачи топологического упорядочения. Например, перестановки {1,..., 8}, такие, что 1 2, 2 -< 3, 3 -< 4, 6 -< 7, 7 -< 8, эквивалентны перестановкам мультимножества {1,1,1,1,2,3,3,3}, поскольку можно отобразить {1,2,3,4} >—> 1, 5 >—> 2 и {6,7,8} >—> 3. Мы знаем, как генерировать пере- становки мультимножества с помощью алгоритма L, но сейчас мы изучим другой способ. Обратите внимание, что х в перестановке аг... ап предшествует у тогда и только тогда, когда а'х < а'у в обратной перестановке ... а'п. Следовательно, рассматрива- емый нами алгоритм находит также все перестановки а'х... а'п, такие, что а' < а'к всякий раз, когда j -< к. Например, из раздела 5.1.4 нам известно, что таблица Юнга представляет собой такое упорядочение {1,..., п} по строкам и столбцам, что каждая строка возрастает слева направо, а каждый столбец возрастает сверху вниз. Таким образом, задача генерации всех таблиц Юнга размером 3x3 эквивалентна генерации всех а\ ... Од, таких, что < а'2 < а'3, а\ < а'ъ < а'6, < а'8 < а'д, z _ , _ , z^z^z z^z^z О j < у j < Cig < CZq , и представляет собой особый вид топологической сортировки. Можно также искать все совершенные паросочетания 2п элементов, т. е. все способы разбиения {1,..., 2п} на п пар. Имеется (2п—1)(2п—3)... (1) = (2п)!/(2пп!) таких способов, которые соответствуют перестановкам, удовлетворяющим условию а1 < а2> аз < а4> •••> а2п—1 < а2п1 а1 < а3 < а2п—1‘ (49)
7.2.1.2 ГЕНЕРАЦИЯ ВСЕХ ПЕРЕСТАНОВОК 395 Элегантный алгоритм для исчерпывающей топологической сортировки был от- крыт Я. Л. Варолом (Y. L. Varol) и Д. Ротемом (D. Rotem) [Comp. J. 24 (1981), 83-84], которые сообразили, что можно использовать метод, аналогичный простым изменениям (алгоритм Р). Предположим, что мы нашли способ топологически упо- рядочить {1,...,п — 1} так, что ai...an-i удовлетворяет всем условиям, которые не включают п. Тогда можно легко записать все допустимые способы вставки последнего элемента п без изменения относительного порядка щ . ап-1: мы просто начинаем с щ . an_i п, затем смещаем п по одному шагу влево, пока такой сдвиг не станет невозможным. Рекурсивное применение этой идеи дает следующую простую процедуру. Алгоритм V (Все топологические сортировки). Для заданного отношения -< на множестве {1,..., п) с тем свойством, что из х -< у следует х < у, этот алгоритм генерирует все перестановки аг.. .ап и обратные к ним а'х ..а'п, обладающие тем свойством, что a'j < a'k при j -< к. Для удобства предполагаем, что a0 = ag = 0 и что О -< к для 1 < к < п. V I. [Инициализация.] Установить «— j и а'^ «— j для 0 < j < п. V 2. [Посещение.] Посетить перестановку аг... ап и обратную к ней ах... а'п. Затем установить к<— п. V 3. [Можно переместить к влево?] Установить j ♦— а'к и I <— Если I -< к, перейти к шагу V5. V 4. [Да, перемещение.] Установить а^_г «— к, <— I, ак «— j — 1 и a't «— j. Перейти к шагу V2. V 5. [Нет, вернуть А:.] Пока j < к, устанавливать I«— а^+1, <— 1,а'{ <— j и j <— j +1. Затем установить ак <— а'к «— к. Уменьшить А: на 1 и вернуться к шагу V3, если к > 0. | Например, теорема 5.1.4Н гласит, что имеется ровно 42 таблицы Юнга размером 3x3. Если применить алгоритм V к отношениям (48) и записать обратную пере- становку в виде массива (50) a4a5a6 OL'j Qg Qq то получим следующие 42 результата. 123 123 123 123 123 124 124 124 124 124 125 125 125 125 456 457 458 467 468 356 357 358 367 368 367 368 346 347 789 689 679 589 579 789 689 679 589 579 489 479 789 689 125 126 126 127 126 126 127 134 134 134 134 134 135 135 348 347 348 348 357 358 358 256 257 258 267 268 267 268 679 589 579 569 489 479 469 789 689 679 589 579 489 479 145 145 135 135 135 136 136 137 136 136 137 146 146 147 267 268 246 247 248 247 248 248 257 258 258 257 258 258 389 379 789 689 679 589 579 569 489 479 469 389 379 369
396 КОМБИНАТОРНЫЙ ПОИСК 7.2.1.2 Пусть tr — количество топологических сортировок, последние п — т элементов которых находятся в их исходном положении aj = j для г < j < п. Эквивалентно tr является количеством топологических сортировок ai... аг множества {1,..., г}, если игнорировать отношения, затрагивающие элементы, большие г. Тогда ре- курсивный механизм, лежащий в основе алгоритма V, показывает, что шаг V2 выполняется N раз, а шаг V3—М раз, где М = tn -I----F ti и N = tn. (51) Кроме того, шаг V4 и операции цикла на шаге V5 выполняются N—1 раз; остальные операции шага V5 выполняются М — N+1 раз. Следовательно, общее время работы алгоритма представляет собой линейную комбинацию М, Nun. При плохом выборе меток элементов М может оказаться гораздо больше N. Например, если ограничениями на входе алгоритма V являются 2 -< 3, 3 -< 4, ..., п - 1 -Ч п, (52) то tj = j для 1 < j < п, и мы имеем М = |(n2 + n), N = п. Но эти ограничения после переименования элементов эквивалентны ограничениям 14 2, 2 ч 3, ..., п-2 Ч n - 1; (53) М при этом сводится к 2п — 1 = 2N — 1. В упр. 89 показано, что простой предварительный шаг может найти такие метки элементов, что нёболыпая модификация алгоритма V оказывается способной генерировать все топологические сортировки за O(N + п) шагов. Таким образом, топологическая сортировка всегда может быть выполнена эффективно. Семь раз отмерь. В этом разделе мы познакомились с несколькими привлекатель- ными алгоритмами генерации перестановок, но имеется множество алгоритмов, спо- собных генерировать оптимальные перестановки для конкретных задач без полного перебора. Например, как показывает теорема 6.1S, можно найти наилучший способ упорядочения записей в последовательном хранилище просто путем сортировки в соответствии с определенными критериями стоимости, и этот процесс требует только O(nlogn) шагов. В разделе 7.5.2 будет рассмотрена задача о назначениях, в которой требуется найти перестановку столбцов квадратной матрицы, максимизи- рующую сумму диагональных элементов. Эта задача может быть решена не более чем за О(п3) операций, так что было бы глупо использовать метод порядка п!, если только п не очень мало. Даже в случае задачи коммивояжера, для решения которой не известен эффективный алгоритм, обычно можно найти подход получше, чем перебор всех возможных решений. Генерацию перестановок лучше всего ис- пользовать только тогда, когда имеются основательные причины для рассмотрения каждой перестановки отдельно. Упражнения 1. [20] Поясните, как ускорить алгоритм L, оптимизируя его операции при значениях j, близких к п. 2. [20] Перепишите алгоритм L так, чтобы он генерировал все перестановки си ... ап в обратном солексном порядке. (Другими словами, значения отражений ап • си должны
7.2.1.2 ГЕНЕРАЦИЯ ВСЕХ ПЕРЕСТАНОВОК 397 быть лексикографически убывающими, как в (11). Этот тип алгоритма часто проще и быстрее исходного, поскольку от значения п зависит меньшее количество вычислений.) ► 3. [ЛШ ] Рангом комбинаторного упорядочения X по отношению к алгоритму генерации является количество других упорядочений, посещаемых алгоритмом до X. Поясните, как вычислить ранг данной перестановки сц ... ап по отношению к алгоритму L, если {сц,..., an} = {1, • • , п}. Чему равен ранг 314592687? 4. [М23] Обобщая упр. 3, поясните, как вычислить ранг ai... ап по отношению к ал- горитму L, когда {сц,..., dn} является мультимножеством {тц • xi,..., nt • Xt}; здесь п± + ----Fnt = п и Xi < < Xt- (Общее количество перестановок, конечно, представляет собой мультиномиальный коэффициент п \ _ п! т,...,Пе/ тцГ-.тц!’ см. уравнение 5.1.2-(3).) Чему равен ранг 314159265? 5. [НМ25] Вычислите среднее и дисперсию количества сравнений, выполняемых алго- ритмом L на (а) шаге L2, (б) шаге L3, когда элементы {си,... , ап} различны. в. [НМ34] Выведите производящую функцию для среднего количества сравнений, вы- полняемых алгоритмом L на (а) шаге L2, (б) шаге L3, когда {ai,...,an} представляет собой обобщенное мультимножество, как в упр. 4. Представьте в аналитическом виде результат для случая, когда {ai,...,an} представляет собой бинарное мультимножество {з • 0, (п — з) 1}. 7. [НМ35] Чему равен предел при t —> оо среднего количества сравнений, выполняе- мых на одну перестановку на шаге L2, если алгоритм L применяется к мультимножеству (а) {2 1, 2 2, ..., 2 • t}? (б) {1 • 1, 2 • 2, ..., t • t}? (в) {2 • 1, 4 2, ..., 2‘ t}? ► 8. [21] Вариациями (variation) множеств называются перестановки всех их подмульти- множеств. Например, вариациями {1,2,2,3} являются е, 1,12,122,1223, 123, 1232,13,132,1322, 2, 21, 212, 2123, 213, 2132, 22, 221, 2213, 223, 2231, 23, 231, 2312, 232, 2321, 3, 31, 312, 3122, 32, 321, 3212, 322, 3221. Покажите, как простое изменение алгоритма L позволяет генерировать все вариации дан- ного мультимножества {ai, аг,..., ап}- 9. [22] Продолжая предыдущее упражнение, разработайте алгоритм для генерации всех г-вариаций мультимножества {сц, аг,..., ап}, именуемых также г-перестановками, а имен- но всех перестановок его г-элементных подмультимножеств. (Например, решение букво- метика с г различными буквами представляет собой г-вариацию множества {0,1,..., 9}.) 10. [20] Каковы будут значения aiaz • • • an, C1C2 ... Сп и сцог ... оп в конце алгоритма Р, если в начале сц аг ... an = 12 ... п? 11. [М22] Сколько раз выполняется каждый шаг алгоритма Р (в предположении, что п> 2)? ► 12. [М23] Какова 1 000 000-я перестановка, посещаемая (а) алгоритмом L, (б) алгорит- мом Р, (в) алгоритмом С, если {сц,..., an} = {0,..., 9}? Указание: в записи со смешанны- i ГИ-И-» ГИ-И-» Г 2, 6, 6, 2, 5, 1. 2, 2, О, 01 ГО, О. 1, 2, 3, О, 2, 7, 1, 0 1 ми основаниями 1000000 [10> 8> 7, 3> 21 i ] [ i( 2, 3, 4, 5, в, 7, в, 9, 10 J 13. [М21] (Мартин Гарднер (Martin Gardner), 1974.) Истинно или ложно следующее утверждение? Если 0102 ... а„ изначально равно 12 ... п, алгоритм Р начинает с посещения всех п!/2 перестановок, в которых 1 предшествует 2; затем следующей перестановкой является п... 21.
398 КОМБИНАТОРНЫЙ поиск 7.2.1.2 14. [М22] Истинно или ложно следующее утверждение? Если в алгоритме Р «наг... ап изначально равно гсггсг ... хп, то в начале шага Р5 всегда имеем aj-Cj+s = х,. 15. [Л/25] (Селмер Джонсон (Selmer Johnson), 1963.) Покажите, что переменная смеще- ния s в алгоритме Р никогда не превышает 2. 16. [21] Поясните, как заставить алгоритм Р работать быстрее, оптимизировав его опе- рации для значений j, близких к п. (Эта задача аналогична упр. 1.) ► 17. [20] Расширьте алгоритм Р так, чтобы при посещении ai... ап на шаге Р2 для обра- ботки была доступна и обратная перестановка a'i.. .а'п. (Обратная перестановка удовле- творяет условию ua'k = j тогда и только тогда, когда a,j = к”) 18. [21] (Четочные перестановки.) Разработайте эффективный способ генерации (п— 1)!/2 перестановок, которые представляют все возможные неориентированные циклы на вершинах {1,..., п} (т. е. циклический сдвиг си ... ап или ап &1 не генерируется, ес- ли сгенерирован си ... ап). Например, при п = 4 могут использоваться перестановки (1234, 1324, 3124). 19. [25] Разработайте алгоритм, который генерирует все перестановки п различных эле- ментов без использования циклов в духе алгоритма 7.2.1.1L. ► 20. [20] n-мерный куб имеет 2пп! симметрий, по одной для каждого способа переста- новки и/или дополнения координат. Такую симметрию обычно удобнее представлять как знаковую перестановку, т. е. перестановку с необязательными назначенными элемен- там знаками. Например, 231 представляет собой знаковую перестановку, преобразующую вершины трехмерного куба с помощью замены на так что ООО 001, 001 011, ..., 111 >-> 110. Разработайте простой алгоритм, который генерирует все знаковые перестановки множества {1,2,.,.,п}, в котором на каждом шаге выполняется либо обмен двух смежных элементов, либо изменение знака первого элемента. 21. [М21] (Э. П. Мак-Крейви (Е. Р. McCravy), 1971.) Сколько решений имеет буквоме- тик (6) в системе счисления с основанием Ь? 22. [М15] Истинно или ложно следующее утверждение? Если буквометик имеет решение в системе счисления с основанием Ь, то он имеет решение и в системе счисления с основа- нием Ь + 1. 23. [М20] Истинно или ложно следующее утверждение? Чистый буквометик не может иметь две идентичные сигнатуры Sj = sk / 0, когда j / fc. 24. [25] Вручную или с помощью компьютера решите следующие буквометики. a) SEND + А + TAD + MORE = MONEY. б) ZEROES + ONES = BINARY. (Питер Мак-Дональд (Peter MacDonald), 1977.) в) DCLIX + DLXVI = MCCXXV. (Вилли Энггрен (Willy Enggren), 1972.) r) COUPLE + COUPLE = QUARTET. (Майкл P. У. Бакли (Michael R. W. Buckley), 1977.) д) FISH + N + CHIPS = SUPPER. (Роберт Винникомб (Bob Vinnicombe), 1978.) e) SATURN + URANUS + NEPTUNE + PLUTO = PLANETS. (Вилли Энггрен (Willy Enggren), 1968.) ж) EARTH + AIR + FIRE + WATER - NATURE. (Герман Нийон (Herman Nijon), 1977.) з) AN+ACCELERATING+INFERENTIAL+ENGINEERING+TALE+ELITE+GRANT+FEE+ET+CETERA = ARTIFICIAL + INTELLIGENCE. и) HARDY + NESTS = NASTY + HERDS. ► 25. [M21] Разработайте быстрый способ вычисления min(a s) и max(a s) среди всех допустимых перестановок ai... aio множества {0,..., 9} для заданного вектора сигнатуры s = (si,...,sio) и множества первых букв F буквометика. (Такая процедура позволяет быстро исключить многие случаи из большого семейства буквометиков, как в ряде приме- ров ниже, поскольку решение возможно только тогда, когда min(a s) < 0 < max(a • s).)
7.2.1.2 ГЕНЕРАЦИЯ ВСЕХ ПЕРЕСТАНОВОК 399 26. [25] Каково единственное решение буквометика NIIHAU ± KAUAI ± OAHU ± MOLOKAI ± LANAI ± MAUI ± HAWAII = О? 27. [50] Постройте чистые аддитивные буквометики, все слова которых состоят из пяти букв. 28. [М25] Разбиением целого числа п называется выражение вида п = m + Ч- nt, где П1 > • • • > nt >0. Такое разбиение называется дважды истинным, если а(п) = а(щ)Ч Fa(nt) является чистым буквометиком, где а(п) — “имя” п на некотором языке. Дважды истинные разбиения введены Аланом Уэйном (Alan Wayne) в АММ 54 (1947), 38, 412-414, где он предложил решение TWENTY = SEVEN Ч- SEVEN Ч- SIX и несколько других. а) Найдите все дважды истинные разбиения на английском языке для 1 < п < 20. б) Уэйн привел также пример EIGHTY = FIFTY+TWENTY +NINE + 0NE. Найдите все дважды истинные разбиения для 1 < п < 100, все части которых различны, используя имена ONE, TWO, ..., NINETYNINE, ONEHUNDRED. 29. [M25] Продолжая выполнять предыдущее упражнение, найдите все уравнения вида П! Ч F nt = n't Ч---1- n't,, которые истинны как с математической, так и с “буквометиче- ской” (на английском языке) точек зрения, когда все {zix,..., nt, п\,..., n'tl} — различные положительные целые числа, меньшие 20. Например, TWELVE Ч- NINE Ч- TWO = ELEVEN Ч- SEVEN Ч- FIVE. Все буквометики должны быть чистыми. 30. [25] Решите вручную или с помощью компьютера следующие мультипликативные буквометики. a) TWO х TWO = SQUARE. (Г. Э. Дьюдени (Н. Е. Dudeney), 1929.) (Подобный мультипликативный буквометик на русском языке — Pfik х ДВА = ЧЕТЫРЕ (ДВА х ДВА = ЧОТИРИ на украинском). — Примеч. пер.) б) HIP х HIP = HURRAY. (Вилли Энггрен (Willy Enggren), 1970.) в) PI х R х R = AREA. (Брайан Барвелл (Brian Barwell), 1981.) r) NORTH/SOUTH = EAST/WEST. (Нобуюки Йошигахара (Nob Yoshigahara), 1995.) д) NAUGHT x NAUGHT = ZERO x ZERO x ZERO. (Алан Уэйн (Alan Wayne), 2003.) 31. [M22] (Нобуюки Йошигахара (Nob Yoshigahara).) (а) Найдите единственное решение A/BC 4- D/EF 4- G/HI = 1, если {A,..., 1} = {1,..., 9}. (б) Аналогично добейтесь выполнения условий АВ mod 2 = 0, ABC mod 3 = 0 и т. д. 32. [М25] (Г. Э. Дьюдени (Н. Е. Dudeney), 1901.) Найдите все способы представления числа 100 путем вставки плюса и косой черты в перестановку цифр {1,..., 9}. Например, 100 = 91 Ч- 5742/638. Плюс должен предшествовать косой черте. 33. [25] Продолжая предыдущее упражнение, найдите все натуральные числа, меньшие 150, которые (а) не могут быть представлены таким способом; (б) имеют единственное представление. 34. [М2б] Сделайте уравнение EVEN Ч- ODD Ч- PRIME = х дважды истинным, когда (а) х является точной 5-й степенью; (б) х является точной 7-й степенью. 35. [М20] Аутоморфизмы четырехмерного куба могут иметь много различных таблиц Симса, и в (14) показана только одна из них. Сколько различных таблиц Симса может быть для этой группы, если вершины пронумерованы так, как показано в (12)?
400 КОМБИНАТОРНЫЙ ПОИСК 7.2.1.2 36. [Af23] Найдите таблицу Симса для группы всех аутоморфизмов доски для игры “tic- tac-toe” (аналог крестиков-ноликов) размером 4x4 0 12 3 4 5 6 7 8 9 а Ь с d е f т. е. найдите все перестановки, которые преобразуют линии в линии, где “линия” — мно- жество из четырех элементов, принадлежащих одной строке, столбцу или диагонали. 37. [НМ22] Сколько таблиц Симса можно использовать с алгоритмами G и Н? Оцените логарифм этого количества при п -> оо. 38. [НМ21] Докажите, что среднее количество транспозиций на одну перестановку при использовании алгоритма Орд-Смита (26) примерно равно sinhl и 1.175. 39. [16] Запишите 24 перестановки, генерируемые для п = 4 (а) методом Орд-Смита (26); (б) методом Хипа (27). 40. [М23] Покажите, что метод Хипа (27) соответствует корректной таблице Симса. 41. [Л155] Разработайте алгоритм, генерирующий все r-вариации множества {0,1,..., п — 1} путем обмена только двух элементов при переходе от одной вариации к следующей. (См. упр. 9.) Указание: обобщите метод Хипа (27), получая результаты в позициях ап-г an-i массива ао ... ап-1- Например, одно из решений при п = 5 и г = 2 использует последние два элемента соответствующих перестановок 01234, 31204, 30214, 30124, 40123, 20143, 24103, 24013, 34012, 14032, 13042, 13402, 23401, 03421, 02431, 02341, 12340, 42310, 41320, 41230. 42. [М20] Постройте таблицу Симса для всех перестановок, в которых каждая <r(fc,y) и каждая r(k,j) для 1 < j < к представляют собой цикл длиной < 3. 43. [Af2J] Постройте таблицу Симса для всех перестановок, в которых каждая <т(к, к), w(fc) и r(fc,y)w(fc — I)- для 1 < j < к является циклами длиной < 3. 44. [20] Когда в расширенном алгоритме G пропускаются блоки нежелательных переста- новок, превосходит ли таблица Симса метода Орд-Смита (23) таблицу Симса обратного солексного метода (18)? 45. [20] (а) Чему равны индексы ui... ug при посещении алгоритмом X перестановки 314592687? (б) Какая перестановка посещается при «1... ug = 161800000? 46. [20] Истинно или ложно следующее утверждение? Когда алгоритм X посещает ai... ап, мы имеем иь > Uk+i тогда и только тогда, когда аь > аь+i, 1 < к < п. 47. [М21 ] Выразите количество выполнений каждого шага алгоритма X через величины №, Ni, ..., Nn, где Nic—число префиксов ai...afc, удовлетворяющих условию tj(ai, ..., aj) для 1 < j < к. 48. [Af25] Сравните время работы алгоритмов X и L в случае, когда проверки ti(ai), 1г(о1, аг), ..., tn(ai,аг, . , а„) всегда истинны. 49. [28] Предложенный в разделе метод решения аддитивных буквометиков с помощью алгоритма X, по сути, выбирает цифры справа налево; другими словами, он присваивает пробные значения младшим цифрам, перед тем как рассмотреть цифры, соответствующие более высоким степеням 10. Исследуйте альтернативный подход, выбирающий цифры слева направо. Например, такой метод может сразу вывести, что в бувометике SEND + MORE = MONEY значение М = 1. Указание: см. упр. 25.
7.2.1.2 ГЕНЕРАЦИЯ ВСЕХ ПЕРЕСТАНОВОК 401 50. [Ml 5] Объясните, почему из (13) следует дуальная формула (32). 51. [Ml 6] Истинно или ложно следующее утверждение? Если множества Sk = {<r(fc, 0), ..., <r(fc, fc)} образуют таблицу Симса для группы всех перестановок, то то же самое спра- ведливо и для множеств = {<r(fc, 0)~,..., <т(к, к)~ }. ► 52. [М22] Какие перестановки r(k,j) и ш(к) возникают при использовании алгоритма Н с таблицей Симса (36)? Сравните полученный генератор с алгоритмом Р. ► 53. [М26] (Ф. М. Айвес (F. М. Ives).) Постройте таблицу Симса, для которой алгоритм Н будет генерировать все перестановки с помощью только п! + О((п — 2)!) транспозиций. 54. [20] Будет ли алгоритм С корректно работать, если на шаге СЗ выполнять правый циклический сдвиг и установку ei... ak-iOk afcfli -.. аь-i вместо левого циклического сдвига? 55. [М27] Рассмотрим факториальную линеечную функцию pi(m) = max{fc | тп mod fc! — 0}. Пусть <Tk и Tk являются перестановками неотрицательных целых чисел, таких, что (TjTk = TktTj, когда j < к. Пусть ао и (За— тождественные перестановки, и определим для т > 0 ат — /^тп—1 (тп) 1 От—1, /Зт — &р,(т)/3т~1’ Например, если — операция переворота (1 к—1)(2 к—2) ... = (0 к)ф(к) и если Tk = (0 fc), а алгоритм Е начинается с aj = j для 0 < j < п, то ат и /Зт являются содержимым во ... an-i и Ъо ... bn-i после того, как шаг Е5 будет выполнен т раз. а) Докажите, что ^(n+i),a(n+1), = ст„+1СТЙтп+1т~(/Зп!ап!)п+1. б) Воспользуйтесь результатом (а), чтобы установить правильность алгоритма Е. 56. [М22] Докажите, что алгоритм Е остается корректным при замене шага Е5 на Е5'. [Транспозиция пар.] Если fc > 2, обменять bj+i bj для j = к — 2, fc — 4, ..., (2 или 1). Вернуться к шагу Е2. | 57. [НМ22] Каково среднее количество обменов на шаге Е5? 58. [М21] Истинно или ложно следующее утверждение? Если алгоритм Е начинается с во ... вп-i = xi... хп, то последняя посещенная перестановка начинается с во = хп- 59. [М20] Некоторые авторы определяют дуги графа Кейли как идущие от тг к iraj, а не от тг к atjir. Является ли это отличие существенным? ► 60. [21] Циклом Грея для перестановок называется цикл (тго, tti, ..., тгп!-1), включающий каждую перестановку {1,2, ...,п} и обладающий тем свойством, что тгк отличается от 7r(k+i) mod п! на транспозицию смежных элементов. Он также может быть описан как гамильтонов цикл графа Кейли для группы всех перестановок множества {1,2, ...,п} с п — 1 генераторами ((1 2), (2 3),..., (n—1 п)). Дельта-последовательность такого цик- ла Грея представляет собой последовательность целых чисел <5о51 • • .5n!-i, такую, что 7T(fc+i) mod n! = (5fc 5k+l) TTfc (см. 7.2.1.l-(24), где описывается аналогичная ситуация для бинарных n-кортежей). Например, на рис. 43 показан цикл Грея, определяемый простыми изменениями при п = 4; его дельта-последовательность имеет вид (32131231)3. а) Найдите все циклы Грея для перестановок множества {1,2,3,4}. б) Два цикла Грея рассматриваются как эквивалентные, если их дельта-последовательно- сти можно получить одну из другой путем циклического сдвига (5k... <5п!-15о • • • 5fc-i) и/или обращения (5ni-i • • • 515о) и/или дополнения ((n—6о)(п—61) ... (n—5n!-i)). Ка- кие циклы Грея в (а) являются эквивалентными?
402 КОМБИНАТОРНЫЙ ПОИСК Рис. 43. Алгоритм Р проходит по данному гамильтонову циклу усеченного октаэдра с рис. 5.1. 61. [21] Продолжим выполнение предыдущего упражнения. Код Грея для перестановок подобен циклу Грея, за исключением того, что последняя перестановка тгП!-1 не обязана быть смежной с начальной перестановкой это. Изучите множество всех кодов Грея для п = 4, которые начинаются с 1234. 62. [М23] Какие перестановки могут быть достигнуты в качестве последнего элемента кода Грея, начинающегося с 12... п? 63. [М25] Оцените общее количество циклов Грея для перестановок множества {1,2,3,4,5}. 64. [23] “Двойной код Грея” для перестановок представляет собой цикл Грея с тем до- полнительным свойством, что <5*+i = <5к ± 1 для всех к. Комптон (Compton) и Вильямсон (Williamson) доказали, что такие коды существуют для всех п > 3. Сколько двойных кодов Грея имеется для п = 5? 65. [М25] Для каких целых чисел N существует путь Грея, проходящий через N лексико- графически наименьших перестановок множества {1,...,п}? (В упр. 7.2.1.1-26 решается аналогичная задача для бинарных п-кортежей.) 66. [22] Метод обмена Эрлиха предлагает другой тип циклов Грея для перестановок, в котором п — 1 генераторов представляют собой звездные транспозиции (1 2), (1 3), ..., (1 п). Например, на рис.44 показан соответствующий граф для п = 4. Проанали- зируйте гамильтоновы циклы этого графа. Рис. 44. Граф Кейли для перестановок множества {1,2,3,4}, сгенерированных звездными транспозициями (12), (13) и (14), изображенный в виде скрученного тора. 67. [26] Продолжая выполнять предыдущее упражнение, найдите цикл Грея с обменом первого элемента для п = 5, в котором каждая звездная транспозиция (1 j), 2 < j < 5, встречается 30 раз.
7.2.1.2 ГЕНЕРАЦИЯ ВСЕХ ПЕРЕСТАНОВОК 403 68. [МЗО] (В. Л. Компельмахер и В. А. Лисковец, 1975.) Пусть G—граф Кейли для всех перестановок множества {1,..., п} с генераторами (ai,..., ctfc), где каждый генератор представляет собой транспозицию (и,- Vj); пусть также А является графом с вершинами {1,... ,п} и ребрами Uj — Vj для 1 < j < к. Докажите, что G имеет гамильтонов цикл тогда и только тогда, когда А—связный граф. (На рис. 43 показан частный случай, когда А является путем, а на рис. 44 — частный случай, когда А представляет собой “звезду’.’) 69. [28] Приведенный ниже алгоритм генерирует все перестановки Ai Аз Аз ... Ап множе- ства {1,2,3,..., п} для п > 4 с применением только трех преобразований: р = (1 2)(34)(56) ..., а= (23)(45)(67) ..., т = (34)(56)(78) ..., никогда не применяя р и т друг после друга. Поясните принцип работы данного алгоритма. Z1. [Инициализация.] Установить Aj Ч— j для 1 < j < п. Установить также aj ч— 2j Для 1 < j; < п/2 и On-j Ч— 2j + 1 для 1 < j' < п/2. Затем выполнить алгоритм Р, но с параметром п — 1 вместо п. Мы будем рассматривать этот алгоритм как сопрограмму, которая должна вернуть управление при “посещении” а± ... an-i на шаге Р2. В ней совместно используются все переменные, за исключением п. Z2. [Установка х и р.] Вновь выполнить алгоритм Р, получая новую перестановку <ц ... an-i и новое значение j. Если j = 2, обменять ai+s Ч-> аг+s (тем самым отменяя действие шага Р5) и повторить этот шаг; в таком случае мы находимся в срединной точке алгоритма Р. Если j = 1 (так что алгоритм Р завершен), установить х ч— у ч— 0 и перейти к шагу Z3. В противном случае установить х Ч— ал_с^+я+[о^=+1], у ч— aj_Cj +s_[Oj=_i]; это два последних обменянных на шаге Р5 элемента. Z3. [Посещение.] Посетить перестановку Ai... Ап. Затем перейти к шагу Z5, если Ai = х и Аз = у. Z4. [Применение р, затем <т.] Обменять Ai Ч-> Аз, Аз Ч-> А4, Ав Ч-> Ав, .... Посетить Ai... Ап- Затем обменять Аз Ч-> A3, А4 Ч-> Ав, Ав Ч-> Ат, .... Завершить работу алгоритма, если Ai... А„ = 1... п, в противном случае вернуться к шагу Z3. Z5. [Применение т, затем <т.] Обменять Аз Ч-> А4, Аз Ч-> Ав, Ат Ч-> Аз, .... Посе- тить Ai... А„. Затем обменять Аз Ч-> Аз, А4 Ч-> Ав, Ав Ч-> Ат, ... и вернуться к шагу Z2. | Указание: сначала покажите, что алгоритм работает, если изменить его так, что на шаге Z1 выполняются установки Aj ч— п + 1 — j и aj Ч- j, и если на шагах Z4 и Z5 вместо р, а и т используются “переворотные” перестановки р' = (1 п)(2 п—1) ..., а' = (2 п)(3 п— 1) ..., т = (2 п—1)(3 п—2) .... При такой модификации шаг Z3 должен переходить к шагу Z5, если Ai = х и Ап = у, шаг Z4 должен завершать работу алгоритма, когда Ai... А„ = п... 1. 70. [Л/55] Два цикла из 12 элементов (41) можно рассматривать как а-т циклы для двенадцати перестановок множества {1,1,3,4}: 1134 -> 1341 -» 3411 -» 4311 -» 3114 -» 1143 -> 1431 -> 4131 -» 1314 -» 3141 -» 1413 -» 4113 -> 1134. Замена {1,1} на {1,2} дает непересекающиеся циклы, и мы получаем гамильтонов путь путем перехода от одного цикла к другому. Можно ли подобным образом образовать а-т путь для всех перестановок из шести элементов, основываясь на цикле из 360 элементов для перестановок мультимножества {1,1,3,4,5,6}?
404 КОМБИНАТОРНЫЙ поиск 7.2.1.2 71. [4в] Будет ли граф Кейли с генераторами <т = (1 2 ... п) и т = (1 2) иметь гамильтонов цикл при нечетном п > 3? 72. [M2J] Предположим, что для данного графа Кейли с генераторами (щ,..., ак) каж- дый aj отображает х у. (Например, и <т, и т в упр. 71 отображают 1 2.) Докажите, что любой гамильтонов путь, начинающийся с 12... п в G, должен заканчиваться переста- новкой, отображающей у х. 73. [М30] Пусть а, Р и а являются перестановками множества X, где X = A U В. Пред- положим, что ха = ха, когда х 6 А, и ха = хР, когда х 6 В, и что порядок а(3~ нечетен. а) Докажите, что все три перестановки, а, Р, а, имеют один и тот же знак; т. е. либо все они четны, либо все нечетны. Указание: перестановка имеет нечетный порядок тогда и только тогда, когда все ее циклы имеют нечетную длину. б) Выведите из п. (а) теорему R. 74. [Л/30] (Р. А. Ранкин (R. A. Rankin).) В предположении, что в теореме R аР = Ра, докажите, что в графе Кейли для G гамильтонов цикл существует тогда и только тогда, когда имеется такое число fc, что 0<k<g/cnt + k Ас, где Р9^с = 7*, 7 = аР~. Указание: представьте элементы группы в виде Р9'ук. 75. [М26] Ориентированный тор Ст х Сп имеет тп вершин (х, у) (0 < х < т, 0 < у < п) и дуги (х, р)—>(х,у)а= ((x+l)modm, у), (х,у)—>(х,у)Р= (х, (р+1) modn). Докажите, что если т > 1 и п > 1, то количество гамильтоновых циклов этого ориентированного графа равно ( fc | [gcd((d — fc)m, fcn) = d], d = gcd(m,n). 76. [M31 ] Пронумерованные числами 0, 1, ..., 63 на рис. 45 ячейки иллюстрируют северо- восточный обход конем тора размером 8x8: если fc находится в ячейке (х*,р*), то (xfc+i,2/fc+i) = (xfc + 2,yk + 1) или (xfc + l,yk + 2) по модулю 8, а (хв-Ы/м) = (хо,уо)- Сколько таких обходов может быть на торе m х п при т, п > 3? Рис. 45. Северо-восточный обход конем. 29 24 19 14 49 44 39 34 58 53 48 43 38 9 4 63 23 18 13 8 3 62 33 28 52 47 42 37 32 27 22 57 17 12 7 2 61 56 51 46 6 41 36 31 26 21 16 11 35 30 1 60 55 50 45 40 0 59 54 25 20 15 10 5 77. [22] Завершите MMIX-программу, внутренний цикл которой показан в (42), используя метод Хипа (27). 78. [М23] Проанализируйте время работы программы из упр. 77, обобщив ее так, чтобы внутренний цикл выполнял г! посещений (сое... ar-i в глобальных регистрах). 79. [20] Какие семь инструкций MMIX выполняют (Обмен полубайтов... ) в (45)? На- пример, если регистр t содержит значение 4, а регистр а—полубайты *12345678, то содержимое регистра а должно измениться на *12345687.
7.2.1.2 ГЕНЕРАЦИЯ ВСЕХ ПЕРЕСТАНОВОК 405 80. [21] Выполните предыдущее упражнение с помощью только пяти инструкций MMIX. Указание: воспользуйтесь MXOR. ► 81. [22] Завершите MMIX-программу (46), указав, каким образом следует выполнить (Про- должение работы методом Лангдона.). 82. [М21] Проанализируйте время работы программы из упр. 81. 83. [22] Воспользуйтесь <т-т-путем из упр. 70 для разработки MMIX-подпрограммы, ана- логичной (42), для генерации всех перестановок *123456 в регистре а. 84. [20] Предложите эффективный способ генерации всех п! перестановок множества {1,..., п} при наличии р параллельно работающих процессоров. ► 85. [25] Будем считать, что п достаточно мало, так что п! помещается в компьютерном слове. Как эффективно преобразовать заданную перестановку а = а± . ..ап множества {1,..., п} в целое число к = г(а) в диапазоне 0 < к < п!? Функции к = т(а) и а = г'- (fc) должны быть вычислимы за О(п) шагов. 86. [20] Отношение частичного упорядочения предполагается транзитивным, т. е. из х -< у иу -< z должно следовать х -< z. Но алгоритм V не требует, чтобы его входное отношение обладало указанным свойством. Покажите, что если х -< у и у -< z, то результат работы алгоритма V не зависит от того, будет ли выполняться условие х -< z. 87. [20] (Ф. Раски (F. Ruskey).) Рассмотрим таблицы инверсий щ...Сп перестановок, посещенных алгоритмом V. Каким замечательным свойством они обладают? (Сравните с таблицами инверсий (4) из алгоритма Р.) 88. [21] Покажите, что алгоритм V может использоваться для генерации всех способов разбиения цифр {0,1,..., 9} на два 3-элементных и два 2-элементных множества. ► 89. [МЗО] Рассмотрим числа to, ti, ..., tn, определенные перед (51). Ясно, что to = ti = 1. а) Назовем индекс j “тривиальным” если tj = tj-i. Например, 9 тривиально в смысле отношений таблицы Юнга (48). Поясните, как модифицировать алгоритм V так, чтобы переменная к принимала только нетривиальные значения. б) Проанализируйте время работы модифицированного алгоритма. Какие формулы за- менят (51)? в) Будем говорить, что отрезок [j .. fc] не является цепочкой, если существует индекс I, такой, что j < I < к и не выполняется I -< I -I- 1. Докажите, что в таком случае tk > 2tj-j. г) Каждая обратная топологическая сортировка a'i... а'п определяет маркировку, кото- рая соответствует отношениям a'j -< ак1, , a'jm -< а'кт, эквивалентным исходным отношениям ji -< fci, ..., jm -< кт- Поясните, как найти такую маркировку, что [j.. fc] не является цепочкой, когда j и к являются последовательными нетривиальными индексами. д) Докажите, что при такой маркировке в формулах из п. (б) М < 4АГ. 90. [М21 ] Алгоритм V можно использовать для генерации всех 77-упорядоченных пере- становок для всех h из заданного множества, т. е. всех a'i...a'n, таких, что a'- < а'^+К для 1 _ 3' < п ~ h (см. раздел 5.2.1). Проанализируйте время работы алгоритма V при генерации им всех перестановок, являющихся одновременно 2- и 3-упорядоченными. 91. [НМ21] Проанализируйте время работы алгоритма V, когда он используется с соот- ношениями (49) для поиска совершенных паросочетаний. 92. [Ml 8] Каково вероятное количество посещенных алгоритмом V перестановок в “слу- чайном” случае? Пусть Рп — количество частичных упорядочений {1,...,п}, т. е. коли- чество отношений, являющихся рефлексивными, антисимметричными и транзитивными. Пусть Qn — количество таких отношений, обладающих тем дополнительным свойством,
406 КОМБИНАТОРНЫЙ ПОИСК 7.2.1.2 что j < к, если j -< к. Выразите ожидаемое количество способов топологической сорти- ровки п элементов, усредненное по всем частичным упорядочениям, через Рп и Qn. 93. [55] Докажите, что все топологические сортировки могут быть сгенерированы таким образом, что на каждом шаге выполняются только одна или две смежные транспозиции. (Пример 1 -< 2, 3 -< 4 показывает, что добиться выполнения одной транспозиции на шаг не всегда возможно, даже если допустить несмежные обмены, поскольку из шести подходящих перестановок нечетными оказываются только две.) 94. [25] Покажите, что в случае совершенных паросочетаний использование отношений (49) позволяет генерировать все топологические сортировки с помощью одной транспози- ции на шаг. 95. [21 ] Подумайте, как сгенерировать все “холмистые” перестановки множества {1,..., п}, т. е. перестановки ai...ап, такие, что ai < аг > аз < щ >•. 96. [21] Подумайте, как сгенерировать все циклические перестановки множества {1,..., п}, т. е. перестановки а±.. .ап, циклическое представление которых состоит из одного цикла с п элементами. 97. [21] Подумайте, как сгенерировать все неупорядочения множества {1,...,п}, т. е. такие ai... ап, у которых ai / 1, аг / 2, аз / 3, .... 98. [НМ23] Проанализируйте асимптотическое время работы метода из предыдущего уп- ражнения. 99. [МЗО] Покажите, что для заданного п > 3 все неупорядочения множества {1,... ,п} можно генерировать, выполняя между посещениями не более двух транспозиций. 100. [21] Подумайте, как сгенерировать все неприводимые (indecomposable) перестановки множества {1,... , п}, т. е. такие ai.. . an, что {ai,... ,aj} {1,...,у} для 1 < j < п. 101. [21] Подумайте, как сгенерировать все инволюции множества {1,...,п}, т. е. пере- становки ai... an, для которых aai ... aa„ = 1... п. 102. [МЗО] Покажите, что все инволюции множества {1,..., п} можно сгенерировать с ис- пользованием не более двух транспозиций между посещениями. 103. [М32] Покажите, что все четные перестановки множества {1,... ,п} могут быть сге- нерированы последовательными циклическими сдвигами трех последовательных элемен- тов. 104. [М22] Перестановка ai... an множества {1,..., п} называется хорошо сбалансирован- ной, если п п У7 = 57 (n + 1 — к)аь- k=l k=l Например, 3142 хорошо сбалансирована при п - 4. а) Докажите, что для п mod 4 = 2 не существует хорошо сбалансированных перестано- вок. б) Докажите, что если ai...an—хорошо сбалансированная перестановка, то таковы- ми же являются обратная перестановка ап ... ai, дополнение (n+1—ai) ... (n+1—an) и инверсия a'i... а'п. в) Определите количество хорошо сбалансированных перестановок для небольших зна- чений п. 105. [26] Слабым порядком называется отношение Ч, являющееся транзитивным (из х у иу Ч z следует х ~< z) и полным (всегда выполняется либо х Ч у, либо у -< х). Мы можем записать х = у, если х < у п у < х\ х у, если х Ч у и у х. Для трех элементов {1,2,3}
7.2.1.2 ГЕНЕРАЦИЯ ВСЕХ ПЕРЕСТАНОВОК 407 имеется тринадцать слабых порядков, а именно 1 = 2 = 3, 1 = 2 4 3, 14 2 = 3, 1 4 2 4 3, 1 = 34 2, 1434 2, 241 = 3, 2414 3, 2 = 34 1, 2434 1, 3 4 1 = 2, 3414 2, 3424 1. а) Поясните, как систематически сгенерировать все слабые порядки {1,... ,п} как по- следовательности цифр, разделенных символами - или 4. б) Слабый порядок может также быть представлен как последовательность ai... ап, где aj = fc, если j предшествуют к знаков 4. Например, при использовании такой записи тринадцатью слабыми порядками на множестве {1,2,3} являются соответственно ООО, 001, 011, 012, 010, 021, 101, 102, 100, 201, 110, 120, 210. Найдите простой способ генерации всех таких последовательностей длиной п. 106. [AfJO] Можно ли выполнить упр. 105, (б) с помощью кода наподобие кода Грея? ► 107. [50] (Джон X. Конвей (John Н. Conway), 1973.) Пасьянс “topswops” начинается с тасования колоды из п карт, помеченных {1,...,п} и размещения их в стопку лицевой стороной вверх. Затем, если верхняя карта—к > 1, снимаем верхние к карт и воз- вращаем их по одной в стопку, тем самым заменяя перестановку .. ,а„ перестановкой Ofc .. .aiOfc+i.. ,ап. Так продолжается до тех пор, пока верхней картой не окажется 1. Например, при п = 5 может получиться семишаговая последовательность 31452 -> 41352 -> 53142 -» 24135 -> 42135 -» 31245 -» 21345 -> 12345. Какая самая длинная последовательность может быть получена при п = 13? 108. [М27] Обозначим наибольшее количество ходов в пасьянсе “topswops” с п картами как f(ri). Докажите, что f(n) < F„+1 — 1. 109. [М{7] Найдите верхнюю и нижнюю границы для функции /(п) из предыдущего упражнения. ► 110. [25] Найдите все перестановки ао ад множества {0,..., 9}, такие, что {00,02,03,07} = {2,5,7,8}, {01,04,05} = {0,3,6}, {01,03,07,03} = {3,4,5,7}, {00,03,04} = {0,7,8}. Предложите также алгоритм для решения большйх задач такого типа. ► 111. [М25] Было предложено несколько ориентированных на перестановки аналогов цик- ла де Брейна. Самый простой и красивый из них—универсальный цикл перестановок, предложенный Б. У. Джексоном (В. W. Jackson) в Discrete Math. 117 (1993), 141-150. Он представляет собой цикл из п! цифр, таких, что каждая перестановка множества {1,..., п} возникает как блок из п — 1 последовательных цифр ровно один раз (с опущенным по- следним элементом, являющимся избыточным). Например, таким универсальным циклом перестановок для п = 3 является (121323), и он, по сути, единственный. Докажите, что универсальный цикл перестановок существует для всех п > 2. Какой из универсальных циклов перестановок для п = 4 лексикографически наименьший? ► 112. [1И50] (А. Вильямс (A. Williams), 2007.) Продолжая выполнять упр. 111, явно по- стройте циклы. а) Покажите, что универсальный цикл перестановок эквивалентен гамильтонову циклу графа Кейли с двумя генераторами: р = (1 2 ... п— 1) и а = (1 2 ... п). б) Докажите, что любой гамильтонов путь в таком графе в действительности является гамильтоновым циклом. в) Найдите такой путь в виде <r2pn-3ai... <r2pn~3a(n_i)!, aj 6 {р,<т} для п > 3. 113. [.НМ45] Сколько в точности имеется универсальных циклов для перестановок < 9 объектов?
408 КОМБИНАТОРНЫЙ поиск 7.2.1.3 7.2.1.3. Генерация всех сочетаний. Комбинаторика часто описывается как “изу- чение перестановок, сочетаний и т. п.” так что теперь мы обратим наше внимание на сочетания. Сочетание из п элементов по t, которое часто называют просто t-соче- танием п элементов, представляет собой способ выбора подмножества размером t из данного множества размером п. Из уравнения 1.2.6-(2) мы знаем, что имеется ровно (") способов сделать это, а из раздела 3.4.2—как выбрать t-сочетание случайным образом. Выбор t из п объектов эквивалентен выбору п — t оставшихся элементов. Эту симметрию можно подчеркнуть, полагая везде далее, что п = s + t , (1) и говоря о t-сочетании п элементов как о “(s, ^-сочетании’.’ Таким образом, (s, t)- сочетание представляет собой способ разделить s +1 объектов на два набора разме- ром s и t. Когда я спрашиваю, сколько существует способов выбрать 21 элемент из 25, на самом деле я спрашиваю, сколькими способами можно выбрать 4 элемента из 25. Способов выбрать 21 элемент столько же, сколько и оставить 4. — ОГАСТЕС ДЕ МОРГАН (AUGUSTUS DE MORGAN), Эссе о вероятностях (Ап Essay on Probabilities) (1838) Имеется два основных способа представления (s, ^-сочетаний: можно пере- числить выбранные элементы Ct... С2С1, а можно работать с бинарными строками an-i ...aiao, для которых On—1 + • • • + 0,1 + ад = t. (2) Строковое представление содержит s нулей и t единиц, соответствующих невы- бранным и выбранным элементам. Представление в виде списка Ct... С2С1 лучше подходит для случаев, когда элементы являются членами множества {0,1,..., п — 1} и мы перечисляем их в убывающем порядке: n > ct > • • • > с2 > ci > 0. (3) Бинарная запись отлично объединяет эти два представления, поскольку список элементов ct С2С1 соответствует сумме п—1 2С‘+ --- + 2С2+2С1 = ^ак2к = (an_i...aia0)2. (4) к=О Конечно, можно также перечислить позиции bs... 6261 нулей в строке an-i... aiao, где n > bs > • > Ьг > bi > 0. (5) Сочетания важны не только в силу своей вездесущести в математике, но и из- за их эквивалентности многим другим конфигурациям. Например, каждое (s,t)- сочетание соответствует сочетанию s + 1 объекта по t с повторениями, именуемому
7.2.1.3 ГЕНЕРАЦИЯ ВСЕХ СОЧЕТАНИЙ 409 также мультисочетанием (multicombination) s + 1 элемента, а именно последова- тельности целых чисел dt... tfedi > обладающей тем свойством, что s > dt > • • > da > di > 0. (6) Одна из причин заключается в том, что dt... d^di удовлетворяет (6) тогда и только тогда, когда Ct... c2ci удовлетворяет (3), где ct = dt+t—l, ..., С2 = d2 + 1, ci = di (7) (см. упр. 1.2.6-60). Есть и другой полезный способ связать сочетания с повторени- ями и обычные сочетания, предложенный Соломоном Голомбом (Solomon Golomb) [АММ 75 (1968), 530-531], а именно—определить ( с.,, если с,- < s: = С Г (8) (eCj_s, если Cj > s. В этом виде числа et... ei не обязательно находятся в убывающем порядке, но мультимножество {ei,e2,... ,et} эквивалентно {ci,C2,... , с*} тогда и только тогда, когда {ei,е2,...,et} является множеством (см. табл. 1 и упр. 1.) (s, 4)-сочетание также эквивалентно композиции* (composition) n + 1 из t + 1 частей, а именно—упорядоченной сумме n+1 = pt +------Fpi+po, гдер4,...,pi,po > 1. (9) Связь с (3) в этом случае имеет вид pt=n~Ct, pt_i = Ct - Ct-i, ..., pi=c2-ci, po = ci+l. (10) Аналогично, если qj = pj — 1, то мы получаем композицию s из t +1 неотрицатель- ных частей s = 9t + ‘‘ + 9i +90, где gt,...,9i,9o > 0, (11) которая связана с (6) соотношениями Qt = s — dt, qt-i = dt — dt-i, ..., 91 = ^2 — di, qo = di- (12) Кроме того, легко видеть, что (s, 4)-сочетание эквивалентно пути длиной s +1 из угла в угол в сетке s х t, потому что такой путь содержит з вертикальных шагов и t горизонтальных. Таким образом, сочетания можно изучать как минимум в восьми различных обликах. В табл. 1 проиллюстрированы все (®) = 20 возможных сочетаний для случая s = t = 3. На первый взгляд, такое обилие представлений может только запутать, но боль- шинство из них можно легко вывести непосредственно из бинарного представления an-i. ..aiao. Рассмотрим, например,“случайную” битовую строку 023--.аюо = 011001001000011111101101, (13) * Здесь можно было бы говорить о разбиении, но во избежание путаницы в дальнейшем будем переводить composition как “композиция” чтобы отличать ее от неупорядоченной суммы, которой является разбиение. — Примеч. пер.
410 КОМБИНАТОРНЫЙ ПОИСК 7.2.1.3 Таблица 1 (3,3)-сочетания и их эквиваленты 0-50-40-30-201 ОО 636261 С3С2С1 d^didi 636261 РЗР2Р1Р0 93929190 path 000111 543 210 000 210 4111 3000 И 001011 542 310 100 310 3211 2100 й 001101 541 320 110 320 3121 2010 й 001110 540 321 111 321 3112 2001 й 010011 532 410 200 010 2311 1200 й 010101 531 420 210 020 2221 1110 й 010110 530 421 211 121 2212 1101 й 011001 521 430 220 030 2131 1020 й 011010 520 431 221 131 2122 1011 й 011100 510 432 222 232 2113 1002 й 100011 432 510 300 ПО 1411 0300 й 100101 431 520 310 220 1321 0210 й 100110 430 521 311 221 1312 0201 й 101001 421 530 320 330 1231 0120 И 101010 420 531 321 331 1222 0111 й 101100 410 532 322 332 1213 0102 и 110001 321 540 330 000 1141 0030 й 110010 320 541 331 111 1132 0021 и 110100 310 542 332 222 1123 0012 и 111000 210 543 333 333 1114 0003 а в которой содержится s = 11 нулей и t = 13 единиц, так что п = 24. Дуальное сочетание bs ... Ь± перечисляет позиции нулей, а именно 23 20 19 17 16 14 13 12 11 4 1, поскольку крайняя слева позиция имеет номер п— 1, а крайняя справа— 0. Основное сочетание Ct... ci перечисляет позиции единиц, а именно 22 21 18 15 10 9 8 7 6 5 3 2 0. Соответствующее мультисочетание dt... di указывает количество нулей справа от каждой единицы: 10 10 8622222211 0. Сочетание pt Ро перечисляет расстояния между последовательными единицами, если представить наличие фиктивных дополнительных единиц слева и справа от бинарной строки: 2133511111212 1. И наконец неотрицательное сочетание qt... go подсчитывает, сколько нулей находит- ся между “ограждениями”-единицами: 1022400000101 0; т. е. мы имеем an-i.. .аюо = 09‘109‘-Ч ... 10911090. (14) Пути в табл. 1 также имеют простую интерпретацию (см. упр. 2).
7.2.1.3 ГЕНЕРАЦИЯ ВСЕХ СОЧЕТАНИЙ 411 Лексикографическая генерация. В табл. 1 сочетания an_i...aiao и ct... ci приведены в лексикографическом порядке, который также является лексикогра- фическим порядком dt -. - di. Обратите внимание, что дуальные сочетания bs ... bi и соответствующие композиции pt... ро и Qt • <7о расположены в обратном лекси- кографическом порядке. Лексикографический порядок обычно предлагает наиболее удобный способ ге- нерации комбинаторных конфигураций. В самом деле, алгоритм 7.2.1.2L уже ре- шает задачу генерации сочетаний в форме ап-1 - <ца(ь поскольку (s, ^-сочетания в форме битовой строки представляют собой не что иное, как перестановки муль- тимножества {s • 0, t • 1}. Этот алгоритм общего назначения может быть упрощен при использовании для данного частного случая (см. также упр. 7.1.3-20, в котором представлена замечательная последовательность из семи битовых операций, пре- образующих любое заданное бинарное число (an_i...<400)2 в лексикографически следующее t-сочетание в предположении, что п не превосходит длину машинного слова). Однако обратимся к генерации сочетаний в ином виде, а именно ct... C2C1; этот вид в большей степени подходит для тех применений сочетаний, которые обычно требуются, и является более компактным, чем битовая строка, при значениях t, малых по сравнению с п. В первую очередь, мы должны вспомнить о том, что при очень небольших значениях t с задачей отлично справляются вложенные циклы. Например, при t = 3 достаточно приведенных далее инструкций: Для сз = 2, 3, ..., п — 1 (в указанном порядке) выполнить: Для ег = 1, 2, ..., C3 — 1 (в указанном порядке) выполнить: . Для ci = 0, 1, ..., ег — 1 (в указанном порядке) выполнить: ' ' Посетить сочетание C3C2C1. (См. аналогичную ситуацию в 7.2.1.1-(3).) С другой стороны, когда t— переменная или не столь малое значение, можно лексикографически генерировать сочетания с помощью следующего общего спосо- ба, обсуждавшегося после алгоритма 7.2.1.2L, а именно — поиска крайнего справа элемента Cj, который может быть увеличен, после чего все последующие элементы Cj-i ...ci получают минимально возможные значения. Алгоритм L (Сочетания в лексикографическом порядке). Этот алгоритм генери- рует все t-сочетания ct... C2C1 из п чисел {0,1,..., п — 1} для данных п > t > 0. В качестве ограничителей используются дополнительные переменные Ct+i и ct+2. L1. [Инициализация.] Установить Cj «— j — 1 для 1 < j < t; установить также Ct+1 «-пи ct+2 0. L2. [Посещение.] Посетить сочетание ct... C2C1. L3. [Поиск у.] Установить j «— 1. Затем, пока сj + 1 = Cj+i, установить Cj <— j — 1 и j <— j + 1. Эти действия повторяются до тех пор, пока в конечном итоге не выполнится условие Cj + 1 Cj+i. L4. [Выполнено?] Завершить выполнение алгоритма, если j > t. L5. [Увеличение cj.] Установить с, <— сj + 1 и вернуться к шагу L2. | Анализ времени работы данного алгоритма несложен. На шаге L3 устанавливается Cj <— j — 1 сразу после посещения сочетания, для которого cj+i = ci -I- j, а количество
412 КОМБИНАТОРНЫЙ ПОИСК 7.2.1.3 таких сочетаний равно количеству решений неравенств п > Ct > • • > Cj+1 > j; (16) однако эта формула представляет собой эквивалент (t — ^-сочетания из п — j объ- ектов {п — 1,..., j}, так что присваивание Cj •<— j — 1 выполняется ровно ("Zj) Р33- Суммирование для 1 < j < t говорит нам, что цикл на шаге L3 выполняется (7)+(7)—(7) (7) - (7) -+С) - Сх) <"> раз, или в среднем / п \ / (п\ _ п! / п! _ t \s + l)/\t) ~ (s + 1)! (t - 1)! / Ht! “ 7+1 ( 8) выполнений за одно посещение. Это отношение меньше 1 при t < s, так что алгоритм L достаточно эффективен для таких случаев. Однако величина t/(s +1) может оказаться весьма большой, когда t близко к п, a s мало. В самом деле, иногда алгоритм L выполняет присваивание Cj «— j — 1 без необходимости, когда Cj и так равно j — 1. Дальнейшее исследование показывает, что не всегда нужно искать индекс j, необходимый на шагах L4 и L5, поскольку корректное значение j зачастую можно предсказать на основе только что выпол- ненных действий. Например, после того, как мы увеличили С4 и сбросили С3С2С1 в начальное значение 210, очередное сочетание неизбежно приведет к увеличению С3. Эти наблюдения приводят к более эффективной версии алгоритма. Алгоритм Т (Сочетания в лексикографическом порядке). Этот алгоритм подобен алгоритму L, но работает быстрее. В нем также предполагается, что 0 < t < п. Т1. [Инициализация.] Установить с} «— j — 1 для 1 < j < t; затем установить Ct+1 <— П, Ct+2 «— 0 и j «- t. Т2. [Посещение.] (В этот момент j — наименьший индекс, такой, что Cj+1 > j.) Посетить сочетание Ct.. . C2C1. Затем, если j > 0, установить х «— j и перейти к шагу Тб. ТЗ. [Простой случай?] ЕслиС1+1 < сг, установить с± «— q+1 и вернуться к шагу Т2. В противном случае установить j ♦— 2. Т4. [Поиск J.] Установить Cj-i «— j — 2 и х «— cj; + 1. Если х = cj+i, установить j «— j + 1 и повторить шаг Т4. Т5. [Выполнено?] Завершить выполнение алгоритма, если j > t. Тб. [Увеличение с3.] Установить Cj «— х, j «— j — 1 и вернуться к шагу Т2. | Теперь на шаге Т2 j = 0 тогда и только тогда, когда ci > 0, так что присваивания на шаге Т4 никогда не будут избыточными. Полный анализ алгоритма Т можно найти в упр. 6. Обратите внимание, что параметр п используется только инициализирующими шагами L1 и Т1, но не в основной части алгоритмов L и Т. Таким образом, можно рассматривать процесс генерации первых (”) сочетаний из бесконечного списка, которые зависят только от t. Это упрощение является результатом того, что при наших соглашениях список t-сочетаний п + 1 элемента начинается со списка t-соче- таний п элементов; именно по этой причине мы использовали лексикографический
7.2.1.3 ГЕНЕРАЦИЯ ВСЕХ СОЧЕТАНИЙ 413 порядок уменьшающихся последовательностей q ... Q, а не возрастающие последо- вательности C1 ... С(. Деррик Лемер (Derrick Lehmer) заметил еще одно приятное свойство алгоритмов L и Т [Applied Combinatorial Mathematics, ed. by E. F. Beckenbach (1964), 27-30]. Теорема L. Сочетание Ct... C2C1 посещается после посещения ровно (?)—(?М?) («” других сочетаний. Доказательство. Имеется (с^) сочетаний cj...c^c], таких, что с' = с^ для t > j > fc и dk < ck, а именно ct-..Cfc+i, за которым следуют fc-сочетания множества {0,... ,Cfc — 1}. | Когда, например, t — 3, числа О+О+О- ©+©+(?), (3)+G2)+С), •••> ©+□+(?)- соответствующие сочетаниям С3С2С1 в табл. 1, просто пробегают последовательность 0,1,2,...,19. Теорема L дает нам простой способ понимания комбинаторной систе- мы счисления степени t, которая позволяет представить каждое неотрицательное целое число N в виде суммы N~ (7)+ + (*2)+(Т)* nt > > n2 > ni - °, единственным образом. [See Ernesto Pascal, Giomale di Matematiche 25 (1887), 45-49.] Биномиальные деревья. Семейство деревьев Тп, определяемое как То = • , для п > 0, (21) возникает в различных важных контекстах и проливает новый свет на генерацию сочетаний. Например, Тц представляет собой а дерево Т5 в более художественном исполнении можно увидеть на фронтисписе тома 1 этого многотомника. Заметим, что дерево Тп очень похоже на дерево Тп-i, за исключением дополни- тельной копии Tn-i; таким образом, всего в дереве Тп имеется 2П узлов. Кроме того, количество узлов на уровне t равно биномиальному коэффициенту (") — именно благодаря этому факту и возникло название “биномиальное дерево” В самом деле,
414 КОМБИНАТОРНЫЙ ПОИСК 7.2.1.3 последовательность меток, встречающихся на пути от корня к каждому узлу на уровне t, определяет сочетание ct . ci, и все сочетания слева направо располагаются в лексикографическом порядке. Таким образом, алгоритмы L и Т могут рассмат- риваться как процедуры обхода узлов биномиального дерева Тп, находящихся на уровне t. Бесконечное биномиальное дерево Тео получается из (21) при тг —> оо. Корень этого дерева имеет бесконечно много ветвей, но каждый узел, за исключением корня на уровне 0, представляет собой корень конечного биномиального поддерева. Все возможные t-сочетания появляются в лексикографическом порядке на уровне t дерева Tqq. Давайте познакомимся с биномиальными деревьями поближе, рассмотрев все возможные способы упаковки рюкзака. Говоря более строго, предположим, что у нас есть п предметов, которые занимают соответственно wn-i, ..., wi, wq единиц емкости рюкзака, где wn-i > • • > wi > w0 > 0. (23) Мы хотим сгенерировать все бинарные векторы an-i... а^ао, такие, что а • w = an-iwn-i -I--1- aiWi + aowo < N, (24) где N — общая емкость рюкзака. Задачу можно сформулировать эквивалентным образом — найти все подмножества С множества {0,1,..., п — 1}, такие, что w(C) — < ЛГ; такие подмножества будем называть допустимыми. Мы будем записывать допустимые подмножества как ci... ct, где ci > - • > q > 0. Нумерация индексов отличается от нумерации, принятой в соглашении (3) выше, поскольку в этой задаче t является переменной. Каждое допустимое подмножество соответствует узлу Тп, и наша цель состоит в том, чтобы обойти все допустимые узлы. Ясно, что родительский узел допу- стимого узла также является допустимым, и то же самое относится и к левому “братскому” узлу, если таковой имеется. Следовательно, описанная ниже простая процедура вполне работоспособна. Алгоритм F (Заполнение рюкзака). Этот алгоритм генерирует все возможные спо- собы ci... Ct заполнения рюкзака для заданных wn-i, ..., wi, wq, и N. Обозначим Sj = Wj — Wj~i для 1 < j < n. Fl. [Инициализация.] Установить t«— 0, cq«— пит <— N. F2. [Посещение.] Посетить сочетание ci... ct, которое использует N — г единиц емкости рюкзака. F3. [Попытка добавить w0-] Если ct > 0 и г > w0, установить t <— t + 1, Q <— 0, г «— j— wq и вернуться к шагу F2. F4. [Попытка увеличить ct.] Если t = 0, завершить работу алгоритма. В противном случае, если ct-i > ct + 1 и г > SCt+i, установить ct «— ct + 1, г «— г — SCt и вернуться к шагу F2. F5. [Удаление с*.] Установить г <— г + wCt, t«— t — 1 и вернуться к шагу F4. | Обратите внимание, что этот алгоритм неявно посещает узлы Тп в прямом поряд- ке, пропуская недопустимые поддеревья. Элемент с > 0 размещается в рюкзаке, если он может поместиться в нем, сразу после того, как процедура исследует все
7.2.1.3 ГЕНЕРАЦИЯ ВСЕХ СОЧЕТАНИЙ 415 возможности использования на этом месте элемента с — 1. Время работы алгоритма пропорционально количеству посещенных допустимых сочетаний (см. упр. 20). Кстати, классическая “задача о рюкзаке” из исследования операций отличается от описанной: в ней требуется найти допустимое подмножество С, такое, что v(C) = 52cecv(c) максимально, где каждому предмету с назначается значение г(с). Алго- ритм F не особенно хорош для решения этой задачи, так как он часто рассматривает случаи, которые могут быть исключены. Например, если С и С представляют собой подмножества {1,..., п — 1}, причем w(C) < w(C') < N — wq и v(C) > v(C), алгоритм F исследует как CUO, так иС'иО, но последнее подмножество никогда не улучшит максимум. Мы рассмотрим методы для решения задачи о рюкзаке позже; алгоритм F предназначен только для тех случаев, когда все допустимые решения могут оказаться потенциально оптимальными. Коды Грея для сочетаний. Вместо простой генерации всех сочетаний зачастую предпочтительно их посещение таким образом, что каждое из них получается путем малого изменения его предшественника. Например, мы можем потребовать то, что Ньенхьюз (Ni- jenhuis) и Вильф (Wilf) назвали “алгоритм двери-вертуш- ки” (revolving door). Представим две комнаты, в которых находятся соответственно s и t человек, и дверь-вертушку между ними. Когда кто-то входит в одну из комнат, другой одновременно ее по- кидает. Можно ли разработать такую последовательность шагов, чтобы каждое (s, ^-сочетание встречалось ровно по одному разу? Ответ—да, причем на самом деле существует огромное количество таких схем. Например, одну из них можно получить, если исследовать все n-битовые строки an-i ...aide в хорошо известном порядке, соответствующем бинарному коду Грея (раздел 7.2.1.1), но выбрать из них только те, которые имеют ровно s нулей и t единиц. В результате получатся строки, образующие код двери-вертушки. Вот доказательство этого факта. Бинарный код Грея определяется рекуррент- ным соотношением Гп = 0Гп_1, 1Г„_! из 7.2.1.1-(5), так что его (s, ^-подпоследо- вательность удовлетворяет рекуррентному соотношению rst — or(s_1)t, ir^t_!j, (25) где st > 0. Мы также имеем Г8о = 0s и Го* = 1*. Следовательно, по индукции понятно, что Гя* начинается с 0®Г и заканчивается 10®lt-1 при st > 0. Переход, соответствующий запятой в (25), выполняется от последнего элемента 0Г(8_!)* к по- следнему элементу 1Гв(*_!), а именно от 010s- 1lt-1 = 010s- 1llt“2 к 110slt-2 = 110s-101t-2 при t > 2, и удовлетворяет ограничению, накладываемому правилом двери-вертушки. Случай t = 1 также подтверждается. Например, Г33 задается столбцами 000111 011010 110001 101010 001101 011100 110010 101100 001110 010101 110100 100101 (26) 001011 010110 111000 100110 011001 010011 101001 100011 и Г23 можно обнаружить в первых двух столбцах этого массива. Еще один поворот двери выполняет переход от последнего элемента к первому. [Эти свойства Г8*
416 КОМБИНАТОРНЫЙ ПОИСК 7.2.1.3 были открыты Д. Э. Миллер (J. Е. Miller) в ее диссертации (Columbia University, 1971), а затем независимо Д. Т. Тангом (D. Т. Tang) и Ч. Н. Лю (С. N. Liu), IEEE Trans. С-22 (1973), 176-180. Реализация без использования циклов была представ- лена Д. Р. Битнером (J. R. Bitner), Г. Эрлихом (G. Ehrlich) и Э. М. Рейнгольдом (Е. М. Reingold), САСМ 19 (1976), 517-521.] При преобразовании битовых строк из (26) в соответствующие списки индексов c3C2Cj схема сочетаний становится очевидной. 210 431 540 531 320 432 541 532 321 420 542 520 310 421 543 521 430 410 530 510 (27) Первый компонент с3 появляется в неубывающем порядке, но для каждого фик- сированного значения с3 значения с3 находятся в невозрастающем порядке. Для фиксированных же пар значений с3сг значения ci вновь находятся в неубывающем порядке. То же самое справедливо и в общем случае: все сочетания Ct... c3ci в коде Грея двери-вертушки Г<,4 находятся в лексикографическом порядке (ct, -Ct-1, Ct-2, - (-1)‘ ^i). (28) Это свойство доказывается по индукции, поскольку при использовании списка ин- дексов вместо битовой строки при st > 0 (25) записывается как Tst = r(s_1)f, (s+t—1)Г^^_1}. (29) Таким образом, эта последовательность может эффективно генерироваться с по- мощью следующего алгоритма В. Г. Пейна (W. Н. Payne) [см. ACM Trans. Math. Software 5 (1979), 163-172]. Алгоритм R (Сочетания двери-вертушки). Этот алгоритм генерирует все t- сочетания Ct .. c3ci из {0,1,..., п — 1} в лексикографическом порядке чередующейся последовательности (28), в предположении, что n > t > 1. Используется вспома- гательная переменная ct+i- Шаг R3 имеет два варианта—в зависимости от того, четно значение t или нечетно. R1. [Инициализация.] Установить Cj *— j — 1 для t > j > 1 и ct+i «— n. R.2. [Посещение.] Посетить сочетание Ct . - c3ci. R.3. [Простой случай?] Если t нечетно: если ci+1 < сг, увеличить щ на 1 и вернуться к шагу R2, в противном случае установить j <— 2 и перейти к шагу R4. Если t четно: если щ > 0, уменьшить q на 1 и вернуться к шагу R2, в противном случае установить j «— 2 и перейти к шагу R5. R4. [Попытка уменьшения cj-] (В этот момент Cj = Cj-i+1.) Если Cj > j, установить Cj <— Cj-i, Cj-i «— j — 2 и вернуться к шагу R2. В противном случае увеличить j на 1. R5. [Попытка увеличения с^.] (В этот момент Cj-i = j — 2.) Если Cj + 1 < Cj+i, установить Cj-i <— cj, Cj «— Cj + 1 и вернуться к шагу R2. В противном случае увеличить j на 1 и, если j < t, перейти к шагу R4. В противном случае алгоритм завершает работу. |
7.2.1.3 ГЕНЕРАЦИЯ ВСЕХ СОЧЕТАНИЙ 417 В упр. 21-25 открываются новые свойства этой интересной последовательности. Од- но из них представляет собой красивую пару для теоремы L: сочетание ctCt_i... C2C1 посещается алгоритмом R после посещения ровно N = П‘) - + (-D*(%+1) - - [* —™>1 <30) других сочетаний. Это представление числа N можно назвать знакопеременной комбинаторной системой счисления степени t. Одно из следствий, например, за- ключается в том, что любое положительное целое число может быть единственным образом представлено в виде N = (“) — (*) + (j), где a > b > с > 0. Алгоритм R говорит нам, как добавить 1 к N в этой системе счисления. Хотя строки (26) и (27) не находятся в лексикографическом порядке, они пред- ставляют собой пример более общей концепции, называющейся облексным порядком (genlex order), название которой придумано Тимоти Уолшем (Timothy Walsh). Го- ворят, что последовательность строк сц, ..., сщ находится в облексном порядке, когда все строки с общим префиксом расположены последовательно. Например, все 3-сочетания, начинающиеся с 53, в (27) находятся рядом. Облексный порядок означает, что строки могут быть размещены в структуре луча (trie), как на рис. 31 в разделе 6.3, но с произвольным упорядочением дочер- них узлов каждого узла. При обходе луча в любом порядке, таком, что каждый узел посещается непосредственно до или после своих потомков, все узлы с общим префиксом — т. е. все узлы поддуча—обходятся последовательно. Это делает об- лексный порядок весьма удобным, поскольку он соответствует рекурсивным схемам генерации. Многие алгоритмы генерации n-кортежей, с которыми мы встречались, выдают тот или иной облексный порядок. Подобным образом метод “простых изменений” (plain changes) (алгоритм 7.2.1.2Р) посещает перестановки в облексном порядке соответствующей таблицы инверсий. Метод двери-вертушки из алгоритма R представляет собой облексную подпро- грамму, которая на каждом шаге изменяет только один элемент сочетания. Однако этот принцип не всегда выдерживается, так как зачастую приходится одновременно изменять два индекса Cj, чтобы сохранялось условие ct > • • • > С2 > Cj. Например, алгоритм R изменяет 210 на 320, и в (27) можно найти девять таких “перекрестных” изменений. Источник этого дефекта может быть отслежен в доказательстве того, что (25) удовлетворяет свойству двери-вертушки: мы заметили, что, когда t > 2, за строкой 010®-1 llt-2 следует строка 110s-101t-2. Следовательно, рекурсивное построение Гя( включает переходы вида 110“0 w 010“1, когда подстрока наподобие 11000 сменяет- ся подстрокой 01001 или наоборот—словом, когда две единицы пересекают одна Другую. Путь Грея для сочетаний называется гомогенным, или однородным {homogeneous), если на каждом шаге изменяется только один из индексов Cj. Гомогенная А Со схема в виде битовой строки характеризуется тем, что Л \~J Г~/ Г7 Г содержит только переходы вида 10“ ♦-+ 0“1, a > 1 при \ переходе от одной строки к следующей. При гомоген- J s' 14 Зак. 3331
418 КОМБИНАТОРНЫЙ ПОИСК 7.2.1.3 ной схеме мы можем, например, сыграть все t-нотные аккорды на n-нотной клавиа- туре, перемещая при переходе от одного аккорда к следующему только один палец. Небольшая модификация (25) дает нам гомогенную облексную схему для (s, t)- сочетаний. Основная идея состоит в построении последовательности, которая на- чинается с 0®1* и заканчивается 1*0® — при этом тут же напрашивается следующая рекурсия: пусть Ks0 = 0®, Kot = 1*, ^s(-i) = 0 и К st — 0tf(s-i)f, 11 Ks(t_2) Для st > 0. (31) В местах запятых в этой последовательности расположены строки 01*0®-1, за кото- рой следует 101*-10®-1, и 10®1*-1, за которой следует 110®1*-2. Оба эти перехода однородны, хотя второй и требует переноса единицы через s нулей. Сочетания К33 при в = t = 3 представляют собой вид 000111 010101 101100 100011 001011 010011 101001 110001 001101 011001 101010 110010 001110 011010 100110 110100 010110 011100 100101 111000 в форме битовых строк, а соответствующая схема (32) расположения пальцев имеет 210 420 532 510 310 410 530 540 320 430 531 541 321 431 521 542 421 432 520 543 (33) При преобразовании однородной схемы для обычных сочетаний Ct... Q в соот- ветствующую схему (6) для сочетаний с повторениями ф ... ф сохраняется свойство, что на каждом шаге изменяется только один индекс dj. При конвертации в соот- ветствующие схемы (9) и (11) для композиций pt.. ,р0 и qt... qo при изменении с3 происходит изменение только двух (соседних) частей. Схемы, близкие к идеальной. Однако можно поступить еще лучше! Все (в, t)- сочетания могут быть сгенерированы последовательностью строго гомогенных пере- ходов, представляющих собой либо 01 «-> 10, либо 001 ♦-+ 100. Другими словами, можно потребовать, чтобы на каждом шаге единственный индекс Cj изменялся не более чем на 2. Назовем такие схемы близкими к идеальным (near-perfect). Столь строгое требование в действительности делает разработку близких к иде- альной схем достаточно простой, поскольку доступным оказывается только сравни- тельно небольшое количество вариантов. Т. А. Дженкинс (Т. A. Jenkyns) и Д. Мак- Карти (D. McCarthy) заметили, что если ограничиться облексными методами, близ- кими к идеальным на n-битовых строках, то такие методы можно легко охаракте- ризовать следующей теоремой [Ars Combinatoria 40 (1995), 153-159]. Теорема N. Если st > 0, существует ровно 2s близких к идеальному способов перечисления всех (в, ^-сочетаний в облексиом порядке. В действительности для каждого значения 1 < а < s имеется ровно одна такая последовательность Nsta, ко- торая начинается с 1*0® и заканчивается 0°1*0®_°; прочие s возможностей являются обратными последовательностями N^a.
7.2.1.3 ГЕНЕРАЦИЯ ВСЕХ СОЧЕТАНИЙ 419 Таблица 2 Последовательности Чейза для (3,3)-сочетаний А33 II В33 — С33 543 531 321 420 543 520 432 410 541 530 320 421 542 510 430 210 540 510 310 431 540 530 431 310 542 520 210 430 541 531 421 320 532 521 410 432 521 532 420 321 Доказательство. Теорема, определенно, справедлива при s = t = 1; для прочих случаев мы используем индукцию по s +1. Последовательность Nata, если таковая существует, должна иметь вид IJQt-i), 0Y(s_i)t для некоторых близких к идеаль- ным облексных последовательностей и 1(в_1)*. Если t = 1, то последователь- ность Xs(t~i) представляет собой единственную строку 0е; следовательно, T(e-i)t должна представлять собой N^a-i)i(a-i) ПРИ л > 1 и N^^u при а = 1. С другой стороны, если t > 1, из условия близости к идеалу вытекает, что последняя строка Xs(t_i) не может начинаться с 1; следовательно, = Ne(t-i)b для некоторого Ь. Если а > 1, Y(s_ijt должно представлять собой N(a-i)t(a-i), следовательно, b должно быть 1; аналогично Ь должно быть 1 при s = 1. В противном случае мы имеем а= 1 < s, и это приводит к V(s^i)t = N^_1ytc для некоторого с. Переход от 10ь1<_10в-ь к Qc+iitpe-i-c является близким к идеальному, только если с = 1 и b = 2. | Доказательство теоремы N дает следующую рекурсивную формулу при st > 0: если 1 < a < s; Nata — 1 01‘, если 1 = a < s; если 1 = a = s. (34) Конечно, также NaOa = 0s. Пусть Agt = Nati и = Nat2- Эти близкие к идеальным последовательно- сти, открытые Филлипом Дж. Чейзом (Phillip J. Chase) в 1976году, образуются в результате сдвига крайнего слева блока единиц вправо на одну или две позиции соответственно и удовлетворяют следующим взаимно рекуррентным соотношениям: .Ast = lBs(t_!), O-A(e-i)t- (35) “Чтобы сделать один шаг вперед, сделайте два шага вперед и один шаг назад; чтобы сделать два шага вперед, сделайте первый шаг, а затем другой’.’ Эти уравнения выполняются для всех целых значений s и t, если мы определим Aat и Bat как 0 при отрицательных s или t, за исключением Аоо = Boo — е (пустая строка). Таким образом, Aat в действительности выполняет min(s, 1) шагов вперед, a Bat—min(s, 2) шагов вперед. Например, в табл. 2 приведены листинги для s = t = 3 с примене- нием эквивалентной записи в виде списка индексов C3C2C1 вместо битовой строки 05040302®! До- Чейз заметил, что компьютерная реализация этих последовательностей стано- вится проще, если определить Cat = -^et> Bat, если s +1 нечетно; если s -I-1 четно; \в* если s + t четно; если s + t нечетно. (36)
420 КОМБИНАТОРНЫЙ поиск 7.2.1.3 [См. Congressus Numerantium 69 (1989), 215-242.] Тогда cst = < 1 lCs(t_i), 0C(s_1)t, (lCs(t-i), 0C(s_1)t, если s +1 нечетно; если s + t четно; (37) cst = < f OC(s-ijt, lCs(t_i), (0C(s_i)t, ics(t-i), если s +1 четно; если s + t нечетно. (38) Когда бит aj готов к изменению, путем проверки j на четность можно сказать, в каком месте рекурсии мы находимся. На самом деле последовательность Cat может быть сгенерирована удивительно простым алгоритмом, основанным на общих идеях, применимых к любой облексной схеме. Будем говорить, что бит aj в облексном алгоритме активный, если его изме- нение предполагается до того, как будет изменено что-либо слева от него (другими словами, узел активного бита в соответствующем луче не является крайним справа дочерним узлом своего родителя). Предположим, что у нас есть вспомогательная таблица wn .. .wiwo, где Wj = 1 тогда и только тогда, когда бит aj активен или когда j < г, где г — наименьший индекс, такой, что аг ао! мы также полагаем wn = 1. Тогда для поиска следующей за an-i... aiao битовой строки можно использовать приведенный ниже метод. Установить j «— г. Если Wj = 0, установить Wj «— 1, j «— j + 1 и повторять эти действия до тех пор, пока не будет достигнуто Wj = 1. Если у = п, завершить выполнение алгоритма; в противном . случае установить Wj «— 0. Изменить aj на 1 — aj и выполнить все ' прочие изменения в aj-i ...адаг, которые применяются в конкрет- ной используемой облексной схеме. Красота этого подхода основана на том факте, что цикл гарантированно эффекти- вен: можно доказать, что операция j «— j + 1 будет выполняться в среднем менее одного раза для каждого шага генерации (см. упр. 36). Анализируя переходы при изменении битов в (37) и (38), можно легко конкре- тизировать остальные детали. Алгоритм С (Последовательность Чейза). Этот алгоритм посещает все (s, t)- сочетания an-i. ..aiao, где п = s + t, в близкой к идеальной последовательности Чейза Cat. Cl. [Инициализация.] Установить aj <— 0 для 0 < j < s, aj <— 1 для s < j < n и Wj <— 1 для 0 < j < n. Если s > 0, установить г <— s; в противном случае установить г«— t. С2. [Посещение.] Посетить сочетание an_j... aiao- СЗ. [Поиск j и ветвление.] Установить j «— г. Если Wj = 0, установить Wj «— 1 и j «— j+1 и повторять эти действия до тех пор, пока Wj =0. Прекратить работу алгоритма, если j = п; в противном случае установить Wj <— 0 и выполнить ветвление: перейти к С4, если j нечетно и aj 0; к С5, если j четно и aj 0; к С6, если j четно и aj = 0; и к С7, если j нечетно и aj = 0.
7.2.1.3 ГЕНЕРАЦИЯ ВСЕХ СОЧЕТАНИЙ 421 С4. [Переход вправо на единицу.] Установить aj-i «— 1, а, «— 0. Если г = j и j > 1, установить г «— j — 1; в противном случае при г = j — 1 установить г «— j. Вернуться к шагу С2. С5. [Переход вправо на два.] Если а^-г / 0, перейти к шагу С4. В противном случае установить aj-2 <— 1, aj <— 0. Если г = j, установить г <— тах(у — 2,1); в противном случае, если г = j — 2, установить г «— j — 1. Вернуться к шагу С2. С6. [Переход влево на единицу.] Установить aj <— 1, aj-i «— 0. Если г = j и j > 1, установить г «— j — 1; в противном случае при т = j — 1 установить г «— j. Вернуться к шагу С2. С7. [Переход влево на два.] Если aj-i 0, перейти к шагу С6. В противном случае установить aj <— 1, aj_2 «— 0. Если г = j — 2, установить г «— j; в противном случае при г = j — 1 установить г «— j — 2. Вернуться к шагу С2. | * Анализ последовательности Чейза. Магические свойства алгоритма С требу- ют дальнейшего исследования, и более близкое рассмотрение оказывается весьма поучительным. Для данной битовой строки an-i ...щао определим ап = 1, ип = n mod 2 и Uj = (1 — uj+i)aj+i, Vj = (uj + j) mod 2, Wj = (vj + aj) mod 2 (40) для n > j > 0. Например, у нас может быть п = 26 и а25 - --аюо = 11001001000011111101101010, а25 • uiuo = 10100100100001010100100101, «25• - - = 00001110001011111110001111, ( ) W25 • wiwo = 11000111001000000011100101. Используя эти определения, по индукции можно доказать, что Vj = 0 тогда и только тогда, когда бит aj в рекуррентных соотношениях (37)—(38), которые генерируют On—1 ...aiOo, “управляется” С, а не С, за исключением случая, когда aj является частью заключительной серии нулей или единиц с правого конца. Следовательно, Wj для г < j < п согласуется со значением, вычисленным алгоритмом С в момент, когда посещается an-i... aiOo- Эти формулы могут использоваться для определе- ния точного места появления данного сочетания в последовательности Чейза (см. упр. 39). Если мы хотим работать со списком индексов Ct... с2с\, а не с битовыми стро- ками an-i ...aiao, удобно слегка изменить обозначения, записав Ct(n) вместо Cst и Ct(n) вместо Cat, где s + t = п. Тогда Go(n) = Go(n) = e, а рекуррентные соотношения для t > 0 приобретают вид если п четно: , (42) если п нечетно; если п нечетно; , . (43) если п четно. C,+1(n +1) = | пС,(п>’ С,+1(п>' (nCt(n), Ct+i(n), л □. n - J C‘+i(n)’ п&(п), Ct+i (n + 1) = < Cfj.1 (п). nCf(n).
422 КОМБИНАТОРНЫЙ ПОИСК 7.2.1.3 Эти новые уравнения могут быть развернуты, что дает, например Ct+1(9) = 8Ct(8), 6Cf(6), 4Ct(4), 3Ct(3), 5Ct(5), 7Ct(7); Ct+1(8) = 7Ct(7), 6Ct(6), 4Ct(4), ..., 3Ct(3), 5Ct(5); ~ (44) Cf+1(9) = 6Ct(6), 4Ct(4), ..., 3Ct(3), 5Ct(5), 7Ct(7), 8Ct(8); Ct+i(8) = 6Ct(6), 4Ct(4), ..., 3Ct(3), 5Ct(5), 7Ct(7). Обратите внимание на то, что одна и та же схема доминирует во всех четырех последовательностях. Смысл в средине зависит от значения t: мы просто пропускаем все члены nCt(n) и nCt(n) при п < t. За исключением краевых эффектов в самом начале и конце, все раскрытия формул в (44) основаны на бесконечной прогрессии ..., 10, 8, 6, 4, 2, 0, 1, 3, 5, 7, 9, ..., (45) которая представляет собой естественный способ размещения неотрицательных чи- сел в бесконечной в обе стороны последовательности. Если опустить в (45) все члены, меньшие t, для некоторого заданного целого t > 0, то оставшиеся члены будут поддерживать то свойство, что соседние элементы отличаются либо на 1, либо на 2. Ричард Стенли (Richard Stanley) предложил для этой последовательности название endo-order, исходя из первых букв фразы “even numbers decreasing, odd... ” (“четные числа уменьшаются, нечетные... ”*). (Заметим, что если оставить только члены, меньшие N, и дополнить их до N, то эта последовательность превратится в последовательность “органных труб”; см. упр. 6.1-18.) Можно запрограммировать рекурсии (42) и (43) непосредственно, но интереснее развернуть их с использованием (44), получив таким образом итеративный алго- ритм, аналогичный алгоритму С. Такой алгоритм требует только O(t) ячеек памяти и особенно эффективен, когда t мало по сравнению с п. Детальнее этот вопрос рассматривается в упр. 45. •Перестановки мультимножеств, близкие к идеальным. Последовательности Чейза естественным образом приводят к алгоритму, который будет генерировать перестановки любого мультимножества {so • 0, si -1,..., Sd d} близким к идеальному способом, что означает следующее: i) каждый переход имеет вид л ибо Oj+iaj «-» ajaj+i, либо aj+iajaj~i «-> aj-ia,jaj+i; ii) переходы второго вида обладают тем свойством, что aj = min(aj_i,aj+i). Алгоритм С говорит нам, как добиться этого при d — 1, и мы можем распространить его на большие значения d с помощью следующей рекурсивной конструкции [САСМ 13 (1970), 368-369, 376]. Предположим, что «о, «1, •••, «А-1 представляет собой произвольный близкий к идеальному список перестановок {si 1,..., Sd • d}. Затем алгоритм С при s = So и t = si + • • + Sd говорит нам, каким образом сгенерировать список Aj = ajO3, ..., 0oQj0s-“ , (46) * По всей видимости, наиболее адекватным переводом на русский язык могла бы быть “чун- упорядоченная последовательность’!—Примеч. пер.
7.2.1.3 ГЕНЕРАЦИЯ ВСЕХ СОЧЕТАНИЙ 423 в котором все переходы представляют собой либо Огг «-»ггО, либо ООгг «-»ггОО; послед- няя запись содержит а = 1 или 2 ведущих нуля, в зависимости от значений s и t. Таким образом, все переходы последовательности Ло, Af, Л2, ..., (An_j или A^_j) (47) близки к идеальным; ясно, что этот список содержит все перестановки. Например, вот перестановки {0,0,0,1,1,2}, сгенерированные этим способом: 211000,210100,210001,210010,200110,200101,200011,201001,201010,201100, 021100,021001,021010,020110,020101,020011,000211,002011,002101,002110, 001120,001102,001012,000112,010012,010102,010120,011020,011002,011200, 101200,101020,101002,100012,100102,100120,110020,110002,110200,112000, 121000,120100,120001,120010,100210,100201,100021,102001,102010,102100, 012100,012001,012010,010210,010201,010021,000121,001021,001201,001210. *Идеальные схемы. Почему мы должны заниматься близкими к идеальным гене- раторами наподобие Cst, вместо того чтобы потребовать, чтобы все переходы имели наиболее простой вид 01«->10? Одна из причин в том, что идеальные схемы существуют не всегда. Например, в 7.2.1.2-(2) было показано, что нет способа сгенерировать все шесть перестановок мультимножества {1,1,2,2} с помощью перестановок смежных элементов; таким образом, нет и идеальной схемы для (2,2)-сочетаний. В действительности наши шансы добиться идеала составляют около 1 к 4. Теорема Р. Генерация всех (s, 0-сочетаний ae+t_i... aiao путем обмена смежных элементов 01 «-» 10 возможна тогда и только тогда, когда s < 1 или t < 1, или st нечетно. Доказательство. Рассмотрим все перестановки мультимножества {s - 0, t • 1}. Из упр. 5.1.2-16 мы знаем, что число таких перестановок т^, имеющих к инверсий, представляет собой коэффициент при zk в z-номиальном коэффициенте . s+t t (S+ ) = П (1 +z + - - - + zfc-1) / JJ(1 + z + - - • + zfc-1). (48) 2 fc=e+i fc=i Каждый обмен смежных элементов изменяет количество инверсий на ±1, так что идеальная схема генерации возможна, только если приблизительно половина всех перестановок имеет нечетное количество инверсий. Более точно значение (s^f)_1 = то — mi + m2 — • должно быть равно 0 или ±1. Но в упр. 49 показано, что (Т)_, = (L(\t/2J/2J)[>(,e™Ol’ (49) и если не выполняется ни одно из условий s < 1, t < 1 или st нечетно, то эта величина превышает 1. И наоборот: идеальные схемы легко построить при s < 1 или t < 1, и они также возможны при нечетном st. Первый нетривиальный случай осуществляется при s = t = 3, для которого имеется четыре существенно разных решения; наиболее
424 КОМБИНАТОРНЫЙ ПОИСК 7.2.1.3 симметричное из них следующее: 210—310—410 — 510 — 520 — 521—531 — 532—432—431 — 421 — 321—320 — 420 — 430 — 530 — 540 — 541 — 542 — 543 (50) (см. упр. 51). Несколько авторов построили гамильтоновы цепи в соответствующих графах для произвольных нечетных чисел sat; например, метод Идеса (Eades), Хикки (Hickey) и Рида (Read) [JACM 31 (1984), 19-29] представляет собой инте- ресный пример программы с рекурсивными подпрограммами. Однако, к сожале- нию, ни одна из известных конструкций не является достаточно простой, чтобы ее можно было кратко описать или реализовать с приемлемой эффективностью. Таким образом, практическая важность идеальных генераторов сочетаний пока что не доказана. | Резюмируя, мы видим, что изучение (а, ^-сочетаний приводит ко многим при- влекательным схемам, одни из которых имеют большую практическую ценность, а другие просто элегантны и красивы. На рис. 46 показаны основные схемы, доступ- ные в случае s = t = 5, когда всего имеется (g0) = 252 сочетаний. Лексикографи- ческий порядок (алгоритм L), код Грея двери-вертушки (алгоритм R), гомогенная схема К55 из (31) и близкая к идеальной схема Чейза (алгоритм С) показаны на рис. 46, (а)-(г) соответственно. На рис.46, (д) показана близкая к идеальной схема, которая настолько близка к идеальной, насколько это возможно при условии сохра- нения облексного порядка массива с (см. упр. 34). На рис.46, (е) показана идеальная схема Идеса-Хикки-Рида. Наконец, на рис. 46, (ж) и (з) показаны сочетания, полу- ченные путем поворотов ajUj-i... ао «— aj-i... aoaj или обменов aj «-> ао, наподобие алгоритмов 7.2.1.2С и 7.2.1.2Е (см. упр. 55 и 56). •Сочетания мультимножества. Если мультимножество может иметь перестанов- ки, то оно может иметь и сочетания. Например, рассмотрим мультимножество {b,b,b,b,g,g,g,r,r,r,w,w}, представляющее корзину, в которой содержатся четыре синих мяча, по три зеленых и красных и два белых. Имеется 37 способов выбора пяти мячей из этой корзины; вот их перечисление в лексикографическом порядке: gbbbb, ggbbb, gggbb, rbbbb, rgbbb, rggbb, rgggb, rrbbb, rrgbb, rrggb, rrggg, rrrbb, rrrgb, rrrgg, wbbbb, wgbbb, wggbb, wgggb, wrbbb, wrgbb, wrggb, wrggg, wrrbb, wrrgb, wrrgg, wrrrb, wrrrg, wwbbb, wwgbb, wwggb, wwggg, wwrbb, wwrgb, wwrgg, wwrrb, wwrrg, wwrrr. (51) Этот факт может показаться незначительным и/или понятным лишь посвященным, но, как мы увидим ниже из теоремы W, лексикографическая генерация сочетаний мультимножества дает оптимальное решение важных комбинаторных задач. Якоб Бернулли (James Bernoulli) заметил в своей работе Ars Conjectandi (1713), 119-123, что можно перечислить все такие сочетания, рассматривая коэффициент при z5 в произведении (1 + z 4- z2)(l + z + z2 + z3)2(l + z + z2 + z3 + z4). В самом деле, это наблюдение легко понять, поскольку мы получим все возможные варианты выбора мячей из корзины, если перемножим полиномы (1 + w + ww)(l + г + гг + ггг)(1 + д + дд + ддд){1 + b + bb + bbb + bbbb).
7.2.1.3 ГЕНЕРАЦИЯ ВСЕХ СОЧЕТАНИЙ 425 Рис. 46. Примеры схем (5,5)-сочетаний: а) лексикографическая; б) двери-вертушки; в) гомогенная; г) близкая к идеальной; д) еще более близкая к идеальной; е) идеальная; ж) суффиксная; з) с правым обменом. (а) (б) (в) (г) (д) (е) (ж) (з)
426 КОМБИНАТОРНЫЙ ПОИСК 7.2.1.3 Сочетаниям мультимножества можно поставить в соответствие композиции с ограничениями на слагаемые, или ограниченные композиции (bounded compositions), т. е. композиции, в которых отдельные части ограничены. Например, 37 мультисо- четаний, перечисленных в (51), соответствуют 37 решениям 5 = г3+г2+Г1+г0, 0 < г3 < 2, 0<r2,Ti<3, 0 < г0 < 4, а именно 5 = 04-04-14-4 — 04-04-24-3 = 04-04-34-2 = 04-14-04-4 — • • • — 24-34-04-0. Композиции с ограничениями на слагаемые, в свою очередь, являются частным случаем факторных таблиц (contingency tables), играющих важную роль в ста- тистике. И все эти комбинаторные конфигурации могут быть сгенерированы как с помощью кодов наподобие кода Грея, так и в лексикографическом порядке. В упр. 60-63 раскрываются некоторые из используемых при этом идей. *Тени. В математике часто встречаются множества сочетаний. Например, множес- тво 2-сочетаний (а именно множество неупорядоченных пар), по сути, представляет собой граф, а множество t-сочетаний для произвольного t называется однород- ным гиперграфом (uniform hypergraph). Если вершины выпуклого многогранника несколько смещены, так что никакие три из них не лежат на одной прямой, никакие четыре — в одной плоскости и, вообще, никакие t 4- 1 вершин не лежат в (t — 1)- мерной гиперплоскости, то получаемые (t — 1)-мерные грани представляют собой “симплексы” вершины которых имеют большое значение в компьютерных прило- жениях. Исследователи выяснили, что такие множества сочетаний имеют важные свойства, связанные с лексикографической генерацией. Если а — произвольное t-сочетание ct... c2ci, его тенью да является множество всех его (t — 1)-элементных подмножеств ct_i... c2ci, ..., ct... C3C1, ct... сзс2. На- пример, 05310 = {310,510,530,531}. Можно также представить t-сочетание в виде битовой строки On-i.. .щао» в этом случае да представляет собой множество всех строк, получаемых заменой 1 наО: 0101011 = {001011,100011,101001,101010}. Если А—произвольное множество t-сочетаний, определим его тень дА = (J{0q | a G А} (52) как множество всех (t — 1)-сочетаний в тенях его членов. Например, 005310 = {10,30,31,50,51,53}. Эти определения применимы также к сочетаниям с повторениями, т. е. к муль- тисочетаниям: 05330 = {330,530,533} и 005330 = {30,33,50,53}. В общем слу- чае, если А — множество t-элементных мультимножеств, дА является множеством (t — 1)-элементных мультимножеств. Заметим, однако, что сама тень дА никогда не содержит повторяющихся элементов. Верхняя тень (upper shadow) да по отношению к универсуму U определяется аналогично, но идет от t-сочетаний к (t 4- 1)-сочетаниям: да = {0CJ7|q€00} для a G U; (53) дА = (J{ £а | a G А } для А С U. (54) Если, например, U = {0,1,2,3,4,5,6}, то мы получим g5310 = {53210,54310,65310}; с другой стороны, если U = {оо • 0, оо • 1,..., оо • 6}, то £5310 = {53100,53110, 53210,53310,54310,55310,65310}.
7.2.1.3 ГЕНЕРАЦИЯ ВСЕХ СОЧЕТАНИЙ 427 Следующие фундаментальные теоремы, имеющие множество применений в раз- личных отраслях математики и информатики, говорят нам, насколько малыми мо- гут быть тени множеств. Теорема К. Если А—множество из N t-сочетаний элементов универсума U = {0,1,..., п — 1}, то |SA| > \dPNt| и |рА| > IgQjvntl, (55) где Put обозначает первые N сочетаний, сгенерированных алгоритмом L, а именно N лексикографически наименьших сочетаний ct...C2Ci, удовлетворяющих условию (3), a QNnt обозначает последние N лексикографически наибольших таких сочета- ний. | Теорема М. Если А — множество из N t-мультисочетаний элементов универсума U = {оо • 0, оо • 1,..., оо •«}, то |5А| > |9Р№| и |gA| > (56) где PNt обозначает первые N лексикографически наименьших мультисочетаний ф... d2<li, удовлетворяющих условию (6), a Qnsi обозначает N лексикографически наибольших таких сочетаний. | Обе эти теоремы являются следствием более строгого результата, который будет доказан позже. Теорема К обычно называется теоремой Крускала-Катоны, так как она была открыта Д. Б. Крускалом (J. В. Kruskal) [Math. Optimization Techniques, ed. by R. Bellman (1963), 251-278], а позже заново открыта Г. Катоной (G. Katona) [Theory of Graphs, Tihany 1966, ed. by Erdos and Katona (Academic Press, 1968), 187-207]; ранее неполное доказательство было приведено М. П. Шютценбергером (М. Р. Schiitzenberger) в его малоизвестной публикации [RLE Quarterly Progress Re- port 55 (1959), 117-118]. ТеоремаМ была доказана Ф. С. Маколеем (F. S. Macaulay) многими годами ранее [Proc. London Math. Soc. (2) 26 (1927), 531-555]. Перед тем как приступить к доказательству (55) и (56), рассмотрим более вни- мательно, что означают эти формулы. Из теоремы L мы знаем, что первые N из всех t-сочетаний, посещенных алгоритмом L, — те, которые предшествуют п«.. .П2Щ, где является комбинаторным представлением N степени t. Иногда такое представление имеет меньше t ненулевых членов, потому что nj может быть равно j — 1; уберем нули и запишем •+ nv V nt > > • • • > nv > V > 1. (57) Теперь первые ("*) сочетаний ct -. - ci представляют собой t-сочетания {0,..., nt—1}; следующие ("^Y) —те, в которых ct = nt, a ct-i... ci — (t — 1)-сочетание элементов множества {0,...,nt-i~ 1} и т. д. Например, если t = 5 и N = (®) + (J) + (*), то первые N сочетаний будут PN5 = {43210,..., 87654} U {93210,..., 96543} U {97210,..., 97321}. (58)
428 КОМБИНАТОРНЫЙ поиск 7.2.1.3 Тень этого множества Pns, к счастью, легко представить—это dPN5 = {3210,..., 8765} U {9210,..., 9654} и {9710,..., 9732}, (59) т. е. первые (®) + (3) + (*) сочетаний в лексикографическом порядке для t = 4. Другими словами, если определить функцию Крускала Kt как где N имеет единственное представление (57), a Kt0 = 0, то дРт = P(Ktw)(t-i). (61) Теорема К говорит нам, например, что граф с миллионом ребер может содер- жать не более (ТИТ) треугольников, т. е. не более 470 700 300 множеств вершин {it, v, w} с ребрами и — v — w — и. Причина этого в том, что, согласно упр. 17, 1000000 = (14214) + С909) > и ребра Т>(юооооо)2 поддерживают (14314) + (1909) треугольников; если бы треугольни- ков было больше, граф должен был бы иметь как минимум кз 470700301 = (Х414) + (1°1°9) + (J) = 1000001 ребер в их тенях. Крускал определил сопутствующую функцию для работы с задачами такого рода. Функции к и А связаны интересным соотноше- нием, доказываемым в упр. 72: из M + W =(* + *) следует каМ + AtN = если st > 0. (63) Возвращаясь к теореме М, размеры дРщ и gQNst оказываются равными |9PWt| = и leQ/Vstl = N + KaN (64) (см. упражнение 81), где функция pt удовлетворяет уравнению ^=(?_-;) ‘J—(г.1) « при N, имеющем комбинаторное представление (57). В табл. 3 показано, как ведут себя упомянутые функции KtN, XtN и ptN для малых значений t и N. При больших значениях t и N эти функции могут быть хоро- шо аппроксимированы с помощью замечательной функции т(х), введенной Теиджи Такаги (Teiji Takagi) в 1903 году; см. рис. 47 и упр 82-85. Теоремы К и М являются следствиями существенно более общей теоремы дис- кретной геометрии, открытой Да-Лун Вангом (Da-Lun Wang) и Пинг Вангом (Ping Wang) [SIAM J. Applied Math. 33 (1977), 55-59], с которой мы сейчас познако- мимся. Рассмотрим дискретный п-мерный тор T(mi,..., тп), элементы которого представляют собой целочисленные векторы х — (xi,... ,хп), где 0 < xi < mi,
7.2.1.3 ГЕНЕРАЦИЯ ВСЕХ СОЧЕТАНИЙ 429 Таблица 3 Примеры функций Крускала-Маколея К, А и р N = 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 kiN = 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 k2N = 0 2 3 3 4 4 4 5 5 5 5 6 6 6 6 6 7 7 7 7 7 k3N = 0 3 5 6 6 8 9 9 10 10 10 12 13 13 14 14 14 15 15 15 15 K4N = 0 4 7 9 10 10 13 15 16 16 18 19 19 20 20 20 23 25 26 26 28 k&N = 0 5 9 12 14 15 15 19 22 24 25 25 28 30 31 31 33 34 34 35 35 XiN = 0 0 1 3 6 10 15 21 28 36 45 55 66 78 91 105 120 136 153 171 190 x2n = 0 0 0 1 1 2 4 4 5 7 10 10 11 13 16 20 20 21 23 26 30 X3N = 0 0 0 0 1 1 1 2 2 3 5 5 5 6 6 7 9 9 10 12 15 X4N = 0 0 0 0 0 1 1 1 1 2 2 2 3 3 4 6 6 6 6 7 7 X6N = 0 0 0 0 0 0 1 1 1 1 1 2 2 2 2 3 3 3 4 4 5 piN = 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 P2N = 0 1 2 2 3 3 3 4 4 4 4 5 5 5 5 5 6 6 6 6 6 p3N = 0 1 2 3 3 4 5 5 6 6 6 7 8 8 9 9 9 10 10 10 10 = 0 1 2 3 4 4 5 6 7 7 8 9 9 10 10 10 11 12 13 13 14 PsN = 0 1 2 3 4 5 5 6 7 8 9 9 10 11 12 12 13 14 14 15 15 Рис. 47. Аппроксимация функции Крускала функцией Такаги (гладкая кривая на левом графике представляет собой нижнюю границу k6N — TV из упр. 80). ..., 0 < хп < тп. Определим сумму и разность двух таких векторов х и у, как в формулах 4.3.2-(2) и 4.3.2-(3): х + у = ((rri+2/i)modmi,...,(rrn + ?/n)modmn), (66) х-у = ((xi -yi) mod mi,..., (xn -yn)modmn). (67) Определим также так называемый перекрестный порядок таких векторов, говоря, что х < у тогда и только тогда, когда их < иу или (их = иу и х> у лексикографически). (68) Здесь, как обычно, и(х±,..., хп) = rzj Ч-i-xn. Например, при ттц = т2 = 2 и тз - 3 двенадцать векторов в возрастающем перекрестном порядке представляют собой ООО, 100, 010, 001, 110, 101, 011, 002, 111, 102, 012, 112 (69)
430 КОМБИНАТОРНЫЙ ПОИСК 7.2.1.3 (скобки и запятые для удобства опущены). Дополнением вектора в T(mi,... ,тп) является вектор х = (mi — 1 — xi,..., mn — 1 — хп). (70) Заметим, что х Ч у выполняется тогда и только тогда, когда х > у. Следовательно, если гапк(х) обозначает количество векторов, предшествующих х в перекрестном порядке, то rank(x) + гапк(х) = Т — 1, где Т = mi... mn. (71) Удобно называть векторы “точками” и именовать их ео, ei, ..., ет-i в возрас- тающем перекрестном порядке. Таким образом, мы имеем e^ = 002 в (69), а в общем случае ёг = вт-i-r- Обратите внимание, что ei = 100...00, е2 = О1О...ОО, ..., еп = 000.. .01; (72) это так называемые единичные векторы. Множество Sn = {eo,ei,...,eiv-i}, (73) состоящее из наименьших N точек, называется стандартным множеством, и в частном случае N = п + 1 будем писать Е = {е0, ei,..., е„} = {000... 00,100... 00,010... 00,..., 000... 01}. (74) Любое множество точек X имеет размах (spread) Х+, ядро (core) Х° и двойник (dual) Х~, определяемые правилами Х+ = { х € St | х € X, или х — ei € X, или • • •, или х — еп € X }; (75) Х° = {х€<§т|а;€Хих + е1€Хи--их + еп€Х}; (76) Х~ = {х€$г |х£Х}. (77) Размах X можно определить алгебраически, записав Х+ = Х + Е, (78) где X + Y означает { х + j/1 х € X и у € У }. Ясно, что Х+ С У тогда и только тогда, когда X С У°. (79) Эти понятия могут быть проиллюстрированы в двухмерном случае mi = 4, m2 = 6 с помощью более или менее случайного тороидального размещения X = {00,12,13, 14,15,21,22,25}, для которого мы имеем (графически) Здесь X на первых двух диаграммах состоит из точек, помеченных как «ио, Х° включает только о, а Х+ состоит из +, • и о. Заметим, что если мы повернем
7.2.1.3 ГЕНЕРАЦИЯ ВСЕХ СОЧЕТАНИЙ 431 диаграмму Х~° и Х~+ на 180°, то получим диаграмму для Х° и Х+, но с (•, о, +, ), замененными соответственно на (+, , •, о). В действительности тождества Х° = Х~+~, Х+ = Х~°~ (81) выполняются в общем случае (см. упр. 86). Теперь мы готовы к изложению теоремы Ванга и Ванга. Теорема W. Пусть X —произвольное множество, состоящее из N точек дискрет- ного тора T(mi,... ,mn), где тг < < тп. Тогда |Х+| > |5$| и |Х°| < |5^|. Доказательство. Другими словами, стандартные множества Sn среди всех TV- точечных множеств имеют наименьший размах и наибольшее ядро. Мы докажем этот результат с помощью следующего общего подхода, впервые примененного Ф. Д. В. Уипплом (F. J. W. Whipple) для доказательства теоремы М [Proc. London Math. Soc. (2) 28 (1928), 431—437]. Первый шаг состоит в доказательстве того, что размах и ядро стандартных множеств стандартны. Лемма S. Существуют функции а и (3, такие, что = SaN и = Sqn- Доказательство. Мы можем считать, что N > 0. Пусть г — максимальное значе- ние, для которого er € S^, и пусть aN = г+1; мы должны доказать, что eq € S^ ддя 0 < q < г. Допустим, что eq = х = (xi,..., хп) и ег = у = (j/i, - -., j/n), и пусть к— наибольший индекс, для которого Хк > 0. Поскольку у € S^, существует индекс j, такой, что y—ej € Sn- Этого достаточно для доказательства того, что х—ек Ч у—ej, и в упр. 88 это сделано. Вторая часть следует из (81) при (3N = Т — а(Т—N), поскольку S1^ = ST_N. | Очевидно, что теорема W справедлива при n = 1, так что по индукции предпо- ложим, что она доказана для n—1 размерностей. Следующий шаг состоит в сжатии (compress) данного множества X в h-й координатной позиции путем разделения его на два непересекающихся множества Xfc(a) = {х е X \ Хк = а} (82) для 0 < а < тпк и замены каждого Хк(а) множеством -^fc(°) = { (®1» • • • » sk—1> а, $к, • • • , ®п—1) | ($1,. .. , Sn— 1) € 5*|хк(а)| } (83) с тем же количеством элементов. Множества S, использующиеся в (83), стандартны в (п — 1)-мерном торе Т(т^,...,m,k-i,Шк+i, • • •,тп). Заметим, что (a?i,...,Xjt-i>о, хк+1,...,хп) Ч (у1,...,ук-1,а,ук+1,...,уп) тогда и только тогда, когда (xi,..., хк-1, Xk+i, • • •, хп) Ч (yi,..., yk-i, Ук+i, - • •, Уп)', следовательно, Х'к(а) = Хк(а) тогда и только тогда, когда (п — 1)-мерные точки (a?i,..., Хк-1, Xfc+i, - • •, хп), где (xi,..., Xk-i,a,Xk+i,,хп) € X, малы настолько, насколько это возможно при проекции на (п — 1)-мерный тор. Пусть СкХ = Х£(0) U X£(l) U • • • U Хк(тк - 1) (84) представляет собой сжатие X по fc-й позиции. В упр. 90 доказывается тот фунда- ментальный факт, что сжатие не увеличивает размер размаха: |Х+| > |(С*Х)+| для 1 < к < п. (85)
432 КОМБИНАТОРНЫЙ ПОИСК 7.2.1.3 Кроме того, если сжатие изменяет X, то оно заменяет некоторые элементы други- ми элементами меньшего ранга. Таким образом, необходимо доказать теорему W только для полностью сжатых множеств X, у которых X = СкХ для всех к. Рассмотрим, например, случай п = 2. В полностью сжатом в двух измерениях крайнее справа множество стандартное и имеет наименьший размах. В упр. 91 завершается доказательство теоремы W для двух размерностей. Если п > 2, пусть х = (xi,..., хп) G X и xj> 0. Из условия СкХ = X вытекает, что если 0 < i < j и i к j, то х + е, — ej; € X. Применение этого факта к трем значениям к говорит нам, что х + е, — ej € X для любых 0 < i < j. Следовательно, Хп(а) + Еп(0) С Хп(а — 1) + еп для 0 < а < тп, (86) где тп = тпп и Еп(0) — сокращенная запись множества {ео,...,en~i}. Пусть Хп(а) содержит Na элементов, так что N = |Х| = Nq + М 4------1- Nm-i, и пусть Y = Х+. Тогда Уп(а) = (Хп((а - 1) mod тп) 4- еп) U (Хп(а) 4- Еп(0)) представляет собой стандартное множество в п — 1 размерностях, и (86) говорит Мп-1 < АМп-2 < Мп-2 < • • • < М < /?М) < М) < «Mb где а и (3 относятся к координатам от 1 до п — 1. Таким образом, |Г| = |К(0)| 4- |Гп(1)| 4- |Уп(2)| + • • • + |Г„(т - 1)1 = aN0 + М) + М + • • • + Мп—2 = оМо N — Мп—1 • Доказательство теоремы W теперь имеет красивое завершение. Пусть Z = Sn, и положим |Zn(a)| = Ма. Мы хотим доказать, что |Х+| > |Z+|, т. е. что qNq 4- N — Мп—1 > ocMq 4- N — Mm—i, (87) поскольку аргументы из предыдущего абзаца применимы как к X, так и к Z. Мы докажем (87), показав, что Mn-i < Mm-i и Mj > Mo- Используя (n — 1)-мерные функции а и (3, определим Nm-i = Nm_lt N'm_2 = aN^n_1, ...,N[ = aN', Щ = aN[j (88) N" = No, M" = (3Ng, M' = (3N?, ..., = (3N^_2. (89) Тогда M < Na < N" для 0 < a < тп, и отсюда следует, что М = М' + М + • ‘ • + ^m-i < N < N" = Ng + М" + • • • + С-i- (90) В упр. 92 доказывается, что стандартное множество Z' = Sn> имеет ровно ЛГ' элементов с n-й координатой, равной а, для каждого а. Из дуальности а и (3
7.2.1.3 ГЕНЕРАЦИЯ ВСЕХ СОЧЕТАНИЙ 433 аналогично доказывается, что стандартное множество Z" = Sw содержит ровно N" элементов с n-й координатой, равной а. Следовательно, = |Zn(m - 1)| > \Z'n(m - 1)| = NTn_1, Mo = |Zn(0)| < |Z"(0)| = No, поскольку Z’ C Z C Z" согласно (90). Из (81) мы также имеем |Х°| < |Z°|. | Теперь мы готовы доказать теоремы К и М, которые в действительности явля- ются частными случаями более общей теоремы Клементса (Clements) и Линдстрема (Lindstrom), которая применима к произвольным мультимножествам [J. Combina- torial Theory 7 (1969), 230-238]. Следствие С. Если А—множество N t-мультисочетаний, содержащееся в муль- тимножестве U = {«о • 0, «1 • 1,..., Sd - </}, где «о > «1 > • • • > Sd, то |5А| > |дР™| и |бА| > |е«лг*|, (91) где pvt обозначает N лексикографически наименьших мультисочетаний dt... d?di из U, a Qni обозначает N лексикографически наибольших мультисочетаний. Доказательство. Мультисочетания мультимножества U могут быть представлены как точки а?1 ...хп тора Т(т1,... ,тп), где п = d + 1 и rrij = sn-j + 1; пусть Xj — количество вхождений п — j в мультисочетание. Такое соответствие сохра- няет лексикографический порядок. Например, если U = {0,0,0,1,1,2,3}, его 3- мультисочетаниями в лексикографическом порядке являются 000, 100, 110, 200, 210, 211, 300, 310, 311, 320, 321, (92) а соответствующие им точки Х1Х2Х3Х4 имеют вид 0003,0012,0021,0102,0111,0120,1002,1011,1020,1101,1110. (93) Пусть Tw —точки тора, вес которых ач Н---Ьхп = w. Тогда каждое допустимое множество А t-мультисочетаний является подмножеством Tt. Более того, — ив этом главное—размах То U 7} U • • • U Tt-i U А равен (То U Ti U - • - U Tt_i U А)+ = То+ U Tj+ U • • • U Т^1 U А+ = То U Ti U - • • U Tt U qA. (94) Таким образом, верхняя тень qA просто равна (То U Т) U • • • U Tt-i U А)+ П Tt+i, и теорема W, по сути, говорит нам, что из |А| = N следует |gA| > |р(5л/-цуГ17})|> где М = |ToU- • -UTt-i |. Следовательно, по определению перекрестного порядка Tt состоит из N лексикографически наибольших t-мультисочетаний, а именно Qm- Доказательство того факта, что |cL4| > |9pvt|, теперь вытекает из дополни- тельности (см. упр. 94). | Упражнения 1. [ЛГЙЗ] Поясните, почему правило Голомба (8) устанавливает однозначное соответствие между множествами {ci,..., ct} С {0,..., п — 1} и мультимножествами {ei,..., et} С {оо • 0,... ,оо • п — t}. 2. [76] Какой путь в сетке 11 х 13 соответствует битовой строке (13)?
434 КОМБИНАТОРНЫЙ ПОИСК 7.2.1.3 3. [27] (R. R. Fenichel, 1968.) Покажите, что композиции qt + • • • + qi + qo числа в из t + 1 неотрицательных частей могут быть сгенерированы в лексикографическом порядке простым алгоритмом без циклов. 4. [76] Покажите, что любая композиция qt...qo числа в из t + 1 неотрицательных частей соответствует композиции га ... то числа t из в + 1 неотрицательных частей. Какая композиция соответствует 10224000001010 при таком соответствии? 5. [20] Какой хороший способ генерации всех целочисленных решений следующих си- стем неравенств можно предложить? а) п > xt > а:«_1 > а:«_2 > a:t-3 > • • • > >0, где t нечетно. б) п xt xt-i Х2 xi 0, где a » b означает a > b + 2. 6. [М22] Как часто выполняется каждый шаг алгоритма Т? 7. [22] Разработайте алгоритм, который обходил бы “дуальные” сочетания Ьа...bsbi в уменьшающемся лексикографическом порядке (см. (5) и табл. 1). Подобно алгоритму Т, ваш алгоритм должен избегать излишних присваиваний и ненужных поисков. 8. [М23] Разработайте алгоритм для генерации всех (з, 1)-сочетаний an-i... aiao лекси- кографически в форме битовых строк. Общее время работы алгоритма должно составлять о((?)), в предположении, что st > 0. 9. [М26] Пусть все (з, 1)-сочетания an-i... aiao перечислены в лексикографическом по- рядке и пусть 2Aat —общее количество изменений битов между соседними строками. На- пример, Азз = 25, поскольку между 20 строками в табл. 1 всего 2 + 2 + 2+ 4 + 24-24-4 + 2 + 2 + 6 + 2 + 2 + 4 + 2 + 24-44-24-24-2 = 50 изменений битов. а) Покажите, что Aat = mm(s,t) + A(e_ijt + Ae(t-i) при st > 0; Aat = 0 при st = 0. б) Докажите, что Aat < 2 (“+*). 10. [21] Чемпионат США по бейсболу (“World Series”) является состязанием, в котором чемпион Американской лиги (А) играет с чемпионом Национальной лиги (N), пока один из них не выиграет у другого четыре раза. Как лучше всего перечислить все возможные сценарии АААА, AAANA, AAANNA, ..., NNNN? Каков простейший способ назначить этим сценариям последовательные целые числа? 11. [1Р] Какой из сценариев упр. 10 чаще всего встречался в XX веке? Какой не встре- чался ни разу? [Указание: результаты чемпионата World Series легко найти в Интернете.] 12. [НМ32] Множество V n-битовых векторов, замкнутое относительно сложения по мо- дулю 2, называется бинарным векторным пространством (binary vector apace). а) Докажите, что каждое такое множество V содержит 2* элементов для некоторого цело- го t и может быть представлено как множество {iiai ф • • • ®xtat | 0 < ®i,... ,Xt < 1}, где векторы он, ..., at образуют “канонический базис” со следующим свойством: существует t-сочетание Ct... cjci из {0,1,..., п — 1}, такое, что если аь —бинарный вектор ... aiciaico, то мы имеем afcc3 =[J = fc] для1<у, k<t; аы = 0 для 0 < I < с*, 1 < k < t. Например, канонические базисы при п = 9, t = 4 и С4С3С2С1 = 7641 имеют общий вид aj = *00*0**10, a2 = *00*1000 0, a3 = *0100000 0, 04 = *1000000 0.
7.2.1.3 ГЕНЕРАЦИЯ ВСЕХ СОЧЕТАНИЙ 435 Существует 2® способов замены восьми звездочек нулями и/или единицами, и каждый из них образует канонический базис. Назовем t размерностью V. б) Сколько может быть t-мерных пространств с n-битовыми векторами? в) Разработайте алгоритм для генерации всех канонических базисов (ей,..., at) размер- ностью t. Указание: соответствующие сочетания а ... ci должны лексикографически возрастать, как в алгоритме L. г) Каким будет миллионный посещенный вашим алгоритмом базис при п = 9 и t = 4? 13. [25] Одномерная конфигурация Изинга длиной п, весом t и энергией г представляет собой бинарную строку an-i.. .ао, такую, что 52^=0 a7 = t и $2"=/ bj = г, где bj = aj ф Uj-i. Например, ai2 ... ао = 1100100100011 имеет вес 6 и энергию 6, поскольку bi2 ... bi = 010110110010. Разработайте алгоритм для генерации всех таких конфигураций для данных п, t и г. 14. [26] При генерации бинарных строк an~i.. .aiao (s,^-сочетаний в лексикографичес- ком порядке нам иногда требуется изменить 2 min(s, t) бит при переходе от одного сочета- ния к другому. Например, в табл. 1 за 011100 следует 100011. Так что мы, по-видимому, не можем надеяться сгенерировать все сочетания с помощью алгоритма без циклов, если только не будем посещать их в некотором ином порядке. Покажите, что в действительности имеется способ вычисления лексикографического преемника данного сочетания за 0(1) шагов, если каждое сочетание представлено в виде двухсвязного списка следующим образом: имеются массивы 1[0], ..., /[п] и г[0], ..., г[п], такие, что l[r[j]] = j для 0 < j < п. Если а:о = 1[0] и Xj = Z[rrj_ i] для 0 < j < п, то а, = > S1 Для 0 < j < п. 15. [М22] Воспользуйтесь тем фактом, что дуальные сочетания Ьв ... ЬгЬ i располагаются в обратном лексикографическом порядке, для доказательства того, что сумма (*•) Ч-1- С2) + Ci) связана с суммой (е/) + • • • + (с’) + (с/) простым соотношением. 16. [М21] Каково миллионное сочетание, сгенерированное алгоритмом L, при t, равном (а) 2? (б) 3? (в) 4? (г) 5? (д) 1000000? 17. [НМ25] Каким образом можно вычислить комбинаторное представление (20) для дан- ных Nut? 18. [20] Какое бинарное дерево мы получим при представлении биномиального дерева Тп с указателями на “правого ребенка” и “левого брата” как в упр. 2.3.2-5? 19. [21] Вместо того чтобы помечать ветви биномиального дерева Т4 так, как показано в (22), можно пометить каждый узел битовой строкой соответствующего сочетания. Если пометить таким образом Too, опуская начальные нули, то прямой порядок обхода даст бинарные числа в обычном возрастающем порядке; так, миллионный узел превратится в 11110100001000111111. А каким будет миллионный узел Тю при обходе в обратном порядке? 20. [М20] Найдите производящие функции g и h, такие, что алгоритм F находит ровно [zN] g(z) допустимых сочетаний и устанавливает t Ч— t + 1 ровно [zN] h(z) раз.
436 КОМБИНАТОРНЫЙ ПОИСК 7.2.1.3 21. [Л/22] (Joan Е. Miller, 1971.) Докажите закон знакопеременных сочетаний (30). 22. [ЛГЙЗ] Каково миллионное сочетание двери-вертушки, посещенное алгоритмом R при t, равном (а) 2? (б) 3? (в) 4? (г) 5? (д) 1000000? 23. [М23] Предположим, что мы изменили алгоритм R, устанавливая j •<— t+1 на шаге R.1 и устанавливая j <— 1, если из шага R3 выполняется переход к R2. Найдите распределение вероятности j и его среднее значение. Как эта величина связана со временем работы алгоритма? ► 24. [М25] (В. Г. Пейн (W. Н. Payne), 1974.) Продолжим выполнять предыдущее упражне- ние. Пусть jk — значениеу при к-м посещении в алгоритме R. Покажите, что |jfc+i — _Д| < 2, и поясните, как отказаться от использования циклов на основе данного свойства. 25. [Л/55] Пусть с<... c2Cj и с(... c2c'j — N-e и N'-e сочетания, сгенерированные методом двери-вертушки (алгоритм R). Докажите, что |N — W'| > 52^?/ (к-1)> если множество С = {cj,... ,c2,Ci} имеет тп > 0 элементов, не входящих в С’ = {с*,... ,с2,с{}. 26. [26] Обладают ли элементы тернарного рефлексивного кода Грея свойствами, анало- гичными свойствам кода Грея двери-вертушки Гя«, если мы возьмем только те п-кортежи an-i .. .aiao, у которых (a) an-i -I-Fai +во = t? (б) {an_i,..., ai,a0} = {г-0, s-1, t- 2}? ► 27. [25] Покажите, что существует простой способ генерации всех сочетаний не более t элементов из {0,1,..., п — 1} с использованием только переходов в духе кода Грея 0 <-> 1 и 01 н 10. (Другими словами, на каждом шаге должны выполняться вставка элемен- та, удаление элемента или сдвиг элемента на ±1.) Примером такой последовательности является 0000, 0001, ООН, 0010, ОНО, 0101, 0100, 1100, 1010, 1001, 1000 при п = 4 и t = 2. Указание: подумайте о китайских кольцах. 28. [М21] Истинно или ложно следующее утверждение? Последовательность всех (s, t)- сочетаний a„-i...aiao в виде битовых строк находится в облексном порядке тогда и только тогда, когда соответствующие последовательности в индексном виде Ьв ... Ь2Ь1 (для нулей) и ct... c2ci (для единиц) находятся в облексном порядке. ► 29. [M2S] (Ф. Д. Чейз (Р. J. Chase).) Для данной строки символов +, - и 0 назовем R- блоком подстроку вида -fc+1, которой предшествует О, и за которой не следует -. L-блоком назовем подстроку вида +-fc, за которой следует 0; в обоих случаях к > 0. Например, строка 0ОО++-++00ООО0 имеет два L-блока и один R-блок, заключенные в рамки. Заметим, что блоки не могут пересекаться. Для таких строк при наличии хотя бы одного блока мы формируем строку- преемник следующим образом. Заменим крайнюю справа последовательность 0-fc+1 на -+fc0, если крайний справа блок является R-блоком; в противном случае заменим крайнюю справа последовательность +-fc0 на 0+fc+I. Кроме того, обращаем первый знак (если таковой имеется), который находится справа от измененного блока. Например, -0ОО++- -> -0000*-- -> -оЕЗоЕЗ -> -О+--0О ->-oF4o+ -> -00+++-, где запись а —> /? означает, что /? является преемником а. а) Какие строки не содержат блоков (а значит, не имеют преемников)? б) Может ли существовать цикл строк ао —> ai ->•••—> &k-i —> ао? в) Докажите, что если а —> р, то — р —> —а, где ” означает “обратить все знаки” (а следовательно, каждая строка имеет не более одного предшественника). г) Покажите, что если ao —> ai —> • • • —> а* и к > 0, то строки ао и а* не содержат все их нули в одних и тех же позициях (таким образом, если ао имеет з знаков и t нулей, к должно быть меньше (“+*)).
7.2.1.3 ГЕНЕРАЦИЯ ВСЕХ СОЧЕТАНИЙ 437 д) Докажите, что каждая строка а с в знаками и t нулями принадлежит ровно одной цепочке ао —> ai —> • • • —> <*(•+«)_ г 30. [М32] В предыдущем упражнении определены 2s способов генерации всех сочетаний из s нулей и t единиц посредством отображений + Н 0, - н 0 и О Н 1. Покажите, что каждый из этих способов дает однородную облексную последовательность, определяемую соответствующим рекуррентным соотношением. Является ли последовательность Чейза (37) частным случаем этой более общей конструкции? 31. [М23] Сколько всего облексных последовательностей (s, <)-сочетаний может быть при использовании представления (а) в виде битовых строк an-i ...aiao? (б) в виде списка индексов Ct... C2C1? х ► 32. [М32] Сколько всего облексных последовательностей строк (в,<)-сочетаний an-i... aiao (а) обладают свойством двери-вертушки? (б) однородны? 33. [ЯЛ/ЗЗ] Сколько облексных последовательностей в упр. 31, (б) близки к идеальным? 34. [М32] Продолжая выполнять упр. 33, поясните, как при не слишком больших в и t найти такие схемы, которые как можно более близки к идеальным в том смысле, что количество “неидеальных” переходов Cj Ч— Cj ± 2 минимально. 35. [М26] На скольких шагах последовательности Чейза Cat используются неидеальные переходы? ► 36. [М21] Докажите, что метод (39) при генерации всех (s, 1)-сочетаний an~i... aiao вы- полняет операцию j ч— j + 1 ровно (s+f) — 1 раз для любой облексной схемы сочетаний в виде битовых строк. ► 37. [27] Какой алгоритм получается при использовании общего облексного метода (39) для получения (в, 1)-сочетаний an-i.. .aiao: (а) в лексикографическом порядке? (б) в по- рядке двери-вертушки из алгоритма R? (в) в однородном порядке (31)? 38. [26] Разработайте облексный алгоритм наподобие алгоритма С для обратной после- довательности 39. [М21] Сколько сочетаний предшествует битовой строке 11001001000011111101101010 в последовательности Чейза Cat при в = 12 и t = 14? (См. (41).) 40. [М22] Каково миллионное сочетание в последовательности Чейза Cat при в = 12 и t = 14? 41. [М27] Покажите, что имеется перестановка с(0), с(1), с(2),... неотрицательных целых чисел, такая, что элементы последовательности Чейза Cat получаются путем дополнения в + t младших битов элементов с(к) для 0 < к < 2s+t, которые имеют вес p(c(fc)) = s. (Таким образом, последовательность с(0), ..., с(2" — 1) содержит в качестве подпоследова- тельностей все Cat, для которых s+t = п, так же как бинарный код Грея р(0),..., g(2" — 1) содержит все последовательности двери-вертушки Гяе.) Поясните, как вычислить бинарное представление с(к) = (... 020100)2 на основе бинарного представления к = (... 626160)2- 42. [НМ34] Используйте производящую функцию вида t gBtwBzt для анализа каждого шага алгоритма С. 43. [20] Докажите или опровергните следующее утверждение: если в(х) и р(х) обознача- ют соответственно преемник и предшественник х в чун-порядке (см. с. 422), то в(х + 1) = Р(х) + 1. ► 44. [М21] Пусть Ct(n) — 1 обозначает последовательность, получаемую из Ct(n) путем исключения всех сочетаний с щ = 0 и последующей замены q ... щ на (ct — 1) ... (ci — 1) в оставшихся сочетаниях. Покажите, что последовательность Ct (п) — 1 близка к идеальной.
438 КОМБИНАТОРНЫЙ ПОИСК 7.2.1.3 45. [32] Воспользуйтесь чун-порядком и наброском расширения из уравнения (44) для генерации сочетаний ct... С2С1 последовательности Чейза С«(п) с помощью нерекурсивной процедуры. ► 46. [33] Разработайте нерекурсивный алгоритм для дуальных сочетаний Ьа ... ЬгЬ1 после- довательности Чейза Cat, а именно для позиций нулей в a„-i... aiao- 47. [26] Реализуйте близкий к идеальному метод генерации перестановок мультимноже- ства из (46) и (47). 48. [М21] Предположим, что од, од,..., ajv-i —любая последовательность перестановок мультимножества {si - l,...,Sd d}, где од отличается от од+i обменом двух элемен- тов. Пусть /Зо, ..., 0м-1—любая последовательность (s,<)-сочетаний двери-вертушки, где s = So, t = si + • • • + за, а M = (я+‘). Далее, пусть Aj —последовательность из М элементов, полученная путем применения обменов двери-вертушки к начальной строке <*1 t /36; здесь a f /3 означает строку, полученную заменой элементами а единиц в 0 с сохранением порядка слева направо. Например, если 0о, • • , 0м-1 представляют собой 0110, 0101, 1100, 1001, ООП, 1010, а од = 12, то Aj представляет собой 0120, 0102, 1200, 1002, 0012, 1020. (Последовательность двери-вертушки не обязательно однородна.) Докажите, что последовательность (47) содержит все перестановки {so • 0, si • 1,..., Sd • d} и что соседние перестановки отличаются одна от другой обменом двух элементов. 49. [НМ23] Пусть q—первообразный m-й корень единицы, такой, как е2’"/"1. Покажите, что (n\ _ (Ln/’TlJ \ Znmodm\ k/q \[k/m]J \kmodmjg' ► 50. [НМ25] Распространите формулу из предыдущего упражнения на q-мультиномиаль- ные (q-muttinomial) коэффициенты /ш -I---l-nt\ \ 711,--,nt /д 51. [25] Найдите все гамильтоновы пути в графе, вершины которого представляют собой перестановки {0,0,0,1,1,1}, причем дуги соединяют вершины, получающиеся при переста- новке двух соседних элементов. Какие из этих путей эквивалентны относительно операции замены нулей единицами и/или лево-правого отражения? 52. [М37] Обобщая теорему Р, найдите необходимое и достаточное условие того, что все перестановки мультимножества {so • 0,..., за • d} могут быть сгенерированы с помощью перестановок соседних элементов одод-i о од_1од. 53. [MJ6] (Д. Г. Лемер (D. Н. Lehmer), 1965.) Предположим, что N перестановок {so • 0,..., 3d • d} не могут быть сгенерированы с помощью идеальной схемы, поскольку (N + х)/2 из них имеют четное количество инверсий, где х > 2. Можно ли сгенерировать их все с помощью последовательности W + х — 2 обменов соседних элементов а&к ask-i для l<k<N + x — 1, где имеется х — 1 случаев “шпор” с 6к = <5fc-i, возвращающих нас к перестановкам, с которыми мы только что сталкивались? Например, подходящая после- довательность Si... 6в4 для 90 перестановок {0,0,1,1,2,2}, где х = (2?2^2) = 6, имеет вид 234535432523451а42ая51а42ая51а4, где а = 45352542345355, если начать с авододододод = 221100. 54. [MJ0] Для каких значений s и t могут быть сгенерированы все (s, 1)-сочетания, ес- ли в дополнение к обменам смежных элементов од о од-i разрешить обмен конечных элементов an-i <-> од? ► 55. [33] (Фрэнк Раски (Frank Ruskey), 2004.) (а) Покажите, что все (s, <)-сочетания од+t-i .. .од од можно эффективно сгенерировать путем последовательных циклических сдвигов
7.2.1.3 ГЕНЕРАЦИЯ ВСЕХ СОЧЕТАНИЙ 439 ajOj-i... во <— a,j-i... agOj. (б) Какие команды MMIX превращают (ae+t-i... 0100)2 в сле- дующий за ним элемент при в +1 < 64? 56. [MJ9] (Бак (Buck) и Видеманн (Wiedemann), 1984.) Можно ли сгенерировать все (t, <)-сочетания O2t-i • • • aiao путем повторных обменов ао с некоторым другим элементом? 57. [22] (Фрэнк Раски (Frank Ruskey).) Может ли пианист проиграть все возможные че- тырехнотные аккорды, размах которых не превышает одной октавы, перемещая всякий раз при переходе к новому аккорду только один палец? Это задача генерации всех сочетаний Ct... ci, таких, что п > Ct >'> ci > 0 и ct — ci < т, где t = 4 и (а) т = 8, п = 52, если рассматривать только белые клавиши пианино; (б) т = 13, п = 88, если рассматривать и черные клавиши пианино. 58. [20] Рассмотрите задачу о пианисте из упр. 57 с дополнительным условием, что ак- корды не содержат соседних нот. (Другими словами, cj+i > с, + 1 для t > j > 1. Такие аккорды обычно более гармоничны.) 59. [М25] Имеется ли идеальное решение задачи о пианисте с четырьмя нотами, в которой на каждом шаге палец перемещался бы на соседнюю клавишу? 60. [25] Разработайте алгоритм для генерации всех ограниченных композиций t = гя Ч---1- и + го, где 0 < гj < т, для в > j > 0. 61. [52] Покажите, что все ограниченные композиции могут быть сгенерированы путем изменения на каждом шаге только двух из частей. 62. [М27] Факторная таблица представляет собой матрицу неотрицательных целых чи- сел (оу) размером т х п, обладающую заданными суммами строк г, = оу и столбцов с, = ау, где и Ч-------1- rm = ci Ч 1- Сп. а) Покажите, что факторные таблицы размером 2 х п эквивалентны ограниченным ком- позициям. б) Какая факторная таблица является лексикографически наибольшей для (и,... ,rm; ci,..., Сп), если считывать элементы матрицы построчно слева направо и сверху вниз в порядке (an,ai2,... ,ain,021,022, • • • ,®2n, • • • ,o,mi,am2, , amn)? в) Какая факторная таблица является лексикографически наибольшей для (п,..., rm; Ci,..., Сп), если считывать элементы матрицы по столбцам сверху вниз и по строкам слева направо в порядке (оц, 021,. , ami, 012,022, - • •, am2, ,oin,O2n, , amn)? г) Какая факторная таблица является лексикографически наименьшей для (п,...,гт; ci,..., Сп) при построчном и постолбцовом считывании? д) Поясните, как сгенерировать все факторные таблицы для (ri,...., rm; ci,..., с„) в лек- сикографическом порядке. 63. [Mjl] Покажите, что все факторные таблицы для (п,..., rm; ci,..., Сп) могут быть сгенерированы с помощью изменения на каждом шаге ровно четырех элементов матрицы. 64. [ЛГ50] Постройте облексный цикл Грея для всех из 2е (я+‘) подкубов, которые имеют в цифр и t звездочек, используя только следующие преобразования: *0 <-»• 0*, *1 <-»• 1*, Он 1. Например, одним таким циклом при в = t = 2 является (00**, 01**, 0*1*, 0**1,0**0,0*0*, *00*, *01*, *0*1, *0*0, **00, **01, **11, **10, *1*0, *1*1, *11*, *10*, 1*0*, 1**0,1**1,1*1«, 11**, 10**). 65. [MJ0] Подсчитайте общее количество облексных путей Грея в подкубах, в которых используются только разрешенные в упр. 64 преобразования. Сколько из этих путей являются циклами?
440 КОМБИНАТОРНЫЙ ПОИСК 7.2.1.3 66. [22] Покажите, что для данных п > t > 0 существует путь Грея через все канони- ческие базисы (ai,... ,at) из упр. 12, в котором на каждом шаге выполняется изменение только одного бита. Например, приведем один такой путь для п = 3 и t = 2: 001 101 101 001 001 011 010 010’ 010’ 110’ 110’ 100’ 100’ 100' 67. [46] Рассмотрим конфигурации Изинга из упр. 13, для которых ао = 0. Существует ли цикл Грея для этих конфигураций при заданных п, t и г, в котором все переходы имеют вид 0*1 о 10* или 01* о 1*0? Например, в случае п = 9, t = 5, г = 6 имеется единственный цикл (010101110, 010110110, 011010110, 011011010, 011101010, 010111010). 68. [М01] Если а является t-сочетанием, то что собой представляет (а) д*а? (б) dt+1a? 69. [М22] Насколько велико наименьшее множество t-сочетаний А, для которого выпол- няется соотношение |сМ| < |А|? 70. [М25] Чему равно максимальное значение KtN — N при N > 0? 71. [М20] Сколько t-клик может иметь граф с миллионом ребер? 72. [М22] Покажите, что если N имеет комбинаторное представление степени t (57), то существует простой способ нахождения комбинаторного представления степени s дополня- ющего числа М -- (’+*) ‘ N для N < (7*) • Выведите (63) в качестве следствия. 73. [М23] (Э. Д. В. Хилтон (A. J. W. Hilton), 1976.) Пусть А—множество s-сочетаний, а В—множество t-сочетаний, и оба содержатся в 17 = {0, ...,п — 1}, где п > s + t. Покажите, что если А и В перекрестно пересекающиеся множества (cross-intersecting) в том смысле, что а П /3 0 для всех а € А и (3 € В, то такими же являются и множества QMns и QNnt, определенные в теореме К, где М = |А| и N = |В|. 74. [М21] Чему равны |gPjvt| и |pQ^t| в теореме К? 75. [М20] Правая часть (60) не всегда является комбинаторным представлением степени (t — 1) для KtN, поскольку v — 1 может быть равно нулю. Покажите, однако, что положи- тельное целое N имеет не больше двух представлений, если в (57) допустить v = 0, и оба они дают одно и то же значение KtN согласно (60). Следовательно, KkKk+1...KtN= ( fclt1) + (fctJ12)+ -+(fc_17v_t) Wial<fc<t. 76. [M20] Найдите простую формулу для Kt(N + 1) — KtN. 77. [M26] Докажите следующие свойства функции к, работая с биномиальными коэффи- циентами, без учета теоремы К. a) Kt(M + N) < KtM + KtN. б) Kt(M + N) < max(ntM, N) + Kt-iN. Указание: (7) + • • • + (7) + ("‘) + • • + (?) равно (m7n‘) + - - • + C"1*"1) + (m7"‘) + • —F (Tnif”1), где V и Л обозначают максимум и минимум. 78. [М22] Покажите, что теорема К легко следует из неравенства (б) в предыдущем упражнении. И наоборот: оба неравенства являются следствиями теоремы К. Указание: любое множество t-сочетаний А может быть записано как А = Ai + Ао0, где Ai = {а € А | 0 £ а}. 79. [М23] Докажите, что для t > 2 соотношение М > ptN справедливо тогда и только тогда, когда М + Xt-iM > N.
7.2.1.3 ГЕНЕРАЦИЯ ВСЕХ СОЧЕТАНИЙ 441 80. [НМЯб] (Л. Ловас (L. Lovdsz), 1979.) Функция (*) монотонно возрастает от 0 до оо при увеличении х от t — 1 до оо; следовательно, можно определить KtN = Q Х 1если N = и х > t — 1. Докажите, что KtN > KtN для всех целых t > 1 и N > 0. Указание: неравенство становится равенством при целых значениях х. 81. [МЯ7] Покажите, что формула (64) дает минимальный размер тени в теореме М. 82. [НМ31] Функция Такаги на рис. 47 определяется для 0 < х < 1 формулой j-fc(t) dt, где rk(t) = (—1)L2 —функция Радемахера из уравнения 7.2.1.1-(16). а) Докажите, что т(х) непрерывна на отрезке [0.. 1], но ее производная не существует ни в одной точке. б) Покажите, что т(х)—единственная непрерывная функция, удовлетворяющая уравне- нию т(|а:) = т(1 - |а:) = jx + |т(х) при 0 < х < 1. в) Чему равно асимптотическое значение т(е) при малых с? г) Докажите, что значение т(х) при рациональном х рационально. д) Найдите все корни уравнения т(х) = 1/2. е) Найдите все корни уравнения т(х) — maxo<x<i т(х). 83. [HMJ6] Определите множество R всех рациональных чисел г, таких, что уравнение т(х) = г имеет несчетное количество решений. Если т(х) рационально, а х—иррациональ- но, верно ли, что т(х) € Я? (Предупреждение: эта задача может оказаться настоящим наркотиком.) 84. [НМЯ7] Докажите для Т = (2t~1) асимптотическую формулу KtN-N = 7(т(7)+°(^7^-)) при о < лг < т. 85. [ЯМ81] Свяжите функции At IV и ptN с функцией Такаги т(х). 86. [МЯО] Докажите закон дуальности размаха/ядра Х~+ = Х°~. 87. Истинны или ложны следующие утверждения? (а) X С Y° тогда и только тогда, когда Y~ С Х~°-, (б) Х°+° = Х°; (в) аМ < N тогда и только тогда, когда М < (3N. 88. [МЯО] Поясните, в чем полезность перекрестного порядка, завершив доказательство леммы S. 89. [16] Вычислите функции а и /3 для тора 2x2x3 (69). 90. [МЯЯ] Докажите фундаментальную лемму о сжатии (85). 91. [МЯ4] Докажите теорему W для двумерных торов T(l, m), I < тп. 92. [МЯ8] Пусть х = Х1...Хп-1 — N-й элемент тора Т(тт,... ,тпп~1) и пусть S—мно- жество всех элементов T(mi,...,mn-i,Tn), которые -< xi... xn-i(rn—1) в перекрестном порядке. Пусть Na элементов S имеют последним компонентом а (0 < а < тп). Докажите, что A^m-i = N и №~i = aNa для 1 < а < тп, где а—функция размаха для стандартных множеств в Т(тп1,..., тпп-1). 93. [МЯО] (а) Найдите N, для которого результат теоремы W ложен, если параметры mi, m2, ..., тп не располагаются в неубывающем порядке, (б) Где в доказательстве этой теоремы используется гипотеза о том, что mi < m2 < • • • < тпп?
442 КОМБИНАТОРНЫЙ ПОИСК 7.2.1.3 94. [ЛГ2О] Покажите, что 5-часть следствия С вытекает из g-части. Указание: дополне- ниями мультисочетаний (92) по отношению к U являются 3211, 3210, 3200, 3110, 3100, 3000, 2110, 2100, 2000, 1100, 1000. 95. [17] Объясните, почему теоремы К и М вытекают из следствия С. ► 96. [Л122] Пусть S—бесконечная последовательность (so,si,S2,...) положительных це- лых чисел и пусть (5W)=[Z*] П(1 + 2 + ... + 2Ъ); 3=0 таким образом, п₽и so = si = 32 = • • • = 1 представляет собой обычный биномиаль- ный коэффициент (£). Обобщая комбинаторную систему счисления, покажите, что каждое неотрицательное целое N имеет единственное представление „,(*<“•))+(*<-->)+ ...+(s(”,)), где nt > nt-i > • • > ni > 0 и {nt,nt-i,... ,ni} С {so • 0, si • 1, S2 • 2,... }. Воспользуйтесь этим представлением для получения простой формулы для чисел |5Pjvt| в следствии С. ► 97. [М26] В разделе было замечено, что вершины выпуклого многогранника могут быть слегка смещены таким образом, что все его грани будут представлять собой симплексы. В общем случае любое множество сочетаний, которое содержит тени всех своих элементов, называется симплициальным комплексом (simplicial complex); таким образом, С является симплициальным комплексом тогда и только тогда, когда aQ0, amficC вытекает а € С тогда и только тогда, когда С представляет собой порядковый идеал по отношению к включению множеств. Если С содержит в точности Nt сочетаний размером t, то (No,Ni,..., Nn) представ- ляет собой вектор размеров симплициального комплекса из п вершин. а) Чему равны векторы размеров пяти правильных многогранников (тетраэдра, куба, октаэдра, додекаэдра и икосаэдра) при небольшой подстройке их вершин? б) Постройте симплициальный комплекс с вектором размеров (1,4,5,2,0). в) Найдите необходимое и достаточное условие допустимости заданного вектора (No, Ni, ...,Nn). г) Докажите, что (No,..., Nn) является допустимым тогда и только тогда, когда допу- стим его “дуальный” вектор (No,. -., Nn), где Nt = (") — Nn-t- д) Перечислите все допустимые векторы размеров (No,Ni,N2,N3,Nf) и дуальные им. Какие из этих векторов самодуальны? 98. [30] Продолжая выполнять упр. 97, найдите эффективный способ подсчета количе- ства допустимых векторов размеров (No,Ni,...,Nn) при п < 100. 99. [М25] Клаттером (clutter)* называется множество С сочетаний, несравнимых в том смысле, что кз а С Р и а, (3 Е С вытекает а = 0. Вектор размеров клаттера определяется так же, как в упр. 97. а) Найдите необходимое и достаточное условие того, что (А4о, Mi,..., Мп) является век- тором размеров клаттера. б) Перечислите все такие векторы размеров для п = 4. ► 100. [Л130] (Клементс (Clements) и Линдстрем (Lindstrom).) Пусть А— “симплициаль- ный мультикомплекс” множество подмультимножеств мультимножества U в следствии С, обладающее тем свойством, что дА С А. Насколько большим может быть общий вес vА = 52{|а| | а € А} при |А| = N? Дословно — “беспорядком” — Примеч. пер.
7.2.1.3 ГЕНЕРАЦИЯ ВСЕХ СОЧЕТАНИЙ 443 101. [М25] Если /(xi,..., хп) —булева формула, обозначим через F(p) вероятность того, что f(xi,..., Хп) = 1, если каждая переменная Xj независимо равна 1 с вероятностью р. а) Вычислите G(p) и Н(р) для булевых формул g(w, х, у, z) = wxz V wyz V xyz, h(w, x, y, z) = wyz V xyz. б) Покажите, что существует монотонная булева функция f(w, х, у, г), такая, что F(p) = G(p), но не существует такой функции, что F(p) — Н(р). Поясните, как проверить это условие в общем случае. 102. [ЯМ35] (Ф. С. Маколей (F. S. Macaulay), 1927.) Полиномиальным идеалом (polyno- mial ideal) I для переменных {a?i... ,a?a} является множество полиномов, замкнутое по отношению к операциям сложения, умножения на константу и умножения на любую из переменных. Он называется однородным (homogeneous), если состоит из линейных комби- наций множества однородных полиномов, т. е. полиномов наподобие xy + z2, все члены ко- торых имеют одну и ту же степень. Пусть Nt — максимальное число линейно независимых элементов степени t в I. Например, при s = 2 множество всех а(хо, Xi,x2)(x0xl — 2хгх2) + P(xo,Xi,X2)xox1X2, где а и /3 пробегают по всем возможным полиномам от {xo,Xi,X2}, представляет собой однородный полиномиальный идеал с No = Ni = W2 = 0, We = 1, N4 = 4, № = 9, .Ne = 15, .... а) Докажите, что для любого такого идеала I существует другой идеал I' в котором все однородные полиномы степени t представляют собой линейные комбинации Nt независимых одночленов (monomial). (Одночлен представляет собой произведение переменных наподобие xfx2Xg.) б) Используйте теорему М и (64) для того, чтобы доказать, что Nt+i > Nt + KaNt для всех t > 0. в) Покажите, что неравенство Nt+i > Nt +naNt выполняется только для конечного коли- чества t. (Это утверждение эквивалентно “основной теореме Гильберта” доказанной Д. Гильбертом (D. Hilbert) в Gottinger Nachrichten (1888), 450-457; Math. Annalen Зв (1890), 473-534.) 103. [M38] Тень подкуба ai.. . ап, где каждое o.j является 0, 1 либо *, получается путем замены некоторых * на 0 или 1, например: 30*11*0 = {0011*0, 0111*0, 0*1100, 0*1110}. Пусть А—произвольное множество N подкубов ai...an с s цифрами и t звездочками. Найдите множество Рдга«, такое, что |0А| > |Рлга«|. 104. [MJ1] Тень бинарной строки ai... ап получается путем удаления одного из ее битов, например: 0110010010 = {10010010, 11010010, 11000010, 11001000, 11001010, 11001001}. Найдите множество Ркп, такое, что если А—произвольное множество N бинарных строк ai.. .ап, то |0А| > |Рлг„|. 105. [М20] Универсальным циклом t-сочетаний {0,1,..., п — 1} является цикл из (”) чи- сел, блоки которых из t последовательных элементов пробегают все t-сочетания {ci,..., ct}. Например, (02145061320516243152630425364103546) является универсальным циклом для t = 3 и п = 7. Докажите, что такие циклы невозможны, если только (") не кратно п. 106. [Л£81] (Л. Пуансо (L. Poinsot), 1809.) Найдите “красивый” универсальный сочетаний {0,1,..., 2т}. Указание: рассмотрите разности последовательных элементов по модулю (2т + 1). /
444 КОМБИНАТОРНЫЙ ПОИСК 7.2.1.4 107. [ЙЙ] (О. Терквем (О. Terquem), 1849.) Из теоремы Пуансо следует, что все 28 костей домино из традиционного набора “дубль-шесть” можно расположить в виде цикла так, что очки на соприкасающихся домино будут одинаковы. Сколько всего может быть таких циклов? 108. [М31 ] Найдите универсальные циклы 3-сочетаний множеств {0,..., п — 1}, где п mod 3/0. 109. [М31 ] Найдите универсальные циклы 3-мулътисочетаний множеств {0,1,..., п — 1}, для которых п mod 3 / 0 (т. е. сочетаний didzds, в которых разрешены повторения). Например, при п = 5 таким циклом является (00012241112330222344133340024440113). ► 110. [йб] Криббедж (cribbage)— карточная игра для колоды из 52 карт, каждая из кото- рых имеет масть (♦, О, или ф) и достоинство (А, 2, 3, 4, 5, 6, 7, 8, 9, 10, J, Q или К). Игроки в криббедж должны быть экспертами в вычислении счета для сочетаний 5 карт С = {ci,C2,C3,C4,C5}, одна из которых, Cfc, называется стартером. Счет представляет собой сумму очков, вычисляемую следующим образом для каждого подмножества S множества С и каждого выбора fc. Пусть |S| = s. i) Пятнадцать: если 52{v(c) | с € 5} = 15, где (u(A), п(2),г»(3),..., u(9),v(10),u(J),u(Q), v(K)) = (1,2,3,..., 9,10,10,10,10), засчитывается два очка. ii) Пары: если s = 2 и обе карты одного и того же достоинства, засчитывается два очка, iii) “Тропа” (run): если s > 3 и достоинства карт следуют друг за другом и если С не содержит тропы длиной s + 1, засчитывается s очков. iv) Масть (flush): если s = 4 и все карты S имеют одну и ту же масть и если с* $ S, засчитывается 4 + [сь имеет ту же масть, что и другие карты] очков. v) Козырный валет (nob): если s = 1 и сь $ S, засчитывается одно очко, если карта— валет (J) той же масти, что и с*. Например, если у вас на руках {Лф, 5ф, 5ф,6(?} и стартером является 4ф, то ваш счет составляет 4 х 2 за пятнадцать, 2—за пару, 2 х 3—за тропы и 1—за козырного валета, итого —17 очков. Сколько в точности вариантов сочетаний карт и стартера приводят к счету, равному х очкам (х = 0, 1, 2, ... )? 111. [М26] (П. Эрдеш (Р. Erdos), Ч. Ко (С. Ко) и Р. Радо (R. Rado).) Предположим, что А — множество г-сочетаний n-множества, причем а А /3 / 0 для любых а, (3 G А. Покажите, что |А| < ("2^)> если г < п/2. Указание: рассмотрите дп~2гВ, где В — множество дополнений А. 7.2.1.4. Генерация всех разбиений. Великолепная книга Ричарда Стенли (Ri- chard Stanley) Перечислительная комбинаторика (Enumerative Combinatorics, 1986) начинается с рассмотрения “двенадцатизадачия” — массива размером 2x2x3 фун- даментальных комбинаторных задач, часто возникающих на практике (см. табл. 1), который базируется на ряде лекций Ж.-К. Роты (G.-C. Rota). Все эти двенадцать задач можно описать в терминах распределения заданного количества шаров по
7.2.1.4 ГЕНЕРАЦИЯ ВСЕХ РАЗБИЕНИЙ 445 заданному количеству урн. Например, имеется девять способов поместить два шара в три урны, если и шары, и урны помечены. йш шн ШУ ши mu ШУ ШУ ШУ ШУ (Порядок шаров внутри урны игнорируется.) Но если шары не помечены, то некоторые из размещений становятся неразличимыми, и становятся возможными только шесть различных способов размещения. ШУ ши ШУ иш ШУ ШУ (X) Если урны не помечены, то размещения наподобие УУУ«УШ, по сути, оди- наковы, следовательно, различимы только два из девяти исходных размещений. Если же у нас имеется три помеченных шара, то вот все различные способы их размещения в трех непомеченных урнах. SUU WU WU иш ШУ (2) Наконец, если не помечены ни шары, ни урны, то показанные пять способов разме- щения сводятся только к трем. В двенадцатизадачии рассматриваются все размещения для помеченных и непоме- ченных урн и шаров, а также необязательное требование, чтобы в каждой урне содержалось не менее или не более одного шара. Таблица 1 Двенадцатизадачие Шаров в урне Ограничений нет < 1 > 1 п помеченных шаров, т помеченных урн п-кортежи из т объектов п-перестановки из т объектов Разбиения {1,..., п} на тп упорядоченных частей п непомеченных шаров, m помеченных урн п-мультисочетания из т объектов п-сочетания из т объектов Композиции п из т частей п помеченных шаров, т непомеченных урн Разбиения {1,..., п} на < т частей п объектов в тп карманах Разбиения {1,..., п} на т частей п непомеченных шаров, т непомеченных урн Разбиения п на < т частей п объектов в т карманах Разбиения п на тп частей Мы уже рассматривали n-кортежи, перестановки, сочетания и композиции в предыдущих разделах даннойглавы; две издвенадцати записей табл. 1 тривиаль- ны— размещение п объектов по тприемнйм карманам. Таким образом, мы можем завершить наше изучение комбинаторной математики рассмотрением оставшихся пяти записей таблицы, которые включают разбиения (partitions).
446 КОМБИНАТОРНЫЙ ПОИСК 7.2.1.4 Начнем с того, что слово “разбиение" в математике имеет множество значений. Оно возникает всякий раз, когда выполняется разделение некоторого объекта на подобъекты. — ДЖОРДЖ ЭНДРЮС (GEORGE ANDREWS), Теория разбиений (The Theory of Partitions') (1976) Одно и то же имя имеют две достаточно разные концепции. Разбиения мно- жества представляют собой способы его разделения на непересекающиеся под- множества; таким образом, (2) иллюстрирует пять разбиений {1,2,3}, а именно {1,2,3}, {1,2}{3}, {1,3}{2}, {1}{2,3}, {1}{2}{3}. (4) Разбиения целого числа представляют собой способы его записи в виде суммы на- туральных чисел, независимо от их порядка; таким образом, в (3) иллюстрируются три разбиения числа 3, а именно 3, 2 + 1, 1 + 1 + 1. (5) Мы будем следовать распространенной практике и называть разбиения целых чисел просто разбиениями, не указывая их объекта. Другой вид будем называть раз- биениями множеств, чтобы ясно указывать различия между указанными видами разбиений. Важны оба вида разбиений, так что мы изучим их по очереди. Генерация всех разбиений целого числа. Разбиение целого числа п фор- мально можно определить как последовательность неотрицательных целых чисел «1 > аг > • • •, такую, что n = ai + «2 Н-; например, одно из разбиений числа 7— щ = а2 = 3, аз = 1 и ад = as = • • • = 0. Количество ненулевых членов называется количеством частей, а нулевые члены обычно просто опускаются. Таким образом, мы записываем 7 = 3 + 3+1, или просто 331, чтобы сэкономить место, если контекст очевиден. Простейший (и один из быстрейших) способ генерации всех разбиений — по- сетить их в обратном лексикографическом порядке, начиная с ‘п’ и заканчивая ‘11... 1’ Например, разбиения 8 в указанном порядке представляют собой 8, 71, 62, 611, 53, 521, 5111, 44, 431, 422, 4211, 41111, 332, 3311, 3221, 32111, 311111, 2222, 22211, 221111, 2111111, 11111111. Если разбиение состоит не из одних единиц, оно завершается некоторым числом (гг+1), где х > 1, за которым следует нуль или несколько единиц; следовательно, очередное наименьшее разбиение в лексикографическом порядке получается путем замены суффикса (х+1) 1... 1 на х... хт для некоторого соответствующего остатка г < х. Процесс достаточно эффективен, если отслеживать наибольший индекс q, такой, что aq / 1, как предложено Д. К. С. Мак-Кеем (J. К. S. McKay) [САСМ 13 (1970), 52], и заполнять массив единицами, как предложено А. Зогби (A. Zoghbi) и И. Стойменовичем (I. Stojmenovic) [InternatiofialJournal of Computer Math. 70 (1998), 319-332]. Алгоритм P (Разбиения n в обратном лексикографическом порядке). Этот алго- ритм генерирует все разбиения щ > а2 > • • • > ат > 1 с щ + а2 + • • • + ат = п и 1 < т < п для п > 1. Значение ад устанавливается равным нулю.
7.2.1.4 ГЕНЕРАЦИЯ ВСЕХ РАЗБИЕНИЙ 447 Р1. [Инициализация.] Установить ат «— 1 для п > т > 1. Затем установить т «— 1 и ао «— 0. Р2. [Сохранение заключительной части.] Установить ат «— п и q <— т — [п = 1]. РЗ. [Посещение.] Посетить разбиение aia2...am. Затем, если ад 2, перейти к шагу Р5. Р4. [Замена 2 на 1+1.] Установить aq<— 1, g«— q — 1,т<— пг +1 и вернуться к шагу РЗ. (В этот момент ак — 1 для q < к < п.) Р5. [Уменьшение ад.] Завершить работу, если q = 0. В противном случае установить т «— ад — 1, а9 «— х, п<— т — g + 1 и m «— д + 1. Р6. [Копирование х при необходимости.] Если п < х, вернуться к шагу Р2. В про- тивном случае установить ат «— х, т <— m + 1, п <— п — хтл повторить данный шаг. | Обратите внимание, что переход от одного разбиения к следующему выполняется особенно просто, если имеется двойка; в этом случае шаг Р4 просто заменяет край- нюю справа двойку единицей и добавляет единицу справа. К счастью, эта удачная ситуация наиболее распространена. Так, для п = 100 двойку содержат около 79% всех разбиений. Если мы хотим генерировать все разбиения числа п на фиксированное количе- ство частей, к нашим услугам другой простой алгоритм. Приведенный далее метод, разработанный в диссертации К. Ф. Гинденбурга (С. F. Hindenburg) в XVIIJ веке [Intinitinomii Dignitatum Exponentis Indeterminati (Gottingen, 1779), 73-91], посещает все разбиения в солексном (colex) порядке, т. е. в лексикографическом порядке “отраженных” последовательностей ат...агО1. Алгоритм Н (Разбиение п на т частей). Этот алгоритм генерирует все целые m-кортежи ai...ат, такие, что щ > • • • > flm > 1 и ai Ч-1- ат - п, в предполо- жении, что п > т > 2. Значение-ограничитель хранится в a,n+i. Hl. [Инициализация.] Установить ai «— п — т + 1 и aj «— 1 для 1 < j < т. Установить также am+i <---1. Н2. [Посещение.] Посетить разбиение ai... ат. Затем, если аг > ai — 1, перейти к шагу Н4. НЗ. [Настройка щ и аг-] Установить «— ai — 1, аг «— аг + 1 и вернуться к шагу Н2. Н4. [Поиск J.] Установить j «— 3 и з «— ai + аг — 1. Затем, если aj > ai — 1, установить s «— s + aj и j «— j + 1 и повторять эти действия до тех пор, пока не будет выполнено условие aj < ai — 1. (Теперь s = aj Ч--Faj-i — 1 и а3; < ai — 1.) Н5. [Увеличение aj.] Завершить работу алгоритма, если j > т. В противном случае ) установить х «— aj + 1, aj «— х, j «— j — 1. Нв. [Настройка ai... aj.] Пока j > 1, устанавливать а}г «— х, з «— s — х и j «— j — 1. В конце установить щ «— з и вернуться к шагу Н2. | Например, при п - 11 и т = 4 последовательные посещаемые алгоритмом разбие- ния представляют собой 8111, 7211, 6311, 5411, 6221, 5321, 4421, 4331, 5222, 4322, 3332. (7)
448 КОМБИНАТОРНЫЙ ПОИСК 7.2.1.4 Основная идея состоит в том, что солексный порядок переходит от одного разбиения ai... ат к другому путем поиска наименьшего j, такого, что aj можно увеличить без изменения aj+i ...а™. Новое разбиение а{ ... а'т будет иметь а[ > • • • > a' = a^ 4-1 и а'х 4--Fa' = аг Ч---F Oj, и эти условия достижимы тогда и только тогда, когда aj < ai — 1. Кроме того, наименьшее такое разбиение а'г... а'т в солексном порядке имеет а£> = • • • = а\ = а,- + 1. z J J Шаг НЗ обрабатывает простой случай j = 2, который наиболее распространен. Следует отметить, что значение j почти всегда достаточно мало; позже мы дока- жем, что общее время работы алгоритма Н не превышает количества посещенных разбиений, умноженного на небольшую константу, плюс О{т). Другие представления разбиений. Мы определили разбиение как последова- тельность неотрицательных целых чисел ai«2 • • • > обладающую теми свойствами, что ai > аг > • • • и ai ч- аг + • • • = п, но его можно рассматривать как п-кортеж неотрицательных целых чисел ciC2--.Cn, таких, что ci 4- 2с2 Ч----F псп = п. (8) Здесь Cj — количество появлений целого числа j в последовательности 0102 ...; на- пример, разбиение 331 соответствует количествам ci = 1, сг = 0, сз = 2, С4 = cs = Сб = ci = 0. Число частей в таком представлении равно ci Ч- С2 Ч- • • • Ч- сп. Можно легко разработать процедуру, аналогичную алгоритму Р, для генерации разбиений в форме количества частей (см. упр. 5). Мы уже встречались с неявным представлением в виде количества частей в фор- мулах наподобие 1.2.9-(38), которая выражает симметричную функцию как hn — ^di - - • 3'dn (9) Cl,C2,—,Cn>0 C14-2C2 + ’—|~7lCn=7l Sp g2C2 lC1ci! 2С2сг! nCnCn\' (Ю) где Sj — симметричная функция х3 + xi, + + x3N. Сумма в (9), по сути, берется по всем n-мультисочетаниям из N объектов, в то время как сумма в (10) берется по всем разбиениям п. Таким образом, например, Лз = ^S3 Ч-4-153, и при N = 2 мы имеем х3 4- х2у 4- ху2 + у3 = 1(х 4- у)3 4- |(х 4- у)(х2 4- у2) 4- |(х3 4- у3)- Другие суммы по всем разбиениям имеются в упр. 1.2.5-21,1.2.9-10,1.2.9-11,1.2.10- 12 и т. д.; по этой причине разбиения занимают важное место в изучении симметрич- ных функций—класса функций, широко распространенного в математике. [Глава 7 книги Ричарда Стенли (Richard Stanley) Enumerative Combinatorics 2 (1999) пред- ставляет собой превосходное введение в современные аспекты теории симметричных Разбиения можно весьма привлекательно визуализировать, рассмотрев массив из п точек, имеющий ai точек в верхней строке, аг в следующей строке и т. д. Такое размещение точек называется диаграммой Феррерса в честь Н. М. Феррерса (N. М. Ferrers) [см. Philosophical Mag. 5 (1853), 199-202]; наибольший квадратный
7.2.1.4 ГЕНЕРАЦИЯ ВСЕХ РАЗБИЕНИЙ 449 :••••: Рис. 48. Диаграммы Феррерса , .... и квадраты Дюрфи для двух со- • • • • • пряженных разбиений. • • • (а) 8887211 (б) 75444443 подмассив точек, содержащийся в такой диаграмме, называется квадратом Дюрфи по имени В. П. Дюрфи (W. Р. Durfee) [см. Johns Hopkins Univ. Circular 2 (December 1882), 23]. Например, на рис. 48, (а) показана диаграмма Феррерса для разбиения 8887211 с квадратом Дюрфи размером 4x4. Квадрат Дюрфи содержит к2 точек, где fc — наибольший индекс, такой, что ак > к; можно называть fc следом (trace) разбиения. Для произвольного разбиения а вида сцаг ... сопряженным (conjugate) с ним является разбиение аТ = Ъфъ-.., которое получается путем транспонирования строк и столбцов соответствующей диаграммы Феррерса, т. е. путем отражения диаграммы относительно главной диагонали. Например, на рис. 48, (б) показано, что (8887211)т = 75444443. Если (3 = ат, то, очевидно, а = /Зт\ разбиение /3 имеет ai частей, а а — bi частей. Имеется простое соотношение между представлениями в виде количества частей Ci... Сп разбиения а и сопряженного разбиения 6162 • • •, а именно bj — bj+i = Cj для всех j > 1. (11) Это соотношение позволяет легко вычислить разбиение, сопряженное данному (см. упр. 6). Понятие сопряженности часто поясняет свойства разбиений, которые иначе вы- глядели бы весьма загадочными. Например, теперь, зная определение ат, можно легко увидеть, что значение j—1 на шаге Н5 алгоритма Н представляет собой вторую наименьшую часть сопряженного разбиения (ai... am)T, где m < п. Следовательно, среднее количество работы, которую необходимо выполнить на шагах Н4 и Н6, по сути, пропорционально среднему размеру второй наименьшей части случайного разбиения, наибольшая часть которого равна т. Ниже мы увидим, что эта вторая наименьшая часть почти всегда достаточно мала. Кроме того, алгоритм Н выводит разбиения в лексикографическом порядке со- пряженных с ними. Например, соответствующими сопряженными с (7) разбиениями являются 41111111, 4211111, 422111, 42221, 431111, 43211, 4322, 4331, 44111, 4421, 443; (12) они представляют собой разбиения п = 11 с наибольшей частью, равной 4. Один из способов генерации всех разбиений п состоит в том, чтобы начать с тривиального разбиения ‘п’, а затем поочередно применить алгоритм Н для т = 2, 3,..., п; такой процесс даст все а в лексикографическом порядке ат (см. упр. 7). Таким образом, алгоритм Н можно рассматривать как дуальный к алгоритму Р. Имеется как минимум еще один способ представления разбиений, называемый краевым представлением (rim representation ) [см. S. Comet, Numer. Math. 1 (1959), 15 Зак. 3331
450 КОМБИНАТОРНЫЙ ПОИСК 7.2.1.4 90-109]. Предположим, что мы заменили точки на диаграмме Феррерса квадратами, получив таким образом подобие таблицы, как делалось в разделе 5.1.4; например, разбиение 8887211 с рис. 48, (а) превращается в Правая граница этого образа может рассматриваться как путь длиной 2п из нижнего левого угла в правый верхний угол квадрата размером пхп, аиз табл. 7.2.1.3-1 мы знаем, что такой путь соответствует (п, п)-сочетанию. Например, (13) соответствует 70-битовой строке 0... 01001011111010001... 1 = 028110211011в01110812Т, (14) в начале которой мы размещаем достаточное количество нулей, а в конце—единиц, чтобы получить в точности по п каждых из них. Нули представляют шаги вверх, а единицы—вправо. Легко видеть, что определенная таким образом битовая строка имеет ровно п инверсий; и наоборот, каждая перестановка мультимножества {п-0, п- 1}, которая содержит ровно п инверсий, соответствует разбиению п. Если разбиение имеет t различных частей, его битовая строка может быть записана в виде рп—«1 —Q2--4t ]Р1 Q41 ]Р2 QQ2 _ _ JPt Q4t ]П-Р1 — Р2-Pt , (15) где показатели степени Pj и qj представляют собой положительные целые числа. В таком случае стандартным представлением разбиения является 0102 ... = (pi Ч------l-Pt)’t(Pi4-1- Pt-i)’*-1 - - (Pi)’1, (16) т. е. в нашем примере (l+H-5+l)3(H-l+5)1(l+l)1(l)2 = 8887211. Количество разбиений. Вопрос, заданный в 1740 году Филиппом Ноде (Philippe Naude), побудил Леонарда Эйлера (Leonhard Euler) написать две фундаментальные статьи, в которых он подсчитывал количества разбиений различных видов, изучая их производящие функции [Commentarii Academiae Scientiarum Petropolitanae 13 (1741), 64-93; Novi Comment. Acad. Sci. Pet. 3 (1750), 125-169]. Он заметил, что коэффициент при zn в бесконечном произведении (1 + z + z2 + + + )(1 + z2 + z4 + + z2k + • • )(1 + z3 + z6 + + z31 + -)... равен количеству неотрицательных целых решений уравнения j + 2к + 31 + • • • = п; а 1 + zm + z2m + • • • равно 1/(1 — zm). Следовательно, если мы запишем ОО - оо = П (17) 7П=1 П=0 то количество разбиений п будет равно р(п). Функция P(z), в свою очередь, обла- дает рядом поразительных математических свойств.
7.2.1.4 ГЕНЕРАЦИЯ ВСЕХ РАЗБИЕНИЙ 451 Например, Эйлер открыл наличие большого количества сокращений при рас- крытии скобок знаменателя P(z): (l-z)(l-z2)(l-z3)... = 1 - z - z2 + z5 + z7 - z12 - z15 + z22 + z26- = 52 (-l)nz(3n2+n)/2. (18) —oc<n<oc Комбинаторное доказательство этого замечательного тождества, основанное на диа- граммах Феррерса, имеется в упр. 5.1.1—14; его можно также доказать, положив u = zhv — z2 в еще более замечательном тождестве, опубликованном Якоби (Jacobi) в 1829году fj(l - №)(! - ufc"V)(l - ukvk) = 52 (-l)”»®®^. (19) k=l n=—oc поскольку левая часть при этом становится равной Hfcl=i(l — z3fc_2) (1 — z3fc-1)(l — z3fc); см. упр. 5.1.1-20. Из тождества Эйлера (18) вытекает, что количество разбие- ний для п > 0 удовлетворяет рекуррентному соотношению p(n) = р(п—1) + р(п—2) — р(п—5) — р(п—7) + р{п—12) + р(п—15)-, (20) где р(к) = 0 при к < 0; это рекуррентное соотношение позволяет вычислить значе- ния быстрее, чем выполняя вычисление степенных рядов (17): п = 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 р(п) = 1 1 2 3 5 7 11 15 22 30 42 56 77 101 135 176 Из раздела 1.2.8 мы знаем, что решение рекуррентного соотношения Фибоначчи /(п) = /(п — 1) + f(n — 2) при положительных /(0) и /(1) растет экспоненциаль- но: f(n) = &(фп). Дополнительные члены р(п—5) — р(п—7)’ в (20) оказыва- ют подавляющее влияние на количество разбиений; более того, если ограничиться в рекуррентном соотношении только этими членами, полученный в результате ряд осциллирует между положительными и отрицательными значениями. Следующие члены, ‘+р(п—12) + р(п—15)’, восстанавливают экспоненциальный рост. Реальная скорость роста р(п) имеет порядок A^ln для некоторой константы А. Например, в упр. 33 доказывается, что р(п) растет как минимум со скоростью е2\/«/п. Еще один простой способ получить неплохую верхнюю границу состоит в логарифмировании (17): ОО In P(z) = У1П--------- = У У---------; ' ' 1 - zm п ’ ТП=1 ТП=1 П=1 затем следует рассмотреть поведение вблизи z = 1, положив z = e-t при t > 0: ,nP(e-<)= у > <Е2_=да. ". п " n etn — 1 " n2t t (21) п etn — 1 П>1 Далее, поскольку p(n) < p(n + 1) < р(п + 2) < - - и е* > 1, получаем Z \ ОО ОО . = У p(n)e(n-fc)t < У p(k)e(n-fc)t = entP(e-t) < ent+c(2)/t к=п к=0 (22) (23)
452 КОМБИНАТОРНЫЙ ПОИСК 7.2.1.4 для всех t > 0. Приравнивание t = \/£(2)/п дает р(п) < I где С = ^/<(2) = тг/л/б. (24) м .2irmi0 (25) Более точную информацию о величине In P(e-t) можно получить, воспользо- вавшись формулой суммирования Эйлера (раздел 1.2.11.2) или преобразованием Меллина (раздел 5.2.2); см. упр. 25. Однако рассмотренные методы недостаточно мощны для определения точного поведения P(e-t), так что самое время добавить в наш арсенал новые методы. Производящая функция Эйлера P(z) идеально подходит для формулы сумми- рования Пуассона [J. Ecole Royale Polytechnique 12 (1823), 404-509, §63], согласно которой ОО /(п + 0) = lira М —*ос п——оо где / — “хорошо себя ведущая” функция. Эта формула основана на том факте, что в левой части находится периодическая функция от в, а в правой—ее разложение в ряд Фурье. Функция / достаточно хорошая, если, например, J_^o|/(y)| dy < оо и i) либо /(п + 0) является аналитической функцией комплексной переменной 0 в области |S0| < е для некоторого е>ОиО<3?0<1и любого п, и левая часть (25) равномерно сходится в |S0| < е; ii) либо /(0) = | lim£_o(/(0 — е) + /(0 + е)) = д(Р) — h(8) для всех действительных чисел 0, где д и h—монотонно возрастающие, а д(±оо), /г(±оо) конечны. [См. Peter Henrici, Applied and Computational Complex Analysis 2 (New York: Wiley, 1977), Theorem 10.6e.] Формула Пуассона—не панацея для задач суммирования любого вида, но если она применима, то ее результаты, как мы увидим, могут быть весьма впечатляющими. Умножим формулу Эйлера (18) на z1/24 для “завершения квадрата”: z1/24 P(z) ©° ^2 (-1)” Z*(n+5)2. (26) п—-оо Тогда для всех t > 0 имеем е */24/Р(е *) = /(п)> где /(у) = е-|*(»+4)2+^; (27) и эта функция / подходит для применения формулы суммирования по обоим при- веденным выше критериям (i) и (ii). Таким образом, можно попытаться проин- тегрировать е~2тпгу f(y), и этот интеграл оказывается очень простым для всех тп (см. упр. 27): e-a(y+br+2ciy dy = Fe-c3/a-2bci при О > 0. (28) J—оо V Подстановка в (25) при 0 = 0, а = 6 = | и с = (| — т)тг дает оо ОО ГХ 52 /(п) = 52 д(т) = И-^е-2{тп-^2/^+к=^^. (29) V ОЬ
7.2.1.4 ГЕНЕРАЦИЯ ВСЕХ РАЗБИЕНИЙ 453 Эти члены объединяются и сокращаются, как показано в упр. 27, давая в результате = J<») Небольшой сюрприз: мы только что доказали еще один замечательный факт о P(z) — приведенную далее теорему. Теорема D. Производящая функция (17) для разбиений удовлетворяет функцио- нальному соотношению 1п Р(е-‘) = ф + 11п±-±+1п Р(е-4^) t 2 27Г 24 (31) при ЭЙ > 0. | Эта теорема была открыта Рихардом Дедекиндом (Richard Dedekind) [СгеПе 83 (1877), 265-292, §6], который для функции zMu]P(z) использовал запись т?(т), где z = е2’Г1Т; его доказательство основано на существенно более сложной теории эллип- тических функций. Заметим, что, когда t — малое положительное число, значение 1пР(е-47г2/‘) крайне мало; например, при t = 0.1 получаем ехр(—4тг2/£) ~ 3.5 х 10“172. Таким образом, теорема D дает нам практически все, что необходимо знать о значении P(z) при z, близком к 1. Г. Г. Харди (G. Н. Hardy) и С. Рамануджан (S. Ramanujan) использовали это зна- ние для вывода асимптотического поведения р(п) при болыпйх п, и их работа была расширена много лет спустя Гансом Радемахером (Hans Rademacher), открывшим ряд, который не только асимптотичен, но и сходится [Proc. London Math. Soc. (2) 17 (1918), 75-115; 43 (1937), 241-254]. Формула Харди-Рамануджана-Радемахера для р(п) — поистине одно из наиболее изумительных тождеств; оно гласит, что , ч _ __________тг________Ак(п) т / /2тг ,--------- Р(П) 25/433/4(п _ 1/24)3/4 Ху k 3/2 у V 3 fc ” I J- Здесь I3/2 означает модифицированную сферическую функцию Бесселя _ 7z\3/2 y""' 1 (z2/4)fc _ f2z (cosh г sinhz\ 1з/г(г) = X,r(fc + 5/2) k\ ~ / а коэффициент Afc(n) определяется формулой Ak(n) = [h ± fc] ехр(2тгг (°) h=0 (32) (33) (34) t))- где cr(h, fc, 0) —сумма Дедекинда, определенная в уравнении 3.3.3-(16). В результате Ai(n) = l, А2(п) = (—1)", А3(п) = 2cos(24п*1)?Г, (35) 1о и в общем случае Afc(n) лежит между — fc и fc. Доказательство (32) может увести нас слишком далеко, но основная идея за- ключается в использовании “метода седловой точки’,’ рассматриваемого в разделе 7.2.1.5. Член для fc = 1 выводится из поведения P(z) при z, близком к 1; следующий
454 КОМБИНАТОРНЫЙ ПОИСК 7.2.1.4 (l + CKn-V2)). (36) член выводится из поведения при z, близком к —1, когда можно применить преоб- разование, аналогичное (31). В общем случае fc-й член (32) учитывает поведение P(z) при z, стремящемся к e27rlh/fc, для несократимых дробей h/k со знаменателем к; каждый fc-й корень единицы представляет собой полюс для каждой из дробей 1/(1 — zk), 1/(1 — z2k), 1/(1 — z3fc), ... в бесконечном произведении P(z). Старший член (32) может быть существенно упрощен, если нам достаточно грубого приближения: g?r-y/2n/3 4п>/3 Или, если такой точности недостаточно, можно воспользоваться более детальным приближением p(n) = S(1-^)(1 + °(‘-"'/::75))- ’*' = ”-5- <37> Например, р(100) имеет точное значение 190 569 292; формула (36) дает нам р(100) » 1.993 х 108, в то время как (37) дает гораздо лучшую оценку: 190568944.783. Э. Одлызко (A. Odlyzko) заметил, что при болыпйх п формула Харди-Раману- джана-Радемахера в действительности дает близкий к оптимальному способ вычис- ления точного значения р(п), поскольку арифметические операции могут быть вы- полнены примерно за O(logp(n)) = О(п1/2) шагов. [См. Handbook of Combinatorics 2 (MIT Press, 1995), 1068-1069.] Основной вклад дают несколько первых членов (32); затем ряд стремится к членам, не превышающим порядка fc-3/2 и обычно имеющим порядок fc-2. Кроме того, около половины коэффициентов Аь(п) оказываются ну- левыми (см. упр. 28). Например, при п = 10е члены для fc = 1, 2 и 3 приблизительно равны ю 1.47 х 1О1107, 1.23 х 1О550 и -1.23 х 10364 соответственно. Сумма первых 250 членов приближенно равна « 1471684986... 73818.01, в то время как истинное значение представляет собой 1471684986... 73818; при этом 123 из 250 членов равны нулю. Количество частей. Удобно ввести обозначение для числа разбиений п, состоящих ровно из т частей. Тогда для всех целых тип выполняется рекуррентное соотношение I п I In—11 In — ml — i + L (39) Iml Im— II I m I поскольку |^“i| подсчитывает разбиения, наименьшая часть которых равна 1, a |n“m|—прочие разбиения. (Если наименьшая часть равна 2 или больше, можно вычесть из каждой части по 1 и получить разбиение п — m на т частей.) Анало- гичные рассуждения позволяют заключить, что |m+n| —количество разбиений п на не более т частей, а именно на т неотрицательных слагаемых. Мы также знаем из транспонирования диаграмм Феррерса, что |^| представляет собой количество
7.2.1.4 ГЕНЕРАЦИЯ ВСЕХ РАЗБИЕНИЙ 455 Таблица 2 Количества разбиений п п п п п п п п п п п п 0 1 2 3 4 5 6 7 8 9 10 11 0 1 0 0 0 0 0 0 0 0 0 0 0 1 0 1 0 0 0 0 0 0 0 0 0 0 2 0 1 1 0 0 0 0 0 0 0 0 0 3 0 1 1 1 0 0 0 0 0 0 0 0 4 0 1 2 1 1 0 0 0 0 0 0 0 5 0 1 2 2 1 1 0 0 0 0 0 0 6 0 1 3 3 2 1 1 0 0 0 0 0 7 0 1 3 4 3 2 1 1 0 0 0 0 8 0 1 4 5 5 3 2 1 1 0 0 0 9 0 1 4 7 6 5 3 2 1 1 0 0 10 0 1 5 8 9 7 5 3 2 1 1 0 11 0 1 5 10 11 10 7 5 3 2 1 1 разбиений п, у которых наибольшая часть равна тп. Таким образом, |^|—число, которое стоит того, чтобы его изучить. Граничные условия 121= бпо и П I = 0 для тп < 0 или п < 0 (40) 101 I ml делают простой табуляцию |^| для небольших значений параметров, и мы можем получить массив чисел аналогично знакомым треугольникам для (^), [^], {^} и с которыми мы встречались ранее (табл. 2). Производящая функция имеет ВИД V I П L" = ___________—___________ (41) ^Iml (1 — z)(l — Z2) ... (1 — ZTO) ' V ' Почти все разбиения п состоят из ©(^/nlogn) частей. Этот факт, открытый П. Эрдешем (Р. Erdos) и Д. Ленером (J. Lehner) [Duke Math. J. 8 (1941), 335-345], имеет весьма поучительное доказательство. Теорема Е. Пусть С = тгД/б и тп = ^у/п\пп + Ху/п + 0(1). Тогда = Кх)(1 + О(п-1/2-)) (42) р(п) I тп I для всех е > 0 и всех фиксированных х при п —> оо, где F(x) = е~е~Сх^с. (43) Функция F(x) в (43) достаточно быстро стремится к 0 при х —> —оо и быстро возрастает до 1 при х —> +оо; таким образом, это функция распределения вероятно- стей. На рис. 49, (б) показана соответствующая функция плотности распределения вероятностей f(x) = F'(x), в основном сосредоточенная в области — 2 < х < 4. (См. упр- 35.) Для сравнения на рис. 49, (а) показаны значения |^| = |m+n| — для п = 100; в этом случае ^y/nlnn « 18.
456 КОМБИНАТОРНЫЙ ПОИСК 7.2.1.4 Рис. 49. Разбиения п на тп частей для (а) п = 100; (б) п -> оо. (См. теорему Е.) Доказательство. Воспользуемся тем фактом, что |т^п| —количество разбиений п, у которых большая часть < тп. Тогда, согласно принципу включения и исключения (формула 1.3.3-(29)), имеем т+П = Р(п) ~У2р(п- j) 4- V p(n - Ji - j2) - V р(п~ & ~ 32 - js) + • • •, 3>т 32>h>m Js>j2>Ji>«n поскольку p(n—ji-----jr) —количество разбиений п, которые используют каждую из частей {ji,..., хотя бы один раз. Запишем это как -3-r|m+n| = 1-Ei+S,-£з +, £,= £ "• Л> (44) p(n) m “ р(п) 7 3г>- >31>тп Чтобы вычислить Sr, нам нужна хорошая оценка отношения p(n — t)/p(n). Нам везет, поскольку из (36) вытекает, что ^П( = — — 1п(п — 0 + О((п — — ЧСу/п + Inn) = ехр(—Ctn-1/2 + О(п-1/2+2£)) при 0 < t < п1/2**. (45) Далее, если t > мы имеем p(n — t)/p(n) < р(п — п^+^/р^п) и ехр(—Сп£), значение, которое асимптотически меньше, чем любая степень п. Следовательно, можно безопасно использовать приближение »а*, а = ехр(—Сп-1/2), (46) р(п) для всех значений t > 0. Например, мы имеем Е1 = уЕ(п^) = «^(1+ 1/2+2 )+ у- Р(П) 1-“ ₽—Сх = (1 + О(п-1/2+2£)) +О(пе-Сп ), О
7.2.1.4 ГЕНЕРАЦИЯ ВСЕХ РАЗБИЕНИЙ 457 поскольку <л/(1 — а) = + 0(1) и am = п 1/2е Сх + О(п х). Аналогичные доводы (см. упр. 36) доказывают, что при г = O(log п) -,—Сгх . = ——Г(1 + О(п-1/2+2£)) + О(е-П‘/ ). (47) Ст! Наконец—и это замечательное свойство принципа включения и исключения — частичные суммы (44) всегда “берут в вилку” истинное значение, в том смысле, что 1 — Si + S2 — • • — S2,—1 < , ; I I < 1 — Si + S2 — • • • — Х2,—1 + ^2г (48) р(п) I тп I для всех г. (См. упр. 37.) Когда 2г близко к Inn и п велико, член ^2г чрезвы- чайно мал; таким образом, мы получаем (42), за исключением того, что вместо е используется 2е. | Теорема Е говорит о том, что наибольшая часть случайного разбиения почти всегда представляет собой у/п In n+O( у/п log log log п), и при достаточно большом п остальные части также имеют тенденцию к предсказуемости. Предположим, например, что мы берем все разбиения числа 25 и накладываем одну на другую их диаграммы Феррерса, заменяя точки квадратами, как в случае краевого пред- ставления. Какие ячейки будут заниматься особенно часто? На рис. 50 показан результат: случайное разбиение стремится к типичному виду, приближающемуся к предельной кривой при п —> оо. Г. Н. В. Темперли (Н. N. V. Temperley) [Proc. Cambridge Philos. Soc. 48 (1952), 683-697] привел эвристические обоснования того, что основные части а*, большого случайного разбиения щ ... ат будут удовлетворять приближенному закону е~Ск/у/И + e-COfc/vAf и j (49) и его формула была впоследствии подтверждена в строгом виде. Например, теорема Б. Питтеля [Advances in Applied Math. 18 (1997), 432-488] позволяет заключить, что след случайного разбиения почти всегда равен ^/у/п ~ 0.54-у/п, что согласуется с (49) с ошибкой не более O(vZnlnn)1/2; таким образом, около 29% всех точек Феррерса лежат в пределах квадрата Дюрфи.
458 КОМБИНАТОРНЫЙ ПОИСК 7.2.1.4 С другой стороны, если рассмотреть только разбиения п на т частей, где т — фиксированная величина, ограничивающая кривая будет иной: почти все разбиения имеют ак « — In— (50) т к при достаточно больших тип. На рис. 51 показан случай п - 50, тп = 5. В действи- тельности тот же предел справедлив при тп, растущем с ростом п, но со скоростью, меньшей у/п [см. А. Вершик и Ю. Якубович, Moscow Math. J. 1 (2001), 457-468]. 0 п/т 2п/т Рис. 51. Ограничивающая форма (50) для тп частей. Краевое представление дает нам дальнейшую информацию о дважды ограни- ченных разбиениях, когда ограничено не только количество частей, но и размер каждой части. Разбиение, имеющее не более тп частей, каждая из которых не превышает I, находится внутри прямоугольника тп х I. Все такие разбиения со- ответствуют перестановкам мультимножества {тп • 0,1 • 1}, которые имеют ровно п инверсий (инверсии мультимножеств мы уже изучали в упр. 5.1.2-16). В частно- сти, в упомянутом упражнении выводится неочевидная формула для количества способов получения п инверсий. Теорема С. Количество разбиений п, которые состоят не более чем из тп частей, не превышающих по размеру I, составляет [2 Ц m ).-[г 1 (1-г) (1-г2) - (1-г-) (Я) Этот результат получен А. Коши (A. Cauchy), Comptes Rendus Acad. Sci. 17 (Paris, 1843), 523-531. Обратите внимание, что при I —> оо числитель становится равным просто 1. Интересное комбинаторное доказательство более общего результата име- ется ниже, в упр. 40. | Анализ алгоритмов. Теперь мы более чем достаточно знаем о количественных аспектах разбиений, чтобы с высокой степенью точности проанализировать поведе- ние алгоритма Р. Предположим, что шаги Р1,..., Р6 этого алгоритма выполняются соответственно 7i(n), ..., 7б(п) раз. Очевидно, что 7i(n) = 1 и Т3(п) = р(п); кроме того, закон Кирхгофа говорит нам, что Tz(n) = Т5(п) и Т\(п) + Т5(п) = Т3(п). Мы переходим к шагу Р4 по одному разу для каждого разбиения, содержащего 2; ясно, что это происходит р(п — 2) раз. Таким образом, единственная возможная загадка алгоритма Р — это количество выполнений шага Р6, в котором возможен переход к самому себе. Однако неболь- шое размышление открывает нам, что алгоритм сохраняет значение > 2 в массиве 0102 ... только на шаге Р2 или перед проверкой п < х на шаге Р6; и каждое такое значение в конечном итоге уменьшается на 1 либо на шаге Р4, либо на шаге Р5. Следовательно, Т"(п) + Т6(п) = р(п) - 1, (52)
7.2.1.4 ГЕНЕРАЦИЯ ВСЕХ РАЗБИЕНИЙ 459 где ^'(п) — количество раз, когда шаг Р2 устанавливает ат равным значению > 2. Пусть Tz(n) = T^n) + ^"(п), так что ^(п)—количество раз, когда шаг Р2 уста- навливает am <— 1. Тогда Т^п) + Т4(п)— количество разбиений, заканчивающихся на 1, следовательно, Т^п) + Т4(п) = р(п — 1). (53) Итак, мы получили достаточное количество уравнений, чтобы определить все иско- мые величины: (7i(n),...,T6(n)) = (1, р(п) — р(п-2), р(п), р(п—2), р(п) — р(п—2), р(п—1) — 1). (54) Из асимптотики р(п) мы также знаем среднее количество вычислений на одно раз- биение: (Ш. = (оi-C) +o(i), (») \ p(n) р(п) / \ у/п у/п у/п у/nJ \п/ где С = тг/л/б ~ 1.283. (См. упражнение 45.) Общее количество обращений к памяти на одно разбиение составляет, таким образом, 3 + С/у/п, + О(1/п). Если кто-то захочет сгенерировать все разбиения, он должен не только выполнить непомерную работу, но и быть безмерно внимательным, чтобы не ошибиться. — ЛЕОНАРД ЭЙЛЕР (LEONHARD EULER), Разбиение чисел (De Partltlone Numerorurri) (1750) Алгоритм Н более сложен для анализа, но можно доказать как минимум верх- нюю границу времени его работы. Ключевой величиной является значение j, наи- меньшего индекса, для которого aj < щ — 1. Последовательные значения j для тп = 4 и п = 11 равны (2,2,2,3,2,2,3,4,2,3,5), и мы замечаем, что j = i + 1, где bi... bi —сопряженное разбиение (ai... am)T итп <п. (См. (7) и (12).) На шаге НЗ выделяется случай j = 2, поскольку он не только наиболее часто встречается, но и очень легко обрабатывается. Пусть ст(п) —накопленное общее значение j — 1, просуммированное по всем |^| разбиениям, сгенерированным алгоритмом Н. Например, С4(11) = 1+1+1+2+ 14-1 + 2 + 3 + 1 + 2 + 4= 19. Можно рассматривать cm(«)/|^| как хороший пока- затель времени работы на одно разбиение, поскольку время выполнения наиболее затратных шагов, Н4 и Н6, грубо пропорционально j — 2. Это отношение Ст(п)/|^| не ограничено, поскольку cm(m) = т при |™| = 1. Однако следующая теорема показывает, что, тем не менее, алгоритм Н вполне эффективен. Теорема Н. Мера стоимости ст(п) алгоритма Н не превышает 3|^| + тп. Доказательство. Можно легко проверить, что cm(n) удовлетворяет тому же ре- куррентному соотношению, что и |^|, а именно ст(п) = cm_!(n—1) + ст(п — т) длят, п>1, (56) если искусственно определить ст(п) = 1 при 1 < п < тп; см. (39). Однако граничные условия теперь иные: cm(0) = [т>0]; со(п) = 0. (57)
460 КОМБИНАТОРНЫЙ ПОИСК 7.2.1.4 Таблица 3 Стоимости алгоритма Н п Со(п) ci(n) с2(п) сз(п) С4(п) с5(п) се(п) с7(п) са(п) Cg(n) сю(п) cu(n) 0 0 1 1 1 1 1 1 1 1 1 1 1 1 0 1 1 1 1 1 1 1 1 1 1 1 2 0 1 2 1 1 1 1 1 1 1 1 1 3 0 1 2 3 1 1 1 1 1 1 1 1 4 0 1 3 3 4 1 1 1 1 1 1 1 5 0 1 3 4 4 5 1 1 1 1 1 1 6 0 1 4 6 5 5 6 1 1 1 1 1 7 0 1 4 7 7 6 6 7 1 1 1 1 8 0 1 5 8 11 8 7 7 8 1 1 1 9 0 1 5 11 12 12 9 8 8 9 1 1 10 0 1 6 12 16 17 13 10 9 9 10 1 11 0 1 6 14 19 21 18 14 11 10 10 11 В табл. 3 показано поведение ст(п) при малых тип. Для доказательства теоремы докажем на самом деле более строгий результат: ст(п) < 31 + 2m — п — 1 для п > тп > 2. (58) I m I В упр. 50 показано, что это неравенство выполняется при т < п < 2m, так что доказательство будет завершено, если доказать его для п > 2m. В этом случае по индукции имеем ст(п) =С1(п — т)+ С2(п — т) + сз(п - т) Ч-1- ст(п — т) < 1 + (3|п 2т| + 3—n+m) + (3|n Зт1 + 5—п+т) + • • • + (3|ППУ*| + 2т—1—п+т) = 3|п7т| + 3|~-т| + • • • + 3|п“т| - 3 + т2 - (т - 1)(п - т) = 3| ~ | + 2т2 — т — (т — 1)п — 3; а 2т2 — т — (т — 1)п — 3 < 2т — п — 1, так как п > 2т +1. I *Код Грея для разбиений. При генерации разбиений в виде количества частей ci.. .Сп (как в упр. 5) на каждом шаге изменяется не более четырех значений Cj. Однако можно предпочесть минимизировать изменения отдельных частей, генери- руя разбиения таким образом, чтобы следующее за щаг -.. разбиение получалось простой установкой aj;Oj +1 и а*, «— а*, — 1 для некоторых j и fc, как в алгоритме двери-вертушки из раздела 7.2.1.3. Это оказывается всегда возможным; для п = 6 имеется единственный способ такой генерации: 111111, 21111, 3111, 2211, 222, 321, 33, 42, 411, 51, 6. (59) В общем случае |m+n| разбиений п на не более m частей всегда могут быть сгене- рированы подходящим путем Грея. Заметим, что а (3 представляет собой допустимый переход от одного раз- биения к другому тогда и только тогда, когда мы получаем диаграмму Феррерса
7.2.1.4 ГЕНЕРАЦИЯ ВСЕХ РАЗБИЕНИЙ 461 для Р путем перемещения только одной точки диаграммы Феррерса для а. Таким образом, ат —* (Зт также является допустимым переходом. Отсюда следует, что каждый код Грея для разбиения не более чем на m частей соответствует коду Грея для разбиений на части, не превосходящие тп. Мы будем работать именно с этим последним ограничением. Общее количество кодов Грея для разбиений очень велико: для п = 7 их 52; для п — 8 — 652; для п = 9 — 298896; а для п = 10 — 2291100484. Однако реально простое их построение неизвестно. Вероятно, причина в том, что некоторые разбиения имеют только двух соседей, а именно разбиения dn/d при 1 < d < п и п, кратном d. Для таких разбиений предшествующими и последующими должны быть разбиения {(d+l)dn/d-2(d—1), dn/d-1(d—1)1}, и это требование, похоже, исключает любой простой рекурсивный подход. Карла Д. Сэведж (Carla D. Savage) [J. Algorithms 10 (1989), 577-595] нашла способ преодоления этих трудностей ценой всего лишь небольшой сложности. Пусть 1"/™1 ц(тп, п) = тп тп ... тп (n mod тп) (60) представляет собой лексикографически наибольшее разбиение п с частями < тп. Наша цель состоит в построении рекурсивно определенных путей Грея Цтп, п) и М(тп,п) от разбиения 1п до д(т,п), где L(m,ri) проходит по всем разбиениям, части которых ограничены тп, в то время как М(тп, п) не только проходит по всем этим разбиениям, но и включает разбиения, наибольшая часть которых равна m+1, при условии, что все прочие части строго меньше тп. Например, Г(3,8) —11111111, 2111111,311111, 221111,22211, 2222,3221, 32111,3311, 332, в то время как Л1(3,8) — 11111111, 2111111, 221111, 22211, 2222, 3221, 3311, 32111, 311111, 41111, 4211, 422, 332; (61) дополнительные разбиения, начинающиеся с 4, дадут нам “пространство подгонки” в других частях рекурсии. Мы определим Ь(тп,п) для всех п > 0, а М(тп,п)— только для n > 2m. Следующее построение, проиллюстрированное для простоты при тп = 5, почти работоспособно: L(5) = Г(3) 1 4Г(оо)л > 5L(oo) J при п < 7; (ДЗ) 4Г(2)л 5£(2) 431 44 53 > при п = 8; Л1(4) ] (62) < 54Ь(4)л > при п > 9; 55Z(5) J fb(4) } (1(4) } 5Г(4)л 5Л1 (4)л Л1(5) = < 6L(3) > при 11 < п < 13; < 6Г(4) > при п > 14. (63) 64Г(оо)л 554Г(4)Л l55Z(oo) J l555L(5) J Здесь параметр п в L(m, п) и М(тп, п) опущен, поскольку он может быть выведен из контекста; предполагается, что каждые L и М генерируют разбиения для любого
462 КОМБИНАТОРНЫЙ ПОИСК 7.2.1.4 количества, остающегося после вычитания предыдущих частей. Так, например, (63) указывает, что М(5,14) = 6(4,14), 5Л1(4,9)л, 66(4,8), 5546(4,0)л, 5556(5,-1); последовательность 6(5, —1) в действительности пустая, а 6(4,0) представляет собой пустую строку, так что последнее разбиение Л1(5,14) представляет собой 554 = ц(5,14), как и должно быть. Запись 6(оо) означает 6(oo,n) = L(n,n), путь Грея для всех разбиений п, начинающихся с 1п и заканчивающихся п1. В общем случае L(m) и М(тп) определяются для всех тп > 3, по сути, одними и теми же правилами, если цифры 2,3, 4, 5 и 6 в (62) и (63) заменить соответственно на тп—3, тп—2, тп— 1, тп и т+1. Диапазоны п < 7, п = 8, п > 9 превращаются в п < 2m — 3, п = 2тп — 2, п > 2m — 1; диапазоны 11 < п < 13 и п > 14 становятся диапазонами 2m + 1 < п < Зт — 2 и п > 8тп — 1. Последовательности 6(0), 6(1), 6(2) имеют очевидные определения, поскольку эти пути единственны при тп < 2. Последовательность М(2) представляет собой ln, 21n-2, З1п-3, 221п-4, 2221”-6, ..., ц(2, п) для п > 5. Теорема S. Пути Грея L'(m,n) для тп,п > 0 и М'(тп,п) для п > 2m + 1 > 5 существуют для всех разбиений с описанными выше свойствами, за исключением случая 1/(4,6). Кроме того, L' и М' удовлетворяют взаимным рекурсиям (62) и (63), за исключением нескольких случаев. Доказательство. Выше мы отмечали, что (62) и (63) почти работоспособны; чи- татель может убедиться, что затруднения возникают только в случае 6(4,6), когда (62) дает 6(4,6) = 6(2,6), 36(1,3)л 46(1,2), 321, 33, 42 = 111111, 21111, 2211, 222, 3111, 411, 321, 33, 42. (64) Если тп > 4, все в порядке, поскольку переход от конца 6(т—2,2т—2) к началу (т—1)6(т—3,т—1)л является переходом от (т—2)(т—2)2 к (т—1)(т—3)2. Удов- летворительного пути 6(4,6) не существует, поскольку все коды Грея через эти девять разбиений должны оканчиваться одним из следующих разбиений: 411, 33, 3111, 222 или 2211. Для нейтрализации этой аномалии необходимо исправить определения 6(т, п) и М(т,п) в восьми местах, где вызывается “некорректная подпрограмма” 6(4,6). Один простой путь состоит в следующих определениях: 6'(4,6) = 111111,21111,3111,411,321,33,42; 6'(3,5) = 11111,2111,221,311,32. ' > Таким образом, в 6(4,6) опущены 222 и 2211; мы также перепрограммируем 6(3,5) так, чтобы 2111 было по соседству с 221. В этом случае, как показано в упр. 60, всегда легко “состыковать” два разбиения, отсутствующие в 6(4,6). | Упражнения 1. [М21 ] Найдите формулу для общего количества размещений в каждой из задач двена- дцатизадачия. Например, количество n-кортежей из m вещей равно тп. (Где это можно, воспользуйтесь обозначением из (38) и будьте аккуратны, чтобы ваши формулы работали даже при значениях m = 0 и п = 0.)
7.2.1.4 ГЕНЕРАЦИЯ ВСЕХ РАЗБИЕНИЙ 463 ► 2. [20] Покажите, что небольшое изменение шага Н1 дает алгоритм, который генерирует все разбиения п не более чем на т частей. 3. [Л/17] Разбиение щ Ч t-am числа п на т частей щ > - - > ат является оптимально сбалансированным, если |а, — aj\ < 1 для 1 < i, j < т. Докажите, что имеется ровно одно такое разбиение, какими бы ни были п > т > 1, и приведите простую формулу для выражения j-й части aj в виде функции от j, тип. 4. [М22] (Гидеон Эрлих (Gideon Ehrlich), 1974.) Каково лексикографически наименьшее разбиение п, в котором все части > г? Например, для п = 19 и г = 5 ответом является 766. ► 5. [23] Разработайте алгоритм, который генерирует все разбиения п в виде количества частей ci ...с„ из (8). Сгенерируйте их в солексном порядке, т. е. лексикографическом порядке Cn--.ci, который эквивалентен лексикографическому порядку соответствующих разбиений aiai.... Для эффективности поддерживайте таблицу связей loh ... 1п, такую, что если различные значения fc, для которых Ck > 0, представляют собой fci < • • < kt, то lo = fci, Ikt = ki, ..., lkt-i = kt, Ikt = О- (Так, разбиение 331 будет представлено как ci.. .cq = 1020000, lo = 1, h = 3 и /3 = 0; прочие связи 1%, I4, l&, le, h могут принимать любые значения.) в. [20] Разработайте алгоритм вычисления ЬхЬз • - - = (0102 )т для заданного щаг.... 7. [М20] Предположим, что аг .. ,ап и aj ...а'п — разбиения п, такие, что aj > • • • > Оп> 0 и а\ > • - • > а'п > 0, и пусть им соответствуют сопряженные разбиения Ьг ... Ьп = (ах... а„)т и Ь'1... Ъ'п = (ai ... а'п')Т. Покажите, что Ьг... Ьп < М ... тогда и только тогда, когда «„•••«! < а'п .. .а'х. 8. [15] Пусть (pi...pt, qi qt) — краевое представление разбиения щаг • • •, как в (15) и (16). Какой вид имеет в этом случае сопряженное разбиение (aiaz )т? 9. [22] Пусть ахаг ат и ЬхЬз ... Ьт = (ах аг • ат)Т—сопряженные разбиения. По- кажите, что мультимножества {<zi + 1, аг + 2,..., ат + т] и {t»i + 1, Ьг + 2,..., Ьт + т} равны. 10. [21] При рассмотрении разбиений зачастую полезными оказываются бинарные дере- вья двух простых видов: (а) дерево, которое включает все разбиения всех целых чисел; (б) дерево, которое включает все разбиения данного целого п (на рисунке показано дерево для п = 8). Выведите общее правило, лежащее в основе этих конструкций. Какой порядок обхода дерева соответствует лексикографическому порядку разбиений? 11. [М22] Сколько имеется способов заплатить один евро монетами номиналом 1, 2, 5, 10, 20, 50 и/или 100 центов? А если можно использовать не более двух монет каждого номинала?
464 КОМБИНАТОРНЫЙ ПОИСК 7.2.1.4 12. [M2J] (Л. Эйлер (L. Euler), 1750.) Воспользуйтесь производящей функцией для дока- зательства того, что количество способов разбиения п на различные части равно количе- ству способов разбиения п на нечетные части. Например, 5 = 4 + 1 = 3 + 2; 5 = 3 + 1 + 1 = 1 + 1+ 1 + 1 + 1. [Примечание: в двух следующих упражнениях использованы комбинаторные методы для доказательства расширений этой знаменитой теоремы.] 13. [М23] (Ф. Франклин (F. Franklin), 1882.) Найдите взаимно однозначное соответствие а +> /3 между разбиениями п, такими, что а содержит ровно к повторяющихся частей тогда и только тогда, когда /3 содержит ровно к четных частей. (Например, разбиение 64421111 имеет две повторяющиеся части {4,1} и три четные части {6,4,2}. Случай к = 0 соответствует результату, полученному Эйлером.) 14. [M2S] (Д. Д. Сильвестер (J. J. Sylvester), 1882.) Найдите взаимно однозначное со- ответствие между разбиениями п на различные части aj > az > • > ат с ровно к “просветами” в которых aj > aj+i + 1, и разбиениями п на нечетные части с ровно к + 1 различными значениями. (Например, при к = 0 это построение доказывает, что количество способов записать п как сумму последовательных целых чисел равно количеству нечетных делителей п.) 15. [М20] (Д. Д. Сильвестер (J. J. Sylvester).) Найдите производящую функцию для количества самосопряженных разбиений, т. е. таких разбиений, у которых а = аТ. 16. [М21] Найдите формулу для np(k,m,n)wmzn, где р(к,т,п)— количество разби- ений п, состоящих из т частей и имеющих след к. Просуммируйте ее по к для получения нетривиального тождества. 17. [М2б] Объединенным разбиением (joint partition) п называется пара последователь- ностей (ai,...,ar; bi, ,Ья) положительных целых чисел, у которых ai > > ar, bi > • • • > Ья, и ai + + Or + bi + • • • + Ья = п. Таким образом, при в = 0 получается обычное разбиение, а при г = 0 — разбиение на различные части. а) Найдите простую формулу для производящей функции ur+svszn, где суммирование выполняется по всем объединенным разбиениям пег обычных частей а, и в различных частей bj. б) Аналогично найдите простую формулу для usz", где суммирование выполняется по всем объединенным разбиениям, состоящим ровно из г + в = t частей, для заданного значения t. Например, ответом для t = 2 является (1 + г>)(1 + vz)z2/((l — z)(l — г2)). в) Какое тождество вы вывели? 18. [М23] (Дорон Зайльбергер (Doron Zeilberger).) Покажите, что существует взаимно од- нозначное соответствие между парами целочисленных последовательностей (ai,аг,..., аг; bi, Ьг,..., Ья), таких, что ai > аг > • • > ar, bi > Ьг > • • • > Ья, и парами целочисленных последовательностей (ci,cz,.. - ,сг+я; di,dz,.. • ,dr+s), таких, что ci > сг > > Cr+s, dj € {0,1} для 1 < j < г + з, связанных уравнениями для мультимножеств {ai,a2,...,ar} = {с, | d, = 0} и {Ь1,Ьг,... ,ЬЯ} = {cj[+ г + з — j | dj; = 1}.
7.2.1.4 ГЕНЕРАЦИЯ ВСЕХ РАЗБИЕНИЙ 465 В результате получаем интересное тождество ur+si;s2O1++°’-+|,1+-+1’» 4---М* 4--------|-ct+(t- l)di4---Fdt-i “1>- Ь1> >ar>0, r>0 •>b,>O,s>O ci >0, t>0 di,...,dt€{O,l} 19. [M22] (Э. Гейне (E. Heine), 1847.) Докажите четырехпараметрическое тождество тт (l-wxzm)(l-wyzm) wk(x-l)(x-z) ... (x-zk~1)(y-l)(y-z)... (y-zk~1)zk A A (1— wzm)(l- wxyzm) (1—z)(l—z2) ... (1— zfc)(l— wz)(l— wz2) ... (1— wzk) m— 1 K—0 Указание: выполните суммирование по к или I в формуле V J (z ~ nz)(z - a*2) • • • (z - «**) (z - M(* - bz2) (z - b?) (l-z)(l-z2)...(l-z*) (l-z)(l-z2)...(l-z‘) и рассмотрите упрощение, возникающее при b = auz. 20. [М21 ] Сколько приблизительно времени займет вычисление таблицы числа разбиений р(п) для 1 < п < N с использованием рекуррентного соотношения Эйлера (20)? 21. [1И21] (Л. Эйлер (L. Euler).) Пусть g(n) — количество разбиений п на различные части. Как лучше вычислить g(n), зная р(1), ..., р(п)? 22. [7СИ21] (Л. Эйлер (L. Euler).) Пусть <т(п)— сумма всех положительных делителей положительного целого числа п. Тогда <т(п) = п + 1 для простого п и может оказаться существенно больше п для “высокосоставного” п. Докажите, что, несмотря на достаточно хаотичное поведение, <т(п) удовлетворяет почти такому же рекуррентному соотношению (20), как и количество разбиений: <т(п) = сг(п—1) + <т(п—2) — <т(п—5) — <т(п—7) + сг(п—12) + сг(п—15) — - - - для п > 1, с тем отличием, что, когда в правой части встречается член ‘сг(О)’, вместо него используется значение ‘п’. Например, <т(11) = 1 + 11 = <т(10) + ст (9) — ст(6) — ст(4) = 18+13-12-7; <т(12) = 1+2+3+4+6+12 = ff(ll)+ff(10)-ff(7)-CT(5)+12 = 12+18-8-6+12. 23. [7СИ25] Воспользуйтесь тождеством тройного произведения Якоби (19) для доказа- тельства еще одной открытой им формулы: ОО оо П(1-г*)3 = 1 - 3z + 5z3 - 7z6 + 9z10----= 52(-l)"(2n+ ljztV). fc=l n=0 24. [M26] (С. Рамануджан (S. Ramanujan), 1919.) Пусть A(z) - IJkii (1 — zfc)4. а) Докажите, что [zn] A(z) кратно 5, если n mod 5 = 4. б) Докажите, что [zn] A(z)B(z)5 обладает тем же свойством, где В — произвольный сте- пенной ряд с целыми коэффициентами. в) Следовательно, р(п) кратно 5, если n mod 5 = 4. 25. [НА/27] Улучшите оценку 1пР(е~‘) (22) с помощью (а) формулы суммирования Эй- лера и (б) преобразований Меллина. Указание: билогарифмическая функция Ыг(х) = х/12+х2/22 +х3/32+• • • удовлетворяет соотношению 1дг(я:)+1д2(1— х) = £(2)—(In х) 1п(1— х). 26. [НМ22] В упр. 5.2.2-44 и 5.2.2-51 мы изучили два способа доказательства того, что Е e’fc2/" = - !) + fe=i для всех М > 0. Покажите, что формула суммирования Пуассона дает более строгий результат.
466 КОМБИНАТОРНЫЙ ПОИСК 7.2.1.4 27. [НМ21] Докажите (28) и завершите вычисления, приводящие к теореме D. 28. (Д. Г. Лемер (D. Н. Lehmer).) Покажите, что коэффициенты Харди-Раману- джана-Радемахера Аь(п), определенные в (34), должны обладать следующими замеча- тельными свойствами. а) Если к нечетно, то Aik(km + 4n + (fc2 — 1)/8) = А2(т)Ак(п). б) Если р—простое число, ре > 2 и к ± 2р, то Vfc(fc2m +р2еп - (к2 +р2е - 1)/24) = (-l)[p'=41Ape(m) Afc(n). В этой формуле fc2 + р2е — 1 кратно 24, если р или fc делятся на 2 или 3; в противном случае деление на 24 должно выполняться по модулю pefc. в) Если р—простое число, |Ар«(п)| < 2^>2^ре^2. г) Если р—простое число, Аре(п) ф 0 тогда и только тогда, когда 1 — 24п—квадратич- ный вычет по модулю р и либо е = 1, либо 24n modp ф 1. д) Вероятность того, что Аь(п) = 0, если к ррляжа. ровно на t простых чисел > 5, а п— случайное целое число, приблизительно равна 1 — 2~*. 29. [М2 6] Обобщая (41), вычислите сумму zilz23 z^- 30. [Ml 7] Найдите суммы Ы Е|"т’-Г1 " <6> E|mn-J fc>0 fe>0 в аналитическом виде (эти суммы конечны, поскольку при больших fc суммируемые члены равны 0). 31. [M2J] (А. деМорган (A. deMorgan), 1843.) Покажите, что |j| = |n/2J и |£| = [(п2 + 6)/12]; найдите аналогичную формулу для |*|. 32. [21/25] Докажите, что |^| < р(п — т) для всех т,п > 0. Когда неравенство превраща- ется в равенство? 33. [НМ20] Воспользуйтесь тем фактом, что имеется ровно (J^Zi) композиций п из т частей (см. 7.2.1.3-(9)), для доказательства нижней границы |J^|. Затем приравняйте т = для получения элементарной нижней границы р(п). 34. [НМ21] Покажите, что |"-т(™-1)/2|—количество разбиений п на т различных ча- стей. Следовательно, i:i - 35. [НМ21] Рассмотрим распределение вероятностей Эрдеша-Ленера (43). (а) Какое зна- чение х наиболее вероятно? (б) Какое значение х является медианой? (в) Какое значение х является средним значением? (г) Чему равно стандартное отклонение? 36. [НМ24] Докажите ключевую оценку (47), необходимую для теоремы Е. 37. [М22] Докажите лемму (48) о том, что при использовании принципа включения и ис- ключения частичные суммы “берут в вилку” истинное значение, проанализировав, сколько раз разбиение ровно с q различными частями, превосходящими т, учитывается в г-й частичной сумме. 38. [М20] Какова для заданных положительных целых чисел I и т производящая функ- ция, перечисляющая разбиения из т частей с наибольшей частью I? (См. (51).) 39. [М20] (А. Коши (A. Cauchy).) Продолжая выполнять упр. 38, укажите производящую функцию для количества разбиений на т различных частей, причем все они меньше I?
7.2.1.4 ГЕНЕРАЦИЯ ВСЕХ РАЗБИЕНИЙ 467 ► 40. [ЛГ25] (Ф. Франклин (F. Franklin).) Обобщая теорему С, покажите, что при 0 < к < тп f П1 (l-?+1)...(l-zI+fc) 1 J (1 - z)(l - z2) ... (1 - zm) представляет собой количество разбиений аш2 .. числа п на тп или меньшее количество частей, обладающих тем свойством, что си < ak+i +1. 41. [НМ42] Расширьте формулу Харди-Рамануджана-Радемахера (32) для получения сходящегося ряда для разбиений п не более чем на тп частей, ни одна из которых не превосходит I. 42. [НМ42] Найдите ограниченную область, аналогичную (49), для случайных разбиений п на не более в у/п частей, ни одна из которых не превосходит ць/п, в предположении, что 0<р > 1. 43. [M4S] Сколько для заданных п и к имеется разбиений п, таких, что ai > аг > • > afc? ► 44. [М22] У скольких разбиений п две наименьшие части равны? 45. [7СИ21] Вычислите асимптотическое значение р(п — 1)/р(п) с относительной ошибкой О(п"2). 46. [М20] Что больше—Т^(п) или Т/(п)—в анализе алгоритма Р в разделе? ► 47. [НМ22] (А. Ньенхьюз (A. Nijenhuis) и Г. С. Вильф (Н. S. Wilf), 1975.) Приведенный далее простой алгоритм, основываясь на таблице количеств разбиений р(0), р(1), •, р(п), генерирует случайное разбиение числа п с использованием представления в виде количе- ства частей ci... Сп (8). Докажите, что он генерирует все разбиения с одной и той же вероятностью. N1. [Инициализация.] Установить т<-пиС1...Сп<-0...0. N2. [Выполнено?] Завершить работу, если тп = 0. N3. [Генерация.] Сгенерировать случайное целое число М из диапазона 0 < М < mp(m). N4. [Выбор частей.] Установить s Ч— 0. Затем для j = 1, 2, ... и для к = 1, 2, ..., [m/j'J многократно устанавливать з Ч— s+kp(m—jk), пока не будет выполнено условие з > М. N5. [Обновление.] Установить сь Ч— с* + j, тп 4— m — jk и вернуться к шагу N2. | Указание: на шаге N4, основанном на тождестве оо 1л"/Ц 52 52 кР(.т~Зк) = тр(тп), 3=1 к=1 выбирается пара значений (j, к) с вероятностью кр(т — yfc)/(mp(m)). 48. [НМ40] Проанализируйте время работы алгоритма из предыдущего упражнения. ► 49. [НМ26] (а) Какой вид имеет производящая функция F(z) для суммы наименьших частей всех разбиений п? (Ряд начинается с z + 3z2 + 5z3 + 9z4 + 12z5 + •••) (б) Найдите асимптотическое значение [zn] F(z) с относительной ошибкой О(п-1). 50. [НЛ/ЗЗ] Обозначим c(m) = с™ (2m) в рекуррентных соотношениях (56) и (57). а) Докажите, что Cm(rn + fc) = тп — к + c(fc) для 0 < к < тп. б) Следовательно, (58) выполняется для тп < п < 2m, если с(т) < Зр(т) для всех т > 0. в) Покажите, что с(т) — т равно сумме вторых наименьших частей всех разбиений тп.
468 КОМБИНАТОРНЫЙ ПОИСК 7.2.1.4 г) Найдите взаимно однозначное соответствие между всеми разбиениями п, вторая наи- меньшая часть которых равна к, и всеми разбиениями чисел < п, наименьшая часть которых равна к + 1. д) Опишите производящую функцию е) Выведите, что с(т) < Зр(т) для всех т > 0. 51. [MJ6] Выполните детальный анализ алгоритма Н. 52. [М21] Каково миллионное разбиение, сгенерированное алгоритмом Р для п = 64? Указание: р(64) = 1741630 = 1000000 + |”| + |~| + |</| + |Т1 + I з I + \™\ + IYI + ГоЧ- 53. [М21] Каково миллионное разбиение, сгенерированное алгоритмом Н для т = 32 и п = 100? Указание: 999999 = |“| + |“| + |5°| + |«| + |353| + |246| + ftl- 54. [Л/30] Пусть а = Я1Я2 • и /3 = bife . •. —разбиения п. Мы говорим, что а мамсори- зирует /3, что записывается как а /3 или /3 Ч а, если сц Ч-на* > bi Ч-1-6* для всех к>0. а) Истинно или ложно следующее утверждение? Из а /3 вытекает а > /3 (лексикогра- фически). б) Истинно или ложно следующее утверждение? Из а > /3 вытекает /Зт > аТ. в) Покажите, что любые два разбиения п имеют наибольшую нижнюю границу а Л /3, такую, что о 7 и /3 > 7 тогда и только тогда, когда а Л /3 >~ 7. Поясните, как вычислить а/\ [3. г) Аналогично поясните, как вычислить наименьшую верхнюю границу aV/З, такую, что 7 а и 7 >- /3 тогда и только тогда, когда 7 а V /3. д) Если а имеет I частей, а /3— т частей, то сколько частей имеют а Л /3 и а V /3? е) Истинно или ложно следующее утверждение? Если а состоит из различных частей и /3 состоит из различных частей, то же самое можно сказать иоаЛ/Зиа\//3. 55. [М37] Продолжая выполнять предыдущее упражнения, назовем а покрытием 0, если а>/?иа//3и если из а > 7 > /3 вытекает 7 = а или 7 = /3. Например, на рис. 52 показано отношение покрытия между разбиениями числа 12. а) Будем записывать a t>- /3, если а = aiai... и /3 = 6162... представляют собой разбиения, для которых 6* = а* — [fc = 1] Ч- [fc = 1 + 1] для всех k > 1 и некоторого I > 1. Докажите, что а покрывает /3 тогда и только тогда, когда a t- /3 или /Зт t- аТ. б) Покажите, что существует простой способ выяснить, верно ли, что а покрывает /3, путем расмотрения краевого представления а и /3. в) Пусть п = (п22) Ч- ("*), где пг > П1 > 0 и Пг > 2. Покажите, что ни одно разбиение п не покрывает больше П2 — 2 разбиений. г) Будем называть разбиение р минимальным, если не существует разбиения А, такого, что р >- А. Докажите, что р минимально тогда и только тогда, когда pF состоит из различных частей. д) Предположим, что а = а0 fr- «1 fr- • • • fr- oik и a = «о fc- a'i a'k,, где ak и a'k> — минимальные разбиения. Докажите, что к = к' и ак = а'к,. е) Поясните, как вычислить лексикографически наименьшее разбиение на различные части, которое мажоризирует данное разбиение а. ж) Опишите лексикографически наименьшее разбиение Ап числа п на различные части. Чему равна длина всех путей п1 = <зд >- ai t>- - t>- А„? з) Чему равна длина длиннейшего и кратчайшего путей вида п1 - ао, сц, •, at = 1", где aj покрывает сц+i для 0 < j < I? 56. [ЛГ32] Разработайте алгоритм для генерации всех разбиений а, таких, что А Ч а Ч д, для данных разбиений А и р, А X р.
7.2.1.4 ГЕНЕРАЦИЯ ВСЕХ РАЗБИЕНИЙ 469 Рис. 52. Решетка мажо- ризации для разбиений 12. (См. упр. 54-58.) (5321 11 [721111 16211111 [52111111 [511111111 / (6311 17111111 5421 5 12 11 snu 541111 / 15311111 (52221 144211] 161111111 / ~><Г \ 1522111)441111] 3221 33221 [421111И1 133211111 13222211 31111111 (3$22111| [2^22221 х 1322111111 12222211 132И11Ш1 |22^211П1 131111111111 сйшид 1221И11ПИ 14111111111 1211111111111 11111111111П1 Примечание. Такой алгоритм имеет множество применений. Например, для гене- рации всех разбиений, которые имеют m частей, причем ни одна из них не превыша- ет 1, можно положить А равным минимальному такому разбиению, т. е., как в упр. 3, [п/т] ... [п/т], а р—наибольшим, т. е. ((n—m+l)lm-1) Л (lLn/<J(nmod/)). Аналогично, согласно известной теореме X. Г. Ландау (Н. G. Landau) [Bull. Math. Biophysics 15 (1953), 143-148], разбиения (™), такие, что т j L”»/2J |^m— lj Гт/2] X a 4 (m—l)(m—2) ... 21, представляют собой “векторы счетов” в круговом турнире, т. е. разбиения щ ... am, когда игрок на j-м месте побеждает в а? играх. 57. [М22] Предположим, что матрица (а«>) из нулей и единиц имеет суммы элементов строк г, = 52j и суммы элементов столбцов с, = 52* ач- Путем перестановки строк и столбцов можно добиться того, что и > тг > и C1 > сз > • • . В таком случае А = Г1Г2 ... и р = C1C2 ... представляют собой разбиения n = Оц. Докажите, что такая матрица существует тогда и только тогда, когда А Ч рт.
470 КОМБИНАТОРНЫЙ ПОИСК 7.2.1.4 58. [Af25] (Симметричные средние.) Пусть а — ai.. .ат и /3 = i>i.. .bm—разбиения п. Докажите, что неравенство выполняется для всех неотрицательных значений переменных (xi,..., хт), где суммы бе- рутся по всем т! перестановкам {1,..., тп}, тогда и только тогда, когда а > /3. (Например, это неравенство сводится к (j/i + ••• + уп)/п > (yi ...уп)1^п в частном случае т = п, а = п0... 0, /3 = 11... 1, х3; = у1/”.) 59. [М22] Путь Грея (59) симметричен в том смысле, что обращенная последовательность 6, 51, ..., 111111 имеет тот же вид, что и сопряженная последовательность (111111)т, (21111)T, ..., (6)т. Найдите все пути Грея ai, ..., ар(п), симметричные в данном смысле. 60. [23] Завершите доказательство теоремы S, изменяя определения £(тп,п) и М(т,п) во всех местах, где в (62) и (63) вызывается £(4,6). 61. [26] Реализуйте схему генерации разбиений на основе теоремы S, всегда указывая две части, которые должны изменяться между посещениями. 62. [^6] Докажите или опровергните следующее утверждение: для всех достаточно боль- ших целых чисел п и 3 < т < п, таких, что п mod т ф 0, и для всех разбиений а числа п, у которых ai < т, существует путь Грея для всех разбиений с частями < т, начинающийся с 1" и заканчивающийся а, за исключением а = 1" и а = 21"-2. 63. [47] Для каких разбиений Аид имеется код Грея по всем разбиениям а, таким, что А а Ч д? 64. [32] (Бинарные разбиения.) Разработайте алгоритм, не содержащий циклов, который посещает все разбиения п на степени 2, где каждый шаг заменяет 2* + 2* на 2fc+r или наоборот. 65. [23] Хорошо известно, что каждая коммутативная группа из т элементов может быть представлена в виде дискретного тора T(mi,... ,тп) с операцией сложения 7.2.1.3-(66), где т. = mi ...тп, a mj кратно m.j+i при 1 < j < п. Например, для т = 360 — 23 • З2 -51 имеется шесть таких групп, соответствующих разложениям (7711,7712,7713) = (30,6,2), (60,6,1), (90,2,2), (120,3,1), (180,2,1) и (360,1,1). Поясните, как систематически сгенерировать все такие разложения с помощью алго- ритма, который на каждом шаге изменяет ровно два множителя rrij. 66. [М25] (Р-разбиения.) Предположим, что вместо требования ai > аг > • • • мы рас- сматриваем все неотрицательные композиции п, удовлетворяющие некоторому заданному частичному порядку. Например, П. А. Мак-Мэган (Р. A. MacMahon) заметил, что все решения “холмистых” неравенств <14 < аг > аз < ai можно разделить на пять неперекры- вающихся типов: ai > аг > аз > 04; ai > а2 > а4 > аз; аг > ai > аз > 04; аг > ai > 04 > аз; аг > 04 > ai > аз. Все эти типы легко перечислимы, поскольку, например, аг > ai > 04 > аз эквивалентно аг — 2>ai— 1 > 04 — 1 > аз; количество решений при аз > 0 и ai + аг + аз + <14 = п равно количеству разбиений тг — 1 — 2 — 0 — 1 не более чем на четыре части. Поясните, как решить общую задачу следующего вида. Дано отношение частичного порядка -Ч для тп элементов. Рассмотрим все тп-кортежи ai... am, обладающие тем свой- ством, что aj > аь при j -< к. Полагая, что индексы выбраны таким образом, что из j -< к вытекает j < к, покажите, что все соответствующие тп-кортежи делятся на N классов, по одному для каждого из выходов алгоритма топологической сортировки 7.2.1.2V. Какой вид
7.2.1.5 ГЕНЕРАЦИЯ ВСЕХ РАЗБИЕНИЙ МНОЖЕСТВ 471 имеет производящая функция для всех неотрицательных ai... ат, сумма которых равна п? Каким образом можно сгенерировать их всех? 67. [Af25] (П. А. Мак-Мэган (Р. A. MacMahon), 1886.) Идеальное разбиение п пред- ставляет собой мультимножество, которое имеет ровно п 4- 1 подмультимножеств, и эти мультимножества представляют собой разбиения целых чисел 0, 1, ..., п. Например, мультимножества {1,1,1,1,1}, {2,2,1} и {3,1,1} являются идеальными разбиениями 5. Поясните, как построить идеальные разбиения п, имеющие наименьшее количество элементов. 68. [Л/23] Какое разбиение п на т частей имеет наибольшее произведение ai... am при (а) заданном т; (б) произвольном т? 69. [МЗО] Найдите все п < 10е, такие, что уравнение xi + Х2 4 1- хп = xix? ... хп имеет единственное решение в натуральных числах xi > х? > • • • > хп. (Имеются, например, единственные решения для п = 2, 3 и 4; однако 54-24-1-1-1-1-1 = 5-2-1-1-1, 34-34-14-14-1 = 3-3 1 • 1 • 1 И24-24-24-14-1 = 2 - 2 • 2 •11.) 70. [М30] (“Болгарский пасьянс.”) Даны п карт, разделенные произвольным образом на одну или несколько стопок. Затем многократно выполняются следующие действия—из каждой стопки берется по одной карте, и они образуют новую стопку. Покажите, что если п— 14- 2 4- • • • 4- ш, то этот процесс всегда достигает самовоспроиз- водящегося состояния со стопками размером {ш, т — 1,..., 1}. Например, если п = 10 и мы начнем со стопок размером {3,3, 2,2}, то получим такую последовательность разбиений: 3322 -> 42211 -> 5311 -> 442 -> 3331 -> 4222 -> 43111 -> 532 -> 4321 -> 4321 ->•••. Какие циклы состояний возможны для других значений п? 71. [Л/^6] Продолжая выполнять предыдущее упражнение, выясните, чему равно мак- симальное количество шагов, которые могут быть выполнены до того, как Болгарский пасьянс с п картами достигнет циклического состояния. 72. [МЗО] Сколько разбиений п не имеют предшественника в Болгарском пасьянсе? 73. [М25] Предположим, мы записали все разбиения п, например 6, 51, 42, 411, 33, 321, 3111, 222, 2211, 21111, 111111 для п = 6, и заменили все j-e появления числа к на j: 1, 11, 11, 112, 12, 111, 1123, 123, 1212, 11234, 123456. а) Докажите, что эта операция порождает перестановку отдельных элементов. б) Сколько всего раз встречается элемент fc? 7.2.1.5. Генерация всех разбиений множеств. Перейдем теперь к рассмотре- нию другого вида разбиений. Разбиения множеств представляют собой способы рассмотрения множества как объединения непустых, непересекающихся множеств, именуемых блоками. Например, в начале предыдущего раздела были перечислены пять существенно различных разбиений множества {1,2,3} (7.2.1.4-(2) и 7.2.1.4-(4)). Эти пять разбиений более компактно можно записать в виде 123, 12|3, 13|2, 1|23, 1|2|3 (1) с применением вертикальной черты для отделения одного блока от другого. В этом списке элементы каждого блока могут быть записаны в любом порядке, как и сами блоки, так что ‘13|2’, ‘31|2’, ‘2|13’ и ‘2|31’—это представления одного и того же разбиения. Можно стандартизировать представления путем соглашения, например,
472 КОМБИНАТОРНЫЙ поиск 7.2.1.5 о перечислении элементов каждого блока в возрастающем порядке, а сами блоки располагать в порядке возрастания их наименьших элементов. При этих соглаше- ниях разбиениями множества {1,2,3,4} являются 1234, 123|4, 124|3, 12|34, 12|3|4, 134|2, 13|24, 13|2|4, 14|23, 1|234, 1|23|4, 14|2|3, 1|24|3, 1|2|34, 1|2|3|4, ( ' получаемые путем добавления 4 к блокам (1) всеми возможными способами. Разбиения множеств появляются в самых разных контекстах. Политики и эко- номисты, например, часто говорят о “коалициях” разработчики вычислительных систем — о “шаблонах обращения к кэш-памяти” поэты—о “схемах рифм” (см. упр. 34-37). В разделе 2.3.3 мы встречались с отношением эквивалентности между объектами, а именно с бинарным отношением, обладающим свойствами рефлексив- ности, симметричности и транзитивности, и определяющим разбиение этих объектов на так называемые “классы эквивалентности’.’ Верно и обратное: каждое разбиение множества определяет отношение эквивалентности; в частности, если П является разбиением множества {1,2,..., п}, можно записать j = к (по модулю П), (3) если j и к принадлежат одному и тому же блоку П. Один из наиболее удобных способов представления разбиения множества в ком- пьютере состоит в кодировании его ограниченно растущей строкой (restricted growth string), т. е. строкой а^аъ .. .ап неотрицательных целых чисел, в которой ai=0 и Oj+i < 1 + max(oi,... ,aj) для 1 < j < n. (4) Идея заключается в установке aj = аь тогда и только тогда, когда j = к, причем выбирать при этом для aj, где j — наименьшее число в своем блоке, наименьшее до- ступное число. Например, ограниченно растущие строки для пятнадцати разбиений (2) представляют собой соответственно 0000, 0001, 0010, ООП, 0012, 0100, 0101, 0102, ’ ’ (5) ОНО, 0111, 0112, 0120, 0121, 0122, 0123. v ' Такое соглашение наводит на мысль о следующей простой схеме генерации разбие- ний, предложенной Джорджем Хатчинсоном (George Hutchinson) [САСМ 6 (1963), 613-614]. Алгоритм Н (Ограниченнорастущие строки в лексикографическом порядке). Для заданного п > 2 данный алгоритм генерирует все разбиения {1,2,..., п} путем по- сещения всех строк 0102 ... ап, удовлетворяющих условию ограниченного роста (4). Поддерживается вспомогательный массив bi&2 • • • Ъп, где bj+i = 1 + max(ai,...,aj); значение Ьп из соображений эффективности реально хранится в отдельной перемен- ной т. Н1. [Инициализация.] Установить ai... ап <— 0... 0, bi... bn-i «— 1... 1 и т <— 1. Н2. [Посещение.] Посетить ограниченно растущую строку щ... ап, которая пред- ставляет разбиение на тп + [ап = тп] блоков. Затем перейти к шагу Н4, если Оп = тп. НЗ. [Увеличение ап.] Установить ап <— ап + 1 и вернуться к шагу Н2. Н4. [Поиск у.] Установить j <— п — 1; затем, пока aj = bj, устанавливать j <— j — 1.
7.2.1.5 ГЕНЕРАЦИЯ ВСЕХ РАЗБИЕНИЙ МНОЖЕСТВ 473 Н5. [Увеличение aj.] Завершить работу алгоритма, если j — 1. В противном случае установить а3। <— aj + 1. Н6. [Обнуление aj+i... а„.] Установить т «— bj + [aj — Ьл] и j «— j; + 1. Затем, пока j < п, устанавливать aj <— 0, bj <— т и j «— j + 1. Наконец установить ап <— О и вернуться к шагу Н2. | В упр. 47 доказывается, что шаги Н4-Н6 выполняются редко, а циклы на шагах Н4 и Н6 почти всегда короткие. Вариант этого алгоритма с использованием связанного списка имеется в упр. 2. Коды Грея для разбиений множеств. Один из способов быстрого прохода по всем разбиениям множества состоит в изменении на каждом шаге только одной циф- ры ограниченно растущей строки щ ... ап, поскольку изменение aj просто означает перемещение элемента j из одного блока в другой. Элегантный способ построения такого списка был предложен Гидеоном Эрлихом (Gideon Ehrlich) [JACM 20 (1973), 507-508]. Можно последовательно добавлять цифры 0, т, т—1, 1 или 1, ..., т — 1, т, 0 (6) к каждой строке а±... a„_i в списке разбиений п — 1 элементов, где т = 1 + max(ai,... ,an-i), чередуя оба варианта. Таким образом, список ‘00, 01’ для п = 2 превращается в ‘000, 001, 011, 012, 010’ для п = 3, который, в свою очередь, для п = 4 превращается в 0000, 0001, ООН, 0012, 0010, ОНО, 0112, 0111, (7) 0121, 0122, 0123, 0120, 0100, 0102, 0101. ’ В упр. 14 показано, что схема Эрлиха приводит к простому алгоритму, который дает порядок кода Грея без особых дополнительных усилий по сравнению с алго- ритмом Н. Предположим, однако, что нас не интересуют все разбиения; мы можем захотеть рассмотреть только те из них, которые состоят ровно из т блоков. Можно ли пройти по этой меньшей коллекции ограниченно растущих строк так, чтобы на каждом шаге изменялась только одна цифра строки? Да; очень красивый способ генерации такого списка был открыт Фрэнком Раски (Frank Ruskey) [Lecture Notes in Comp. Sci. 762 (1993), 205-206]. Он определил две такие последовательности, Атп и А'тп, которые начинаются с лексикографически наименьшей тп-блочной строки Qn-mgj (тп—1). Различие между ними в том, что если п > т + 1, то Лтп закан- чивается 01... (тп—1)0"-т, в то время как А'тп заканчивается 0"-т-101... (тп—1)0. Вот рекурсивные соотношения Раски для 1 < тп < п: Л(т-1)7г(ГП-1)> • • > А™Л вСЛИ ТП ЧвТНО; • • •, лтп1, Апп°, если тп нечетно; Ann(™-!)> • • > АпгЛ Л£гЛ если тп четно; 4п-1)п(тИ)Хп(™-1)>..., Атп1, А£„0, если тп нечетно. (Другими словами, мы начинаем либо с Л(т_Х)п(тп—1), либо с •^(rn_ijn(m—1)> а за- тем по очереди используем либо A^nj, либо Amnj при уменьшении j от тп — 1 до 0.) Ап(тг+1)
474 КОМБИНАТОРНЫЙ ПОИСК 7.2.1.5 Конечно, базовые случав представляют собой простые одноэлементные списки А1п - А'1п = {0п} и Апп = {01... (п-1)}. (10) При таких определениях {|} = 25 разбиений {1,2,3,4,5} на три блока представляют собой 00012, 00112, 01112, 01012, 01002, 01102, 00102, 00122, 01122, 01022, 01222, 01212, 01202, 01201, 01211, 01221, 01021, 01121, 00121, ’ 00120, 01120, 01020, 01220, 01210, 01200. (См. эффективную реализацию этого метода в упр. 17.) В схеме Эрлиха (7) наиболее часто изменяются крайние справа цифры строки ai... ап, но в схеме Раски основные изменения происходят ближе к левому краю. Однако в обоих случаях на каждом шаге изменяется только один элемент aj, и это очень простое изменение: либо aj изменяется на ±1, либо происходит переход между двумя крайними значениями 0 и l + max(ai,..., aj-i). При тех же ограничениях по- следовательность А'1п, А'2п, ..., А'пп проходит по всем разбиениям в возрастающем порядке количества блоков. Количество разбиений множеств. Мы видели, что имеется 5 разбиений множе- ства {1,2,3} и 15 разбиений множества {1,2,3,4}. Быстрый способ вычисления этих значений был открыт Ч. С. Пирсом (С. S. Peirce), который представил в [American Journal of Mathematics 3 (1880), page 48] следующий числовой треугольник. 1 2 1 5 15 3 10 2 7 5 (12) 52 37 27 20 15 203 151 114 87 67 52 Здесь элементы стП1, тП2, ..., сапп n-й строки подчиняются простому рекуррентно- му соотношению ^пк = ^(n—i)k~f^n(k+i) Для 1 < к < тг; = ^(п—1)1 при 71 > 1; (13) а стц = 1. Треугольник Пирса обладает многими замечательными свойствами, некоторые из них рассматриваются в упр. 26-31. Например, гипь представляет собой количество разбиений {1,2,..., тг}, у которых к — наименьший из блоков. Элементы диагонали и первого столбца треугольника Пирса, которые говорят нам об общем количестве разбиений, широко известны как числа Белла, поскольку Э. Т. Белл (Е. Т. Bell) написал о них ряд важных статей [АММ 41 (1934), 411-419; Annals of Math. (2) 35 (1934), 258-277; 39 (1938), 539-557]. Следуя Луи Комте (Louis Comtet), мы будем обозначать числа Белла как стп, чтобы не путать их с числами Бернулли Вп. Вот несколько первых чисел Белла. 71=01234567 8 9 10 11 12 ст„= 1 1 2 5 15 52 203 877 4140 21147 115975 678570 4213597 Обратите внимание на быстрый рост последовательности, но не столь быстрый, как тг!; ниже мы докажем, что wn = ©(n/logn)".
7.2.1.5 ГЕНЕРАЦИЯ ВСЕХ РАЗБИЕНИЙ МНОЖЕСТВ 475 Числа Белла wn = zuni при п > 0 должны удовлетворять рекуррентной фор- муле поскольку каждое разбиение множества {1,..., п + 1} получается для некоторого к путем выбора к элементов из {1,... ,п} для размещения в блоке, содержащем эле- мент п+1, с последующим разбиением оставшихся элементов wn-k способами. Это рекуррентное соотношение, найденное Ёшисуке Мацунагой (Yoshisuke Matsunaga) в XVIII веке (см. раздел 7.2.1.7), приводит к красивой производящей функции оо п я(*) = = ее-1> (15) п=0 открытой В. А. Уитвортом (W. A. Whitworth) [Choice and Chance, 3rd edition (1878), 3.XXIV]. Если умножить обе части (14) на zn/n\ и просуммировать по п, получится _°° ~П /_°° Z °° ут\ n'(z)=Е s = (Е й)(Е =е‘п(г); п=0 к=0 т=0 решением этого дифференциального уравнения при П(0) = 1 является (15). Числа wn много лет изучались в связи с их любопытными свойствами, связан- ными с данной формулой, задолго до того, как Уитворт указал их комбинаторную связь с разбиениями множеств. Например, [Mat. Sbornik 3 (1868), 62; 4 (1869), 39; G. Dobinski, Archiv der Math, und Physik 61 (1877), 333-336; 63 (1879), 108-110]. Кристиан Крамп (Christian Kramp), рассмат- ривая разложение ee’ в [Der polynomische Lehrsatz, ed. by C. F. Hindenburg (Leipzig: 1796), 112-113], привел два способа вычисления коэффициентов, а именно — либо с использованием (14), либо суммируя р(п) членов, по одному для каждого обычного разбиения п. (См. формулу Арбогаста в упр. 1.2.5-21. Крамп, близко подошедший к открытию этой формулы, похоже, предпочитал свой метод, основанный на раз- биениях, не понимая, что он требует более чем полиномиального времени при все больших и больших п; для коэффициента при z10 он вычислил значение 116015 вместо верного 115975.) * Асимптотические оценки. Изучить, насколько быстро с ростом п увеличивается значение wn, можно с использованием основных принципов теории комплексных вычетов: если степенной ряд afczfc сходится везде в области |z| < г, то _ 1 / Оо + O1Z + а-iz2 -I- а"-1 2тгг J zn где интеграл берется по простому замкнутому пути, который обходит начало коор- динат против часовой стрелки и остается внутри окружности |z| = г. Пусть /(z) = afczfc_" — подынтегральная функция. Мы можем выбрать любой описанный путь, но зачастую имеются специальные методы, применимые, когда путь проходит через точку zo, в которой производная f'(zo) равна нулю, поскольку поблизости
476 КОМБИНАТОРНЫЙ поиск 7.2.1.5 zq— ге Рис. 53. Поведение аналитической функции вблизи седловой точки. этой точки /(zo + ее*8) = /(zo) + + О(е3). (18) Если, например, f(zo) и /"(zo) действительны и положительны, скажем, /(zq) = и и = 2v, то эта формула гласит, что значение /(zq ± е) приближенно равно u+ve2, в то время как /(zo±ie) приближенно равно и—те2. Если z проходит от zq—ге до zo+ie, то значение /(z) возрастает до максимального значения и, после чего вновь снижается; однако большее значение и + те2 достигается функцией слева и справа от этого пути. Другими словами, альпинист, путешествующий по комплексной плоскости с рельефом, высота которого в точке z равна 3?/(z), обнаружит “перевал” в точке zq; рельеф здесь имеет вид седла (рис. 53). Полный интеграл от /(z) одинаков для любого пути, но путь, не проходящий через седловую точку, будет не столь приятен, как проходящий через нее, так как потребует сокращения некоторых больших значений f(z), чего можно избежать. Таким образом, лучше всего выбрать путь, проходящий через седловую точку zq в направлении возрастания мнимой части. Этот важный метод, разработанный П. Дебаем (Р. Debye) [Math. Annalen 67 (1909), 535-558], так и называется— “метод седловой точки” Познакомимся с методом седловой точки на примере, ответ к которому нам известен: 1 1 f ez (п - 1)! = 2riJ^dz' (19) Наша цель — найти хорошее приближение значения интеграла в правой части при большйх п. Работать с функцией /(z) = e2/zn будет удобнее, если переписать ее как е9^2\ где g(z) = z — nlnz; тогда седловая точка достигается там, где значение g'(zo) = 1 — n/zo равно нулю, т. е. в точке zq = п. Если z = п + it, мы получим . д^(п) к t2 it3 t4 it5 9(2)=9(п)+22-й-(.<) =„-„i„„--+_+5-5-5-i+..., fc=2 поскольку g^(z) = (—l)fc(fc — l)!n/zfc при к > 2. Проинтегрируем /(z) по прямо- угольному пути от п — im через п + im, —п + im и — п — im назад к п — im: 1 f ez 1 Гт 1 Г~п —: Ф —dz — —- / f(n + it) dt + — I f(t + im) dt 2m J zn 2тг Jy ’ 2m Jn v ' + I f(~n + it) dt + I f(t — im) dt. Jm 27Г2 J—n
7.2.1.5 ГЕНЕРАЦИЯ ВСЕХ РАЗБИЕНИЙ МНОЖЕСТВ 477 Ясно, что если выбрать т = 2п, то на трех последних участках пути |/(z)| < 2-"/(тг), поскольку |е2| = еЙ2 и |z| > max(|SRz|, |9z|); так что мы остаемся с 1 / е2 1 Ф —az = —— 2тп J zn 2тг eg(n+it) dt + of^ Теперь вернемся к методике, которой мы неоднократно пользовались ранее, например, для вывода формулы 5.1.4-(53): если f(t)—хорошее приближение f(t) при t € А и если суммы 1/(01 и 52гес 1/(01 малы, то 52гелис /(0 представляет собой хорошее приближение для /(<). Эта идея применима как к сум- мам, так и к интегралам. [Этот общий метод, разработанный Лапласом (Laplace) в 1782году, часто называется “trading tails”*; см. CMath §9.4.] Если |t| < тг1/24-6, имеем es(n+it) = expfp(n) - + ^2 + • ’ ’) \ Zn бп* / Cn ( t2 it3 t* 5е-3/2ч\ = — expl + —г + —7 + O(n5t 3/2)) пп \ 2п Зтг2 4тг3 / При Ю > тг1/2-1-6 мы получаем „п / „ Ч Z „п—п2‘/2 ч |ев(п+«)| < |/(n + inl/2+<)| = _exp(__ln(1 + = Кроме того, можно пренебречь неполной гамма-функцией Г e-t2/(2n)tk dt = 2(fc-l)/2n(fc+l)/2 г /i+2 = О(п°^ е~п^2). Jni/2+« '2 2 / Таким образом, можно применить метод Лапласа и получить приближение 1 f ez , еп Г°° /2//, х / it3 t4 t6 о, о/о.\ , ф — dz = ----- / е 1 /(2 ) (1 + —— + —т---------—г + O(n9t 3/2) I dt 2пг J zn 2тгпп J-oo \ Зтг2 4тг3 18тг4 ) = 9---п (^° + Т"2 ^3 + т~3 — 1g 4^6 + О(тг9е-3/2)) > 2тттг" \ Зтг2 4тг3 18тг4 / где Ik = e-12^2n^tfe dt. Конечно, Д = 0 при нечетном к. В противном случае можно оценить значение Д с помощью широко известного факта Г p-at\2idf _ r((2Z + l)/2) _ . J2t ‘ _ * dt a^l+^/2 ~ (га)!2'4-1)/2 (2°) при а > 0; см. упр. 39. Собирая воедино все рассмотренные результаты, получаем для всех е > 0 асимптотическую оценку (^ = Td^(1+0+s;-s;+f*‘s‘2))' <21> полностью согласующуюся с приближением Стирлинга, выведенным совершенно другим способом в 1.2.11.2-(19). Прочие члены в разложении д(п + it) позволяют Дословно — “торговля хвостами’.’—Примеч. пер.
478 КОМБИНАТОРНЫЙ ПОИСК 7.2.1.5 доказать, что истинная ошибка в (21) составляет всего лишь О(тг-2), поскольку та же процедура дает асимптотический ряд общего вида еп/(\/2тгтг"_1/2)(1 + ci/n + сг/п2 +---1- Cm/nm + О(тг-т-1)) для всех т. То, что мы занялись выводом данного результата, оправдывается важной тех- нической деталью: функция In z не является однозначной на пути интегрирования, поскольку возрастает на 2тгг при движении вокруг начала координат. На самом деле этот факт лежит в основе механизма, который заставляет работать теорему о вычетах. Однако наш вывод корректен, поскольку неоднозначность логарифма не влияет на подынтегральную функцию f(z) — e.zfzn при целом п. Кроме того, если п не целое, можно немного изменить вывод, оставив его совершенно строгим, путем взятия интеграла (19) по пути, начинающемуся в —оо, обходящему нача- ло координат против часовой стрелки и возвращающемуся в —оо. Это даст нам интеграл Ганкеля для гамма-функции 1.2.5-(17); таким образом можно вывести асимптотическую формулу f(ij = 2^if^dz = х/2^хх-1/Л1~12^ + °(Х 2))’ (22) справедливую для всех действительных чисел х при х —> оо. Итак, метод седловой точки, похоже, работает, хотя это не самый простой способ получения данного конкретного результата. Применим его теперь к выводу приближения чисел Белла: = 9^7 fefM dz' = eZ~nlnz- (23) (тг — 1)! 2тгге J Седловая точка нового подынтегрального выражения теперь находится в точке zq = С > 0, где £е( = п. (24) (В действительности следует писать £(тг), чтобы указать, что £ зависит от тг; но это излишне загромоздило бы следующие далее формулы.) Предположим на минутку, что добрый волшебник сказал нам значение £. Тогда мы могли бы взять интеграл по пути z = £ + it и получить Л (i‘)2e + 1 (a)s«2-2! (it)4«s + 3! \ Путем интегрирования по соответствующему прямоугольному пути можно дока- зать, как мы делали это выше, что хорошим приближением интеграла в (23) явля- ется [ eg(€)-«O2t2-n»astS+na4t4+--- ак — £ +(—1) (fc—1)!_ ’ fc! см. упр. 43. Замечая, что aktk под знаком интеграла представляет собой O(nfce-fc/2), мы получаем асимптотическое разложение в виде '(i+h + b+ ...+^+(26) ^п-1^/2тгтг(^ +1) \ тг тг2 пт X п ) )
7.2.1.5 ГЕНЕРАЦИЯ ВСЕХ РАЗБИЕНИЙ МНОЖЕСТВ 479 где (£ + l)3fcbfc — полином степени 4fc от £ (см. упр. 44). Например, 2£4—З£3 —20£2 —18£+2 1 “ 24(С+1)3 ; _ 4£8-156£7-695£6-696£5+1092£4+2916£3+1972£2-72£+4 62 _ п52(е+1)6 (27) (28) В (26) можно воспользоваться приближением Стирлинга (21) для доказатель- ства того, что = expfn(£-l + - С - 11п(£ + !) - 1 - т|- + а в упр. 45 доказывается аналогичная формула: = ехр(п(? - 1 + 1) - 11пК + 1) - 1 - X + о(!^)2). Следовательно, Wn/^n-i ~ = п/£. Точнее, (29) (30) (31) Но чему же равно асимптотическое значение £? Из определения (24) вытекает, что £ = Inn — ln£ = Inn — ln(lnn — ln£) = Inn - In Inn + of 1()glogn У (32) \ logn / мы можем идти по этому пути, как показано в упр. 49. Однако асимптотиче- ский ряд для %, полученный таким способом, никогда не даст точность лучше, чем O(l/(logn)m) для все большего и большего значения тп; таким образом, при умножении на п в формуле (29) для стп-1 или в формуле (30) для wn мы получим огромную неточность. Вот почему, если мы хотим использовать для вычисления хорошего приближе- ния чисел Белла (29) или (30), наилучшая стратегия — начать с вычисления точного значения £, не прибегая к плохо сходящимся рядам. Метод Ньютона, рассмат- ривавшийся в примечаниях перед описанием алгоритма 4.7N, дает эффективную итеративную схему Со = inn, $к+1 = -A-(i+е0 - ад, (зз) & +1 которая быстро сходится к точному значению. Например, для п = 100 пятая итерация дает значение & = 3.38563 01402 9005018488 82443 64529 7268674917-, (34) верное до сорокового знака. Применение этого значения в (29) дает последователь- ные приближения (1.6176088053..., 1.6187421339..., 1.6187065391..., 1.6187060254...) х 10114
480 КОМБИНАТОРНЫЙ ПОИСК 7.2.1.5 при учете соответственно членов 1, bi/n, tfy/n2, Ьз/п3; истинное значение tugg пред- ставляет собой 115-значное целое число 16187060274460.. .20741. Теперь, когда мы знаем количества разбиений множества wn, попробуем вы- яснить, сколько из них состоят ровно из тп блоков. Оказывается, что почти все разбиения {1,..., п} имеют порядка п/£ = е^ блоков примерно с £ элементами в блоке. Например, на рис. 54 показана гистограмма чисел Стирлинга {^} для п - 100; в этом случае е^ « 29.54. Величину {^} можно исследовать, применив метод седловой точки к формуле 1.2.9-(23), которая гласит, что = -Ц [zn] (ez - l)m = ^1 — Im J ml ml 2m gTnln(el—1)—(n-f-l)lnz (35) Пусть a — (n + l)/m. Функция g(z) = a 1ln(e2 — 1) — In z имеет седловую точку a > 0 при Q. 1 — е Заметим, что а > 1 при 1 < m < п. Это значение а можно получить как (36) а = а - /3, /3 = Т(ае"“), (37) где Т— “функция дерева” из 2.3.4.4-(30). Фактически /3—значение в диапазоне от 0 до 1, для которого /Зе = ае функция хе~х возрастает от 0 до е-1 при увеличении х от 0 до 1, а затем уменьшается до 0. Таким образом, /3 определяется однозначно, и мы имеем Все такие пары а и /3 можно получить с использованием обратных формул (38) ВНОВЬ (39) <те п а а — ------т, Р — ---------т! еа - Г еа - Г например, значения а = In 4 и /3 = In 2 соответствуют а = In 2. Можно, как ранее, показать, что интеграл в (35) асимптотически равен (40) инте- гралу e(n+1)®(z) dz по пути z = а + it. (См. упр. 58.) В упр. 56 доказывается, что
7.2.1.5 ГЕНЕРАЦИЯ ВСЕХ РАЗБИЕНИЙ МНОЖЕСТВ 481 ряд Тейлора вблизи 2 = а . -л ! \ ~ 0) V'' (^)fe (к)/ \ д((т + it) = д(а)---------- 22 9{ 4°) к=3 обладает тем свойством, что |ff<fc)(a)| < 2(Л — 1)!(1 —/3)/<т* для всех к > 0. (41) (42) Таким образом, можно легко убрать множитель N — (п + 1)(1 — /3) из степенного ряда (n + l)g(z), и метод седловой точки приведет к формуле ^+" + 7^ + о(лг«+г)) (43) Г п | п! 1 1 тп J тп! (а - /3)n-m/3mV27rN при N —* оо, где (1 — /3)2fcfefc — полином от а и /3. (Величина (а — /3)' менателе проистекает из того факта, что (е1 в соответствии с (37) и (39).) Например, 6 — /З3 — 4а/32 — а2/3 8(1—"/?) В упр. 57 доказывается, что N —> оо тогда и только тогда, когда п — тп —» оо. Асимп- тотическое разложение для {^}, аналогичное (43), но несколько более сложное, было впервые получено Лео Мозером (Leo Moser) и Максом Виманом (Max Wyman), Duke Math. J. 25 (1957), 29-43. Формула (43) выглядит немного страшновато из-за того, что она создана с уче- том применимости для всего диапазона количества блоков тп. Значительное упроще- ние формулы возможно при относительно малых и относительно больших значениях тп (см. упр. 60 и 61); однако эти упрощения не дают точных результатов в важных случаях, когда {^} имеет наибольшее значение. Рассмотрим подробнее эти важные случаи, определяющие форму пика на рис. 54. Пусть = п, как в (24), и положим тп = ехр(£ + т/у/п) = пег/'/"/£; мы будем считать, что |г| < пе, а значит, тп близко к е^. Старший член (43) можно переписать как n! 1 тп! (а - /3)п^т/3тл/2тг(п + 1)(1 - /3) (Зт в зна- = (а//3 - 1)"У(а - /3)", bi = 5(2 - /З2 - а/3)2 24(1 - /З)2 (44) n „—pm !) <«> и приближение Стирлинга для (п +1)! приводит к очевидным сокращениям в этом выражении. С помощью компьютерной алгебры находим „2 х т е«+1 тп 1 ---- = ,__еХР тп!-у2тг .з ~з 16 Зак. 3331
482 КОМБИНАТОРНЫЙ ПОИСК 7.2.1.5 а соответствующие величины, связанные с а и (}, представляют собой + ou3n2£-2 Пх/П а п (1 - 'Т= exp(f -1 + + О(£’„— )). \ а / \ у/п / Таким образом, окончательный результат имеет вид I <4-П/ I = г—expfn(£ ~ 1 + ~ i ~ * Ie€+r/v^J v\ Vs (J 2 - Ь ---1+ <«> \ 6(£ + l)vn ' ' Возведенное в квадрат выражение в последней строке равно нулю, когда £(2£ + 3) t г -з/2\. r--2({+l)vS+O'e" >’ таким образом, максимум достигается, когда количество блоков равно — меич!)- <«> 5 2 + 25 \п/ Сравнивая (46) и (30), мы видим, что наибольшее число Стирлинга {^} для задан- ного значения п приблизительно равно Метод седловой точки применим к существенно более сложным задачам, чем рассмотренные в этом разделе. Превосходное описание ряда эффективных методов можно найти в книгах N. G. deBruijn, Asymptotic Methods in Analysis (1958), гла- вы 5 и 6; F. W. J. Olver, Asymptotics and Special Functions (1974), глава 4; R. Wong, Asymptotic Approximations of Integrals (2001), главы 2 и 7. •Случайные разбиения множеств. Размеры блоков в разбиении {1,... ,п} пред- ставляют собой обычное разбиение числа п. Следовательно, нас может заинте- ресовать, к какому виду разбиений оно может относиться. На рис. 50 в разделе 7.2.1.4 показан результат суперпозиции диаграмм Феррерса для всех р(25) = 1958 разбиений числа 25; эти разбиения стремятся к симметричной кривой из формулы 7.2.1.4-(49). В отличие от этого на рис. 55 показан результат суперпозиции соответ- ствующих диаграмм для всех tn25 « 4.6386 х 1018 разбиений множества {1,... ,25}. Очевидно, что “форма” случайного разбиения множества существенно отличается от таковой для случайного разбиения целого числа. Это изменение связано с тем, что некоторые разбиения целого числа появляются в виде размеров блоков разбиения множества только в редких случаях, в то время как другие весьма распространены. Например, разбиение п = 1+1-|-1-1 возможно только единственным способом, в то время как для четного числа п разбиение п = 2 + 2 + • • - + 2 может реализоваться (п — 1)(п — 3)... (1) способами. Для п = 25 разбиение целого числа 25 = 4 + 4 + 3 + 3 + 3 + 2 + 2 + 2-I-1-I-1
7.2.1.5 ГЕНЕРАЦИЯ ВСЕХ РАЗБИЕНИЙ МНОЖЕСТВ 483 е в действительности возникает более чем в 2% случаев от общего количества разбие- ний множества. (Это конкретное разбиение наиболее частое в случае п = 25. Ответ к упр. 1.2.5-21 гласит, что ровно cj! 1!C1 сг! 2!С2...Сп\п!Сп разбиений множества соответствуют разбиению целого числа n = Q • 1 + сг • 2 Ч-1- Сп п.) Можно легко определить среднее количество fc-блоков в случайном разбиении множества {1,..., п}: если записать все wn возможных разбиений, каждый кон- кретный fc-элементный блок встретится ровно wn-k раз. Следовательно, среднее значение составляет (fc)^’ (49) Расширение (31), как доказывается в упр. 64, дает — = ("У С1 + +1V 1} если*<"2/3- (50) wn \nJ \ 2(f + 1)2п \п2// где £ определено в (24). Следовательно, если, скажем, fc < п€, формула (49) упрощается до v(n)"(1 + OG)) - F(1 + O("2'"»' <61> В среднем имеется около £ блоков размером 1, (?/2\ блоков размером 2 и т. д. Дисперсия этих величин мала (см. упр. 65), и оказывается, что случайное раз- биение ведет себя, по сути, так, как если бы количество fc-блоков подчинялось распределению Пуассона со средним £к/к\. Гладкая кривая на рис. 55 проходит через точки (/(fc),fc) в координатах диаграммы Феррерса, где /(fc) = £fc+7(fc + 1)! + $fc+7(fc + 2)! + £fc+7(fc + 3)! + • - (52) представляет собой приближенное расстояние от верхней линии, соответствующей размеру блока к > 0. (Эта кривая при больших п становится все более близкой к вертикали.)
484 КОМБИНАТОРНЫЙ ПОИСК 7.2.1.5 Наибольший блок имеет тенденцию содержать примерно е£ элементов. Кроме того, вероятность того, что блок, содержащий элемент 1, имеет размер менее £+а>/£, приближается к вероятности того, что нормальное отклонение не превышает а. [См. John Haigh, J. Combinatorial Theory A13 (1972), 287-295; V. N. Sachkov, Probabilistic Methods in Combinatorial Analysis (1997), глава 4 (перевод книги на русском языке, изданной в 1978г.); Yu. Yakubovich, J. Mathematical Sciences 87 (1997), 4124-4137, перевод статьи на русском языке, опубликованной в 1995 г.; В. Pittel, J. Combina- torial Theory А79 (1997), 326-359.] Красивый способ генерации случайного разбиения множества {1,2,..., п} был предложен А. Й. Стамом (A. J. Stam) в Journal of Combinatorial Theory A35 (1983), 231-240. Пусть M—случайное целое число, принимающее значение т с вероятно- стью m Pm = j ет\ щ (53) в силу (16) сумма всех этих вероятностей равна 1. После того как М выбрано, ге- нерируем случайный n-кортеж Х1Х2 • • • Хп, где каждое Xj независимо равномерно распределено между 0 и М — 1. Тогда в разбиении г = j тогда и только тогда, когда X, = Xj. Эта процедура работает корректно, поскольку каждое разбиение множества с к блоками получается с вероятностью 52m>0(^i-/win)Pm = 1/^п- Например, при п = 25 имеем р4 « .00000372 ръ ~ .00019696 р6 « .00313161 р7 « .02110279 р8 «.07431024 р9 «.15689865 рю и .21855285 Рп « .21526871 Рю «.15794784 рю «.08987171 Р14 «.04093663 Рю «.01531445 Pie «.00480507 Pit « .00128669 рю « .00029839 Р19 и .00006068 Р20 «.00001094 Р21 » .00000176 Р22 ~ .00000026 Р2з « .00000003 Всеми остальными вероятностями можно пренебречь. Так, в большинстве случаев можно получить случайное разбиение 25 элементов, рассматривая случайное 25- значное число в системе счисления с основанием 9, 10, 11 или 12. Число М можно сгенерировать с помощью метода 3.4.1-(3); оно имеет тенденцию быть близким к п/£ = (см. упр. 67). •Разбиения мультимножеств. Разбиения целых чисел и разбиения множеств представляют собой крайние случаи существенно более общей задачи—разбиений мультимножеств. Действительно, разбиение п, по сути, — не что иное, как разбиение мультимножества {1,1,..., 1}, состоящего из п единиц. С этой точки зрения имеется, по сути, р(п) типов мультимножеств с п элемен- тами. Например, при п = 4 имеется пять различных случаев разбиения мультимно- жества: 1234, 123|4, 124|3, 12|34, 12|3|4, 134|2, 13|24, 13|2|4, 14|23, 14|2|3, 1|234, 1|23|4, 1|24|3, 1|2|34, 1|2|3|4; 1123, 112|3, 113|2, 11|23, 11|2|3, 123|1, 12|13, 12|1|3, 13|1|2, 1|1|23, 1|1|2|3; 1122, 112|2, 11|22, 11|2|2, 122|1, 12|12, 12|1|2, 1|1|22, 1|1|2|2; 1112, 111|2, 112|1, 11|12, 11|1|2, 12|1|1, 1|1|1|2; 1111, 111|1, 11|11, 11|1|1, 1|1|1|1. (54)
7.2.1.5 ГЕНЕРАЦИЯ ВСЕХ РАЗБИЕНИЙ МНОЖЕСТВ 485 Когда мультимножество содержит т различных элементов, первого вида, П2 второго, ..., пт последнего, общее количество разбиений мы обозначаем как p(ni, Ti2,..., пт). Примеры в (54) показывают, что р(1,1,1,1) = 15, р(2,1,1) = 11, р(2,2) = 9, р(3,1) = 7, р(4) = 5. (55) Разбиения с тп = 2 часто называют биразбиениями, с тп = 3 — триразбиения- ми, а в общем случае эти комбинаторные объекты известны как мультиразбие- ния. Изучение мультиразбиений было начато много лет назад П. А. Мак-Мэганом (Р. A. MacMahon) [Philosophical Transactions 181 (1890), 481-536; 217 (1917), 81- 113; Proc. Cambridge Philos. Soc. 22 (1925), 951-963]; однако предмет изучения настолько обширен, что в нем и поныне остается множество нерешенных вопросов. В оставшейся части данного раздела и упражнениях к нему мы бегло ознакомимся с некоторыми наиболее интересными и поучительными аспектами этой теории. Прежде всего стоит отметить, что мультиразбиения, по сути, являются разби- ениями векторов с неотрицательными целыми компонентами, а именно способами разложения такого вектора на сумму векторов с теми же свойствами. Например, девять разбиений {1,1,2,2}, перечисленных в (54), представляют собой не что иное, как девять разбиений двухкомпонентного вектора-столбца |, а именно 2 20 20 200 11 11 1 10 110 1100 2, 11» 02, он, 20, 11, 101» 002> 001Г Для краткости здесь опущены знаки +, как и в случае одномерных разбиений целых чисел. Каждое разбиение можно записать в каноническом виде, если перечислить его части в невозрастающем лексикографическом порядке. Для генерации разбиений любого заданного мультимножества достаточно про- стого алгоритма. В приведенной далее процедуре мы представляем разбиения в сте- ке, который содержит тройки элементов (с, и, г), где с обозначает номер компонента, и > 0 — пока еще не разбитый остаток в компоненте с, av — с-й компонент текущей части, где 0 < v < и. В действительности тройки для удобства располагаются в трех массивах, (со, щ,...), (ио, гц,...) и (i?q, щ,...), а кроме того, поддерживается массив “кадров стека” (/о, /1, ), так что (1 + 1)-й вектор разбиения состоит из элементов от fi до fi+i — 1 в массивах с, и ни. Например, биразбиение 1201131 представлено следующими массивами. 3 0 1 2 3 4 5 6 7 8 9 10 11 Cj 1 2 1 2 1 2 1 2 1 2 2 2 Uj 9 9 6 8 4 6 2 6 1 5 4 1 Vj 3 1 2 2 2 0 1 1 1 1 3 1 (57) о т—1 СМ 0 CM CD 00 т—1 т—1 т—1 II II II II II II II II Алгоритм М [Мультиразбиения в убывающем лексикографическом порядке). Для данного мультимножества {ni • 1,..., пт • тп} этот алгоритм посещает все его разбие- ния с использованием описанных выше массивов /оД ... fn, cqCi ... стп, uqui ... итп и i?qVi ... vmn, где п = ni Ч-+ пт. Полагаем, что тп > 0 и nj,...,пт > 0.
486 КОМБИНАТОРНЫЙ ПОИСК 7.2.1.5 Ml. [Инициализация.] Установить с,; j + 1 и Uj <— Vj t— nj+i для 0 < j < m; установить также fo*~ a I *- 0 и Д «— fe «— тп. (На последующих шагах текущий кадр стека пробегает от а до b — 1 включительно.) М2. [Вычитание v из и.] (Здесь мы хотим найти все разбиения вектора и в текущем кадре на части, лексикографически < v. Сначала мы используем само v.) Установить j «— а, к «— b и х <— 0. Затем, пока j < b, выполнять следующее: установить Uk «— Uj — Vj. Если Uk = 0, установить х 1 и j «— J + 1. В противном случае при х — 0 установить с& «— Cj, Vk ♦— min(uj,Ufc), x «— [ufc<Uj], Л + 1, j *— J + 1- В противном случае установить с*, «— Cj, Vk *— ufc, к «— к + 1, j *— j + 1. (Заметим, что х = [г изменено].) М3. [Внесение в стек, если не нуль.] Если к > Ь, установить а«— b, Ъ *— к, It— Z +1, fi+i *— b и вернуться к шагу М2. М4. [Посещение разбиения.] Посетить разбиение, представленное I + 1 векторами, находящимися в стеке. (Для 0 < к < I вектор имеет Vj в компоненте Cj, fк < j < fk+i-) М5. [Уменьшение и.] Установить j *— b — 1; пока Vj = 0, устанавливать j *— j — 1. Затем, если j = а и Vj — 1, перейти к шагу Мб. В противном случае установить vi' — 1 и vk *— «fc для j < к < b. Вернуться к шагу М2. Мб. [Возврат.] Завершить работу алгоритма, если I = 0. В противном случае установить / — 1, а, а«— Ди вернуться к шагу М5. | Ключевым в этом алгоритме является шаг М2, который уменьшает текущий оста- точный вектор и на наибольшую разрешенную часть, v; этот шаг также при необ- ходимости уменьшает v до лексикографически наибольшего вектора < v, кото- рый меньше или равен новому остаточному значению в каждом компоненте. (См. упр. 68.) Завершим этот раздел рассмотрением интересной связи между мультиразбие- ниями и процедурой сортировки начиная с младших цифр из алгоритма поразряд- ной сортировки (алгоритм 5.2.5R). Легче всего понять идею путем рассмотрения конкретного примера. Взгляните на табл. 1, где шаг (0) представляет собой де- вять четырехкомпонентных векторов-столбцов в лексикографическом порядке. Для идентификации в строке ниже приведены их порядковые номера ф-©. Шаг (1) выполняет устойчивую сортировку векторов, начиная с расположения четвертого (младшего) компонента в порядке уменьшения; аналогично шаги (2)-(4) выполняют устойчивую сортировку третьей, второй и первой строк. Теория поразрядной сорти- ровки гласит, что таким образом восстанавливается исходный лексикографический порядок. Предположим, что последовательности порядковых номеров после этих опера- ций устойчивой сортировки представляют собой соответственно «4, 0304, сщ-изсч и O1O2O3O4, где все о являются перестановками. В табл. 1 значения 04, 03, 02 и ai показаны в скобках. А теперь перейдем к главному: где бы перестановка ол не имела спуск, числа в строке j после сортировки также должны иметь спуск, поскольку сортировка устойчива. (В таблице эти спуски помечены символами “Л”) Например, там, где в 03 за 8 идет 7, в строке 3 за 5 идет 3. Следовательно, элементы ai... ад в строке 3 после шага (2) не являются произвольным разбиением их суммы;
7.2.1.5 ГЕНЕРАЦИЯ ВСЕХ РАЗБИЕНИЙ МНОЖЕСТВ 487 Таблица 1 Поразрядная сортировка и мультиразбиения Шаг (0): исходное разбиение 655432100 321045642 663115207 421331125 ®®®®®®@®® Шаг (1): сортировка строки 4 064350521 230424156 761160352 5Л4 3 Зл2 2Л1 1 1 ®®®®®®®®@ Шаг (2): сортировка строки 3 065251430 232516044 7 6 6 5Л3 2Л1 1 0 542111332 ®®®®®®®@® аз = ( 1 2 5 8Л7 9Л3 4 6) л4 = (9л1 4 5Л2 8Л3 6 7) Шаг (3): сортировка строки 2 123060554 6Л5 4 4Л3Л2 210 251067631 113245213 ®®®®®@®®® а2 = ( 6Л4 8 9Л2Л1 3 5 7) Шаг (4): сортировка строки 1 655 4Л3Л2Л1 0 0 321045642 663115207 421331125 ®®®®®®@®® ai = (5 7 8 9Л3Л2Л1 4 6) они должны удовлетворять условиям О1 — О2 — Из — °4 > Об — ав > а7 — °8 — 09- (58) Однако числа (а4—2, а2 —2, а3—2, а4 —2, а5 —1, ав —1, <17, а8, 09) образуют, по сути, произвольное разбиение исходной суммы минус (4+6). Величина уменьшения, 4+6, представляет собой сумму индексов, где наблюдается спуск; это число является тем, что в разделе 5.1.1 называлось индексом а3 и обозначалось inda3. Итак, мы видим, что любое разбиение m-компонентного числа не более чем на г частей (с дополнительными нулями, добавленными для того, чтобы количество столбцов было равно г) можно закодировать как последовательность перестановок «1, ..., ат множества {1,..., г}, такую, что произведение «1... ат представляет собой тождественную перестановку, вместе с последовательностью обычных одно- мерных разбиений чисел (ni — indoi, ..., пт — indoim) не более чем на г частей. Например, векторы в табл. 1 представляют разбиение (26,27,31,22) на 9 частей; перестановки Oi, ..., а4 приведены в таблице, и мы имеем (indoii,...,inda4) = (15,10,10,11); соответственно разбиения представляют собой 26-15 = (322111100), 27-10 = (332222210), 31-10 = (544321110), 22-11 = (221111111). И обратно: любые такие перестановки и разбиения дают мультиразбиения (п>,..., Пщ). Если г и тп малы, при перечислении или доказательствах свойств мультираз- биений, в особенности биразбиений, может оказаться полезным рассмотрение г!"1-1 последовательностей одномерных разбиений. [См. Basil Gordon, J. London Math. Soc. 38 (1963), 459-464.] Неплохой обзор ранних работ, посвященных изучению разбиений на различные части и/или на строго положительные части, можно найти в статье М. S. Cheema and Т. S. Motzkin, Proc. Symp. Pure Math. 19 (Amer. Math. Soc., 1971), 39-70.
488 КОМБИНАТОРНЫЙ ПОИСК 7.2.1.5 Упражнения 1. [20] (Д. Хатчинсон (G. Hutchinson).) Покажите, что простое изменение алгоритма Н позволяет генерировать все разбиения {1,..., п} на не более чем г блоков для заданных п тлт>2. ► 2. [22] При использовании разбиений множества на практике нам часто требуется свя- зать вместе элементы каждого блока. Соответственно, удобно иметь массив связей Zi... 1п и массив заголовков hi .. .ht, так что элементами у-го блока t-блочного разбиения являются й > > й, где tj — hj, й — Zi,, ..., ik Zj^__и Zt^ —— 0. Например, представление 137|25|489|6 должно иметь t = 4, Zi... lg = 001020348 и hi... ht = 7596. Разработайте вариацию алгоритма H, которая генерирует разбиения с использованием описанного представления. 3. [Л/23] Каково миллионное разбиение множества {1,..., 12}, сгенерированное алгорит- мом Н? ► 4. [21] Обозначим через p(xi... хп) для произвольной строки xi... хп ограниченно рас- тущую строку, которая соответствует отношению эквивалентности j = к <=> Xj = Хк- Классифицируем каждое пятибуквенное английское слово из Stanford GraphBase путем применения функции р; например, p(tooth) = 01102. Сколько из 52 разбиений пятиэле- ментного множества представимо таким способом английскими словами? Каковы наиболее распространенные слова каждого типа? 5. [22] Угадайте очередные элементы двух последовательностей: (а) 0, 1, 1, 1, 12, 12, 12, 12, 12, 12, 100, 121, 122, 123, 123, ...; (б) 0, 1, 12, 100, 112, 121, 122, 123, .... ► 6. [25] Предложите алгоритм генерации всех разбиений множества {1,..., п}, в которых имеется ровно щ блоков размера 1, сг блоков размера 2 и т. д. 7. [Л/20] Сколько перестановок ai.. .ап множества {1,... ,п} обладают тем свойством, что из Ok-i > йк > a,j вытекает j > kt 8. [20] Предложите способ генерации всех перестановок множества {1,...,п}, которые при проходе слева направо имеют ровно тп минимумов. 9. [1И20] Сколько ограниченно растущих строк ai... ап содержат в точности kj вхожде- ний j для заданных целых значений ко, ki, , kn-it 10. [25] Полупомеченным (semilabeled) называется ориентированное дерево, листья кото- рого помечены целыми числами {1,..., fc}, но прочие узлы остаются непомеченными. Так, имеется 15 полупомеченных деревьев с 5 вершинами. | I А к А Л ft ft А A A (Ji fh fh ilh 1 ft ц I2 123 12 ! I 23 13 12 3 2 1 1234 X л х X X Найдите взаимно однозначное соответствие между разбиениями множества {1,..., п} и по- лупомеченными деревьями с п + 1 вершинами. ► 11. [28] Из раздела 7.2.1.2 мы узнали, что знаменитая головоломка Дьюдени send+more = money представляет собой “чистый” буквометик, т. е. буквометик с единственным решени- ем. Эта головоломка соответствует разбиению множества на 13 позиций цифр, ограниченно растущая строка которого p(sendmoremoney) представляет собой 0123456145217. Можно заинтересоваться вопросом, насколько везучим нужно быть, чтобы встретиться с такой конструкцией? Сколько ограниченно растущих строк длиной 13 определяют чистые бук- вометики вида O1O2U3O4 + 05G6U7U8 = U9O10U11O12U13?
7.2.1.5 ГЕНЕРАЦИЯ ВСЕХ РАЗБИЕНИЙ МНОЖЕСТВ 489 12. [Л757] (Решетка разбиений.) Если П и П' представляют собой разбиения одного и того же множества, мы записываем П П', если х = у (по модулю П) всегда, когда х = у (по модулю П'). Другими словами, П П' означает, что П' представляет собой “утончение” П, получаемое путем разбиения нескольких (возможно, ни одного) блоков последнего; П, в свою очередь, является “огрублением” или коалесценцией П', получае- мой путем объединения вместе нескольких (возможно, ни одного) блоков. Это частичное упорядочение, как легко видеть, представляет собой решетку, причем П V П' является наибольшим общим утончением П и П', а П Л П' — наименьшим общим огрублением. Например, если представить разбиения ограниченно растущими строками 01020304, то соответствующая решетка для разбиений множества {1,2,3,4} имеет следующий вид. Пути, ведущие на этой диаграмме вверх, идут от разбиения к его утончениям. Разбиения на t блоков находятся на уровне t снизу, а их потомки образуют решетку разбиений множества {1,..., t}. а) Поясните, как вычислить 77 V П' для заданных ах... ап и a'i... а'п. б) Поясните, как вычислить П Л П' для заданных .. ап и а! ... а'п. в) Когда в этой решетке П' покрывает 77? (См. упр. 7.2.1.4-55.) г) Если 77 имеет t блоков с размерами si, ..., st, то сколько разбиений оно покрывает? д) Если 77 имеет t блоков с размерами si, ..., st, то сколькими разбиениями оно покры- вается? е) Истинно или ложно следующее утверждение? Если ПУП' покрывает 77, то 77' покрывает П /\П'. ж) Истинно или ложно следующее утверждение? Если 77' покрывает 77 Л 77', то 77 V 77' покрывает 77. з) Пусть 5(77) обозначает количество блоков 77. Докажите, что 5(П) + 5(П') < Ъ(П V П') + Ь(П Л П'). 13. [М28] (Стефен К. Милн (Stephen С. Milne), 1977.) Если А — множество разбиений {1,... ,п}, его тенью дА является множество всех разбиений П', такое, что 77 покрывает 77' для некоторого П 6 А (подобная концепция рассматривалась в 7.2.1.3-(54)). Пусть 771, 77г, ... —разбиения множества {1,... ,п} на t блоков в лексикографическом порядке их ограниченно растущих строк. Пусть также П[, П'ч, ... —(t — 1)-блочные разбиения, также находящиеся в лексикографическом порядке. Докажите, что существует функция fnt(N), такая, что д{П1, ...,nN} — {77j,... ,77/„t(w)} для 0 < N < { Указание: диаграмма из упр. 12 демонстрирует, что (/43(0),..., /43(6)) = (0,3,5,7,7,7,7). 14. [23] Разработайте алгоритм для генерации разбиений множества в порядке кода Грея наподобие (7). 15. [М21 ] Каково последнее разбиение, сгенерированное алгоритмом из упр. 14?
490 КОМБИНАТОРНЫЙ ПОИСК 7.2.1.5 16. [16] Список (11) представляет собой последовательность Раски Л38. Какой вид имеет •Азв? 17. [26] Реализуйте код Грея для всех m-блочных разбиений множества {1,..., п}, опре- деляемый рекурсивными соотношениями Раски. 18. [Mj6] Для каких п можно сгенерировать все ограниченно растущие строки ai... ап так, чтобы на каждом шаге некоторое aj изменялось на ±1? 19. [28] Докажите, что существует код Грея для ограниченно растущих строк, в котором на каждом шаге некоторое aj изменяется либо на ±1, либо на ±2, когда мы хотим сге- нерировать (а) все стп строк ai... От»; (б) только {^} случаев, удовлетворяющих условию max(ai,... ,an) = тп — 1. 20. [17] Если 17—разбиение множества {1,...,п}, сопряженное к нему разбиение Пт определяется правилом j = к (по модулю Пт) n + 1— j = п + 1 — к (по модулю 17). Предположим, 77 имеет ограниченно растущую строку 001010202013; какой будет ограни- ченно растущая строка Пт? 21. [М27] Сколько разбиений множества {1,..., п} являются самосопряженными? 22. [М23] Если X—случайная переменная с заданным распределением, то математи- ческое ожидание Хп называется n-м моментом этого распределения. Чему равен п-й момент, если X представляет собой (а) распределение Пуассона со средним значением 1 (формула 3.4.1-(40))? (б) количество фиксированных элементов в случайной перестановке множества {1,... ,пг}, где т > п (формула 1.3.3-(27))? 23. [НМЗО] Пусть/(х) = ала:* и пусть/(ст) означает $2 afcCTfc. а) Докажите символьную формулу /(ст + 1) = ст/(ст). (Например, если f(x) — полином х2, то эта формула гласит, что стг + 2cti + Сто = ст3.) б) Аналогично докажите, что /(ст + к) = ст-/(ст) для всех положительных целых fc. в) Докажите, что если р—простое, то тлп+Р = стп + стп+1 (по модулю р). Указание: сначала покажите, что хр = хр — х. г) Следовательно, если N = р₽-1 + р₽-2 + + р + 1, то CTn+w = стп (по модулю р). 24. [НМ35] Продолжая выполнять упражнение, докажите, что числа Белла удовлетво- ряют периодическому закону wn+pe-iN = стп (по модулю ре), если р—нечетное простое число. Указание: Покажите, что а;^ = де(х) + 1 (по модулю ре, ре ... и pgc-i(x)), где р>(х) = (хр—х—1)р3. 25. [А787] Докажите, что стп/стп-1 < стп+1/стп < стп/стп-1 + 1. 26. [М22] В соответствии с рекуррентными уравнениями (13) числа стпк в треугольнике Пирса подсчитывают пути от @) ДР (П) в бесконечном ориентированном графе Поясните, почему каждый путь от (ц!) до (П) соответствует разбиению множества {!,..., п}.
7.2.1.5 ГЕНЕРАЦИЯ ВСЕХ РАЗБИЕНИЙ МНОЖЕСТВ 491 ► 27. [Л/35] “Циклом колеблющейся диаграммы” (vacillating tableau loop) порядка п явля- ется последовательность разбиений целых чисел А* = амаиои , у которых аы > аь2 > аьз > • для 0 < к < 2п, такая, что Ао = Агп = ео и А* = Аь-i + (—1)ketk для 1 < к < 2п и для некоторого 0 < tk < п; здесь et обозначает единичный вектор 0f-110n-t с 0 < t < п, а ео состоит из нулей. а) Перечислите все такие циклы порядка 4. [Указание: их всего 15.] б) Докажите, что t2fc-i =0 ровно у wnic циклов порядка п. ► 28. [М25] (Обобщенные ладейные полиномы.) Рассмотрим расстановку ai Ч----l-a™ квад- ратных ячеек по строкам и столбцам, где строка к содержит ячейки в столбцах 1, ..., аь- Поместим нуль или более “ладей” в ячейки так, чтобы в каждой строке и в каждом столбце было не более одной ладьи. Пустую ячейку будем называть свободной, если ни справа, ни снизу от нее нет ладьи. Например, на рис. 56 показаны два таких размещения. Одно— с четырьмя ладьями и строками длиной (3,1,4,1,5,9,2,6,5); второе — с девятью ладьями на квадратной доске размером 9x9. Ладьи на рисунке показаны черными кружками; белые кружки размещаются слева и над ладьями, так что свободные ячейки не содержат никаких кружков. о о о о о о • о о о о • о о о о о о о о о о • о о о о о • о о о о о о о о о о • о о • о о о о о о о о о о • • о о о о о • Рис. 56. Размещение ладей и свободные ячейки. Пусть R(ai,..., От) — полином от х и у, полученный суммированием хТпо всем кор- ректным расстановкам ладей, где г — количество ладей, a f—количество свободных ячеек; например, левое размещение на рис. 56 добавляет х4у17 в полином R(3,1,4,1,5,9,2,6,5). а) Докажите, что R(ai,... ,ат) = R(ai,... ,aj~i,aj+i,aj,aj+2,... ,ат)', другими словами, порядок длин сторон значения не имеет, и можно считать, что ai > > о^, как и в диаграмме Феррерса наподобие 7.2.1.4-(13). б) Докажите, что если ai > ••• > о™ и если bi...bn = (ai.. .am)T—сопряженное разбиение, то R(ai,..., От) = R(bi,..., bn). в) Найдите рекуррентное соотношение для вычисления R(ai,... ,ат) и воспользуйтесь им для вычисления R(3,2,1). г) Обобщите треугольник Пирса (12) путем замены правил сложения (13) на ^пк(х,у) = XCT(n_i)fc(a;,j/) + j/u7n(fc+i)(a;,j/), 1 < к < п. Таким образом, W2i(x,y) = х+j/, ix>32(x,у) = х+ху+у2, wn(x,y) = х2 + 2ху+ху2+ у3 и т. д. Докажите, что получающееся таким образом значение wnk(x,y) представляет собой ладейный полином R(ai,..., On-i), где aj = п — j — [j < fc]. д) Полином tuni(a:, у) из п. (г) можно рассматривать как обобщенное число Белла ъ&п(х,у), представляющее пути от (ц1) до (П) в ориентированном графе из упр. 26, которые имеют данное количество “шагов х” на северо-восток и данное количество “шагов у” на восток. Докажите, что Wn(x,y) = a.n-l-max(a1........a„)J/a1+-+a„i ai...an где сумма берется по всем ограниченно растущим строкам си ... ап длиной п.
492 КОМБИНАТОРНЫЙ ПОИСК 7.2.1.5 29. [М2б[ Продолжая выполнять предыдущее упражнение, используем обозначение Rr(ai,..., От) = [xr] R(ai, От) для полинома от у, который перечисляет все свободные ячейки при расстановке г ладей. а) Покажите, что количество способов расстановки п ладей на доске размером п х п, таких, что при этом остается f свободных ячеек, представляет собой количество пе- рестановок {1,... ,п}, в которых имеется f инверсий. Таким образом, в соответствии с формулой 5.1.1-(8) и упр. 5.1.2-16 Rn(n,...,n) = n!v = JJ(1 4-з/Ч------hyfc '). k=l m б) Что собой представляет Rr(n,... , n)—производящая функция для г ладей на доске размером т х п? в) Докажите обобщенную формулу 1 - yai+}' 1-1/ = V t[y Rm—kfal, • • ,Отп), где ai > > От > 0, a t—неотрицательное целое число. [Примечание. Величина *!»/(* ~ kYv = П-;о((1 — 1/*-л)/(1 ~ 1/)) равна нулю при к > t > 0. Таким образом, например, при 1 = 0 правая часть сводится к Rm(ai,..., ат). Можно вычислить Rm, Rm-i, •, Ro, последовательно устанавливая t = 0, 1, ..., т.] г) Покажите, что если aj > а2 > • • • _ ат — 0 и a'i > а2 > • > а'т > 0, то R(fl! ,02 ..., ат) = Д(а1, а2,..., <4) тогда и только тогда, когда соответствующие муль- тимножества {oi+l, вг+2,..., am+m} и {a'i+1, а2+2,..., aJn+7Zl} одинаковы. 30. [НМЗО] Обобщенные числа Стирлинга {^}ч определяются рекуррентным соотноше- Таким образом, представляет собой полином от д, a {^}j является обычным числом Стирлинга {J^}, поскольку оно удовлетворяет рекуррентному соотношению 1.2.6-(46). а) Докажите, что обобщенное число Белла tun(x,y) = R(n— 1,..., 1) из упр. 28, (д) имеет явный вид ^п(х,у) = E®n'm»(’){”} • m.=0 v б) Покажите, что обобщенные числа Стирлинга подчиняются рекуррентному соотноше- нию в) Найдите производящую функцию для {^}q, обобщающую 1.2.9-(23) и 1.2.9-(28). 31. [НМ23] Обобщая (15), покажите, что элементы треугольника Пирса имеют простую производящую функцию, если вычислить сумму п,к wn-k zk-l (п — fc)1. (к-1)!'
7.2.1.5 ГЕНЕРАЦИЯ ВСЕХ РАЗБИЕНИЙ МНОЖЕСТВ 493 32. [М22] Пусть 6п—количество ограниченно растущих строк ai ...ап, сумма которых aiЧ Fan четна, минус количество строк, сумма которых aid-Fan нечетна. Докажите, что <5„ = (1,0,-1,-1,0,1) при п mod 6 = (1,2,3,4,5,0). Указание: см. упр. 28, (д). 33. [М21] Сколько имеется разбиений множества {1,2,...,п}, у которых 1 2, 2 3, ..., к-1 £ к? 34. [14 ] Поэтические произведения характеризуются схемами рифм, которые представля- ют собой разбиения строк строфы, обладающие теми свойствами, что j - к тогда и только тогда, когда строка j рифмуется со строкой к. Например, “лимерик” обычно представляет собой пятистрочное стихотворение с определенными ритмическими ограничениями и со схемой рифм, описываемой ограниченно растущей строкой 00110*. Какие схемы рифм используются в классических сонетах (а) Гвиттоне д’Ареццо (ок. 1270)? (б) Петрарки (ок. 1350)? (в) Спенсера (1595)? (г) Шекспира (1609)? (д) Эли- забет Браунинг (1850)? 35. [М21] Пусть w'n — количество схем n-строчных стихотворений, которые являются “полностью рифмованными” в том смысле, что каждая строка рифмуется как минимум еще с одной. Таким образом, мы имеем (сто, irfz, ...) = (1, 0, 1, 1, 4, 11, 41, ...). Дайте комбинаторное доказательство того, что + ст„+1 ~ ст„. 36. [М22] Продолжая выполнять упр. 35, выясните, что собой представляет производя- щая функция $2n tu'nzn/n! ? 37. [MIS] А. С. Пушкин в своем романе в стихах Евгений Онегин (1833) использовал тщательно разработанную структуру клаузул (т. е. окончаний стихотворных строк, со- стоящих из последнего ударного слога и следующих за ним безударных), основанную не только на “мужских” окончаниях, состоящих из одного ударного слога (стрбй-водбй, старожйл-давйл), но и на “женских” окончаниях, состоящих из ударного и следующего за ним безударного слога (прйвил-застйвил, расхбда-гбда). Он в том покое поселился, / Где деревенский старожил Лет сорок с ключницей бранился, / В окно смотрел и мух давил. Все было просто: пол дубовый, / Два шкафа, стол, диван пуховый. Нигде ни пятнышка чернил. / Онегин шкафы отворил: В одном нашел тетрадь расхода, / В другом наливок целый строй, Кувшины с яблочной водой, / И календарь осьмого года: Старик, имея много дел, / В иные книги не глядел. — А. С. ПУШКИН, Евгений Онегин (1833) Каждая так называемая онегинская строфа представляет собой сонет со строгой схе- мой 01012233455477, причем рифмы являются мужскими или женскими в соответствии с тем, четна ли соответствующая цифра или нечетна. Несколько современных перевод- чиков Пушкина сумели выдержать эти правила при переводе на английский и немецкий языки. * Кроме того, в каноническом лимерике конец последней строки повторяет конец первой.— Примеч. пер.
494 КОМБИНАТОРНЫЙ ПОИСК 7.2.1.5 How do I Justify this stanza? / These feminine rhymes? My wrinkled muse? This whole passe extravaganza? / How сап I (careless of time) use The dusty bread molds of Onegin / In the brave bakery of Reagan? The loaves will surely fail to rise / Or else go stale before my eyes. The truth is, l can't Justify It. / But as no shroud of critical terms Can save my corpse from boring worms, / / may as well have fun and try It. If It works, good; and if not, well, / A theory won’t postpone its knell. — ВИКРАМ CET (VIKRAM SETH), Золотые ворота (The Golden Gate) (1986) Согласно упр. 35, 14-строчный стих может иметь любую из и/ц = 24011157 полных схем рифм. Но сколько имеется схем, если мы получим возможность наложить на каждый блок условие использования женской или мужской рифмы? ► 38. [МЗО] Пусть o-fc —циклическая перестановка (1,2,..., fc). Темой данного упражнения является изучение последовательностей kik? кп, именуемых <т-циклами, для которых afei afe2 ... <7kn представляет собой тождественную перестановку. Например, при п = 4 имеется 15 ст-циклов, а именно 1111,1122,1212,1221,1333,2112,2121,2211,2222,2323,3133,3232,3313,3331,4444. а) Найдите взаимно однозначное соответствие между разбиениями {1,2,..., п} и ст-цик- лами длиной п. б) Сколько ст-циклов длиной п обладают тем свойством, что 1 < fci, ..., fcn < тп для заданных тп и п? в) Сколько ст-циклов длиной п обладают тем свойством, что fci - j для заданных г, j и п? г) Сколько ст-циклов длиной п обладают тем свойством, что fci, ..., кп > 2? д) Сколько разбиений {1,..., п} обладают тем свойством, что 1^2, 2^3, ...,п — 1^п и п 1? 39. [НМ16] Вычислите e-t₽+1 tq dt, где p и g—неотрицательные целые числа. Указа- ние: см. упр. 1.2.5-20. 40. [НМ20] Предположим, что метод седловой точки используется для оценки [zn-1] есг. В разделе при выводе (21) из (19) работа велась с с = 1. Как должен измениться вывод, если с—произвольная положительная константа? 41. [ЯМ21] Решите предыдущее упражнение при с =—1. 42. [НМ23] Воспользуйтесь методом седловой точки для оценки [zn~1 ] ez с относительной ошибкой О(1/п2). 43. [НМ22] Обоснуйте замену интеграла в (23) на (25). 44. [НМ22] Поясните, как вычислить bi, Ьз, • в (26) на основании аг, аз, ... в (25). ► 45. [НМ23] Покажите, что в дополнение к (26) имеется также разложение где Ц = —(2£4 + 9£3 + 16£2 + 6$ + 2)/(24(£ + I)3). 46. [НМ25] Оцените значение в треугольнике Пирса при п —> оо. 47. [М21 ] Проанализируйте время работы алгоритма Н.
7.2.1.5 ГЕНЕРАЦИЯ ВСЕХ РАЗБИЕНИЙ МНОЖЕСТВ 495 48. [НМ25] Если п не является целым числом, интеграл в (23) может быть взят по контуру Ганкеля для определения обобщенного числа Белла для всех действительных х > 0. Покажите, что, как в (16), ► 49. [НЛ/35] Докажите, что для больших п число £, определенное в (24), равно Inn 1 @ _ In In п Inn’ Inn ► 50. [ЯМ21] Если £(n)e^n' = п и £(n) > 0, то как между собой соотносятся £(п+к) и £(п)? 51. [ЯМ27] Воспользуйтесь методом седловой точки для оценки tn = n! [zn] ez+z , коли- чества инволюций на п элементах (или разбиений множества {1,... ,п} на блоки разме- ром < 2). 52. [НМ22] Семиинварианты, или кумулянты распределения вероятностей определяют- ся правилом 1.2.10-(23). Чему равны кумулянты, если вероятность того, что целое число равно fc, составляет (a) e1-eSzz7fc^fc/fc!? (б) {*} ee-1-1-T/fc!? ► 53. [НМЗО] Пусть G(z) = —производящая функция для дискретного распре- деления вероятностей, сходящаяся при |z| < 1+<5; итак, коэффициенты pk неотрицательны, G(l) = 1, а среднее и дисперсия равны соответственно р = G'(l) и ст2 = G"(l) + G'(l) — G'(l)2. Если Xi, ..., Хп—независимые случайные переменные с указанным распределе- нием, то вероятность того, что Xi + • • • + Хп = т равна [zm] G(z)", и часто возникает необходимость оценить эту вероятность при тп, близком к среднему значению рп. Будем считать, что ро ф 0 и что не существует целого d > 1, которое является общим делителем всех индексов fc, для которых рь Ф 0; эти предположения означают, что тп не обязано удовлетворять никаким специальным условиям конгруэнтности по модулю d при больших п. Докажите, что -г2/(2а2п) , . к [z**n+r] G(z)n = --------—F Ol — ) при п —> оо, оу/2кп \п/ где рп+r является целым числом. Указание: проинтегрируйте G(z)"/z**n+r по окружности И = 1. 54. [НМ20] Пусть а и Р определены формулами (40). Покажите, что их арифметическое и геометрическое средние равны соответственно = scoths и x/ct/3 = scschs, где в = а/2. 55. [НМ20] Предложите способ вычисления числа Р, требующегося в формуле (43). ► 56. [HMS6] Пусть g(z) = a-1 ln(e2 — 1) — In z и о = а — Р, как в (37). а) Докажите, что (—а)”+1</”+1)(а) = п! — $2Г=о ('k)°‘k0n~k’ числа Эйлера определены в разделе 5.1.3. б) Докажите, что ^n! < 52£=О < п! для всех а > 0. Указание: см. упр. 5.1.3- 25. в) Проверьте неравенство (42). 57. [НМ22] С использованием обозначений из (43) докажите, что (а) п+1—тп < 2N; (б) 7V< 2(п+1—тп). 58. [HMSi] Завершите доказательство (43) следующим образом. а) Покажите, что для всех а > 0 существует число т > 2а, такое, что т кратно 2тг и |ест+*‘ — 1 |/|а + it| монотонно убывает при 0 < t < т.
496 КОМБИНАТОРНЫЙ ПОИСК 7.2.1.5 б) Докажите, что ехр((п + 1)р(<т + it)) dt приводит к (43). в) Покажите, что соответствующими интегралами по прямолинейным путям z = t ± гт, где — п <t<a,uz = —п ± it, где — т <t<T, можно пренебречь. 59. [ЯМ83] Какое предсказание дает (43) для приближенного значения {^}? 60. [/С1£85] (а) Покажите, что частичные суммы в тождестве Гп1 = т" _ (т - 1)" (т - 2)"__________ m 0п Im J m! 1! (m — 1)! 2! (m — 2)! m!0! поочередно приближаются к конечному значению сверху и снизу, (б) Сделайте вывод о том, что t n 1 _ (j(ne_n )) При т < п1-е. I т ) т! (в) Выведите аналогичный результат из (43). 61. [НМ26] Докажите, что, если т = п — г, где г < п* и е < п1^2, формула (43) дает 62. [IlllfJO] Докажите строго, что если = п, то максимум {^} достигается либо при т = |е€ — 1J, либо при т = |"е£ — 1]. 63. [Л/55] (Д. Питман (J. Pitman).) Докажите, что имеется следующий элементарный способ определить максимум как чисел Стирлинга, так и многих других подобных величин. Предположим, что 0 < Pj < 1. а) Пусть f(z) = (1 + pi(z—1)) ... (1 +pn(z—1)) и ak = [zfc] f(z)-, таким образом, ак пред- ставляет собой вероятность получить fc “орлов” при п независимых подбрасываниях монет с вероятностями выпадения орла соответственно pi, ..., рп- Докажите, что о.к-1 < ак при к < р = pi -I-1- рп, ак / 0. б) Аналогично докажите, что ak+i < ак при к > р и ак 0. в) Если f(x) = ao + ai х -I-F апхп—некоторый ненулевой полином с неотрицательными коэффициентами и п действительными корнями, докажите, что ak-i < ак при к < р и ak+i < ак при к > р, где р = f (1)/f(l). Следовательно, если ат = шах(ао, - - - ,ап), то либо т = LmJ , либо т = [д]. г) Используя гипотезу (в) и полагая aj = 0 при j < 0 или j > п, покажите, что существуют индексы в < t, такие, что — ак < ак — a*:-i тогда и только тогда, когда s < к < t (т. е. гистограмма последовательности (ao,ai,... ,Оп) всегда имеет колоколообразную форму). д) Что говорят полученные результаты о числах Стирлинга? 64. [НМ21] Докажите приближенное отношение (50) с использованием (30) и упр. 50. 65. [НМ22] Чему равна дисперсия количества блоков размером fc в случайном разбиении множества {1,..., п}? 66. [MJff] Какое разбиение числа п дает больше всего разбиений множества {1,..., п}? 67. [НМ20] Чему равны среднее и дисперсия М в методе Стама (53)? 68. [21 ] До каких значений могут вырасти переменные I и b в алгоритме М при генерации всех p(ni,..., Пт) разбиений мультимножества {ni • 1,..., пт т}? 69. [22] Модифицируйте алгоритм М так, чтобы он выдавал разбиения не более чем на г частей. 70. [М22] Проанализируйте количество возможных г-блочных разбиений в п-элементных мультимножествах (а) {0,..., 0,1}; (б) {1,2,..., п — 1, п — 1}. Чему равно общее количество разбиений, просуммированное по всем г?
7.2.1.5 ГЕНЕРАЦИЯ ВСЕХ РАЗБИЕНИЙ МНОЖЕСТВ 497 71. [М20] Сколько разбиений мультимножества {ni 1,..., Пт ui} состоит ровно из двух частей? 72. [М2б] Можно ли вычислить р(п, п) за полиномиальное время? 73. [М32] Можно ли вычислить за полиномиальное время р(2,..., 2) (в скобках всего п двоек)? 74. [MJO] Можно ли вычислить за полиномиальное время р(п,..., п) (в скобках всего п значений п)? 75. Найдите асимптотическое значение р(п,п). 76. [НМЗб] Найдите асимптотическое значение р(2,... ,2) (в скобках всего п двоек). 77. Найдите асимптотическое значение р(п,..., п) (в скобках всего п значений п). 78. [20] Какие разбиения (15,10,10,11) приводят к перестановкам ai, аг, аз и оц, пока- занным в табл. 1? 79. [22] Последовательность ui, иг, из, ... называется универсальной для разбиений множества {1,..., п}, если ее подпоследовательности (um+i, um+2, , um+n) при 0 < т < представляют все возможные разбиения множества с выполнением соглашения “j = к тогда и только тогда, когда um+j = um+k’.’ Например, (0,0,0,1,0,2, 2) является универ- сальной последовательностью для разбиений множества {1,2,3}. Напишите программу для поиска всех универсальных последовательностей разбиений множества {1,2,3,4}, обладающих следующими свойствами: (i) ui = иг = из = U4 = 0; (ii) последовательность обладает свойством ограниченного роста; (iii) 0 < uj < 3; и (iv) uie = U17 = U18 = 0 (так что последовательность, по сути, циклично). 80. [M2S] Докажите, что универсальные циклы для разбиений {1,2,...,п} существуют в смысле предыдущего упражнения для всех п > 4. 81. [29] Найдите способ так сложить обычную колоду из 52 игральных карт, чтобы был возможен следующий фокус. Пять игроков по очереди снимают колоду (выполняя цик- лическую перестановку) столько раз, сколько хотят. Затем каждый игрок берет по одной карте с вершины колоды. Фокусник просит игроков посмотреть на свои карты и образовать аффинные группы, объединив карты одинаковой масти (валет пик, однако, рассматрива- ется как “джокер” —он остается в одиночестве). Увидев аффинные группы, и ничего не зная об их масти, фокусник, тем не менее, мо- жет назвать все пять карт (если изначально они были сложены в колоду соответствующим образом). 82. [22] Сколькими способами можно разделить следующие 15 костей домино (возможно, перевернув некоторые из них) на три части по пять костей, чтобы суммы частей (рассмат- ривая кости как дроби) были одинаковы?
498 КОМБИНАТОРНЫЙ ПОИСК 7.2.1.6 Сократ. Подобно тому как в едином от природы человеческом теле имеется две одноименные части, лишь с обозначением “левая" или “правая” так обстоит дело и с состоянием безумия, которое обе наши речи признали составляющим в нас от природы единый вид, но одна речь выделила из него часть, обращенную налево, и не остановилась на этом делении, пока не нашла там некую так называемую левую любовь, которую вполне справедливо и осудила; другая же наша речь ведет нас к правой части неистовства, одноименной с первой, и находит там некую божественную любовь, которой отдает предпочтение, и восхваляет ее как причину величайших для нас благ. — ПЛАТОН, Федр (Ph?drus) 266А (ок. 370г. до н. Э.) 7.2.1.6. Генерация всех деревьев. К этому моменту мы уже завершили изу- чение классических концепций комбинаторики: кортежей, перестановок, сочетаний и разбиений. Однако информатика внесла свой вклад, добавив еще один фундамен- тальный класс к традиционному репертуару, а именно иерархические конструкции, известные как деревья. Деревья встречаются в информатике повсюду, как видно из раздела 2.3 и практически каждого из последующих разделов Искусства про- граммирования. Поэтому сейчас мы обратимся к изучению простых алгоритмов, с помощью которых можно исчерпывающе исследовать деревья различного вида. Сначала давайте рассмотрим фундаментальную связь между вложенными скоб- ками и лесами деревьев. Например, строка 12 3 4 Б 678 9а Ь cd a f (())((())((()(()))())(()(()))) 12 34 Б 6789а Ъ с d е f Qj LHJ I Ш |Г | I содержит 15 левых скобок ‘(’ с метками 1, 2, ..., f и 15 правых скобок также с метками от 1 до f. Серые линии под строками показывают, как соответствующие одна другой скобки образуют 15 пар: 12, 21, 3f, 44, 53, 6а, 78, 85, 97, аб, Ъ9, се, db, ed и f с. Эта строка соответствует лесу узлами которого в прямом порядке обхода являются @, (Я), (зг),..., (fc) (отсорти- рованные по первой координате) и (21), (12), (бз), ..., (3f) в обратном порядке обхода (отсортированные по второй координате). Если мы представим червяка, который
7.2.1.6 ГЕНЕРАЦИЯ ВСЕХ ДЕРЕВЬЕВ 499 проползает по краю леса и видит, проползая по левой дуге узла, открывающую (левую) скобку *(’, а про- ползая по правой—закрывающую (правую) скобку ‘)’, то его путь реконструирует исходную строку (1). Лес (2), в свою очередь, соответствует бинарному дереву (4) посредством “естественного соответствия’,’ рассмотренного в разделе 2.3.2; в данном случае список узлов в симметричном порядке обхода представляет собой (Я), (й), (вз), ..., Левое поддерево узла (х) в бинарном дереве—это крайний слева потомок (аГ) в лесу, или “внешний узел” □, если (х) не имеет потомков. Правое поддерево (х) в бинарном дереве представляет собой потомок правого “брата” в ле- су, или “внешний узел” □, если (х)—крайний справа потомок своего родителя. Корни деревьев в лесу рассматриваются как братья, и крайний слева корень в лесу является корнем бинарного дерева. Строка скобок щаг - - - а^п имеет корректную вложенность тогда и только тогда, когда она содержит п символов ‘(’ и п символов *)’, и k-Vi символ ‘(’ предшествует fc-му символу ‘) ’ для 1 < к < п. Простейший способ получить все строки вложенных скобок—посетить их в лексикографическом порядке. Далее приведен алгоритм, который рассматривает ‘)’ как лексикографически меньший символ по сравнению с и включает некоторые усовершенствования для повышения эффективности по сравнению с оригинальным алгоритмом И. Семба (I. Semba) [Inf. Processing Letters 12 (1981), 188-192]. Алгоритм P (Вложенные скобки в лексикографическом порядке). Для заданного целого числа п > 2 этот алгоритм генерирует все строки щаг... агп вложенных скобок. Р1. [Инициализация.] Установить a2k-i <— ‘С и аш <— ‘)’ для 1 < к < п; установить также ао «— *)’ и тп <— 2п — 1. (Мы используем ао в качестве ограничителя на шаге Р4.)
500 КОМБИНАТОРНЫЙ ПОИСК 7.2.1.6 Таблица 1 Вложенные скобки и сопутствующие объекты для п = 4 0102 ... 08 Лес Бинарное дерево Z1Z2Z3Z4 Р1Р2РЗР4 С1С2С3С4 Соответствие «ООО •••• 1111 1357 1234 0000 О ()()(()) ••1 1102 1356 1243 0001 ()(())() 1021 1347 1324 0010 О’ ()(()()) *л J^b 1012 1346 1342 ООП ()((())) • i 1003 1345 1432 0012 (())()() 1 •• 0211 1257 2134 0100 'G (())(()) 1 1 0202 1256 2143 0101 (()())() л • 0121 1247 2314 оно О (ООО) Ль 0112 1246 2341 0111 О (()(())) 0103 1245 2431 0112 ((()))() $ 0031 1237 3214 0120 ((())()) 0022 1236 3241 0121 ((()())) к 0013 1235 3421 0122 о (((()))) I 0004 1234 4321 0123 Р2. [Посещение.] Посетить строку вложенных скобок щаг ... а,2п- (В этот момент ат = ‘С и at = ‘)’ для т < к < 2п.) РЗ. [Простой случай?] Установить ат «— Затем, если am-i = установить am-i «— tn «— т — 1 и вернуться к шагу Р2. Р4. [Поиск j.] Установить j «— т — 1 и к «— 2п — 1. Пока aj — ‘С, устанавливать ц «— ‘) at <— ‘ С, j «— j' — 1 и к «— к — 2.
7.2.1.6 ГЕНЕРАЦИЯ ВСЕХ ДЕРЕВЬЕВ 501 Р5. [Увеличение а,.] Завершить алгоритм, если j = 0. В противном случае устано- вить aj «— ‘С, т «— 2п — 1 и вернуться к шагу Р2. | Позже мы увидим, что цикл на шаге Р4 почти всегда очень короткий: операция aj <— *)’ выполняется в среднем только около | раза на одно посещение строки. Почему работает алгоритм Р? Пусть Apq— последовательность всех строк а, содержащих р левых скобок и д > р правых скобок (причем строка (9-ра обладает корректной вложенностью), перечисленных в лексикографическом порядке. Тогда алгоритм Р обязан генерировать Апп, где, как легко видеть, Apq подчиняется ре- куррентному соотношению Apq = )Др(,_1), (Д(р_1)„ при0<р<д/0; Лоо = с; (5) кроме того, строка Лр<7 пуста при р < 0 или р > д. Первым элементом Apq является )«_Р() ... (), где имеется р пар ‘О’; последний элемент равен (р)9. Таким образом, процесс лексикографической генерации состоит из сканирования справа в поисках завершающей строки вида aj .. . О2П = ) (р+1)9 и замене ее строкой О’+1-₽() ...О. Шаги Р4 и Р5 эффективно выполняют данную задачу, а шаг РЗ предназначен для обработки простого случая р = 0. В табл. 1 проиллюстрирован выход алгоритма Р при п = 4 вместе с соответ- ствующими лесами и бинарными деревьями, как в (2) и (4). В таблице приведены и некоторые другие эквивалентные комбинаторные объекты. Например, строка вло- женных скобок может быть закодирована с применением кодирования длин серий как Odl()d2...()d", (6) где неотрицательные целые числа d\d2 .. - dn характеризуются ограничениями di + </2 Ч--F dk < к для 1 < fc < n; di + d^ Ч----F dn = п. (7) Вложенные скобки могут также быть представлены последовательностью Z1Z2 ... zn, которая определяет индексы появлений левых скобок. По сути, ziZ2...zn пред- ставляет собой одно из (2^) сочетаний п элементов из множества {1,2,...,2п}, отвечающих определенным ограничениям Zfc-i < zk < 2fc для 1 < к < п, (8) если считать, что zq = 0. Разумеется, все z связаны с d: dk = zk+i - zk - 1 для 1 < к < п. (9) Алгоритм Р становится особенно простым, если переписать его для генерации соче- таний Z1Z2 . . . Zn вместо строк 0102 -. О2п (см. упр. 2). Строка скобок может также быть представлена перестановкой pips -рп, где fc-я правая скобка соответствует Pfc-й левой скобке; другими словами, fc-й узел свя- занного леса в обратном порядке обхода является pt-м узлом в прямом порядке обхода. Согласно упр. 2.3.2-20 узел j является (истинным) потомком узла к в лесу тогда и только тогда, когда j < к и pj > рк, если помечать узлы в обратном порядке обхода. Таблица инверсий схсг .. - сп характеризует эту перестановку в соответствии с правилом, согласно которому справа от к имеется ровно ск элементов, меньших к
502 КОМБИНАТОРНЫЙ ПОИСК 7.2.1.6 (см. упр. 5.1.1-7); у допустимых таблиц инверсий ci = 0 и 0 < Cfc+i < cfc 4-1 для 1 < к < п. (10) Более того, в упр. 3 доказывается, что с& представляет собой уровень, на котором в лесу находится fc-й в прямом порядке обхода узел (глубина fc-й левой скобки); этот факт эквивалентен формуле ck = 2k — l — zk. (11) В табл. 1 и упр. 6 показан также специальный вид паросочетания, при котором 2п человек за круглым столом могут одновременно пожать друг другу руки, причем без перекрещивания. Таким образом, алгоритм Р может оказаться весьма полезным. Но если наша цель — генерация всех бинарных деревьев, представленных левыми связями lil-z . 1п и правыми связями Г1Г2 ... тп, то лексикографическая последовательность из табл. 1 весьма неудобна; данные, которые требуются для перехода от одного дерева к сле- дующему за ним, не будут легкодоступными. К счастью, имеется остроумный аль- тернативный алгоритм для непосредственной генерации всех связанных бинарных деревьев. Алгоритм В (Бинарные деревья). Для заданного п > 1 этот алгоритм генерирует все бинарные деревья с п внутренними узлами, представленными с помощью левых связей /1/2 и правых связей пгг . -. гп, с узлами, помеченными в прямом поряд- ке. (Таким образом, например, узел 1 всегда корневой, а 1к всегда равно либо к + 1, либо 0; если /1 — 0 и п > 1, то Ti = 2.) Bl. [Инициализация.] Установить 1к <— к + 1 и гк 0 для 1 < к < п; установить также 1п «— гп «— 0 и in+i <— 1 (для удобства на шаге ВЗ). В2. [Посещение.] Посетить бинарное дерево, представленное связями I1I2 ...In И Г1Г2...Г„. ВЗ. [Поиск j.] Установить j <— 1. Пока lj = 0, устанавливать <— 0, lj «— j + 1 и ji <— ji + 1. Затем завершить работу алгоритма, если j > п. В4. [Поиск к и у.] Установить у «— lj; и к «— 0. Пока ту > 0, устанавливать к «— у ну^Ту. В5. [Продвижение у.] Если к > 0, установить гк «— 0; в противном случае устано- вить lj <— 0. Затем установить ту «— Tj, rj*—yn вернуться к шагу В2. | [См. W. Skarbek, Theoretical Computer Science 57 (1988), 153-159; на шаге ВЗ ис- пользуется идея Д. Корша (J. Korsh).] В упр. 44 доказывается, что циклы на шагах ВЗ и В4 обычно достаточно коротки. Фактически в среднем требуется менее девяти обращений к памяти для преобразования связного бинарного дерева в следующее за ним. В табл. 2 показаны 14 бинарных деревьев, сгенерированных при п = 4, вместе с соответствующими лесами и двумя связанными с ними последовательностями — массивами 6162... еп и S1S2 - - sn, которые определяются тем свойством, что узел к в прямом порядке обхода имеет ек дочерних узлов и зк потомков в связанном лесу. (Таким образом, зк—размер fc-ro левого поддерева в бинарном дереве, а зк + 1—величина поля SCOPE в смысле 2.3.3-(5).) В следующем столбце 14 лесов из табл. 1 повторяются в лексикографическом порядке алгоритма Р, но зеркально
7.2.1.6 ГЕНЕРАЦИЯ ВСЕХ ДЕРЕВЬЕВ 503 Таблица 2 Связанные бинарные деревья и сопутствующие объекты при п = 4 /1/2/3/4 7*1 Т2 ТЗ Г 4 Бинарное дерево Лес е1егезе4 S1S2S3S4 Солексный лес Левый брат/пра- вый потомок 2340 0000 | 1110 3210 • • • • <^^Х 0340 2000 • i ОНО 0210 1 •• с/Ох 2040 0300 2010 ЗОЮ • 1 • 2040 3000 I I 1010 1010 Л • j^X 0040 2300 •• 1 0010 0010 i • j^b^b 2300 0040 A 1200 3200 •• 1 0300 2040 • л 0200 0200 I I j£j^b 2300 0400 2100 3100 • Л 2300 4000 i • 1100 2100 Л. ^x^3 0300 2400 • 1 • 0100 0100 2000 0340 Л. 3000 3000 2000 4300 j^x л • 2000 2000 2000 3040 1 •• 1000 1000 Л ^b^ 0000 2340 • • • • 0000 0000 1 jCb отраженными по вертикали. В последнем столбце показаны бинарные деревья, которые представляют солексный лес. Они также представляют лес из столбца 4, но с использованием связей с левым братом и правым потомком вместо левого потомка и правого брата. Последний столбец представляет интересную связь между вложенными скобками и бинарными деревьями, так что вносит определенный вклад в понимание того, почему корректно работает алгоритм В (см. упр. 19).
504 КОМБИНАТОРНЫЙ ПОИСК 7.2.1.6 *Коды Грея для деревьев. Наш предыдущий опыт работы с другими комбинатор- ными объектами говорит нам, что, вероятно, мы можем генерировать строки скобок и деревья путем минимальных изменений между соседними экземплярами. И дей- ствительно, существует как минимум три очень красивых способа добиться постав- ленной цели. Рассмотрим сначала случай вложенных скобок, которые могут быть представ- лены последовательностью ziZ2-..zn, удовлетворяющей условию (8). “Близкий к идеальному” способ генерации всех таких сочетаний в смысле раздела 7.2.1.3 пред- ставляет собой метод, при котором мы проходим по всем возможным этапам так, что на каждом шаге изменяется только один компонент Zj, причем его изменение равно ±1 или ±2; это означает, что из каждой строки скобок мы получаем следующую за ней путем простых изменений — либо () ♦-> )(, либо ()) ♦-»))( вблизи j-й левой скобки. Вот один из вариантов для п = 4: 1357,1356,1346,1345,1347,1247,1245,1246,1236,1234,1235,1237,1257,1256. Любое решение для п — 1 можно расширить для случая п, беря каждый шаблон Z1Z2 • zn-i и позволяя zn пройти по всем допустимым значениям с использованием чун-порядка (endo-order) или обратного к нему (см. 7.2.1.3-(45)), двигаясь вниз от 2п—2, а затем вверх до 2п—1 (или наоборот) и опуская все элементы, которые < zn-i Алгоритм N (Вложенные скобки, близкие к идеальным). Этот алгоритм посещает все n-сочетания zi... zn элементов {1,..., 2п}, которые представляют собой индексы левых скобок в строке вложенных скобок, подчиняющиеся условию изменения ин- дексов по одному. Процессом управляет вспомогательный массив gi ...дп, который представляет временные цели алгоритма. N1. [Инициализация.] Установить Zj <— 2j — 1 и gj <— 2j — 2 для 1 < j < п. N2. [Посещение.] Посетить n-сочетание zi... zn. Затем установить j <— п. N3. [Поиск j.] Если Zj = gj, установить gj <— gj ф 1 (тем самым обращая младший бит), j <— j — 1 и повторить этот шаг. N4. [Финишная прямая?] Если gj — Zj четно, установить Zj <— zj + 2 и вернуться к шагу N2. N5. [Уменьшение.] Установить t«— Zj — 2. Если t < 0, завершить работу алгоритма. В противном случае при t < Zj~i, установить t <— t + 2[t < Zj~i] + 1. Наконец установить Zj <— t и вернуться к шагу N2. | [Похожий алгоритм был описан в работе D. R?lants van Baronaigien, J. Algorithms 35 (2000), 100-107; см. также Xiang, Ushijima, and Tang, Inf. Proc. Letters 76 (2000), 169-174. Ф. Раски (F. Ruskey) и А. Проскуровски (A. Proskurowski) ранее в J. Al- gorithms 11 (1990), 68-84, показали, как построить идеальные коды Грея для всех таблиц zx... zn для четных п > 4 таким образом, чтобы на каждом шаге изменялось на ±1 только одно значение Zj; однако их построение весьма сложное, и неизвестна ни одна идеальная схема, достаточно простая для практического использования. В упр. 48 показано, что идеальная схема невозможна для нечетных п > 5.] Если наша цель состоит в генерации связанных древовидных структур, а не строк скобок, “идеальности” с точки зрения изменений z-индексов недостаточно,
7.2.1.6 ГЕНЕРАЦИЯ ВСЕХ ДЕРЕВЬЕВ 505 поскольку простые обмены наподобие () ♦-> )( не обязательно соответствуют про- стым действиям со связями. Существенно лучший подход может быть основан на алгоритмах “поворотов” с помощью которых мы поддерживали сбалансированность таким образом, соответствующий лес изменяется “Узел (д) становится крайним слева дочерним узлом своего правого брата” Поворот вправо, конечно же, представляет собой обратное преобразование: “крайний слева дочерний узел узла (в) становится его левым братом” Вертикальная линия на рисунках (12) означает соединение с общим контекстом — левую или правую связь либо указатель на корень. Любое из поддеревьев а, р или w может быть пустым. Троеточие ‘ ’ в (13), представляющее дополнительных братьев в левой части семейства, содержащего (S), также может быть пустым. Приятная информация о поворотах заключается в том, что при этом изменя- ются только три связи: правая связь из (д), левая связь из (в) и указатель сверху. Повороты сохраняют порядок симметричного обхода бинарного дерева и обратный порядок обхода леса. (Заметим также, что повороты бинарного дерева естественным образом соответствуют применению ассоциативного закона (ар)и> = а(рш) (14) в алгебраической формуле.) Для генерации всех бинарных деревьев или лесов посредством поворотов можно воспользоваться простой схемой, очень похожей на классический рефлексивный код Грея для n-кортежей (алгоритм 7.2.1.1Н) и метод простых изменений для переста- новок (алгоритм 7.2.1.2Р). Рассмотрим лес из п — 1 узлов с к корнями (Я1), ..., ^*). В таком случае существует к + 1 лесов из п узлов, которые имеют одну и ту же последовательность первых п — 1 узлов в обратном порядке обхода, но с последней вершиной (п); например, при к = 3 это полученные последовательными поворотами (Аз), Qh) и (Ар влево. Кроме того, в крайних случаях, когда (п) находится либо справа, либо вверху, можно выполнить
506 КОМБИНАТОРНЫЙ ПОИСК 7.2.1.6 любой требующийся поворот над остальными п — 1 узлами, поскольку узел (п) не находится на указанном пути. Таким образом, как замечено в работе J. М. Lucas, D. R?lants van Baronaigien, and F. Ruskey, J. Algorithms 15 (1993), 343-366, можно расширить любой список (n — 1)-узловых деревьев до списка всех n-узловых дере- вьев, просто позволив узлу @ “прогуливаться” назад и вперед. Уделив внимание низкоуровневым деталям, можно выполнить указанную работу с замечательной эффективностью. Алгоритм L (Генерация связанных бинарных деревьев путем поворотов). Этот алгоритм генерирует все пары массивов IqIi - 1п и П ... гп, представляющих левые и правые связи n-узловых бинарных деревьев, где Iq является корнем дерева, а связи (Iki'i'k) указывают соответственно на левое и правое поддеревья к-го в симметрич- ном порядке обхода узла. Каждое дерево получается из предшественника путем простого поворота. Для управления процессом используются два вспомогательных массива, fci... кп и oqOi ... оп, представляющие обратные указатели и направления. L1. [Инициализация.] Установить lj «— 0, «— j + 1, kj «— j — 1 и Oj <-1 для 1 < J < п; установить также Iq «— oq «— 1, ln «— rn «— 0, kn «— n — 1 и on <-1. L2. [Посещение.] Посетить бинарное дерево (или лес), представленное массивами foG - - • 1п и и ... гп. Затем установить j <— п и р <— 0. L3. [Поиск j.] Если Oj > 0, установить т «— lj и перейти к шагу L5, если т / 0. Если < 0, установить т «— kj', затем перейти к шагу L4, если т / 0, в противном случае установить р *— j. Если т = 0, в любом случае установить Oj <-------------Oj, j «— j — 1 и повторить этот шаг. L4. [Поворот влево.] Установить rm <— lj, lj <— тп, х *— кт и kj «— х. Если х = 0, установить lp <— j, в противном случае установить гх *— j. Вернуться к шагу L2. L5. [Поворот вправо.] Завершить работу алгоритма, если j = 0. В противном случае установить lj <— гт, тт <— J, kj «— т, х <— кт. Если х = 0, установить 1Р «— т, в противном случае установить гх «— т. Вернуться к шагу L2. | В упр. 38 доказывается, что алгоритм L требует только около девяти обращений к памяти на генерацию одного дерева; таким образом, он почти такой же быстрый, как и алгоритм В. (Фактически можно сэкономить два обращения к памяти на шаг, если хранить значения оп, 1п и кп в регистрах. Но, конечно же, точно так можно ускорить и алгоритм В.) В табл. 3 показана последовательность бинарных деревьев и лесов, посещенных алгоритмом L при п = 4, с некоторыми вспомогательными данными, способствую- щими дальнейшему пониманию процесса. Перестановка <71<72<73<74 перечисляет узлы в прямом порядке обхода, при том что они пронумерованы в обратном порядке обхода в лесу (в симметричном порядке в бинарном дереве); обратной к данной перестановке является перестановка Р1Р2Р3Р4 из табл. 1. “Со-лес” представляет собой сопряжение (отражение слева направо) леса; а числа U1U2U3U4 аналогичны числам Si егS384 из табл. 2. В последнем столбце показан так называемый “дуальный лес” Важность всех этих величин поясняется в упр. 11-13, 19, 24, 26 и 27. Связи 1о1\...1п и Г1...гп в алгоритме L и табл. 3 не сравнимы со связями 11... 1п и Г1... гп из алгоритма В и табл. 2, поскольку алгоритм L сохраняет сим- метричный/обратный порядок обхода, в то время как алгоритм В сохраняет прямой
7.2.1.6 ГЕНЕРАЦИЯ ВСЕХ ДЕРЕВЬЕВ 507 Таблица 3 Бинарные деревья и леса, сгенерированные с помощью поворотов для п = 4 Z0Z1Z2Z3Z4 Г1Г2ГЗГ4 Бинарное дерево Лес 91929394 Co-лес U1U2U3U4 Дуальный лес 10000 2340 0123 • • • • 1234 • • • • 0000 | 10003 2400 0122 •• I 1243 1 •• 1000 Л 10002 4300 0121 • Л 1423 Л • 2000 40001 2300 0120 Л. 4123 Л. 3000 • i 40021 3000 ОНО 4132 3100 • Л 10023 4000 0111 * i 1432 2100 л. 10020 3040 0113 • X • 1324 * 1 * 0100 30010 2040 0103 Л • 3124 • Л 0200 I I 40013 2000 0100 A 4312 A 3200 •• 1 40123 0000 0000 1 4321 1 3210 • • • • 30120 0040 0003 i • 3214 • i 0210 1 •• 20100 0340 0023 1 •• 2134 •• 1 0010 J 20103 0400 0022 I I 2143 I I 1010 Л • 40102 0300 0020 4213 3010 • 1 • порядок обхода. Узел к в алгоритме L представляет собой fc-й узел слева направо в бинарном дереве, так что для идентификации корня требуется значение Zo; но в алгоритме В узел к является fc-м узлом в прямом порядке обхода, так что в этом случае корнем всегда является узел 1. Алгоритм L обладает тем интересующим нас свойством, что на каждом шаге изменяются только три связи; но в действительности в этом отношении его можно улучшить, если придерживаться соглашения о прямом порядке обхода из алгорит-
508 КОМБИНАТОРНЫЙ поиск 7.2.1.6 ма В. В упр. 25 представлен алгоритм, который генерирует все связанные деревья или леса путем изменения на каждом шаге только двух связей, сохраняя прямой порядок обхода. Одна связь становится нулевой, в то время как вторая—ненулевой. Этот алгоритм “обрезки и прививки” последний из трех обещанных “красивых алгоритмов для кодов Грея” имеет единственный недостаток: его управляющий механизм существенно сложнее, чем у алгоритма L, так что ему требуется примерно на 40% больше времени на вычисления. Количество деревьев. Существует простая формула для общего количества ге- нерируемых алгоритмами Р, В, N и L деревьев, а именно Cn = 2\); (15) п + 1\п/ \п/ \п—1/ этот факт был доказан в 2.3.4.4-(14). Первыми несколькими значениями являются п=01234567 8 9 10 11 12 13 Сп = 1 1 2 5 14 42 132 429 1430 4862 16796 58786 208012 742900 Они называются числами Каталана по имени Эжена Каталана (Eugene Catalan), который написал о них несколько важных статей [Journal de math. 3 (1838), 508-516; 4 (1839), 95-99]. Приближение Стирлинга дает нам асимптотическое значение 9 145 1155 36939 8тг + 128тг2 1024тг3 + 32768тг4 + в частности, можно заключить, что (16) Сп-к 1 Л 3fc ~/k2\\ ... п ~сГ = jK1 + 2S + oG?)) np"|l:|S2' <17) (Само собой, Cn-i/Cn в точности равно (тг + 1)/(4п — 2) согласно формуле (15).) В разделе 2.3.4.4 была также выведена производящая функция . *> о 1 у/1 4z C(z) = Со + Ciz + 4-C3Z + •• = ------------ и доказана важная формула г 71 + Г 2п + г — 1\ _ /2тг + г —1\ /2тг + г—1\ 71 / \ 71 / \ 71 — 1 /’ (18) (19) см. ответ к упр. 2.3.4.4-33 и уравнение (5.70) в CMath. Эти факты дают нам более чем достаточно информации для анализа алго- ритма Р для лексикографической генерации вложенных скобок. Очевидно, что шаг Р2 выполняется Сп раз; затем шаг РЗ чаще всего вносит простое изменение и возвращается к шагу Р2. Как часто происходит переход к шагу Р4? На этот вопрос легко дать ответ: это количество раз, когда на шаге Р2 тп = 2тг—1. Атп — это положение крайней справа скобки ‘С, так что m = 2тг — 1 выполняется ровно Cn-i раз. Таким образом, вероятность того, что на шаге РЗ устанавливается т «— т — 1 и происходит возврат к шагу Р2, равна (Сп—Сп-±)/Сп » 3/4 согласно формуле (17). С другой стороны, пусть при переходе к шагу Р4 нам нужно установить а^ «— ')’ и at «— ‘С на этом шаге ровно h — 1 раз. Количество случаев, когда h > х, равно количеству вложенных строк длиной 2п, заканчивающихся тривиальными парами
7.2.1.6 ГЕНЕРАЦИЯ ВСЕХ ДЕРЕВЬЕВ 509 ()...() в количестве х штук, а именно Сп-Х. Таким образом, общее количество изменений aj и at на шаге Р4 с учетом (17) составляет Сп-1 + Сп-2 4-h Ci = Сп f 2 4---F — \ On On / = 1Ч1+!+сО; <20) итак, сделанное ранее утверждение об эффективности алгоритма доказано. Более глубокому пониманию способствует изучение рекурсивной структуры (5), лежащей в основе алгоритма Р. Последовательности Ард в этой формуле имеют Cpq элементов, где Ср, = Ср(,-1) 4- С(Р_!), при 0 < р < q / 0; Соо = 1; (21) а при р < 0 или р > q значение Срд — 0. Так можно сформировать следующий треугольный массив. Соо 1 Сох Си 1 1 Со2 С12 С22 12 2 Соз С1з С23 С33 1 3 5 5 (22) С04 С14 С24 С34 С44 14 9 14 14 Соб С15 С25 С35 С45 С55 1 5 14 28 42 42 Сое С16 С26 С36 Сю С56 Сбб 1 6 20 48 90 132 132 Каждый его элемент представляет собой сумму ближайших соседей сверху и слева; на диагонали в нем находятся числа Каталана Сп = Спп. Элементы этого треуголь- ника имеют древнее происхождение, ведущее отсчет от работы де Муавра (de Moivre) 1711 года, и называются баллотировочными числами (ballot numbers), поскольку представляют последовательности р 4- q бюллетеней, для которых подсчет голосов ни в какой момент не покажет перевеса кандидата с р голосами над оппонентом с q голосами. Общую формулу _ д-р+1 (р+д\ _ (p + q\ _ (p + q\ рч q + 1 \ р ) \ р J kp-1) ( 3) можно доказать как по индукции, так и многими другими способами (см. упр. 39 и ответ к упр. 2.2.1-4). Заметим, что согласно (19) Ср, = ИС(г)’-”+1. (24) При п = 4 алгоритм Р, по сути, описывает дерево рекурсии Gz бз) фу © фр © ф§) фр © фр © (© фТГ"© фЗ)@ поскольку из спецификации (5) вытекает, что Апп — ( A(n-i)n и что Ар, = )9-р(А(р_1)р, )9-р-1(А(р_1)(р+1), )’-р-2(А(р_1)(р+2), ..., (A(p-i), при 0 <р < q. (26)
510 КОМБИНАТОРНЫЙ ПОИСК 7.2.1.6 Количество листьев ниже узла @) в этом дереве рекурсии равно Си, а узел @) встречается на уровне п— 1 — р ровно C(n—q)(n-i-p) раз; таким образом, мы должны получить C(n—q)(n— 1— р) Срд = Сп ДЛЯ 0 < р < П. (27) я Четырнадцать листьев (25) слева направо соответствуют четырнадцати строкам табл. 1 сверху вниз. Заметим, что записи в столбце C1C2C3C4 этой таблицы назначают листьям дерева (25) числа 0000, 0001, 0010, ..., 0123 в соответствии с “десятичной записью Дьюи” для узлов дерева (но с индексами, начинающимися с нуля, а не с единицы, и с дополнительным нулем в начале). Червяк, который ползет от одного листа к следующему по низу дерева рекурсии, будет подниматься и опускаться на h уровней при изменении h координат ci.. .Сп, т. е. когда алгоритм Р сбрасывает значения h и h Это наблюдение облегчает понимание предыдущего вывода о том, что условие h> х выполняется ровно Сп-Х раз в процессе движения червяка. Еще один способ понимания алгоритма Р возникает при рассмотрении беско- нечного ориентированного графа, определяемого рекурсией (21). Очевидно, что в силу (21) представляет собой количество путей в этом ори- ентированном графе от @) к (00). И в самом деле, каждая строка скобок в Apq непосредственно соответствует такому пути, где ‘С означает шаг влево, а “)’ — шаг вверх. Алгоритм Р систематически исследует все такие пути, пытаясь при продолжении частичного пути сначала перейти вверх. Таким образом, легко определить N-ю строку вложенных скобок, посещаемую алгоритмом Р, начиная с узла @) и выполняя следующее, находясь в узле @): если р = q = 0, завершить работу; в противном случае, если N < Cp(g_ij, вывести *)’, установить q «— q — 1 и продолжить работу; в противном случае установить N «— N — Cp(g_i), вывести ‘(’, установить р «— р — 1 и продолжить работу. Приведенный далее алгоритм [Frank Ruskey, Ph.D. thesis (University of California at San Diego, 1978), 16-24] избегает предвычисления треугольника Каталана путем вычисления Срд “на лету” Алгоритм U {Строка вложенных скобок по ее рангу). Для заданных п и N, где 1 < N < Сп, данный алгоритм вычисляет N-ik вывод а^...агп алгоритма Р. U1. [Инициализация.] Установить q *— пит*— р *— с «— 1. Пока р < п, устанавливать р *— р 4-1 и с «— ((4р — 2)с)/(р + 1). U2. [Выполнено?] Завершить работу алгоритма, если q = 0.
7.2.1.6 ГЕНЕРАЦИЯ ВСЕХ ДЕРЕВЬЕВ 511 U3. [Вверх?] Установить «—((</ + 1)(<7 — р)с)/((<7 + p)(q — р + 1)). (В этот момент 1 < N < с = Cpq и d = Cp(g_i).) Если N < d, установить q «— q — 1, с <— d, ат «— , т.«— т + 1 и вернуться к шагу U2. U4. [Влево.] Установить р «— р— 1, с «— с — d, N *— N — d, ат <— ‘С, т <— т + 1 и вернуться к шагу U3. | Случайные деревья. Строку вложенных скобок (цаг-.-агп можно получить случайным образом, просто применив алгоритм U к случайному целому числу N между 1 и Сп. Однако эта идея не слишком хороша при п, превышающем 32 или около того, поскольку Сп может быть очень большим. Более простой и лучший способ предложен в работе D. В. Arnold and М. R. Sleep, ACM Trans. Prog. Languages and Systems 2 (1980), 122-128, и заключается в генерации случайного “путешествия червяка” начиная с узла @) в графе (28) и выполняя ветвления влево и вверх с со- ответствующими вероятностями. Полученный алгоритм практически такой же, как и алгоритм U, но работает только с неотрицательными целыми числами, меньшими п2 + п + 1. Алгоритм W (Равномерно распределенные случайные строки вложенных скобок). Этот алгоритм генерирует случайную строку щвг ... агп корректно вложенных ско- бок ( и ). W1. [Инициализация.] Установить р<—пит«—1. W2. [Выполнено?] Завершить работу алгоритма, если q = 0. W3. [Вверх?] Пусть X—случайное целое число в диапазоне 0 < X < (q+p)(q—р+1). Если X < (q + l)(q—p), установить q <— q — 1, ат «— т*— т+1и вернуться к шагу W2. W4. [Влево.] Установить р <— р— 1, ат «— ‘(’, гп «— т+1, и вернуться к шагу W3. | Путь червяка можно рассматривать как последовательность wqWi ... W2n, где wm — текущая глубина червяка после т шагов. Таким образом, Wq = 0; wm — wm-i + 1, если ат = ‘С; и wm = wm-i — 1, если ат = а кроме того, wm > 0, n>2n = 0. Последовательность wqWi ... W30, соответствующая (1) и (2), представляет собой 0121012321234345432321232343210. На шаге W3 алгоритма W имеем q -I- р = 2п + 1 — т и q — р = wm-i. Назовем контуром (outline) леса путь, который проходит через точки плоскости (т, — wm), где 0 < т < 2п, a Wou>i...W2n— маршрут червяка, соответствующий связанной строке ai...а2п вложенных скобок. На рис.57 показано, что будет, если мы изобразим контуры всех 50-узловых лесов, причем степень затенения каждой точки соответствует количеству лесов, лежащих над ней. Например, wi всегда равно единице, так что треугольная область вверху слева на рис. 57 имеет макси- мально черный цвет. W2 может принимать значения 0 или 2, причем 0 встречается в С49 ~ С50/4 случаях; так что соответствующая ромбовидная область леса затенена на 75%. Таким образом, рис. 57 иллюстрирует форму случайного леса, аналогичную формам случайных разбиений, которые мы видели на рис. 50, 51 и 55 разделов 7.2.1.4 и 7.2.1.5. Конечно, в действительности мы не в состоянии изобразить контуры всех этих лесов, поскольку их общее количество—С5о = 1978261657756160653623774456. Но с помощью математики можно имитировать такое действие. Вероятность того,
512 КОМБИНАТОРНЫЙ ПОИСК 7.2.1.6 Рис. 57. Форма случайного 50-узлового леса. Рис. 58. Положение внутренних узлов случайного 50-узлового бинарного дерева. что w2m = 2к, составляет C(rn_fc)(rn+fc)C(n_rn_fc)(n_rn+fc)/Cn, поскольку всего имеется C(m-fc)(m+fc) способов начать с т + к левых скобок ‘(’ и т — к правых скобок *)’ и С^п-щ-Щп-т+к) способов закончить п— (т + к) левыми скобками ‘(’ и п — (т — к) правыми скобками *)’- С использованием формулы (23) и приближения Стирлинга получаем, что эта вероятность равна (2fc + l)2(n -I-1) / 2т \ / 2п — 2т \ //2п (т + к + 1)(п — т + к + 1) \т — к) \п — т+ к)/ \ п (2к + I)2 y/ir (0(1 — 0)п)3/2 e-^W1-e}n) (1 + о( Ь+1 \ + о(^)) \ \ п / \nz / / (29) где т = Оп и п —» оо для 0 < 0 < 1. Среднее значение w2m выводится в упр. 57; оно равно и показано для п = 50 на рис. 57 в виде кривой. Когда п велико, маршрут червяка приближается к так называемому броунов- скому движению, представляющему собой важную концепцию в теории вероятно-
7.2.1.6 ГЕНЕРАЦИЯ ВСЕХ ДЕРЕВЬЕВ 513 Рис. 59. Положение внешних узлов случайного 50-узлового бинарного дерева. стей. См., например, Paul Levy, Processus Stochastiques et Mouvement Brownien (1948), 225-237; Guy Louchard, J. Applied Prob. 21 (1984), 479 499, и BIT 26 (1986), 17-34; David Aldous, Electronic Communications in Probability 3 (1998), 79-90; Jon Warren, Electronic Communications in Probability 4 (1999), 25-29; J.-F. Marckert, Random Structures & Algorithms 24 (2004), 118-132. Какой вид имеет случайное бинарное дерево? Этот вопрос был исследован Фрэнком Раски (Frank Ruskey) в SIAM J. Algebraic and Discrete Methods 1 (1980), 43-50, и ответ на него достаточно интересен. Предположим, что мы изобразили бинарное дерево, как в (4), с т-м внутренним узлом в горизонтальной позиции т, где узлы пронумерованы в симметричном порядке обхода. Если изобразить все 50-узловые бинарные деревья таким образом и наложить их одно на другое, то получится распределение положений узлов, показанное на рис. 58. Аналогично, если пронумеровать внешние узлы от 0 до п в симметричном порядке обхода и разместить их в горизонтальных позициях .5, 1.5, ..., п + .5, то “бахрома” от всех 50-узловых деревьев образует распределение, показанное на рис. 59. Обратите внимание, что корневой узел с наибольшей вероятностью имеет номер 1 или п, становясь крайним слева или справа; менее всего вероятно, что он находится посредине, в позиции [(n + 1)/2J или |"(п + 1)/2]. Как и на рис. 57, гладкие кривые на рис. 58 и 59 показывают среднюю глубину узла; точные формулы выводятся в упр. 58 и 59. Асимптотически средняя глубина внешнего узла т равна /£(1—0)п _ j + £)/_кЛ ПрИ т — @п и п _> оо (31) V тг \>JnJ для всех фиксированных отношений 0 < в < 1, что удивительно похоже на фор- мулу (30); средняя глубина внутреннего узла т асимптотически та же, но с ‘—1’, замененным на ‘—3’. Таким образом, можно сказать, что в среднем форма бинарного 17 Зак. 3331
514 КОМБИНАТОРНЫЙ ПОИСК 7.2.1.6 дерева приближенно представляет собой нижнюю половину эллипса шириной п единиц и глубиной 4^/п/тг уровней. Три других заслуживающих упоминания способа генерации случайных закоди- рованных лесов рассматриваются в упр. 60-62. Они менее непосредственны, чем алгоритм W, но представляют собой значительный комбинаторный интерес. Пер- вый начинается с произвольной случайной строки, содержащей п левых скобок ‘С и п правых скобок *)’, не обязательно вложенных; каждая из (2^) возможных строк равновероятна. Затем строка обрабатывается для преобразования в последователь- ность корректно вложенных скобок таким образом, что к каждому окончательному результату приводят ровно п + 1 исходных строк. Второй метод аналогичен, но начинается с последовательности n+1 нулей и п двоек, отображая их таким образом, что к каждому конечному результату приводят ровно 2n+1 исходных строк. Третий метод дает конечный результат ровно из п битовых строк, содержащих n— 1 единиц и n -I-1 нулей. Другими словами, эти три метода предоставляют комбинаторное до- казательство того, что Сп одновременно равно (^/(n+l), (2nn*’1)/(27i-l-l) и (n-i)/n- Например, при п = 4 мы получаем 14 = 70/5 = 126/9 = 56/4. Если мы хотим генерировать случайные бинарные деревья непосредственно в связанном виде, можно воспользоваться красивым методом, предложенным Ж.-Л. Реми (J.-L. Remy) [RA1RO Informatique Theorique 19 (1985), 179-195]. Его подход особенно поучителен, поскольку показывает, как случайные деревья Ката- лана могут возникнуть “в природе” с использованием удивительно простого ме- ханизма, основанного на классической идее Олинде Родригеса (Olinde Rodrigues) [J. de Math. 3 (1838), 549]. Предположим, что наша цель — получение не просто обычного n-узлового бинарного дерева, но декорированного бинарного дерева, т. е. расширенного бинарного дерева, в котором внешние узлы помечены числами от 0 до п в некотором порядке. Всего имеется (n+1)! способов декорировать любое заданное бинарное дерево; так что общее количество декорированных бинарных деревьев с п внутренними узлами составляет Dn = (п + 1)! Сп = = (4п - 2)Dn-i. п\ (32) Реми обнаружил, что существует 4п — 2 простых пути построения декориро- ванного дерева порядка п из данного декорированного дерева порядка п — 1: мы просто выбираем любой узел из 2п— 1 узлов (внутренних и внешних) данного дерева, скажем, узел х, и заменяем его либо на либо на (33) таким образом вставляя новый внутренний узел и новый лист, перемещая тем самым х вместе с его потомками (если таковые имеются) на один уровень вниз. Например, вот один из вариантов построения декорированного дерева поряд- ка 6:
7.2.1.6 ГЕНЕРАЦИЯ ВСЕХ ДЕРЕВЬЕВ 515 Обратите внимание, что каждое декорированное дерево получается с помощью дан- ного процесса единственным способом, поскольку предшественник каждого дерева должен быть деревом, которое получается путем вычеркивания листа с максималь- ным номером. Таким образом, построение Реми дает равномерно распределенные декорированные деревья; и если проигнорировать внешние узлы, то мы получим случайные бинарные деревья обычного, недекорированного, вида. Один привлекательный способ реализации процедуры Реми состоит в использо- вании таблицы связей LqLi ... Z,2n, в которой внешние узлы (листья) имеют четные номера, а внутренние (ветвления) — нечетные. Корневым является узел Lo', левым и правым дочерними узлами внутреннего узла 2к — 1 являются соответственно узлы Ь?к-1 и L2k Для 1 < к < п. В этом случае программа оказывается короткой и приятной. Алгоритм R (Растущее случайное бинарное дерево). Этот алгоритм строит пред- ставление с использованием связей LoLi... Z,2N (с указанными выше соглашениями) равномерно распределенного случайного дерева с N внутренними узлами. R1. [Инициализация.] Установить п <— 0 и Lo «— 0. R2. [Выполнено?] (В этот момент связи Lo^i • • • ^2п представляют собой случайное n-узловое бинарное дерево.) Завершить работу алгоритма, если п = N. R3. [Продвижение п.] Пусть X — случайное целое число от 0 до 4п+1 включитель- но. Установить п«— n+1, Ь«— Xmod2, к <— [X/2J, 1<2п-ь 2n, L2n-i+b *— Lk, Lk «— 2п — 1 и вернуться к шагу R2. | *Цепочки подмножеств. Теперь, когда мы прочно усвоили получение деревьев и строк скобок, самое время перейти к рассмотрению шаблона рождественской елки* который представляет собой замечательный способ размещения всех 2” би- товых строк длиной п в (|п/2|) строках ип+1 столбцах, открытый Н. Г. де Брейном (N. G. deBruijn), К. ванЭббенхорст Тенгберген (С. vanEbbenhorst Tengbergen) и Д. Круйсвейком (D. Kruyswijk) [ZVieuw Archief voor Wiskunde (2) 23 (1951), 191-193]. Шаблон рождественской елки порядка 1 представляет собой единственную стро- ку ‘0 1’; шаблон порядка 2 имеет вид 10 (35) 00 01 11 ’ В общем случае шаблон рождественской елки порядка п +1 получается, если взять каждую строку ‘<71 <7г ... <7в’ шаблона рождественской елки порядка п и заменить ее двумя строками: <т20 ... <7в0 , . <710 <711 ... <7в_11 <7в1 W (При s=l первая из этих строк опускается.) Действуя таким образом, мы получим пример шаблона порядка 8, который приведен в табл. 4. По индукции легко убедиться в следующем: i) каждая из 2П битовых строк появляется в шаблоне ровно один раз; ii) битовые строки с к единицами находятся в одном и том же столбце; * Это название выбрано из сентиментальных соображений, поскольку внешний вид шаблона наг поминает елку, а кроме того, эта тема была предметом девятой ежегодной “лекции рождественской елки” автора в Стэнфордском университете в декабре 2002 года.
516 КОМБИНАТОРНЫЙ ПОИСК 7.2.1.6 Таблица 4 Шаблон рождественской елки порядка 8 10101010 10101000 10101001 10101011 10101100 10100100 10100101 10101101 10100010 10100110 10101110 10100000 10100001 10100011 10100111 10101111 10110010 10110000 10110001 10110011 10110100 10010100 10010101 10110101 10010010 10010110 10110110 10010000 10010001 10010011 10010111 10110111 10111000 10011000 10011001 10111001 10001010 10011010 10111010 10001000 10001001 10001011 10011011 10111011 10001100 10011100 10111100 10000100 10000101 10001101 10011101 10111101 10000010 10000110 10001110 10011110 10111110 10000000 10000001 10000011 10000111 10001111 10011111 10111111 11001010 11001000 11001001 11001011 11001100 11000100 11000101 11001101 11000010 11000110 11001110 11000000 11000001 11000011 11000111 11001111 11010010 11010000 11010001 11010011 11010100 01010100 01010101 11010101 01010010 01010110 11010110 01010000 01010001 01010011 01010111 11010111 11011000 01011000 01011001 11011001 01001010 01011010 ноною 01001000 01001001 01001011 01011011 11011011 01001100 01011100 11011100 01000100 01000101 01001101 01011101 11011101 01000010 01000110 01001110 01011110 11011110 01000000 01000001 01000011 01000111 01001111 01011111 11011111 11100010 11100000 11100001 11100011 11100100 01100100 01100101 11100101 01100010 01100110 11100110 01100000 01100001 01100011 01100111 11100111 11101000 01101000 01101001 11101001 00101010 01101010 11101010 00101000 00101001 00101011 01101011 11101011 00101100 01101100 11101100 00100100 00100101 00101101 01101101 11101101 00100010 00100110 00101110 01101110 11101110 00100000 00100001 00100011 00100111 00101111 01101111 июни 11110000 01110000 01110001 11110001 00110010 01110010 11110010 00110000 00110001 00110011 01110011 11110011 00110100 01110100 11110100 00010100 00010101 00110101 01110101 11110101 00010010 00010110 00110110 01110110 11110110 00010000 00010001 00010011 00010111 00110111 01110111 11110111 00111000 01111000 11111000 00011000 00011001 00111001 01111001 11111001 00001010 00011010 00111010 01111010 11111010 00001000 00001001 00001011 00011011 00111011 01111011 11111011 00001100 00011100 00111100 01111100 11111100 00000100 00000101 00001101 00011101 00111101 01111101 11111101 00000010 00000110 00001110 00011110 00111110 01111110 11111110 00000000 00000001 00000011 00000111 00001111 00011111 00111111 01111111 11111111
7.2.1.6 ГЕНЕРАЦИЯ ВСЕХ ДЕРЕВЬЕВ 517 iii) в пределах каждой строки каждая битовая строка получается из предыдущей путем единственного изменения нуля на единицу. Если рассматривать битовые строки как представляющие подмножества множе- ства {1,..., п}, где единичные биты указывают члены множества, то свойство (iii) гласит, что каждая строка представляет цепочку, в которой каждое подмножество покрывается следующим за ним. В символьном виде с применением обозначений из раздела 7.1.3 можно записать: каждая строкаoi о? оа обладает тем свойством, что Oj С Oj+i и v(oj+i) = v(oj) + 1 при 1 < j < s. Свойства (i) и (ii) говорят о том, что если пронумеровать столбцы от 0 до п, то в столбце к будет находиться ровно (£) элементов. Это наблюдение вместе с тем фактом, что каждая строка отцентрирована по столбцам, доказывает, что общее количество строк, как и утверждалось, равно maxo<fc<n (£) = (|n/2j)- Обозначим эту величину как Мп. Множество битовых строк С называется клоттером (clutter),* или антицепоч- кой подмножеств, если его битовые строки несравнимы в том смысле, что о £ г, когда стит являются различными элементами С. Знаменитая теорема Эмануэля Спернера (Emanuel Sperner) [Math. Zeitscbrift 27 (1928), 544-548] утверждает, что ни один клаттер на множестве {1,...,п} не может иметь более чем Мп элементов; шаблон рождественской елки предоставляет простое доказательство, поскольку ни один клаттер не может содержать более одного элемента из каждой строки. На самом деле шаблон рождественской елки можно использовать для того, чтобы доказать существенно большее. Сначала заметим, что имеется ровно (£) — (fc-i) СтРок длиной п+1 — 2k при 0 < к < п/2, поскольку в столбце к ровно (£) элементов. Например, в табл. 4 имеется одна строка длиной 9, а именно нижняя; в этой таблице также (®) — = 7 строк длиной 7, (®) — (®) = 20 строк длиной 5, (з) — (2) = 2® строк длиной 3 и (®) — (|) = 14 строк длиной 1. Кроме того, эти числа (fc) — (fc—1) появляются в треугольнике Каталана (22), поскольку они равны Сь(п-к) в соответствии с формулой (23). Дальнейшее изучение показывает, что эта связь с числами Каталана—не про- стое совпадение; ключом к более глубокому пониманию шаблона рождественской елки являются вложенные скобки, потому что теория скобок говорит нам, где в мас- сиве располагается произвольная битовая строка. Предположим, что вместо еди- ницы и нуля мы используем символы ( и ) соответственно. Любая строка скобок, вложенных или нет, может быть записана единственным способом в виде ОГО ) • • • Otp—1 ) Otp . . . (Од (37) для некоторых р и д (0 < р < д), где подстроки о®, ..., ад — корректно вложенные (возможно, пустые). Ровно р правых скобок и д — р левых скобок “свободны” в том смысле, что не имеют соответствующей пары. Например, у строки )(())())())))(((((()(()()((()) (з8) р = 5, д = 12, ао = е, <*i = (())(), а2 = О, <*з = е, •, «12 = (О)- В общем случае строка (37) является частью цепочки длиной д -I-1, Ого ) • • • <*<7-1 ) Ctg, Оо ) - - - <*д—2 ) <*д-1 (<*<7, • • ч <*0 (<*1 • • (<*<7, (39) Дословно — “беспорядком” — Примеч. пер.
518 КОМБИНАТОРНЫЙ ПОИСК 7.2.1.6 которая начинается с q свободных правых скобок ) и заменяет их по одной свободны- ми левыми скобками (. Каждая строка шаблона рождественской елки получается точно таким же способом, но с использованием единицы и нуля вместо ( и ); если цепочка cti ... а3 соответствует строкам вложенных скобок ао, - - •, ав_1, то следу- ющие за ней цепочки в (36) соответствуют строкам ао, ..., ав_з, ав_г (aa_i) и ао, ..., ав_з, ae_2, ae_i, е соответственно. [См. Curtis Greene and Daniel J. Kleitman, J. Combinatorial Theory A20 (1976), 80-88.] Обратите также внимание, что крайние справа элементы в каждой строке шаб- лона, такие, как 10101010, 10101011, 10101100, 10101101, ..., 11111110, 11111111 в случае п - 8, находятся в лексикографическом порядке. Таким образом, напри- мер, четырнадцать строк длиной 1 в табл. 4 в точности соответствуют четырнадцати строкам вложенных скобок в табл. 1. Это наблюдение позволяет легко генерировать строки табл. 4 последовательно, снизу вверх, с помощью метода, аналогичного алгоритму Р; см. упр. 77. Пусть f(xi,...,хп) — произвольная монотонная булева функция от п перемен- ных. Если ст = ai...ап — произвольная битовая строка длиной п, для удобства можно записывать f((r) = /(ai,...,an). Любая строка oi ... ств шаблона рожде- ственской елки образует цепочку, так что мы имеем 0 < f(<?i) < < /(a.) < 1. (40) Другими словами, имеется индекс t, такой, что f((Tj) = 0 при j < t и f((Tj) = 1 при j > t; нам будут известны значения /(ст) для всех 2П битовых строк ст, если мы узнаем индексы t для каждой строки шаблона. Джордж Хансель (Georges Hansel) [Comptes Rendus Acad. Sci. (A) 262 (Paris, 1966), 1088-1090] заметил, что шаблон рождественской елки обладает еще одним важным свойством: если (Tj-i, (Tj и ctj+i представляют собой три последовательных элемента любой строки, битовая строка <т' = tjj-i © (Tj ® (Tj+i (41) находится в предыдущей строке. В самом деле, ст' находится в том же столбце, что и (Tj, и удовлетворяет условию 0j-i С ст' С (Tj+1; (42) это значение называется относительным дополнением (Tj в интервале (<tj-i . . ctj+i). Наблюдение Ханселя легко доказать по индукции с помощью рекурсивного прави- ла (36), определяющего шаблон рождественской елки. Он воспользовался им для того, чтобы показать, что можно вывести значения f(a) для всех ст, вычисляя зна- чения функции в относительно небольшом количестве мест; если известно значение /(ст'), то в силу (42) известно либо значение /(ст,_1), либо значение /(ctj+i). Алгоритм Н (Исследование монотонной булевой функции). Пусть f(xi,..., хп) — булева функция, неубывающая по каждой из булевых переменных (больше о ней ничего не известно). Обозначим для данной битовой строки ст длиной п через г (ст) номер строки, в которой ст находится в шаблоне рождественской елки; очевидно, что 1 < т(ст) < Мп. Для 1 < т < Мп обозначим через s(m) количество битовых строк в строке тп; пусть также х(т, к) означает битовую строку в столбце к этой
7.2.1.6 ГЕНЕРАЦИЯ ВСЕХ ДЕРЕВЬЕВ 519 строки при (n + 1 — s(m))/2 < к < (п — 1 + s(m))/2. Данный алгоритм определяет последовательность пороговых значений 4(1), 4(2), ..., t(Mn), таких, что /(а) = 1 <=> р(ст)>*(г(ст)), (43) путем вычисления f не более чем в двух точках на строку. Н1. [Цикл по т.] Выполнить шаги Н2-Н4 для т = 1,..., Мп; после этого завершить работу алгоритма. Н2. [Начало строки т.] Установить а «— (п + 1 — s(m))/2 и z «— (п — 1 + s(m))/2. НЗ. [Бинарный поиск.] Если z < а + 1, перейти к шагу Н4. В противном случае установить к «— [(а + z)/2j и ст «— х(т, к — 1) ®х(т,к) Фх(т, к + 1). (44) Если к > t(r(cr)^, установить z «— к-, в противном случае установить а «— к. Повторить шаг НЗ. Н4. [Вычисление.] Если /(x(m, а)) = 1, установить t(m) <— а; в противном случае, если а - z, установить t(zn) «— а + 1; в противном случае установить t(m) «— z+l-/(x(™>z))- I Алгоритм Ханселя оптимален в том смысле, что вычисляет f в наименьшем воз- можном количестве точек в наихудшем случае. Если f представляет собой порого- вую функцию /(ст) = [i/(ct)>tz/2], (45) любой корректный алгоритм, который исследует / на первых т строках шабло- на рождественской елки, должен вычислять /(ст) в столбце [n/2j каждой строки и в столбце [п/2] -I- 1 каждой строки, размер которой больше 1. В противном случае невозможно отличить / от функции, которая не совпадает с ней только в неисследованных точках. [См. В. К. Коробков, Проблемы кибернетики 13 (1965), 5-28, теорема 5.] Ориентированные деревья и леса. Обратимся теперь к другому виду дере- вьев, в которых важны отношения “родитель-потомок” но не порядок дочерних узлов в каждом семействе. Ориентированный лес из п узлов можно определить с помощью последовательности указателей pi.. .рп, где pj—родительский по отно- шению к узлу j узел (если j — корень, pj = 0); ориентированный граф с вершинами {0,1,..., п} и дугами {/ —» pj; | 1 < j < п} не имеет ориентированных циклов. Ориентированное дерево представляет собой ориентированный лес с единственным корнем (см. раздел 2.3.4.2). Каждый n-узловой ориентированный лес эквивалентен (п + 1)-узловому ориентированному дереву, поскольку корень этого дерева можно рассматривать как родительский узел для всех корневых узлов леса. В разде- ле 2.3.4.4 мы видели, что имеется Ап ориентированных деревьев с п узлами; вот первые несколько значений Ап. п = 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 <4 . An = 1 1 2 4 9 20 48 115 286 719 1842 4766 12486 32973 87811 1 ) Асимптотически Ап = сапп~3/2 + О(апп~5/2), где а « 2.9558 и с « 0.4399. Так, например, только 9 из 14 лесов в табл. 1 различны, если игнорировать порядок по горизонтали и рассматривать только вертикальную ориентацию.
520 КОМБИНАТОРНЫЙ ПОИСК 7.2.1.6 Каждый ориентированный лес соответствует единственному упорядоченному лесу, если соответствующим образом отсортировать члены каждого семейства с ис- пользованием упорядочения деревьев, предложенного Г. Я. Скоинсом (Н. I. Scoins) [Machine Intelligence 3 (1968), 43-60]: вспомним из (11), что упорядоченные леса могут характеризоваться кодами их уровней ci... Сп, где cj —уровень, на котором находится j-й в прямом порядке обхода узел. Упорядоченный лес называется кано- ническим, если последовательность кодов уровней поддеревьев в каждом семействе находится в невозрастающем лексикографическом порядке. Например, канониче- скими лесами в табл. 1 являются те леса, коды уровней С1С2С3С4 которых равны 0000, 0100, 0101, ОНО, 0111, 0120, 0121, 0122 и 0123. Последовательность 0112 канонической не является, поскольку поддеревья корня имеют соответственно коды уровней 1 и 12; строка 1 лексикографически меньше строки 12. По индукции можно легко убедиться, что канонические коды уровней лексикографически наибольшие среди всех способов переупорядочения поддеревьев данного ориентированного леса. Т. Бейер (Т. Веуег) и С. М. Хедетниеми (S. М. Hedetniemi) [SICOMP 9 (1980), 706-712] заметили, что существует удивительно простой способ генерации ориенти- рованных лесов, если посещать их в уменьшающемся лексикографическом порядке канонических кодов уровней. Предположим, что ci. -. сп — канонический код, в ко- тором с*; > 0 и Cfc+i = • • • = сп = 0. Следующая наименьшая последовательность получается путем уменьшения Ск и увеличения Cfc_|_j... Сп до наибольших уровней, согласующихся с условием каноничности; эти уровни достаточно легко вычислить. Если j = pk — узел, родительский по отношению к узлу к, имеем Cj = Ск — 1 < с/ для j < I < к, а следовательно, уровни Cj...Ск представляют поддерево, корнем которого является узел j. Для получения наибольшей последовательности уров- ней, меньших ci... Сп, мы заменяем Ск . - Сп первыми п + 1 — к элементами беско- нечной последовательности (cj ... Ck-i)°° = Cj ... Ck-iCj ... Ck-iCj .... (Результатом будет удаление к из его текущей позиции крайнего справа дочернего по отношению к узлу j узла и добавление новых поддеревьев, являющихся “братьями” j, путем клонирования j и его наследников настолько часто, насколько это возможно. Этот процесс клонирования можно завершить посреди последовательности Cj...Ck-i, но это не приведет к сложностям, поскольку каждый префикс канонической последо- вательности уровней является каноническим.) Например, для получения последу- ющего элемента любой последовательности канонических кодов, заканчивающейся 23443433000000000, мы заменяем окончание 3000000000 на 2344343234. Алгоритм О (Ориентированные леса). Этот алгоритм генерирует все ориенти- рованные леса из п узлов путем посещения всех канонических n-узловых лесов в уменьшающемся лексикографическом порядке их кодов уровней Ci... сп. Однако коды уровней при этом явно не вычисляются; каждый канонический лес пред- ставляется непосредственно последовательностью указателей на родительские узлы Pi... рп в порядке прямого обхода узлов. Для генерации всех ориентированных деревьев из п + 1 узлов можно представить, что корнем является узел 0. Алгоритм устанавливает ро 4--1- О1. [Инициализация.] Установить рк <— к — 1 для 0 < к < п. (В частности, этот шаг делает ненулевым ро для использования при проверке условия завершения алгоритма; см. шаг 04.)
7.2.1.6 ГЕНЕРАЦИЯ ВСЕХ ДЕРЕВЬЕВ 521 02. [Посещение.] Посетить лес, представленный указателями на родительские узлы Р1 -Рп- 03. [Простой случай?] Если рп > 0, установить рп «— рРп и вернуться к шагу 02. 04. [Поиск j и fc.] Найти наибольшее к < п, такое, что рк 0. Завершить работу алгоритма, если к = 0; в противном случае установить j «— рк и d <— к — j. 05. [Клонирование.] Если pk-d = Pj, установить рк «— pf, в противном случае установить рк *— Pk-d + d. Вернуться к шагу 02, если к = п; в противном случае установить к «— к + 1 и повторить данный шаг. | Как и в других рассмотренных алгоритмах, циклы на шагах 04 и 05 обычно до- статочно коротки (см. упр. 88). В упр. 90 доказывается, что небольших изменений данного алгоритма достаточно для генерации всех размещений ребер, формирую- щих свободные деревья. Остовные деревья. Теперь рассмотрим минимальные подграфы, которые “охва- тывают” данный граф. Если G—связный граф с п вершинами, его остовными деревьями (spanning trees) являются подмножества из п — 1 ребер, не содержащие циклов; или, что эквивалентно, они представляет собой множества ребер, кото- рые образуют свободное дерево, соединяющее все вершины. Остовные деревья играют важную роль во многих приложениях, особенно при изучении сетей, так что задача генерации всех остовных деревьев рассматривалась многими авторами. Фактически систематические способы их перечисления были разработаны в начале XX века Вильгельмом Фойсснером (Wilhelm Feussner) [Annalen der Physik (4) fl (1902), 1304-1329] задолго до того, как стали задумываться о способах генерации других видов деревьев. В дальнейшем рассмотрении мы допускаем, что граф может содержать любое количество ребер между двумя вершинами; однако петли (ребра, выходящие из вершины и возвращающиеся в нее же) запрещены, поскольку петля не может быть частью дерева. Основная идея Фойсснера очень проста и хорошо подходит для вычислений: если е — произвольное ребро графа G, то остовное дерево либо содер- жит его, либо нет. Предположим, что ребро е соединяет вершину и с вершиной v, и пусть оно является частью остовного дерева; тогда остальные п — 2 ребер этого дерева покрывают граф G / е, который мы получим, рассматривая вершины и и v как идентичные. Другими словами, остовные деревья, которые содержат е, по сути, те же, что и остовные деревья сжатого графа G / е, который получается в резуль- тате сжатия ребра е в точку. С другой стороны, остовные деревья, которые не содержат е, являются остовными деревьями приведенного графа G\e, полученного в результате удаления ребра е. Таким образом, множество S(G) всех остовных деревьев графа G удовлетворяет соотношению S(G) = eS(G/e) U S(G\e). (47) В своей диссертации в Университете Виктории (1997) Малкольм Д. Смит (Mal- colm J. Smith) представил красивый способ обеспечения рекурсии (47) путем поиска всех остовных деревьев в порядке “кода Грея двери-вертушки”: каждое дерево в его схеме получается из предшествующего путем простого удаления одного ребра и подстановки другого. Найти такой порядок деревьев нетрудно, проблема в том, чтобы сделать это эффективно.
522 КОМБИНАТОРНЫЙ ПОИСК 7.2.1.6 Основная идея алгоритма Смита состоит в генерации S(G) таким образом, чтобы первое остовное дерево включало данное близкое дерево (near tree), состоящее из п—2 ребер и не содержащее циклов. При п - 2 эта задача тривиальна; мы просто перечисляем все ребра. При п > 2 и данном близком дереве {ei,... ,еп_2} мы действуем следующим образом. Считаем, что граф G связный; в противном случае остовных деревьев не существует. Образуем G / ei и добавляем ei к каждому из его остовных деревьев, начиная с того, которое содержит {ег,...,е„_г}; заметим, что {ег,..., еп_г} —близкое дерево для G / ei, так что эта рекурсия имеет смысл. Если последним найденным таким путем остовным деревом для G/ei является fi... fn-2, завершим работу перечислением всех остовных деревьев для G\ ei, начиная с того, которое содержит близкое дерево {/i,..., /п-г}- Предположим, например, что G представляет собой граф Р JYL s g = (48) с четырьмя вершинами и пятью ребрами {р, q,r, s,t}. Начиная с близкого дерева {р, д}, процедура Смита сначала образует сжатый граф (1,21 s G/p = дТГг^Х? (Vt (49) и перечисляет его остовные деревья, начиная с того, которое содержит {<?}. Это может быть список qs, qt, ts, tr, rs; таким образом, деревья pqs, pqt, pts, ptr и prs покрывают G. Остается только перечислить остовные деревья графа G\p = (Т 3), (50) начиная с того, которое содержит {г, s}; это деревья rsq, rqt, qts. Детальная реализация алгоритма Смита весьма поучительна. Как обычно, мы представляем граф, используя для представления каждого ребра и — v две дуги — и —> v и v —► и — и поддерживая список “узлов дуг” для представления дуг, покидающих каждую вершину. Нам потребуется уменьшать и увеличивать количество ребер графа, так что эти списки лучше делать дважды связанными. Если а указывает на узел дуги, представляющей и—»г, то аф 1 указывает “напарника” а, который представляет дугу v—>u; ta является “верхушкой” а, т. е. v (следовательно, to$i = и); ia представляет собой необязательное имя, идентифицирующее данное ребро (эквивалентно io$i); па указывает на следующий элемент в списке дуг и; ра указывает на предыдущий элемент в списке дуг и; 1а представляет собой связь, используемую для восстановления дуг, как поясняется ниже. Вершины представлены целыми числами {1,... ,п}; номер дуги v — 1 представляет собой головной узел дважды связанного списка дуг для вершины v. Головной узел
7.2.1.6 ГЕНЕРАЦИЯ ВСЕХ ДЕРЕВЬЕВ 523 а распознается по тому факту, что его верхушка ta равна нулю. Обозначим степень вершины v как dv. Так, например, граф (48) может быть представлен с помощью (ф, </2,^3, </4) = (2,3,3,2) и следующих четырнадцати узлов дуг: 2 3 4 О 0 1 5 2 6 1 7 8 3 2 а = 0 1 ta = О О р 6 10 9 9 10 11 12 13 3 2 4 3 4 г s s t t па = 5 4 6 10 9 ра = 7 11 13 12 1 q г г 8 з t t 0 13 11 12 1 3 2 5 6 4 3 9 10 8 Р 7 0 9 8 2 Управлять неявной рекурсией алгоритма Смита удобно с помощью массива указателей на дуги щ . an_i. На уровне I процесса дуги щ ... a<_i означают реб- ра, которые были включены в текущее остовное дерево; ai игнорируется, а дуги aj+i... an-i обозначают ребра близкого дерева сжатого графа (... (G/ai)...)/aj-i, которое должно быть частью остовного дерева, посещаемого следующим. Существует и другой массив указателей на дуги si ...зп-2, представляющий стеки дуг, временно удаленных из текущего графа. Верхним элементом стека для уровня I является si, и каждая дуга а связывается со следующей за ней, 1а (которая на дне стека равна нулю). Ребро, удаление которого разъединяет связный граф, называется мостом. Од- ним из ключевых моментов данного алгоритма является то, что мы хотим сохранять текущий граф связным; следовательно, мы не можем устанавливать G «— G\e, если е представляет собой мост. Алгоритм S (Все остовные деревья). Этот алгоритм посещает все остовные дере- вья заданного связного графа, представленного структурами данных, рассмотрен- ными выше. Для удаления и восстановления элементов в дважды связанных списках здесь используется метод “танцующих связей” который будет всесторонне рассмотрен в разделе 7.2.2.1. Обозначение “delete(a)” в описании шагов алгоритма представляет собой сокращенную запись пары операций пра * f Рпа * Ра j аналогично “undelete(a)” означает Рпа * ПРа * (51) (52) S1. [Инициализация.] Установить щ ... an-i равным остовному дереву графа (см. упр. 94.) Установить также х <— 0, I «— 1 и вх «—0. Если п = 2, установить v «— 1, е «— по и перейти к шагу S5. S2. [Вход на уровень Z.] Установить е «— a<+i, и <— te и v <— te®i- Если du > dv, выполнить обмен v «-> и и установить е «— е ф 1. S3. [Сжатие е.] (Сейчас и будет сделано идентичным v путем вставки списка смеж- ности и в список V. Следует также удалить все бывшие ребра между и и v, включая само е, поскольку иначе такие ребра станут петлями. Удаленные ребра связываются вместе, так что мы сможем восстановить их на шаге S7.) Установить к «— du + dv, f «— nu_i и g «— 0. Пока tf / 0, выполнять следующее: если tf = v, delete(/), delete(/ ф 1), и установить к <— к — 2, If <— g, g <— f-
524 КОМБИНАТОРНЫЙ ПОИСК 7.2.1.6 в противном случае установить tf&i «— v. Затем установить f <— nf и повторять эти операции до тех пор, пока не будет выполнено условие tf = 0. Наконец установить le «— д, dv <— к, д «— v — 1, nPf «— пд, рПд «— pf, pnf <— д, пд <— п/ и ai <— е. S4. [Продвижение Z.] Установить I <—/ + !. Если I < п — 1, установить sj <— 0 и вернуться к шагу S2. В противном случае установить е «— nv-i. S5. [Посещение.] (Текущий граф в настоящий момент имеет только две верши- ны, одна из которых— v.) Установить an_i «-ей посетить остовное дерево ai... On-i (Если х = 0, это первое посещаемое остовное дерево; в противном случае оно отличается от своего предшественника удалением х и вставкой е.) Установить х «— е и е «— пе. Повторить шаг S5, если te / 0. S6. [Уменьшение Z.] Установить I«— I — 1. Завершить работу алгоритма, если I = 0; в противном случае установить е«— ai, и *— te и г <— te&i. S7. [Восстановление е.] Установить / «— u — 1, д *— v — 1, пд *— nPf, рПд <— д, пр/ <— f, рп/ <— / и f <— Pf. Пока tf / 0, устанавливать «— и и f «— pf. Затем установить f «— 1е, к «— <4,; пока f / 0, выполнять следующее: установить к «— к + 2, undelete(/ ф 1), undelete(/) и установить f «— If. Наконец установить d„« к (1ц< S8. [Проверка моста.] Если е — мост, перейти к шагу S9. (См. один из способов выполнения данной проверки в упр. 95.) В противном случае установить х «— е, Ze «— si, sj «— е; delete(e) и delete(e ф 1). Установить du «— du — 1, dv «— dv — 1 и перейти к шагу S2. S9. [Отмена удалений на уровне Z.] Установить е «— si. Пока е / 0, установить и «— te, v «— teei, du ♦— du + 1, dv <— dv + 1, undelete(e Ф 1), undelete(e) и e «— le. Вернуться к шагу S6. | Вы можете выполнить шаги алгоритма вручную на небольшом графе, таком, как (48). Обратите внимание на тонкий момент, возникающий на шагах S3 и S7, когда список смежности и становится пустым. Заметим также, что возможно некоторое сокращение алгоритма ценой его усложнения; такие улучшения будут рассмотрены позже в данном разделе. *Последовательно-параллельные графы. Задача поиска всех остовных деревьев становится особенно простой, когда данный граф имеет последовательное и/или параллельное разложение. Последовательно-параллельный граф между з и t пред- ставляет собой граф G с двумя выделенными вершинами, з и t, ребра которого могут быть рекурсивно построены следующим образом: G либо состоит из единственного ребра з — t, либо представляет собой последовательное сверхребро, состоящее из к > 2 последовательно-параллельных подграфов Gj между Sj и tj, последовательно соединенных так, что s = si и tj = sj+i для l<j<kntk = t, либо G представляет собой параллельное сверхребро, состоящее из к > 2 последовательно-параллельных подграфов Gj между Sj и tj, соединенных параллельно. Такое разложение для данных з и t единственное, если потребовать, чтобы подграфы Gj последовательных сверхребер сами не являлись последовательными сверхребрами, а подграфы Gj параллельных сверхребер сами не являлись параллельными сверхребрами.
7.2.1.6 ГЕНЕРАЦИЯ ВСЕХ ДЕРЕВЬЕВ 525 Любой последовательно-параллельный граф можно удобно представить в виде дерева, в котором нет узлов степени 1. Листья такого дерева представляют ребра, а внутренние узлы—сверхребра, причем последовательные и параллельные сверх- ребра чередуются от уровня к уровню. Например, дерево соответствует последовательно-параллельным графам и подграфам а если верхний узел А рассматривать как параллельный. В (54) именованы ребра, но не вершины, поскольку именно ребра играют главную роль в остовных деревьях. Будем считать, что близкое дерево последовательно-параллельного графа меж- ду s и t представляет собой множество из п — 2 ребер без циклов, которые не соеди- няют set. Остовные деревья и близкие деревья последовательно-параллельного графа легко описать рекурсивно следующим образом. (1) Остовное дерево последо- вательного сверхребра соответствует остовным деревьям всех его главных подгра- фов Gj; близкое дерево соответствует остовным деревьям всех подграфов, кроме одного, у которого соответствие выполняется для близкого дерева. (2) Близкое дерево параллельного сверхребра соответствует близким деревьям всех его главных подграфов Gj; остовное дерево соответствует близким деревьям всех подграфов, кроме одного, у которого соответствие выполняется для остовного дерева. Правила (1) и (2) наводят на мысль об использовании следующих структур дан- ных для перечисления остовных деревьев и/или близких деревьев последовательно- параллельных графов. Пусть р указывает на узел в дереве наподобие (53). Тогда определим tp = 1 для последовательных сверхребер, 0 в противном случае (“тип” р); vp = 1 в случае остовного дерева для р, 0 в случае близкого дерева; 1Р — указатель на крайний слева потомок р или 0, если р—лист; Гр = указатель на крайний справа “брат” р (по циклу); dp = указатель на выбранный потомок р или 0, если р—лист. Если q указывает на крайний справа дочерний по отношению к р узел, то его “правый брат” rq равен 1Р. А если q указывает на любой непосредственный потомок р, то правила (1) и (2) гласят, что Г Vp, если q = dp; vq = 5 . _ , , (55) (tp, если q dp. (Например, если p—внутренний узел, представляющий последовательное сверхре- бро, то для всех, кроме одного, потомков р должно выполняться vq — 1; един-
526 КОМБИНАТОРНЫЙ ПОИСК 7.2.1.6 ственным исключением является выбранный потомок dp. Таким образом, у нас должно быть остовное дерево для всех последовательно соединенных подграфов, образующих р, за исключением одного выбранного подграфа, и в этом случае мы имеем для р близкое дерево.) Для заданных выбранных указателей dp на дочерние узлы и заданного для vp значения 0 или 1 в корне дерева формула (55) говорит о том, каким образом происходит распространение этих значений вниз по дереву вплоть до всех листьев. Например, если установить гд «— 1 в дереве (53), а выбранным потомком каждого внутреннего узла считать крайний слева (так что dA = a, dp = b, dp = с и dp = f), то можно последовательно найти значения va = 1, vg = 0, уь = 0, vc = 1, vc = 1, Vd = 0, ve = 1, vp = 0, Vf =0, vg = 1. (56) Лист q присутствует в остовном дереве тогда и только тогда, когда vq = 1; сле- довательно, (56) определяет остовное дерево асед последовательно-параллельного графа А из (54). Будем для удобства говорить, что конфигурациями р являются его остовные де- ревья, если vp = 1, и его близкие деревья, если vp = 0. Мы бы хотели сгенерировать все конфигурации корня. Внутренний узел р называется простым, если vp = tp, т. е. последовательный узел прост, если его конфигурациями являются остовные деревья, а параллельный узел прост, если его конфигурациями являются близкие деревья. Если р прост, его конфигурации представляют собой декартово произве- дение конфигураций его дочерних узлов, а именно все независимо изменяющиеся fc-кортежи дочерних конфигураций; выбранный потомок dp в этом простом случае несуществен. Но если р не является простым, то его конфигурации представля- ют собой объединение таких декартовых fc-кортежей, взятых по всем возможным выборам dp. Как назло, простые узлы относительно редки: простым может быть максимум один из дочерних узлов узла, не являющегося простым (а именно выбранный дочер- ний узел), и все дочерние узлы простого узла не являются простыми, если только это не листья. Даже при этом представление последовательно-параллельного графа в виде дерева делает рекурсивную генерацию всех остовных и/или близких деревьев доста- точно простой и эффективной. Операции алгоритма S — сжатие и восстановление, удаление и его отмена, проверка моста—не требуются при работе с последователь- но-параллельными графами. Кроме того, в упр. 99 показано, что имеется красивый способ получить остовные или близкие деревья в порядке кода Грея двери-вертушки с использованием фокусных указателей, как в некоторых встречавшихся ранее ал- горитмах. *Усовершенствование алгоритма S. Хотя алгоритм S обеспечивает простой и до- статочно эффективный способ посещения всех остовных деревьев обобщенного граф, его автор Малкольм Смит (Malcolm Smith) нашел, что свойства последова- тельно-параллельных графов позволяют его улучшить. Например, если граф имеет два или более ребер, проходящих между одними и теми же вершинами и и г, можно скомбинировать их в сверхребро; остовные деревья исходного графа в таком случае могут быть получены из этого более простого графа. А если граф имеет вершину v степени 2, так что с ней связаны только ребра и — v и v — w, можно удалить
7.2.1.6 ГЕНЕРАЦИЯ ВСЕХ ДЕРЕВЬЕВ 527 вершину v и заменить указанные ребра одним сверхребром между и и w. Кроме того, можно удалить любую вершину степени 1 вместе с ее ребром, просто включая его в каждое остовное дерево. Применив описанные в предыдущем абзаце приведения к данному графу G, мы получим приведенный граф G, не имеющий параллельных ребер и вершин степеней 1 и 2, и множество тп > 0 последовательно-параллельных графов Si, ..., Sm, представляющих ребра (или сверхребра), которые должны быть включены во все остовные деревья G. Каждое оставшееся ребро и — v графа G фактически соответствует последовательно-параллельному графу Suv между вершинами и и v. Остовные деревья графа G могут быть получены как объединение, взятое по всем остовным деревьям Т графа G, декартова произведения остовных деревьев графов Si, ..., Sm и остовных деревьев всех графов Suv для ребер и — v в Т вместе с близкими деревьями всех графов Suv для ребер и — v, которые входят в G, но не в Т. А все остовные деревья Т графа G можно получить с использованием стратегии из алгоритма S. Фактически при таком расширении алгоритма S его операции по замене теку- щего графа G на G / е или G \ е обычно влекут за собой дальнейшие приведения, если появляются новые параллельные ребра или если степень некоторых вершин графа падает ниже 3. Таким образом, это приводит к тому, что “останавливающее состояние” неявной рекурсии алгоритма S, а именно ситуация, когда остаются толь- ко две вершины (шаг S5), в действительности никогда не достигается: приведенный граф G либо состоит из одной вершины без ребер, либо имеет как минимум четыре вершины и шесть ребер. Полученный в результате алгоритм обладает требуемым свойством двери-вер- тушки, которым обладает исходный алгоритм S, и достаточно красив (несмотря на то, что он примерно в четыре раза длиннее исходного); см. упр. 100. Смит доказал, что он обладает наилучшим возможным асимптотическим временем работы: если G имеет п вершин, тп ребер и N остовных деревьев, алгоритм посещает все их за О(тп + п + N) шагов. Производительность алгоритма S и его улучшенной версии — алгоритма S'— лучше всего можно оценить, рассмотрев количество обращений к памяти, выполня- емых этими алгоритмами при генерации всех остовных деревьев типичных графов, как показано в табл. 5. Нижняя строка таблицы соответствует графу pZane_mttes(16, 0,0,1,0,0,0) из Stanford GraphBase, который служит “естественным” противоядием для чисто математических примеров в предыдущих строках таблицы. Случайный мультиграф в предпоследней строке, также взятый из Stanford GraphBase, может быть описан более точно его официальным именем random-graph (16,37,1,0,0,0,0, 0,0,0). Хотя тор 4x4 изоморфен четырехмерному кубу (см. упр. 7.2.1.1-17), эти изоморфные графы дают немного разное время работы из-за того, что их вершины и ребра алгоритм обходит в разном порядке. В общем случае алгоритм S не так уж плох для небольших примеров, за исклю- чением случаев сильно разреженных графов; но алгоритм S' начинает превосходить его при наличии большого количества остовных деревьев. Когда алгоритм S' вхо- дит в полную силу, он тратит на каждое новое дерево примерно 18-19 обращений к памяти.
528 КОМБИНАТОРНЫЙ ПОИСК 7.2.1.6 Таблица 5 Время работы в обращениях к памяти, необходимое для генерации всех остовных деревьев m п N Алгоритм S Алгоритм S' р на одно дерево Путь Рю 9 10 1 794р. 473р 794.0 473.0 Путь Рцю 99 100 1 9974д 5063д 9974.0 5063.0 Цикл Сю 10 10 10 3480д 998р 348.0 99.8 Цикл Cioo 100 100 100 355 605р 10538р 3556.1 105.4 Полный граф Кд 6 4 16 1213р 1336р 75.8 83.5 Полный граф Кю 45 10 100000000 3759.58Мд 1860.95Мд 37.6 18.6 Полный биграф Ks,s 25 10 390625 23.43Мд 8.88Мр 60.0 22.7 4 х 4-решетка P4QP4 24 16 100352 12.01МД 1.87Мд 119.7 18.7 5 х 5-решетка P5QP5 40 25 557568000 54.68G/Z 10.20G/1 98.1 18.3 4 х 4-цилиндр Р4С1С4 28 16 2558976 230.96M/Z 49.09M/Z 90.3 19.2 5 х 5-цилиндр PsOCs 45 25 38720000000 3165.31Gp 711.69G/Z 81.7 18.4 4 х 4-тор C4C1C4 32 16 42467328 3168.15Мр 823.08Мд 74.6 19.4 Четырехмерный куб P2QP2QP2OP2 32 16 42467328 3172.19Мд 823.38Мд 74.7 19.4 Случайный мультиграф 37 16 59933756 3818.19Мд 995.91Мд 63.7 16.6 16 городов 37 16 179 678 881 11772-ПМд 3267.43Мр 65.5 18.2 Из табл. 5 также видно, что математически определенные графы часто имеют на удивление “круглое” количество остовных деревьев. Например, Д. М. Цветкович (D. М. Cvetkovic) [Srpska Akademija Nauka, Matematicheski Institut 11 (Belgrade: 1971), 135-141] открыл, помимо прочего, что n-мерный куб имеет ровно 22п-п-1 !(?) 2(^)...п(") (57) остовных деревьев. В упр. 104-109 рассматриваются некоторые причины этого. Обобщенный квазикод Грея. Завершим данный раздел обсуждением еще од- ного вопроса, совершенно отличного от предыдущих, но, тем не менее, связанного с деревьями. Рассмотрим гибридные варианты двух стандартных способов обхода непустого леса. Прямообратный порядок обхода Обратнопрямой порядок обхода (prepostorder) (postpreorder) Посетить корень первого дерева Обойти поддеревья первого дерева в обратнопрямом порядке Обойти остальные деревья в прямообратном порядке Обойти поддеревья первого дерева в прямообратном порядке Посетить корень первого дерева Обойти остальные деревья в обратнопрямом порядке В первом случае каждое дерево леса обходится в прямообратном порядке, при- чем первым посещается корень дерева; однако поддеревья этих корней обходятся в обратнопрямом порядке, причем корень посещается последним. Второй вариант
7.2.1.6 ГЕНЕРАЦИЯ ВСЕХ ДЕРЕВЬЕВ 529 аналогичен, но в нем “прямой” и “обратный” переставлены. В общем случае пря- мообратный порядок посещает корни первыми на каждом четном уровне леса, а на нечетном — последними. Например, лес (2) превращается в при нумерации его узлов в прямообратном порядке. Прямообратный и обратнопрямой порядки не просто курьез—они приносят реальную пользу. Это связано с тем, что соседние узлы при любом из этих порядков всегда находятся в лесу близко один к другому. Например, узлы к и к +1 являются смежными в (58) при к = 1, 4, 6, 8, 10, 13; они разделены только одним узлом при к = 3, 12, 14 и разнесены на три шага при к = 2, 5, 7, 9, 11 (если представить невидимый сверхродительский узел на вершине леса). Минутное размышление позволяет по индукции доказать, что между соседями как в прямообратном, так и в обратнопрямом порядке может располагаться не более двух узлов, поскольку обратнопрямой порядок всегда начинается с корня первого дерева или его крайне- го слева дочернего узла, а прямообратный порядок всегда заканчивается корнем последнего дерева или его правым дочерним узлом. Предположим, что мы хотим сгенерировать все комбинаторные шаблоны неко- торого вида и посетить их в порядке наподобие кода Грея, так, чтобы последова- тельные шаблоны всегда были “близки” один к другому. Можно сформировать, по крайней мере концептуально, граф всех возможных шаблонов р с ребрами р — q для всех пар шаблонов, близких один к другому. В следующей теореме, открытой Миланом Секаниной (Milan Sekanina) \Spisy Pfirodovedeck6Fakulty University vBrne, No. 412 (1960), 137-140], доказывается, что всегда возможен хороший код Грея, обес- печивающий получение одного шаблона из другого с помощью последовательности коротких шагов. Теорема S. Вершины любого связного графа могут быть перечислены в цик- лическом порядке так, что расстояние между Vk и i>(fc+i)modn не превышает 3 для 0 < к < п. Доказательство. Найдите остовное дерево графа и обойдите его в прямообратном порядке. | Ученые в области теории графов традиционно говорят, что fc-й степенью гра- фа G является граф Gk, вершины которого те же, что и у графа G, а ребро и—v присутствует в графе Gk тогда и только тогда, когда в G существует путь длиной не более fc от и до г. Это позволяет сформулировать теорему S более кратко при п > 2: куб связного графа является гамильтонианом. Прямообратный обход полезен также в случае, когда мы хотим посетить узлы дерева с помощью ограниченного количества шагов без циклов.
530 КОМБИНАТОРНЫЙ ПОИСК 7.2.1.6 Алгоритм Q (Прямообратный преемник в трижды связанном лесу). Если Р указывает на узел в лесу, представленном связями PARENT, CHILD и SIB, соответ- ствующими родителю каждого узла, его крайнему слева дочернему узлу и правому брату, то данный алгоритм вычисляет узел Q, следующий за узлом Р в прямо- обратном порядке. Предполагается, что известен уровень L, на котором в лесу находится узел Р; значение L обновляется так, что указывает уровень узла Q. Если Р — последний узел в прямообратном порядке, то алгоритм устанавливает Q «— Л и L <--1. Q1. [Прямой или обратный?] Если L четно, перейти к шагу Q4. Q2. [Продолжение обратнопрямое.] Установить Q <— SIB(P). Перейти к шагу Q6, если Q Л. Q3. [Перемещение вверх.] Установить Р «— PARENT(Р) и L «— L — 1. Перейти к шагу Q7. Q4. [Продолжение прямообратное.] Если CHILD (Р) = Л, перейти к шагу Q7. Q5. [Перемещение вниз.] Установить Q «— CHILD(P) и L «— L + 1. Q6. [Перемещение вниз по возможности.] Если CHILD(Q) Л, установить Q <— CHILD(Q) и L <— L + 1. Завершить работу алгоритма. Q7. [Перемещение вправо или вверх.] Если SIB(P) Л, установить Q ♦— SIB(P); в противном случае установить Q <— PARENT(P) и L «— L — 1. Завершить работу алгоритма. | Заметим, что, как и в алгоритме 2.4С, связь PARENT (Р) проверяется, только если SIB(P) = Л. Полный обход представляет собой путешествие червяка вокруг леса наподобие (3): червяк “видит” узлы на четных уровнях при проходе слева, а на нечетных — справа. Упражнения 1. [/5] Каким образом можно реконструировать строку скобок (1) при проползании червяка по бинарному дереву (4)? 2. [20] (Ш. Закс (S. Zaks), 1980.) Модифицируйте алгоритм Р так, чтобы он выдавал сочетания ziz? ... zn из (8) вместо строк скобок щаг ... О2П. 3. [23] Докажите, что (11) преобразует Z1Z2 .. .zn в таблицу инверсий С]С2 ... Сп- 4. [20] Истинно или ложно следующее утверждение? Если строки щ ... агп сгенерирова- ны в лексикографическом порядке, то в том же порядке находятся строки di... dn, zi... zn, pl • - • рп И Cl ... Cp. 5. [15] Какие таблицы di... dn, zi... zn, Pi • • - Рп и ci... Сп соответствуют строке вло- женных скобок (1)? 6. [20] Какое паросочетание (см. последний столбец табл. 1) отвечает строке (1)? 7. [15] (а) В каком состоянии находится строка aia.2••• fl2n по окончании работы ал- горитма Р? (б) Что содержится в массивах lih-.-ln и ггГ2...гп по окончании работы алгоритма В? 8. [15] Как выглядят таблицы li... 1п, тт ... гп, е± ...еп и si... sn, соответствующие примеру леса (2)?
7.2.1.6 ГЕНЕРАЦИЯ ВСЕХ ДЕРЕВЬЕВ 531 ». [мго] Покажите, что таблицы ci ... Сп и si... зп связаны соотношением с* = [si > к - 1] + [яг >к - 2] Ч-1- [sfc—i > 1]. 10. [М20] (Обход •червяка.) Для заданной строки вложенных скобок а^аг .. .агп обозна- чим через Wj превышение количества левых скобок над правыми в подстроке aia?.. ,aj, О < j < 2п. Докажите, что wo + u>i + • • • + W2n = 2(ci -I-1- Cn) + n. ll- [Hl Если F—некоторый лес, сопряженный лес FR получается путем зеркального отражения слева направо. Например, для 14 лесов из табл. 1 .... .. j • д, . j .. fi । । сопряженными являются соответственно .... .j. д., j ..j j j, . д, । (солексные леса из табл. 2). Если F соответствует некоторой строке вложенных скобок aia2 -.. О2П, то какой строке соответствует FR? 12. [15] Если F—некоторый лес, то транспонированный лес FT получается путем обмена в каждом бинарном дереве леса F левых и правых связей. Например, для 14 лесов из табл. 1 транспонированными являются соответственно к, Л., | *, Л‘, XX, • *Л, X”, ’Xе, ”1, ••••. Что дает транспонирование леса (2)? 13. [20] Продолжая выполнять упр. 11 и 12, ответьте, как соотносятся прямой и обратный порядки обхода помеченного леса F и прямой и обратный порядки обхода (a) FR? (б) FT? 14. [21] Найдите все помеченные леса F, такие, что FRT = FTR. 15. [20] Предположим, что В—бинарное дерево, полученное из леса F путем связывания каждого узла с его левым братом и крайним справа дочерним узлом, как в упр. 2.3.2-5 и последнем столбце табл. 2. Пусть F'—лес, естественным образом соответствующий В посредством связей с левым братом и крайним справа дочерним узлом. Докажите, что F' = FST (с использованием обозначений из упр. 11 и 12). 16. [20] Пусть F и G—леса и пусть FG означает лес, полученный путем размещения де- ревьев F слева от деревьев G. Определим также F|G = (GTFT)T. Приведите интуитивное пояснение оператора | и докажите, что он ассоциативен. 17. [Л/^б] Охарактеризуйте все непомеченные леса F, такие, что FRT = FTR (см. упр. 14). 18. [SO] Два леса называются родственными (cognate), если один может быть получен из другого с помощью некоторого количества операций сопряжения и/или транспонирования. Примеры в упр. 11 и 12 показывают, что каждый лес из четырех узлов принадлежит одному из трех классов родственности: Изучите множество всех лесов из 15 узлов. Сколько классов эквивалентности родственных лесов они образуют? Какой класс наибольший? Какой наименьший? Чему равен размер класса, содержащего (2)? 1». [28] Пусть Fi, F2, ..., Fjy—последовательность непомеченных лесов, соответству- ющих вложенным скобкам, сгенерированным алгоритмом Р, и пусть Gi, G2, ..., Gn — последовательность непомеченных лесов, соответствующих бинарным деревьям, сгенери- рованным алгоритмом В. Докажите, что Gk = FRTR (с использованием обозначений из
532 КОМБИНАТОРНЫЙ ПОИСК 7.2.1.6 упр. 11 и 12). (Лес FRTR называется дуальным к лесу F и в ряде упражнений далее обозначается как FD.) 20. [25] Вспомним из раздела 2.3, что степенью узла в дереве называется количество его дочерних узлов и что расширенное бинарное дерево характеризуется тем свойством, что каждый его узел имеет степень либо 0, либо 2. В расширенном бинарном дере- ве (4) последовательность степеней узлов в прямом порядке обхода представляет собой 2200222002220220002002202200000; эта строка нулей и двоек идентична последовательности скобок в (1), за исключением того, что каждая скобка ‘(’ заменена двойкой, каждая *)’ — нулем, и добавлен дополнительный нуль. а) Докажите, что последовательность неотрицательных целых чисел bib? ... Ьц представ- ляет собой последовательность степеней в прямом порядке обхода леса тогда и только тогда, когда она удовлетворяет следующему свойству для 1 < к < N: bi + t>2 + • • • + bk 4- f > к тогда и только тогда, когда к < N. Здесь f = N — bi — Ьг — — bjv — количество деревьев в лесу. б) Вспомним из упр. 2.3.4.5-6, что расширенное тернарное дерево характеризуется тем свойством, что каждый его узел имеет степень либо 0, либо 3; расширенное тернарное дерево с п внутренними узлами имеет 2n + 1 внешних узлов, следовательно, всего N = Зп+1 узлов. Разработайте алгоритм генерации всех тернарных деревьев с п внут- ренними узлами путем генерации соответствующих последовательностей bibz • - • Ъм в лексикографическом порядке. 21. [26] (Ш. Закс (S. Zaks) и Д. Ричардс (D. Richards), 1979.) Продолжая выполнять упр. 20, поясните, как сгенерировать последовательности степеней в прямом порядке об- хода для всех лесов с N = по + • • • + nt узлами, среди которых степень j имеют ровно nj узлов. Пример: при по = 4, ni = пг = пз = 1 и t = 3 корректными последовательностями b^bsbibsbobi являются 1203000,1230000,1300200,1302000,1320000,2013000,2030010,2030100,2031000,2103000, 2130000,2300010,2300100,2301000,2310000,3001200,3002010,3002100,3010200,3012000, 3020010,3020100,3021000,3100200,3102000,3120000,3200010,3200100,3201000,3210000. 22. [S0] (Д. Корш (J. Korsh), 2004.) В качестве альтернативы алгоритму В покажите, что бинарные деревья могут также быть сгенерированы непосредственно в связном виде, если генерировать их в солексном порядке чисел di ...dn-i, определенных в (9). (Реальные значения di... dn-i не должны вычисляться явно; должна выполняться работа со связями 11... 1п ч ri... гп таким образом, чтобы получались бинарные деревья, последовательно соответствующие значениям didi.. .dn-i = 000... 0, 100... 0, 010... 0, 110...0, 020... 0, 001...0, ..., 000...(п-1).) 23. [25] (а) Какова последняя строка, посещаемая алгоритмом N? (б) Каково последнее бинарное дерево (или лес), посещаемое алгоритмом L? Указание: см. упр. 40. 24. [22] Какие последовательности /о/1 • • • 115, ri... ru, ki ... fcis, qi... qis и «i... «is со- ответствуют бинарному дереву (4) и лесу (2) при использовании обозначений из табл. 3? 25. [S0] (Обрезка и прививка.) Представляя бинарные деревья способом, использующим- ся в алгоритме В, разработайте алгоритм, который посещает все таблицы связей li.. Лп и ri... гп таким образом, что между визитами только одна связь меняется с j на 0 и од- на—с 0 на j для некоторого индекса j. (Другими словами, на каждом шаге некоторое поддерево j удаляется из бинарного дерева и помещается в другое место, сохраняя при этом прямой порядок обхода.)
7.2.1.6 ГЕНЕРАЦИЯ ВСЕХ ДЕРЕВЬЕВ 533 26. [М31 ] (Решетка Кревераса.) Пусть F и F' — n-узловые леса, узлы которых прону- мерованы от 1 до п в прямом порядке обхода. Мы записываем F К F' (“F соединяется с F'”), если из того, что j и к являются братьями в F', вытекает, что они братья и в F, 1 < j < к < п. На рис. 60 показано такое частичное упорядочение для случая п = 4; каждый лес закодирован последовательностью ci...Cn из (10) и (11), которая определяет глубину каждого узла. (При таком кодировании j и. к являются братьями тогда и только тогда, когда cj = ск < cj+i,..., ck-i.) Рис. 60. Решетка Кревераса четвертого порядка. Каждый лес представ- лен последовательностью глубин узлов C1C2C3C4 в прямом порядке обхода (см. упр. 26-28.) а) Пусть П — разбиение {1,..., п}. Покажите, что существует лес F с узлами, помечен- ными (1,..., п) в прямом порядке обхода, такой, что j = к (по модулю П) <=> j брат к в F тогда и только тогда, когда П удовлетворяет условию непересекаемости из i<j<к<1 и из г = к и j = l (по модулю П) вытекает i=j = к=1 (по модулю П). б) Поясните, как для двух заданных n-узловых лесов F и F1 вычислить их наименьшую верхнюю границу F V F', которая представляет собой элемент, такой, что F К G и F* К G тогда и только тогда, когда FVF' К G. в) Когда F' покрывает F по отношению к К? (См. упр. 7.2.1.4-55.) г) Покажите, что если F' покрывает F, то он меньше F ровно на один лист. д) Сколько лесов покрывают F, когда узел к имеет е*, дочерних узлов (1 < к < п)? е) Какой лес является дуальным по отношению к лесу (2) при использовании определе- ния дуальности из упр. 19? ж) Докажите, что F К F' тогда и только тогда, когда F'D К FD. (Из-за этого свойства дуальные элементы располагаются симметрично относительно центра рис. 60.) з) Объясните, как для заданных n-узловых лесов F и F1 вычислить их наибольшую нижнюю границу F Л F'; т. е. G К F и G К F' тогда и только тогда, когда G К F Л F'. и) Удовлетворяет ли эта решетка полумодулярному закону, аналогичному закону из упр. 7.2.1.5-12, (е)? ► 27. [МЗЗ] (Решетка Тамари.) Продолжая выполнять упр. 26, будем записывать F Ч F1, если j-й. узел в прямом порядке обхода для всех j имеет как минимум столько же потомков в F', как и в F. Другими словами, если F и F' характеризуются своими последовательно- стями si... sn и si... s'n (см. табл. 2), то F Ч F' тогда и только тогда, когда Sj < s'j для 1 < у < п (рис. 61). а) Покажите, что координаты min(si,s/i)min(s2,S2)...niin(sn,Sn) определяют лес, ко- торый является наибольшей нижней границей F и Р (обозначим ее как F ± F').
534 КОМБИНАТОРНЫЙ ПОИСК 7.2.1.6 Рис. 61. Решетка Тамари четвертого порядка. Каждый лес представлен последовательностью в прямом порядке обхода (а) глубин узлов и (б) количеством потомков (см. упр. 26-28.) (б) Указание: докажите, что si... sn соответствует лесу тогда и только тогда, когда из О < k < Sj вытекает Sj+k + к < Sj для 0 < j < п, если положить so = п. б) Когда при таком частичном упорядочении F' покрывает F? в) Докажите, что F Ч F' тогда и только тогда, когда F'D Ч FD. (Сравните с упр. 26, (ж).) г) Поясните, как вычислить наименьшую верхнюю границу F Т F“ для заданных F и F . д) Докажите, что из F К F' в решетке Кревераса вытекает F Ч F' в решетке Тамари. е) Истинно или ложно следующее утверждение? F Л F' Ч F ± F'. ж) Истинно или ложно следующее утверждение? F V F' К F Т F'. з) Каковы длиннейший и кратчайший пути от верха решетки Тамари до ее низа, такие, что на этих путях каждый лес покрывает следующий за ним? (Такие пути называются максимальными цепочками решетки; сравните с упр. 7.2.1.4-55, (з).) 28. [М2б] (Решетка Стенли.) Продолжая выполнять упр. 26 и 27, определим еще одно частичное упорядочение на n-узловых лесах, говоря, что F С F', если координаты глубины Cj... сп и c'j... с'п удовлетворяют соотношению Cj < Cj для 1 < j < п (рис. 62). Рис. 62. Решетка Стенли четвертого поряд- ка. Каждый лес представлен последователь- ностью глубин узлов в прямом порядке обхода (см. упр. 26-28). а) Докажите, что это частичное упорядочение представляет собой решетку, пояснив, каким образом можно вычислить наибольшую нижнюю границу FDF' и наименьшую верхнюю границу F U F' любых двух заданных лесов. б) Покажите, что решетка Стенли удовлетворяет законам дистрибутивности FQ(GUH) = (FnG)U(FnH), FU (GD Я) = (FU G) D (FU H).
7.2.1.6 ГЕНЕРАЦИЯ ВСЕХ ДЕРЕВЬЕВ 535 в) Когда в этой решетке F1 покрывает F? г) Истинно или ложно следующее утверждение? F С G тогда и только тогда, когда fh q gr д) Докажите, что F С F' в решетке Стенли, когда F Ч F' в решетке Тамари. 29. [HMS1] Покрывающий граф для решетки Тамари иногда называют ассоциаэдром (as- sociahedron) из-за его связи с законом ассоциативности (14), доказанным в упр. 27, (б). Ассоциаэдр четвертого порядка, изображенный на рис. 61, имеет три квадратные грани и шесть пятиугольных. (Сравните с рис. 43 из упр. 7.2.1.2-60, на котором показан “пер- мутаэдр” четвертого порядка, известное Архимедово тело.) Почему фигура на рис. 61 не входит в классический список однородных многогранников? 30. [М2б] Следом леса называется битовая строка fi... fn, определяемая следующим образом: fj = [узел j в прямом порядке обхода не является листом]. а) Если F имеет след fi... fn, какой след имеет FD? (См. упр. 27.) б) Сколько лесов имеют след 10101101111110000101010001011000? в) Докажите, что fj - [dj =0], 1 < j < п, с использованием обозначений из (6). г) Два элемента решетки называются комплементарными, если их наибольшая нижняя граница представляет собой нижний элемент, а наименьшая верхняя граница—верх- ний элемент. Покажите, что F nF комплементарны в решетке Тамари тогда и только тогда, когда их следы комплементарны в том смысле, что /{ ... f'n-i = fi fn-i- 31. [М28] Бинарное дерево с п внутренними узлами называется вырожденным, если его высота равна п. а) Сколько среди n-узловых бинарных деревьев являются вырожденными? б) В табл. 1—3 мы видели, что бинарные деревья и леса могут быть закодированы раз- личными n-кортежами чисел. Поясните для каждой из кодировок ci... Сп, di.. .dn, ei... еп, ki... kn, pi.. .pn, si... sn, tii.. .un и zi ... zn, как можно, бегло взглянув на кодировку, сказать, вырождено ли соответствующее бинарное дерево. в) Истинно или ложно следующее утверждение? Если F вырождено, то вырождено и FD. г) Докажите, что если F и F' вырождены, то вырождены uFAF1 = F.LF',uFvF = FTF'. 32. [МЗО] Докажите, что если F Ч F', существует лес F" такой, что для всех G F' J.G = F тогда и только тогда, когда F Ч G Ч F". Следовательно, в решетке Тамари выполняются полудистрибутивные законы: из F±G = F±H вытекает F 1(GT Я) = F ±G; из FTG = FTH вытекает FT (G±Н) = FT G. 33. [А/27] (Представление деревьев с помощью перестановок.) Пусть о представляет собой цикл (12 ... п). а) Докажите, что для заданного бинарного дерева, узлы которого пронумерованы от 1 до п в симметричном порядке обхода, существует единственная перестановка А мно- жества {1,...,п}, такая, что для 1 < к < п {кХ, если кХ < к; ( каХ, если каХ > к-, „ RLINKEH = { ’ 0 в противном случае; (0 в противном случае. Таким образом, А аккуратно упаковывает 2п полей связей в единый п-элементный массив.
536 КОМБИНАТОРНЫЙ ПОИСК 7.2.1.6 б) Покажите, что эту перестановку А наиболее легко можно описать в циклическом виде, когда бинарное дерево является представлением “левый брат/правый потомок” леса F. Как выглядит циклический вид A(F), если представляет собой лес (2)? в) Найдите простое соотношение между A(F) и дуальной перестановкой A(Fr>). г) Докажите, что в упр. 26 F' покрывает F тогда и только тогда, когда A(F') = (j к) A(F), где j и к являются братьями в F. д) Следовательно, количество максимальных цепочек в решетке Кревераса порядка п равно количеству способов разложения n-цикла в виде произведения п — 1 транспози- ций. Вычислите это значение. Указание: см. формулу 1.2.6-(16). 34. [М25] (Р. П. Стенли (R. Р. Stanley).) Покажите, что количество максимальных цепо- чек в решетке Стенли порядка п равно (п(п — 1)/2)!/(1”-13”-2 ... (2п — 5)2(2п — З)1). 35. [ЛМ37] (Д. Б. Тайлер (D. В. Tyler) и Д. Р. Хиккерсон (D. R. Hickerson).) Объясните, почему все знаменатели в асимптотической формуле (16) являются степенями 2. 36. [Л/25] Проанализируйте алгоритм генерации тернарных деревьев, приведенный в упр. 20,(6). Указание: в соответствии с упр. 2.3.4.4-11 всего имеется (2п + 1)-1(3„) тернарных деревьев с п внутренними узлами. 37. [Mj0] Проанализируйте алгоритм Закса-Ричардса для генерации всех деревьев с дан- ным распределением no, ni, пг, ..., nt степеней (упр. 21). Указание: см. упр. 2.3.4.4-32. 38. [М22] Чему равно общее количество обращений к памяти, выполняемых алгорит- мом L, выраженное как функция от п? 39. [22] Докажите формулу (23), показав, что элементы Ард в (5) соответствуют диаграм- ме Юнга с двумя строками. 40. [М22] (а) Докажите, что Ср, нечетно тогда и только тогда, когда р& (д + 1) = 0, т. е. когда бинарные представления р и q + 1 не имеют общих битов, (б) Следовательно, Сп нечетно тогда и только тогда, когда п + 1 является степенью 2. 41. [М21] Покажите, что баллотировочные числа имеют простую производящую функ- цию 52 Cp4w₽z’ 42. [М22] Сколько непомеченных лесов с п узлами являются (а) самосопряженными? (б) самотранспонированными? (в) самодуальными? (См. упр. 11, 12, 19 и 26.) 43. [М21] Выразите Ср, через числа Каталана (Со, Ci, Сг,.. -). Целью является получе- ние простой формулы для малых величин д — р. (Например, С(,_2), = Сд — C,~i.) 44. [М27] Докажите, что алгоритм В делает 8| + О(п-1) обращений к памяти на одно посещенное бинарное дерево. 45. [М26] Проанализируйте обращения к памяти, выполняемые алгоритмом из упр. 22. Сравните полученное значение со значением для алгоритма В. 46. [МЗО] (Обобщенные числа Каталана.) Обобщим соотношения (21), определив Срд(х) = Cp(g-t)(x) + а/,-,,С(р_1),(а;), если0<р<д/0; Соо (г) = 1; и Ср,(х) = 0, если р < 0 или р > д; таким образом, Ср, = Ср,(1). Пусть также Сп(х) = Спп(х), так что (С0(х), Ci(x),...) = (1,1,1+ х, 1 + 2а; + х2 + х3,1 + За; + За;2 + Зх3 + 2а:4 + х& + а:6,...). а) Покажите, что [a;fc]Cp,(a:)— количество путей от @) до (65) в графе (28), которые имеют площадь к, где “площадь” пути представляет собой количество прямоугольных ячеек над ним. (Таким образом, L-образный путь имеет максимально возможную площадь, равную р(д — р) + (Q.)
7.2.1.6 ГЕНЕРАЦИЯ ВСЕХ ДЕРЕВЬЕВ 537 б) Докажите, ЧТО Сп(х) = ХС1+ "+Сп = Ер Sc"™"*внутреннегопутиСР), где сумма берется по всем n-узловым лесам F. в) Покажите, что если C(x,z) = Е^=о Cn(x)zn, то C(x,z) = 1 + zC(x,z)C(x,xz). г) Кроме того, С(х, z)C(x, xz)... С(х, xrz) = Cp(p+r)(x)zp. 47. [Л127] Продолжая выполнять предыдущее упражнение, обобщите тождество (27). 48. [М28] (Ф. Раски (F. Ruskey) и А. Проскуровски (A. Proskurowski).) Вычислите СРЧ(х) при х = — 1 и используйте полученный результат, чтобы показать, что “идеальный” код Грея для вложенных скобок при нечетном п > 5 невозможен. 49. [17] Какова миллионная в лексикографическом порядке строка из 15 вложенных пар скобок? 50. [20] Разработайте алгоритм, обратный алгоритму U: для данной строки вложенных скобок ai... а2п определите ее ранг N — 1 в лексикографическом порядке. Чему равен ранг (1)? 51. [М22] Пусть Z1Z2 • • • z„ является дополнением Z1Z2 ... zn до 2п; другими словами, Zj — 2n — Zj, где Zj определено в формуле (8). Покажите, что если Z1Z2 ... zn представляет собой (N + 1)-е п-сочетание {0,1,..., 2п — 1}, сгенерированное алгоритмом 7.2.1.3L, то Z1Z2 ... zn является (N — nnN + 1)-м п-сочетанием {1,2,..., 2п}, сгенерированным алгоритмом из упр. 2. (Здесь кп означает n-ю функцию Крускала, определенную в 7.2.1.3-(60).) 52. [М23] Найдите среднее и дисперсию величины dn из табл. 1 при случайном выборе строки вложенных скобок ai... а.2п- 53. [М28] Пусть X — расстояние от корня расширенного бинарного дерева до крайнего слева внешнего узла, (а) Каково математическое ожидание значения X, если все бинарные деревья с п узлами равновероятны? (б) Каково математическое ожидание значения X в случайном бинарном дереве поиска, построенном с использованием алгоритма 6.2.2Т на основе случайной перестановки Ki... Кп? (в) Каково математическое ожидание зна- чения X в случайном вырожденном (в смысле упр. 31) бинарном дереве? (г) Каково математическое ожидание значения 2х во всех трех случаях? 54. [НМ29] Чему равны математическое ожидание и дисперсия ci Ч--1- Сп (см. упр. 46)? 55. [KMSS] Вычислите Ср,(1)—общую площадь всех путей в упр. 46, (а). 56. [М23] (Ренцо Спруньоли (Renzo Sprugnoli), 1990.) Докажите формулу суммирования „ „ 1 _ 2т — п ( 2т \ (2п — 2т X „ } CkCn-i-k = -zCn + т—г——гт ( ) ( ) ДЛЯ 0 < т < п. 2 2п(п + 1) X т / \ п — т / к=0 ' 57. [М28] Выразите суммы Sp(a, b) = Et>o {^-к) (ь^к) кР в аналитическом виде для р = 0, 1, 2, 3 и используйте полученные формулы для доказательства (30). 58. [KMS^] Обозначим через timn количество n-узловых бинарных деревьев, в которых внешний узел т (при нумерации внешних узлов в симметричном порядке обхода от 0 до п) находится на уровне I. Пусть также tmn = E/Li так что tmn/Cn—средний уровень внешнего узла т\ и пусть t(w,z)—сверхпроизводящая функция 52 = (l+w)z + (3+4w+3i02)z2 4- (9+13w+13w2+9w3)z3 + • • •. m,n Докажите, что t(w,z) - (C(z) — wC(viz))/(l — w) — 1 + zC(z)t(w,z) + wzC(wz)t(w, z), и выведите простую формулу для чисел tmn. 59. [НМ29] Аналогично пусть Timn—количество всех n-узловых бинарных деревьев, в ко- торых внутренний узел т находится на уровне I. Найдите простую формулу для Ттп = Еь=1
538 КОМБИНАТОРНЫЙ ПОИСК 7.2.1.6 60. [М26] (Сбалансированные строки.) Строка вложенных скобок а является атомар- ной, если она имеет вид (а'), где а' — строка вложенных скобок; каждая строка вложен- ных скобок может быть единственным способом представлена как произведение атомов ai... аТ. Строка с равным количеством левых и правых скобок называется сбалансирован- ной; каждая сбалансированная строка может быть единственным способом представлена как /31 ...fir, где каждое /37 является либо атомом, либо соатомом (обращением атома). Дефектом сбалансированной строки является половина длины ее соатомов. Например, сбалансированная строка (()))((())))))(()((())((())(() I___I Ш I___I I___________I I__I LJ LJ LJ имеет разложение РгРЬРъРьРьРбРтРи = сцсс? а3а?с четырьмя атомами и че- тырьмя соатомами; ее дефект равен («20:40:50:71/2 = 9. а) Докажите, что дефект сбалансированной строки равен количеству индексов к, для которых к-я правая скобка предшествует к-й левой скобке. б) Если строка Pt... рг сбалансирована, ее можно отобразить на строку вложенных ско- бок простым обращением ее соатомов. Однако описанное далее отображение более интересно, поскольку производит несмещенные (равномерно распределенные) строки вложенных скобок из несмещенных сбалансированных строк. Пусть имеется s соато- мов /3<! = а£, ..., Pi, = а£. Заменим каждый соатом на ‘С; затем добавим строку )сц, ...)aq, где ctj = (,a'j). Например, приведенная выше строка отображается на строку ai (аз((а6(а8)а'7)а5)а4)а2, которая представляет собой строку (1) из начала данного раздела. Разработайте алгоритм, применяющий это отображение к заданной сбалансированной строке Ь\... Ьгп. в) Разработайте также алгоритм для обратного отображения: для данной строки вложен- ных скобок а = ai... а2П и целого числа 0 < I < п он должен находить сбалансирован- ную строку /3 = bi... i>2n с дефектом I, для которой /3 >-> а. Какая сбалансированная строка с дефектом 11 отображается на строку (1)? 61. [М26] (Лемма Рани (Raney) о цикле.) Пусть Ъ^Ь^-.-Ьц— строка неотрицательных целых чисел, такая, что f = N — bi — 62 — • • • — Ьц > 0. а) Докажите, что свойству последовательности степеней леса в прямом порядке обхода из упр. 20 удовлетворяют ровно f циклических сдвигов bj+i... btrbi ...bj, 1 < j < N. б) Разработайте эффективный алгоритм для определения всех таких j для заданной строки bli>2 • • • b^r. в) Поясните, как сгенерировать случайный лес с N = по Ч-1- nt узлами, в котором сте- пень j имеет nj узлов. (Например, в качестве частного случая этой общей процедуры при N = tn+ 1, по = (t — 1)пЧ- 1, ni = • • = nt-i = 0 и nt = п мы получаем случайные п-узловые t-арные деревья.) 62. [22] Бинарное дерево может быть также представлено битовыми строками (h 1п, П ...Tn), где lj и rj указывают, пусты ли левое и правое поддеревья узла j в прямом порядке обхода (см. теорему 2.3.1А). Докажите, что если h ... 1п и тт ... гп—произвольные битовые строки, такие, что h Ч-1- 1п Ч- п Ч 1- rn = п — 1, то только один циклический сдвиг (/>+1.. .Inh -lj,rj+i.. .rnri.. .rj) дает корректное представление бинарного дерева, и поясните, как его найти. q 63. [16] Если первые две итерации алгоритма Реми дают щ Y) , то какие декорированные бинарные деревья возможны после очередной итерации? Й Й 64. [20] Какая последовательность значений X в алгоритме R соответствует декориро- ванным деревьям из (34) и каковы конечные значения LoLt... £12? 65. [56] Обобщите алгоритм Реми (алгоритм R) для t-арных деревьев.
7.2.1.6 ГЕНЕРАЦИЯ ВСЕХ ДЕРЕВЬЕВ 539 66. [21] Деревом Шрёдера называется бинарное дерево, в котором каждая ненулевая пра- вая связь окрашена либо в белый, либо в черный цвет. Вот количества Sn деревьев Шрёдера для небольших п. п=01234567 8 9 10 11 12 Sn= 1 1 3 11 45 197 903 4 279 20793 103049 518859 2 646723 13648869 Например, S3 = 11, как видно из приведенных вариантов: (Белые связи изображены как “пустотелые”; на рисунке показаны также внешние узлы.) а) Найдите простое соответствие между деревьями Шрёдера с п внутренними узлами и обычными деревьями с п + 1 листьями и без узлов степени 1. б) Разработайте код Грея для деревьев Шрёдера. 67. [М22] Какова производящая функция S(z) = Snzn для чисел Шрёдера? 68. [10] Что собой представляет шаблон рождественской елки нулевого порядка? 69. [20] Содержатся ли в табл. 4 шаблоны рождественской елки порядков 6 и 7, возможно, в замаскированном виде? ► 70. [20] Найдите простое правило, которое определяет для каждой битовой строки ст другую битовую строку ст', которая называется напарником (mate) первой строки и об- ладает следующими свойствами: (i) ст" = ст; (ii) |ст'| = |ст|; (iii) либо ст С ст', либо ст' С ст; (iv) i/(ct) + р(ст') = |ст|. 71. [М21] Пусть Mtn — размер наибольшего возможного множества S, состоящего из n-битовых строк, обладающих тем свойством, что если ст и т являются членами S, такими, что ст С т, то р(т) < р(ст) +1. (Таким образом, например, Min = Мп согласно теореме Спернера.) Найдите формулу для Mtn- ► 72. [М28] Если начать с единственной строки cti стг ... стя длиной s и применить к ней правило роста (36) п раз подряд, то сколько строк мы получим? 73. [15] Каковы первый и последний элементы строки шаблона рождественской елки порядка 30, содержащей битовую строку 011001001000011111101101011100? 74. [М26] Продолжая выполнять предыдущее упражнение, ответьте, сколько строк пред- шествует указанной в нем строке? ► 75. [НМ23] Пусть (г^^, ,..., ) — номера строк, в которых шаблон рождественской елки порядка п содержит п — 1 элементов; например, из табл. 4 видно, что (г,8^,..., г?8*) = (20,40,54,62,66,68,69). Найдите формулы для — т^п) и для lim„_>oo г^/Мп- 76. [HMJff] Рассмотрите предельную форму шаблонов рождественской елки при п —> оо. Имеет ли она, например, фрактальную размерность при выборе некоторого подходящего масштабирования? 77. [21] Разработайте алгоритм для генерации последовательности крайних справа эле- ментов <ц ... ап строк шаблона рождественской елки для заданного п. Указание: эти битовые строки характеризуются тем свойством, что ai Ч--I- ajt > k/2 для 0 < к < п. 78. [20] Истинно или ложно следующее утверждение? Если cti ... стя—строка шаблона рождественской елки, то ею же является и строка ст^ ... dj1 (обращенная последователь- ность обращенных дополнений). 79. [М2б] Количество перестановок pi ...рп, у которых имеется ровно один “спуск” на котором рк > Pfc+i, равно согласно 5.1.3-(12) числу Эйлера (”) = 2П — п — 1. Количество элементов в шаблоне рождественской елки, расположенных выше нижней строки, такое же.
540 КОМБИНАТОРНЫЙ ПОИСК 7.2.1.6 а) Найдите комбинаторное пояснение этого совпадения, приведя взаимно однозначное со- ответствие между перестановками с одним спуском и неотсортированными битовыми строками. б) Покажите, что две неотсортированные битовые строки принадлежат одной и той же строке шаблона рождественской елки тогда и только тогда, когда они соответствуют перестановкам, которые определяют одну и ту же диаграмму Р при соответствии Робинсона-Шенстеда (теорема 5.1.4А). 80. [30] Будем говорить, что две битовые строки совместимы, если одну из них можно получить из другой путем преобразования подстрок 010 <-> 100 и 101 <-> 110. Например, строки 011100 о 011010 о 010110 о 010101 о 011001 $ $ 100110 о 100101 о 101001 о 110001 взаимно совместимы, но ни одна другая строка не совместима ни с одной из приведенных. Докажите, что строки взаимно совместимы тогда и только тогда, когда они принадле- жат одному и тому же столбцу шаблона рождественской елки и строкам одинаковой длины в этом шаблоне. 81. [ЛГЗО] Биклаттером (biclutter) порядка (п,п') называется семейство S пар битовых строк (сг, сг'), где |<т| = п и |<т'| = п', обладающих тем свойством, что для различных членов (а, а') и (т,т') семейства S условия а С т и а' С г' выполняются, только если а / т на' / т'. Воспользуйтесь шаблонами рождественской елки для того, чтобы доказать, что S содержит не более Мп+п> пар строк. 82. [М26] Пусть E(f)— количество вычислений функции f алгоритмом Н. а) Покажите, что Мп < E(f) < Mn+i, причем равенство достигается, когда f—кон- станта. б) Какая из всех функций /, таких, что E(f) = Мп, минимизирует /(сг)? в) Какая из всех функций /, таких, что E(f) = Af„+i, максимизирует /(сг)? 83. [М20] (Д. Хансель (G. Hansel).) Покажите, что существует не более 3м" монотонных булевых функций f(xi,..., хп) от п булевых переменных. 84. [НМ27] (Д. Кляйтман (D. Kleitman).) Пусть А—матрица действительных чисел раз- мером тп х п, каждый столбец v которой имеет длину ||t)|| > 1, и пусть b—пг-мерный вектор-столбец. Докажите, что не более Мп векторов-столбцов х = (oi,... ,ап)т с компо- нентами aj = 0 или 1 удовлетворяют условию ||Аг — Ь|| < |. Указание: воспользуйтесь конструкцией, аналогичной шаблону рождественской елки. 85. [ЛЛ/35] (Филипп Голль (Philippe Golle).) Пусть V — произвольное векторное про- странство, содержащееся во множестве всех действительных n-мерных векторов, но не содержащее ни одного из единичных векторов (1,0,..., 0), (0,1,0,..., 0), ..., (0,..., 0,1). Докажите, что V содержит не более Мп векторов, все компоненты которых равны 0 или 1; кроме того, верхняя граница Мп достижима. 86. [15] Если (2) рассматривать как ориентированный лес, а не как упорядоченный, то какой канонический лес ему соответствует? Укажите этот лес как с использованием кодов уровней ci... Cis, так и с помощью указателей на родительские узлы pi .. . pis- 87. [М20] Пусть F—упорядоченный лес, в котором fc-й в прямом порядке обхода узел находится на уровне с*,, а его родительский узел—рь, причем если узел представляет собой корень, то рь = 0. а) Сколько лесов удовлетворяет условию cjt = рь для 1 < к < п?
7.2.1.6 ГЕНЕРАЦИЯ ВСЕХ ДЕРЕВЬЕВ 541 б) Предположим, что F и F' имеют коды уровней сг ... сп и c'j... с'п соответственно и родительские связи Pi... рп и р{ ...р'п. Докажите, что лексикографически Cj... сп < c'j ... с'п тогда и только тогда, когда рг... рп <p'i-..p'n. 88. [М20] Проанализируйте алгоритм О: как часто выполняется шаг 04? Чему равно общее количество изменений рк на шаге 05? 89. [MJ6] Как часто на шаге 05 выполняется присваивание рк «— pj? 90. [М27] Если pi... рп — каноническая последовательность указателей на родительские узлы для ориентированного леса, то граф с вершинами {0,1,..., п} и ребрами {А: —рк | 1 < к < п) является свободным деревом, т. е. связным графом без циклов (см. теорему 2.3.4.1А). И обратно: каждое свободное дерево соответствует таким способом как минимум одному ориентированному лесу. Однако указатели на родительские узлы 011 и ООО дают одно и то же свободное дерево аналогично 012 и 010 дают • • Цель данного упражнения—наложить на последовательности pi...pn ограничения с тем, чтобы каждое свободное дерево получалось только один раз. В 2.3.4.4-(9) было доказано, что количество структурно различных свободных деревьев с п + 1 вершинами имеет весьма простую производящую функцию. С этой целью было показано, что свобод- ное дерево всегда имеет как минимум один центроид. а) Покажите, что канонический n-узловой лес соответствует свободному дереву с одним центроидом тогда и только тогда, когда ни одно дерево в лесу не имеет больше [п/2] узлов. б) Модифицируйте алгоритм О для генерации всех последовательностей pi.. .рп, удо- влетворяющих пункту (а). в) Поясните, как найти все pi .. .рп для свободных деревьев с двумя центроидами. 91. [М37] (Ньенхыоз (Nijenhuis) и Вильф (Wilf).) Покажите, что случайное ориентиро- ванное дерево может быть сгенерировано с помощью процедуры, аналогичной алгоритму случайного разбиения из упр. 7.2.1.4-47. 92. [15] Являются ли первое и последнее остовные деревья, посещенные алгоритмом S, смежными в том смысле, что они имеют п — 2 общих ребер? 93. [20] Восстанавливает ли алгоритм S первоначальное состояние графа по завершении работы? 94. [22] Алгоритм S требует “прокрутить стартер” т. е. найти начальное остовное дерево на шаге S1. Поясните, как это сделать. 95. [26] Завершите алгоритм S, реализовав проверку моста на шаге S8. 96. [28] Проанализируйте приближенное время работы алгоритма S, когда передаваемый ему граф представляет собой (а) путь Рп длиной п — 1; (б) цикл Сп длиной п. 97. [15] Является ли граф (48) последовательно-параллельным? 98. [15] Какой последовательно-параллельный граф соответствует графу (53), если узел А — последовательный? 99. [35] Рассмотрим последовательно-параллельный граф, представленный деревом, как в (53), со значениями узлов, удовлетворяющими условию (55). Эти значения определяют остовное или близкое дерево в соответствии с тем, равно ли значение vp корня р единице или нулю. Покажите, что описанный далее метод генерирует все прочие конфигурации корня. i) Вначале все непростые узлы являются активными, а все остальные—пассивными. ii) Выбираем крайний справа активный узел р (в прямом порядке обхода); если все узлы пассивны, завершаем работу.
542 КОМБИНАТОРНЫЙ ПОИСК 7.2.1.6 iii) Изменяем dp <— гар, обновляем все значения в дереве и посещаем новую конфигура- цию. iv) Активизируем все непростые узлы справа от р. v) Если dp прошло по всем дочерним узлам р, поскольку р—последний ставший актив- ным узел, делаем узел р пассивным. Возвращаемся к шагу (ii). Поясните также, как эффективно выполнить описанные шаги. Указание: для реализации шага (v) введите указатель zp; делайте узел р пассивным, когда dp становится равным zp, и в этот момент сбрасывайте также значение zp, делая его равным предыдущему зна- чению dp. Для реализации шагов (ii) и (iv) воспользуйтесь фокусными указателями fp, аналогичными используемым в алгоритмах 7.2.1.1L и 7.2.1.1К. 100. [40] Реализуйте “алгоритм S' двери-вертушки” для генерации всех остовных дере- вьев путем комбинирования алгоритма S и идей из упр. 99. 101. [^6] Имеется ли простой способ перечисления в порядке двери-вертушки всех пп~2 остовных деревьев полного графа Кп? (Порядок, получаемый с использованием алгорит- ма S, достаточно сложен.) 102. [46] Ориентированным остовным деревом ориентированного графа Den верши- нами, известным также как “остовная древовидность” (spanning arborescence), является ориентированное поддерево графа D, содержащее п — 1 дуг. Теорема о матрице, соот- ветствующей дереву (упр. 2.3.4.2-19), гласит, что ориентированные поддеревья, имеющие данный корень, могут быть легко подсчитаны путем вычисления детерминанта размером (п — 1) х (п — 1). Можно ли перечислить эти поддеревья в порядке двери-вертушки, при котором на каждом шаге происходит удаление одной дуги и замещение ее другой? 103. [-ИЛ/35] (Барханы.) Рассмотрим произвольный ориентированный граф D с вершина- ми Vo, Vi, ..., V„ и дугами dj от К к Vj, где ец = 0. Будем считать, что D имеет как минимум одно ориентированное остовное дерево с корнем в Vo; это предположение означат ет, что если мы соответствующим образом перенумеруем вершины, то будут выполняться соотношения ею + • • • + еД£-1) > 0 для 1 < i < п. Пусть di = ею + ••• + е<п— общая исходящая степень вершины V. Поместим х, песчинок на вершину Vi для 0 < г < п и сыграем в следующую игру. Если xt > di для любого г > 1, уменьшим xt на di и установим Xj <— Xj + e,j для всех j / г. (Другими словами, если это возможно, перешлем по одной песчинке из К по всем исходящим дугам, за исключением вершины г - 0.) Назовем эту операцию рассыпанием вершины V*, а последовательность рассы- паний—лавиной. Вершина Vo особая; вместо того чтобы рассыпать песчинки, она их собирает (и в результате они, по сути, покидают систему). Продолжаем до тех пор, пока не будет выполнено условие Xi < di для 1 < г < п. Такое состояние х = (xi,..., хп) назовем устойчивым. а) Докажите, что каждая лавина завершается устойчивым состоянием после конечного числа рассыпаний. Более того, конечное состояние зависит только от начального состояния, но не от порядка выполнения рассыпаний. б) Пусть сг(х)—устойчивое состояние, являющееся результатом начального состояния х. Устойчивое состояние называется рекуррентным, если это сг(х) для некоторого х с Xi > di для 1 < i < п. (Рекуррентные состояния соответствуют “барханам” кото- рые образовались за длинный промежуток времени после многократного случайного введения новых песчинок.) Найдите рекуррентные состояния в частном случае п = 4 и дуг D Vi -> Vo, Vi -> V2, V2 -> Vo, Vz -> Vi, V3 -> Vo, V3 -> V4, V4 -> Vo, V4 -> V3.
7.2.1.6 ГЕНЕРАЦИЯ ВСЕХ ДЕРЕВЬЕВ 543 в) Пусть d = (di,dn). Докажите, что х является рекуррентным тогда и только тогда, когда х = сг(х 4-1), где t—вектор d — <z(d). г) Пусть at—вектор (—e,i,..., ——ец<+1),..., —е™) для 1 < г < п; таким образом, рассыпание V, соответствует изменению вектора состояния х = (xi,..., хп), который становится равным х—а*. Будем говорить, что состояния хих' конгруэнтны (записывается как х = х'), если х—х' = miai +-Ь-гПпОп для некоторых целых чисел ттц, ..., т„. Докажите, что существует ровно столько же классов эквивалентности конгруэнтных состояний, сколько и ориентированных остовных деревьев в D с кор- нем Vo. Указание: см. теорему о матрице, соответствующей дереву (упр. 2.3.4.2-19). д) Докажите, что х = х', если х = х' и если и ж, и х' рекуррентны. е) Докажите, что каждый класс конгруэнтности содержит единственное рекуррентное состояние. ж) Пусть D—сбалансированный граф, в том смысле, что входящая степень каждой вершины равна ее исходящей степени. Докажите, что в таком случае х является ре- куррентным состоянием тогда и только тогда, когда х = о(х+а), где а = (ещ,..., eon). з) Проиллюстрируйте эту концепцию для случая, когда D представляет собой “колесо” с п спицами, когда всего имеется Зп дуг, Vj —> Vb и Vj О Vj+i для 1 < j < п, где вершина Vb+i рассматривается как идентичная Vi. Найдите взаимно однозначное со- ответствие между ориентированными остовными деревьями этого ориентированного графа и рекуррентными состояниями его барханов. и) Аналогично проанализируйте рекуррентные барханы, когда D является полным гра- фом из п + 1 вершин, а именно когда etj = для 0 < i,j < п. Указание: см. упр. 6.4-31. 104. [НМ21] Пусть G—граф с п вершинами {Vi,..., Vb} и с ребрами etj между V и Vj. Обозначим через C(G) матрицу с элементами ctj = —etj + btjdt, где dt = e*i + • • • + е<„ — степень вершины Vt. Будем говорить, что сторонами (aspects) G являются собственные значения C(G), т. е. корни ао, ..., ап-1 уравнения det(a/ — C(G)) = 0. Поскольку C(G)— симметричная матрица, ее собственные значения являются действительными числами, и мы можем считать, что ао < ai < • < an-i- а) Докажите, что ао = 0. б) Докажите, что G имеет ровно c(G) = ai... an-i /п остовных деревьев. в) Чему равны стороны полного графа Кп? 105. [-ИЛ/3#] Продолжая выполнять упр. 104, мы хотим доказать, что часто есть простой путь определения сторон графа G, когда G построен из других графов, стороны которых известны. Предположим, что G' имеет стороны а{>, ..., a„z_j, a G" имеет стороны ао, ..., a"zz_!. Какими будут стороны графа G в следующих случаях? а) G = G' представляет собой дополнение G'. (Считаем, что в этом случае е'у < [г/у].) б) G = G' ф G" представляет собой прямую сумму (соединение) Gz и G". в) G = G'—G" представляет собой объединение G' и G". г) G = G'oG" представляет собой декартово произведение G' и G". д) G = L(G') представляет собой линейный граф графа G', где G' является однородным графом степени d' (т. е. все вершины G' имеют ровно по d' и в графе нет петель). е) G = G'®G" представляет собой прямое произведение (конъюнкцию) G и G", причем О' —однородный граф степени d', а G" —однородный граф степени d". ж) G = G'eiG" представляет собой сильное произведение однородных графов G' и G". з) G = G' д G" представляет собой нечетное произведение однородных графов G и G". и) G = G'oG" представляет собой лексикографическое произведение однородных графов G' и G".
544 КОМБИНАТОРНЫЙ ПОИСК 7.2.1.6 106. [НМ37] Найдите общее количество остовных деревьев (а) в решетке РтПРп размером тхп; (б) в цилиндре РтпСп размером тхп; (в) в торе CmoCn размером т х п. Почему эти числа имеют тенденцию состоять только из малых простых сомножителей? Указание: покажите, что стороны Рп и Сп можно выразить через числа Окп = 4 sin2. 107. [-М24] Определите стороны всех связных графов, содержащих п < 5 вершин и не имеющих ни петель, ни параллельных ребер. 108. [НМ40] Распространите результаты упр. 104-106 на ориентированные графы. 109. [ЛЦб] Найдите комбинаторное пояснение того факта, что (57) представляет собой количество остовных деревьев в n-мерном кубе. 110. [М27] Докажите, что если G—произвольный связный мультиграф без петель, то он имеет c(G) > V(di - 1)... (dn - 1) остовных деревьев, где dj —степень вершины j. 111. [05] Перечислите узлы дерева (58) в обратнопрямом порядке обхода. 112. [15] Если узел р в лесу предшествует узлу q в прямообратном порядке и следует за ним в порядке обратнопрямом, то что можно сказать об узлах р и q? 113. [20] Как прямообратный и обратнопрямой порядки обхода леса F соотносятся с пря- мообратным и обратнопрямым порядками обхода сопряженного леса FR (см. упр. 13)? 114. [15] Если вы хотите обойти весь лес в прямообратном порядке с применением алго- ритма Q, то с чего вы должны начать процесс? 115. [20] Проанализируйте алгоритм Q: как часто выполняется каждый из шагов алго- ритма в процессе полного обхода леса? 116. [28] Если узлы леса F помечены от 1 до п в прямообратном порядке обхода, то будем называть узел к (1 < к < п) везучим, если он смежен с узлом к 4-1 в F, невезучим, если он удален на три шага, и обычным в противном случае. При таком определении узел п +1 представляет собой воображаемый суперкорень, рассматриваемый как родительский для каждого корня. а) Докажите, что везучие узлы встречаются только на четных уровнях, а невезучие — только на нечетных. б) Покажите, что количество везучих узлов ровно на один больше количества невезучих узлов, кроме случая п = 0. 117. [21] Продолжая выполнять упр. 116, ответьте, сколько n-узловых лесов не содержат невезучих узлов? 118. [М28] Сколько везучих узлов имеется (а) в полном t-арном дереве с (tfc — l)/(t — 1) внутренними узлами? (б) в дереве Фибоначчи порядка к с Fk+i — 1 внутренними узлами? (См. 2.3.4.5-(6) и рис. 8 в разделе 6.2.1.) 119. [21] Скрученное биномиальное дерево Тп порядка п рекурсивно определяется прави- лами То = rrR -*0 T~yR п-1 для п > 0. уЯ (Сравните с 7.2.1.3-(21); мы обращаем порядок дочерних узлов на чередующихся уровнях.) Покажите, что прямообратный обход Тп имеет простую связь с бинарным кодом Грея. 120. [22] Истинно или ложно следующее утверждение? Квадрат графа гамильтонов, если граф связный и не имеет мостов.
7.2.1.6 ГЕНЕРАЦИЯ ВСЕХ ДЕРЕВЬЕВ 545 121. [М34] (Ф. Нойман (F. Neuman), 1964.) Производной графа G называется граф G(z), полученный путем удаления всех вершин степени 1 и ребер, которые с ними соединены. Докажите, что если Т—свободное дерево, то его квадрат Т2 содержит гамильтонов путь тогда и только тогда, когда его производная не имеет вершин степени, большей 4, и вы- полняются два следующих условия. i) Все вершины степени 3 или 4 в T(z) лежат на единственном пути. ii) Между любыми двумя вершинами степени 4 в T(z) есть как минимум одна вершина, степень которой в Т равна 2. 122. [31] (Головоломка Дьюдени (Dudeney) о представлении сотни.) Имеется много инте- ресных способов представить число 100 путем вставки арифметических операторов (и, воз- можно, скобок) в последовательность 123456789, например: 100 = 1 + 2 х 3 + 4 х 5 — 6 + 7 + 8 х 9 = (1 + 2 — 3 — 4) х (5 — 6 — 7 — 8 — 9) = ((1/((2 + 3)/4 — 5 + 6)) х 7 + 8) х9. а) Сколько всего имеется таких представлений числа 100? Чтобы сделать этот вопрос точным, с учетом закона ассоциативности и прочих алгебраических свойств, будем считать, что выражения записываются в каноническом виде в соответствии с приве- денным далее синтаксисом. (expression ) —> ( number ) | ( sum ) | ( product) | ( quotient) ( sum ) —> (term ) + (term ) | (term ) — (term ) | ( sum ) + (term ) | ( sum ) — (term ) (term ) —> ( number ) | ( product) | ( quotient) (product) —> (factor) x (factor) | (product) x (factor) | ((quotient)) x (factor) (quotient) —> (factor)/(factor) | (product)/(factor) | ((quotient))/(factor) (factor) —> (number) | ((sum)) ( number ) —> ( digit) Используемые цифры — от 1 до 9 в указанном порядке. б) Расширим задачу (а), допустив применение чисел, состоящих из нескольких цифр. (number) —> (digit) | (number)(digit) Например, 100 = (1/(2 — 3 + 4)) х 567 — 89. Какое из таких представлений наиболее короткое и какое наиболее длинное? в) Расширим задачу (б), разрешив применение десятичных точек. (number) —> (digit string) | .(digit string) (digit string) -> (digit) | (digit string)(digit) Например, 100 = (.1 — 2 — 34 x .5)/(.6 — .789). 123. [21 ] Продолжая выполнять предыдущее упражнение, ответьте, каковы наименьшие положительные целые числа, которые не могут быть представлены с использованием соглашений (а)-(в)? 124. [40] Эксперимент с методами черчения расширенных бинарных деревьев, вызванный простыми природными моделями. Например, можно назначить каждому узлу х значение v(x), именуемое числом Хортона-Стпрахлера, следующим образом. Каждый внешний узел (лист) имеет v(x) = 0; внутренний узел с дочерними узлами (/, г) имеет значение v(x) = max(v(l), v(r)) + [v(/) = v(r)]. Ребро от внутреннего узла х до его родителя можно изобра- зить как прямоугольник высотой h(v(x)) и шириной w(v(x)), а прямоугольники ребер к до- черним узлам (1,г) могут быть повернуты на углы 0(v(l(x)),v(r(x))) и — 0(v(r(x)),v(l(x))) для некоторых функций h, w и 0. На рис. 63 показаны типичные результаты при выборе w(k) = 3 + k, h(k) = 18fc, 6(к,к) = 30°, 6(j,k) = ((к + 1)/у) х 20° для 0 < к < j 18 Зак. 3331
546 КОМБИНАТОРНЫЙ ПОИСК 7.2.1.6 Рис. 63. “Органические” бинарные деревья. и e(j, к) = ((fc — j)/k) х 30° для 0 < j < к-, корни находятся внизу. На рис. 63, (а) показано бинарное дерево (4); на рис. 63, (б) —случайное 100-узловое дерево, сгенерированное алго- ритмом R; на рис. 63, (в) —дерево Фибоначчи порядка 11 со 143 узлами; а на рис. 63, (г) — случайное 100-узловое бинарное дерево поиска. (Очевидно, что деревья (б)-(г) относятся к различным видам.)
7.2.1.7 ИСТОРИЧЕСКИЕ И ИНЫЕ СВЕДЕНИЯ 547 [Эта тема] связана почти со всеми полезными знаниями, которые только может воспринять человеческий разум. — ЯКОБ БЕРНУЛЛИ (JAMES BERNOULLI), Ars Conjectandi (Искусство догадки) (1713) 7.2.1.7. Исторические и иные сведения. Первые работы по генерации комбина- торных шаблонов появились одновременно с появлением цивилизацией. Это очень интересная история, и, как мы увидим, она охватывает многие части мира и многие области человеческой деятельности, включая поэзию, музыку и религию. Здесь будут рассмотрены лишь некоторые основные вопросы, но такой краткий экскурс в историю не может не стимулировать интерес читателя и не подвигнуть его на более глубокое изучение данной темы. Списки всех кортежей из п элементов прослеживаются тысячи лет назад в древ- них Китае, Индии и Греции. Наиболее примечательный источник (в силу того, что в современном переводе эта книга стала бестселлером) —это китайская I Ching, или Yijing, что означает “Книга изменений’.’ В этой книге, одной из пяти классических книг конфуцианства, содержится ровно 26 = 64 главы; каждая глава символизирует гексаграмму, образованную из шести линий, каждая из которых имеет вид либо -- (“инь”), либо — (“ян”). Например, гексаграмма 1 представляет собой чистый ян, гексаграмма 2 — чистый инь, ||; а гексаграмма 64—чередующиеся инь и ян, причем верхним элементом является ян: Д. Вот полный список гексаграмм. Такое размещение 64 возможных вариантов называется упорядочением Вэнь-вана, так как авторство книги I Ching традиционно приписывается Вэнь-вану (ок. 1100 до н. э.), легендарному основателю династии Чжоу. К сожалению, древние тексты трудно надежно датировать, так что современные историки не видят достаточных оснований считать, что такой список гексаграмм был составлен ранее III века до н. э. Обратите внимание, что в перечне (1) гексаграммы располагаются парами: за гексаграммой с нечетным номером идет гексаграмма, представляющая собой зер- кальное отражение относительно горизонтальной оси, кроме случаев, когда гекса- грамма симметрична: в этих случаях гексаграмма спарена со своим дополнением (1 = 2, 27 = 28, 29 = 30, 61 = 62). Гексаграммы, состоящие из двух триграмм, представляющих четыре базовых элемента—воздух (=), землю (==), огонь (=н) и воду (==), — также размещаются специальным образом. Остальные гексаграммы располагаются, по сути, случайным образом. Определенные шаблоны, имеющиеся в расположении пар,—не более чем совпадения, подобные совпадениям в записи числа тг (см. 3.3-(1)). Инь и ян представляют собой взаимодополняющие стороны элементарных сил природы, всегда находящиеся в противоборстве и переходящие друг в друга. В опре- деленном смысле I Ching представляет собой тезаурус, в котором гексаграммы
548 КОМБИНАТОРНЫЙ ПОИСК 7.2.1.7 служат указателями к накопленным знаниям о фундаментальных концепциях напо- добие следующих: давать (g), брать (||), скромность (|f), радость (If), товарище- ство (В), извлечение (Й), мир (Ы), война (Ц), организация (if), коррупция (ff), незрелость (Ц), изящество (Й) и т. д. Можно выбрать пару гексаграмм случайным образом, получив вторую из первой, например, независимо заменяя каждый инь на ян и наоборот с вероятностью 1/4; такой метод дает 4096 способов размышлений об экзистенциалистских загадках, например: не может ли соответствующий марков- ский процесс приоткрыть тайну смысла жизни? Строгий логический способ упорядочения гексаграмм был создан Шао Юном (Shao Yung) около 1060 года н. э. Его лексикографическое упорядочение от || к 1=> к М> к И> к Н> к ’ ’ ’> к И> к Й (читать каждую гексаграмму нужно снизу вверх) существенно более понятное, чем порядок Вэнь-вана. Когда Г. В. Лейбниц (G. W. Leibniz) изучал эту последовательность гексаграмм в 1702году, он пришел к ложному выводу о том, что китайские математики были знакомы с бинарной арифметикой. [См. Frank Swetz, Mathematics Magazine 76 (2003), 276-291. Дополни- тельную информацию об I Ching можно найти, например, в Joseph Needham, Science and Civilisation in China 2 (Cambridge University Press, 1956), 304-345; R. J. Lynn, The Classic of Changes (New York: Columbia University Press, 1994).] Другой древнекитайский философ, Ян Сюн (Yang Hsiung), предложил систему, основанную на 81 тернарной тетраграмме вместо 64 бинарных гексаграмм. Его Канон высшего таинства (Canon of Supreme Mystery), написанный около 2 года до н. э., был не так давно переведен на английский язык Майклом Найланом (Michael Nylan) (Albany, New York: 1993). Ян описывает структуру полного иерархического тернарного дерева, в которой имеется три края, по три провинции в каждом крае, по три департамента в каждой провинции, по три семьи в каждом департаменте, и по девять коротких стихов (именуемых “оценками” (appraisals)) на каждую семью, следовательно, всего 729 стихов, т. е. почти в точности два стиха на каждый день года. Его тетраграммы располагаются в строгом лексикографическом порядке при чтении сверху вниз: ==, =, ==, =н, ==, ===, ..., ===- В действительности, как поясняется в книге Найлана (с. 28), Ян разработал простой способ вычисления ранга каждой тетраграммы, как если бы он пользовался троичной системой счисления. Таким образом, нас не должно удивлять упорядочение бинарных гексаграмм Шао Юном, хотя он и жил более чем на тысячу лет раньше. Индийское стихосложение. Бинарные кортежи из п элементов изучались в со- вершенно ином контексте мудрецами Древней Индии, посвятившими себя священ- ным ведическим песнопениям. Слоги в санскрите либо короткие (I), либо длинные (S), а изучение шаблонов слогов называется просодией (prosody). Современные авторы вместо символов I и S используют символы и —. Типичная ведическая строфа состоит из четырех строк с п слогами в строке для некоторого п > 8. Таким образом, нужен способ классификации всех 2П возможных шаблонов. В классичес- кой работе Пингалы (Pingala) Чандасутра (Chandahsastra), написанной до 400 года н. э. (вероятно, существенно ранее — точно неизвестно), описана процедура поиска индекса к любого заданного шаблона, состоящего из и —, а также поиск шаблона для заданного значения fc. Другими словами, Пингала пояснил, как найти ранг данного шаблона и как найти шаблон по заданному рангу. Таким образом, он за- шел в своих исследованиях дальше Ян Сюня (Yang Hsiung), который рассматривал
7.2.1.7 ИСТОРИЧЕСКИЕ И ИНЫЕ СВЕДЕНИЯ 549 только задачу поиска ранга, но не поиска шаблона по заданному рангу. Методы Пингалы также связаны с возведением в степень, как мы видели ранее в связи с алгоритмом 4.6.3А. Следующий важный шаг был сделан просодистом Кедараой (Kedara) в его книге Vrttaratnakara, которая, как считают, была написана в VIII веке. Кедара пошаго- во описал процедуру перечисления всех кортежей из п элементов от----------... — к ...—, к ——...—, к —...—, к ^...—, к —^...—, к • • •, к т. е., по сути, алгоритм 7.2.1.1М для основания системы счисления, равного 2. Его метод можно считать первым явным алгоритмом для генерации комбинаторной последовательности. [См. В. vanNooten, J. Indian Philos. 21 (1993), 31-50.] Стихотворные измерения можно также рассматривать как ритмы, с одним так- том для каждого и двумя для каждого —. Хотя n-тактовый шаблон может включать от п до 2п тактов, музыкальные ритмы для маршей и танцев обычно основываются на фиксированном количестве тактов. Следовательно, естествен- но рассматривать множество всех последовательностей и —, содержащих фик- сированное количество тактов, равное т. Такие последовательности называются последовательностями кода Морзе длиной т, и из упр. 4.5.3-32 известно, что их ровно Ето+1. Например, 21 последовательность для т = 7 имеет вид (2) Таким путем индийские просодисты пришли к открытию последовательности Фи- боначчи, как уже отмечалось в разделе 1.2.8. Кроме того, анонимный автор Prakrta Paingala (ок. 1320 г.) разработал элегант- ный алгоритм для определения ранга ритма и восстановления ритма по рангу для m-тактовых ритмов. Чтобы найти к-Ъ шаблон, начинаем с записи т символов затем выражаем разность d = Fm+1 —кв виде суммы чисел Фибоначчи -|-----Fljt; здесь Fj! — наибольшее число Фибоначчи < d, Fj2 — наибольшее число Фибоначчи < d — Fj!, и так до тех пор, пока не будет получен нулевой остаток. Тогда такты j — 1 и j заменяются с на — для j = ji, ..., jt- Например, для получения пятого элемента последовательности (2) вычисляем 21 — 5 = 16 = 13 + 3 = F? + F4; в результате ответом является —. Несколькими годами позже Нараяна Пандита (Narayana Pandita) рассматривал более общую задачу поиска всех композиций числа т, части которых < q, где q— любое заданное положительное целое число. Как следствие он открыл последо- вательности Фибоначчи g-го порядка 5.4.2-(4), которые пригодились через 600 лет после этого в многофазной сортировке; он также разработал соответствующие алго- ритмы определения ранга элемента и элемента с заданным рангом. [См. Parmanand Singh, Historia Mathematica 12 (1985), 229-244, и упр. 16.]
550 КОМБИНАТОРНЫЙ ПОИСК 7.2.1.7 Пингала дает специальные имена всем трехсложным измерениям: -------------=------------(т), --------------= (у), —---= Г (г), — = (s), = а- (t), = *r(j), = (bh), = * (n), (3) и с тех пор все изучающие санскрит должны заучивать их наизусть. Давным-давно кто-то разработал способ запоминания этих кодов, придумав несуществующее слово yamatarajabhanasalagam (ЩТТгПТГзГЧТЧТГгТПТЧ’). Смысл в том, что десять слогов этого слова можно записать как ya ma ta га ja bha па sa la gam, (4) после чего каждый трехсложный шаблон начинается с его имени. Происхождение слова уата... lagam неизвестно, но Сабхаш Как (Subhash Как) [Indian J. History of Science 35 (2000), 123-127] проследил его до книги С. Р. Brown, Sanskrit Prosody (1869), с. 28; таким образом, его можно считать наиболее ранним известным “циклом де Брейна” для кодирования бинарных п-кортежей. Тем временем в Европе. Классическая греческая поэзия также основана на груп- пах коротких и/или длинных слогов, называемых метрической стопой, аналогично тактам в музыке. Каждый базовый тип стопы получил греческое имя; например, два коротких слога ‘ ’ получили имя пиррихий, а два длинных слога ‘-’ получили имя спондей, поскольку эти ритмы использовались соответственно в песнях войны (itupplxT)) и мира (aTtovSai). Греческие названия метрических стоп ассимилировались латынью и в конечном счете современными языками, в том числе английским. арсис (arsis) — тезис (thesis) —пиррихий (pyrrhic) — ямб (iambus) —хорей (трохей) (trochee) ----спондей (spondee) трибрахий (tribrach) —— анапест (anapest) амфибрахий (amphibrach) '-s---бакхий (bacchius) ----дактиль (dactyl) —— амфимакр (amphimacer) ----антибакхий (palimbacchius) ------молосс (molossus) гиперпиррихий (прокелевсама- тик) (proceleusmatic) четвертый пеон (fourth р?оп) третий пеон (third р?оп) ионик меньший (нисходящий) (minor ionic) второй пеон (second р?оп) диямб (diiambus) антиспаст (antispast) первый эпитрит (first epitrite) первый пеон (first р?оп) хориямб (choriambus) дихорей (дитрохей) (ditrochee) второй эпитрит (second epitrite) ионик больший (восходящий) (major ionic) третий эпитрит (third epitrite) четвертый эпитрит (fourth epit- rite) диспондей (dispondee)
7.2.1.7 ИСТОРИЧЕСКИЕ И ИНЫЕ СВЕДЕНИЯ 551 Зачастую используются альтернативные имена, например “хорей” (choree) вместо “трохей ” (trochee) или “кретик” (cretic) вместо “амфимакр” (amphimacer). Бо- лее того, во времена, когда Диомед (Diomedes) писал свою латинскую грамматику (ок. 375 г. н. э.), каждой из 32 пятисложных стоп было присвоено как минимум одно имя. Диомед также указал на отношения между дополняющими шаблонами; он привел пример трибрахия и молосса как противоположностей, подобно амфибра- хию и амфимакру. Однако он также рассматривал как противоположности дактиль и анапест, а также бакхий и антибакхий, хотя сам термин palimbacchius означает “обратный бакхий” У греков не было стандартного порядка перечисления стоп, а их названия никак не связаны с бинарными числами. [См. Н. Keil, Graxnmatici Latini 1 (1857), 474-482; W. von Christ, Metrik der Griechen und Romer (1879), 78-79.] Дошедшие до нас фрагменты работы Аристоксена (Aristoxenus) под названием Элементы ритмов (ок. 325 г. до н. э.) показывают, что та же терминология приме- нялась и в музыке. Эти традиции пережили эпоху Возрождения; например, в книге Athanasius Kircher, Musurgia Universalis 2 (Rome: 1650) на с. 32 можно встретить следующий фрагмент. Pyrrichitu и и 1мпЬш и — Кирхер описал все трех- и четырехнотные ритмы, соответствующие (5). Ранние списки перестановок. Мы уже проследили историю формулы для под- счета перестановок в разделе 5.1.2; однако нетривиальные списки перестановок не публиковались еще сотни лет после того, как была открыта формула п!. Первая из таких известных ныне таблиц была составлена итальянским врачом Шаббетаи Донноло (Shabbetai Donnolo) в его комментариях к каббалистической книге Sefer Yetzirah, написанной в 946 году. В табл. 1 приведен его список для п = 5 в том виде, в котором он был опубликован в Варшаве в 1884 году. (Буквы иврита в этой таблице написаны с использованием средневекового стиля, традиционно применявшегося в комментариях; обратите внимание, что буква Ю заменяется буквой О на левом конце слова.) Донноло перечислил все 120 перестановок шестибуквенного слова 153Р5В, начинающиеся с буквы ‘Б’; затем он отметил, что следующие 120 перестановок можно получить при использовании другой буквы в качестве первой, т. е. всего 720 перестановок. Его список включает группирование по шесть перестановок, но оно выполнено случайным образом, что и привело к ошибке (см. упр. 4). Хотя Дон- ноло и знал общее количество перестановок и перестановок, начинающихся с данной буквы, алгоритма для их генерации у него не было. Полный список всех 720 перестановок множества {a, b,c,d,e,f} имеется на с. 668-671 книги Jeremias Drexel, Orbis Phaethon (Munich: 1629); в Кёльнском изда- нии 1631 года этот список находится на с. 526-531. Автор приводит его в качестве доказательства того, что хозяин может размещать шестерых гостей за завтраком и обедом разными способами в течение года—всего 360 дней; пять дней в го- ду он отвел для поста на Страстной неделе. Вскоре после этого Марен Мерсенн (Marin Mersenne) привел все 720 перестановок шести нот {до, ре, ми, фа, соль, ля} на
552 КОМБИНАТОРНЫЙ поиск 7.2.1.7 Таблица 1 Средневековый список перестановок ,3*»77 ,*3»77 ,03*77,3»*77 ,*»377 , 0’337 ,*»737 ,*7»37 ,7*»37 ,7»*37 ,07*37 ,0*737 ,37*07 ,73*07 ,3*707 ,*3707 ,*7307 ,7»ЗЮ7 ,730*7 ,370*7 ,703*7 ,ЗЮ7*7,037*7 ,073*7 ,707*3 , 770*3 ,770*3 , 077*3 ,077*3 ,707*3 ,7*073 ,*7073 , 0*773 ,*0773 ,07’73 ,70’73 ,07*73 , 70*73 , 0*773 ,*0773 ,*7073 ,7*073 , 77*03 ,7*703 ,*7703 , 7’703 ,7*703 ,*7703 ,3*077,0*377 ,30*77 ,03*77 , *0377 ,*5077 ,703’7 , 073’7 ,307*7 ,037*7 ,730*7 , 370*7 ,*3707 ,*7307 , 7*3D7 ,3*707 ,73*07,37*07 ,7*037 ,70*37 , 07*37 , 0*737 ,*0737 ,*7037 ,3707’ ,3D77* ,7307’ ,7037* ,0377’ ,0737* ,7370* ,7370* ,7730* ,7730* ,3770* ,3770* ,3077’ ,0737* ,7037* ,7307* ,3077* ,0377* ,7703* ,7703* ,7073* ,0773* ,7073* ,0773* ,*7730 ,*7730 ,77*30 ,7*730 ,77*30,7*730 ,3*770,37*70 ,73*70,7*370 ,*377D ,*7370 737*0 , 377*0 ,773*0 ,773*0 , 377*0 ,737*0 ,37*70 ,73*70 , 7*370 , 3*770 ,*7370 ,*3770 с. 111115 своей книги Traitez de la Voix et des Chants (2-й том Harmonie Universelle, 1636); далее, на с. 117-128, он привел те же данные в нотной записи. Таблица Дрекселя организована лексикографически по столбцам; таблицы Мер- сенна упорядочены лексикографически в соответствии с отношением до < ре < ми < фа < соль < ля и начинаются с “до, ре, ми, фа, соль, ля” а заканчиваются “ля, соль, фа, ми, ре, до” Мерсенн также подготовил огромную рукопись, в которой перечислил все 40320 перестановок восьми нот на 672 страницах, после чего при- вел алгоритмы для поиска ранга перестановки и перестановки по заданному рангу [Bibliotheque nationale de France, Fonds Francais, no. 24256]. Из раздела 7.2.1.2 мы знаем, что важные идеи алгоритма 7.2.1.2Р были разра- ботаны в Англии несколькими годами позднее. Методы перечисления всех перестановок мультимножества с повторяющимися элементами часто неверно понимались ранними авторами. Например, когда Бхаска- ра (Bhaskara) представил перестановки множества {4,5,5,5,8} в разделе 271 своей книги Lilavati (ок. 1150г.), он привел их в следующем порядке. qVXXX х^хх Х^^ХХ хх'ххх ХХХ*С хххс;* *х^хх *ххс;х (6) vxxxc; ЦХ'и'ХХ 5ХХ*Х SXXX* х^х^х х^х*х хх*хс; ХХ^Х* X^XXs Хс;ХХ* Мерсенн использовал более практичный, но не совсем систематический порядок при перечислении шестидесяти анаграмм слова IESVS (“Иисус” в латинской транскрип- ции) на с. 131 своей книги. Когда Анастасиус Кирхер решил проиллюстрировать 30 перестановок пятинотной мелодии на с. 10-11 книги Musurgia Universalis 2 (1650), такое отсутствие системы привело его к неприятностям (см. упр. 5). -дот- (7)
7.2.1.7 ИСТОРИЧЕСКИЕ И ИНЫЕ СВЕДЕНИЯ 553 Джон Уоллис (John Wallis) справился со своей задачей успешнее. На с. 117 своей книги Discourse of Combinations (1685) он корректно перечислил 60 анаграмм слова “messes” в лексикографическом порядке, если считать m < е < s; а на с. 126 он рекомендовал использовать алфавитный порядок, “при котором мы можем быть уверены, что ничего не пропустим” Позже мы увидим, что индийские ученые Сарнгадева (Sarngadeva) и Нараяна (Narayana) разработали теорию генерации перестановок в XIII и XIV веках, но эти работы опередили свое время и остались незамеченными. Список Секи. Такаказу Секи (Takakazu Seki) (1642-1708) был харизматичным учи- телем и ученым, революционизировавшим изучение математики в Японии XVII ве- ка. При изучении исключения переменных из систем однородных уравнений он пришел к выражениям типа щбг — 02^1 и а^сз — а^ЬзСъ + 026301 — а^сз + азЬ^с? — азЬ^Ст, которые сегодня известны как определители (детерминанты). В 1683году он опубликовал брошюру с этим открытием, в которую включил остроумную схе- му для перечисления всех перестановок таким образом, чтобы одна половина из них были “живыми” (четными), а другая половина— “мертвыми” (нечетными). Начиная со случая п = 2, когда ‘12’ — живая перестановка, а ‘21’ — мертвая, он сформулировал следующие правила для п > 2. 1) Возьми каждую живую перестановку для п — 1, увеличь все ее элементы на 1 и вставь 1 впереди. Это правило дает (п—1)1/2 “базовых перестановок” множе- ства {1,... ,п}. 2) Из каждой базовой перестановки образуй 2п других перестановок путем пово- ротов и отражений: 6116Z2 • • • 6Zn—1 66n j ^2 ••• 6Zn—1 6Zn®l, • • • , OnOi 6Z2 • • • On—1, (8) OnOn—1 ••• O2O1, О j On On—1 ... O2, ... i^TTTo2Oi On* ~-x (9) Если n нечетно, перестановки в первой строке живые, а во второй—мертвые; если п четно, перестановки в каждой строке чередуются—живая, мертвая, ..., живая, мертвая. Например, при п = 3 единственной базовой перестановкой является 123. Таким образом, перестановки 123, 231, 312—живые, в то время как перестановки 321, 132, 213—мертвые, и мы успешно генерируем шесть членов определителя 3x3. Базовыми перестановками при п = 4 являются 1234, 1342, 1423; скажем, из 1342 мы получаем множество из восьми элементов, а именно + 1342 - 3421 + 4213 - 2134 + 2431 - 1243 + 3124 - 4312, (10) с чередующимися живыми (+) и мертвыми (—) перестановками. Определитель 4x4, таким образом, включает члены 6I163C46/2 — 0364026/1 + • • — 0463016/2, а также шестнадцать других. Правило Секи для генерации перестановок достаточно привлекательно, но, к со- жалению, у него имеется серьезная проблема: оно не работает при п > 4. Похоже, однако, что эта ошибка оставалась незамеченной столетиями. [См. Y. Mikami, The Development of Mathematics in China and Japan (1913), 191-199; Takakazu Seki’s Collected Works (Osaka: 1974), 18-20, —-—И—; и упр. 7-8.] •
554 КОМБИНАТОРНЫЙ ПОИСК 7.2.1.7 Списки сочетаний. Наиболее ранний исчерпывающий список сочетаний, выдер- жавший разрушительное действие времени, находится в главе 63 последней книги Сусруты (Susruta), известном медицинском трактате на санскрите, написанном до 600года (вероятнее всего, намного ранее). Заметив, что лекарства могут быть слад- кими, кислыми, солеными, острыми, горькими и вяжущими, Сусрута старательно перечислил все (15,20,15,6,1,6) случаи, когда одновременно встречаются два, три, четыре, пять, шесть и одно из этих качеств. Бхаскара (Bhaskara) повторил этот пример в разделах 110-114 своей книги Lilavati и заметил, что те же самые рассуждения применимы и к шестисложным стихотворным шаблонам с заданным количеством длинных слогов. Однако он про- сто упомянул их количества, (6,15,20,15,6,1), без перечисления самих сочетаний. В разделах 274 и 275 он заметил, что числа (n(n — 1)... (п — к + l))/(fc(fc — 1)... (1)) указывают количество композиций, т. е. упорядоченных разбиений, однако и это замечание сделано без приведения полного списка. Рассмотрим этот вопрос вкратце, избегая многословия, поскольку наука о вычислениях—безбрежный океан. — БХАСКАРА (BHASKARA) (ок. 1150 г.) Отдельный, но интересный список сочетаний приведен в знаменитой работе по алгебре Al-Bahir S’l-hisab (Блистательная книга о вычислениях), написанной аль- Самавалем (al-Samaw’al) из Багдада в 1144 году, когда ему было всего лишь 19 лет. В заключительной части работы он представил список из (g°) = 210 линейных уравнений с 10 неизвестными. Арабский оригинал аль-Самаваля Ао Ао£ГА) 1 V- VoDTY) » Vo AoDTY) A А) VAAVtt bj V- V A AV А о Эквивалентная современная_запис (1) xi + Х2 + х3 + xt + хе = 65 (2) xi + хз + хз + Xi -ух5 + хз = 70 (3) xi + хз + хз + х/+ х5 + хз = 75 (209) Xi + хе + хз + хз + хд + но = 91 (210) х5 + хе + хз + хз + хд + гм = 100 Каждое сочетание шести из десяти элементов дает одно из уравнений. Целью аль- Самаваля, несомненно, была демонстрация переопределенной системы уравнений, которая, тем не менее, имеет единственное решение; для приведенной системы это (xi,x2, - • • ,я:1о) = (1,4,9,16,25,10,15,20,25,5). [Salah Ahmad and Roshdi Rashed, Al-Bahir en Algebre d’As-Samaw’al (Damascus: 1972), 77-82, YIA-VYV] Игральные кости. Определенный проблеск в области элементарной комбинато- рики был и в средневековой Европе, особенно в связи с вопросом о всех возможных сочетаниях выпадения трех костей. Разумеется, всего имеется (|) = 56 способов выбрать три элемента из шести при разрешенных повторениях. В то время азартные игры были официально запрещены, но это не помешало упомянутым 56 способам стать общеизвестными. Около 965 года епископ Вибольд (Wibold) из Камбраи на севере Франции разработал игру под названием Ludus Clericalis, дабы ею могли насладиться смиренные пастыри, оставаясь при этом достаточно набожными. Его
7.2.1.7 ИСТОРИЧЕСКИЕ И ИНЫЕ СВЕДЕНИЯ 555 идея состояла в том, чтобы связать с каждым набором очков одну из 56 добродете- лей в соответствии с приведенной таблицей. НИИ Любовь ВЕЕ ВеРа ЕВЕ Надежда ВЕЕ Справедливость ЕВЕ Благоразумие НИЙ Умеренность ЕЕЕ Храбрость ЕЕЕ Дружелюбие ЕЕЕ Целомудрие ВЕЕ Милосердие I • II. ‘1ЙИ Послушание ВЕЕ Страх Божий ВЕЕ Предусмотрительность ВЕЕ Осторожность ИЕЙ Настойчивость ИЕЗЕЗ Доброжелательность ИЕНЕ Скромность ВЕЙН Смирение ВЕЕ Доброта ИЕЙ Великодушие НИИ Мудрость ЕЕЕ Сострадание ЕЕЕ Радость ЕЕЕ Воздержанность ЕЕЕ Удовлетворенность ЕЕЙ Безмятежность ЕЕЕ Мастерство ЕЕЕ Простота ЕЕЕ Гостеприимство ЕЕЙ Бережливость ЕЕЕ Терпение ЕЕЕ Усердие ЕЕЙ Бедность ЕЕЕ Мягкость ЕЕЙ Девственность Ейй Уважение ЕЕЕ Благочестие ЕЕЕ Снисхождение ЕЕЕ Молитва ЕЕЙ Привязанность ЕЕЕ Суд Божий ЕЕЕ Бдительность ИЕЙ Покорность ИЕЕ Невинность ИЕЙ Раскаяние НИИ Исповедь ЕЕЕ Зрелость ЕЕЕ Забота ЕЕЙ Постоянство ЕЕЕ Ум ЕЕЙ Томление ПИН Плач НЕЕ Веселье ЕЕЙ Сочувствие Ейй Самообладание Ийй Повиновение Игроки бросают кости, и первый, у кого выпало сочетание очков, соответствующее некоторой добродетели, получает ее. После того как все сочетания окажутся вы- павшимщпобедителем становится наиболее добродетельный из игроков. Вибольд заметил, чтолюббвБ—наивысшая добродетель из всех. Он разработал сложную систему подсчета очков, по которой две добродетели могли комбинироваться, если сумма очков на всех шести когтях добродетелей равнялась 21; например, так можно скомбинировать “любовь + повиновение” или “целомудрие+ум” и такие комбинации ценились выше любых отдельных добродетелей. Вибольд рассматривал и более сложные варианты игры, в которых вместо точек на костях использовались гласные буквы. При первом описании (примерно 150 лет спустя) игры Балдериком (Balderic) в его Cbronicon Cameracense таблица Вибольда была представлена в лексикогра- фическом порядке, как это сделано выше. [Patrotogia Latina 134 (Paris: 1884), 1007-1016.] Однако в другом средневековом манускрипте возможные результаты бросания костей представлены в совсем ином порядке. Ийй НЕЕ ЕЕЕ ЙЙЕ ЕЕЕ ЙЙЕ ЕЕЕ ЕЕЙ □□В ЕЕЕ ЙЙЕ |х)|х)Е ЙЙЕ ЕЕЕ ЕЕЕ ЕЕЙ ЕЕЕ ЕЕЕ ЕЕЕ ЕЕЕ ЕЕЙ ЕЕЕ ЕЕЕ ЕЕЕ ЕЕЕ ЕЕЙ ЕЕЕ (12) ЕЕЕ ЕЕЕ ЕЕЕ ЕЕЙ ВЕЕ ЕЕЕ ВЕЕ □ЕЕ ЙЕЕ ЕЕЕ ЕЕЕ ЕЕЕ ЙЕЕ ПЕВ ПЕВ ЕЕЕ ЙЕЕ ЙЕЕ ИЕЕ ПЕВ ЕЕЕ ЕЕЕ ЕЕЕ ЕЕЕ ЙЕЕ ЕЕЕ ЙЕЕ НЕЕ В этом случае автор знал, как следует поступить с повторяющимися значениями, но использовал очень сложный, разработанный для данной конкретной задачи способ
556 КОМБИНАТОРНЫЙ ПОИСК 7.2.1.7 обработки ситуаций, когда очки на всех трех костях различны. [См. D. R. Bellhouse, International Statistical Review 68 (2000), 123-136.] В начале 1400-х годов было написано забавное стихотворение для вечеринок, “Chaunce of the Dyse” приписываемое Джону Лидгейту (John Lydgate). Его на- чальные строфы приглашают каждого бросить три игральные кости; в остальных строфах, индексированных в обратном лексикографическом порядке от ЦЗЙЗЙЗ до Д° ’' Д° ШИШ» приводится 56 веселых описаний характера бросающего. [Полный текст опубликован Э. П. Хаммонд (Е. Р. Hammond) в Englische Studien 59 (1925), 1-16; перевод на современный английский язык был бы очень кстати.] I pray to god that euery wight may caste Vpon three dyse ryght as is in hys herte Whether he be rechelesse or stedfaste So moote he lawghen outher elles smerte He that is gilty his iyfe to convene They that in trouthe haue suffred many a throwe Moote ther chaunce fal as they moote be knowe. — The Chaunce of the Dyse (ok. 1410 r.) Раймунд Луллий. Значительный вклад в комбинаторные концепции внесен энер- гичным донкихотствующим каталонским поэтом, писателем-романистом, энцикло- педистом, преподавателем, мистиком и миссионером по имени Раймунд Луллий (Ramon Llull) (ок. 1235-1315 гг.). ПодхОдЛуллия к знаниям состоял, по сути, в опре- делении базовых принципов с последующиКкрассмотрением всех возможных их сочетаний. \ Например, одна из глав его Ars Compendiosa Inveniendi Veritatem (ок. 1274 г.) начинается с перечисления шестнадцати свойств, присущих Богу: доброта, величие, бессмертие, могущество, мудрость, любовь, добродетель, истина, слава, совершен- ство, справедливость, великодушие, милосердие, скромность, владычество и тер- пение. Затем Луллий пишет = 120 кратких эссе (приблизительно по 80 слов каждое), рассматривающих доброту Бога в связи с величием, доброту в связи с бес- смертием и т. д. В другой главе он рассматривает семь добродетелей (веру, надежду, милосердие, справедливость, благоразумие, силу духа и уверенность) и семь пороков (чревоугодие, похоть, жадность, леность, гордыню, зависть и гнев), написав = 91 подраздел, в каждом из которых попарно рассматриваются добродетель и порок. Другие главы так же систематически разделены на (®) = 28, ) = 105, (2) = 6 и (^) = 120 подразделов. (Интересно, что было бы, если бы Луллий был знаком со списком Вибольда из 56 добродетелей? Написал бы он комментарии к каждой из (526) = 1540 пар?) Луллий иллюстрировал свою методологию, изображая круговые диаграммы на- подобие приведенных на рис. 64. Фигура слева, Deus, именует шестнадцать свойств Бога—те же, которые перечислены выше, за исключением того, что любовь (атог) здесь названа волей (voluntas), а последними четырьмя являются простота, автори- тет, милосердие и владычество в указанном порядке. Каждому свойству назначена буква, и диаграмма иллюстрирует их взаимоотношения в виде полного графа на множестве вершин (В, С, D, Е, F, G, Н, I, К, L, М, N, О, Р, Q, R). Фигура справа, vir-
7.2.1.7 ИСТОРИЧЕСКИЕ И ИНЫЕ СВЕДЕНИЯ 557 Рис. 64. Иллюстрация из манускрипта, подаренного Раймундом Лулли- ем венецианскому дожу в 1280 году. [Из его Ars Demonstrative, Biblioteca Marciana, VI 200, folio 3V.] tutes et vitia, показывает семь добродетелей (b, c, d, e, f,g, h), чередующихся с семью пороками (г, к, 1,т, п, о,р); в оригинале рукописи добродетели изображены синими чернилами, а пороки—красными. Обратите внимание, что в этом случае на ил- люстрации содержатся два независимых полных графа Кт, по одному для каждого цвета. (Луллий больше не пытается сравнивать каждую отдельную добродетель с каждым отдельным пороком, поскольку и так понятно, что каждая добродетель лучше любого порока.) Тот же подход использован Луллием и тогда, когда он писал о медицине: вместо сопоставления теологических концепций в его книге Liber Principiorum Median? (ок. 1275 г.) рассматриваются сочетания симптомов и лечения. Луллий также писал книги о философии, логике, юриспруденции, астрологии, зоологии, геометрии, рито- рике и рыцарстве — всего более двухсот работ. Следует отметить, однако, высокую повторяемость его книг. Современные методы сжатия данных, вероятно, привели бы к тому, что труды Луллия после сжатия были бы существенно меньшего размера, чем, скажем, труды Аристотеля. В конечном счете Луллий решил упростить свою систему, работая в основном с группами из девяти элементов. Взгляните, например, на рис. 65, на котором в окружности, изображенной слева вверху, показаны только первые девять из всех свойств, присущих Богу (B,C,D,E,F,G,H,I,K). В ступенчатой диаграмме, распо- ложенной рядом с окружностью, приведены (®) — 36 пар свойств (ВС, BD,... ,1К). Добавив к семи две добродетели (терпение и сострадание) и к семи два порока (ложь и непостоянство), Луллий рассматривает пары добродетелей и пороков с помощью той же диаграммы. Он предложил также использовать эту диаграмму для прове- дения выборов при девяти кандидатах [см. I. McLean and J. London, Studia Lulliana 32 (1992), 21-37].
558 КОМБИНАТОРНЫЙ ПОИСК 7.2.1.7 Рис. 65. Иллюстрации из ма- нускрипта Луллия, подаренного королеве Франции (ок. 1325 г.) [Badische Landesbibliothek Karls- ruhe, Codex St. Peter perg. 92, folios 28v and 39v.] еще в окружность треугольники (см. рис. 65, слева внизу) иллюстрируют ключевой аспект подхода Луллия. Треугольник (В, С, D) означает (раз- ________., совместимость, противоположность), треугольник (Е, F, G) означает (на- чало, средина, конец), а треугольник (Н, 1,К)—(больше, равно, меньше). Эти три вложенньпс графа Кз представляют три вида трехзначной логики. Луллий ранее экспериментировал с другими такими тройками, в особенности с тройкой (истинно, неизвестно, ложно). Представление о том, как он использовал эти треугольники, можно получить, познакомившись с анализом Луллием четырех основных элементов (земля, воздух, огонь, вода). Все четыре элемента различны. Земля совместима с огнем, который совместим с воздухом, который совместим с водой, которая сов- местима с землей. Земля является противоположностью воздуху, а огонь — воде. Этим завершается анализ с использованием треугольника (В, С, D). Переходя к тре- угольнику (Е, F, G), Луллий замечает, что разные процессы в природе начинаются при доминировании одного элемента над другим; затем выполняется переход, или среднее состояние, после чего достигается конечное состояние, например воздух становится горячим. По поводу треугольника (Н, I, К) Луллий говорит, что в общем случае огонь > воздух > вода > земля по отношению к их “сферам” “скоростям” и “благородству”; тем не менее мы также имеем, например, воздух > огонь по отношению к поддержанию жизни, а при совместной работе воздух и огонь равны.
7.2.1.7 ИСТОРИЧЕСКИЕ И ИНЫЕ СВЕДЕНИЯ 559 На рис. 65 справа приведена вертикальная таблица, смысл которой станет по- нятен из упр. 11. Луллий также разработал подвижные концентрические колеса, помеченные буквами (В, С, D, Е, F, G, Н, I, К) и другими именами, что позволило ему работать со многими разнообразными типами элементов одновременно. Работая таким способом, верный последователь Луллия мог быть уверен, что рассматривает все возможные случаи. [Луллий мог видеть подобные колеса в ближайшей еврейской общине; см. М. Idel, J. Warburg and Courtauld Institutes 51 (1988), 170-174, а также вклейки 16 и 17.] Несколькими столетиями позже Анастсиус Кирхер (Athanasius Kircher) опуб- ликовал развитие системы Луллия как часть большого тома, озаглавленного Ars Magna Sciendi sive Combinatoria (Amsterdam: 1669), в котором на с. 173 имелось пять подвижных колес. Кирхер также расширил множество используемых Лул- лием полных графов Кп, приведя иллюстрации полных двудольных графов Кт,п\ например, рис. 66 взят со с. 171 книги Кирхера; на с. 170 той же книги показан граф К18Д8- Рис. 66. Граф Kg,g опубликованный Кирхером в 1669 году. Это искусство исследовать и изобретать. Когда идеи комбинируются всеми возможными способами, новые комбинации открывают новые пути для размышлений и приводят к открытию новых истин и аргументов. — МАРТИН ГАРДНЕР (MARTIN GARDNER), Логические машины и диаграммы (Logic Machines and Diagrams) (1958) Наиболее далеко идущим современным развитием методов в духе Луллия, ве- роятно, является работа Иосифа Шиллингера (Joseph Schillinger) The Schiliinger System of Musical Composition (New York: Carl Fischer, 1946), замечательный двух- томник, рассматривающий теории ритма, мелодии, гармонии, контрапунктов, ком- позиции, оркестровки и прочего с точки зрения комбинаторики. Например, на с. 56 Шиллингер перечисляет 24 перестановки {a, b, с, d} в порядке кода Грея (алгоритм 7.2.1.2Р); затем на с. 57 он применяет их не к мелодии, а к ритму, к длительности нот. На с. 364 он приводит симметричный цикл (2, 0, 3, 4, 2, 5, 6, 4, 0,1, 6, 2, 3,1, 4, 5, 3, 6, 0, 5, 1), (13) универсальный цикл 2-сочетаний для семи объектов {0,1,2,3,4,5,6}; другими сло- вами, (13) представляет собой эйлеров путь в Кт: вся (£) = 21 пара цифр ветре-
560 КОМБИНАТОРНЫЙ ПОИСК 7.2.1.7 чаются ровно по одному разу. Такие шаблоны—настоящая золотая жила компо- зитора, но мы должны быть благодарны за то, что лучшие ученики Шиллингера (наподобие Джорджа Гершвина (George Gershwin)) все же не ограничились строго математическим смыслом эстетики. Тако, ван Шутен и Изкуэрдо. В 1650-х годах были опубликованы еще три книги, связанные с рассматриваемой нами темой. Андрэ Тако (Andre Tacquet) написал общедоступную книгу Arithmetic? Theoria et Praxis (Louvain: 1656), которая перепечатывалась и исправлялась в течение следующих 50 лет. В конце книги, на с. 376 и 377, Тако привел процедуру для перечисления сочетаний по два, по три и т. д. Книга Франса ван Шутена (Frans vanSchooten) Exercitationes Mathematics? (Lei- den: 1657) была более серьезной и академичной. На с. 373 в ней перечислены все сочетания в виде привлекательной схемы а ----Ь'ьЬ h ’ (14) _________с. ас. ос. аос________ d. ad. bd. abd. cd. acd. bed. abed и следующие несколько страниц посвящены расширению данного шаблона при вве- дении букв е, /, д, h, г, к “и так до бесконечности’.’ На с. 376 автор замечает, что в выражении (14) можно заменить (a, b, с, d) на (2,3,5,7) и получить все делители числа 210, превышающие единицу: 2 3 6 /|ГХ 5 10 15 30 v 7 7 14 21 42 35 70 105 210 На следующей странице первоначальная идея распространяется на а CL. CLCL /-• b. ab. aab ( j с. ас. aac. be. abc. aabc таким образом позволяя иметь две буквы а. Тем не менее в действительности автор не понял это расширение; его следующий пример а а. аа а. ааа b. ab. aab. aaab b. bb. abb. aabb. aaabb (17) выполнен неверно, указывая границы знаний того времени (см. упр. 13.) На с. 411 ван Шутен замечает, что веса (a, b,c, d) = (1,2,4,8) в (14) при исполь- зовании сложения дают 1 8 9 10 11 12 13 14 15 Однако он не увидел здесь связи с двоичными числами.
7.2.1.7 ИСТОРИЧЕСКИЕ И ИНЫЕ СВЕДЕНИЯ 561 Двухтомник Себастьяна Изкуэрдо (Sebastian Izquierdo) Pharus Scientiarum (Ly- on: 1659)—“Маяк науки”—включает в себя хорошо организованное обсуждение комбинаторики под заголовком “Disputatio 29, De Combinatione” Автор приво- дит детальное обсуждение четырех ключевых частей “двенадцатизадачия” Стенли, а именно п-кортежей, n-размещений, п-мультисочетаний и n-сочетаний из т объек- тов, которые находятся в первых двух строках и двух столбцах табл. 7.2.1.4-1. В разделах 81-84 De Combinatione автор перечисляет (в лексикографическом порядке) все сочетания т букв по п для 2<п<5ип<т<9;он также протабулировал их для т = 10 и 20 при п = 2 и 3. Но при перечислении rn- размещений т элементов по п он использовал более сложный порядок (см. упр. 14). Изкуэрдо был первым, кто открыл формулу (m+n-1) для сочетаний т элемен- тов по п с неограниченными повторениями; это правило встречается в §48-51 его книги. Но в §105, при попытке перечислить все такие сочетания при п = 3, он не знает, что существует простой способ сделать это. Фактически его перечисление 56 случаев для т = 6 больше напоминает старый запутанный порядок (12). Сочетания с повторениями не были хорошо поняты до тех пор, пока в 1713 году не вышла книга Якоба Бернулли (James Bernoulli) Ars Conjectandi (“Искусство догадки”). В части 2, главе 5, Бернулли просто перечислил все возможности в лек- сикографическом порядке и показал, что формула (m+„-1) является простым след- ствием применения индукции. [Никколо Тарталья (Niccolo Tartaglia), кстати, близко подошел к получению этой формулы в своей книге General trattato di numeri, et misure 2 (Venice: 1556), 17г и 69v; то же справедливо и в отношении магрибско- го математика Ибн Мунима (Ibn Mun'im) и его книги Fiqh al-Hisab, написанной в XIII веке.] Нулевой случай. Перед тем как завершить наше рассмотрение ранних работ по сочетаниям, следует вспомнить небольшой, но важный шаг, сделанный Джоном Уоллисом (John Wallis) на с. НО книги Discourse of Combinations (1685), где он, в частности, рассматривает сочетание 0 объектов из тп элементов: “очевидно, что, когда мы выбираем Ничто, то мы тем самым оставляем Все, а это можно сделать только одним способом, сколько бы объектов у нас ни было” Кроме того, на с. 113, он утверждает, что (£) = 1: “(в этом случае выбрать все или оставить все означает одно и то же)’.’ Однако, приводя таблицу факториалов п\ для п < 24, он не зашел настолько далеко, чтобы указать, что 0! = 1 или что имеется ровно одна перестановка пустого множества. Работа Нараяны. Замечательная монография Ganita KaumudI (“Наслаждение ло- тосом вычислений”), написанная Нараяной Пандита (Narayana Pandita) в 1356году, не так давно стала известной за пределами Индии благодаря переводу на английский язык Парманандом Сингхом (Parmanand Singh) [Ganita Bharati 20 (1998), 25-82; 21 (1999), 10-73; 22 (2000), 19-85; 23 (2001), 18-82;' 24 (2002), 35-98]; см. также диссертацию Таканори Кусуба (Takanori Kusuba) из Brown University (1993). Гла- ва 13 книги Нараяны, озаглавленная Anka Pasa (“Соединение чисел”), посвящена комбинаторной генерации. Хотя 97 “сутр” этой главы довольно загадочны, в них содержится исчерпывающая теория, опередившая мировую науку в этой области на несколько столетий.
562 КОМБИНАТОРНЫЙ ПОИСК 7.2.1.7 Например, в сутрах 49-55а Нараяна описывает генерацию перестановок и приво- дит алгоритм для перечисления всех перестановок в уменьшающемся солексном по- рядке, приводя при этом способ вычисления ранга данной перестановки и получения перестановки по ее рангу. Эти алгоритмы появились более чем на сто лет раньше в известной работе Sangitaratnakara (“Добыча жемчуга музыки”), принадлежащей перу Сарнгадевы (Sarngadeva), в §1.4.60-71. Таким образом, Сарнгадева, по сути, открыл факториальное представление положительных целых чисел. В сутрах 57-60 Нараяна развил алгоритмы Сарнгадевы так, чтобы было можно легко выполнять перестановки мультимножеств общего вида; например, он перечисляет перестановки мультимножества {1,1,2,4} в уменьшающемся солексном порядке: 1124,1214,2114,1142,1412,4112,1241,2141,1421,4121,2411,4211. В сутрах 88-92 Нараяна занимается систематической генерацией сочетаний. Помимо иллюстрации сочетаний элементов множества {1,..., 8} по три, а именно (678, 578, 478, ..., 134, 124, 123), он также рассматривает представление этих сочетаний в виде битовых строк в об- ратном порядке (возрастающий солексный порядок), тем самым развивая метод Бхаттотпалы (Bhattotpala), разработанный в X веке: (11100000, 11010000, 10110000,... ,00010011, 00001011, 00000111). Он почти — но не до конца—открыл теорему 7.2.1.3L. Таким образом, можно вполне законно рассматривать Нараяну Пандита как основателя науки о комбинаторной генерации—несмотря на то что, как и в случае множества других пионерских работ, опередивших свое время, его работы не были хорошо известны даже в его собственной стране. Перестановочная поэзия. Обратимся теперь к одному занимательному вопросу, привлекавшему внимание ряда видных математиков XVII века; это прольет свет на состояние комбинаторных знаний в Европе того времени. Иезуитский священник Бернард Баухуис (Bernard Bauhuis) сочинил однострочную хвалу Деве Марии в виде латинского гекзаметра: Tot tibi sunt dotes, Virgo, quot sidera c?lo. (19) (“У тебя столько добродетелей, Дево, сколько звезд на небе”; см. его Epigrammatum Libri V (Cologne: 1615), 49.] Его стих побудил Эрикуса Путеануса (Erycius Puteanus), профессора университета в Лувене (University of Louvain), написать книгу Pietatis Thaumata (Antwerp: 1617), в которой он представил 1022 перестановки слов Бауху- иса. Например, у Путеануса имеются следующие варианты. 107 Tot dotes tibi, quot c?lo sunt sidera, Virgo. 270 Dotes tot, c?lo sunt sidera quot, tibi Virgo. 329 Dotes, c?lo sunt quot sidera, Virgo tibi tot. 384 Sidera quot c?lo, tot sunt Virgo tibi dotes. (20) 725 Quot c?lo sunt sidera, tot Virgo tibi dotes. 949 Sunt dotes Virgo, quot sidera, tot tibi c?lo. 1022 Sunt'c?lo tot Virgo tibi, quot sidera, dotes.
7.2.1.7 ИСТОРИЧЕСКИЕ И ИНЫЕ СВЕДЕНИЯ 563 Он остановился на 1022 перестановках, поскольку 1022 — это количество видимых звезд в знаменитом каталоге Птолемея (Ptolemy). Идея такой перестановки слов была хорошо известна в то время; эту игру слов в своей книге Poetices Libri Septem (Lyon: 1561), Book 2, Chapter 30, Юлиус Скалигер (Julius Scaliger) назвал “стихами-хамелеонами” (Proteus verses). Латинский язык приспособлен для перестановок наподобие (20), поскольку окончания латинских слов зачастую выражают грамматическое значение существительного, делая отно- сительный порядок слов существенно менее важным для смысла предложения, чем, например, в английском языке. Путеанус указал, однако, что он специально избегал неподходящих перестановок, таких как, например Sidera tot с?1о, Virgo, quot sunt tibi dotes, (21) поскольку они указывают не нижнюю, а верхнюю границу количества достоинств Девы Марии. [См. с. 12 и 103 книги Путеануса.] Конечно, всего имеется 8! = 40320 способов перестановки слов в строке (19). Но цель состоит не в том, чтобы получить их все—большинство из них “нечитаемо” Каждый же из 1022 стихов Путеануса соответствует строгим правилам классическо- го “гекзаметра’,’ которым следовали греческие и латинские поэты со времен Гомера и Вергилия. i) Каждое слово состоит из длинных (—) или коротких (--') слогов. ii) Слоги каждой строки относятся к одному из 32 шаблонов: {---} {--} {--}—{~} (~> Другими словами, имеется шесть метрических стоп, причем каждая из первых четырех может быть либо дактилем, либо спондеем в терминологии (5); пятая стопа обязана быть дактилем, а последняя — хореем или спондеем. Правила для определения длинных и коротких слогов в латинской поэзии в об- щем случае достаточно запутанны, но восемь слов Баухуиса соответствуют следу- ющим шаблонам: tot = —, tibi = __}, sunt = —, dotes =--, Virgo = |quot = —, sidera = —c?lo =------------. (23) Обратите внимание, что у поэтов есть по два варианта при использовании слов ‘tibi’ и ‘Virgo’. Таким образом, например, строка (19) укладывается в шаблон гекзаметра Tot ti-bi sunt do- tes, Vir- go, quot si-de-ra c?-lo. ' ' (Дактиль, спондей, спондей, спондей, дактиль, спондей; “там-тата там-там там-там там-там там-тата там-там” Запятые представляют небольшие паузы при чтении сти- ха, именуемые “цезурами” (c?suras); здесь они не рассматриваются, хотя Путеанус аккуратно вставил их в каждую из 1022 перестановок.) Возникает естественный вопрос: если переставить слова Баухуиса случайным образом, то каковы шансы, что получится гекзаметр? Другими словами, сколько
564 КОМБИНАТОРНЫЙ поиск 7.2.1.7 перестановок подчиняются правилам (i) и (ii) с учетом шаблонов из (23)? Г. В. Лейб- ниц (G. W. Leibniz) рассматривал этот вопрос среди прочих в своей работе Dissertatio de Arte Combinatoria (1666), которая была опубликована, когда он претендовал на место в Университете Лейпцига. В то время Лейбницу было всего 19 лет, и по большей части он был самоучкой, так что его понимание комбинаторики было весьма ограниченным; например, он считал, что имеется 600 перестановок мно- жества {до, до, ре, ми, фа, соль} и 480 — множества {до, до, ре, ре, ми, фа}, и даже утверждал, что (22) представляет 76 вариантов, а не 32. [См. §5 и 8 в его задаче 6.] Однако Лейбниц понимал, что следовало бы разработать общие методы для подсчета всех “подходящих” перестановок в ситуациях, когда многие подстановки таковыми не являются. Он рассмотрел несколько примеров стихов-хамелеонов, корректно проведя подсчеты для более простых и наделав массу ошибок там, где слова оказывались сложнее. Хотя Лейбниц и упомянул работу Путеануса, он не пытался подсчитать количество гекзаметров среди перестановок строки (19). Существенно более успешный подход был предложен несколько лет спустя Жа- ном Преете (Jean Prestet) в его Elemens des Mathematiques (Paris: 1675), 342-438. Из рассмотрения вопроса Преете вытекало наличие ровно 2196 перестановок слов хвалы Баухуиса, являющихся гекзаметрами. Однако вскоре он обнаружил, что упустил некоторое количество случаев, в частности случаи 270, 384 и 725 из (20). Поэтому он полностью переписал данный материал при переиздании книги Nouveaux Elemens des Mathematiques в 1689 году. На с. 127-133 новой книги Преете показывает, что правильное количество перестановок-гекзаметров равно 3276, что почти на 50% превышает указанное им ранее число. Тем временем Джон Уоллис (John Wallis) рассмотрел данную задачу в рабо- те Discourse of Combinations (London: 1685), 118-119, опубликованной в качестве дополнения к его книге Treatise of Algebra. Объяснив, почему он считает, что корректное количество равно 3096, Уоллис допустил предположение, что он мог упустить некоторые варианты и/или сосчитать другие более чем по одному разу; “однако в настоящее время я не заметил за собой ни того, ни другого’.’ Анонимный критик работы Уоллиса указал, что верное количество перестано- вок составляет 2580, но не дал этому никакого доказательства [Acta Eruditorum 5 (1686), 289]. Этим критиком почти наверняка был Лейбниц, хотя никакого ключа к пониманию числа 2580 среди его многочисленных неопубликованных заметок найдено не было. Наконец на сцене появляется Якоб Бернулли (James Bernoulli), который в ина- угурационной лекции при вступлении в должность декана факультета философии базельского университета (University of Basel) в 1692 году упомянул данную задачу и сообщил, что аккуратный анализ дал корректный ответ, равный 3312(!) пе- рестановкам. Доказательство Бернулли было опубликовано посмертно в первом издании Ars Conjectandi (1713), 79-81. [Бернулли не собирался публиковать данные страницы в этой ныне знаменитой книге; корректор, нашедший их среди заметок, решил включить их “для удовлетворения любопытства’.’ См. Die Werke von Jakob Bernoulli 3 (Basel: Birkhauser, 1975), 78, 98-106, 108, 154-155.] Так кто же был прав? Сколько же гекзаметров среди перестановок—2196, 3276, 3096, 258р или 3312? Этот вопрос был заново рассмотрен В. А. Уитвортом (W. A. Whitworth) и В. Э. Хартли (W. Е. Hartley) в The Mathematical Gazette 2
7.2.1.7 ИСТОРИЧЕСКИЕ И ИНЫЕ СВЕДЕНИЯ 565 (1902), 227-228, где каждый из них представил элегантные доказательства и сделал выводы, что ни одно из представленных чисел не является корректным ответом. Их общим решением было 2880, и это был первый случай, когда два математика независимо получили одно и то же решение данной задачи. Но из упр. 21 и 22 вы узнаете истину: прав был только Бернулли, все остальные ошибались. Кроме того, изучение трехстраничного вывода Бернулли указывает, что он был успешен в основном потому, что последний строго придерживался метода, ко- торый сейчас называется методом с возвратом (backtrack method). Мы тщательно изучим этот метод в разделе 7.2.2, из которого также узнаем, что рассматриваемая здесь задача легко решается как частный случай задачи точного покрытия (exact cover problem). Даже мудрейшие и осторожнейшие люди часто страдают от того, что логики называют неполным перечислением возможностей. — ЯКОБ БЕРНУЛЛИ (JAMES BERNOULLI) (1692) Разбиения множеств. Похоже, впервые разбиения множеств изучались в Японии, где в 1500-е годы среди высших классов стала популярной игра генджи-ко (genji-ko). Ведущий должен скрытно выбрать пять пакетов фимиама, причем некоторые из них могут быть одинаковыми, и воскурить их по одному. Игроки должны попытаться определить, какие запахи были одинаковы, а какие различны — словом, угадать, какое из СТ5 = 52 разбиений множества {1,2,3,4,5} выбрано ведущим. Illi I Рис. 67. Диаграммы, использованные для представ- • ления разбиений множества в XVI веке в Японии. [С копии из коллекции Тамаки Яно (Tamaki Yano) из fl-j II I 1 Университета Сайтамы.] Вскоре стало привычным изображать 52 возможных варианта с помощью диа- грамм, подобных приведенным на рис. 67. Например, верхняя диаграмма при чте- нии справа налево означает, что одинаковы два первых запаха и три последних, т. е. это разбиение 121345. Две другие диаграммы представляют соответственно разбиения 124|35 и 1124135. Чтобы упростить запоминание, каждый из 52 шаб- лонов получил свое название благодаря знаменитой книге XI века г-жи Мурасаки (Murasaki) Рассказ о генджи, в соответствии с приведенной ниже последовательно- стью [Encyclopedia Japonicas (Tokyo: Sanseido, 1910), 1299]. mu mn uni inn mu inn uni mn mn irn mn inn urn mn mil mn nm nm mn mn nm irni mn mn nm imi mn nm iiffl nm mn irni mn mn imi imi mn imi mn mn irni irni mn nm imi nm nm mn irni mn mn mn (Как и во множестве других примеров, варианты здесь перечислены без какого бы то ни было логичного порядка.)
566 КОМБИНАТОРНЫЙ ПОИСК 7.2.1.7 Привлекательная природа шаблонов генджи-ко привела к тому, что многие семьи использовали их в качестве геральдических символов. Например, далее при- ведены стилизованные варианты (25), найденные в стандартных каталогах узоров кимоно начала XX века. ГСП ПП1 ПП1 ПП1 ПП1 ПШ ПП1 ПШ |Ш1 ПП1 ПШ ШП lliil 1Ш1 1йп ШП 1Ш1 ШП 11Ш mil ШП 1Ш1 1Ш1 ШП nffl liill 1Ш1пШПШ1Ш1ПШПШ1Ш1ПШПШ1Ш1ПШПШПШ k_J k_i k_k k_k k_k k_1 k_1 k_1 k_k k_k k_k k_i k_Л [См. Fumie Adachi, Japanese Design Motifs (New York: Dover, 1972), 150-153.] В начале XVIII века Такаказу Секи (Takakazu Seki) со своими учениками присту- пил к изучению количества разбиений множества wn для произвольного п, вдохнов- ленный известным результатом = 52. Ешисуке Мацунага (Yoshisuke Matsunaga) нашел формулы для количества разбиений множества, когда имеется kj подмно- жеств размером rij для 1 < j < t и fci/ii -I----1- ktnt = n (см. ответ к упр. 1.2.5-21). Он также открыл базовое рекуррентное соотношение 7.2.1.5-(14), а именно (26) шо, CTn+i — jWn > j 2 j с помощью которого легко вычислить значения w, Открытия Мацу наги оставались неопубликованными до выхода в 1769 году кни- ги Ёриюки Аримы (Yoriyuki Arima) ShUki Sanpo. Задача 56 из этой книги состоит в решении уравнения “wn = 678570” относительно п; детальное решение Аримы (с надлежащими благодарностями Мацунаке) дает ответ п = 11. Вскоре после этого Масанобу Сака (Masanobu Saka) изучал количество {£} способов разбиения множества из п элементов на к подмножеств в своей работе Sanpo-Gakkai (1782). Он открыл рекуррентную формулу к (27) и протабулировал результаты для п < 11. Джеймс Стирлинг (James Stirling) в своей работе Methodus Differentialis (1730) открыл числа {£} в чисто алгебраическом кон- тексте; таким образом, Сака был первым, кто осознал их комбинаторную важность. Интересный алгоритм для перечисления всех разбиений множества был впо- следствии открыт Тошиаки Хондой (Toshiaki Honda) (см. упр. 24). Более детальную информацию о генджи-ко и ее связи с историей математики можно найти в ста- тьях Тамаки Яно (Tamaki Yano) Sugaku Seminar 34,11 (Nov. 1995), 58-61; 34,12 (Dec. 1995), 56-60. Разбиения множеств оставались практически неизвестными в Европе до гораздо более позднего времени, за исключением трех не связанных между собой случа- ев. Во-первых, в 1589 году Георг и/или Ричард Паттенхам (George and/or Richard Puttenham) опубликовал книгу The Arte of English Poesie, на c. 70-72 которой
7.2.1.7 ИСТОРИЧЕСКИЕ И ИНЫЕ СВЕДЕНИЯ 567 содержатся диаграммы, похожие на диаграммы генджи-ко. Например, приведенные ниже семь диаграмм =$ =? ti> в в (28) использованы для иллюстрации возможных схем рифм в пятистрочных стихах, “где некоторые из них грубее и неприятнее для уха, чем иные” Но этот визуально привлекательный список был неполным (см. упр. 25). Во-вторых, неопубликованная рукопись Г. В. Лейбница (G. W. Leibniz) конца XVII века свидетельствует, что он пытался вычислить количество способов раз- биения множества {1,...,п} на три или четыре подмножества, но практически безуспешно. Он подсчитал {[J} очень громоздким методом, который не позволил ему заметить, что Q} = 2"-1 —1. Лейбниц пытался вычислить {"} и {^} только для п < 5 и сделал несколько числовых ошибок, приведших его к неверному ответу. [См. Е. Knobloch, Stadia Leibnitiana Supplementa 11 (1973), 229-233; 16 (1976), 316-321.] Третий европейский случай разбиения множества носит совершенно иной ха- рактер. Джон Уоллис (John Wallis) посвятил главу 3 своей книги Discourse of Com- binations (1685) вопросу о “кратных частях” истинных делителях чисел, в частности он изучал множество всех способов разложения данного числа на множители. Этот вопрос эквивалентен задаче о разбиениях “мультимножества”; например, разложе- ние p3q2r, по сути, то же, что и разбиения мультимножества {p,p,p,q, q, г}, где р, q ит — простые числа. Уоллис разработал превосходный алгоритм для перечисления всех разложений данного числа п, по сути, предвосхитив алгоритм 7.2.1.5М (см. упр. 28). Однако он не исследовал важные частные случаи, когда п представляет собой степень простого числа (эквивалентно разбиениям целого числа) или когда п не содержит квадратов (эквивалентно разбиениям множества). Таким образом, хотя Уоллис и смог решить более общую задачу, ее сложность парадоксальным образом увела его с пути открытия разбиений чисел, чисел Белла, количества подмножеств Стирлинга и разработки простых алгоритмов генерации разбиений целых чисел или разбиений множеств. Разбиения целых чисел. Разбиения целых чисел выходили на сцену комбинато- рики еще медленнее. Выше мы видели, что епископ Вибольд (Wibold) (ок. 965 г.) знал о разбиениях целых чисел на три части < 6. О том же знал и Галилей (Galileo), написавший о них небольшую работу (ок. 1627 г.) и изучавший частоты выпадения очков при бросании трех игральных костей. [“Sopra le scoperte de i dadi” в своей работе Орете, Volume 8, 591-594; Галилей перечислил разбиения в уменьшающемся лексикографическом порядке.] Томас Харриот (Thomas Harriot) в неопубликован- ной работе несколькими годами ранее рассматривал бросания до шести игральных костей [см. J. Stedall, Historia Math. 34 (2007), 398]. Мерсенн (Mersenne) перечислил разбиения 9 на любое количество частей на с. 130 своей книги Traitez de la Voix et des Chants (1636). Для каждого разбиения 9 = щ + • • • 4- Ofc он также вычислил полиномиальный коэффициент 9!/(<zi!... а^.); как мы видели ранее, его интересовало количество различных мелодий, например он знал, что имеется 9!/(3!3!3!) = 1680 мелодий из девяти нот {а,а,а,Ь,Ь,Ь,с,с, с}.
568 КОМБИНАТОРНЫЙ ПОИСК 7.2.1.7 Однако он не упомянул случаи 8+1иЗ + 2 + 1 + 1 + 1 + 1, вероятно, потому, что не перечислял возможности каким-либо систематическим путем. Лейбниц (Leibniz) рассматривал разбиения на две части в задаче 3 в работе Dissertatio de Arte Combinatoria (1666), а его неопубликованные заметки указывают, что впоследствии он потратил немало времени, пытаясь перечислить разбиения, состоящие из трех и более слагаемых. Он называл их (разумеется, на латыни) “discerptions” или реже “divulsions” иногда разделами (“sections”), рассеянием (“dis- persions”) или даже разбиениями (“partitions”). Они интересовали его, в первую очередь, из-за связи с мономиальными симметричными функциями д?1 гг°2.... Однако многие попытки Лейбница всегда приводили к неудаче, за исключением случая трех слагаемых, когда он почти (но не совсем) открыл формулу для |"| (см. упр. 7.2.1.4-31). Например, он аккуратно подсчитал только 21 разбиение числа 8, пропустив случай 2+2+2 + 1 + 1, а дляр(9) получил значение 26, потеряв 34-2+2+2, 3 + 2 + 2+1 + 1, 2 + 2 + 2 + 1 + 1 + 1и2 + 2 + 1 + 1 + 1 + 1 + 1, несмотря на то что пытался перечислять разбиения систематически в убывающем лексикографическом порядке. [См. Е. Knobloch, Studia Leibnitiana Supplementa 11 (1973), 91-258; 16 (1976), 255-337; Historia Mathematica 1 (1974), 409-430.] Абрахам де Муавр (Abraham de Moivre) был первым, реально достигшим успеха при изучении разбиений в своей статье “Метод возведения бесконечного многочлена в любую заданную степень или извлечение из него заданного корня” [Philosophical Transactions 19 (1697), 619-625 и рис. 5]. Он доказал, что коэффициент при zm+n в (az + bz2 + cz3 4 )т имеет по одному члену для каждого разбиения п; например, коэффициент при zm+6 равен (7)am-6b6 + 5(7)am-5b4c + 4(7)am-4b3d + б(7)ат~4Ь2с2 + 3(7)ат-3Ь2е + 6(™)am~3bcd + 2(™)am~2bf + (^а^с3 + 2(7)ат-2се + (7)am-2d2 + (Т^)ат-1д. (29) Если мы положим а = 1, то член со степенями bzcJdkel... соответствует разбиению с г единицами, j двойками, к тройками, I четверками и т. д. Так, например, при п = 6 он, по сути, получил разбиения в порядке 111111,11112,1113,1122,114,123,15,222,24,33,6. (30) Де Муавр пояснил, как перечислить разбиения рекурсивно (хотя и другим языком, связанным с его собственными обозначениями): для к = 1, 2, ..., п начинаем с к и добавляем (ранее перечисленные) разбиения п—к, наименьшая часть которых > к. [Мое решение] упорядочено перед публикацией не столько для красоты, сколько в процессе некоторых размышлений, не достойных внимания любителей истины. — АБРАХАМ ДЕ МУАВР (ABRAHAM DE MOIVRE) (1717) П. Р. деМонмор (Р. R. deMontmort) протабулировал все разбиения чисел < 9 на количество частей < 6 в своем труде Essay d’Analyse sur les Jeux de Hazard (1708) в связи с задачей об игральных костях. Его разбиения перечислены в ином, чем в (30), порядке, например 111111,21111,2211,222,3111,321,33,411,42,51,6. (31) Вероятно, он не был знаком с более ранней работой де Муавра.
7.2.1.7 ИСТОРИЧЕСКИЕ И ИНЫЕ СВЕДЕНИЯ 569 До сих пор практически никто из рассмотренных нами авторов не описывал использовавшуюся им процедуру генерации комбинаторных шаблонов. Мы можем только догадываться об их методах (или их отсутствии), изучая опубликованные ими списки. Более того, в редких случаях, таких как статья деМуавра, в кото- рой имеется явно описанный метод, автор полагает, что существуют списки всех шаблонов для случаев 1, 2, ..., п — 1, перед тем как приступить к составлению списка для п. За исключением Кедары (Kedara) и Нараяны (Narayana), ни один из авторов не привел метода генерации шаблонов “на лету” когда очередной шаблон получается из предшествующего непосредственно, без просмотра вспомогательных таблиц. Естественно, что современные программисты предпочитают более прямые методы, требующие меньшего количества памяти. Р. И. Бошкович (R. J. Boscovich) опубликовал первый прямой алгоритм для генерации разбиений в Giomale de’ Letterati (Rome, 1747), с. 393—404, вместе с двумя таблицами (с. 404). Его метод, который для п = 6 дает вывод 111111,11112,1122,222,1113,123,33,114,24,15,6, (32) генерирует разбиения в точности в обратном порядке по отношению к порядку, получаемому при работе алгоритма 7.2.1.4Р. Метод Бошковича, по сути, описан в разделе 7.2.1.4, с тем отличием, что обратный порядок приводит к несколько более простому и быстрому алгоритму, чем порядок, выбранный Бошковичем. Продолжение своей работы он опубликовал в Giornale de’ Letterati (Rome, 1748), с. 12-27 и 84-99, развив свой алгоритм в двух направлениях. Во-первых, он рас- смотрел генерацию только тех разбиений, части которых принадлежат заданному множеству S, с тем чтобы возводить в тп-ю степень символьные полиномы с разре- женными коэффициентами. (Он утверждал, что наибольший общий делитель всех элементов S должен быть равен 1; в действительности, однако, его метод может не работать, если 1 S.) Во-вторых, он разработал алгоритм для генерации разбиений п на т частей для заданных т и п. И опять ему не повезло: для решения этой задачи впоследствии был разработан более удачный алгоритм 7.2.1.4Н, что лишило Бошковича шансов на славу. Ода Гинденбургу. Изобретателем алгоритма 7.2.1.4Н был Карл Фридрих Гинден- бург (Carl Friedrich Hindenburg), который “переоткрыл” алгоритм Нараяны 7.2.1.2L, представляющий собой способ генерации перестановок мультимножества. К сожале- нию, этот маленький успех привел его к вере в то, что он совершил революционный прорыв в математике (хотя он и снизошел до упоминания других исследователей, в частности деМуавра, Эйлера и Ламберта, которые близко подошли к аналогичным открытиям). Гинденбург был в числе основателей первых математических журналов Герма- нии (издававшихся в 1786-1789 и 1794-1800 годах) и автором ряда длинных статей в них. Он неоднократно занимал должность декана в Университете Лейпцига, а в 1792 году был его ректором. Если бы он имел немного больше способностей в области математики по сравнению с тем, чем был наделен на самом деле, герман- ская математика процветала бы в Лейпциге, а не в Берлине и Геттингене. Однако первая же его математическая работа, Beschreibung einer ganz neuen Art, nach einem bekannten Gesetze fortgehende Zahlen durch Abzahlen oder Abmessen bequem und sicher zu finden (Leipzig: 1776), достаточно ярко показала, чего следует
570 КОМБИНАТОРНЫЙ поиск 7.2.1.7 ожидать: его “ganz neue” (совершенно новая) идея заключалась в придании комби- наторного смысла цифрам десятичной записи чисел. В это невозможно поверить, но Гинденбург завершил свою монографию большими таблицами—таблицей чисел от 0000 до 9999, после которой следовали таблицы четных и нечетных чисел по отдельности (!). Гинденбург публиковал письма людей, хваливших его работу, и приглашал их писать статьи в журналы. В 1796 году он редактировал Sammlung combinatoriscb- analytischer Abbandlungen, где в подзаголовке было указано, что теорема о полино- мах де Муавра является “наиболее важной во всем математическом анализе’.’ Около десятка людей объединили свои усилия и организовали то, что впоследствии стало известно как “школа комбинаторики Гинденбурга” и опубликовали тысячи страниц, заполненных эзотерическими символизмами, поражавшими воображение множества людей, не имеющих отношения к математике. С точки зрения информатики работа этой школы не может считаться совершен- но тривиальной. Например, лучший студент Гинденбурга Г. А. Роте (Н. A. Rothe) заметил, что имеется простой способ перейти от последовательности кода Морзе к следующей за ней в лексикографическом порядке или к предшествующей. Другой ученик, И. К. Буркхардт (J. К. Burckhardt), заметил, что последовательности кодов Морзе длиной тг могут быть легко сгенерированы, если сначала рассмотреть коды без тире, затем — с одним тире, далее—с двумя и т. д. Их целью была не табу- ляция стихотворных форм с тг тактами, как это делалось в Индии, а перечисление членов континуантов К(х\, х?, - -, хп), формула 4.5.3-(4). [См. Archiv der reinen und angewandten Mathematik 1 (1794), 154-195.] Кроме того, на с. 53 упоминавшегося выше Sammlung Г. С. Клюгель (G. S. Klugel) привел способ перечисления всех перестановок, который впоследствии получил название алгоритма Орда-Смита; см. формулы (23)-(26) в разделе 7.2.1.2. Гинденбург верил, что его методы заслуживают достойного места в учебных курсах алгебры, геометрии и вычислений. Однако и он, и его ученики ограничи- вались в своих работах составлением списков комбинаторных объектов. Закопав- шись в своих формулах и формализме, они редко открывали что-то действительно интересное с точки зрения математики. Ойген Нетто (Eugen Netto) замечательно охарактеризовал их работу в Geschichte der Mathematik 4 (1908), 201-219, М. Кан- тора (М. Cantor): “Какое-то время они контролировали германский рынок, но большинство из откопанного ими тут же засыпало песком забвения’.’ Грустным итогом их исследований стало то, что в результате комбинаторика в целом стала восприниматься как лженаука. Геста Миттаг-Леффлер (Gosta Mittag- Leffler), собравший великолепную библиотеку математической литературы пример- но через сто лет после смерти Гинденбурга, решил поместить все такие работы на отдельной полке, помеченной “Декаденс” Эта категория есть в шведском Институте Миттаг-Леффлера и сегодня, несмотря на то что данный институт привлекает со всего мира математиков, работающих в области комбинаторики, труды которых можно назвать как угодно, но никак не упадническими. Во всем есть хорошая сторона, и мы можем отметить как минимум одну хоро- шую книгу, появившуюся в результате всей этой деятельности. Это Die combina- torische Analysis (Vienna: 1826) Андреаса фон Эттингсхаузена (Andreas vonEttings- hausen), заслуживающая внимания как первая книга, в которой методы генерации
7.2.1.7 ИСТОРИЧЕСКИЕ И ИНЫЕ СВЕДЕНИЯ 571 комбинаторных объектов рассматриваются ясно и последовательно. Эттингсхау- зен рассмотрел общие принципы лексикографической генерации в §8 и применил их для построения метода перечисления всех перестановок (§11), сочетаний (§30) и разбиений (§41-44). А где же деревья? Итак, мы уже видели, что на протяжении всей истории человечества неоднократно составлялись списки кортежей, перестановок, сочетаний и разбиений. Таким образом, мы рассмотрели эволюцию тем из разделов 7.2.1.1- 7.2.1.5, но наш рассказ будет неполным, если мы не проследим происхождение генерации деревьев—тему раздела 7.2.1.6. Однако исторические сведения по этой теме до прихода компьютеров практи- чески отсутствуют, если не считать нескольких статей, опубликованных в XIX веке Артуром Кейли (Arthur Cayley). Главная работа Кейли по деревьям была опубли- кована в 1875 году и перепечатана в его Collected Mathematical Papers, Volume 4, на с. 427-460; она содержала большую иллюстрацию со всеми свободными деревьями не более чем с девятью непомеченными вершинами. Ранее в этой статье он также привел девять ориентированных деревьев с пятью вершинами. Методы, использо- вавшиеся Кейли для получения этих списков, были весьма сложными, совершенно отличными от алгоритма 7.2.1.60 и упр. 7.2.1.6-90. Все свободные деревья не более чем с десятью вершинами были перечислены много лет спустя Ф. Харари (F. Нагагу) и Д. Принсем (G. Prins) [Acta Math. 101 (1958), 158-162], которые дошли до п = 12 для случаев свободных деревьев, не имеющих узлов степени 2 и не обладающих симметрией. Деревья, наиболее любимые кибернетиками — бинарные деревья, или эквива- лентные упорядоченные леса, или вложенные скобки, — как ни странно, в литера- туре отсутствуют. В разделе 2.3.4.5 мы видели, что многие математики в XVIII- XIX веках изучали количество бинарных деревьев; мы также знаем, что числа Каталана Сп подсчитывают десятки разных комбинаторных объектов. Однако до 1950 года, похоже, никто не публиковал реальный список из С& = 14 объектов порядка 4 любого вида, и еще меньше авторов публиковали список из С$ = 42 объектов порядка 5. (За косвенным исключением: 42 диаграммы генджи-ко из (25), в которых нет пересекающихся линий, эквивалентны пятиузловым бинарным дере- вьям и лесам. Однако этот факт не изучался до XX века.) Имеется несколько отдельных примеров, когда в былые времена авторы состав- ляли списки из Сз = 5 объектов, связанных с числами Каталана. Здесь также пер- вым был Кейли (Cayley), который привел бинарные деревья с тремя внутренними узлами и четырьмя листьями в Philosophical Magazine 18 (1859), 374-378. А А А А А (33> (В той же статье проиллюстрированы другие разновидности деревьев, эквивалент- ные так называемым слабым упорядочениям (weak orderings).) Затем в 1901 году Э. Нетто (Е. Netto) перечислил пять способов расстановки скобок в выражении la + Ь + с + d*: (a+h)+(c+d), [(a+h)+c]+d, [a+(h+c)]+d, a+[(h-l-c)+c!], a+[h+(c+d)]. (34)
572 КОМБИНАТОРНЫЙ поиск 7.2.1.7 [Lehrbuch der Combinatorik, §122.] Пять перестановок множества {+1,+1,+1, —1, -1,-1}, частичные суммы которых неотрицательны, перечислены Палом Эрдешем (Paul Erdos) и Ирвингом Каплански (Irving Kaplansky) [Scripta Math. 12 (1946), 73-75]: l + l + l-l-l-l, l + l-l + l-l-l, l + l-l-l + l-l, l-l + l + l-l-l, 1 — 1 + 1—1 + 1—1. (35) Несмотря на то что в приведенных примерах используется только пять объектов, мы видим, что упорядочение в (33) и (34) выполнено “как получится”; и только упорядочение (35), отвечающее алгоритму 7.2.1.6Р, систематическое и лексикогра- фическое. Следует также вкратце отметить работу Вальтера фон Дика (Walther von Dyck), поскольку во многих современных статьях о строках вложенных скобок исполь- зуется термин “Слова Дика” (“Dyck words”). Дик был педагогом, помимо прочего известным как один из основателей Немецкого музея в Мюнхене (Deutsches Museum in Munich). Он написал две пионерские статьи по теории свободных групп [Math. Annalen 20 (1882), 1-44; 22 (1883), 70-108]. Так называемые слова Дика имеют очень слабое отношение к его реальным исследованиям. Он изучал слова на алфа- вите {гг!, rrf1,..., хк, хк1}, которые приводятся к пустой строке после многократного удаления пар соседних букв вида XjX^1 или х^х*, связь со скобками и деревьями возникает, только если ограничиться первым случаем, х^^1. Итак, можно заключить, что, несмотря на огромный рост интереса к бинар- ным деревьями их “родственникам” после 1950 года, такие деревья — единственный предмет нашего рассмотрения, исторические корни которого крайне неглубоки. После 1950 года. Разумеется, выход на сцену электронных вычислительных ма- шин резко изменил ситуацию. Первой ориентированной на применение компьютеров публикацией о методах комбинаторной генерации стала статья С. В. Tompkins, “Machine attacks on problems whose variables are permutations” [Proc. Symp. Applied Math. 6 (1956), 202-205]. За ней не замедлили последовать тысячи других. Ряд статей Д. Г. Лемера (D. Н. Lehmer), в частности его “Teaching combi- natorial tricks to a computer” (“Обучение компьютера комбинаторным трюкам”) в Proc. Symp. Applied Math. 10 (1960), 179-193, оказали исключительно большое влияние на исследования того времени. [См. также Proc. 1957 Canadian Math. Congress (1959), 160-173; Proc. IBM. Scientific Computing Symposium on Combina- torial Problems (1964), 23-30, и главу 1 в Applied Combinatorial Mathematics, ed. by E. F. Beckenbach (Wiley, 1964), 5-31.] Лемер оказался важным связующим звеном с предыдущими поколениями. Так, например, записи в Станфордской библиотеке свидетельствуют о том, что в январе 1932 года он изучал Lehrbuch der Combinatorik Э. Нетто (Е. Netto). Основные публикации, посвященные рассматривавшимся нами конкретным ал- горитмам, упоминались в предыдущих разделах, так что повторять их здесь нет необходимости. Однако следует упомянуть три книги, которые заслуживают особо- го внимания, поскольку именно в них были заложены общие принципы. • Mark В. Wells, Elements of Combinatorial Computing (Pergamon Press, 1971), в особенности глава 5.
7.2.1.7 ИСТОРИЧЕСКИЕ И ИНЫЕ СВЕДЕНИЯ 573 • Albert Nijenhuis and Herbert S. Wilf, Combinatorial Algorithms (Academic Press, 1975). Второе издание книги вышло в 1978 году и содержало дополнительный материал; впоследствии Вильф написал Combinatorial Algorithms: An Update (Philadelphia: SIAM, 1989). • Edward M. Reingold, Jurg Nievergelt, and Narsingh Deo, Combinatorial Algorithms: Theory and Practice (Prentice-Hall, 1977), в особенности материал главы 5. Роберт Седжвик (Robert Sedgewick) опубликовал первый серьезный обзор по мето- дам генерации перестановок в Computing Surveys 9 (1977), 137-164, 314. Второй вехой стал обзор Карлы Сэведж (Carla Savage), посвященный кодам Грея [SIAM Review 39 (1997), 605-629]. Ранее мы отмечали, что алгоритмы для генерации объектов, подсчитываемых с помощью чисел Каталана, не были созданы до тех пор, пока разработчики про- граммного обеспечения не ощутили в них потребность. Первые опубликованные алгоритмы не цитировались в разделе 7.2.1.6, поскольку были вытеснены более эффективными методами, однако здесь самое подходящее место для беглого их упоминания. Во-первых, Г. Я. Скоинс (Н. I. Scoins) привел два рекурсивных ал- горитма для генерации упорядоченных деревьев в той же статье, которую мы уже цитировали, говоря о генерации ориентированных деревьев [Machine Intelligence 3 (1968), 43-60]. Его алгоритмы работают с представлением бинарных деревьев в виде битовых строк, что, по сути, эквивалентно польской префиксной записи или вложенным скобкам. Затем Марк Уэллс (Mark Wells) в разделе 5.5.4 своей упоминавшейся выше книги генерировал бинарные деревья, представляя их в виде непересекающихся разбиений множеств. Наконец Гари Кнотт (Gary Knott) [САСМ 20 (1977), 113-115] разработал рекурсивные алгоритмы для определения ранга би- нарного дерева и получения бинарного дерева по заданному рангу, представляя деревья с помощью перестановок qi ...дп из табл. 7.2.1.6-3. Алгоритмы для генерации всех остовных деревьев заданного графа были опуб- ликованы рядом авторов еще в 1950-е годы; толчком к этому стало изучение элек- трических сетей. Вот некоторые из ранних работ в этом направлении: N. Nakagawa, IRE Trans. СТ-5 (1958), 122-127; W. Mayeda, IRE Trans. CT-6 (1959), 136-137, 394; H. Watanabe, IRE Trans. CT-7 (1960), 296-302; S. Hakimi, J. Franklin Institute 272 (1961), 347-359. В главах 2 и 3 книги Donald L. Kreher and Douglas R. Stinson, Combinatorial Algorithms: Generation, Enumeration, and Search (CRC Press, 1999), можно найти полезную информацию по всей рассматриваемой теме. Фрэнк Раски (Frank Ruskey) подготовил к изданию книгу Combinatorial Genera- tion, которая будет содержать всестороннее рассмотрение комбинаторных вопросов и исчерпывающую библиографию по данной теме. Черновики некоторых глав из этой книги можно найти в Интернете. Упражнения Во многих из предлагаемых упражнений от современного читателя требуется найти и/или исправить ошибки в литературе давно минувших дней. Цель этих упражнений отнюдь не в том, чтобы, злорадно ухмыляясь, показать, насколько мы в XXI веке умнее, а в том, чтобы понять, что даже пионеры в некоторой области могут оступаться. Полное понимание
574 КОМБИНАТОРНЫЙ ПОИСК 7.2.1.7 того, что множество идей не так просты, как может показаться на первый взгляд сегодняш- нему программисту и математику, придет к вам лишь тогда, когда вы обнаружите, как много сил вынуждены были тратить ученые мирового уровня, чтобы разобраться в этих концепциях, когда они были новинкой. 1. [25] Существует ли понятие “вычислений” (computing) в I Ching? ► 2. [МЗО] (Генетический код.) Молекулы ДНК представляют собой строки “нуклеоти- дов” из 4-буквенного алфавита {Т, С, A,G}, а большинство молекул белков представляют собой строки “аминокислот” из 20-буквенного алфавита {А, С, D, Е, F, G, Н, I, К, L, М, N, Р, Q, R, S,T, V, W, Y}. Три последовательных нуклеотида xyz образуют базовый блок — “кодон” а цепочка xiyizixiyzzi ДНК определяет белок f(xi,yi, zi)f(xz,y2, z%) ..., где f(x, у, z) —элемент в строке z и столбце у матрицы х в массиве /F S Y С\ F S Y С L S - - \L S - W/ /L Р Н R\ L Р Н R L Р Q R \L Р Q R/ / I Т N S\ I Т N S I Т К R (М Т К R; /V A D G\ V A D G V А Е G <V А Е G; (Здесь (Т, C,A,G) = (1,2,3,4); например, /(CAT) представляет собой элемент в строке 1 и столбце 3 матрицы 2, а именно Н.) Кодирование выполняется до тех пор, пока кодон не приведет к останавливающему элементу а) Покажите, что существует простой способ сопоставить каждый кодон гексаграмме из I Ching, причем 21 возможный выход {А, С, D,..., W, Y, —} соответствует 21 последо- вательной гексаграмме в упорядочении Вень-вана (1). б) Является ли это открытие сенсационным? 3. [20] Какой вид имеет миллионная строфа из 30 тактов в солексном порядке, анало- гичном порядку (2)? Каков ранг ---------------—? 4. [19] Проанализируйте недочеты списка перестановок Донноло (Donnolo) в табл. 1. 5. [15] Где ошибка в списке перестановок пяти нот Кирхера (Kircher) в (7)? в. [25] Мерсенн (Mersenne) на с. 108-110 своей книги Traitez de la Voix et des Chants (1636) опубликовал таблицу первых 64 факториалов. Его значение для 64! приближенно равно и 2.2 х 1089, в то время как оно должно быть равно ~ 1.3 х 1089. Найдите копию упомянутой книги и выясните, где он ошибся. 7. [20] Какие перестановки множества {1,2,3,4,5} являются “живыми” и “мертвыми” в соответствии с правилами Секи (Seki) (8) и (9)? ► 8. [М27] Придумайте исправление, которое нужно внести в правило (9), чтобы проце- дура Секи стала корректной. 9. [15] Выведите из (11) арабский способ записи арабских цифр (0,1,... ,9). ► 10. [НМ27] Каково математическое ожидание количества бросков костей в игре Ludus Clericalis для получения всех возможных добродетелей? 11. [21] Расшифруйте вертикальную таблицу Луллия на рис. 65 справа. Какие 20 ком- бинаторных объектов она представляет? Указание: не позвольте опечаткам ввести вас в заблуждение. 12. [М20] Свяжите универсальный цикл Шиллингера (Schillinger) (13) с универсальным циклом Пуансо (Poinsot) из упр. 7.2.1.3-106. 13. [21] Что ван Шутен (van Schooten) должен был написать вместо (17)? Приведите также соответствующую таблицу для сочетаний мультимножества {а, а, а, Ь, Ь, с}.
7.2.1.7 ИСТОРИЧЕСКИЕ И ИНЫЕ СВЕДЕНИЯ 575 14. [20] Завершите последовательность из §95 De Combinatione Изкуэрдо (Izquierdo): ABC ABD ABE ACD ACE ACB ADE ADB ADC AEB .... 15. [15] Если все n-сочетания с повторениями xi... хп множества {1,..., т] перечислить в лексикографическом порядке, причем xi < • • • < хп, то сколько из них будет начинаться с числа у? 16. [20] (Нараяна Пандита (Narayana Pandita), 1356.) Разработайте алгоритм для гене- рации всех композиций числа п на части < д, т. е. всех упорядоченных разбиений п - ai + • • • + at, где 1 < а, < q для 1 < j' < t и произвольного значения t. Проиллюстрируйте ваш метод для п = 7 и q = 3. 17. [РМ27] Проанализируйте алгоритм из упр. 16. 18. [10] Шуточный вопрос. Лейбниц (Leibniz) опубликовал свою Dissertatio de Arte Сот- binatoria в 1666 году. Чем интересен этот год с точки зрения перестановок? 19. [17] В какой из строф Путеануса (Puteanus) (20) ‘tibi’ трактуется как , а не как ч_^? 20. [М25] К визиту трех титулованных особ в Дрезден в 1617 году поэт опубликовал 1617 перестановок гекзаметра Dant tria jam Dresd?, ceu sol dat, lumina lucem (“Трое даны ныне Дрездену, как Солнце дает луч за лучом”). [Gregor Kleppis, Proteus Ро- eticus (Leipzig: 1617).] Сколько перестановок этих слов являются гекзаметрами? Указание: указанная строфа в первой и пятой стопах имеет дактили, в остальных—спондеи. 21. [НМЗО] Пусть f(p, д, г; s, t) — количество способов получить (ор, о’, о”) путем конкате- нации строк {s • о, t • оо} при р + д + г = s + 2t. Например, /(2,3,2; 3, 2) = 5, поскольку этими пятью способами являются (о|о, о|оо, оо), (о|о, оо]о, оо), (оо, о|о|о, оо), (оо, о|оо, о|о), (оо, оо|о, о|о). а) Покажите, что f(p, q, г; s, t) = [upv4wrz— zu — u2)(l — zv — v2)(l — ZUJ — uj2)). б) Воспользуйтесь функцией f для подсчета гекзаметров среди перестановок (19) при дополнительном условии, что пятая стопа не начинается посреди слова. в) Подсчитайте остальные случаи. 22. [MJ0] Познакомьтесь с решениями задачи о количестве гекзаметров среди переста- новок (19), опубликованными Преете (Prestet), Уоллисом (Wallis), Уитвортом (Whitworth) и Хартли (Hartley). Какие ошибки они допустили? 23. [20] Какой порядок 52 диаграмм генджи-ко соответствует алгоритму 7.2.1.5Н? 24. [23] В начале 1800-х годов Тошиаки Хонда (Toshiaki Honda) предложил рекурсивное правило для генерации всех разбиений {1,... ,п}. При п = 4 его алгоритм давал такую последовательность разбиений. пн nn mi nn mi nn nn im nn nn nn im im nn nn Можете ли вы сказать, какой будет последовательность при п = 5? Указание: см. (26). 25. [15] Автора изданной в XVI веке книги The Arte of English Poesie интересовали только “полные” в смысле упр. 7.2.1.5-35 схемы рифм; другими словами, каждая строка должна рифмоваться как минимум с одной другой строкой. Кроме того, схемы должны быть “неприводимыми” в смысле упр. 7.2.1.2-100: разбиение наподобие 12|345 можно разде- лить на двустрочный стих, за которым следует трехстрочный. Наконец схема не должна тривиально состоять из строк, которые рифмуются каждая с каждой. Является ли при этих условиях (28) полным списком пятистрочных схем рифм?
576 КОМБИНАТОРНЫЙ ПОИСК 7.2.1.7 26. [НМ25] Сколько схем рифм, состоящих из п строк, удовлетворяют ограничениям упр. 25? 27. [ДМ51] Разбиение множества 14125136 может быть представлено диаграммой генд- жи-ко наподобие rilnl; однако каждая такая диаграмма для данного разбиения должна иметь как минимум три места пересечения линий, а такие пересечения иногда рассматри- ваются как нежелательные. Сколько разбиений множества {1,...,п} имеют диаграммы генджи-ко не более чем с одним пересечением? 28. [25] Пусть а, Ь и с—простые числа. Джон Уоллис (John Wallis) перечислил все возможные разложения а3Ь2с следующим образом: cbbaaa, cbbaa a, cbaaa b, ЬЬааа с, cbba аа, cbba а a, cbaa ba, cbaa - Ь а, ЬЬаа са, ЬЬаа с - а, сааа ЬЬ, сааа Ь Ь, Ьааа cb, Ьааа -с-Ь, сЬЬ ааа, ebb -аа-а, ebb -a - a-a, cba • baa, cba -Ьа-а, cba -аа-Ь, cba -b-a-a, ЬЬа • саа, ЬЬа са а, ЬЬа аа с, ЬЬа - с - а - а, саа ЬЬ а, саа Ьа - Ь, саа b - Ь а, Ьаа cb - а, Ьаа • са - Ь, Ьаа -Ьа- с, Ьаа с-b - а, ааа • cb-Ь, ааа -bb-с, ааа c-b-b, cb-ba- аа, сЬ Ьа а а, сЬ аа Ь а, cb-b-a-a-a, ЬЬ-са- аа, ЬЬ-са-а-а, ЬЬ-аа-с-а, ЬЬ - с - а - а - а, са-Ьа- Ьа, са-Ьа-Ъ-а, са-аа-Ь-Ь, са • Ь Ь • а • а, Ьа Ьа с а, Ьа - аа - с - Ь, Ьа - с Ь а - а, аа - с Ь - Ь - а, с - Ь Ь - а а - а. Какой алгоритм он использовал для генерации разбиения в указанном порядке? 29. [24] В каком порядке Уоллис сгенерировал бы все разложения числа abcde = 57-11• 13-17? Ваш ответ должен быть выражен в форме последовательности диаграмм генджи-ко. 30. [М20] Чему равен коэффициент при aj1^2 ... zm+" в (aoz + aiz2-l-aaz3-I-)m? (См. формулу (29).) 31. [20] Сравните упорядочения разбиений де Муавра (de Moivre) и де Монмора (de Mont- mort) (30) и (31) с алгоритмом 7.2.1.4Р. 32. [21] (Р. И. Бошкович (R. J. Boscovich), 1748.) Перечислите все разбиения 20, все части которых представляют собой 1, 7 или 10. Разработайте алгоритм для перечисления всех таких разбиений заданного целого числа п > 0.
ОТВЕТЫ К УПРАЖНЕНИЯМ Не отвечай глупому по глупости его, чтоб и тебе не сделаться подобным ему. — Притчи 26:4 ПРИМЕЧАНИЯ К УПРАЖНЕНИЯМ 1. Средняя задача для читателя с математическими наклонностями. 2. Автор вознаградит вас, если вы первым сообщите об ошибке в условии упражнения или в его ответе. 3. См. Н. Poincare, Rendiconti Circ. Mat. Palermo 18 (1904), 45-110; R. H. Bing, Annals of Math. (2) 68 (1958), 17-37; G. Perelman, arXiv: math.DG/0211159, 0303109, 0307245. РАЗДЕЛ 7 1. Следуя указанию, мы хотим, чтобы непосредственно за вторым ‘4m—4’ следовало первое ‘2m—1’. Требуемое размещение можно вывести из первых четырех примеров, при- веденных в шестнадцатеричной записи: 231213, 46171435623725, 86а31Ъ1368597а425Ь2479, ca8e531fl358ac7db9e6427f2469bd. [R. О. Davies, Math. Gazette 43 (1959), 253-255.] 2. Такое расположение существует тогда и только тогда, когда nmod4 = 0 или 1. Это условие является необходимым, поскольку должно быть четное число нечетных элементов. Оно также достаточно, поскольку мы можем поместить ‘00’ перед ответом из предыдущего упражнения. Примечания. Этот вопрос впервые был задан Маршаллом Холлом (Marshall Hall) в 1951 году и решен в следующем году Ф. Т. Лихи-мл. (F. Т. Leahy, Jr.) в неопублико- ванной работе [Armed Forces Security Agency report 343 (28 January 1952)]. Эта задача была независимо поставлена и решена Т. Сколемом (Т. Skolem) и Т. Бангом (Т. Bang), Math. Scandinavica 5 (1957), 57-58. Полное решение для других диапазонов чисел дано Д. Э. Симпсоном (J. Е. Simpson), Discrete Math. 44 (1983), 97-104. 3. Да. Например, цикл (0072362435714165) “выпрямить” нельзя. 4. к-е появление Ь находится в позиции [fc^>J слева, а к-е появление а—в позиции [М>2]. Ясно, что [fc^>2J — [fc<5] = fc, поскольку ф2 = ф+1. (Целые числа [fc<J>] образуют “спектр” ф; см. упр. 3.13 из CMath.) 5. Указанному условию удовлетворяют 2п — к — 1 из (2J“) равновероятных пар позиций. Если бы эти вероятности были независимы (но это не так), значение 2L„ было бы равно 2п 2,2,...,2 ft((2n- 1 - fc)/(2")) = fc=l (2n)!2n(n — 1) n!(2n)"+1(2n — l)n+1 = exp^nln — + In тгеп _1ч\ —+O(» ’>)• 19 3ak. 3331
578 ОТВЕТЫ К УПРАЖНЕНИЯМ 7 6. (а) При раскрытии произведений мы получим полином из (2п—2)!/(п—2)! членов, каж- дый степени 4п. Для каждой пары Лэнгфорда имеется член х2 .. .х2п; все прочие члены имеют как минимум одну переменную степени 1. Суммирование по xi,..., Х2п € {—1, +1}, следовательно, сокращает все плохие члены, но дает 22" для хороших. Дополнительный множитель 2 возникает из-за того, что имеется 2L„ размещений Лэнгфорда (включая отражения). (б) Пусть Д = 52^"7*С-1а:ла::л+*+1 представляет собой главную часть fc-ro множителя. Мы можем пройти по всем 4" случаям xi,..., Т2п 6 {—1, +1} в порядке кода Грея (алго- ритм 7.2.1.1L), всякий раз меняя знак только у одного xj. Изменение Xj вызывает не более двух корректировок в каждой Д; так что стоимость каждого шага кода Грея составляет О(п). Нам нет необходимости вычислять сумму точно; достаточно работать по модулю 2N, где 2N удобно превышает 22”+1Г„. Что еще лучше, когда п = 24, вычисления можно было бы делать по модулю 260—1, или по модулю 230 — 1 и 230+1, поскольку 249 ± 260 — 1. Можно также сэкономить [п/2] бит точности, используя тот факт, что fk = к + 1 (по модулю 2). (в) Третье равенство в действительности корректно, только когда п mod 4 = 0 или 3; но это интересные п. Сумма может быть вычислена за п этапов, где этап р для р < п включает Случаи, ГДе Хп— 1 = Хп+2, ^п—2 = 2-п+З, • • • , ЗСп—р+1 = 3-п+р, Хп—р = Хп = З-п+1 =-1-1 и Xn+p+i = —1; он имеет внешний цикл, который выбирает (in-P+i, • • •Дп-i) всеми 2₽-1 способами, и внутренний цикл, который выбирает (xi,... , Xn-p-i,a:n+p+2, , Т2п) всеми 22п-2р-2 способами. (Внутренний цикл использует бинарный код Грея, предпочтительно с “порядком органных труб” для назначения приоритетов индексам так, что xi и Т2п варьируют наиболее быстро. Внешний цикл не требуется делать особенно эффективным.) Этап п охватывает 2”-1 палиндромных случаев с Xj = a^n+i-j для 1 < j < п и хп = Xn+i = +1. Если вр обозначает сумму на этапе р, то si + • + sn-i + |s„ = 22n~2Ln- Существенная доля членов оказывается равной нулю. Например, когда п = 16, нули появляются примерно в 76% случаев (в 408 838 754 случаях из 229 + 214). Этот факт можно использовать для того, чтобы избежать умножения во внутреннем цикле. (Нулем может быть только /1, /з, ....) 7. Пусть dk — количество неполных пар после прочтения fc чисел; таким образом, do = din = 0 и dk = dfc-i±l для 1 < к < 2п. Наибольшая такая последовательность, в которой dk никогда не превышает 6, представляет собой (do, di,..., dan) = (0,1,2,3,4,5,6,5,6,..., 5,6, 5,4,3,2,1,0), для которой 52^", dk = lln — 30. Но в любой последовательности Лэнгфорда 52fc"i^fc = + 1) — ("2) + п- Следовательно, ("J1) + п < lln — 30 и п < 15. (На самом деле ширина 6 невозможна и при п = 15. Значения наибольшей и наименьшей ширины в общем случае неизвестны.) 8. Решений при п = 4 и п = 7 нет. При п = 8 имеется четыре таких решения: Il II ।---------------11 Г7=Я I II II Г=П Ii----------------------1 I 1317538642572468; 1418634753268257; 4275248635713168; 5286235743681417. I—l||U=U|| ^|||—I 1| и=Ч||—I 1| IL-L-Ш I- (Эта задача приводит к интересной механической головоломке, использующей элементы шириной fc +1 и высотой [fc/2] для разных fc. В своей заметке [Math. Gazette 42 (1958), 228] Ч. Дадли Лэнгфорд (С. Dudley Langford) проиллюстрировал аналогичные элементы и привел планарное решение для п = 12. Этот вопрос можно привести к задаче точного покрытия, в которой непростые столбцы представляют места, в которых не могут пере- секаться два элемента; см. упр. 7.2.2.1-00. Жан Бретт (Jean Brette) разработал похожую головоломку на основе варианта задачи, предложенного Сколемом и использующего ши- рину вместо планарности; он передал ее копию Дэвиду Сингмастеру (David Singmaster) в 1992 году.)
7 ОТВЕТЫ К УПРАЖНЕНИЯМ 579 9. Лишь тремя способами: 181915267285296475384639743, 191218246279458634753968357, 191618257269258476354938743 (и обратными к ним). [Впервые найдены в 1969 году Г. Ба- роном (G. Baron); см. Combinatorial Theory and Its Applications (Budapest: 1970), 81-92. Метод “танцующих связей” из раздела 7.2.2.1 решает этот вопрос с помощью обхода дерева, имеющего всего лишь 360 узлов для данной задачи точного покрытия со 132 строками.] 10. Например, положите А = 12, К = 8, Q = 4, J = 0, ♦ = 4, = 3, ф = 2, Д = 1 и просуммируйте. [В связи с этим следует упомянуть, что ортогональные латинские квадраты, эквива- лентные рис. 1, были неявно представлены уже в средневековых исламских талисманах, проиллюстрированных Ибн аль-Хаджем (Ibn al-Hajj) в его Kitab Sbumus al-Anwar (Cairo: 1322), который привел также пример 5x5. См. Е. Doutte, Magie et Religion dans I’Afrique du Nord (Algiers: 1909), 193-194, 214, 247; W. Ahrens, Der Islam 7 (1917), 228-238. Cm. также статью по истории латинских квадратов, подготовленную Ларсом Д. Андерсеном (Lars D. Andersen).] 11. f d-yK Ср2 ааУ < МТ а«5з bfiy cal > ban ayl dfiy dfil cSv. byl суУ dal a/?N; [Жозе Сове (Joseph Sauveur) представил самый ранний из известных примеров таких квадра- тов в Memoires de Г Academic Royale des Sciences (Paris, 1710), 92-138, §83.] 12. Если n нечетно, можно положить Mij = (г — j) mod n. Но если n четно, то секущих не существует: если {(to+0) mod п,..., (tn-i+n— 1) mod п} является секущей, то мы имеем SfcZo ** = (по модулю п), следовательно, У2к=о = ln(n — 1) кратно п. 13. Заменим каждый элемент I на [Z/5J, чтобы получить матрицу, состоящую из нулей и единиц. Дадим имена четвертям следующим образом: (£ ®); тогда и А, и D содержат по fc единиц, в то время как и В, и С содержат по fc нулей. Предположим, что исходная матрица имеет десять непересекающихся секущих. Если к < 2, то не более четырех из них проходят через 1 в А или D и не более четырех из них проходят через 0 в В или С. Таким образом, как минимум две из них проходят только через нули в А и D и только через единицы в В и С. Но такие секущие имеют четное число нулей (не пять), поскольку пересекают А и D одинаково часто. Аналогично латинский квадрат порядка 4т -Ь 2 с ортогональным напарником должен иметь больше т нарушителей в каждой из подматриц (2m + 1) х (2m + 1) при всех переименованиях элементов. [Н. В. Mann, Bull. Amer. Math. Soc. (2) 50 (1944), 249-257.] 14. В случаях (б) и (г) таких квадратов нет. В случаях (а), (в) и (д) их имеется со- ответственно 2, 6 и 12 265 168(1), лексикографически первыми и последними из которых являются (а) (а) (в) (в) (д) (д) 0456987213 0691534782 0362498571 0986271435 0214365897 0987645321 1305629847 1308257964 1408327695 1354068792 1025973468 1795402638 2043798165 2169340578 2673519408 2741853960 2690587143 2506913874 3289176504 3250879416 3521970846 3572690814 3857694201 3154067289 4518263790 4587902631. 4890253167 4630789251. 4168730925 4231850967 5167432089 ’ 5412763890 ’ 5736841920 ’ 5218947306 ’ 5473829016 ’ 5348276190 6894015372 6945081327 6259784013 6095324178 6942158730 6820394715 7920341658 7836425109 7915602384 7869512043 7309216584 7069128543 8731504926 8723196045 8147036259 8407136529 8531402679 8412739056 9672850431 9074618253 9084165732 9123405687 9786041352 9673581402 Примечания. Квадраты (а), (б), (в) и (г) получены из десятичных цифр тг, е, у и ф путем отбрасывания цифр, не согласующихся с полным латинским квадратом. Хотя они не являются истинно случайными, вероятно, в общем случае это типичные латинские квадраты 10 х 10, примерно половина из которых имеет ортогональные им квадраты.
580 ОТВЕТЫ К УПРАЖНЕНИЯМ 7 Паркер (Parker) построил квадрат (д) так, чтобы получить необычно большое количество секущих; в данном случае их 5504. (Эйлер (Euler) изучал подобный пример порядка 6, так что он просто “прозевал” открытие пары 10 х 10.) 15. Паркер (Parker) был потрясен, обнаружив, что среди квадратов, ортогональных квад- рату 14, (д), не оказалось квадратов, ортогональных друг другу. Позже вместе с Д. У. Бра- уном (J. W. Brown) и А. С. Хедаятом (A. S. Hedayat) [J. Combinatorics, Inf. and System Sci. 18 (1993), 113-115] он нашел два квадрата размером 10x10, которые имели четыре непересекающиеся общие секущие (но не десять). [См. также В. Ganter, R. Mathon, and A. Rosa, Congressus Numerantium 20 (1978), 383-398; 22 (1979), 181-204.] Продолжая идею Л. Вайзнера (L. Weisner) [Canadian Math. Bull. 6 (1963), 61-63J, автор данной книги случайно заметил некоторые квадраты, более близкие ко взаимно ортогональному трио: квадрат ниже ортогонален себе же транспонированному; и он имеет пять диагонально симметричных секущих, в ячейках (О,ро), • • •, (9,pg) для ро .. .pg = 0132674598, 2301457689, 3210896745, 4897065312 и 6528410937, которые почти не пересекаются: они покрывают 49 ячеек: /02345678914 /03681459724 3192708546 2157690438 6528139407 3925874160 8753241960 4283907615 Г — 1689473025 1 5712489306 - ТТ XV 4970852613 6034758291 — 1а 5047986132 7891326054 9416320758 8549061723 7361095284 9406213587 \2805614379/ \1670532849/ Обширные вычисления, проведенные Б. Д. Мак-Кеем (В. D. McKay), Э. Мейнертом (A. Meynert) и В. Мирвольд (W. Myrvold) [J. Comb. Designs 15 (2007), 98-119], доказали, что не существует латинских квадратов размером 10 х 10 с нетривиальной симметрией, ко- торые имели бы два ортогональных квадрата, ортогональных также друг другу. Известно, что три взаимно ортогональных латинских квадрата существуют для всех порядков п > 10 [см. S. М. Р. Wang and R. М. Wilson, Congressus Numerantium 21 (1978), 688; D. T. Todorov, Ars Combinatoria 20 (1985), 45-47]. 16. Cm. R. A. Brualdi and H. J. Ryser, Combinatorial Matrix Theory (Cambridge University Press, 1991), §8.2. 17. (а) Пусть имеется Зп столбцов rj, Cj, Vj для 0 < j < n и n2 строк; строка (i, j) имеет 1 в столбцах n, Cj и щ, где I = Lij, для 0 < i, j < n. (б) Пусть имеется 4n2 столбцов ry, Cij, Xij, y,j для 0 < i, j < n и n3 — n2 + n строк; строка (i,j, k) имеет 1 в столбцах rtk, Cjk, xtj и yik, где I = Lij, для 0 < i, j, к < n и (i = к или j > 0). 18. Определим для заданного ортогонального массива А со строками А, для 1 < г < т латинский квадрат L, = (Lijk) для 1 < г < т — 2, полагая L,jk = А,я когда = j и Amq = fc, для 0 < j, к < п. (Значение q единственным образом определяется значениями j и fc.) Перестановка столбцов массива не изменяет соответствующие латинские квадраты. Это построение может быть обращено, производя ортогональные массивы порядка п из взаимно ортогональных латинских квадратов порядка п. В упр. 11, например, можно положить а = а = 1Ч = 0, 5 = /3 = 3=1,с = 7 = > = 2ис1=,<5 = 1 = 3, получая /3012210303211230\ 2310102301323201 А= 0123103223013210 0000111122223333 \0123012301230123/
7 ОТВЕТЫ К УПРАЖНЕНИЯМ 581 (Концепция ортогонального массива математически “чище’,’ чем концепция ортого- нальных латинских квадратов, поскольку она лучше учитывает имеющиеся симметрии. Заметим, например, что матрица L размером п х п с элементами из {1,2,..., п] являет- ся латинским квадратом тогда и только тогда, когда он ортогонален двум нелатинским квадратам специального вида, а именно Следовательно, латинские квадраты, греко-латинские квадраты, иврито-греко-латинские квадраты и т. д. эквивалентны ортогональным массивам глубиной 3, 4, 5, .... Более того, рассматриваемые здесь ортогональные массивы представляют собой просто частный случай t = 2 и А = 1 более общей концепции n-арных массивов т х Хп* с “мощностью t” и “индексом А” введенной К. Р. Рао (С. R. Rao) в Proc. Edinburgh Math. Soc. 8 (1949), 119-125; см. книгу Orthogonal Arrays А. С. Хедаята (A. S. Hedayat), H. Д. А. Слоана (N. J. A. Sloane) и Д. Стафкена (J. Stufken) (Springer, 1999).) 19. Можно переупорядочить столбцы таким образом, что первая строка примет вид 0nln ... (n—1)п. Тогда можно перенумеровать элементы других строк так, чтобы они начина- лись с 01... (п— 1). Элементы в каждом оставшемся столбце должны быть различны во всех строках, кроме первой. Для достижения верхней границы при п = р проиндексируем каждый столбец двумя числами, х и у, где 0 < х, у < р, и поместим числа у, х, (х + у) mod р, (х + 2у) mod р, ..., (х + (р—1)у) modp в этот столбец. Например, когда р — 5, мы получим следующий ортогональный массив, эквивалентный четырем взаимно ортогональным латинским квад- ратам: /0000011111222223333344444ч 0123401234012340123401234 0123412340234013401240123 0123423401401231234034012 ' 0123434012123404012323401 \0123440123340122340112340/ [По сути, такая же идея работает и тогда, когда п является степенью простого числа, с использованием конечного поля GF(pe); см. Е. Н. Moore, American Journal of Mathe- matics 18 (1896), 264-303, §15(1). Эти массивы эквивалентны конечным проективным плоскостям; см. Marshall Hall, Jr., Combinatorial Theory (Blaisdell, 1967), Chapters 12 and 13.] 20. Пусть co = e2”1'''’1, и предположим, что ai ...а„2 и bi ...bnz являются векторами из разных строк. Тогда aibi + • • • + a„2fe„2 = J20<J>fc<n w-’+fc = 0, поскольку u,k = 21. (а) Чтобы показать, что отношение “эквивалентность или параллельность” является отношением эквивалентности, нам нужно убедиться в законе транзитивности: если L || М, М || N и L N, то должно выполняться L || N. В противном случае согласно (ii) должна иметься такая точка р, что L П N = {р}); и р будет лежать на двух разных прямых, параллельных М, что приводит к противоречию с (iii). (б) Пусть {Li,..., Ln} является классом параллельных прямых, и пусть М—прямая из другого класса. Тогда каждая Lj пересекается с М в единственной точке рл-; и так встречаются все точки М, поскольку каждая точка геометрии лежит ровно на одной прямой каждого класса согласно (iii). Таким образом, М содержит ровно п точек. (в) Мы уже заметили, что каждая точка принадлежит т прямым, если имеется т классов. Если прямые L, М и N принадлежат трем разным классам, то М и N имеют
582 ОТВЕТЫ К УПРАЖНЕНИЯМ 7 то же количество точек, что и количество точек прямых из класса L. Так что существует общий размер прямых п, и в действительности общее количество точек равно п2. (Конечно, тг может быть бесконечно.) 22. Определим для данного ортогонального»массива А порядка п и глубиной т геометри- ческую сеть с тг2 точками и т классами параллельных прямых, рассматривая столбцы А как точки; прямая j из класса к представляет собой множество столбцов, в которых символ j находится в строке к массива А. Так получаются все конечные геометрические сети с тп > 3 классами. Но геометри- ческая сеть только с одним классом представляет собой тривиальное разбиение точек на непересекающиеся подмножества. Геометрическая сеть с тп = 2 классами имеет пп' точек (т, х'), где всего имеется п прямых ‘х = constant’ в одном классе и п' прямых lx' = constant’ в другом. [Более подробную информацию можно найти в R. Н. Bruck, Canadian J. Math. 3 (1951), 94-107; Pacific J. Math. 13 (1963), 421-457.] 23. (а) Если d(x,y) < t и d(x',y) < t и x x', to d(x,x') < 2t. Таким образом, код с расстоянием > 2t между кодовыми словами позволяет исправлять до t ошибок—по крайней мере в принципе, хотя необходимые вычисления могут оказаться весьма сложны- ми. И наоборот, если d(x,x') < 2t и х х', существует элемент у, такой, что d(x,y) < t и d(x' ,у) < t; следовательно, мы не можем однозначно восстановить х при получении у. (б, в) Пусть т = г + 2, и заметим, что множество Ь2 5-арных m-кортежей имеет расстояние Хэмминга > т — 1 между всеми парами элементов тогда и только тогда, когда оно образует столбцы 5-арного ортогонального массива глубиной тп. [См. S. W. Golomb и Е. С. Posner, IEEE Trans. IT-10 (1964), 196-208. В литературе по теории кодов код С(Ь, п,г) с расстоянием d часто обозначают как (тг + r,bn,d)b- Таким образом, 5-арный ортогональный массив глубиной тп, по сути, является кодом (тп, Ь2,т — 1)ь-] 24. (а) Допустим, что Xj x'j для 1 < j < I и Xj = x'j для I < j < N. Мы имеем х = х' при I — 0. В противном случае рассмотрим биты четности, соответствующие тп прямым, проходящим через точку 1. Не более 1—1 из этих битов соответствуют прямым, проходящим через точки {2,..., Z}. Следовательно, х' имеет как минимум тп— (1—1) изменений четности и d(x,x') > I + (тп — (1—1)) = тп + 1. (б) Пусть 1р1, ..., 1Рт—номера индексов прямых, проходящих через точку р. После получения сообщения yi.. .yN+R вычислим хр для 1 < р < N, взяв значение большинства из rn + 1 “битов-свидетелей” {уро, • • •, Урт}, где уро = ур и Урк = (.VN+ipk + I j' P и точка j лежит на прямой lpk}) mod 2, для 1 < к < т. Этот метод работает, поскольку каждый полученный бит yj влияет не более чем на один бит-свидетель. Например, в 25-точечной геометрии из упр. 19 предположим, что бит четности T26+si+j каждого кодового слова соответствует прямой j строки г, для 0<»<5и0<у<5; таким образом, гггв = xi ф хз Ф хз ф х* ф хз, тгт = те Ф т? Ф те Ф тд ф тщ, ..., Тее = хз ф хв Ф Т12 Ф Tig Ф Т24- Для данного сообщения yi... узз мы декодируем бит xi, скажем, путем вычисления значения большинства из семи битов у±, узе Ф уз Ф уз Ф yt Ф уз, Уз1 Ф ув Ф 1/11 Ф ?/16 Ф 1/21, ?/36 Ф 1/10 Ф Z/14 Ф Z/18 Ф 1/22, 1/41 Ф J/9 Ф 1/12 Ф ?/20 Ф ?/23, ?/46 Ф У8 Ф 1/15 Ф уп Ф ?/24, уз1 Ф уз Ф1/13 Ф ?/19 Ф ?/25. [В разделе 7.1.2 поясняется, как эффективно вычислять функции мажоризации. Заметим, что мы можем исключить последние 10 бит, если мы хотим корректировать до двух ошибок, и последние 20, если достаточно коррекции одной ошибки. См. М. Y. Hsiao, D. С. Bossen and R. Т. Chien, IBM J. Research and Development 14 (1970), 390-394.]
7 ОТВЕТЫ К УПРАЖНЕНИЯМ 583 25. Рассматривая анаграммы из {1,е,а, s,t} (см. упр. 5-21), мы приходим к квадрату * л- 1 stela telas elast laste astel и циклическим сдвигам его строк. Здесь telas — испанская ткань; elast—префикс, озна- чающий гибкость; a laste—императивный чосеровский глагол. (Конечно, практически все произносимые комбинации пяти букв были кем-то где-то когда-то использованы для тех или иных целей, например для заклинаний... ) 26. “every night, young video buffs catch rerun fever forty years after those great shows first aired.” (“Каждую ночь молодых любителей видео постоянно лихорадит— через сорок лет после первого выхода в эфир этих великих шоу’.’) [Robert Leighton, GAMES 16,6 (December 1992), 34, 47.] 27. (0,4,163,1756,3834) для к = (1,2,3,4,5); для любителей покера—mamma и esses дают “фул-хаус” 28. Да, всего 38 пар. “Наиболее распространенным” решением являются слова needs (ранг 180) и offer (ранг 384). Имеется только три случая отличия всех компонентов на +1: (adder beefs, sheer tiffs, sneer toffs). Другими незабываемыми примерами являются ghost hints и strut rusts. Во всех случаях одно из слов пары заканчивается буквой s, за исключением четырех пар наподобие robed spade. [См. Leonard J. Gordon, Word Ways 23 (1990), 59-61.] 29. Всего имеется 18 палиндромов, от level (ранг 184) до dewed (ранг 5688). Вот некото- рые из 34 зеркальных пар: ‘devil lived’, ‘knits stink’, ‘smart trams’, ‘faced decaf’. 30. Среди 105 таких слов в SGB наиболее распространенными являются first, below, floor, begin, cells, empty и hills; abbey и pssst являются лексикографически первым и последним словами. (Если вам не нравится pssst, то предпоследнее слово—mossy.) В обратном алфавитном порядке находятся буквы только у 37 слов, от тесса до zoned. 31. Слово посредине представляет собой арифметическое среднее двух других, так что крайние слова должны быть конгруэнтны по модулю 2; это наблюдение уменьшает коли- чество просмотров словаря примерно в 32 раза. В W0RDS(5757) имеется 119 таких троек, но в WORDS(2000) их только две: marry, photo, solve; risky, tempo, vague. [Wbrd Ways 25 (1992), 13-15.] 32. Похоже, единственным разумным примером является peopleless. 33. about, bacon, faced, under, chief, fight, right, which, ouija, jokes, ankle, films, hymns, known, crops, pique, quart, first, first, study, mauve, vowel, waxes, proxy, crazy, pizza. (Идея заключается в том, чтобы найти наиболее распространенное слово, в котором за х следует (т+1) mod 26, для х -- а (0), х = b (1),..., х = z (25). Мы также минимизируем промежуточное расстояние, предпочитая, таким образом, bacon более распространенному слову black. В одном случае, где такого слова не существует, crazy показалось самым разумным. См. OMNI 16,8 (Мау 1994), 94.) 34. Первые два слова (и общее количество слов) в каждой категории следующие: pssst и pffft (2), schwa и schmo (2), threw и throw (36), three и spree (5), which и think (709), there и these (234), their и great (291), whooo и wheee (3), words и first (628), large и since (376), water и never (1313), value и radio (84), would и could (460), house и voice (101), quiet и queen (25), queue только (1), ahhhh и ankhs (4), angle и extra (20), other и after (227), agree и issue (20), along и using (124), above и alone (92), about и again (58), adieu и aquae (2), earth и eight (16), eagle и ounce (8), outer и eaten (42), eerie
584 ОТВЕТЫ К УПРАЖНЕНИЯМ 7 и audio (4), (0), ouij»H aioli (2), (0), (0); years и every—наиболее распространенные из 868 опущенных слов. [Для заполнения трех пропусков в Интернете нашлись ooops, ooooh и ооооо. См. Р. М. Cohen, Word Ways 10 (1977), 221-223.] 35. Рассмотрим коллекцию WORDS(n) для п = 1, 2, ..., 5757. Проиллюстрированный луч с корнем s впервые становится возможным, когда п достигает 978 (ранг stalk). Следующая корневая буква, под держивающая такой луч, — с, которая получает достаточное ветвление среди потомков при п — 2503 (ранг craze). Следующие прорывы обнаруживаются при п = 2730 (bulks), 3999 (ducky), 4230 (panty), 4459 (minis), 4709 (whooo), 4782 (lardy), 4824 (herem), 4840 (firma), 4924 (ridgy), 5343 (taxol). (Прорыв осуществляется, когда луч верхнего уровня получает число Хортона-Страх- лера 4; см. упр. 7.2.1.6-124. Забавные множества слов, вызывающие мысли о новом виде поэзии, возникают также при ветвлении справа налево вместо ветвления слева направо: black, slack, crack, track, click, slick, brick, trick, blank, plank, crank, drank, blink, clink, brink, drink. В действительности ветвление справа налево дает полный тернарный луч с 81 листом: males, sales, tales, files, miles, piles, holes, ..., tests, costs, hosts, posts.) 36. При обозначении элементов куба как atjk для 1 < i,j,k < 5, получаем условия симметрии aijk = = a-jik - cijki = Ofcij = Otji- В общем случае куб размером пхпхп содержит Зп2 слов, получаемых путем фиксации двух координат с позволением третьей меняться от 1 до п; но условие симметрии означает, что нам нужно только ("J1) слов. Следовательно, когда п = 5, количество необходимых слов снижается с 75 до 15. [Джефф Грант (Jeff Grant) смог найти 75 подходящих слов в Oxford English Dictionary; см. Word Ways 11 (1978), 156-157.] Замена (stove,event) на (store, erect) или (stole,elect) дает еще два куба. 37. Наиболее плотная часть графа, которую можно назвать “активной зоной” (“bare co- re”), содержит вершины bares и cores, каждая из которых имеет степень 25. 38. tears —> raise —> aisle —> smile; вторым словом может быть также reals. [Пере- ход от tears к smile, показанный в (11), был первым пятибуквенным примером Льюиса Кэрролла (Lewis Carroll). Ему было бы интересно узнать, что “ориентированное правило” затрудняет переход от smile к tears, поскольку в этом направлении требуется четыре шага.] 39. Всегда остовный и никогда—порожденный. 40. (а) 2е, (б) 2П, по одному для каждого подмножества Е или V. 41. (а) п = 1 и п = 2; Ро не определен, (б) п = 0 и п = 3. 42. G имеет 65/2 ребер (а следовательно, не существует). 43. Да: первые три графа изоморфны рис. 2, (д). [Крайняя слева диаграмма в действи- тельности представляет собой наиболее раннее из известных изображений графа Петерсена в печати: см. А. В. Kempe, Philosophical Transactions 177 (1886), 1-70, в особенности рис. 13 в §59.] Крайний справа граф, определенно, отличается; он планарный, гамильтонов и имеет обхват 3. 44. Любой автоморфизм должен переводить угловую точку в угловую точку, поскольку три различных пути длиной 2 можно найти только между определенными парами неугло- вых точек. Следовательно, граф имеет только восемь симметрий С4. 45. Все ребра этого графа соединяют вершины в одной и той же строке или в соседних. Следовательно, мы можем поочередно использовать цвета 0 и 2 в четных строках, а цвета
7 ОТВЕТЫ К УПРАЖНЕНИЯМ 585 1 и 3—аналогично в нечетных. Соседи NV образуют цикл длиной 5, следовательно, четыре цвета необходимы.* 46. (а) Каждая вершина имеет степень > 2, и ее соседи имеют точно определенный циклический порядок, соответствующий входящим ребрам. Если и — v и и — w, где v и w являются циклически последовательными соседями и, то мы должны иметь v — w. Таким образом, все точки в окрестности любой вершины и принадлежат единственной треугольной области. (б) Формула выполняется при п = 3. Если п > 3, стянем любое ребро в точку; такое преобразование удаляет одну вершину и три ребра. (Если мы стягиваем и — v, предположим, что оно является частью треугольников х — и — v — х и у — и—v — у. Тогда мы теряем вершину v и ребра {т — и, и— v,y — г>}; все прочие ребра вида w — v становятся ребрами w — и.) 47. Планарная диаграмма делит плоскость на области с 4 или 6 вершинами на границе каждой из них (поскольку Кз,з не имеет нечетных циклов). Если имеется /4 и /в областей каждого вида, должно выполняться соотношение 4/4 +6/е = 18, поскольку всего имеется 9 ребер; следовательно, (/4, /е) = (3,1) или (0,3). Мы можем также триангулировать граф, добавляя к нему еще /4 + З/e ребер; но тогда в нем будет как минимум 15 ребер, что противоречит упр. 46. [Тот факт, что граф Кз.з не планарный, возвращает нас к головоломке о подключении трех домов к источникам воды, газа и электричества без пересечений. Происхождение этой головоломки неизвестно; Г. Э. Дьюдени (Н. Е. Dudeney) называет ее в Strand 46 (1913), 110 “древней”] 48. Если и, v, w являются вершинами и и — v, то мы должны иметь d(w, и) d(w, v) (по модулю 2); в противном случае кратчайшие пути от w до и и от w до v должны давать нечетный цикл. После того как w окрашена в цвет 0, процедура назначает цвет d(w, v) mod 2 каждой новой неокрашенной вершине v, смежной с окрашенной вершиной и; а каждая вершина v с d(w, v) < 00 окрашивается до того, как выбирается новая вершина w. 49. Их только три: Кц, Кз,з и ГТ) (который представляет собой Се). 50. Граф должен быть связным, поскольку количество 3-раскрашиваний при наличии г компонентов делится на 37 Он должен также содержаться в полном двудольном графе A'm.n, который может быть раскрашен в три цвета 3(2m+2n—2) способами. Удаление ребер из Кт,п не уменьшает количество раскрашиваний; следовательно, 2т + 2П — 2 < 8, и мы получаем {т, п} = {1,1}, {1,2}, {1,3} или {2,2}. Таким образом, единственно возможными решениями являются “лапа” К±д и путь Р4. 51. Цикл длиной 4 pi — Li —рг — Lz —pi соответствовал бы двум различным прямым {Li,L2} с двумя общими точками {рьрг}, что противоречит (ii). Так что обхват как минимум равен 6. Если имеется только один класс параллельных прямых, обхват равен оо; если имеется два класса с п < п членами, обхват равен 8, или оо при п = 1. (См. ответ к упр. 22.) В противном случае можно найти цикл длиной 6, делая треугольник из трех прямых, выбранных из разных классов. 52. Если диаметр обозначить через d, а обхват через у, то d > [g/2j, если только g не равен оо. 53. happy (которое связано с tears и sweat, но не с world). * Те же рассуждения (а значит, и способ раскрашивания) применимы и для приведенного там же графа областей Украины (17, у), включая цикл длиной 5, образуемый соседями Тернополя, или длиной 7 из соседей Днепропетровска. Для раскрашивания графа республик СССР (17с) также требуются четыре краски — из-за цикла длиной 3, образуемого соседями Литвы. — Примеч. пер.
586 ОТВЕТЫ К УПРАЖНЕНИЯМ 7 54. (а) Это один высокосвязный компонент. (Кстати, этот граф представляет собой ребер- ный граф двудольного графа, в котором одна часть соответствует первым буквам {А, С, D, F, G,..., W}, а вторая—последним буквам {A,C,D,E,H,... ,Z}.) (б) Вершина WY изолирована. Прочие вершины с нулевой входящей степенью, а именно FL, GA, РА, UT, WA, WI и WV, образуют сильные компоненты сами по себе; все они предшеству- ют гигантскому сильному компоненту, за которым следуют оставшиеся одновершинные сильные компоненты с нулевой исходящей степенью: AZ, DE, KY, ME, NE, NH, NJ, NY, OH, TX. (в) Теперь сильный компонент {GU} предшествует {UT}; NH, OH, PA, WA, WI и WV присо- единяются к гигантскому компоненту; {FM} предшествует ему; {АЕ} и {WY} следуют за ним. 55- (^) - (7)-------(7), где W = тп + • • • + пк. 56. Истинно. Заметим, что Jn прост, но не соответствует ни одному мультиграфу. 57. Ложно—в связном ориентированном графе и —> w <— v. (Но и и v находятся в одном и том же сильно связанном компоненте тогда и только тогда, когда d(u, к) < оо и d(v, и) < оо; см. раздел 2.3.4.2.) 58. Каждый компонент представляет собой цикл, порядок которого не менее (а) 3 и (б) 1. 59. (а) Для индукции по п можно воспользоваться простой сортировкой вставкой. Предпо- ложим, что i>i—>----ТогдалибоКп—>г>1, либо i>n-i—>i>n, либо i>fc~i——>vk, где fc — наименьшее такое, что г>п —> vk. [L. Redei, Acta litterarum ac scientiarum 7 (Szeged, 1934), 39-43.] (6) 15: 01234, 02341, 02413 и их циклические сдвиги. [Количество таких ориентиро- ванных путей всегда нечетно; см. Т. Szele, Matematikai es Fizikai Lapok 50 (1943), 223-256.] (в) Да. (По индукции: если существует только одно место для вставки г>„, как в п. (а), то турнир транзитивен.) 60. Пусть А = {а: | и—>т}, В = {а: | х—>г>}, С = {а: | v—>х}. Если г> А и АП В = 0, то мы имеем |А| + |В| = |AUВ| < п — 2, поскольку и $ АиВ и v $ AUB. Но |В| + |С| = тг — 1; следовательно, |А| < |С|. [Н. G. Landau, Bull. Math. Biophysics 15 (1953), 148.] 61. 1—>1, 1—>2, 2—>2; тогда A = (J J) и A* = (J*) для всех целых чисел fc. 62. (а) Предположим, что вершинами являются {1,..., тг}. Каждый из тг! членов aipi ... °npn в разложении перманента равен количеству остовных перестановочных ориентиро- ванных графов, имеющих дуги j —>Pj. (б) Аналогичные рассуждения показывают, что det А равен количеству четных остовных перестановочных ориентированных графов минус количество нечетных остовных перестановочных ориентированных графов. [См. F. Нагагу, SIAM Review 4 (1962), 202-210, где перестановочные ориентированные графы названы “линейными подграфами’.’] 63. Пусть v—любая вершина. Если д = 2t + 1, как минимум d(d — l)fc-1 вершин х удовлетворяет условию d(v, х) = к для 1 < к < t. Если д = 2t + 2 и v' — любой сосед v, имеется также как минимум (d — I)4 вершин х, для которых d(v, х) = t + 1 и d(v', х) = t. 64. Для достижения нижней границы в упр. 63 каждая вершина v должна иметь степень d и все d соседей v должны быть смежны с остальными d— 1 вершинами. В действительности этот граф представляет собой Kd.d- 65. (а) Согласно ответу к упр. 63, граф G должен быть регулярным со степенью d и должен быть ровно один путь длиной < 2 между любыми двумя различными вершинами. (б) Можно взять Ai = d с xi = (1... 1)т. Все другие собственные векторы удовлетво- ряют условию Jxj = (0... 0)т; следовательно, А^ + Xj = d — 1 для 1 < j < N. (в) Если А2 = • • • = Am = (-1 + y/4d^3)/2 и Am+i = • = XN = (-1 - >/4d=3)/2, должно выполняться т—1 = N—т. При этом значении мы находим Aid-----1-An = d—d?/2.
7 ОТВЕТЫ К УПРАЖНЕНИЯМ 587 (г) Если 4d — 3 = s2 и т такие, как в п. (в), собственные значения суммируются до s2+3,. <(s2 + 3)2 , . V + 1 — + (»-!)— -(.^6 +1-"*.)—' что равно 15/32 плюс кратное з. Следовательно, з должно быть делителем 15. [Эти результаты были получены А. Д. Хоффманом (A. J. Hoffman) и Р. Р. Синглтоном (R. R. Singleton), IBM J. Research and Development 4 (1960), 497-504, которые также доказали, что граф для d — 7 единственный.] 66. Обозначим 50 вершин как [а, Ь] и (а, Ь) для 0 < а, Ь < 5, и определим три типа ребер, используя арифметику по модулю 5: [а, Ь] — [а + 1,Ь]; (а, Ь) — (а+ 2, Ь); (а, Ь) — [а + Ьс, с] для 0 < а, Ь, с < 5. [См. W. G. Brown, Canadian J. Math. 19 (1967), 644-648; J. London Math. Soc. 42 (1967), 514-520. Без ребер первых двух типов граф имеет обхват 6 и соответствует геометрической сети из упр. 51, с использованием ортогонального массива из ответа к упр. 19.] 67. Некоторые возможности были рассмотрены Майклом Ашбахером (Michael Aschbacher) в Journal of Algebra 19 (1971), 538-540. 68. Если G имеет s автоморфизмов, то он имеет п\/з матриц смежности, поскольку име- ется з перестановочных матриц Р, таких, что Р~АР = А. 69. Сначала установите IDEG(v) ч— 0 для всех вершин v. Затем выполните (31) для всех V, а также установите и ч— TIP (а) и IDEG(u) ч— IDEG(u) + 1 во второй строке этого мини- алгоритма. Чтобы сделать что-то “для всех г>” используя SGB-формат, сначала установите v ч— VERTICES(д); затем, пока v < VERTICES(д) +N(g), выполняйте операцию и устанавливайте V Ч— V + 1. 70. Шаг В1 выполняется однократно (но требует О(п) единиц времени). Шаги (В2, ВЗ, ..., В8) выполняются соответственно (тг + 1, тг, тг, т + тг, тп, тп, тг) раз, каждый со стоимо- стью 0(1). 71. Возможны различные варианты. Здесь мы используем 32-битовые указатели, все относительно символьного адреса Pool, который лежит в Data_Segment. Приведенное далее объявление предоставляет один способ установления соглашений для работы с базовыми структурами данных SGB. VSIZE IS 32 ;ASIZE IS 20 Размеры узла. ARCS IS 0 ; COLOR IS 8 ;LINK IS 12 Смещения полей вершины. TIP IS 0 ;NEXT IS 4 Смещения полей дуги. arcs GREG Pool4-ARCS ; color GREG Pool+COLOR ;link GREG Pool4-LINK tip GREG Роо1ч-Т1Р ;next GREG Pool+NEXT u GREG ;v GREG ;w GREG ;s GREG ;a GREG ;шопе GREG —1 AlgB BZ n,Success Выход, если граф нулевой. MUL $0,n,VSIZE Bl. Инициализация. ADDU v,v0,$0 V ч— Vo + п. SET w,v0 W Ч— Vq. IH STT mone,color,w COLOR (w) ч 1. ADDU CMP w,w,VSIZE $0,w,v w Ч— w + 1. PBNZ $0,lB Повторять, пока не достигнем w = v.
588 “ответы к упражнениям 7 ОН SUBU w,w,VSIZE w 4— w — 1. зн LDT $0,color,w ВЗ. Окраска w пои необходимости. PBNN $0,2F Переход к В2, если COLOR (w) > 0. STCO 0,link,w COLOR (w) Ч— 0, LINK(zr) Ч- Л. SET s,w s ч— w. 4Н SET u,s В4. Стек => и. Установить и ч— в. LDTU s,link,s в Ч— LINK(s). LDT $1,color,u NEG $1.1.$1 $1 Ч— 1- COLOR (и). LDTU a,arcs,11 а ч— ARCS (и). 5Н BZ a,8F В5. Завершено си? Переход к В8, если a = Л. 5Н LDTU v.tip.a рч- TIP (а). 6Н LDT $0,color,V В6. Обработка у. CMP $2.$0,$l (Здесь программа немного хитрее.) PBZ $2,7F Переход к В7, если COLOR (г>) = 1 — COLOR (.и). BNN $0,Failure Неудача, если COLOR(v) = COLOR(zz). STT $1.color,V COLOR (z.) Ч- 1 - COLOR(zz). STTU s.link.v LINK(zi) 4— s. SET s,v S 4— V. 7Н LDTU a,next,a В7. Цикл no a. Установить a 4— NEXT (a). PBNZ a,SB К B5, если a A. 8Н PBNZ s,4B B8. Стек не пустой? Переход к В4, если в / Л. 2Н CMP $0,w,v0 В2. Выполнено? PBNZ $0,0B Если w Уо, уменьшить w и перейти к шагу ВЗ. Success LOC « (Успешное завершение.) | 72. (а) Ясно, что это условие остается инвариантом при вхождении вершин в стек и выходе из него. (б) Вершина у была окрашена, но еще не исследована, поскольку соседи каждой исследованной вершины имеют правильный цвет. (в) Непосредственно перед установкой в ч— у на шаге В6 установите PARENT (г>) ч— и, где PARENT — новое сервисное поле. А непосредственно перед неудачным завершением алгоритма на этом шаге выполните следующее: “многократно выводить NAME(zz) и устанав- ливать и ч— PARENT (zz), пока не выполнится условие и = PARENT (zz); затем вывести NAME(zz) и NAME(v)’.’ 73. К10- (A random.graph(10,100,0,1,1,0,0,0,0,0) представляет собой Jio.) 74. badness имеет исходящую степень 22; других вершин с исходящей степенью > 20 нет. 75. Параметры (тц,пг,пз,714,р,и,о) представляют собой соответственно (а) (тг,0,0,0, — 1, 0,0); (б) (71,0,0,0,1,0,0); (в) (тг, 0,0,0,1,1,0); (г) (тг, 0,0,0,-1,0,1); (д) (тг, 0,0,0,1,0,1); (е) (тг,0,0,0,1,1,1); (ж) (тп,тг,0,0,1,0,0); (з) (тп.тг, 0,0,1,2,0); (и) (тп,тг, 0,0,1,3,0); (к) (тп, тг, 0,0,-1,0,0); (л) (тп,тг,0,0,1,3,1); (м) (тг, 0,0,0,2,0,0); (н) (2,-тг, 0,0,1,0,0). 76. Да, например из Ci и Сз в ответе к упр. 75, (в). (Но петли невозможны при р < 0, поскольку дуги х —>• у = х + кб генерируются для к = 1, 2, ..., пока у не окажется за пределами диапазона или пока не выполнится условие у = х.) 77. Предположим, что хну представляют собой вершины, такие, что d(x, у) > 2. Таким образом, x-f—y, и если у представляет собой любую другую вершину, то мы должны иметь либо v х, либо v у. Эти факты дают путь длиной не более 3 в G между любыми двумя вершинами и и у. 78. (а) Количество ребер, (£)/2, должно быть целым. Наименьшими примерами являются Ко, Ki, Pt, С5 и W.
7 ОТВЕТЫ К УПРАЖНЕНИЯМ 589 (б) Если q—любое нечетное число, то мы имеем и — v тогда и только тогда, когда <р9(и) <p9(v). Следовательно, <р9 не может иметь ни двух фиксированных точек, ни содержать цикл длиной 2. (в) Такая перестановка V определяет также перестановку ip ребер Кп, отображающую {u, г>} ^({и,г>}) = {9?(ц), 9?(г>)}, и легко увидеть, что все циклы длиной ip четны. Если <р имеет t циклов, мы получим 2‘ самодополнительных графов, окрашивая ребра каждого цикла чередующимися цветами. (г) В этом случае <р имеет единственную фиксированную точку v, и G' = G\v является самодополнительным. Предположим, что <р имеет т циклов в дополнение к (у); тогда <р имеет г циклов, включая ребра, касающиеся вершины v, и имеется 2Г способов расширить G' до графа G. [Ссылки: Н. Sachs, Publicationes Mathematics* 9 (Debrecen, 1962), 270-288; G. Ringel, Arcbiv der Mathematik 14 (1963), 354-358.] 79. Решение 1, принадлежащее X. Caxcy (H. Sachs), с <р = (12 ... 4fc): пусть и — v, когда и>О0ии + « mod 4 < 1; а также 0—V, когда v mod 2 = 0. Решение 2, с <р = (ai bi ci di)... (a*, bk Ck dk), где Oj = 4j — 3, bj = 4j — 2, Cj = 4j — 1 и dj — 4j: пусть 0 — bj — aj — Cj — dj — 0 для 1 < j < k и at — aj — bi — dj — d — Cj — di — bj — ai для 1 < i < j < k. 80. (Решение Г. Рингеля (G. Ringel).) Пусть <p та же, что и в ответе к упр. 79, решение 2. Пусть Ео состоит из 3fc ребер bj — aj — Cj — dj для 1 < j < к-, Ei представляет собой 8(*) ребер между {<z>, bi, a, di} и {bj,dj} для 1 < г < j < к; а Ег —8(*) ребер между {а<, b,, a,d,} и {aj,Cj} для 1 < i < j < к. В случае (а) Ео U Ei дает диаметр 2; Ео U Ег дает диаметр 3. Случай (б) аналогичен, но мы добавляем 2к ребер bj —0 — dj к Ei и aj —0 — Cj к Ег. 81. Сз, Кз, D = о—>ofzio, и DT = «—(Ориентированный граф DT, обратный к ориентированному графу D, получается путем обращения направления его дуг. Имеется 16 неизоморфных простых ориентированных графов порядка 3 без циклов, 10 из которых самообратны, включая Сз и Кз) 82. (а) Истинно по определению, (б) Истинно: если каждая вершина имеет d соседей, каждое ребро и—v имеет d — 1 соседей и—w и d — 1 соседей w — v. (в) Истинно: {a;, bj} имеет т + п — 2 соседей для 0 < г < т и 0 < j < п. (г) Ложно: L(Kipp) имеет 5 вершин и 8 ребер, (д) Истинно, (е) Истинно: единственными несмежными ребрами являются {0,1} {2,3}, {0,2} {1,3}, {0,3} {1,2}. (ж) Истинно для всех тг > 0. (з) Ложно, за исключением случая, когда G не имеет изолированных вершин. 83. Это граф Петерсена. [A. Kowalewski, Sitzungsberichte der Akademie der Wissenschaften in Wien, Mathematisch-Nat. Klasse, Abteilung Ila, 126 (1917), 67-90.] 84. Да: положим 9?({au,b„}) = {a(u+v)modз,Ь(и-г>)mods} для 0 < u,v < 3. 85. Пусть степенями вершин являются {di,...,dn}. Тогда G имеет |(di Ч-1-dn) ребер, a L(G)— |(di(di —!) + ••• + d„(dn — 1))- Таким образом, и G, и L(G) имеют ровно по п ребер тогда и только тогда, когда (di — 2)2 + • + (dn — 2)2 = 0. Следовательно, упр. 58 дает искомый ответ. [См. V. V. Menon, Canadian Math. Bull. 8 (1965), 7-15.] 86. Если G = to G = = L(G). 87. (а) Да, легко. [В действительности Р. Л. Брукс (R. L. Brooks) доказал, что каждый связный граф с максимальной степенью вершин d > 2 является d-раскрашиваемым, за исключением полного графа Kd+i; см. Proc. Cambridge РЫ1. Soc. 37 (1941), 194-197.] (б) Нет. По сути, имеется только один способ 3-раскрашивания ребер внешнего цикла длиной 5 на рис. 2, (д); но он приводит к конфликту с внутренним циклом длиной 5. [Петерсен доказал это в 1898 году.]
590 ОТВЕТЫ К УПРАЖНЕНИЯМ 7 88. Один цикл, который не использует центральную вершину, и (п — 1)(п — 2) циклов, которые это делают (а именно, по одному для каждой упорядоченной пары различных вершин на “ободе" колеса). При этом подсчете мы не учитываем Со- /А ОО\ /A J J\ /А J J\ /АО О\ 89. Обе части равны I О В О I, I J В J I, |OBj|,|JBO|, соответственно. \О ОС/ \J J С/ \О ОС/ \] J с) 90. Кц и Ад; АГ1.1.2 и Алд,г; Аг,г = Ct и Аг,г; А1,з и А1,з; Ai ф А1,г и его дополнение; все графы Ка являются сографами согласно (39). Не является таковым Ра = Ра. (Все связанные подграфы сографа имеют диаметр < 2; сографом является Из, но не Ив.) 91- (а) П; (б) X; (в)_И; (г) П; (д) И; (е) 1 I; (ж) X- (в Общем случае имеем Kz/\H = (АгпВ)и(Аг®В) и К^оН = Н — Н. Таким образом, совпадение АгдВ = АгоВ и К^оН = АгиВ осуществляется тогда и только тогда, когда Н является полным графом.) Мнемотехника: используемые обозначения G □ Н и G El Н отлично соответствуют диаграммам (а) и (в), как отмечал Я. Нешетржил (J. Nesetfil), Lecture Notes in Comp. Sci. 118 (1981), 94-102. Его аналогичная рекомендация писать G х Н для (б) не менее привлекательна; но здесь мы ею не пользуемся, так как сотни авторов применяют G х Н для обозначения G □ Н. 92. (а)П; (6)^! (в)И: (ГЖ: («Ж- 93. Кт и Кп = Кт о Кп “ Ктп- 94. Нет; они являются порожденными подграфами Аге □ Аге □ Аге □ Аге □ Аге. 95. (a) dn + du', (б) dud», (в) dudv + dn + dv- (r) du(n — du) + (m — dn)du\ (д) d^n + du. 96. (a) AaB = A®I + I®B; (6) АиВ = AcjB + A®B; (в) АлВ = A®J + J®B — 2A®B; (г) Ao В = A® J +1® В. (Формулы (а), (б) и (г) определяют произведения произвольных ориентированных графов и мультиграфов. Формула (в) справедлива в общем случае для простых ориентированных графов; однако, когда А и В содержат значения > 1, в результирующей матрице могут наблюдаться отрицательные элементы.) Историческая справка: прямое произведение матриц часто называется произведением Кронекера, поскольку К. Хенсель (К. Hensel) [Cre/le 105 (1889), 329-344] говорил, что слышал о нем на лекциях Кронекера; однако Кронекер о нем никогда ничего не публи- ковал. Первое известное появление его в печати—в статье И. Г. Зехфусса (J. G. Zehfuss) [Zeitschrift fur Math, und Pbysik 3 (1858), 298-301], который доказал, что det(A ® В) = (det A)n(detB)m при m = m' и n = n'. Основные формулы (A ® B)T = AT ® BT, (A ® B)(A' ® В') = АА' ® BB' и (A ® В)-1 = A-1 ® В-1 были открыты А. Гурвицем (A. Hurwitz) [Math. Annalen 45 (1894), 381-404]. 97. Операции над матрицами смежности доказывают, что (G®G')nH = (GnH)®(G'nH)-, (СфС')иВ = (СиВ)ф(С'иВ); (G®G')oB = (GoB)®(G'oB). Поскольку GoH “ HnG, G ® H — H ® G и GsH = H И G, мы также получаем праводистрибутивные законы Go(H®h') “ (GdB)®(GdB'); G ® (Н ф Н') “ (G ® В) ф (G ® В'); Св(ВфВ') “ (GbB) ф (Ge В'). Лексикографическое произведение удовлетворяет уравнению Go В = G о В; также Кт ° Н = Н — — Н, следовательно, Кт ° Кп = Кп,...,п. Кроме того G о Ап = G в An; Ат о Ап = Am ® Ап = L(Am,n). 98. Имеется kl компонентов (в силу закона дистрибутивности из предыдущего упражне- ния и того факта, что G □ В и G и В связны, когда связны G и В). 99. Каждый путь от (u,v) др (и',v') в GoB должен использовать как минимум dc(u,u) “G-шагов” и как минимум dn(v,v') “В-шагов”; и этот минимум достижим. Аналогичные рассуждения показывают, что <1свн((и,v),(u',v')) = тах(Яс(и,и'),duty,v')). 100. Если G и В связны и если каждый из них имеет как минимум две вершины, G ® В является несвязным тогда и только тогда, когда G и В двудольны. Часть “тогда”
7 ОТВЕТЫ К УПРАЖНЕНИЯМ 591 проста; и обратно, если существует нечетный цикл в G, можно добраться от (и, и) до (и, г/) следующим образом: сначала перейти к (u",v'), где и"—любая подходящая вершина G. Затем пройти четное число шагов в G от и" до и , при чередовании в Н между v и одним из ее соседей. [Р. М. Weichsel, Proc. Amer. Matb. Soc. 13 (1962), 47-52.] 101. Выберем вершины u и v с максимальной степенью. Тогда du + dv = dudv согласно упр. 95; так что либо G — Н = К±, либо du = dv = 2. В последнем случае G = Рт или Ст и Н = Рп или Сп. Но граф GnH связный, так что G или Н должен быть не двудольным; скажем, это G. Тогда G □ Н является не двудольным, так что Н также должен быть не двудольным; таким образом, G - Ст и Н = Сп, где и т, и п нечетны. Кратчайший нечетный цикл в Сти Сп имеет длину min(m,n); в Ст ® Сп он имеет длину max(m, п); следовательно, т = п. И наоборот, если п > 3 нечетно, то мы имеем СпаСп — Сп®Сп при изоморфизме, который отображает (и, v) ((u + и) mod п, (и — и) mod п) для 0 < и, v < п. [D. J. Miller, Canadian J. Matb. 20 (1968), 1511-1521.] 102. Pm И Fn. (Это планарный граф только тогда, когда min(m, ri) < 2 или т = п = 3.) 103. 1 2 3 4 5 7 1 2 3 4 5 6 7 EE 2 1 3 4 6 8 2 1 3 4 6 8 9 3 1 2 5 6 8 3 1 2 5 6 8 9 4 1 2 5 6 4 1 2 5 7 5 3 4 1 7 5 3 4 1 7 6 2 3 4 6 2 3 1 7 7 5 1 7 4 5 6 1 8 2 3 8 2 3 1 9 9 8 2 3 1 104. Ребра должны создаваться в несколько непрямом порядке, чтобы поддерживать фор- му таблицы. Переменные г и г разграничивают доступные строки в столбце t. Например, вторая часть упр. 103 начинается с г <— 1, t f- 8, г <— 1; затем 9 — 1, г <— 2, t <— 6, г <— 3; затем 9 — 3, 9 — 2, г 4, t 4, г <— 8; а затем 9 — 8. 105. Заметим, что dk > к тогда и только тогда, когда Ск > к. Когда dk > к, мы имеем ci Ч----1-Cfc = fc2+min(fc, dfc+i)+ min(fc, dfc+2)-I--|-min(fc, d„); следовательно, условие di + • • • + dk < Ci + • • • + c& — к эквивалентно условию di Ч------l-dfc</(fc), где/(fc) = fc(fc—1) 4-min(fc,dfc+i) Ч------1-min(fc, dn). (♦) Если к > s, имеем /(fc4-l)—/(fc) = 2fc—dfc+i > dfc+i; следовательно, (*) выполняется для 1 < к < п тогда и только тогда, когда оно выполняется для 1 < к < s. Условие (*) было открыто П. Эрдешем (Р. Erdos) и Т. Галлаи (Т. Gallai) [Matematifcai Lapofc 11 (1960), 264-274]. Его необходимость очевидна, если рассмотреть ребра между {1,..., fc} и {fc4-l,..., п}. Пусть ak = di + + dk — ci — — Ck + к, и предположим, что мы достигли > О на шаге Н2 для некоторого к < s. Пусть Aj, Cj, Dj, N и S представляют собой числа, соответствующие aj, Cj, dj, п и s перед шагами НЗ и Н4; таким образом, N = п Ч- 1, Dj = dj Ч- (0 или 1), и т. д. Мы хотим доказать, что Ак > 0 для некоторого К < S. Шаги НЗ и Н4 должны удалять строку N и остающиеся q нижних ячеек в столбце t, для некоторого t > S и q > 0, вместе с крайними справа ячейками в строках с 1 по р. Если р > 0, имеем Ct+i = р. Пусть г = Dn = р Ч- q и u = Ct. Заметим, что Dj = t для р < j < и и Cj — N для 1 < j < г; также Aj = aj для 1 < j < р. Если fc минимально, имеем 1 < Як < dk — Ск Ч-1; следовательно, Ск < dk. Если Dk > t, то fc < р и Afc = аь. Если Dk < t, отсюда следует, что Ак = Як + г — min(fc,r) > ак, поскольку fc < Dk- Таким образом, можно положить, что Dk = t. Предположим, что t > S; следовательно, и < S. Для к < j < и мы имеем dj > Dj — 1 = t — 1 > dk — 1 > Ck — 1 > Cj — 1. Таким образом, au > Ofc > 0. Ho Au — au,
592 ОТВЕТЫ К УПРАЖНЕНИЯМ 7 поскольку г < и < S < t. Следовательно, можно считать, что t = S. Предположим, что к < t; тогда сь = dk = t, поскольку S < сь < dk < t. Но т = t приводит к Ск = N — 1 и к противоречию; а т < t приводит к и = t, откуда следует, что At > At-i = Ot-i — 1 > 0. (Глубокий вздох.) Хорошо; мы свели задачу к случаям к = t = S. Следовательно, t = s < Ct < dt < Dt = t, и мы имеем at = at-i + 1. Поэтому at-i = 0. В действительности можно показать по индукции по t — j, что aj = 0 для р < j < t: если aj+i = 0, то 0 > aj — cj+i — t — 1 > q — 1 > 0, поскольку cj+i > t + q при p < j < t — 1. Если p < t — 1, эти рассуждения доказывают, что q=lnCr = N—l = t+l. Мы заключаем, что, независимо от р, должно выполняться q = 1, N -- t + 2, Dj — t + 1 для 1 < j < p, Dj = t для p < j < f +1 и Dn = p + 1. Алгоритм H в действительности заменяет эту “хорошую” последовательность “плохой”; но Di Ч 1- Dn = 2р + t(t +1) + 1 нечетно. 106. Ложно в тривиальных случаях, когда d < 1 tin > d+2. В противном случае истинно: действительно, первые п — 1 ребер, сгенерированные на шаге Н4, не содержат циклов, так что они образуют остовное дерево. 107. Перестановка ip из упр. 78 отображает вершину со степенью d в вершину со степе- нью п — 1 — d. A ip2 представляет собой автоморфизм, который объединяет в пары две вершины с одинаковыми степенями, за исключением возможной фиксированной точки со степенью (п — 1)/2. (И обратно, немного запутанное расширение алгоритма Н будет строить самодо- полнительный граф из каждой графической последовательности, которая удовлетворя- ет этим условиям, давая d(n_i)/2 = (п — 1)/2 при нечетном п. См. К. Р. Д. Клафам (С. R. J. Clapham) и Д. И. Кляйтман (D. J. Kleitman), J. Combinatorial Theory В20 (1976), 67-74.) 108. Мы можем считать, что df > > d„; входящие степени не должны нахо- диться в некотором определенном порядке. Применим алгоритм Н к последовательности di dn = ...dn, но co следующими изменениями. Шаг Н2 становится следующим: “[Выполнено?] Завершить работу алгоритма успешно, если di = п = 0; завершить работу алгоритма неудачно, если di > п”. На шаге НЗ заменить “j <— dn” на “j 1— d„" и завершить работу алгоритма неудачно, если j > ci. На шаге Н4 заменить “установить ... и устано- вить” на “если j > 0, установить m <— ct, создать дугу m—и установить”; и установить п Ч— п — 1 непосредственно перед возвратом к шагу Н2. Рассуждения, подобные лемме М и следствию Н, обосновывают этот подход. (В упр. 7.2.1.4-57 доказывается, что такие ориентированные графы существуют тогда и только тогда, когда df + • • • + dn = d+ + • • • + d„ и df ...d„ = {di,..., d„}, где di > ••• > d!n и d'i...d„ мажоризируются сопряженным разбиением ci-..cn = (d+...d£)T. Вариант, когда петли v —> v запрещены, оказывается более сложным; см. Д. Р. Фалкерсон (D. R. Fulkerson), Pacific J. Math. 10 (1960), 831-836.) 109. Это то же самое, что и упр. 108, если положить d* = dk [k < m] и d& = dk [k > m]. 110. Имеется p вершин степени d = di и q вершин степени d — 1, где p + q = n. Случай 1, d = 2k + 1. Строим и — v, когда (и — v) mod n 6 {2,3,..., k + 1, n — k — 1,..., n — 3,n — 2}; добавим также р/2 ребер 1 — 2, 3—4, ..., (р—1) —р. Случай 2, d = 2k > 0. Строим и — и, когда (и — v) mod п € {2,3,..., к, п — к,..., п — 3,п — 2}; добавим также ребра 1-2, ..., (q— 1)-q и путь или цикл (q = 0? п: q)- (q+1)---------(n—1) — п. [Д. Л. Ванг (D. L. Wang) и Д. И. Кляйтман (D. J. Kleitman) в Networks 3 (1973), 225-239, доказали, что такие графы являются высокосвязными.] 111. Допустим, что N = п+п' и V' = {п+1,..., IV}. Мы хотим построить еь = d—dk ребер между к и V' и дополнительные ребра в V', так что каждая вершина V имеет степень d. Пусть а = ei + • • • + еп- Это возможно, только если (i) п' > max(ei,..., en); (ii) п'd > в; (iii) n'd < в + п'(п' — 1); и (iv) (п + n')d четно.
7 ОТВЕТЫ К УПРАЖНЕНИЯМ 593 Такие ребра существуют, когда п' удовлетворяет (i)-(iv). Первые s подходящих ребер между V и V могут быть созданы путем циклического выбора конечных точек (п+1, п+2,..., п+п', п+1,... ) в связи с (i). Этот процесс назначает каждой вершине из V' либо [s/n'J, либо [s/п'] ребер; согласно (ii) мы имеем [в/п'] < d и d — [s/n'J < п' — 1 в соответствии с (iii). Следовательно, дополнительные ребра, необходимые внутри V', могут быть построены с применением упр. 110 и (iv). Выбор п' = п всегда работает. И наоборот, если G = Kn(V) \ {1 — 2}, условие (iii) требует п' > п при п > 4. [Р. Erdos and Р. Kelly, АММ 70 (1963), 1074-1075.] 112. Единственным наилучшим треугольником в miles является 748 746 748 Saint Louis, МО ---- Toronto, ON -------- Winston-Salem, NC ------- Saint Louis, MO. 113. Согласно закону Мерфи (Murphy), в ней п строк и тп столбцов; так что это матрица размером п х т, а не m х п. 114. Петля в мультиграфе представляет собой ребро {а, а} с повторяющимися верши- нами, а мультиграф представляет собой 2-однородный гиперграф. Таким образом, мы должны позволить матрице инциденций обобщенного гиперграфа иметь элементы, пре- восходящие 1, когда ребро содержит вершину более одного раза. (Педант назвал бы это “мультигиперграфом’.’) С учетом этих соображений матрица инциденций и двудольный мультиграф, соответствующий (26), представляют собой 115. Элемент в строке е и столбце f матрицы ВТВ представляет собой bvebvf, так что ВТВ равно 21 плюс матрица смежности реберного графа L(G). Аналогично ВВТ представляет собой D плюс матрица смежности графа G, где D—диагональная матрица с dvv = степень v. (См. упр. 2.3.4.2-18, 19 и 20.) 116. Обобщая (38), Km.n = Km Ф Кп'1 для всех г > 1. 117. Неизоморфные мультимножества одновершинных ребер для тп = 4 и V = {0,1,2} представляют собой {{0}, {0}, {0}, {0}}, {{0}, {0}, {0}, {1}}, {{0}, {0}, {1}, {1}} и {{0}, {0}, {1}, {2}}. В общем случае ответом является число разбиений тп на не более п частей, а именно |т^п|, с использованием обозначений, поясняемых в разделе 7.2.1.4. (Конечно, причин представлять разбиения как 1-однородные гиперграфы нет никаких — разве что для решения таких странных упражнений.) 118. Пусть d—сумма степеней вершин. Соответствующий двудольный граф представляет собой лес с тп + п вершинами, d ребрами и р компонентами. Следовательно, согласно теореме 2.3.4.1A d = m + п — р. 119. В этом случае имеется дополнительное ребро, содержащее все семь вершин. 120. Было бы логично говорить, что (гипер)дуги представляют собой произвольные после- довательности вершин или последовательности разных вершин. Но большинство авторов, похоже, определяют гипердуги как А —>г>, где А—неупорядоченное множество вершин. Когда наконец будет найдено наилучшее определение, вероятнее всего, окажется, что оно имеет наиболее важные практические приложения. 121. х(Н) = |+| — а(1(Н)т) представляет собой размер наименьшего покрытия V множе- ствами F. 122. (а) Можно убедиться, что имеется всего семь трехэлементных покрытий, а именно вершин ребра; так что всего имеется семь четырехэлементных независимых множеств, а именно дополнений ребра. Мы не можем выполнить 2-раскрашивание гиперграфа, по- скольку один цвет должен использоваться 4 раза, а три другие вершины должны быть
594 ОТВЕТЫ К УПРАЖНЕНИЯМ 7 ребром. (Гиперграф (56), по сути, представляет собой проективную плоскость с семью точками и семью прямыми.) (б) Поскольку мы рассматриваем дуальный граф, будем называть вершины и реб- ра графа Петерсена “точками” и “прямыми”; тогда вершины и ребра дуального графа являются соответственно прямыми и точками. Окрасим в красный цвет пять прямых, которые соединяют внешнюю точку с внутренней. Остальные десять прямых независимы (они не содержат все три прямые, касающиеся любой точки); так что их можно окрасить в зеленый цвет. Никакое множество из одиннадцати прямых не может быть независимым, поскольку никакие четыре прямые не могут касаться всех десяти точек. (Таким образом, граф, дуальный графу Петерсена, представляет собой двудольный гиперграф, несмотря на тот факт, что он содержит циклы длиной 5.) 123. Оно соответствует латинским квадратам п х п, элементы которого представляют собой цвета вершин. 124. Граф легко раскрасить в четыре цвета. Если бы он был раскрашиваемым в три цвета, то должно быть по четыре вершины каждого цвета, поскольку никакие пять вершин не могут быть независимыми. Тогда два противоположных угла должны быть окрашены в один и тот же цвет, что быстро приводит к противоречию. 125. Граф Чватала является наименьшим таким графом при д = 4. Г. Бринкманн (G. Brinkmann) нашел наименьший граф для д = 5. Он имеет 21 вершину aj, bj, Cj для 0 < j < 7 с ребрами aj aj-f-2, Oj Oj 6j^-i, bj Cj, bj ~~~— ^j-t-2, Cj — Cj-1-3 и индексами по модулю 7. М. Мерингер (М. Meringer) показал, что при д > 5 граф должен иметь как минимум 35 вершин. Б. Грюнбаум (В. Griinbaum) предположил, что значение д может быть произвольно большим; однако никаких других построений пока не известно. [See АММ 77 (1970), 1088-1092; Graph Theory Notes of New York 32 (1997), 40-41.] 126. Когда тип четны, и Ст, и Сп являются двудольными, и выполнить 4-раскрашива- ние легко. В противном случае 4-раскрашивание невозможно. Когда тп = п = 3, согласно упр. 93, оптимальным является 9-раскрашивание. Когда т = 3 и п = 4 или 5, независимы не более двух вершин; и легко найти оптимальное 6- или 8-раскрашивание. В противном случае мы получаем 5-раскрашивание, окрашивая вершину {j, к) цветом (aj + 26fc) mod 5, где периодические последовательности (аД и (Ьь) (имеющие периоды тип соответственно) обладают тем свойством, что aj—aj+i = ±1 и bk—bk+i = ±1 для всех j и к. [К. Vesztergombi, Acta Cybernetica 4 (1979), 207-212.] 127. (а) Результат истинен при n = 1. В противном случае положим Н = G \ v, где v является произвольной вершиной. Тогда Н = G \ v и мы имеем х(Н) + х(Н) < п по индукции. Ясно, что x(G) < х{Н) + 1 и х№) — х(Н) + 1; так что никаких проблем не возникает, если только во всех трех случаях не достигается равенство. Но этого не может случиться; отсюда вытекает, что х(Н) < d и х(Н) < п — 1 — d, где d является степенью v в G. [Е. A. Nordhaus and J. W. Gaddum, AMM 63 (1956), 175-177.] Для достижения равенства положим G = Ка ф Къ, где а6>0иа + 6=п. Тогда мы имеем G = Ка—Кь, x(G) = а и x(G) = 6+1. [Все графы, для которых выполняется равенство, были найдены Г.-И. Финком (H.-J. Finck), Wiss. Zeit. der Tech. Hochschule Ilmenau 12 (1966), 243-246.] (6) k-раскрашивание G имеет как минимум [n/k] вершин некоторого цвета; эти вершины образуют клику в G. Следовательно, y(G)y(G) > y(G)[n/y(G)] > п. Равенство достигается, когда G = Кп. (Из (а) и (б) мы выводим, что x(G) + x(G) > 2^/п и y(G)y(G) < |(n + I)2.) 128. x(GdH) = max(x(G),x(77))- Очевидно, что это количество цветов является необхо- димым. И если функции а(и) и 6(г>) раскрашивают G и Н цветами {0,1,..., к — 1}, то мы можем раскрасить G □ Н следующим образом: с(и, v) = (а(и) + 6(v)) mod к.
7 ОТВЕТЫ К УПРАЖНЕНИЯМ 595 129. Полная строка или столбец (16 случаев); полная диагональ длиной 4 или более (18 случаев); 5-ячеечный шаблон {(х,у),(х—а,у—а),(х—а,у+а),(х+а,у—а),(х+а,у+а)}, где а € {1,2,3} (36 +16 + 4 случаев); 5-ячеечный шаблон {(а:, у), (х—а, у), (т+а, у), (х, у—а), (х, р+а)}, где а € {1,2,3} (36 + 16 + 4 случаев); шаблон, содержащий четыре из пяти таких ячеек, при пятой, лежащей за пределами доски (24 + 32 + 24 случаев); или 4-ячеечный шаблон {(а:, у), (т+а, у), (х, у+а), (т+а, р+а)}, где а € {1,3,5,7} (49 + 25 + 9+ 1 случаев). Всего 310 максимальных клик, соответственно (168,116,4,4,18) клик размером (4,5,6,7,8). 130. Если граф G имеет р максимальных клик, а граф Н имеет их q, то соединение G— Н имеет pq максимальных клик, поскольку клики G — Н представляют собой просто объединения клик из G и Н. Кроме того, пустой граф Кп имеет п максимальных клик (а именно их одноэлементные множества). Таким образом, полный fc-дольный граф с размерами частей {п1,...,п&}, будучи соединением пустых графов этих размеров, имеет ni... максимальных клик. 131. Считаем, что п > 1. В полном fc-дольном графе число ni... пь максимально, когда каждая часть имеет размер 3, за исключением, возможно, одной или двух частей разме- ром 2. (См. упр. 7.2.1.4-68, (а).) Так что мы должны доказать, что А(п) не может быть больше этого значения в любом графе. Пусть m(v) — количество максимальных клик, содержащих вершину v. Если и v и т(и) < тп(у), построим граф G', который подобен графу G, с тем отличием, что и теперь смежна всем соседям v вместо своих прежних соседей. Каждая максимальная клика U в любом из этих графов принадлежит одному из трех классов. i) u € U-, имеется т(и) таковых в G и т(у) в G'. ii) v € U; имеется m(v) таковых как в G, так и в G'. iii) и £ U и v £ U; такие максимальные клики в G являются максимальными и в G'. Следовательно, G' имеет как минимум столько же максимальных клик, сколько и G. А мы можем получить полный fc-дольный граф путем соответствующего повторения описанного процесса. [Это рассуждение П. Эрдеша (Р. Erdos) было представлено Д. У. Муном (J. W. Moon) и Л. Мозером (L. Moser) в Israel J. Math. 3 (1965), 23-25.] 132. Сильное произведение клик в G и Н представляет собой клику в G И Н, согласно упр. 93; следовательно, uj(GbH) > u>(G)u>(H) = x(G)x(H). С другой стороны, раскра- шивания а(и) и b(v) графов G и Н приводят к раскрашиванию c(u,v) = (a(u),b(v)) графа GbH-, следовательно, x(Gk77) < x(G)x(H), aio(G^H) < x(GsH). 133. (a) 24; (6) 60; (в) 3; (г) 6; (д) 6; (e) 4; (ж) 5; (з) 4; (и) Kz я С12; (к) 18; (л) 12; (м) да, степени 5; (н) нет. [На самом деле в 2009 году Маркус Чимани (Markus Chimani) прибег к методу ветвления и отсечений, чтобы доказать, что этот граф нельзя начертить менее чем с 12 пересечениями.] (о) Да; в действительности он является 4-связным (см. раздел 7.4.1). (п) Да; мы рассматриваем каждый граф как ориентированный, с двумя дугами для каждого ребра, (р) Конечно же, нет. (с) Да, и это легко увидеть. [Музыкальный граф представляет простые модуляции между знаками ключей. Он появляется на странице 73 книги Graphs Р. Д. Вильсона (R. J. Wilson) и Д. Д. Уоткинса (J. J. Watkins) (1990).] 134. Путем поворотов и/или обменов внутренних и внешних вершин мы можем найти автоморфизм, который отображает любую вершину в С. Если С фиксировано, можно обменивать внутренние и внешние вершины любого подмножества оставшихся 11 пар и/или выполнять отражение по горизонтали. Следовательно, всего имеется 24 х 211 х 2 = 98304 автоморфизма. 135. Пусть w=e2’ri/,12) и определим матрицы Q = (qij), S=(sij), где q,j = [j=(i + 1) mod 12] и stj = шгз для 0 < г, j < 12. Согласно упр. 96, (б), матрица смежности музыкального графа
596 ОТВЕТЫ К УПРАЖНЕНИЯМ 7 Kz иС12 представляет собой А = (J })®(7+<2+<2 ) — I. ПустьТ—матрица (} тогда Т~АТ представляет собой диагональную матрицу D, первые 12 элементов которой— 1 + 4 cos для 0 < j < 12, а другие 12 элементов равны —1. Следовательно, А2тп = TD2mT~, и отсюда следует, что количество 2т-шаговых блужданий от С до (C,G,D, А,Е, В, F#) соответственно равно Cm = i(25m + 2(13 + 4л/3)т + 32т+1 + 2(13 - 4л/3)т + 16); Gm = ^(25т + 1/3(13 + 4л/3)т - л/3(13 - 4л/3)т - 1); Dm = (25™ + (13 + 4л/3)т + (13 - 4л/3)т - 3); Ат = ^j(25m — 32т+1 + 2); Ет = ^(25т - (13 + 4л/3)т - (13 - 4л/3)т + 1); Вт = я(25"* - ^(13 + 4'/з)т + '/зС13 - -О; F*, = (25™ - 2(13 + 4л/з)т + 32т+1 - 2(13 - 4л/3)т); также ат = Ст—1, dm = Fm = ет = Gm и т. д. В частности, (С6, G6, D6, А6, Е6, В6, F|) = (15462617, 14689116, 12 784356, 10106096, 7560696, 5655936, 5015 296), Так что искомая вероятность равна 15462617/512 « 6.33%. При т —> оо все вероятности равны +О(0.8т). 136. Нет. Только два графа Кейли порядка 10 являются кубическими, а именно Kz □ Съ (вершины которого могут быть записаны как {е,а, а2, а3, а4, ^3,/За,/За2,/За3,/За4}, где а5 = /З2 - (а/3)2 = е), и граф с вершинами {0,1,...,9} и дугами v —> (n±l)modl0, v —> (г+5) mod 10. [См. D. A. Holton and J. Sheehan, The Petersen Graph (1993), ynp. 9.10. Кстати, SGB-графы raman(p,q,t,0) являются графами Кейли.] 137. Пусть [rr, р] означает метку (а:,р); нам нужно, чтобы условие [х,р] = [а: + а, у + 6] = [а:+с, р+d] выполнялось для всех хну. Если А представляет собой матрицу ( “ $ ), операция добавления t раз нижней строки А к верхней строке заменяет матрицу А матрицей А' = (' [) А = (“, j,), где о! = а + tc, b' = b + td, d = с, d' = d. Новое условие [гг,р] = [а: + а', у + Ь7] = [а: + d,y + d'] эквивалентно старому; a gcd(a',6',c',d') = gcd(a, 6, с, d). Аналогично можно умножить А слева на (] ®) без реального изменения задачи. Можно также работать и со столбцами, заменяя А на А” = А(* [) = (“," %",), где а" = а, Ь" = ta + 6, с" = с, d" = tc + d. Эта операция изменяет задачу, но только немного: если мы найдем присваивание меток, которое удовлетворяет условию [а:, р] = [а:+а", j/+b"J = [т+с", j/+d"J для всех х и у, то мы получим [а:, р] = [rr+а, р+6] — [х+с, a:+d], если [а:, р] = [а:, у + te]. Аналогично можно умножить А справа на ( J °); задача останется почти той же самой. Ряд таких операций над строками и столбцами приводит А к простому виду UAV = ( о ° ), где U и V—целочисленные матрицы, такие, что det U = det V = 1. Кроме того, если V = (“ ^), присваивание меток для приведенной задачи, которое удовлетворяет простым условиям Да:, j/J = Ца: + l,j/J = [а:, у + nJ, будет предоставлять решение и для исходной задачи присваивания меток, если определить [гг, р] = [аа: + уу, [Зх + dj/J. Наконец, приведенная задача присваивания меток проста: положим [a:, j/J = у mod п. Таким образом, искомый ответ заключается в установке р = /3, q = 6. 138. Действуя, как и ранее, но с матрицей А размером к х к, операции со строками и столбцами приведут задачу к диагональной матрице UAV. Диагональные элементы (di,..., dfc) характеризуются тем условием, что di... dj является наибольшим общим де- лителем детерминантов всех j х j подматриц А. [Это “нормальная форма Смита”; см. Н. J. S. Smith, Philosophical Transactions 151 (1861), 293-326, §14.] Если присваивание меток [a:J удовлетворяет приведенной задаче, то исходную задачу решает [rr] = [a:Vj. Количество элементов в обобщенном торе равно п = det А = di... dk.
7 ОТВЕТЫ К УПРАЖНЕНИЯМ 597 Приведенная задача имеет простое решение, как ранее, если di = • • • = dk-i = 1. Но в общем случае приведенное присваивание меток представляет собой r-мерный одинарный тор с размерностями (dfc_r+i, • • • ,dk), где dk-r+i > dfc-r = 1- (Здесь do = 1; г может быть равно к.) Для примера из условия задачи мы находим di = 1, dz = 2, da = 10, п — 20; в действительности (1 —2 0\ /3 1 1\ /1 5 6\ 0 1-1||13 1||0 11| -1-1 4/ \1 1 3/ \0 0 1/ (1 0 0 X 0 2 0 . 0 0 10/ Каждая точка (х, у, z) теперь получает двумерную метку (и, v) = ((5а: + у) mod 2, (6а: + у + z) mod 10). Шестью соседями (u, v) являются ((u±l) mod 2, и), ((u±l) mod 2, (nil) mod 10), (u, (и ± 1) mod 10). Это — мультиграф, поскольку первые два соседа идентичны; но это не то же, что мультиграф Cz И Сю, который имеет степень 8. [Обобщенные торы, по сути, представляют собой графы Кейли абелевых групп; см. упр. 136. Они были предложены в качестве удобных сетей соединений; в этом случае жела- тельно минимизировать диаметр при заданных к и п. См. С. К. Wong and D. Coppersmith, JACM 21 (1974), 392-402; С. M. Fiduccia, R. W. Forcade and J. S. Zito, SIAM J. Discrete Math. 11 (1998), 157-167.] 139. (Это упражнение помогает уяснить разницу между помеченными графами G, в ко- торых вершины имеют определенные имена, и непомеченными графами Н, такими как представленные на рис. 2.) Если Nh — количество помеченных графов на множестве {1,2, . ..,h}, изоморфных Н, и если U—любое h-элементное подмножество V, то вероятность того, что G | U изоморфен Н, равна ^Ун/г^-1^2. Следовательно, искомый ответ — (^)№//2h^h-1^2. Нам нужно только вывести значение Nh, которое соответственно равно: (а) 1; (б) h!/2; (в) (h — 1)!/2; (г) Ы/а, где Н имеет а автоморфизмов. 140. (a) #(K3:Wn) = п-1 и #(P3:Wn) = (п~1) для п > 5; также #(Кз:Ж8) = 7. (б) G пропорционален тогда и только тогда, когда #(R3:G) = #(R3:G) = |(£) и #(P3:G) = #(P3:G) = |("). Если G имеет е ребер, то (п - 2)е = 3#(R3:G) + 2#(P3:G) + #(P3:G), поскольку каждая пара/вершин появляется в п—2 порожденных подграфов. Если G имеет последовательность степеней di... dn, то di + • • + dn = 2е, (I1) + • • • + (d^*) = 3#(K3:G)+#(P3:G) H<ii(n—1—di)-l f-dn(n—1—dn) = 2#(P3:G)+2#(P3:G). Следователь- но, пропорциональный граф удовлетворяет (♦), если только п не равно 2. (Упражнение должно исключать такой случай.) И обратно, если G удовлетворяет (*) и имеет корректное значение #(K3:G), то он также имеет корректные значения #(P3:G), #(P3:G) и #(K3:G). [Ссылки: S. Janson and J. Kratochvil, Random Structures & Algorithms 2 (1991), 209-224. В J. Combinatorial Theory B47 (1989), 125-145, Э. Д. Барбур (A. D. Barbour), M. Кароньски (M. Karonski) и А. Руциньски (A. Rucinski) показали, что дисперсия #(H:G) пропорциональна либо n2h-2, либо n2h~3, либо n2h-4, где первый случай осуществляется, когда Н не имеет |(£) ребер, а третий—когда Н является пропорциональным графом.] 141. Условию (*) удовлетворяют только 8 последовательностей степеней di.. .d3, а имен- но последовательности 73333333 (1/2), 65433322 (26/64), 64444222 (2/10), 64443331 (8/22), 55543222 (8/20), 55533331 (2/10), 55444321 (26/64) и 44444440 (1/2). Каждая последователь- ность степеней приведена со статистикой (Ni/N), где N — неизоморфные графы, имеющие данную последовательность, а М — сколько из них пропорциональны. Последние три слу- чая являются дополнениями первых трех. Не существует графов порядка 8, являющихся
598 ОТВЕТЫ К УПРАЖНЕНИЯМ 7 одновременно пропорциональными и самодополнительными. Максимально симметричны- ми примерами первых пяти случаев являются We, 142. Указание получается, как и в ответе к упр. 140; (n—3)#(Ks:G) и (п—3)#(Рз:б) могут также быть выражены через учет четырех вершин. Кроме того, граф с е ребрами имеет Q) = #(Рз С G) + #(Кг Ф Кг С G), поскольку любые два ребра образуют либо Рз, либо Ki ф Кг; в этой формуле #(Рз С G) учитывает подграфы, не обязательно являющиеся порожденными. Мы имеем #(Рз С G) = #(Ps:G) + 3#(Кз:С), а аналогичная формула выражает #(К2 ф К2 С G) через количества порождений. Таким образом, сверхпропорциональный граф должен быть пропорциональным и удовлетворять условиям е = IQ), #(Рз С G) = |(з), #(Кг ф К2 С G) = |("). Но эти значения противоречат формуле для (®). 143. Рассмотрим граф, вершины которого являются строками А, а ребра и — v означают, что строки и и и совпадают, за исключением одного столбца, j. Пометим такое ребро как j. Если граф содержит цикл, удалим любое ребро из цикла и будем повторять этот про- цесс до тех пор, пока циклов не останется. Заметим, что метка каждого удаленного ребра появляется еще где-то в этом цикле; следовательно, удаления не влияют на множество меток ребер. Но мы останемся менее чем с т < п ребрами согласно теореме 2.3.4.1 А; так что имеется менее чем п различных меток. [См. J. A. (Bondy), J. Combinatorial Theory В12 (1972), 201-202.] 144. Пусть G — граф на вершинах {1,..., т], в котором ребро г—j имеется тогда и толь- ко тогда, когда * хц хц * для некоторого I. Этот граф является fc-раскрашиваемым тогда и только тогда, когда имеется дополнение с не более чем fc различными строками. И обратно, если G представляет собой граф на вершинах {1,... , п}, с матрицей смежно- сти А, то матрица X = А + *( J — I — А) размером п х п обладает тем свойством, что г—j тогда и только тогда, когда * хц ф х-ц * для некоторого I. [См. М. Sauerhoff and I. Wegener, IEEE Trans. CAD-15 (1996), 1435-1437.] 145. Установить с ч— 0 и повторять следующие операции для 1 < j < п. Если с = 0, установить х Ч— aj и с Ч— 1; в противном случае при х = aj установить с Ч— с+1; в противном случае установить с ч— с — 1. Тогда х является ответом на поставленный вопрос. Идея заключается в отслеживании возможного мажоритарного элемента х, который встречается с раз в неотброшенных элементах; мы отбрасываем aj и один х, когда находим х ф aj. [См. Automated Reasoning (Kluwer, 1991), 105-117. Расширения для поиска за О(п log fc) шагов всех элементов, встречающихся более чем n/fc раз, рассматриваются Д. Мисрой (J. Misra) и Д. Грисом (D. Gries) в Science of Computer Programming 2 (1982), 143-152.] РАЗДЕЛ 7.1.1 1. (Решение К. Сартена (С. Sartena).) Он описал импликацию х => у, где “это” означает соответственно у, х, х, у, у, х. (Возможны и другие решения.) 2. Земной операцией, соответствующей науриканской х о р, является х о у- ее таблица истинности, таким образом, представляет собой обращение дополнения таблицы истинно- сти для о. Следовательно, ответами на поставленный вопрос являются соответственно Т, V, С, L, D, R, =, А, А, ф, R, D, L, С, V, J_. (Из любого тождества, включающего
7.1.1 ОТВЕТЫ К УПРАЖНЕНИЯМ 599 16 операций из табл. 1, вытекает соответствующее дуальное тождество, получающееся подстановкой науриканского эквивалента. Например, каждый из законов де Моргана (11) и (12) дуален другому, как и тождества (3) и (4), связывающие = и ф. В этом смысле = можно рассматривать как столь же полезную операцию, как и дуальная ей ф.) 3. (а) V; (б) Л; (в) L; (г) =. [В действительности многие формулы вычисляются лучше при использовании —1 для истины и +1 для лжи, несмотря на то, что такое соглашение выглядит прямо-таки аморально; тогда х у соответствует ф. Обратите внимание, что при любом соглашении (xyz) = sign(x + у + z).] 4. [Tians. Amer. Math. Soc. 14 (1913), 481-488.] (а) Начнем с таблиц истинности для |_ и P; затем вычислим таблицы истинности а/\/3 побитово из каждой известной пары таблиц истинности а и /3, генерируя результаты в порядке длины каждой формулы и записывая кратчайшие формулы, приводящие к каждой новой 4-битовой таблице. I : (х Л (х Л х)) Л (х Л (х Л х)) Л: (х Л у) Л (х Л у) D: (х Л (х Л у)) Л (х Л (х Л у)) L: х С: (у Л (х Л х)) Л (у Л (х Л х)) R: У ф: (у Л (х Л х)) Л (х Л (х Л у)) V: (у Л у) Л (х Л х) V : (х Л (х Л х)) Л ((у Л у) 7\ (х Л х)) =: (х Л у) Л ((у Л у) Л (х Л х)) R: г/Лр С: у Л (х Л х) L : х Л х D: х Л (х Л у) Л: х7\у Т: х Л (х Л х) (б) В этом случае начнем с четырех таблиц, J_, Т, L, R, и будем предпочитать формулы с меньшим количеством констант при выборе между формулами одной длины. ±: О Л : (х Л у) Л 1 D: ((у Л 1) Л х) Л 1 L: х С: (у Л (х Л 1)) Л 1 R: У ф: (у Л (х Л 1)) Л ((у Л 1) Л х) V : (у Л 1) Л (х Л 1) V: 1 Л ((у Л 1) Л (х Л 1)) = : (х7\ у) Л ((у Л 1) Л (х Л 1)) R: 2/Л1 С: у Л (х Л 1) L: х Л 1 D: (у7\ 1) Лх Л: х Л у Т: 1 D: у С х; l_: х; С: х С у; R: у; Прочие 10 операто- (б) При использовании констант можно выразить все 16 5- (а) ±: хСх; Л: (хСр)Ср; ров не могут быть выражены, операторов. ±: ° _ Л: (рС1)Сх D: уСх L: х С: хСу R: У ®: ((У С х)С. ((хС у) С 1)) С 1 V: (г/С(хС1))С1 V: г/С(хС1) =: (j/_cx)c((xcj/)ci) R: J/C1 С: (хСр)С1 L: хС1 D: (г/Сх)С1 Л: ((г/С1)Сх)С1 Т: 1 [В. A. Bernstein, University of California Publications in Mathematics 1 (1914), 87-96.] 6. (a) _L, Л, L, R, Ф, V, =, T. (6) ±, L, R, Ф, =, T- [Заметим, что все эти операторы ассоциативны. Фактически из указанного тождества вытекает закон ассоциативности в общем случае. Сначала мы имеем (i) (х о у) о ((z о у) о w) = ((х о z) о (zo у)) о ((z о у) о w) = (х о z) о w и аналогично (ii) (а: о (у о z)) о (у о w) = х о (z ° w). Кроме того, (iii) (х о у) о (z о ги) = (х о у) о ((z о у) о (у о w)) = (х о z) о (у о ш) согласно (i). Таким образом,
600 ОТВЕТЫ К УПРАЖНЕНИЯМ 7.1.1 (a:oz)ow = (a:oz)o((zoz)ow) = (a:o(zoz))o(zow) = a:o(zow) согласно (i), (iii), (ii). Свободная система, генерируемая {ai, ..., т„], имеет ровно п + 2пп2 различных элементов, а именно {хз I 1 < j' < и {xi о xjt о о xjr oxk\r>Onl<i,k<nnl<ji < < jr < n}.] 7. Это эквивалентно тому, что мы хотим, чтобы было справедливо тождество у о (х о у) = х, что выполняется только для ® и =. [Джевонс (Jevons) обратил внимание на это свойство ф в Pure Logic §151, но не занимался этим вопросом. Мы изучим обобщенные системы этой природы, называемые “gropes” в разделе 7.2.3.] 8. ({±,Л,С},£о), ({Т,V,D},Si), ({L,L},SonSi), ({ф,= R},S2), ({D, V}, S0nS2), ({С,Л}, Si n S2) и (R, любая), где So = {° | 0 о 0 = 0}, Si = {о | 1 о 1 = 1} и S2 = {° | xoy = acoj/J = {|_,R, L,R}. Таким образом, 92 из 256 пар являются леводистрибутивными. [Эта задача и задачи из упр. 6 впервые были рассмотрены Э. Шрёдером (Е. Schroder) в §55 его посмертной публикации Vorlesiingen fiber die Algebra der Logik 2,2 (1905). Он выразил ответ, по сути, указав, что соответствующие таблицы истинности (pqrs, wxyz) операторов (о, о) должны удовлетворять отношению ((pg V гз) t\z)V ((pqV fs) Лги) V ((pq V rs) Л ((го = г) V (т = у))) = 0.] 9. (а) Ложно; (х ф у) V z = (х V z) ф (у V z) ф z. (б) Истинно, поскольку тождество очевидным образом выполняется, когда z = 0 и когда z = 1. (в) Истинно; оно равно также (х Ф у) V (х ф z) = 1 — [т = у = г]. 10. Первый этап декомпозиции (16) дает нам функции с таблицами истинности д—10100011 и Л = 10100011 ф 10010011 = 00110000; продолжение этого процесса таким же образом дает l+y + xz + w + wy + wx + wxz (по модулю 2). 11. Указанный член присутствует тогда и только тогда, когда функция f(xi,, хп) ис- тинна нечетное число раз, когда xi = Х4 = xs = тт = хд = тю = - - - =0. (Имеется 2к таких случаев, когда мы устанавливаем все, кроме fc переменных, равными нулю.) Дру- гими словами, мультилинейное представление может быть выражено через обозначения наподобие f(x,у, z) = (/ооо + /оо.г + fo.oy + fo—yz + f»oox + f.o-xz + f.*oxy + f..,xyz) mod 2 проиллюстрированное здесь для случая п = 3, где /..о = /(1,1,0) ф /(1,0,0) ф /(0,1,0) ф /(0,0,0) и т. д. 12. (а) Подставим 1—w вместо w и т. д. в (23), получая l—y—xz+2xyz—w+wy+wx+wxz— 2wxyz. [Некоторые авторы называют это полиномом Жегалкина; но сам И. И. Жегалкин всегда работал по модулю 2. Другие названия, встречающиеся в литературе,— “полином доступности”(“availability polynomial”), “полином надежности” (“reliability polynomial”), “характеристический полином” (“characteristic polynomial”).] (б) Соответствующие коэффициенты для произвольной n-арной функции могут дости- гать абсолютных значений 2п~1 (и это по индукции является максимальным значением). Например, целочисленное мультилинейное представление xi Ф- - -®хп над целыми числами оказывается равным ei —2е2+4ез--Н(—2)п-1е„, где eit — fc-я элементарная симметричная функция от {ti,..., Тп}- Формула из ответа к предыдущему упражнению принимает вид f(x, у, z) = /ооо + foo.z + fo.oy + fo**yz + f»oox + f,0,xz + f»»oxy + f»,»xyz над целыми числами, где мы теперь имеем /.«о = /(1,1,0) — /(1,0,0) — /(0,1,0) + /(0,0,0) и т. д. Это расширение представляет собой замаскированный вид преобразования Адама- ра 4.6.4-(38). (в, г) Полином представляет собой сумму своих минитермов наподобие xi (1 — т2)(1 — тз)т4. Каждый минитерм неотрицателен при 0 < xi,... ,хп < 1, а сумма всех минитермов равна 1. (д) df /dxj = h(x) — д(х), где h{x) > д(х) согласно (г). (См. упр. 21.)
7.1.1 ОТВЕТЫ К УПРАЖНЕНИЯМ 601 13. В действительности F представляет собой в точности целочисленное мультилинейное представление (см. упр. 12). 14. Пусть rj = Рз/Ц — Pj). Нам нужно, чтобы /(0,0,0) = 0 и /(1,1,1) = 1 <=> Г1Г2гз > 1, /(0,0,1) = 0 и /(1,1,0) = 1« Г1Г2 > гз, /(0,1,0) = 0 и /(1,0,1) = 1 tt пгз > г2, /(0,1,1) = 0 и /(1,0,0) = 1 tt> Fi > Г2Г3. Так что мы получаем (а) (хххзхз)-, (б) ял; (в) хз. 15. Упражнение 1.2.6-10 говорит нам, что (^)mod2 = [x&fc = fc]. Следовательно, на- пример, = а?4 Л хз Л Ti (по модулю 2), когда х = (х„ ... a?i)2; и этим путем мы можем получить каждый член мультилинейного представления наподобие (19). Более того, нам не требуется работать по модулю 2, поскольку интерполяционный полином (15“х) в точности представляет ц Л хз Л х? Л ц. 16. Да, или даже на +, поскольку разные минитермы не могут быть одновременно ис- тинны. (Но мы не можем сделать это в обычной дизъюнктивной нормальной форме наподобие (25). См. упр. 35.) 17. Бинарная операция Л не является ассоциативной, так что выражение наподобие х Л у Л z должно рассматриваться как тернарная операция. Запись Шустрого корректна, если рассматривать НЕ-И как n-арную операцию, при этом учитывая, что НЕ-И одной переменной х представляет собой х. 18. Если это не так, можно установить и± <—•••<— и3 <— 1 и гл <—•••<— vt <— 0, делая / одновременно ложной и истинной. (И если мы рассмотрим многократное применение закона дистрибутивности (2) к DNF, пока не получим CNF, то обнаружим, что истинно и обратное: дизъюнкция гл V • • • V vt вытекает из / тогда и только тогда, когда она имеет литерал, общий со всеми импликантами /, тогда и только тогда, когда она имеет литерал, общий со всеми простыми импликантами /, тогда и только тогда, когда она имеет литерал, общий с каждой импликантой некоторой DNF /.) 19. Максимальными подкубами, содержащимися в 0010, 0011, 0101, 0110, 1000, 1001, 1010 и 1011, являются 0*10, 0101, *01* и 10**; так что ответ — (wVj/Vz) Л (wVxVj/Vz) Л (х\/у) Л (wVt). (Эта конъюнктивная нормальная форма является также кратчайшей.) 20. Истинно. Соответствующий максимальный подкуб содержится в некоторых макси- мальных подкубах f' и д', и их пересечение не может быть большим. (Это наблюдение принадлежит Самсону (Samson) и Миллсу (Mills), статья которых цитируется ниже, в от- вете к упр. 31.) 21. Согласно закону Буля (20) мы видим, что n-арная функция / монотонна тогда и только тогда, когда ее (п — 1)-арные проекции д и h монотонны и удовлетворяют условию д < h. Следовательно, / = (р Л хп) V (Л Л хп) = (д Л хп) V (р Л хп) V (Л Л хп) = р V (Л Л хп), так что можно обойтись без дополнения. Константы 0 и 1 отсутствуют, кроме тех случаев, когда функция идентична константе. И наоборот, любое выражение, построенное из Л и V, очевидно, является монотонным. Примечание по терминологии. Строго говоря, мы должны использовать термин “мо- нотонная неубывающая” вместо просто “монотонная” если хотим, чтобы наш язык со- ответствовал языку классической математики. Дело в том, что уменьшающаяся функ- ция действительного переменного также монотонна. (См., например, раздел 3.3.2G.) Но “неубывающая” —немного труднопроизносимое слово, в особенности в английском языке; так что исследователи, активно работающие в области булевых функций, почти едино- гласно сошлись на том, что в булевом контексте “монотонность” автоматически подра- зумевает неубывание. Аналогично математический термин “положительная функция” обычно означает функцию, значения которой превышают нуль. Но авторы, пишущие
602 ОТВЕТЫ К УПРАЖНЕНИЯМ 7.1.1 о “положительных булевых функциях” имеют в виду функции, которые мы называем мо- нотонными. Поскольку монотонная функция является сохраняющей порядок, некоторые авторы используют термин изотопная-, но это слово уже принято на вооружение физиками, химиками и музыковедами. Булева функция наподобие х V у, которая становится монотонной, если некоторое подмножество ее переменных будет дополнено, называется унатпной (unate). Очевидно, что теорема Q применима к таким унатным функциям. 22. И д, и д ф h должны быть монотонными, и д(х) Л h(x) = 0. 23. х Л (vVj/) Л (vVz) Л (wVz). (Следствие Q применимо также к конъюнктивным про- стым формам монотонных функций. Следовательно, для решения любой задачи такого вида нам нужно применять только закон дистрибутивности (2) до тех пор, пока в V не останется ни одного Л, а затем удалить любой дизъюнкт, содержащий все переменные другого дизъюнкта.) 24. По индукции по fc аналогичное дерево с V в корне дает функцию с 22ffc/21 -1 простыми импликантами длиной 2Lfc/2J, в то время как дерево с Л дает 42*'fc/2J -1 простых импликант длиной 2Г*/21. Например, когда fc = 6, 47 = 214 простых импликант для случая Л имеют вид а'(О4оО*ОоО*ООо)2 T(OtoO*OO 1*001)2 ^(0*01*01 О*01о)2 ^(0*01*011*011 )2 Л ^(Itl0*100*100>2 Я'(1*10*101*101)2 ^(1*11*11 О*11о)2 ^(l*! 1*111*111)2! где t—либо 0, либо 1. [Более детальную информацию о таких деревьях можно найти в D. Е. Knuth and R. W. Moore, Artificial Intelligence 6 (1975), 293-326; V. Gurvich and L. Khachiyan, Discrete Mathematics 169 (1997), 245-248.] 25. Пусть ответ представляет собой ап- Тогда аг = аз = 2, at = 3, а а„ = а„-г + а„_з для п > 4, поскольку простые импликанты, когда п > 4, представляют собой либо рп-г Ain-i, либо Рп-з Л Хп-2 Л хп для некоторой простой импликанты pk в случае fc переменных. (Эти простые импликанты соответствуют минимальному вершинному покрытию графа пути Рп. Мы имеем ап = (7Рп + 10Fn+i + Рп+г)/23, где Рп представляют собой числа Перрина из упр. 7.1.4-15.) 26. (а) Пусть Xj = [j € J]. Тогда f(x) = 0 и д(х) = 1. (Этот факт был темой упр. 18.) (б) Предположим, например, что fc€JE(/Hfc^ U/gj- Д и будем считать, что тест (а) пройден. Пусть Xj = [j 6 Jw. j / fc]. Тогда f(x) = 1; а д(х) = 0, поскольку каждое J' € G c J' J содержит элемент J. (в) Вновь предположим, что условие (а) было исключено. Если, скажем, | J| > [J7], то пусть Xj = [у является наименьшим элементом Ю J для некоторого I € J7]. Тогда f(x) = 1, д(х) = 0. (г) Теперь будем считать, что = Ujgg J- Каждое I € Р означает 2п-1/1 векторов, где /(т) = 0; аналогично каждое J 6 Q означает 2n~lJl векторов, где д{х) = 1. Если сумма з меньше, чем 2п, можно вычислить s = so + Si, где so учитывает вклад в з при хп = 0. Если so < 2П-1, установим хп <— 0; в противном случае si < 2П-1, так что мы устанавливаем хп <— 1. Тогда мы установим п ч— п — 1; в конечном итоге все Xj становятся известны, и f(x) = 1, д(х) = 0. 27. Пусть т = min({|/| | I 6 Р} U {|J| | J 6 б})—длина кратчайшего дизъюнкта или импликанты. Тогда N-2n~Tn > 2n-l/l+$2JeC 2П-И > 2"; так что мы имеем т < 1g N. Если, скажем, |/| = т, некоторый индекс fc должен появиться как минимум в 1/т членов J 6 G, поскольку каждое J пересекается с I. Это наблюдение доказывает указание. Теперь положим А(0) = -A(l) = 1 и Л(и) = 1 + A(v — 1) + A([/mJ) для v > 1. Тогда ^4(|F||G|) представляет собой верхнюю границу числа рекурсивных вызовов (числа выполнений шага XI). Полагая В(у) = A(v) + 1, получим B(v) = B(v — 1) + В ([/mJ) для
7.1.1 ОТВЕТЫ К УПРАЖНЕНИЯМ 603 v > 1, следовательно, B(v) < B(v — к) + fc£?([puj) для v > к. Взяв к = v — [pvJ, мы показываем, что В (у) < ((1 — p)v + 2)B([pvJ); следовательно, В (у) = O(((l — p)v + 2)‘) при p*v < 1, а именно, когда t > lnu/ln(l/p) = ©((logt))(log7V)). И обратно, ^4(1^1161) < А(№/4) = ^(logN)2. На практике алгоритм будет работать существенно быстрее, чем гласят только что полученные пессимистические границы. Поскольку простые дизъюнкты функции явля- ются простыми импликантами дуальной к ней функции, эта задача, по сути, та же, что и проверка, что одна дизъюнктивная нормальная форма дуальна другой. Кроме того, если мы начнем с f(x) = 0 и будем неоднократно находить минимальные х, такие, что f(x) = д(х) = 0, мы можем “растить” /, пока не получим функцию, дуальную д. Представленные здесь идеи разработаны М. Л. Фредманом (М. L. Fredman) и Л. Ха- чияном (L. Khachiyan), J. Algorithms 21 (1996), 618-628, которые также представили усо- вершенствование, которое сокращает время работы до Afc>(iog лг/log log лг) Алгоритм с по- линомиальным временем работы в настоящее время неизвестен; однако непохоже, чтобы данная задача была NP-полной, поскольку ее можно решить за время, меньшее экспонен- циального. 28. Этот результат очевиден для понимания, но обозначения и терминология могут запу- тать его; так что давайте рассмотрим конкретный пример: если, скажем, j/i = J/4 = J/е = 1, а прочие ук равны нулю, то функция д истинна тогда и только тогда, когда простые импликанты pi, и ре покрывают все места, где f истинна. Таким образом, мы видим, что существует взаимно однозначное соответствие между каждой импликантой д и каждой дизъюнктивной нормальной формой /, которая содержит только простые импликанты р3. В этом соответствии простые импликанты д соответствуют “неприводимым” дизъюнктив- ным нормальным формам, в которых не могут быть пропущены никакие р3. Многочисленные усовершенствования этого принципа обсуждаются в R. В. Cutler and S. Muroga, IEEE Transactions C-36 (1987), 277-292. 29. Bl. [Инициализация.] Установить к 4— к' 4— 0. (Аналогичные методы рассматрива- лись в упр. 5-19.) В2. [Поиск нуля.] Увеличить fc нуль или более раз, пока не будет достигнуто значение к = т (завершение алгоритма) или не будет выполнено равенство ujt & 2J =0. ВЗ. [Обеспечение fc' > fc.] Если fc' < fc, установить fc' 4— fc + 1. B4. [Продвижение fc'.] Увеличить fc' нуль или более раз, пока не будет достигнуто зна- чение к' = т (завершение алгоритма) или не будет выполнено неравенство Vk> Vk + 23. В5. [Пропуск большого несоответствия.] Если Vk Ф Vk> > 2j+1, установить к 4— к' и вернуться к шагу В2. В6. [Запись соответствия.] Если Vk> = Vk + 2J, вывести (fc, fc'). B7. [Продвижение fc.] Установить fc 4— fc + 1 и вернуться к шагу В2. | (Шаги ВЗ и В5 необязательны, но рекомендуемы.) 30. Следующий алгоритм поддерживает отсортированные списки переменной длины в сте- ке S, размер которого никогда не превосходит 2т + п. Когда верхним элементом стека является St = s, верхний список представляет собой упорядоченное множество Ss < S„+i < - < St-i. Биты дескриптора под держиваются в другом стеке Т, имеющем тот же размер, что и S (после шага инициализации). Р1. [Инициализация.] Установить Тк 4— 0 для 0 < к < т. Затем для 0 < j < п применить алгоритм сканирования j-двойников из упр. 29 и установить Тк 4— Тк + 2}, Т^ 4— Тк' + 23 для всех найденных пар (fc, fc'). Затем установить s 4— t 4— 0
604 ОТВЕТЫ К УПРАЖНЕНИЯМ 7.1.1 и повторять следующие операции до тех пор, пока не будет выполнено условие s = т: если Т3 = 0, вывести подкуб (0,г)л) и установить s ч— s + 1; в противном случае установить St ч— v3, Tt <— Т3, t f- t + 1, s <- s + 1. Наконец установить A ч- 0 и St ч- 0. P2. [Продвижение А.] (В этой точке стек S содержит v(A) + 1 списков подкубов. А именно, если А = 2е* + ••• + 2ег, где ei > • • • > ег > 0, стек содержит fc- значения всех подкубов (a, fc) С V, а-значения которых равны соответственно 0, 2ei, 2е1 + 2е2, ..., А, за исключением тех подкубов, нулевые дескрипторы которых не появлялись. Все эти списки не пустые, возможно, за исключением последнего. Тепер мы увеличим А до следующего значимого значения.) Установить j ч— 0. Если St = t (т. е. если верхний список пуст), увеличивать j нуль или более раз до тех пор, пока не будет достигнуто j > п или А 8с23 0. Затем, пока j < п и А &; 23 0, устанавливать t <— St — 1, А <— А — 23 и j <— j + 1. Завершить работу алгоритма, если j > п; в противном случае установить А ч— А + 23. РЗ. [Генерация списка А.] Установить г ч— t, s ч— St и применить алгоритм сканиро- вания у-двойника из упр. 29 к г — s числам S3 < • • • < Sr-i- Для всех найденных пар (к, fc') установить х ч— (Тк & Тк>) — 23; и если х = 0, вывести подкуб (A, Sk), в противном случае установить t ч— t + 1, St ч— Sk, Tt ч— х. Наконец установить t ч— t + 1, St 4— г + 1 и вернуться к шагу Р2. | Этот алгоритм основан на части идей Эженио Морреаля (Eugenio Morreale) [IEEE Trans. EC-16 (1967), 611-620; Proc. ACM Nat. Conf. 23 (1968), 355-365]. Время работы алго- ритма, по сути, пропорционально тп (для шага Р1) плюс общее количество подкубов, содержащихся в V. Если тп < 2П(1 — с) и если V размером т выбрано случайным образом, то, как показано в упр. 34, среднее общее количество подкубов составляет не более O(log log п/ log log log n), умноженное на среднее количество максимальных подкубов; следовательно, среднее время работы в большинстве случаев будет приблизительно про- порционально среднему количеству генерируемых выводов. С другой стороны, в упр. 32 и 116 показано, что количество выводов может быть огромным. 31. (а) Пусть с = сп_х... Со, с' = c'n_x... Со, с" = c"_i... Со. Должно иметься некоторое j с Cj * и Cj с"; в противном случае с" С с. Аналогично должно существовать некоторое fc с c'k / * и cfe / cfc- Если j fc, должна быть точка xn-i... хо 6 с", не входящая ни в с, ни в с', поскольку мы могли бы положить Xj = Cj и = с^. Следовательно, j = fc, и значение j определяется однозначно. Кроме того, несложно увидеть, что c'j = Cj. А если г j, то мы имеем либо ct = ♦, либо ct = с" и либо с[ = *, либо с[ = с". (б) Это утверждение является очевидным следствием (а). (в) Во-первых, мы докажем, что примечание в скобках в описании шага Е2 истинно, когда мы переходим к этому шагу. Ясно, что оно истинно при j = 0. В противном случае пусть с С V является у-кубом, и допустим, что с = со U ci, где со и ci — (j — 1)-кубы. При предыдущем выполнении шага Е2 мы имели Со С со 6 С и Cj С ci 6 С ддя некоторых Со и с'х; следовательно, либо с С cj) U Ci, либо с С Со, либо с С ci- В любом случае с теперь содержится в некотором элементе С. Во-вторых, докажем, что вывод на шаге ЕЗ в точности представляет собой макси- мальные у’-кубы, содержащиеся в V. Пусть с С V—некоторый fc-куб. Если с максимален, то с будет в С, когда мы достигнем шага ЕЗ с j = к, и с будет выведен. Если с не является максимальным, он имеет двойника с' С V, который представляет собой fc-куб, содержащийся в некотором подкубе с" 6 С, когда мы достигаем ЕЗ. Поскольку с 2 с", консенсус с U с" будет (у + 1)-кубом С', и с выведен не будет. Ссылки. Понятие консенсуса было впервые определено Арчи Блейком (Archie Blake) в его диссертации (University of Chicago, 1937); см. J. Symbolic Logic 3 (1938), 93, 112-113.
7.1.1 ОТВЕТЫ К УПРАЖНЕНИЯМ 605 Оно было независимо открыто заново Эдвардом У. Самсоном (Edward W. Samson) и Барто- ном Э. Миллсом (Burton Е. Mills) [Air Force Cambridge Research Center Tech. Report 54-21 (Cambridge, Mass.: April 1954), 54 pp.] и У. В. Куайном (W. V. Quine) [AMM 62 (1955), 627-631]. Эта операция иногда также называется резольвентой (resolvent), поскольку Д. А. Робинсон (J. A. Robinson) использовал ее в более общем виде (но для дизъюнктов, а не импликант) в качестве основы для своего “правила резолюций” ( “resolution principle” ) для доказательства теорем [JACM 12 (1965), 23-41]. Алгоритм Е разработан Энн К. Эвинг (Ann С. Ewing), Д. П. Ротом (J. Р. Roth) и Э. Г. Вагнером (Е. G. Wagner), AIEE Transactions, Part 1, 80 (1961), 450-458. 32. (а) Заменим определение U из упр. 31 следующей ассоциативной и коммутативной операцией над четырьмя символами А = {0,1, *, •} для всех а € А и х 6 {0,1}: *Ua = aU* = a, • U а = а U • = х U х = • и тиа: = а:. Пусть также h(0) = 0, h(l) = 1, h(*) = ♦ и h(«) = *. Тогда с = h(ci U • U c„,), вычисляемое покомпонентно, представляет собой единственный подкуб, который может быть обобщенным консенсусом. [См. Р. Tison, IEEE Transactions ЕС-16 (1967), 446-456.] (б) Например, пусть Cj = *^~1l*’n-,P~10*’n-< [Последний компонент излишний. Все решения охарактеризованы Р. X. Слоаном (R. Н. Sloan), Б. Серени (В. Szorenyi) и Г. Тураном (G. Turdn) в SIAM J. Discrete Math. 21 (2008), 987-998.] (в) Согласно (а) каждая простая импликанта однозначно соответствует подмножеству импликант, которые она “пересекает’.’ [А. К. Chandra and G. Markowsky, Discrete Math. 24 (1978), 7-11.] (г) Например, (j/iAxi)V (з/гЛа^Лтг) V • • -V (|/mAa:iA-• • Лтт_1Лхт), как в (6). [J.-M. La- borde, Discrete Math. 32 (1980), 209-212.] 33. (a) (2m~2^-k)/(2m)- (б) Мы должны исключить случаи, когда xi Л • • • Л xj-i Л х? Л xj+i Л - • - Л Хк также является импликантой. Согласно принципу включения-исключения ответ равен при к = п ответ упрощается до (2 1)/(„)- (См., например, 1.2.6-(24).) 34. (а) Мы имеем с(т,п) = ^Cj(m,n), где Cj(m,n) = —среднее количество импликант с п — j литералами (среднее количество подкубов размерности j в терминологии упр. 30). Ясно, что со(т,п) — т,п , . пт(т — 1) , тп(т\ , 1 ci(m,n) = ----г2- < —- I — 1 < -т; м ’ 2(2" -1) “ 2 \2nJ ~ 2 ’ аналогично cj(m,n) < m/(Vj\n21 ~1-i). Кроме того, р(т,п) = ^2jPj(m,n), где мы имеем , Z2"-n-l\ //2n\ (2"-п-1)=-1 (2п—п — т)т~1 ' ' \ т-1 )/\т) (2" - 1)— “ (2" - ттг)"1-1 > - gnn ) > m(1~2n П2"/п) ’ = твХР( ~ 2"(п п))' у \ 2” — 2п/п/ уп у 2дп—1)// (б) Заметим, что t = [Iglgn — lglg(2n/m) + lg(4/3)J < Iglgn + 0(1) достаточно малб. Мы многократно используем тот факт, что < Q"lni и действительно (т ~ 2‘ )/(т) = °™(1 + \т — j • // \т/
606 ОТВЕТЫ К УПРАЖНЕНИЯМ 7.1.1 является исключительно хорошим приближением при не слишком большом j. Чтобы подтвердить указание, заметим, что ^2j<t Cj(m,n)/ct(m,ri) = O(tct-i(m,n)/ct(m, n)) = О(12/(п^атп)) = O((loglogn)2/n1/3); a ct+j(m,n)/ct(m,n) = O^n/pt))1 o&~1). Следова- тельно, мы имеем c(m,ri)/ct(m,n) и 1 + |(^у)«тп, где второй член доминирует, когда атп находится в верхней части диапазона. Кроме того, ^(П[*)(-1)'а^(1 + С>(^-‘)) = (l-Qm„ri + O(n2Qro„(l + Qm„)n22,M имеет экспоненциально малый член ошибки, поскольку (1 + о<тп)п = О(еп 1 ) <S т. Следовательно, p(m,n)/ct(m,n) асимптотически равно е~па’пп + |(^=р (в) Здесь атп = 2~2' и n-1 ln(t/lnt); так что c(m,n)/ct(m,n) = 1 + O(t-1logt), p(m,n)/ct(m,n) = t-1 Int + |t-1 Int + O(t-1 log log t). Мы заключаем, что в этом случае с(т,п) _ 2 Iglgn A Q /log log log log n\\ p(m,n) 31glglgn\ \ logloglogn //’ (г) Если namn < Int — InInt, мы имеем p(m,n)/c(m,n) > pt(m,n)/c(m,n) > t-1 Int + O(t-1 logt)2. С другой стороны, если namn > Int — InInt, мы имеем p{m,n)/c(m,n) > pt+i (m, n)/c(m, n) > In t + O(t-1 log log t). [Средние значения c(m, n) и p(m, n), а также дисперсия c(m, n) были впервые изучены Ф. Милето (F. Mileto) и Ж. Путцолу (G. Putzolu), IEEE Trans. ЕС-13 (1964), 87-92; JACM 12 (1965), 364-375. Детальная асимптотическая информация об импликантах, простых импликантах и неприводимых DNF случайных булевых функций, когда каждое значение f(xi,...,xn) независимо равно 1 с вероятностью р(п), была получена Карлом Вебером (Karl Weber), Eiektronische Informationsverarbeitung und Kybernetik 19 (1983), 365-374, 449-458, 529-534.] 35. (а) Переставляя координаты, мы можем считать, что р-м подкубом является 0fcl“*”, так что Вр = 0fcl“01' и Sp = lfc0“+1'. Тогда все точки *fcl“*1'остаются покрытыми по индукции по р, поскольку все точки ♦’-1l*fc_-’l“*’' были покрыты при 1 < j < к. (б) j- и fc-й подкубы отличаются в каждой координатной позиции, где Bj 8с Sk не равно нулю. С другой стороны, если Bj8cSk равно нулю, точка Sk подкуба fc лежит в предыдущем подкубе согласно (а), поскольку мы имеем Sk 2 Bj. (в) Из списка 1100, 1011, ООП (с подчеркнутыми битами каждого Sk) мы получаем ортогональную DNF (алЛггг) V (Х1ЛТ2ЛТ3ЛТ4) V (Х1ЛХ3ЛХ4). (г) Имеется восемь решений; например, (01100,00110,00011,11010,11000). (д) (001100,011000,000110,110010,110000,010011,000011) является симметричным ре- шением. Имеется гораздо больше возможных вариантов; например, 42 перестановки бито- вых кодов {110000,011000,001100,000110,000011,110010,011010} являются развертками. [Концепцию развертки для монотонных булевых функций ввели Майкл О. Болл (Mi- chael О. Ball) и Д. Скотт Прован (J. Scott Provan), Operations Research 36 (1988), 703-715, которые рассмотрели много важных ее применений.] 36. Если j < fc, мы имеем Bj = al/З и Вк = «07 для некоторых строк а, /3, -у. Образуем последовательность то = «17, xi — х'о, ..., xi = х'1_1, где xi = «OO^L Мы имеем f(xo) = 1, поскольку то 2 Вк, но f(xi) = 0, так как xi С В'-. Так что строка х<, где f(xi) = 1 и f(xi+i) = •• = f(xi) = 0, находится в В. Она предшествует Вк и доказывает, что Bj8cSk Э0|и|10|/51. [Это построение и части упр. 35 взяты из статьи Е. Boros, Y. Crama, О. Ekin, Р. L. Ham- mer, Т. Ibaraki, and A. Kogan, SIAM J. Discrete Math. 13 (2000), 212-226.]
7.1.1 ОТВЕТЫ К УПРАЖНЕНИЯМ 607 37. Порядок развертки (000011, 001101, 001100,110101,110100,110001,110000) обобщается на все п. Имеется также интересное решение, не основанное на развертке, наподобие циклически симметричного (110***, 1110**, **110*, **1110, 0***11, 10**11, 111111). Для получения нижней границы назначим вес wx = — П7=1(я'2з-1 + Х2з ~ Зя^з-зхгз) каждой точке х и заметим, что сумма wx по всем х в любом подкубе равна 0 или ±1. (До- статочно проверить этот любопытный факт для каждого из девяти возможных подкубов при п = 1.) Теперь выберем множество непересекающихся подкубов, которые разбивают множество F = {а: | f(x) = 1}; мы имеем 52 1 - 52 52w* = 52w* 52 1жеС1 = 52 Выбранное С Выбранное С xQC x£F Выбранное С x£F Имеется (£)2n-fc векторов х с ровно fc парами xzj-ixzj = 1 и ненулевым весом. Их веса равны (—l)fc-1, и они лежат в F, за исключением случая fc = 0. Следовательно, = Sfc>o (^"-‘(-l)*-1 = 2" - (2 - 1)" [См. M. О. Ball and G. L. Nemhauser, Mathematics of Operations Research 4 (1979), 132-143.] 38. Определенно, нет; DNF выполнима тогда и только тогда, когда имеет хотя бы одну импликанту. Сложной задачей в случае DNF является выяснение, не представляет ли она собой тавтологию (т. е. всегда истинна). 39. Свяжем переменные yi, ..., у к с каждым внутренним узлом в прямом порядке обхода, так что каждый узел дерева соответствует ровно одной переменной F. Для каждого внут- реннего узла у с дочерними узлами (/, г) и помеченного бинарным оператором о построим четыре 3CNF-дизъюнкта coo A Coi Л сю Л сц, где ср, = (y™N v lpN V rqN), a N означает дополнение (так что x0N = х и x1N = х). Эти дизъюнкты на самом деле указывают, что у = lor; например, если о представляет собой Л, четырьмя дизъюнкта- ми являются (у V I V г) Л (у V I V г) Л (у VI V г) Л {у V I V г). Наконец, добавим еще один дизъюнкт, (j/i V j/i V yi), чтобы обеспечить F = 1. Любое большое число можно сформировать путем простого усложнения троек. ... Возьмем факт из четырех частей: А продал Б товар В по цене г. Он состоит из двух фактов: первый — что А совершил с Б некоторое действие, которое можно назвать Д; и второй— что действие Д есть продажа В по цене г. — ЧАРЛЬЗ С. ПИРС (CHARLES S. PEIRCE), Отгадка в загадке (A Guess at the Riddle) (1887) 40. Следуя указанию, А гласит ‘u < v ф v < и’, а В гласит lu<vAv<w=>u< w’. Так что ААВ утверждает, что существует линейное упорядочение вершин ui < uz < < ип- (Имеется п! способов выполнения А Л В.) Далее, С гласит, что quvw эквивалентно и < v < w; так что D утверждает, что и и w не являются последовательными в этом упорядочении, когда и-/—из. Таким образом, АЛ ВЛСЛС выполнимо тогда и только тогда, когда существует линейное упорядочение, в котором все несмежные вершины не являются последовательными (т. е. в котором все последовательные вершины являются смежными). 41. Решение 0. ‘[т < п]’ и есть искомая формула, но это решение неспортивное, не в духе нашего упражнения. Решение 1. Пусть Xjk означает, что голубь j занимает гнездо fc. Тогда дизъюнктами являются (аг,1 V - • • V Xjn) для 1 < j < m и (xtk V xjk) для l<i<j<miil<k<n. [См.
608 ОТВЕТЫ К УПРАЖНЕНИЯМ 7.1.1 S. A. Cook и R. A. Reckhow, J. Symbolic Logic 44 (1979), 36-50; A. Haken, Theoretical Comp. Sci. 39 (1985), 297-308.] Решение 2. Допустим, что n = 2‘, и пусть голубь j занимает гнездо (x3i ...xjt)2- Дизъюнкты ((iii®iji)V- -Vдля 1 < i < j < m можно разместить в CNF-форме (j/iji V • • V j/tjt), как в упр. 39, вводя вспомогательные дизъюнкты (j/ijfc VV Xjk) Л (j/»jk V ^ifeVXjfc)A(j/yfcVXifc Va:jfc)A(^tjfcVXife Vxjfc). Общий размер этой конъюнктивной нормальной формы — ©(тп2 logп), по сравнению с ©(m2n) в решении 1. Если п не является степенью 2, О(т log п) дополнительных дизъюнктов размером O(log п) уберут неподходящие значения. 42. (х V у) Л (z V х) Л (у V z) Л (z V z). 43. Вероятно, нет, поскольку каждая ЗЗАТ-задача может быть приведена к этому виду. Например, дизъюнкт (a?i V X2 V хз) можно заменить на (xi V у V хз) Л (у V хг) Л (j/ V хъ), где у представляет собой новую переменную (по сути, эквивалентную хг). 44. Предположим, что из f(x) = f(y) = 1 вытекает f(x & у) = 1, а также что, скажем, с = xi V хг V хз V Х4 является простым дизъюнктом /. Тогда с' = xi V хг V хз V Х4 не является дизъюнктом; в противном случае cf\d = хг Ухз V Х4 также было бы дизъюнктом, что противоречит условию простоты. Так что существует вектор у, такой, что /(j/) = 1 и j/i = 1, уз = 0, уз = ?/4 = 1. Аналогично существует z, такой, что /(z) = 1 и zi = 0, Z2 = 1, Z3 = Z4 = 1. Но тогда f(y & z) = 1, и с не является дизъюнктом. Те же самые рассуждения работают для дизъюнкта с, который имеет иное число литералов, пока как минимум два из этих литералов не являются дополнениями. 45. (а) Функция Хорна /(xi,..., х„) неопределена тогда и только тогда, когда она не равна определенной функции Хорна p(xi,... ,xn) = f(xi,... ,х„) V (xi Л • • Л хп). Так что f д представляет собой взаимно однозначное соответствие между неопределенными и определенными функциями Хорна, (б) Если функция f монотонна, ее дополнение f либо идентично 1, либо является неопределенной функцией Хорна. 46. Алгоритм С помещает в ядро 88 пар ху: когда х = а, Ъ, с, 0 или 1, идущим следом символом у может быть любой, кроме (. Когда х = (, *, /, +, -, мы можем иметь у = (, а, Ъ, с, 0, 1; а также у = -, когда х = (, + или -. Наконец, корректными парами, начинающимися с х = ), являются )+, )-, )*, )/, )). 47. Порядок, в котором алгоритм С вводит вершины в ядро, представляет собой топологи- ческую сортировку, поскольку все предшественники fc утверждены до того, как алгоритм устанавливает TRUTH(xfc) •<— 1. Но алгоритм 2.2.3Т использует очередь вместо стека, так что создаваемое им упорядочение обычно отличается от упорядочения алгоритма С. 48. Пусть _L—новая переменная, и заменим каждый неопределенный дизъюнкт Хорна определенным, выполнив для него операцию ИЛИ с этой новой переменной. (Например, ‘w\Sy’ превращается в ‘wVj/V±’, т. е. ‘why => ±’; определенные дизъюнкты Хорна остаются неизменными.) Затем применим алгоритм С. Исходные дизъюнкты являются невыполни- мыми тогда и только тогда, когда _1_ находится в ядре новых дизъюнктов. Следовательно, алгоритм можно завершить, как только он собирается установить TRUTH(±) ч— 1. (Студент Шустрый предложил иное решение: применить алгоритм С к функции д, построенной в ответе к упр. 45, (а), поскольку f невыполнима тогда и только тогда, когда каждая переменная Xj находится в ядре д. Однако неопределенные дизъюнкты /, такие как w\/y, превращаются во много различных дизъюнктов (wVj/Vz)A(wVj/Vx)A(wVj/Vv)A (w V у V и) Л • • • функции д, по одному для каждой переменной, отсутствующей в исходном дизъюнкте. Так что предложение Шустрого, на первый взгляд звучащее вполне элегантно, может увеличить количество дизъюнктов на множитель П(п).) 49. Мы имеем f < д тогда и только тогда, когда f h д невыполнимо, тогда и только тогда, когда f Л с невыполнимо для любого дизъюнкта с функции д. Но с представля- ет собой И литералов, так что можно применить результаты упр. 48. [См. в Н. Kleine
7.1.1 ОТВЕТЫ К УПРАЖНЕНИЯМ 609 Buning и Т. Lettmann, Aussagenlogik: Deduktion und Algorithmen (1994), §5.6, другие ре- зультаты, включая эффективный способ проверки, является ли д “переименованием” /, т. е. определения, существуют ли такие константы (j/i,..., уп), что f(xi,..., хп ) = g(xi е 50. См. Gabriel Istrate, Random Structures 8t Algorithms 20 (2002), 483-506. 51. Если вершина v помечена буквой А, введем => A+(v) и => если она помечена буквой В, введем => А-(г?) и => B+(v). В противном случае пусть v имеет к исходящих дуг v —> ui, ..., v —> Ufc. Введем дизъюнкты A“(u3) => B+(v) и B~(uj) => А+(г>) для 1 < j < к. Кроме того, если v не помечено буквой С, введем дизъюнкты A+(ui) Л ••• Л A+(tifc) => В~(у) и B+(ui) Л - Л B+(ufc) => A~(v). Все обеспечивающие выигрыш или проигрыш стратегии являются следствиями этих дизъюнктов. Дополнительную информацию на эту тему можно получить из упр. 2.2.3-28 и ответа к нему. Заметим, что в принципе алгоритм С можно использовать для решения вопроса о вы- игрышной стратегии белых при игре в шахматы—если, конечно, не обращать внимания на тот досадный факт, что соответствующий ориентированный граф больше, чем вся физическая Вселенная. 52. При наилучшей стратегии результаты таковы (см. упр. 51). п (а) (б) (в) (г) 2 Побеждает 0 Побеждает второй игрок Побеждает 1 Побеждает второй игрок 3 Побеждает 0 Побеждает первый игрок Побеждает первый игрок Побеждает первый игрок 4 Побеждает Первый игрок Побеждает первый игрок Побеждает первый игрок Побеждает первый игрок 5 Побеждает второй игрок Ничья Ничья 1 проигрывает, начиная 6 Побеждает второй игрок Побеждает второй игрок 1 проигрывает, начиная 1 проигрывает, начиная 7 1 проигрывает, начиная Побеждает второй игрок 1 проигрывает, начиная 1 проигрывает, начиная 8 Ничья Ничья Ничья 1 проигрывает, начиная 9 Ничья Ничья Ничья 1 проигрывает, начиная (Здесь “1 проигрывает, начиная” означает, что игра завершается ничьей, если первым ходит игрок 0, в противном случае 0 может выиграть.) Комментарии. В (а) игрок 1 имеет небольшую невыгодность ситуации, связанную с тем, что f(x) = 0, когда xi... хп представляет собой палиндром. Это небольшое отличие влияет на результат даже тогда, когда п = 7. Хотя игрок 1 кажется в лучшем положении при игре нулями в левой части таблицы, оказывается, что его первым ходом при п = 4 дол- жен быть *1**; противоположный ход *0** ведет к ничьей. Игра (б), по сути, представляет собой гонку — кто сможет убрать последнюю *. В игре (в) случайный выбор xi... хп дает f(x) = 1 с вероятностью Fn+z/2n = 0((0/2)п); в игре (г) эта вероятность стремится к нулю медленнее, как 0(1/log п). Тем не менее шансы игрока 1 выше в (в), чем в (г), когда п = 2, 5, 8 и 9; и не хуже в прочих случаях. 53. (а) Следует изменить день 1 или день 2 на день 3. (б, е) Несколько возможных вариантов; например, изменить день 2 на день 3. (в) Этот случай проиллюстрирован на рис. 6. Следует изменить Desert либо Excalibur на Aladdin, (г) Следует изменить Caesars или Excalibur на Aladdin, (д) Следует изменить Bellagio или Desert на Aladdin. Само собой разумеется, Williams, отсутствующий в цикле (42), не несет ответственности за конфликты. 20 Зак. 3331
610 ОТВЕТЫ К УПРАЖНЕНИЯМ 7.1.1 54. Если и х, и х находятся в S, то и 6 S <=> й 6 S, поскольку из существования путей от х до х и от х до х, и от х до и и от и до х вытекает существование путей от й до х и от х до й, а следовательно, от и до й и от й до и. 55. (а) Необходимыми и достаточными условиями для успешного переименования дизъ- юнкта, такого как xi V хз V хз V xt, являются (j/i V уз) Л (j/i V уз) Л (yi V yt) Л (уз V уз) Л (уз V У4)Л(узУу4). Аналогичное множество (*) дизъюнктов длиной 2 из переменных {j/i,..., j/n} соответствует каждому дизъюнкту длиной к из переменных {ii,...,xn}. [Н. R. Lewis, JACM 25 (1978), 134-135.] (б) Заданный дизъюнкт длиной fc > 3 от {xi,..., х„} может быть преобразован вместо упомянутых выше (*) дизъюнктов в 3(fc — 2) дизъюнктов длиной 2 путем введения fc — 3 новых переменных {t2,..., 1&_2}, что проиллюстрировано далее для дизъюнкта xi V хз V хз V Х4 V хз: (yiVy?) Л (i/iVt2) Л (y2Vt2) Л (t2Vj/3) Л (t2Vt3) Л (y3Vt3) Л (tsVyt) Л (tsVj/s) Л (у^Ууз)- В общем случае дизъюнкты из rri V • • • V Хк становятся (tj-i V yj) Л (tj-i V tj) Л (yj V tj) для 1 < j < к, но ti заменяется на yi, a tk-i —па у к', заменим yj на yj, если Xj появляется вместо Xj. Будем выполнять эти действия для каждого заданного дизъюнкта, используя различные вспомогательные переменные tj для разных дизъюнктов; результатом является формула в 2СНЕ-форме, которая имеет длину < 3m и является выполнимой тогда и только тогда, когда возможно переименование Хорна. Теперь применим теорему К. [См. В. Aspvall, J. Algorithms 1 (1980), 97-103. Одним следствием этого, отмеченным Г. Кляйне Бюнингом (Н. Kleine Biining) и Т. Леттманном (Т. Lettmann) в Aussagenlogik: De- duktion und Algorithmen (1994), теорема 5.2.4, является то, что любая выполнимая формула в 2CNF может быть переименована в дизъюнкты Хорна. Заметим, что две конъюнктивные нормальные формы для одной и той же функции могут приводить к разным исходам; например, (х V у V z) Л (х V у V z) Л (х V z) Л (у V z) в действительности является функцией Хорна, но дизъюнкты в этом представлении не могут быть преобразованы в форму Хорна путем операции дополнения.] 56. Здесь f(x, у, z) соответствует показанному ориентированному графу (подобному по- казанному на рис. 6), и он может быть упрощен до у Л (х V z). Каждая вершина явля- ется сильно связным компонентом. Таким образом, формула верна по отношению к кванторам 333, 33V, V33 и ложна в прочих случаях о . о V3V, (любой)V(любой). В общем случае восемь возможных вариантов л/ можно разместить в вершинах куба, так что каждое изменение 3 на V делает формулу ложной со все большей вероятностью. 4-7 4-7 4-7 57. Образуя ориентированный граф, как в теореме К, мы можем доказать, что кван- тифицированная формула выполняется тогда и только тогда, когда (i) ни один сильно связный компонент не содержит одновременно х и х; (ii) не существует пути от одной универсальной переменной (переменной, связанной с квантором всеобщности) х к другой универсальной переменной у или к ее дополнению у; (iii) ни один сильно связный ком- понент, содержащий универсальную переменную х, не содержит также экзистенциальную переменную (переменную, связанную с квантором существования) v или ее дополнением й, когда ‘Зг>’ находится слева от ‘Vx’. Эти три условия с очевидностью необходимы, и легко проверяемы после нахождения сильно связных компонентов. Чтобы показать их достаточность, сначала заметим, что если S является сильно связным компонентом только с экзистенциальными литералами, условие (i) позволяет нам установить все их равными, как в теореме К. В противном случае S имеет только один универсальный литерал, щ = Xj или Uj = Xj-, все прочие литералы в S являются экзистенциальными и объявлены справа от Xj, так что мы можем приравнять их к Uj.
7.1.1 ОТВЕТЫ К УПРАЖНЕНИЯМ 611 И все пути внутрь S в таком случае идут от чисто экзистенциальных сильно связных компонентов, значения которых могут быть установлены равными 0, поскольку дополнения таких сильно связных компонентов не могут также вести в S', если из v и v вытекает Uj, то из Uj вытекает v и v. [Information Proc. Letters 8 (1979), 121-123. Напротив, M. Кром (М. Krom) в J. Sym- bolic Logic 35 (1970), 210-216, доказал, что аналогичная задача в исчислении предикатов первого порядка (где параметризованные предикаты занимают место простых булевых переменных, а квантификация выполняется над параметрами) в действительности в общем случае неразрешима.] 58. Мы можем считать, что каждый дизъюнкт является определенным, вводя ‘±’, как в упр. 48, и помещая слева ‘V.L’. Назовем универсальные переменные хо, xi, ..., хт (где а?о представляет собой ±), а экзистенциальные переменные—j/i, ..., уп. Пусть ‘и -< if означает, что переменная и появляется в списке кванторов слева от переменной v. Удалим Xj из любого дизъюнкта, литералом которого без надчеркивания является у к, когда у к -< Xj. Тогда пусть Cj при 0 < j < тп представляет собой ядро дизъюнктов Хорна при присоединении дополнительных дизъюнктов (то)Л - • /\(xj-i) /\(xj+t) • Л(хт)Л Л{(?д) I Ук -< Xj п ук € Со}. (Другими словами, Cj говорит нам, что может быть выведено, когда все х, за исключением Xj, рассматриваются как истинные.) Мы утверждаем, что данная формула истинна тогда и только тогда, когда Xj $ Cj для 0 < j < тп. Для доказательства этого утверждения сначала заметим, что формула, определенно, ложна, если Xj G Cj для некоторого j. (Когда ук 6 Со и ук -< Xj и xt = 1 для г / j, мы должны установить ук +- 1.) В противном случае, чтобы сделать формулу истинной, мы можем выбрать каждый у к следующим образом: если у к $ Со, установить у к <— 0; в противном случае установить ук <— f\{xj | Ук $ C’j}- Заметим, что ук зависит от Xj, только когда Xj -< Ук- Каждый дизъюнкт с с ненадчеркнутым литералом Xj теперь истинен: если Xj = 0, в с обнаруживается некоторое у к, для которого у к $ Cj, поскольку хз $ С,; следовательно, у к = 0. И каждый дизъюнкт с с ненадчеркнутым литералом ук также является истинным: если ук = 0, то мы либо имеем ук $ Со, и в этом случае некоторое yi в с не является элементом Со, следовательно, yi = 0; либо у к € Со \ Cj для некоторого j, и в этом случае некоторое Xj = 0 и либо Xj находится в с, либо в с имеется некоторое yi, где yi $ Cj, делая yi = 0. [Это решение принадлежит Т. Далхаймеру (Т. Dahlheimer). См. М. Karpinski, Н. Kleine Biining, and Р. Н. Schmitt, Lecture Notes in Comp. Sci. 329 (1988), 129-137; H. Kleine Biining, K. Subramani, and X. Zhao, Lecture Notes in Comp. Sci. 2919 (2004), 93-104.] 59. По индукции по n: предположим, что /(0, Х2, , хп) приводит к квантифицирован- ным результатам j/i, ..., в то время как f(l,X2,... ,хп) приводит аналогично к zi, ..., z2„-i. Тогда 3xif(xi,i2, ,хп) приводит к yi Vzi, ..., y2n-i Vz2n-i, a Vari f(xi,X2, , xn) приводит к yi Л zi, ..., y2n-i Л z2n-i. Теперь воспользуемся тем фактом, что (j/Vz) + (y/\z) = у + z. [См. Proc. Mini-Workshop on Quantised Boolean Formulas 2 (QBF-02) (Cincinnati: May 2002), 1-16.] 60. (а) и (б), (в) Всегда 0. (г) Всегда 1. (д) Равно (xyz). (е) Равно х V у V z. 61. Истинно. Это очевидно и при w = 0, и при w = 1. 62. Поскольку {11,2:2,2:3} С {0,1}, из соображений симметрии можно считать, что 2:1 равно Х2- Тогда либо f(xi, 2:1,Хз, Х4, . ,Хп) = f(xi,Xj,Xl,X4, . . . ,Хп), либо f(xi, Х1, Хз, Х4, ... ,х„) = /(хз,Х1,хз,Х4,... ,хп), всего лишь в предположении, что f монотонна по первым трем переменным. 63. (xyz) = (xxyyz). Примечание: Эмиль Пост (Emil Post) доказал, что на самом деле од- ной подпрограммы вычисления любой нетривиальной монотонной самодуальной функции
612 ОТВЕТЫ К УПРАЖНЕНИЯМ 7.1.1 достаточно для вычисления их всех. (По индукции по п как минимум один подходящий способ вызова такой n-арной подпрограммы даст {xyz}.) 64. [FOCS 3 (1962), 149-157.] (а) Если f монотонна и самодуальна, теорема Р гласит, что f{x) = Хк или f{x) = {fi(x)fz{x)f3{x)). Следовательно, условие выполняется либо непосредственно, либо по индукции. И наоборот, если условие выполняется, значит, f монотонна (когда х и у отличаются только одним битом) и самодуальна (когда они отли- чаются во всех битах). (б) Нам просто нужно показать, что можно определить f в одной новой точке, не вызвав конфликт. Пусть х является лексикографически наименьшей точкой, где f{x) не определена. Если f{x) определена, установим f(x) = f(x). В противном случае если f{x') = 1 для некоторого х' С х, установим f{x) = 1; в противном случае установим f{x) — 0. Тогда условие все еще будет выполняться. 65. Если семейство F является максимальным перекрывающимся, то мы имеем (i) X 6 X => X X, где X представляет собой дополнительное множество {1,2, ...,n} \ X; (ii) X 6 X и X СУ => Ус/, поскольку X U {У} является перекрывающимся; и (iii) X X => X € X, поскольку 7'Ll {X} должно содержать элемент Y С X. И наоборот, можно без труда доказать, что любое семейство X, удовлетворяющее (i) и (ii), является перекрывающимся, и максимальным, если оно удовлетворяет также условию (iii). Это интересно. Все три утверждения на языке булевых функций очень просты: (*) f(x) = 1 => f{x) = 0; (ii) х С у => f(x) < f{y); (iii) f(x) = 0 => f(x) = 1. 66. [T. Ibaraki and T. Kameda, IEEE Transactions on Parallel and Distributed Systems 4 (1993), 779-794.] Каждое семейство, обладающее тем свойством, что из Q С Q' вытекает Q = Q1, очевидно, соответствует простым импликантам монотонной булевой функции f. Следующее условие, Q П Q' ф 0, соответствует отношению /(ai) < f{x), поскольку f{x) = f{x) = 1 выполняется тогда и только тогда, когда и х, и х делают простые импликанты истинными. Если комитеты С и С' соответствуют таким способом функциям / и f, то С доминирует над С тогда и только тогда, когда / f и f'{x) < f{x) для всех х. Тогда f' не является самодуальной, поскольку существует х, такое, что f{x) = 0, f{x) = 1; а мы имеем f{x) = 0, следовательно, /'(*) = 0. И наоборот, если /' не самодуальна, существует у, такое, что f'{y) = /' {у) = 0. Если у = 0... 0, комитет С пуст, и над ним доминирует каждый другой комитет. В противном случае определим f(x) = f'{x) V [а:Эр]. Тогда / является монотонной, и f{x) < f{x) для всех х; так что она соответствует комитету, доминирующему над С. 67. (а) Черный Y в t приводит к черному Yet*, поскольку соседние черные камни а — b — св t дают два соседних черных камня в t*. Аналогично, черный Y в Г приводит к черному Y в t. (б) Эта формула следует из (а) и из того факта, что {tabc)def = t(a+d)(b+e)(c+/) = (tdef)аЬс- [Шенстед (Schensted) сформулировал результат этого упражнения, а также упр. 62 и 69, в своем 28-страничном письме Мартину Гарднеру (Martin Gardner) от 21 января 1979 года. Милнор (Milnor) писал Гарднеру о соответствующей игре, называемой “Тре- угольник” 26 марта 1957 года. 68. На рисунке справа приведено одно из 258 594 решений для п = 15, jjo, содержащее 59 черных камней. (Ответы для 1 < п < 15 представляют о*о»о собой соответственно 2, 3, 4, 6, 8, 11, 14, 18, 23, 27, 33, 39, 45, 52 и 59. Простые импликанты для этих функций могут быть представлены o’A'oSSmSSo довольно малыми ZDD (бинарными диаграммами принятия решений с отброшенными нулями); см. раздел 7.1.4.) о%\о»о»*о\3>»о»*о\о»о»*оо
7.1.1 ОТВЕТЫ К УПРАЖНЕНИЯМ 613 69. Доказательство теоремы Р показывает, что необходимо доказать только Y(T) < f(x). Y в Т означает, что мы должны получить как минимум одну переменную в каждой Pj. Следовательно, f(xi,..., хп) = 0 и /(зсх,..., хп) = 1. 70. Самодуальность д счевищ1Я, для произвольных t, если f самодуальна: д(х) = (/(т) V [т = 4]) Л [x/t] = (f(x) V [зс = t ]) Л [зс/t] = (f(x) Л [зс/t]) V ([зс = t] Л [зс/t]) = д(х). Пусть X = ЗС1 . . . Xj- 103CJ+1 . . . Хп и у = ЗС1 . . . Xj-113Cj+l ... хп; для монотонности мы должны доказать, что д(х) < д(у). Если х = t или у — t, мы имеем д(х) = 0; если х = t или у = t, мы имеем д(у) = 1; в противном случае д(х) = /(зс) < f(y) = д(у). [European J. Com- binatorics 16 (1995), 491-501; независимо открыто Я. К. Биохом (J. С. Bioch) и Т. Ибараки (Т. Ibaraki), -IEEE Transactions on Parallel and Distributed Systems 6 (1995), 905-914.] 71. {(xyz)uv) = (((xyz)uv)uv) = ({(yuv)x(zuv))uv) = ((yuv) (xuv) ((zuv) uv)) = ((xuv)(yuv) (zuv)). 72. Для (58) v = (uvu) = u. Для (59) (uyv) = (vu(xuy)) = {(vux)uy) — (xuy) = у. И для (60) (xyz) = {(xuv)yz) = (x(uyz)(vyz)) = (xyy) = y. 73. (а) Если d(u, v) = d(u,x) + d(x,v), то очевидно, что мы получим кратчайший путь в виде и--------х----------v. И наоборот, если [ttrcv], то пусть и----х----------v представляет собой кратчайший путь с I шагами до х, после чего следуют m шагов до v. Тогда d(u, v) = I + m> d(u, x) + d(x, v) > d(u, v). (б) Для всех z справедливо (zxu) = (z(vux)(yux)) = ((zvy)ux) € {(yux), (t>ti3c)} = {tt, зс}. (в) Можно считать, что d(x, и) > d(x, v) > 0. Пусть и — • • — у — v является кратчайшим путем и пусть и> = (хиу). Тогда (vxu>) = (v(vux)(wux)) = ((vvu>)ux) — (vux) = x, так что х G [w..t>], Мы имеем [ищу], поскольку d(u,у) < d{u,v) и и> € [и..у]. Если и> ф и, мы имеем d(w,v) < d(u,v); следовательно, [twcv]; следовательно, [гют]. Если w = и, мы имеем х — и согласно (б). Но d(x, и) > d(x,v); следовательно, х—v и [гют]. (г) Пусть у — (uxv). Поскольку у € [tt.. зс], мы имеем d(u, х) = d(u, у) + d(y, х) согласно (а) и (в). Аналогично d(u, v) = d(u,у) + d(y, v) и d(x, v) = d(x, y) + d(y, v). Но эти три уравнения вместе с d(tt, v) = d(u, x) + d(x, v) дают d(x, y) = 0. [Proc. Amer. Math. Soc. 12 (1961), 407-414.] 74. u> = (yxu>) = (yx(zxw)) — (yx(zx(yzw))) = {(yxz)x(yzw)) = (x(xyz)(wyz)) = {(xxu>)yz) = (xyz) согласно (55), (55), (55), (52), (51), (53) и (50). 75. (а) Если w = (xxy), мы имеем [xwx] согласно (iii), следовательно, w = x согласно (i). (б) Аксиома (iii) и п. (а) говорят нам о том, что [хху] всегда истинно. Так что мы можем установить у = х в (ii), чтобы заключить, что [изси] <=> [изси]. Определение (xyz) в (iii) является, таким образом, идеально симметричным относительно зс, у и г. (в) Согласно определению (изги) в (iii) мы имеем х = (изси) тогда и только тогда, когда [изсзс], [tta:t>] и [зсзси]. Но мы знаем, что [изсзс] и [зсзст?] всегда истинны. (г) На этом и последующих шагах мы будем строить одну или несколько вспомогатель- ных точек М, а затем использовать алгоритм С для вывода каждого известного следствия отношений промежуточности. (Аксиомы имеют удобный вид дизъюнктов Хорна.) Напри- мер, здесь мы определим z = (зсуи), так что мы знаем, что [изсу], [uyt>], [xzy], [xzv] и [yzv]. Из этих гипотез мы выводим [игу] и [uzv]. Так что z = (uyv) = у. (д) Из построения из указания вытекает среди прочего, что [utv], [utz], [viz], [uwv], [uwz], [utuz]; следовательно, t = w. (Здесь может помочь компьютерная программа.) Добавление гипотез [rws], [rwz], [swz] дает, как и требовалось, [xyz]; оказывается также, что г = р и s = q. (е) Пусть г = (yuv), s = (zuv), t = (xyz), р = (xrs), q = (tuv); тогда получается [pgp]. [Proc. Amer. Math. Soc. 5 (1954), 801-807. В качестве начальной работы по изучению
614 ОТВЕТЫ К УПРАЖНЕНИЯМ 7.1.1 аксиом промежуточности см. Е. V. Huntington и J. R. Kline, Trans. Amer. Math. Soc. 18 (1917), 301-325.] 76. Аксиома (i) выполняется очевидным образом, а аксиома (ii) следует из коммутатив- ности и (52). В ответе к упр. 74 из тождества (xyz) = (x{xyz){wyz)) выводится (iii); так что нужно только проверить формулу (х (xyz) (wyz)) = ((yxz)x(wyz)) = (((yxz)xz)x(wyz)) = ((yxz)x(zx(wyz))) = (x(xyz)(z(xyz)w)) = ((x(xyz)z)(xyz)w) = ((xyz)(xyz)w). Примечания. В исходной работе по алгебре медиан Биркхоффа (Birkhoff) и Кисса (Kiss) Bull. Amer. Math. Soc. 53 (1947), 749-752, принимаются (50), (51) и короткий закон дистрибутивности (53). Тот факт, что дистрибутивность вытекает из ассоциативности (52), в течение длительного срока не был понят; М. Колибяр (М. Kolibiar) и Т. Маркизова (Т. Marcisova), Matematicky Casopis 24 (1974), 179-185, доказали это с использованием аксиом Шоландера, как в данном упражнении. Механический вывод (53) из (50)-(52) был обнаружен в 2005 году Р. Вероффом (R. Veroff) и У. Мак-Кьюном (W. McCune) с приме- нением расширенной программы автоматического доказательства теорем Otter. 77. (а) Предположим, что в координате г — з меток метка 1(г) имеет 0, а метка 1(з) имеет 1; тогда в этой координате левые вершины имеют 0. Если и — v — и , где и п и находятся слева, a v справа, то (uu'v) лежит слева. Но [и.. и] П [и'.. и] = {и}, если только не и = и'. (б) Это утверждение очевидно в соответствии со следствием С. (в) Предположим, что и—v и и' —v', где и пи' находятся слева, a v и v' находятся справа. Пусть v = vo — • • • — Vk = и' является кратчайшим путем и пусть ио = и, Uk = и'. Все вершины vj лежат справа, согласно п. (б). Левая вершина ад = (ададад) должна быть общим соседом для ио и щ, поскольку расстояние d(uo,i>i) = 2. (У нас не может быть щ = ио, поскольку это привело бы к существованию более краткого пути от v до v', проходящего через левую вершину и.) Следовательно, ад имеет ранг 1; то же самое справедливо для ад, ..., Vk-i, в соответствии с такими же рассуждениями. [L. Nebesky, Commentationes Mathematic? Universitatis Carolin? 12 (1971), 317-325; M. Mulder, Discrete Math. 24 (1978), 197-204.] (г) Эти шаги посещают все вершины v ранга 1 в порядке их расстояния d(v, з) от з. Если такая v имеет пока еще непросмотренного позднего соседа и, то ранг и должен быть равен 1 или 2. Если ранг равен 1, и будет иметь как минимум два ранних соседа, а именно v и будущего МАТЕ (и). На шаге 18 решение основывается на произвольном раннем соседе w вершины и, таком, что w ф v. Вершина х = (svw) имеет ранг 1 согласно п. (в). Если х = v, и имеет ранг 2, если только w не имеет ранг 0. Если w имеет ранг 0, то х = v; так что и имеет ранг 1. В противном случае d(x, s) < d(v,s) и ранг w был корректно определен при посещении х. Если w имеет ранг 1, и лежит на кратчайшем пути от v до w; если w имеет ранг 2, w лежит на кратчайшем пути от tt до s. В обоих случаях ип ш имеет один и тот же ранг согласно п. (в). (д) Алгоритм удаляет все ребра, эквивалентные iз, согласно пп. (а) и (г). Ясно, что это удаление разъединяет граф; получившиеся две части остаются выпуклыми согласно п. (б), так что они связные и в действительности представляют собой медианные графы. На шаге 17 записываются все существенные отношения между двумя частями, поскольку здесь рассматриваются все исчезнувшие 4-циклы. Каждая часть корректно маркируется по индукции по числу вершин. 78. Каждый раз, когда на шаге 14 появляется вершина v, она теряет одного из своих соседей Uj. Каждое из этих ребер v — ад соответствует отличной координате меток, так что можно считать, что 1(у) имеет вид alfc для некоторой бинарной строки а. Тогда метками ад, ад, ..., ад являются aOl*"*1, al01fc-2, ..., alfc-10. Покомпонентно беря
7.1.1 ОТВЕТЫ К УПРАЖНЕНИЯМ 615 медианы, мы можем теперь доказать, что у вершин графа встречаются все 2к меток вида ар, поскольку ((ар)(аР')(0... 0)) является битовой строкой a(J3 & /?'). 79. (а) Если l(y) = fc, то ровно i/(fc) меньших вершин являются соседями v. (б) В битовой позиции j для 0 < j < [lg п] встречается не более [n/2j единиц. (в) Предположим, что ровно fc вершин имеют метки, начинающиеся с 0. Этой битовой позиции соответствует не более min(fc, n—fc) ребер, и имеется не более /(fc)+/(n—fc) других ребер. Но /(n) = max (min(fc, п — к) + /(fc) + f(n — fc)), 0<fc<n поскольку функция д(т, ri) = f(m + п) — т — /(т) — /(п) удовлетворяет рекуррентному соотношению д(2т + а, 2п + b) = ab + д(т + а, ri) + д(т, п + Ь) для 0 < a, b < 1. Отсюда по индукции следует, что д(т, т) = д(т, т + 1) = 0 и что д(гп, ri) > 0 при т < п. [Annals of the New York Academy of Sciences 175 (1970), 170-186; D. E. Knuth, Proc. IFIP Congress 1971 (1972), 24.] 80. (а) (Решение В. Имриха (W. Imrich).) Граф с метками вершин 0000, 0001, 0010, ООП, 0100, 0110, 0111, 1100, 1101, 1110, 1111 не может быть помечен любым существенно иным способом; но расстояние от 0001 до 1101 равно 4, а не 2. (б) Цикл Сгт представляет собой неполный куб, поскольку его вершины можно поме- тить как l(k) = lfc0m-fc, 1(т + к) = ofclm-fc для 0 < к < т. Но побитовая медиана от Z(0), 1(т — 1) и l(m + 1) равна 01т-20; в действительности при т > 2 эти вершины не имеют медианы. 81. Да. Медианный граф является порожденным подграфом гиперкуба, являющегося двудольным. 82. Общий случай сводится к простому случаю, когда G имеет только две вершины {0,1}, поскольку можно работать с медианными метками покомпонентно и поскольку d(u,v) представляет собой расстояние Хэмминга между 1(и) и 1(у). В простом случае упомянутое правило устанавливает Uk <— Vk, за исключением Uk-i = Vk-i = i»fc+i Vk, и его оптимальность можно легко доказать. (Существуют, однако, и дру- гие варианты достижения оптимума; например, если здг’хг’гг’з = 0110, можно установить U0U1U2U3 = 0000.) [Эта задача возникла при изучении самоорганизующихся структур данных. В Discrete Algorithms and Complexity (Academic Press, 1987), 351-387, Ф. P. К. Чанг (F. R. K. Chung), P. Л. Грэхем (R. L. Graham) и M. Э. Сакс (M. E. Saks) доказали, что медианные графы являются единственными графами, для которых Uk всегда можно выбрать оптималь- ным образом, как функцию от (по,щ,... ,Vk+i), независимо от последующих значений (t>fc+2,... ,vt). В Combinatorica 9 (1989), 111-131, они также охарактеризовали все случаи, для которых достаточно заданного конечного количества предпросмотров.] 83. Рассмотрим сначала булев (двухвершинный) случай, и пусть оптимальное решение получается с помощью рекурсивных правил ио <— г>о и Uj <— ft+2-j(uj-i,Vj,... ,Vt) для 1 < j < t, где каждое fk представляет собой подходящую булеву функцию от fc пе- ременных. Первая функция ft+i(vo,vi,... ,vt) на самом деле зависит от ее “наиболее удаленной” переменной vt, поскольку, когда р = 1 — е и fc > 2, должно выполняться /2fc+i(0,1,1,0,1,0,1,..., 0,1,0, х) = х. Одна подходящая функция ft+i может быть получена следующим образом: пусть /t+i(0, щ,... ,vt) = 0, если vi = 0. В противном случае пусть “сериями” входной последо- вательности будут здщ ...vt = 01ак0°к~1 ...1“20О1 или 01“'t0“'t-1 ...1“30“21О1,
616 ОТВЕТЫ К УПРАЖНЕНИЯМ 7.1.1 где аь,..., ai > 1, и пусть а,- = 2 — ajp = max(0,2 — ajp) для 1 < j < к. Тогда /t+i(0,i>i,... ,i>t) = [«к - (afc-i -(• • •- («2 - (1 - aip)) - )) = 0]. Пусть также /t+i(1, vi,..., vt) = ft+i(0, Vi,..., Vt), так что функция /t+i самодуальна. Несколько утонченное доказательство позволяет показать, что функция ft+i является также монотонной. Следовательно, согласно теореме Р можно применить /t+i покомпонентно к меткам произвольного медианного графа, всегда оставаясь в пределах графа. 84. Имеется 81 такая функция, каждая из которых может быть представлена как медиана нечетного количества элементов. Встречаются вершины семи типов. Тип Типичная вершина Количество случаев Смежная с Степень 1 <z) 5 (vwxyzzz) 1 2 (vwxyzzz) 5 (z), (wxyzz) 5 3 {wxyzz) 20 (vwxyzzz), (vwxxyyzzz) 4 4 (vwxxyyzzz) 30 (xyz), (wxyzz), (vwxyyzz) 5 5 (vwxyyzz) 10 (vwxxyyzzz), (vwxyz) 7 6 (vwxyz) 1 (vwxyyzz) 10 7 (xyz) 10 (vwxxyyzzz) 3 [Фон Нейманн (von Neumann) и Моргенштерн (Morgenstern) перечислили эти семь типов в своей книге Theory of Games and Economic Behavior (1944), §52.5, в связи с изучением эк- вивалентной задачи о системах побеждающих коалиций, которые они именовали простыми играми. Граф для функций от шести переменных с 2646 вершинами 30 типов описан в ста- тье Мейеровица (Meyerowitz), упоминавшейся в упр. 70. Только 21 из этих типов может быть представлен в виде простой медианы нечетного количества элементов; вершина напо- добие ((abd)(ace)(bc/)), например, такого представления не имеет. Пусть соответствующий граф для п переменных имеет Мп вершин; П. Эрдеш (Р. Erdos) и Н. Хиндман (N. Hindman) в Discrete Math. 48 (1984), 61-65, показали, что lgMn асимптотически стремится к (^2j)- Д. Кляйтман (D. Kleitman) в J. Combin. Theory 1 (1966), 153-155, показал, что вершины для различных проецирующих функций наподобие х и у в этом графе всегда удалены одна от другой.] 85. Каждый сильно связный компонент должен состоять из одной вершины; в противном случае две координаты всегда были бы равны, или всегда были бы дополнительными одна к другой. Таким образом, ориентированный граф должен быть ацикличным. Кроме того, не должно быть пути от вершины к ее дополнению; в противном случае координата должна быть константой. Когда эти два условия удовлетворены, можно доказать, что не имеется вершины х, являющейся избыточной, путем присвоения зна- чения 0 всем вершинам, которые предшествуют х или х; значения 1 — всем вершинам, которые следуют за ними, и подходящих значений — всем остальным вершинам. (В результате мы получаем совершенно отличный способ представления медианного графа. Например, показанный ориентированный граф соответствует медианному графу, метками которого являются {0000,0001,0010,0011,0111,1010}.) 86. Да. Согласно теореме Р любая монотонная самодуальная функция отображает эле- менты X в X.
7.1.1 ОТВЕТЫ К УПРАЖНЕНИЯМ 617 87. В этом случае (72) может заменить топологическое упорядочение 7654321123456 7; так что мы получаем (Последовательные инверторы на одной линии, конечно же, могут быть удалены.) 88. Данное значение d вносит не более 6|t/d] единиц задержки (для 2ft/d] кластеров). 89. Предположим сначала, что новое условие представляет собой г —> j, в то время как старым условием является г' —> j', где г < j и г1 < j' и нет дополненных литералов. Новый модуль изменяет xi.. .xt на j/i...yt, где yt = Xi Л Xj, yj = i, V Xj, а для прочих значений индексов у к = Xk- Мы, безусловно, имеем ytr < уу, когда {г',j'} П {г, j} = 0. Никаких проблем при i = г' не возникает, поскольку y# = yt < х, = х^ < ху = уу. Но случай г = j более сложный: здесь отношения г' —> г и г —> j влекут за собой также г' —> j-, а это отношение обеспечивается предыдущими модулями, поскольку модули добавляются в порядке уменьшения расстояния d в топологическом упорядочении щ ... U2t- Следовательно, у^ = х^ < Xj и у# < ху = ху, следовательно, уу < яч Л Xj = yt = уу. Аналогичное доказательство работает, когда j = г' или j = j'. Наконец, в случае дополненных литералов, построение искусно сводит общий слу- чай к недополненному путем инвертирования и последующего обратного инвертирования битов. 90. Когда t = 2, работу выполняет сеть 1,1,- Общий случай получается из этого “кирпичика” рекурсивно, сведением t к [t/2]. [Изучение CI-сетей, а также других сетей большей общности, было инициировано работой Е. W. Мауг and A. Subramanian, J. Computer and System Sci. 44 (1992), 302-323.] 91. Ответ пока что не кажется известным даже для частного случая, когда медианный граф является свободным деревом (с t + 1 вершинами), или в монотонном случае, когда он представляет собой дистрибутивную решетку, как в следствии F. В последнем случае инверторы могут оказаться ненужными. 93. Пусть dx(u,v) — количество ребер в кратчайшем пути между и и v, когда путь пол- ностью лежит в X. Ясно, что dx(u,v) > da(u,v). А если и = ио — tti — • • • — Uk = v является кратчайшим путем в G, то путь и = f(uo) — /(гц) — • • • — /(зд) = v лежит в X, когда f является ретракцией из G в Х\ следовательно, dx(u,v) < da(u,v). 94. Если f является ретракцией t-мерного куба в X, две различные нозиции координат не могут быть всегда равны или всегда быть дополнительными одна к другой для всех х 6 X, если только они не являются константами. Если, скажем, все элементы X имеют вид 00* ... * или 11* ... *, то не должно существовать пути между вершинами этих двух типов, что противоречит тому факту, что X является изометрическим подграфом (следовательно, связным). Пусть для заданных х,у, z G X их медианой в t-мерном кубе является и = (xyz). Тогда f(u>) G [т.. ч/] О [т.. z] О [?/.. z], поскольку, например, f(u>) лежит на кратчайшем пути от х до у в X. Так что f(u>) = w, и мы должны доказать, что и> € X. [Этот результат и его гораздо более тонкое обращение найдены Г. Ю. Бандельтом (Н. J. Bandelt), J. Graph Theory 8 (1984), 501-510.] 95. Ложно (хотя автор и надеялся на истинность этого утверждения); показан- т - ная справа сеть получает 0001 0000, 0010 ООП, 1101 0110, но ничего Z_____»_ — 0010. * « *
618 ОТВЕТЫ К УПРАЖНЕНИЯМ 7.1.1 (Множество всех возможных выходных данных, похоже, не имеет простого описания, даже если не использовать инверторы. Например, чисто сравнива- — ющая ееть слева, построенная Томасом Федером (Tomds Feder), отображает £ ОООООО t-4 ОООООО, 010101 t-4 010101 и 101010 t-4 011001, но ничего нэ 010001. См. также упр. 5.3.4-50 и 5.3.4-52.) 96. Нет. Пусть f—пороговая функция, основанная на действительных параметрах w — (»г, • • •, wn) и t, и пусть max{w • х | f(x) = 0} = t — е. Тогда е > 0 и f определяется 2" неравенствами w • х — t > 0, когда f(x) = 1, та t — и> х — е > 0, когда f(x) = 0. Если А является любой целочисленной матрицей размером MxN, для которой система линейных неравенств Av > (0,..., 0)т имеет решение в действительных числах v = (t>i,..., vn)t, где vn > 0, существует решение и в целых числах. (Доказывается по индукции по N.) Так что можно считать, что wi, ..., wn, t и е являются целыми числами. [Более полный анализ с применением неравенства Адамара (см. формулу 4.6.1-(25)) доказывает, что в действительности достаточно весов с абсолютными значениями, не пре- вышающими (п + 1)("+1)/2/2п; см. С. Мурога (S. Muroga), И. Тода (I. Toda) и С. Такасу (S. Takasu), J. Franklin Inst. 271 (1961), 376-418, теорема 16. Кроме того, в упр. 112 показано, что иногда действительно требуются такие большие веса.] 97. (ШПгщ), (Шхгхг), (IX1X2), (ОХ1Х2), (ОООХ1Х2), (ОООООХ1Х2). 98. Можно считать, что /(xi,..., хп) = {у™1 ... у„п) с положительными целыми весами wj и с нечетным значением Wi + • • • + w„. Пусть 6—минимальное положительное значение среди 2" сумм ±wi ± • • • ± wn с п независимо изменяющимися знаками. Переименуем все индексы так, что wi + • • • + wk — Wfc+i — • • — wn = 6. Тогда wij/i + • • • + wnyn > |(wi -I---F wn) <=> wi(yi - j) -I--F Wn(yn - |) > 0 <=> wi(yi - |) -I--F wn(yn - |) > -6/2 <=> Wiyi + • • • + WnVn > |(W1 + • • • + Wn - (W1 + • • • -F Wk - Wfe+l ----- wn)) = Wk+1 4----F Wn <=> Wiyi -I---F wkyk - wk+iyk+1-------wnyn > 0. 99. Имеем [xi -I-----F x2s-i + s(yi -I-F 3/21-2) > st] = [[(xi -I-F x2s-i)/s] -F 3/1 4-F 3/2t-2>t]; и [(xi -I-Fx2s-i)/sJ = [xi + •• • + x2s-i >s]. (Например, ((xyz)uv) = (xyzu2v2), величина, которая, как мы знаем, согласно (53) и (54) равна (x{yuv){zuv)) и {{xuv){yuv){zuv}). Источник: С. С. Elgot, FOCS 2 (1961), 238.) 100. Истинно, исходя из предыдущего упражнения и (45). 101. (а) Когда п = 7, это х? Л хе, хв Л хз, х? Л хз Л Х4, хв Л ха Л хз, х? Л х5 Л 13 Л хг, Х6ЛХ4ЛХ2ЛХ1, Х7ЛХ5ЛХ3ЛХ1; а в общем случае имеется п простых импликант, образующих похожий шаблон. (Мы имеем либо хп = хп-1, либо хп = хп-т- В первом случае х„ А Хп— 1, очевидно, является простой импликантой. Во втором случае Fn (xi,..., х„-1, хп-1) = Fn-i(xi,... ,xn-i); так что мы используем простые импликанты последней и вставляем хп, когда не встречается xn_i.) (б) Шаблон развертки (0000011, 0000110, 0001101, 0011010, 0110101,1101010, 1010101) для п = 7 работает для всех п. (в) Две из нескольких возможностей для п = 7 иллюстрируют общий случай: / хе \ Xt Xs xs хв ха Хт Хз Хз хз хе хе ха ха хз \ Хт Xs Х5 Хз Хз Х1 / [Пороговая функция Фибоначчи была введена С. Мурогой (S. Muroga), который также нашел оптимальный результат в упр. 105; см. IEEE Transactions ЕС-14 (1965), 136-148.] 102. (а) Согласно (11) и (12) /(хо,xi,...,хп) является дополнением /(хо, xi,...,хп). х7 Хз Хз Хз Ха Хт Xs хт Хз хе хе ха хе хз \ Хт Хз Хт Хз Хт XI / Ft(xi, ... ,Хт)
7.1.1 ОТВЕТЫ К УПРАЖНЕНИЯМ 619 (б) Если f задана формулой (75), то f представляет собой [(w4-l — 2t)io4-wia:i Ч-1- wnxn > w + 1 — t], где w = wi Ч-1- гип. И обратно, если f является пороговой функцией, то таковой же является и f(xi,... ,хп) = f(l,xi,... ,хп). [Е. Goto and Н. Takahasi, Proc. IFIP Congress (1962), 747-752.] 103. [См. R. C. Minnick, IRE Transactions EC-10 (1961), 6-16.] Мы хотим минимизировать Wi + • • • + wn при условии ограничений Wj > 0 для 1 < j < п и (2ei — l)wi Ч- • • • 4- (2еп — l)wn > 1 для каждой простой импликанты х*1 Л Л х„п. Например, если п = 6, простая импликанта Х2 Л х$ Л хе приводит к ограничению —wi Ч- W2 — W3 — W4 Ч- ws Ч- we > 1. Если минимум равен 4-оо, данная функция не является пороговой. (Ответ к упр. 84 дает один из простейших примеров такого случая.) В противном случае, если решение (wi,..., wn) включает только целые числа, оно минимизирует требуемый размер. Если же решение оказывается нецелым, должны добавляться дополнительные ограничения, пока не будет найдено наилучшее решение, как в п. (в) следующего упражнения. 104. Сначала нам нужен алгоритм для генерации простых импликант х^1 Л • • • Л заданной функции мажоризации (г:™1 .. .т™") при wi > ••• > гип и нечетном значении wi Ч Н wn. К1. [Инициализация.] Установить t ч— 0. Затем для j = п, п — 1, ..., 1 (в указанном порядке) установить aj t+wj, ej <— 0. Наконец установить t <— (t+1)/2, si ч— 0 и I 4— 0. K2. [Вход на уровень /.] Установить I ч— I Ч-1, ej ч— 1, sj+i ч— si 4- wi. КЗ. [Ниже порога?] Если sj+i < t, вернуться к шагу К2. К4. [Посещение простой импликанты.] Посетить степени (ei,..., еп). К5. [Уменьшение размера.] Установить е; ч— 0. Затем, если si 4- at > t, установить si+i ч— si и перейти к шагу К2. Кв. [Откат.] Установить I ч— I — 1. Завершить работу алгоритма, если I = 0; в про- тивном случае перейти к шагу К5, если ej = 1; в противном случае повторить этот шаг. | (а) (х1а:2а:за:4^5а:ба:70^82) (21 простая импликанта). (б) Оптимальными весами для (г:^6-24 г:8 2:2 2:3 2:4) являются W0W1W2W3W4 = 10000, 31111, 21110, 32211, 11100, 23211, 12110, 13111, 01000 для 0 < t < 8; прочие случаи дуальны. (в) В этом случае оптимальными весами (wi,..., W10) являются (29,25,19,15,12,8,8, 3,3,0)/2; так что мы видим, что 2:10 не играет роли и мы должны работать с дробными весами. Ограничивая w& > 2, получаем целочисленные веса (15,13,10,8,6,4,4,2,1,0), которые должны быть оптимальны, поскольку их сумма превышает предыдущую сумму на 2. (Только две из 175428 самодуальных пороговых функций от девяти переменных имеют нецелые веса, минимизирующие wi Ч- • • • Ч- w„; второй такой функцией являет- ся (x^x^x^x^xlxex^xfxg). Наибольшее wi в минимальном представлении встречается в (т:?22:222:з82:452:532:б02:|2:|2:д); Наибольшее значение wi + + wg встречается один раз в функции (т:142:222:з82:272:542:б02:782:852:91), которая также является примером наибольшего значения wg. См. S. Muroga, Т. Tsuboi, and С. R. Baugh, IEEE Transactions С-19 (1970), 818-825.) 105. Когда п = 7, неравенства, генерируемые в упр. 103, представляют собой W7 4- we — W5—W4—W3—W2 — W1 > 1, —w? + we+wg —W4 — W3 — W2 — wi > 1, W7 — we 4- W5 4- W4 — W3 — W2 — wi > 1, —W7 4- we — W5 4- W4 4- W3 — W2 — wi > 1, W7 — we 4- w5 — W4 4- W3 4- W2 — wi > 1, —wr 4- we — W5 4- W4 — W3 4- W2 4- wi > 1, W7 — we 4- W5 — W4 4- W3 — W2 4- wi >1. Умножим их соответственно на 1, 1, 2, 3, 5, 8, 5, чтобы получить Wi4---I- W7 > 14-14-24-34-54-84-5. Эта же идея работает для всех п > 3.
620 ОТВЕТЫ К УПРАЖНЕНИЯМ 7.1.1 106. (a) {xf Х2 ...хпУ1 yi Vnz)- (Согласно упр. 99 мы можем также вычис- лить п медиан трех элементов: ((... {xnynz) ... X2yi}xiyi).) (б) Если {х^х^2 х^у^у^ решает поставленную задачу, должны выполняться 2n+1 — 1 базовых неравенств; например, при п = 2 это неравенства tii + U2 — v\ + V2 — w > 1, ui + U2 — vi — V2 + w > 1, til — U2 + til — V2 — tii > 1, til — 112 — til + V2 + tii > 1, —til + tl2 + til + t?2 — to > 1, —tii + ti2 + tii — t?2 + to > 1, —tii — ti2 + tii + ti2 + to > 1. Добавим их все, чтобы получить til + ti2 4---F tin + tii + ад Ч--F tin 4- tii > 2n+1 — 1. 107. f N(f) E(f) f N(f) E(/) f MJ) E(/) f N(f) E(/) 0 (0,0) C 1 (0,1) V 1 (0,0) L 2 (0,1) Л 1 (1,1) R 2 (1,2) = 2 (1,1) D 3 (1,2) D 1 (i,o) ® 2 (1,1) R 2 (1,0) Л 3 (1,1) L 2 (2,1) V 3 (2,2) C 3 (2,1) T 4 (2,2) Обратите внимание, что ф и = имеют одни и те же параметры N(J) и E(/). Это един- ственные бинарные булевы операции, не являющиеся пороговыми функциями. 108. Если E(g) = (so, Si,..., зп), значение д равно 1 в so случаях при хо = 1 и в 2П — во случаях при хо — 0. Мы также имеем Е(/о) + Е(Д) = (si,..., зп), и i i Е(/о) = У? ••• У? (Х!,... ,хп)д(0,Х1,... ,хп) х1=0 тп=0 1 1 а?1=0 жп=0 = (2”-1 - во,..., 2”-1 - so) 4- E(/i). Так что ответами при п > 0 являются (а) 1У(/о) = 2n — so, Е(/о) = |(si — So 4- 2”-1,..., Sn —зоЧ-2п-1); (б) N(fi) — so, E(/i) = |(si-Fso — 2n~1,...,sn-Fso — 2n-1). [Эквивалентные результаты были представлены Э. Гото (Е. Goto) в лекциях в MIT в 1963 году.] 109. (a) ai Ч--Fa*, > bi Ч--Fb*> тогда и только тогда, когда fc—ai-a*, < fc—bi----b*>. (б) Пусть a+ = (ai, ai4-a2,.. - ,ai4--Fan). Тогда вектор (ci,...,cn), получаемый покомпонентной минимизацией a+ и /3+, равен (а Л р)+. (Ясно, что Cj = Cj-i + aj или bj.) (в) Действуем, как в п. (б), но с покомпонентной максимизацией-, или берем а Л р. (г) Истинны, поскольку шах и min удовлетворяют этим законам дистри- бутивности. (В действительности мы получаем дистрибутивную решетку мажоризации со смешанным основанием аналогичным путем из множества У л/ \ всех п-кортежей ai...an с 0 < aj < rrij для 1 < j' < п. Р. П. Стенли у у у \ (R. Р. Stanley) заметил, что рис. 8 представляет собой также решетку по- /WV\ рядковых идеалов показанной справа треугольной сетки.) (д) al покрывает аО, а сЛОР покрывает aOl/З. [Эта характеристика принадлежит Р. О. Байндеру (R. О. Winder), IEEE Trans. ЕС-14 (1965), 315-325, но он не доказал свойство решетки. Решетка часто называется М(п); см. В. Lindstrom, Nordisk Mat. Tidskrift 17 (1969), 61-70; R. P. Stanley, SIAM J. Algebraic and Discrete Methods 1 (1980), 177-179.] (e) В силу (д) мы имеем r(a) = nai 4- (n — 1)аг 4-4- ап- (ж) Суть в том, что ОР >; 0a тогда и только тогда, когда Р а, и что 1р >; Оа тогда и только тогда, когда 1/3 > 10... О V Oa = la'. (з) Т. е. сколько ai... an обладает тем свойством, что ai... о* содержит не больше единиц, чем нулей? Ответ равен (^n"2j)i см-> например, упр. 2.2.1-4 или 7.2.1.6-42, (а). 110. (а) Если х С у, то х Ч у, следовательно, f(x) < f(y); QED.
7.1.1 ОТВЕТЫ К УПРАЖНЕНИЯМ 621 (б) Нет; пороговая функция не обязана быть монотонной (см. (79)). Но можно показать, что f регулярна, если потребовать также выполнения условия wn > 0: если f(x) = 1 и у покрывает х, то мы имеем w • у > w • х. (в) При условиях f(x) = 1 и xj < Xj+i мы имеем f(y) = 1, когда у покрывает х с Xj ++ Tj+i; следовательно, Sj > Sj+i. (Эти рассуждения справедливы даже при шп < 0.) (г) Нет; рассмотрим, например, {xjX^Xs), равную (х^хзхз). Контрпример может иметься, даже когда веса минимизируют wi + - • • + wn, поскольку решение линейной программы из упр. 103 не всегда единственное. Одним таким случаем, найденным Мурогой (Muroga), Цубои (Tsuboi) и Бофом (Baugh), является (х^х^х^х^х^хдхух^х^), функция, которая, как ни странно, симметрична относительно Х4 и х$. Но если Sj > Sj+i, то мы должны иметь Wj > в соответствии с п. (в). 111. (а) Найдем оптимальную самодуальную функцию f поточечно, как в упр. 14; в случае неоднозначности выберем f(xi,... ,хп) = Xi. Таким образом, f(xi,...,xn) = [г®1 ...Гп" > y/ri... Гп ], за исключением того, что “>’ превращается в *>’ при xi = 0. Эта функция регулярна при и > • • • > гп > 1. (б) Пусть д— регулярная самодуальная функция, построенная в п. (а). Если / пред- ставляет собой заданную регулярную, самодуальную функцию, то мы хотим проверить, что f(x) < д(х) для всех векторов т; отсюда будет вытекать, что f = д, поскольку обе функции самодуальны. Предположим, что f(x) = 1, и пусть у -< х является минимальным вектором, таким, что f(y) = 1. Если мы проверили, что д(у) = 1, то, действительно, как и требовалось, д(х) = 1. [См. К. Makino and Т. Kameda, SIAM. Journal on Discrete Mathematics 14 (2001), 381-407.] Например, при n = 5 имеется только семь самодуальных регулярных булевых функ- ций, генерируемых следующими минимальными элементами на рис. 8: 10000; 01111, 10001; 01110, 10010; 01101, 10011, 10100; 01100; 01011, 11000; 00111. Таким образом, оптимальный комитет может быть найден путем исследования только небольшого количества значений функций. (в) Предположим, что l>pi>--->pr>|> Pr+i > • • > Рп > 0. Пусть fk(xi,... ,хп) — к-я монотонная самодуальная функция, a Fk(xi,... ,хп)—ее целочислен- ное мультилинейное представление. Мы хотим найти оптимальную доступность G(pi,..., рп) = maxfcffc(pi,...,pn). Если pi < р'г, ..., рп < р'п, то мы имеем Fk(pi,. -. ,рп) < Fk(jh, ,Рп) согласно упр. 12, (д); следовательно, G(pi,... ,р„) < G(p'i,... ,р'п). Таким образом, если 0 < г < п, то мы имеем G(pi,... ,pn) < G(pi,... ,рг, |,..., |). А последнее значение равно F(pi,... ,рг, |,..., |), порожденному этими большими веро- ятностями, как в п. (а). Эта функция не зависит от (тг+i,...Дп), так что она дает нам оптимум. Если г = 0, задача кажется более глубокой. Мы имеем G(pi,... ,pn) < G(pi,... ,pi); так что мы можем сделать вывод, что в этом случае оптимальный комитет представляет собой /(xi,... ,хп) = xi, если мы можем показать, что Fk(p, .. ,р) < р для всех к прир < |. В общем случае Fk(p,. - - ,р) = cTnp'n(l — p)n~m, где Ст равно количеству векторов х, таких что fk(x) = 1 и их = т. Поскольку fk самодуальна, мы имеем Cm -I- cn-m = (Д) для всех fc. А в теореме Эрдеша-Ко-Радо (упр. 7.2.1.3-111) говорится о том, что мы имеем Cm < (m-i) Для любого перекрывающегося семейства т-множеств, когда т < п/2. Отсюда следует искомый результат. [См. Y. Amir and A. Wool, Information Processing Letters 65 (1998), 223-228.] 112. (а) Ведущими членами являются соответственно 0, +ху, —ху, +х, —ху, +у, —2ху, —ху, +ху, +2ху, —у, +ху, —х, -t-xy, —ху, 1; так что F(f) = 1, когда f представляет собой A, L, R, V, =, С, D, Т.
622 ОТВЕТЫ К УПРАЖНЕНИЯМ 7.1.1 (б) Коэффициент, соответствующий, скажем, степеням 01101, равен /о».о» в обозначе- ниях из ответа к упр. 12; это линейная комбинация элементов таблицы истинности, всегда • лежащая в диапазоне [—2fc-1] < /о..о» < [2к~х] при наличии к звездочек. Таким обра- зом, ведущий коэффициент положителен тогда и только тогда, когда число в смешанной системе счисления [/**...»> /о»...», • • •, /»о...о, /оо...о] 2™+1, 2"-1+1, ..., 21-!-!, 2°+1 J положительно, где f упорядочено в обратном порядке последовательности Чейза, а осно- вание 2fc + 1 соответствует f с к звездочками. Например, при т = 2 мы имеем F(f) = 1 тогда и только тогда, когда сумма 18/,.+6/о» +2/,о + /оо = 18(/n-/oi -/io+/oo)+6(/oi - /оо) + 2(/ю — /оо) + /оо = 18/11 — 12/oi — 16/ю + Н/оо положительна; так что пороговая функция может быть записана как (/n/oj2/io/oo )- (В этом конкретном случае в действительности корректным является гораздо более простое выражение (/ii/ii/oi/io/oo). Но в п. (в) будет показано, что при больших значе- ниях т мы не можем существенно улучшить получаемый результат.) (в) Предположим, что F(f) = ua(/a — |) > 0], где суммирование выполняется по всем 2™ бинарным строкам а длиной т и где каждое va представляет собой целочисленный вес. Определим = 52(-1Г(“^Ч и Fa=52(-l)*'(“^)/^-2m“1[a = OO...O]; Р Р таким образом, например, woi = — uOo + vOi — гло + иц и Fu = /оо — /oi — /10 + /и- Можно показать, что F^qi = 2lf„kOi, если Fa = 0 при i/(a) > к > 0; следовательно, знаки преобразованных коэффициентов истинности Fa определяют знак ведущего коэффициента в мультилинейном представлении. Кроме того, теперь мы имеем F(f) = wqFq > 0]. Общая идея доказательства заключается в выборе тестовой функции /, из которой мы можем вывести свойства преобразованных весов ша. Например, если /(ал,... ,хт) = xi ф • •• ф Xk, мы находим Fa = 0 для всех а, за исключением Flkom-k = (—l)fc-12m~1. Мультилинейное представление xi ф • • • ф Хк имеет ведущий член [(—2)fc-1]xi... Хк', сле- довательно, мы можем заключить, что Wjkgm-k > 0, а также аналогичным способом, что wa > 0 для всех а. В общем случае, если т изменяется на т +1, но / не зависит от im+i, мы имеем Fqq = 2Fa и Fu = 0. Тестовая функция х? Ф • • • Ф хт Ф Х1Х2 • • • хт доказывает, что т— 1 ил*” > (2m-1—l)w01m-i + , w1k01m-i-k + меньшие члены, fc=i где меньшие члены включают только ша с р(а) < т—2. В частности, гоц > u>oi -t-uiio+uioo- Тестовая функция ал ф • • • ф xm-i Ф ал ... im-2(im-i Ф Хт) доказывает, что т—3 2qj > (2 2}0 Ч- 3—fc ю Ч- ^ifcoi™ — 3 — ^01) МвНЬШИС ЧЛСНЫ, к=0 где в этот раз меньшие члены имеют р(а) < т — 3. В частности, или > ил 10 + мою + u>ooi • Перестанавливая индексы, мы получаем аналогичные неравенства, ведущие к > (г*4"^-1 - l)wQj l для 0 < j < 2™, поскольку и начинают быстро расти. Но мы имеем va = °^wp/n-, следователь- но, |uQ| = tuii...i/n + O(u>ii...i/n2). [SIAM J. Discrete Math. 7 (1994), 484-492. Важные обобщения этого результата были получены Н. Алоном (N. Alon) и В. X. By (V. Н. Vii), J. Combinatorial Theory А79 (1997), 133-160.]
7.1.1 ОТВЕТЫ К УПРАЖНЕНИЯМ 623 113. Указанная дз равна 82,3,6,8,9, поскольку указанная дз равна 82,3,4,5,8,9,10,11,12. Для вычисления более сложной функции 81,3,5,8 положим gi = [их > 6]; дз = [их > 3]; дз = [их — 5gi — 2дз > 2] = 82,4,5,9,10,11,12; <74 = [2ря: — 15gi — 9рз > 1] = 81,3,5,8. [См. М. A. Fischler and М. Tannenbaum, IEEE Transactions С-17 (1968), 273-279.] 114. [4x + 2y + z G {3,6}] = (xAj/Az) V (xAj/Az). Таким же образом любая булева функция от п переменных представляет собой частный случай симметричной функции от 2" — 1 переменных. [См. W. Н. Kautz, IRE Transactions ЕС-10 (1961), 378.] 115. Обе части самодуальны, так что можно считать, что хо = 0. Тогда Sj = [Xj 4“ ’ ‘ ‘ 4“ Xjj-m—1 > Xj^-m 4“ * ' ' 4“ Xjj-Зт— 1]- Если xi 4----i-хзт нечетно, имеем Sj = следовательно, Si 4-------FS2m = т и результат равен 1. Но если х± 4- • • • 4- хзт четно, разность Xj 4-4- Xj+m-i — xj+m — • • • — Xj+3m-i будет равна нулю как минимум для одного j < т; это делает Sj = Sj+m = 0, так что мы получим Si 4---4- ззт < т. 116. (а) Это импликанта тогда и только тогда, когда f(x) = 1 при j < их <n — k+j. Это простая импликанта тогда и только тогда, когда, кроме того, f(x) = 0 при их = j — 1 или их = п — к 4- j 4-1. (б) Рассмотрим строку v = здщ ...гм, такую, что f(x) = vvx. Согласно п. (а) при v — 0“1ь+10с имеется (aJ”^c) простых импликант. В указанном случае а = Ь = с = 3, так что простых импликант—1680 штук. (в) В случае обобщенной симметричной функции мы собираем вместе простые им- пликанты для каждой серии единиц в v. Ясно, что когда а < с — 1, их больше для v = 0“+11ь+10с~1, чем для v = 0а1ь+10с; так что, когда достигается максимум, v не содержит двух последовательных нулей. Пусть Ь(т,п) — максимально возможное число простых импликант, когда vm = 1 и Vj = 0 для т < j < п. Тогда при т < |п мы имеем b(m,n) = max (( ? ) 4- Ъ(к - 2, п) ) 0<к<тп\\/С, ТП — К, П — ТП/ J = (г™/21 I "/21 +Ь(Гт/2] -2,п), \ | 777у 21, 2 J , 77 777 / с 6(—2,п) = 6(—1,п) = 0. А глобальный максимум равен 6(п) = ( П 4- Ъ(п1 — 2,п) 4- Ь(пз — 2,п), п, = I I \По,П1,П2/ L 3 J В частности, мы имеем 6(9) = 1698 с максимумом, достигаемым при v = 1101111011. (г) Согласно приближению Стирлинга Ь(п) = 3"+3/,2/(2тгп) 4- О(3"/п2). (д) В этом случае соответствующее рекуррентное соотношение для т < [п/2] имеет вид 6(m,n) = max (Y ” ) + п ™ . . . ) + b(fc - 2,п)) o<k<m\\к,т — к, п — mJ \к — 1,0,тг — к + 1 / / = ( [т/2], \т/2\,п - тп) + ( [тп/2] - 1) + ~ 2’п^’ а значение 6(п) = 6([п/2] — 1,п) максимизирует функцию тт(простыеимпликанты(/), простыеимпликанты(/)). Мы имеем (6(1), 6(2),...) = (1,1,4,5,21,31,113,177,766,1271, 4687,7999,34412,...); например, 6(9) = 766 соответствует 80,2,3,4,e(a:i, - - - ,£9). Асимпто- тически 6(n) = 2(3n+3+(" mod 2))/7(2тгп) 4- О(23п'2/п2).
624 ОТВЕТЫ К УПРАЖНЕНИЯМ 7.1.1 Ссылки. Summaries, Summer Inst, for Symbolic Logic (Dept, of Math., Cornell Univ., 1957), 211-212; B. Dunham and R. Fridshal, J. Symbolic Logic 24 (1959), 17-19; А. П. Ви- кулин, Проблемы кибернетики 29 (1974), 151-166, где он сообщает о работе, выполненной в 1960 году; Y. Igarashi, Transactions of the IEICE of Japan E62 (1979), 389-394. 117. Максимальное количество подкубов в n-мерном кубе, где ни один из них не со- держится в другом, получается при выборе всех подкубов с размерностью [n/3J. (Оно получается также путем выбора всех подкубов с размерностью Цп + 1)/3J; например, при п = 2 мы можем выбрать либо {0*, !♦, *0, ♦!}, либо {00,01,10,11}.) Следовательно, Ь*(п) = (Ln/3j)Ln/3J = Зп+1/^/4тгп + О(Зп/п3^2). [См. статью А. П. Викулина из предыдущего упражнения, страницы 164-166; А. К. Chandra and G. Markowsky, Discrete Math. 24 (1978), 7-11; N. Metropolis and G. C. Rota, SIAM J. Applied Math. 35 (1978), 689-694.] 118. Будем рассматривать две функции как эквивалентные, если одну из них можно получить из другой с помощью дополнения и/или перестановки переменных, но не до- полнения самогб значения функции. Ясно, что такие функции имеют одинаковое количе- ство простых импликант; это отношение эквивалентности изучается в ответе к упр. 125. Компьютерная программа на основе результатов упр. 30 дает следующие результаты. тп Классы ’ Функции тп Классы Функции тп Классы Функции 0 1 1 5 87 17472 10 7 632 1 5 81 6 70 12696 11 1 96 2 18 1324 7 43 7408 12 2 24 3 46 6608 8 24 3346 13 1 16 4 87 14536 9 10 1296 14 0 0 А вот так выглядит соответствующая статистика для функций от пяти переменных. тп Классы Функции тп Классы Функции тп Классы Функции 0 1 1 11 186447 666555696 22 338 608240 1 6 243 12 165460 590192224 23 130 197440 2 37 14516 13 129381 459299440 24 71 75720 3 244 318520 14 91026 319496560 25 37 28800 4 1527 3319580 15 57612 199792832 26 15 10560 5 6997 19627904 16 33590 113183894 27 6 2880 6 23434 73795768 17 17948 58653984 28 4 1040 7 57048 190814016 18 8880 27429320 29 2 640 8 105207 362973410 19 3986 11597760 30 2 48 9 152763 538238660 20 1795 4548568 31 2 64 10 183441 652555480 21 720 1633472 32 1 16 119. Несколько авторов высказали гипотезу о том, что Ь(п) = Ь(п); М. М. Гаджиев доказал справедливость этого равенства при п < 6 [Дискретный анализ 18 (1971), 3-24]. 120. (а) Каждая простая импликанта является минитермом, поскольку в n-мерном кубе нет соседних точек с одинаковой четностью. Так что в этом случае единственной подхо- дящей DNF является полная дизъюнктивная форма. (б) Теперь все простые импликанты состоят из двух смежных точек. Мы должны включить 14 подкубов О-'+О6--' и 1-’*16--’ для 0 < j < 6, чтобы покрыть точки с их = 1 и их = 6. Другие (3) + (д) = 70 точек могут быть покрыты 35 тщательно подобранными простыми импликантами (см., например, упр. 6.5-1 или “шаблон рождественской елки” из раздела 7.2.1.6). Таким образом, кратчайшая дизъюнктивная нормальная форма имеет длину 49. [Изобретательное правдоподобное, но, увы, неверное доказательство необхо- димости 70 простых импликант было приведено в работе С. В. Яблонского Проблемы кибернетики 7 (1962), 229-230.]
7.1.1 ОТВЕТЫ К УПРАЖНЕНИЯМ 625 (в) Для каждого из 2П-1 выборов (xi,..., a:n-i) нам нужно не более одной импликан- ты для учета поведения функции по отношению к хп. [Асимптотически почти все булевы функции от п переменных имеют кратчайшую дизъюнктивную нормальную форму с 0(2"/(lognloglogn)) простыми импликантами. См. Р. Г. Нигматуллин, Дискретный анализ 10 (1967), 69-89; В.В, Глаголев, Проблемы кибер- нетики 19 (1967), 75-94; А. Д. Коршунов, Методы дискретного анализа 37 (1981), 9-41; N. Pippenger, Random Structures & Algorithms 22 (2003), 161-186.] 121. (а) Пусть x = xj ... xm и у = yi... yn. Поскольку f является функцией от (ux, uy), всего имеется 2^m+1^n+1) возможных вариантов. (б) В этом случае из их < их' и иу < иу' вытекает f(x,y) < f(x',y'). Каждая такая функция соответствует зигзагообразному пути от ао = (—|,тг+|) до am+n+2 = (m+|, — |) с aj = aj-i + (1,0) или aj = aj-i — (0,1) для 1 < j < m + n + 2; мы имеем f(x, у) = 1 тогда и только тогда, когда точка (их, иу) лежит над путем. Так что количество возможностей равно количеству таких путей, а именно (т+"+2) • (в) Дополнение х и у изменяет их на тп — их и иу на п — иу. Так что, когда и тп, и п четны, таких функций нет; в противном случае их 2(т+1^"+1^2. (г) Путь в (б) должен теперь удовлетворять условию aj + am+n+2-j = (тп, п) для 0 < j < тп + п + 2. Следовательно, количество таких функций равно нечетно или п нечетно]. Например, при тп = 3 и п = 6 имеются следующие десять случаев. 122. Функция такого рода, в которой все х находятся слева от у, регулярна тогда и только тогда, когда зигзагообразный путь не содержит двух точек, (х,у) и (х -I- 2, у), с 0 < у < п; если все у находятся слева от х, она регулярна тогда и только тогда, когда зигзагообразный путь не содержит ни (х, у + 2), ни (х,у), где 0 < х < тп. Это пороговая функция тогда и только тогда, когда имеется прямая линия, проходящая через точку (тп/2,п/2) и обладающая тем свойством, что (s, t) находится над этой линией тогда и только тогда, когда (s, t) находится над путем, где 0<я<ти0<(<тг. Так что случаи 5 и 8, проиллю- стрированные в ответе к предыдущему упражнению, не являются регулярными; случаи 1, 2, 3, 7, 9 и 10 являются пороговыми функциями. Остающиеся непороговые функции могут также быть выражены следующим образом: ((xi V Х2 V хз) A (х1Х2Хзу1У2узУ4У5Уе)) V (xi А жгАхз) (случай 4); (ООхиг^зУгУгУз^З/вЗ/б) V((лад)^(Пх^хзхзугузузуьуьуе)) (случай 6). 123. Самодуальные регулярные функции относительно просто перечислить для малых значений п, но их количество быстро растет: при п = 9 имеется 319124 такие функции, найденные в 1967 году Мурогой (Muroga), Цубои (Tsuboi) и Бофом (Baugh); когда п = 10, этих функций— 1214 554 343 (см. упр. 7.1.4-75). Соответствующие числа для п < 6 приве- дены в табл. 5, поскольку все такие функции являются пороговыми функциями при п < 9; при п = 7 их 135, а при п = 8 — 2470. Условие пороговости функции может быть быстро проверено для любой такой функ- ции путем усовершенствования метода из упр. 103, поскольку ограничения необходимы только для минимальных векторов х (по отношению к мажоризации), таких, что f(x) = 1. Известно, что количество 0п пороговых функций от п переменных удовлетворяет уравнению 1g вп =п2 — O(n2/logn); см. Ю. А. Зуев, Математические вопросы кибернетики 5 (1994), 5-61. 124. 222 класса эквивалентности, перечисленные в табл. 5, включают 24 класса размером 2п+1тг! = 768; так что имеется 24 х 768 = 18432 ответа на поставленный вопрос. Одним из них является функция (w A (х V (у A z))) ф z.
626 ОТВЕТЫ К УПРАЖНЕНИЯМ 7.1.1 125. 0; х-, х Л у, х Л у Л z; х Л (у V г)-, х /\ (у ® z). (Эти функции представляют собой х A f(y, z), где f пробегает классы эквивалентности функций от двух переменных и/или дополнений переменных, но не значений функций. В общем случае пусть f — д означает, что f эквивалентна д в этом слабом смысле, но если они эквивалентны в смысле табл. 5, будем писать f — д. Тогда я:Л/ S? х/\д тогда и только тогда, когда f ~ д, в предположении, что f и д не зависят от переменной х. Легко увидеть, что (я: Л /) (х V д) невозможно. А если (х Л /) ~ (а: Л д), можно доказать, что f ~ д, показав, что если о представляет собой знаковую перестановку {хо, • • •, ягп} и если х = xi... хп, то из тождества хо Л f(x) = (хо&) Л д(ха) вытекает f(x) = д(хат), где т обменивает хо ++ хос. В результате нижняя строка табл. 5 перечисляет классы эквивалентности по отношению к но с п, увеличенным на 1; имеется, например, 402 таких класса функций от четырех переменных.) 126. (а) Функция является канализирующей тогда и только тогда, когда она имеет про- стую импликанту не более чем с одним литералом, или простой дизъюнкт не более чем с одним литералом. (б) Функция является канализирующей тогда и только тогда, когда как минимум один из компонентов Е(/) равен 0, 2"-1, N(f) или N(f)—2П-1. [См. I. Shmulevich, Н. Lahdesmaki, and К. Egiazarian, IEEE Signal Processing Letters 11 (2004), 289-292, Proposition 6.] (в) Если, скажем, V(/) = yi... yn, где yj = 0, to f(x) = 0 при Xj = 1. Следовательно, функция f канализирующая тогда и только тогда, когда мы не имеем V(/) = V(/) = 1... 1 и Л(/) = Л(/) = 0... 0. С помощью такого теста можно доказать, что многие функции не являются канализирующими, зная их значения только в нескольких точках. 127. (а) Поскольку самодуальная функция /(ял,... ,я:п) истинна ровно в 2"-1 точках, она является канализирующей по отношению к переменной Xj или Xj тогда и только тогда, когда /(ял,... ,хп) = Xj. (б) Определенная функция Хорна, очевидно, является канализирующей, если (i) она содержит любой дизъюнкт с единственным литералом или если (ii) некоторый литерал входит в каждый дизъюнкт. В противном случае она не является канализирующей. Ибо мы имеем /(0,..., 0) = /(1,..., 1) = 1, поскольку (i) ложно; а если Xj —любая переменная, то имеется дизъюнкт Со, не содержащий Xj, и дизъюнкт Ст, не содержащий Xj, в силу ложности (ii). Выбирая соответствующие значения других переменных, можно сделать Со Л Ci ложным как при Xj = 0, так и при Xj = 1. 128. Например, (ял Л • • • Л я:п) V (ял Л • • • Л х„). 129. ELiC-1)^1^)22"~fc+fc+l - 2(п - 1) - 4(nmod2) = n22”“1+2 + О(п222"“2). [См. W. Just, I. Shmulevich, and J. Konvalina, Physica D197 (2004), 211-221.] 130. (а) Если имеется ап функций от п или меньшего количества переменных, и при этом Ьп функций оказываются ровно от п переменных, то ап = 52 (£)Ь*,. Следовательно, Ьп = J2fc(—l)”-fc(£)а*>. (Этот закон, отмеченный К. Э. Шенноном (С. Е. Shannon) в Trans. Amer. Inst. Electrical Engineers 57 (1938), 713-723, §4, применим ко всем строкам табл. 3, за исключением случая симметричных функций.) В частности, искомый ответ равен 168 — 4-20 + 6- 6 — 4-3 + 2 = 114. (б) Если имеется а'п существенно различных функций от п или меньшего количества переменных, и при этом Ь'п функций оказываются ровно от п переменных, то мы имеем а'п = b'k. Следовательно, Ь'п = а'п — a„_i, и в этом случае ответ равен 30 — 10 = 20. 131. Пусть имеется h(n) функций Хорна и к(п) функций Крома. Ясно, что lg h(n) > (^n"2j) и lgfc(n) > (£). В. Б. Алексеев [Дискретная математика 1 (1989), 129-136] доказал, что lgh(n) = Qn"2j)(l+O(n-1/4 logn)). Б. Боллобас (В. Bollobas), Г. Брайтвелл (G. Brightwell) и И. Лидер (I. Leader) [Israel J. Math. 133 (2003), 45-60] доказали, что lgfc(n) ~ |n2.
7.1.2 ОТВЕТЫ К УПРАЖНЕНИЯМ 627 132. (а) Указание истинно, так как $2^ s(y)s(y ф г) = = 2" $2W х(—l)^w)+^x)+x’z[x = ш]. Теперь предположим, что /(х) = д(х) для 2"-1 + к зна- чений х; тогда /(х) = д(х) Ф 1 для 2П-1 — к значений х. Но если |fc| < 2п^~1 для всех аффинных д, то мы должны получить |в(г/)| < 2п^2 для всех у, что противоречит указанию при z = 0. (б) Для заданных у0, yi, ..., уп имеется ровно 2п/2((г/13/2 + г/зЗ/4 -I-F yn-iyn + 1 + Уо +h(yi,y3,... ,уп-1)) mod 2) решений уравнения /(х) = (у0 + х • у) mod 2 при х2к = У2к-1 для 1 < к < п/2 и 2"/2-1 решений для каждого из других 2п^2 — 1 значений (хг, хц,..., хп). Так что всего имеется 2П-1 ± 2П^2-1 решений. (Эти рассуждения в действительности доказывают, что, когда д(х1,хз,... ,X2n-i) представляет собой перестановку всех 2"/2- битовых векторов, функция (р(х1,хз,... ,X2n-i) • (хг, Х4,... ,X2n) + h(x2,xi,... ,X2n)) mod 2 изогнутая.) (в) Рассуждения в п. (а) доказывают, что /(х) является изогнутой тогда и только тогда, когда в(у) — 2”/2(—1)®^ для некоторой булевой функции д(у). Эта функция д, ко- торая представляет собой преобразование Фурье/Адамара функции /, также изогнута, так как Е,/-!)®004”1''1' = 2~п/2 y(-l)f(x)+x y+w v = 2n/2 £х(- = w] = 2n/2(-l)/(w) для всех го. Теперь указание говорит о том, что = О для всех ненуле- вых г, и то же самое выполняется для /. И обратно, предположим, что /(х) удовлетворяет указанному условию. Тогда мы имеем з(у)2 = у^(_1)1<а,)+ж -i/-H(»et)+(»e«)4> _ jjt у _ 2п X,t t X для всех у. (г) Согласно упр. 11 член ц ... хт присутствует тогда и только тогда, когда уравнение /(xi,..., хг, 0,..., 0) = 1 имеет нечетное количество решений, а эквивалентным условием является (52ц хг(~ 1)Л®1.” >®г.°.о)) mod 4 = 2. В п. (в) мы видели, что эта сумма равна 2"п X = 2Г~" £ в(0,...,0,уг+1,...,у„). Если г = п, последняя сумма равна ±2"^2; в противном случае она содержит четное число слагаемых, каждое из которых равно ±2Г”"^2. Так что результат представляет собой кратное 4. [Изогнутые функции были введены О. С. Ротхаусом (О. S. Rothaus) в 1966 году; его статья, распространяемая частным образом, в конце концов была опубликована в J. Combi- natorial Theory А20 (1976), 300-305. Д. Ф. Диллон (J. F. Dillon) в Congressus Numerantium 14 (1975), 237-249, открыл дополнительные семейства изогнутых функций; впоследствии были найдены многие другие примеры для п > 8 и четных п. Изогнутые функции не существуют при нечетных п, но функция наподобие g(xi,... ,xn-i) Ф xnA/i(xi,... ,xn_i) имеет расстояние 2П-1 —2^п-1^2 от всех аффинных функций, когда изогнуты д и д ф h. Для случая п = 15 Н. Д. Паттерсоном (N. J. Patterson) и Д. Г. Видеманном (D. Н. Wiedemann) было найдено лучшее построение [IEEE Transactions IT-29 (1983), 354-356, IT-36 (1990), 443], дающее расстояние 214 —108. С. Кавут (S. Kavut) и М. Дикер Юцель (М. Diker Yiicel) [Information and Computation 208 (2010), 341-350] добились расстояния 2® — 14 при п = 9.] 133. Пусть рк = 1/(22 *+ 1), так что рк = 22" */(2? *+ 1). [Диссертация (MIT, 1994).] РАЗДЕЛ 7.1.2 1. ((xi V Х4) Л х2) = (xt V хз). 2. (а) (ги ф (х Л у)) ф ((х ф у) Л г); (б) (ги Л (х V у)) Л ((х Л у) V z).
628 ОТВЕТЫ К УПРАЖНЕНИЯМ 7.1.2 3. [Доклады Академии наук СССР 115 (1957), 247-248.] Построим матрицу размером к х п, строки которой представляют собой векторы х, где f(x) = 1. С учетом перестановки и/или дополнения переменных можно считать, что верхняя строка имеет вид 1... 1 и что столбцы отсортированы. Предположим, что имеется I различных столбцов. Тогда f = g Л h, где g представляет собой И выражений (xj-i = Xj) по всем 1 < j < п таким, что столбец j — 1 равен столбцу j, a h представляет собой ИЛИ всех к минитермов длиной I с использованием одной переменной из каждой группы равных столбцов. Например, если п = 8 и если f равна 1 в к = 3 точках 11111111, 00001111, 00110111, то I = 4 и f(x) равна (Х1=Х2)А(хз=Х4)А(Хб=Х7)А(Х7=Хз)Л((Х1ЛХзЛХ5ЛХ6)\/(Х1ЛХзЛХ5ЛХб)\/(Х1ЛХзАХ5ЛХб))- Длина этой формулы в общем случае равна 2п 4- (к — 2)1 — 1, и мы имеем I < 2fc-1. Заметим, что если к велико, мы получаем более короткие формулы, записывая f(x) как дизъюнкцию ft(x) V • V fr(x), где каждое fj имеет не более [к/r] единиц. Таким образом, L(f) < min(r — 1 4- (2n + \k/r — 2]2^fc^r-1^)r). r>l 4. Первое неравенство очевидно, поскольку бинарное дерево глубиной d имеет не более 1 4- 2 4- • - • + 2d-1 = 2d — 1 внутренних узлов. Указание следует из того, что мы можем считать ft формулой размера L(f) — L(g) — 1, возникающей, когда g заменяется на t. Для 1 < к < L(/) полагаем gt- минимальной подформулой размера > к. Тогда р*,? /и: До получается из дерева, которое содержит д^, fki и fko на уровне 2. Пусть dr = max{ D(f) | L(f) = г}. Поскольку дочерние по отношению к д^ узлы находятся на уровне 3 и имеют размер < к, мы имеем dr < min£“] max(34-dfc-i,24-dr_fc-i) для г > 3. По индукции по г следует, что dr < I при г < bi, где bi =1 для Q <1 <2 nbi = bi-2+bts+2 для I > 3. Мы также имеем bi+2 = (8Pi4-18Pi+i4-11Pi+2)/23 = с%‘ 4-0(0.871) с применением чисел Перрина из упр. 7.1.4-15, где с = (2 4- 4у 4- 3у2)/(3 4- 2у) и 2.224. Следовательно, dr < a 1g г при г > 1. [См. Р. М. Spira, Hawaii Int. Conf. Syst. Sci. 4 (1971), 525-527; R. Brent, D. Kuck and K. Maruyama, IEEE C-22 (1973), 532-534. In JACM 23 (1976), 534-543, Д. Ю. Мюллер (D. E. Muller) и Ф. П. Препарата (F. P. Preparata) доказали, что D(J) < /31g L(J) 4- 0(1), где /3 = 1/lg z ~ 2.0807, z4 = 2z 4-1. Является ли /3 оптимальным?] 5. Пусть go = 0, gi = ал и g, = x, Л (xj-i V д,-2) для j > 2. Тогда Fn = gn V pn-i, co стоимостью 2n — 2 и с глубиной n. [Эти функции gj также играют заметную роль в бинарном сложении; см. способ их вычисления с глубиной O(log тг) в упр. 42 и 44.] 6. Истинно: рассмотрите случаи у = 0 и у = 1. 7. Хз = xi V xt, Хв = Х2 Л хз, Х7 = xi V хз, хз = хв® хт. (Исходная цепочка вычисляет “случайную” функцию (6); см. упр. 1. Новая цепочка вычисляет нормализацию этой функции, а именно ее дополнение.) 8. Требуемая таблица истинности состоит из блоков из 2п~к нулей, чередующихся с бло- ками из 2п~к единиц, как в (7). Следовательно, при умножении на 22 4- 1 мы получим Хк 4- (хк 2п~к), что представляет собой сплошные единицы. 9. При поиске L(f) = оо на шаге L6 мы можем сохранить д и h, в записи, связанной с f. Тогда рекурсивная процедура сможет строить формулу с минимальной длиной для f из соответствующих формул для д и h. 10. На шаге L3 используйте к = г — 1 вместо к = г — 1 — j. Кроме того, везде замените L на D. 11. Единственной тонкостью является то, что j на шаге U3 должно уменьшаться', тогда мы никогда не получим ф(д) & ф(Н) 0 0 при j = 0, так что все случаи со стоимостью г — 1 будут открыты до того, как мы начнем рассмотрение списка г — 1.
7.1.2 ОТВЕТЫ К УПРАЖНЕНИЯМ 629 U1. [Инициализация.] Установить U(0) 4— </>(0) 4— 0 и U(f) 4— оо для 1 < f < 22"-1. Затем установить U(xk) 4— Ф(хк) 4— 0 и поместить Хк в список 0, как на шаге L1. Установить также U(xj о Хк) 4— 1, установить ф(х] о х^) равным его уникальному вектору отпечатка (который содержит только одну единицу), и поместить Xj о Хк в список 1 для I <j < к <пи всех пяти нормальных операторов о. Наконец установить с 4— 22 -1 — 5(j) — п — 1. U2. [Цикл по г.] Выполнять шаг U3 для г = 2, 3, ... до тех пор, пока с > 0. U3. [Цикл по j и fc.] Выполнять шаг U4 для j = [(г — 1)/2], [(г — 1)/2J — 1, ... и к = 1— 1 — j, до тех пор, пока j > 0. U4. [Цикл по д и /г.] Выполнять шаг U5 для всех д в списке j и всех h, в списке fc; если j = fc, ограничить h функциями, которые следуют за д в списке fc. U5. [Цикл по /.] Если ф(д) & ф(к) 0, установить и г — 1 и v «- ф(д) & </>(/г); в противном случае установить и 4— г и v 4— ф(д) | ф(Н). Затем выполнить шаг U6 для f = д & h, f = д & h, f = д & h, f = g | h и f = g ф h. U6. [Обновление U(f) и ф(/)-] Если U(f) = оо, установить с 4— с— 1, ф(/) 4— v, U(f) 4— и и поместить f в список и. В противном случае если U(J) > и, переместить f из списка U(f) в список и и установить </>(/) 4— v, U(f) 4— и. В противном случае если U(/) = и, установить </>(/) 4- ф(/) | v- I 12. 14 = 11 ф Хз, Хз = Хз Л Xf, Хб = Х2 Л Х4, Хт = Хз V Хб- 13. /в = 01010101 (хз); /« = 01110111 (x2Vx3); /з = 01110101 ((xiAx2)Vx3); /2 = 00110101 (xi? хз: х2); fi = 00010111 ((xix2x3)). 14. Для 1 <j<n сначала вычислите t 4- (g®(gS>2n~:'))k.Xj, t 4— t®(t<C2n-J), где Xj пред- ставляет собой таблицу истинности (11); тогда для l<k<n«k/j требуемая таблица истинности, соответствующая Xj 4— Xj о Хк, представляет собой д ф (t & ((хл- о Хк) Ф Xj)). (5п(п — 1) масок (xj о Хк) Ф х, не зависят от д и могут быть вычислены заранее. Та же идея применима и тогда, когда мы допускаем более общие вычисления вида х^ 4— °» хцс) с 5n2(n — 1) масками (х*> о xi) ф xj.) 15. Замечательно асимметричные способы вычисления симметричных функций. (a) xi 4- xi ф х2, Х1 4- Х1 ф х3, Х2 4— х2 Л х3, xi 4— xi Л х2. (б) Х1 4— Х1 ф х2, Х3 4— Х3 ф Х4, XI 4— Х1 ф Хз, Х2 4— Х2 ф Х4, Х3 4— х3 V х2, Хз 4- Хз Л Х1. (в) Х1 4— Х1 ф х2, Х2 4— Х2 Л Х1, Хз 4- Х3 ®Х4, Х4 4— Х4 Л Х1, х2 4— х2 Л х3, х2 4— Х2 ф Х1, х2 4— Х2 Л Х4. (г) Х1 4— Х1 ф х2 Х2 4— Х2 ф Х3 х2 4— х2 V xi, Х1 4— Х1 ф Х4 xi 4— xi Л х3, х2 4— х2 Л xi, х2 4— Х2 ф Х4. 16. Вычисление, которое использует только Ф и дополнение, не производит ничего, кроме аффинных функций (см. упр. 7.1.1-132). Предположим, что /(х) = /(xi,... ,хп) является неаффинной функцией, вычислимой с использованием минимальной памяти. Тогда /(х) имеет вид д(Ах+с), где g(yi, уз,---, уп) = p(j/iAj/2,j/2, ..., уп), для некоторой несингулярной матрицы А размером п х п из нулей и единиц, где х и с—векторы столбцов, а операции над векторами выполняются по модулю 2; в этой формуле матрица А и вектор с вычисляются для всех операций х, 4— х, ф Xj и/или перестановок и дополнений координат, которые встречаются после последней выполненной неаффинной операции. Мы воспользуемся тем фактом, что д(0,0, уз, - - -, з/п) = р(1,0, уз, - - -, 1/п). Пусть а и /3—первые две строки А; пусть также а и b—первые два элемента с. Тогда, если Ах + с = у (по модулю 2), мы имеем yi = уз = 0 тогда и только тогда, когда а • х = а и /3-х = Ь. Этому условию удовлетворяют ровно 2П-2 векторов х, и для всех таких векторов мы имеем /(х) = /(х ф го), где Aw = (1,0,..., 0)т.
630 ОТВЕТЫ К УПРАЖНЕНИЯМ 7.1.2 Для заданных а, fi, а, b и w с а (0, ...,0), /3 (0, ...,0), а /3 и а • w = 1 (по модулю 2) имеется 22”-2”-2 функций f, обладающих тем свойством, что f(x) = f(x ф w) при а • х mod 2 = а и fi • х mod 2 = Ь. Следовательно, общее количество функций, вычислимых с использованием минимального количества памяти, не превышает 2"+1 (для аффинных функций) плюс (2" - 1)(2” - 2)22(2”-1)(22"-2" 2) < 22"_2"_2+3”+1. 17. Пусть f{xi,... ,хп) = g(xi,... ,a:n-i) Ф (h(xi, • - ,&n-i) Л хп), как в 7.1.1-(16). Пред- ставляя h в конъюнктивной нормальной форме, будем образовывать дизъюнкты по одному в хо, и выполнять над ними операцию И с размещением результата в х„, получая h Л х„. Представляя д в виде суммы конъюнкций по модулю 2, образуем последовательные конъюнкции в хо и по завершении работы выполняем операцию ЛИБО с х„. (Похоже, что мы не сможем вычислить все функции в рамках п + 1 регистра, если откажемся от неканализирующих операторов ф и =. Однако ясно, что п + 2 регистров будет достаточно, даже если ограничиться единственным оператором Л.) 18. Как упоминалось в ответе к упр. 14, мы должны расширить данное в разделе определе- ние вычислений с использованием минимального количества памяти, позволяя также шаги наподобие х^($) <— хщ,) °i хц^) с k(i) j(i) и /(i) j(i), поскольку это даст лучшие резуль- таты для некоторых функций, зависящих только от четырех из пяти переменных. Тогда мы найдем Cm(f) = (0,1,..., 13,14) для соответственно (2, 2, 5, 20, 93, 389, 1960, 10459, 47604, 135990, 198092, 123590, 21540, 472, 0) классов функций... оставляя в стороне 75 908 классов (и 575 963136 функций), для которых Cm(f) = оо, поскольку они не могут быть вычислены с использованием минимального количества памяти вообще. Самой интересной функцией такого рода является, вероятно, (xiAx2)V(x2Axs) V(x3Ax4)V(x4Axb)V(x5Axi), которая имеет C(f) = 7, но при этом Cm(f) = оо. Еще одним интересным случаем является функция (((xi V хг) Ф хз) V ((хг V хц) Л хе)) Л ((xi = хг) V хз V Х4), для которой C(J) = 8 и Cn(f) = 13. Одним из способов вычисления этой функции за восемь шагов является Хб = xi V Х2, хт = xi V Х4, хв = Х2 ф X?, Хд = Хз ф Хб, Х10 = Х4 ф Хд, Хц = Хе V Хд, Х12 = х8 Л хю, Х13 = ян Л Х12. 19. Если это не так, то левое и правое поддеревья корня должны перекрываться, посколь- ку случай (i) не выполняется. Согласно гипотезе каждая переменная должна встречаться в качестве листа по меньшей мере один раз. Как минимум две переменные должны встречаться в качестве листьев дважды, поскольку не выполняется случай (ii). Но у нас не может быть п + 2 листьев с г < п + 1 внутренними узлами, если только поддеревья не являются неперекрывающимися. 20. Сейчас алгоритм L (с пропущенным = gQh’ на шаге L5) показывает, что некоторые формулы должны иметь длину 15; и даже метод отпечатков из упр. 11 не дает ничего лучшего, чем 14. Чтобы получить истинно минимальные цепочки, к 25 специальным цепочкам для г = 6 в разделе следует добавить пять других, которые больше нельзя исключать, а именно и когда г = (7,8,9), мы должны также рассмотреть соответственно (653,12387,225660) дополнительных потенциальных цепочек, которые не являются частными случаями нис- ходящего или восходящего построения. Вот как выглядит получающаяся в результате статистика (ср. с табл. 1).
7.1.2 ОТВЕТЫ К УПРАЖНЕНИЯМ 631 Cc(f) Классы Функции Uc(f) Классы Функции W) Классы Функции Dc(f) Классы Функции 0 2 10 0 2 10 0 2 10 0 2 10 1 1 48 1 1 48 1 1 48 1 1 48 2 2 256 2 2 256 2 2 256 2 7 684 3 7 940 3 7 940 3 7 940 3 59 17064 4 9 2336 4 9 2336 4 7 2048 4 151 47634 5 24 6464 5 21 6112 5 20 5248 5 2 96 6 30 10616 6 28 9664 6 23 8 672 6 0 0 7 61 18 984 7 45 15128 7 37 11768 7 0 0 8 45 17680 8 40 14296 8 27 10592 8 0 0 9 37 7882 9 23 8 568 9 33 11536 9 0 0 10 4 320 10 28 5920 10 16 5472 10 0 0 11 0 0 11 6 1504 11 30 6 304 11 0 0 12 0 0 12 5 576 12 3 960 12 0 0 13 0 0 13 3 144 13 8 1472 13 0 0 14 0 0 14 2 34 14 2 96 14 0 0 15 0 0 15 0 0 15 4 114 15 0 0 Два класса функций с глубиной 5 представлены функциями S2,4(xi,X2, хз, ц) и xi О) 82(12, хз,Х4)-, и эти две функции, вместе с 52(2:1,2:2,2:3,2:4) и функцией четности 81,з(х1,Х2,хз, 2:4) = xi ф Х2 ф хз ф хи, имеют длину 15. Кроме того, UC(S2,4) = ^с(51,з) = 14. Четыре класса со стоимостью 10 представлены функциями Si,4(2:1,Х2,хз,хц), 82,4(11,Х2,хз,хц), (х4? xi ф Х2 Ф хз: (Х1Х2Х3)) и [(адхгяза^г 6 {0,1,4,7,10,13}]. (Третья из них, кстати, эквивалентна (20), “Гарвардскому труднейшему случаю’.’) 21. (Авторы указали, что записи в их таблице “должны рассматриваться только как наиболее экономичные операторы, известные авторам’.’) Минимальная стоимость их самой трудной функции (20) все еще неизвестна, но Дэвид Стивенсон (David Stevenson) показал, что V(f) < 17: д = И(НЕ-И(щ, х), НЕ-И(щ, х)); f = ИЛИ(и(НЕ(р), НЕ-И(щ, z), НЕ-И(р, z)), И(НЕ(НЕ(р)), НЕ-И(р, z), НЕ-И(р, z))). И хотя гарвардские исследователи и не нашли этой конкретной конструкции, они очень хорошо поработали, в ряде случаев обогнав эвристику на основе отпечатков на целых 6 сеток! 22. 1/(2:12:22:32:42:5) = 3 тогда и только тогда, когда 1/(2:12:22:32:4) 6 {2,3}, а значение 1/(2:12:22:32:42:5) нечетно. Аналогично 52(2:1,2:2,2:3,2:4,2:5) = 53(2:1,2:2,2:3,2:4,2:5) включает 51,2(2:1, Х2, Хз, Х4). 23. Нам необходимо рассмотреть только 32 нормальных случая, как на рис. 9, поскольку дополнение симметричной функции является симметричным. Затем для вывода большин- ства оставшихся случаев мы можем использовать отражение наподобие 51,2(2:) = 5з,4(т), возможно, вместе с дополнением наподобие 52,3,4,5(2:) = So,i(x) = 54,5(2:). Конечно, Si, 51,з,5 и 51,2,3,4,5 тривиально имеют стоимость 4. Так что остается только Si,2,3,4(xi,X2,X3, Х4,хз) = (xi ф Х2) V (х2 Ф 2:3) V (2:3 ф 2:4) V (2:4 ф 2:5), рассматривающаяся для обобщенного значения п в упр. 79. 24. Как отмечалось в разделе, эта гипотеза справедлива при п < 5.
632 ОТВЕТЫ К УПРАЖНЕНИЯМ 7.1.2 25. Это 22"-1 — п — 1, количество нетривиальных нормальных функций. (В любой нор- мальной цепочке длиной г, которая не включает все эти функции, xj о Хк будет новой функцией для некоторых j и к в диапазоне 1 < j,k < п + г и некоторого нормального бинарного оператора о; так что мы можем вычислять новую функцию на каждом новом шаге, пока не получим их все.) 26. Ложно. Например, если д = 31,з(х1,Х2,хз) и h = 32,з(хх,Х2,хз), то C(gh) = 5 пред- ставляет собой стоимость полного сумматора; но f = £2,3(24),24,Х2,хз) имеет стоимость 6 согласно рис. 9. 27. Да: операции ‘хз «— Х2 Ф ®i, хх Ч— xi ф хз, xi +- xi Л Х2, х± ч— xi ф Х3, Х2 Ч— Х2 Ф хз’ преобразуют (24,2:2,2:3) в (гх,го,хз). 28. Пусты/ = v" = v@(x@y)-, u' = ((ифр)С(2:фр))фи, u" = ((i>®p)V(2:®p))®M. Таким образом, мы можем установить uo = 0, vo = xi, Uj = ((1)7-1 ф 2:27+1) V (x2j Ф 2:27+1)) Ф «7-1, если j нечетно, Uj = ((1)7-1 ф 2:27+1) С (2:27 Ф 2:27+1)) Ф «>-1, если j четно, и Vj = D7-1 ф (x2j Ф 2:27+1), получая тем самым (ujv3)2 = (24 + • • • + 2:27+1) mod 4 для 1 < j < [n/2j. Установим Xn+i = 0, если п четно. Таким образом, [(24 + • • • + хп) mod 4 = 0] = Л V[n/2j вычисляется за [5n/2j — 2 шагов. Это построение предложено Л. Д. Стокмейером (L. J. Stockmeyer), который доказал, что оно близко к оптимальному. Действительно, результат упр. 80 вместе с рис. 9 и 10 показывает, что оно не более чем на один шаг длиннее наилучшей возможной цепочки для всех п > 5. Кстати, аналогичная формула u'" = ((v ф у) Л (х ф у)) ф и дает {u"'v')2 = ((ги))г + х — у) mod 4. Более просто выглядящая функция ((ги))г + х + у) mod 4 имеет стоимость 6, а не 5. 29. Чтобы получить верхнюю границу, будем считать, что каждый полный сумматор или полусумматор увеличивают глубину на 3. Если имеется a3d бит весом 23 и глубиной 3d, мы планируем не более [а^а/З] последовательных битов весом {2-’,2’+1} и глубиной 3(d + 1). По индукции следует, что ajd < (‘j)3~dn + 4. Следовательно, a3d < 5, когда d > log3y2 п, и общая глубина не превышает 3 log3/2 п + 3. (Забавно, что общая глубина при п = 107 оказывается равной ровно 100.) 30. Как обычно, пусть vn обозначает контрольное суммирование битов в бинарном пред- ставлении п. Тогда з(п) = 5n — 2vn — 3[lg nJ — 3. 31. После контрольного суммирования за s(n) < 5п шагов произвольная функция от (ziignj, • • •, z0) может быть вычислена не более чем за ~ 2n/lg п шагов согласно теореме L. [См. О. Б. Лупанов, Доклады Академии наук СССР 140 (1961), 322-325.] 32. Метод раскрутки: сначала докажите по индукции по п, что t(n) < 2"+1. 33. Ложно по техническим причинам: если, скажем, N = у/п, требуется как минимум п шагов. Однако можно доказать корректную асимптотическую формулу N+O(t/N )+О(п), заметив сначала, что метод из раздела дает N+O(y/N ) при N > 2"-1; в противном случае, если [1g 1VJ = п—k—1, мы можем использовать О(п) операций, чтобы получить И величины хх Л • • • Л хь с другими переменными 2:^+1, ..., хп, а затем работать с п, уменьшенным на к. (Одним из следствий является то, что мы можем вычислять симметричные функции {£1,£г, • • • ,£п} со стоимостью з(п) + п + О(у/п) = 6п + О(у/п) и глубиной O(logn).) 34. Будем говорить, что расширенный приоритетный шифратор имеет п + 1 = 2™ входов 2:02:1... хп и т + 1 выходов yoyi Ут, где уо = хо V xi V • • • V хп. Если Q'm и Q™ представляют собой расширенные шифраторы для х'о.. .х'п и ... 2:”, то Qm+i работает для х'о... х'пх'о ... х", если мы определим р0 = Ро V уЦ, yt = уё, У2 = Pi? Pi= Pi, • ••, pm+1 = px? pJJ,: p^. Если Pin представляет собой обычный приоритетный шифратор для х'1...х'п, мы аналогичным образом получим Pm+i для х{ ...х'пх'о . .х'„.
7.1.2 ОТВЕТЫ К УПРАЖНЕНИЯМ 633 Начиная с т = 2 и уз = хз V (xi Л т2), yi = Х2 V хз, уо = xqV xi V yi, это построение дает Рт и Qm со СТОИМОСТЯМИ Рт И qm, где Р2 = 3, ?2 = 5 И Рт+1 = Зт + Pm + Ут, Ут+1 — Зт + 1 + 2qm для т > 2. Следовательно, рт = qm — т и qm = 15 • 2m-2 — Зт — 4 ~ 3.75п. 35. Если п = 2т, вычислим xi Л т2, ..., хп-1 Л хп, затем рекурсивно образуем ®i Л • • • Л ®2fc-2 Л X2fc+i Л • • • Л хп для 1 < к < т и завершим работу еще за п шагов. Если п = 2т — 1, используем эту цепочку для п+1 элемента; три шага могут быть устранены, если положить т„+1 +- 1. [I. Wegener, The Complexity of Boolean Functions (1987), ynp. 3.25. Та же идея мо- жет быть использована с любым ассоциативным и коммутативным оператором вместо Л.] Зв. Рекурсивно построим Pn(xi,хп) и Qn(xi,..., хп) так, как описано далее, где Рп имеет D(yj) < [Ign] для 1 < j < п, a Qn имеет D(yj) < [lgn] + [jj^n]. Случай n = 1 тривиален; в противном случае Рп получается из Qr(xi,... ,хг) и Р"(хг+1,... ,хп), где г = [п/2] и s = [п/2], путем установки yj = y'j для 1 < j < г, у^ = у'г Л у'/-г Для г < 3 — п- A Qn получается либо из РДач Лхг, • • - ,хп-1 Лхп), либо из Pfai Лхг, • • •, хп-2 Лхп-1,хп), путем установки yi = xi, y2j = y'j, 3/2j+i = Vj x2j+i Д-™ 1 < j < s и y2a = у,, yn = Ут Эти вычисления могут быть выполнены с использованием минимального количества памяти, если устанавливать xk(i) +- Л xk(i) на шаге г для некоторых индексов j(i) < к(г). Таким образом, мы можем проиллюстрировать построение с диаграммами, аналогич- ными диаграммам для сортирующих сетей. Например, (задержка О) (задержка 1) (задержка 2) (задержка 2) . (задержка 3) ’ (задержка 3) (задержка 3) (задержка 3) (задержка О) (задержка 1) (задержка 2) (задержка 2) (задержка 3) (задержка 3) (задержка 4) (задержка 3) Стоимости Рп и qn удовлетворяют соотношениям Рп = [п/2] + 9fn/2] + P[n/2J, Уп — 2[n/2] — 1 + Pfn/2] при n > 1; например, (pi,...,p7) = (qi,--,qr) = (0,1,2,4,5,7,9). Установка pn = 4n — p„ и qn = 3n — qn приводит к более простым формулам, которые доказывают, что р„ < 4п и qn < 3n: qn = Pfn/2] + [п четно]; pin = Pin + pn + 1, P4n+i = Pin + Pn+l + 1, P4n+2 = P2n+1 + Pn+1, P4n+3 = P4n-f-2 + 2. В ЧЭСТНОСТИ, 1 + = Fm+5 является числом Фибоначчи. [См. JACM 27 (1980), 831-834. Немного лучшие цепочки получатся, если мы заменим <?2п+1 на (Q2„ и j/2n+i = У2п Л X2n+i), когда п является степенью 2, если заменить Рз и Pg на Qs и Qe и если затем заменить (Рд,Рю,Рп,Рп) на (Qg,Qio,Qii,Qi7).] Заметим, что это построение работает в общем случае, если заменить ‘Л’ любым ассоциативным оператором. В частности, последовательность префиксов xi ф • • ф Хк для 1 < к < п определяет преобразование бинарного кода Грея в целые числа в двоичной системе счисления 7.2.1.1—(10). 37. Случай т = 15, п = 16 проиллюстрирован на рисунке справа. (а) Пусть xt..j обозначает исходное значение xi/\ - • -/\Xj. Можно показать, что когда алгоритм устанавливает Хк <— Xj Л Хк, то предыдущее значение Хк было равно х^+i..fc. После шага S1 Хк равно х/(л)+1..л, где f(k) = к & (fc — 1) для 1 < к < т и f(m) = 0. После шага S2 Хк равно xi. k для 1 < к < т. (б) Стоимость S1 равна тп — 1, стоимость S2 равна тп — 1 — [1gтп], а сто- имость S3 равна п — т. Последняя задержка Хк равна [lg fcj + и к — 1 для 1 < к < т и равна [1g тп] + к — т для т < к < п. Так что максимальная задержка для {ал,... оказывается равной д[т) = т — 1 для тп < 4, д(т) = [lg mJ + [lg для т > 4. Мы имеем с(т,п) = т + п — 2 — [1gтп], d(m, п) = max(g(m), [1gтп] + п — т). Следовательно, с(т, п) + d(m, п) = 2п — 2 при п > т + д(т) — [1g тп].
634 ОТВЕТЫ К УПРАЖНЕНИЯМ 7.1.2 (в) Таблица значений показывает, что d(n) = [lg п] для п < 8, и d(n) = [lg(n — [lg nJ + 3)J + [lg f (n — [lg n\ + 3)J — 1 для n > 8. Формулируя иначе, мы имеем d(n) > d(n — 1) и n > 2 тогда и только тогда, когда п — 2к + к — 3 или 2к + 2к~1 + к — 3 для некоторого к > 1. Минимум с минимальной стоимостью получается для тп = п, когда п < 8; в противном случае он получается для тп = п — [lg | (n — [lg nJ + 3) J + 2 — [n = 2k + к — 3 для некоторого fc]. (г) Установим тп «— m(n, d), где m(n, d(n)) определено в предыдущем пункте, а при d > d(n) имеем m(n, d) = тп(п — 1, d — 1). [См. J. Algorithms 7 (1986), 185-201.] 38. (а) Сверху вниз Д(xi,хп) представляет собой элементарную симметричную функ- цию, называемую также пороговой функцией S>k(xi,... ,хп). (См. упр. 5.3.4-28, форму- лу 7.1.1-(90).) (б) После вычисления {Si,..., S„} за ~ 6п шагов, как в ответе к упр. 33, мы можем применить метод из упр. 37 для завершения вычислений за 2п дополнительных шагов. Но более интересно разработать булеву цепочку специально для вычисления 2т+1 по- роговых функций дь(.Х1, . . . , Хт) = [(ал . . . Хт)1 > fc] ДЛЯ 0 < fc < 2*”. Поскольку [(х'а:")2 > (l/V'h] = [(^'h > (l/')2+l] V ([(т')г > (p'h] А [(х")2 > G/'hD, построение “разделяй и власт- вуй’,’ аналогичное бинарному декодеру, решает эту задачу со стоимостью, не превышаю- щей 2t(m). Кроме того, если 2т-1 < п < 2т, стоимость п(п) вычисления {<д,..., дп} этим методом оказывается равной 2п + О(>/п), что вполне приемлемо при малом п: n = 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 п(п) = 0 1 2 4 7 7 8 12 15 17 19 19 20 21 22 27 32 34 36 36 Начав с контрольного суммирования, мы можем отсортировать п булевых значений за s(n) + и(п) ~ 7п шагов. Сортирующая сеть со стоимостью 2S(n) оказывается лучшей при п = 4, но проигрывает при п > 8. [См. 5.3.4—(11); D. Е. Muller and F. Р. Preparata, JACM 22 (1975), 195-201.] 39. [IEEE Transactions C-29 (1980), 737-738.] Тождество Mr+B(xi,..., xr, xr+i,... ,1г+,; yo, • ,y2’-+»-i) = M-(a:i,... ,xr\уо,... jj/^-i), где yj- = Vfc=o1(<^fc V^i+k) и dk является fc-м выходом з-к-2’ декодера, примененного к (xr+i,• • • ,Тг+я), показывает, что C(Mr+B) < C(Mr) + 2г+я + 2Г(28 - 1) + t(s), где t(s) является стоимостью (30) декодера. Глубина равна D(Mr+B) = max(Dx(Mr+B), Dy(Mr+B)), где Dx и Dy обозначают максимальные глубины переменных х и у, мы имеем DX(MT+B) < max.{Dx{Mr), 1 + s + [lg s] + Dy(Mr)) и Dy(Mr+s) < 1 + s + Dy(Mr). Беря r — [m/2] и s = [m/2], мы получаем C(Mm) < 2m+1 + O(2m^2), Dy(Mm) < m + 1 + [Igm] и Dx(Mm) < + [Igm]. 40. Мы можем, например, положить fnk(x) = V”=i~k(h(x) A rj+k-i(x)), где ( Xj, если j mod fc = 0, [ Xj A lj+i(x), если j mod fc 0, ( 1, если j mod fc = 0, [ Xj A Tj-i(x), если j mod fc^O, для 1 < j < n — (n mod fc); для к < j <n. Стоимость равна 4n — 3fc — 3[^J — [^тгЧ + 2 — (n mod fc). При малом n или к предпочтительнее рекурсивное решение. Заметим, что Упк(З') — 1 x„_fc+i А • • • А хк А У(2п—2fc)(n— fc) (Ti, • • • , Хп—к, Хк+1, • • • j Хп), ДЛЯ fc < П < 2fc; /L(n+fc)/2Jfc(Zl, • • • , 24(n+fc)/2J ) V /[("+*=- 1)/2J fc^K"-fc)/2J+l> • • i1"), для n > 2k.
7.1.2 ОТВЕТЫ К УПРАЖНЕНИЯМ 635 Можно показать, что стоимость этого решения равна п — 1 + |lg,71 при к < п < 2к, и асимптотически, при п —> оо, она находится между (т + аь — 1)п + О(кт) и (т + 2 — 2/ац)п + О(кт), где т = [lg fc] и 1 < аь = (fc + l)/2m < 2. Наилучшим решением является объединение этих методов; оптимальная стоимость пока что неизвестна. 41. Пусть с(т)—стоимость вычисления обоих значений, (1)2 + (у)2 и (х)2 + (у)2 + 1, с помощью метода условного суммирования, когда х и у имеют по п = 2т бит, и пусть с'(т)— стоимость более простой задачи вычисления (1)2 + (у) 2- Тогда c(m + 1) = 2с(т) + 6 • 2т + 2, с'(т + 1) = с(т) + с'(т) + 3 • 2"* + 1. (Бит Zn суммы стоит 1; но биты z* для п < к < 2п + 1 стоят 3, поскольку они имеют вид с? а&: bk, где с—бит переноса.) Если начать с п = 1 и с(0) = 3, с'(0) = 2, то решение имеет вид с(т) = (3m + 5)2m — 2, c'(m) = (3m + 2)2m — m. Однако усовершенствованное построение для случая п = 2 позволяет начать с с(1) = 11 и с'(1) — 7; тогда решением является с(т) = (Зт + |)2т — 2, с'(т) = (Зт + |)2т — т + 1. В любом случае глубина равна 2т + 1. [См. J. Sklansky, IRE Transactions ЕС-9 (1960), 226-231.] 42. (а) Поскольку (x^ykCk) = Ш V (г^ Л сц), можно использовать (26) и индукцию. (б) Заметьте, что U%+1 = и* и Vfcfc+1 = зд; затем воспользуйтесь индукцией по j — г. [См. A. Weinberger and J. L. Smith, IRE Transactions EC-5 (1956), 65-73; R. P. Brent and H. T. Kung, IEEE Transactions C-31 (1982), 260-264.] (в) Сначала для I = 1, 2, ..., m — 1 и для 1 < к < n вычислите Ц* для всех h(l), кратных г, в диапазоне fcj > г > fc«+i, где fci = h(Z)[(fc — l)/h(Z)J обозначает наибольшее кратное h(l), меньшее fc. Например, когда I = 3 и к = 99, мы вычисляем Vg®9, Ve89 = V999 Л V886, Ию = Vee9 Л Vg808, ..., I499 = V729 Л Ve42; это префиксное вычисление с использованием значений V999, Vge6, Ию8, • • •, Ид2, которые были вычислены при I = 2. Применяя метод из упр. 36, шаг I добавляет не более I уровней к глубине и требует логических элементов общим числом (pi +р2 + • • +p2i)n/2l = О(21п). Тогда, вновь для I = 1, 2, ..., тп — 1 и для 1 < к < п, вычислим 11* для г = fc<+i с использованием “развернутой” формулы tfl+l = u£t V V (V/+h(I) Л ui+hW). мои Например, развернутая формула для Z = 3 и fc = 99 имеет вид иЦ = U% V (V99 л L&6) V (V898 Л Lie88) V (V8909 Л LI782°) V (V7929 Л UU). Каждое такое U* представляет собой объединение не более чем 21 членов, так что оно может быть вычислено с глубиной < I в дополнение к глубине каждого члена. Общая стоимость этой фазы для 1 < к < п равна (0 + 2 + 4 Ч--1- (21— 2))п/21 = О(21п). Общая стоимость для вычисления всех необходимых U и V равна, таким образом, 52IX11 O(2ln) = О(2тп). (Кроме того, величины Vo в действительности не нужны, так что мы экономим стоимость 52JX11 h(l)P2‘ логических элементов.) Например, когда m = (2,3,4,5), мы получаем булевы цепочки для сложения (2,8,64,1024)-битовых чисел соот- ветственно с общими глубинами (3,7,11,16) и стоимостями (7,64,1254,48470). [Это построение принадлежит В. М. Храпченко, Проблемы кибернетики 19 (1967), 107-122, который также показал, как комбинировать его с другими методами так, чтобы общая стоимость составляла О(п) при глубине lg п + O(vllogn). Однако его комбиниро- ванный метод представляет чисто теоретический интерес, поскольку, чтобы глубина стала меньше 21g п, требуется п > 2et Еще один способ получения малой глубины с применением рекуррентности в (б) может основываться на числах Фибоначчи. Метод Фибоначчи вы- числяет переносы с глубиной log^ п + 0(1) ~ 1.441g п и стоимостью O(nlog п). Например,
636 ОТВЕТЫ К УПРАЖНЕНИЯМ 7.1.2 он дает цепочки для бинарного сложения со следующими характеристиками. п = 4 8 16 32 64 128 256 512 1024 Глубина 6 7 9 10 12 13 15 16 18 Стоимость 24 71 186 467 1125 2648 6102 13775 30861 См. D. Е. Knuth, ТЬе Stanford GraphBase (1994), 276-279. Чарльз Бэббидж (Charles Babbage) нашел изобретательное механическое решение ана- логичной задачи для сложения в десятичной системе счисления, заявляя, что его устрой- ство в состоянии суммировать числа произвольной точности за константное время; что- бы его решение работало, ему потребовались бы идеализированные жесткие компоненты с отсутствием зазоров. См. Н. Р. Babbage, Babbage’s Calculating Engines (1889), 334-335. Забавно, что эквивалентная идея хорошо работает с физическими транзисторами, хотя ее нельзя выразить через булевы цепочки; см. Р. М. Fenwick, Comp. J. 30 (1987), 77-79.] 43. (а) Пусть А = В = Q = {0,1} и до = 0. Определим с(д, а) = d(g, а) = д Л а. (б) Ключевая идея состоит в построении функций di(g) .. . dn-i(g), где di(g) = d(g, ai) и dj(g) = d(dj_i(g),aj). Другими словами, di = d<°i) и dj = dj-i о d(“j>, где d<“> является функцией, которая отображает g н-> d(g, а), и где о обозначает композицию функций. Каждая функция dj может быть закодирована в бинарном представлении, а о представляет собой ассоциативную операцию над этими бинарными представлениями. Следовательно, функции did2-..d„-i являются префиксами d(°i), d<“0 о d<“2>, ..., d<“i) о ••• о d(°n-i>; и QiQ? ...qn = godi(go)...dn-i(go). (в) Представим функцию /(g) с помощью ее таблицы истинности /о/i- Тогда компози- ция /о/icgogi представляет собой ho hi, где функции ho = /о? gi: go и hi = /i? gi: go являют- ся мультиплексорными функциями, которые могут быть вычислены со стоимостью 3 и глу- биной 2. (Объединенная стоимость C(hohi) равна лишь 5, но мы пытаемся оставить малой глубину.) Таблица истинности для d<°) представляет собой а0. Воспользовавшись упр. 36, мы, таким образом, сможем вычислить таблицы истинности diodnd2od2i.. • d(„_i)od(„_iji со стоимостью < брп-i < 24п и глубиной < 2[lg(n — 1)]; тогда hi = ai, и bj = д,- Л Oj = d(>-i)o A aj для j > 1. (Эти оценки стоимости достаточно консервативны; из-за нулей в исходных таблицах истинности d<°j) и из-за того, что многие промежуточные значения dji никогда не используются, возможны существенные упрощения. Например, когда п = 5, фактическая стоимость равна 10, а не 6pn~i 4- (п — 1) - 28; фактическая глубина равна 4, а не 2[lg(n — 1)] + 1 = 5. Заметим, что прямая цепочка bj = а} Л bj-i для 1 < j < п также решает задачу (а); она выигрывает в стоимости, но имеет глубину п — 1.) 44. Входные данные можно рассматривать как строку ToPo^iPi ••• Хп-1Уп-1, элементы которой принадлежат четырехбуквенному алфавиту А = {00,01,10,11}; имеются два со- стояния Q = {0,1}, представляющие возможный бит переноса, с до = 0; выходной алфавит имеет вид В = {0,1}; и мы имеем c(q,xy) = q ф х ф у, d(q,xy) = (qxy). Таким образом, в этом случае конечный преобразователь, по сути, описывается полным сумматором. Когда мы составляем отображения d(x*>, встречаются только три из четырех возмож- ных функций д. Их можно закодировать как и V (д Л и). Исходные функции d(xv) имеют и = х/\у, v = а: фу; а композиция (uv)o(u'v') представляет собой u"v", где и" = и' V(у' Ли) и v" = v Л v'. Например, когда п = 4, цепочка имеет следующий вид с использованием обозначений из упр. 42: U*+1 = хк Л ук, Vk+1 = хк ф ук, для 0 < к < 4; Uq = U? V (Ц2 Л Uq), U$ = V (V34 Л и!), v24 = V23 Л V34; U% = rf V (V23 Л Ul), = U% V (v24 A UlY, z0 = Vo1, zi = ГТоФЦ2, Z2 = 17оФ1/231 яз = I/оФкэ4, zi = ITq. Общая стоимость равна 20; максимальная глубина, 6, встречается в вычислении z3.
7.1.2 ОТВЕТЫ К УПРАЖНЕНИЯМ 637 В общем случае стоимость в обозначениях из упр. 36 будет равна 2п + Зрп, посколь- ку нам требуется 2п логических элементов для исходных и и v, затем Зрп логических элементов для вычисления префикса; еще п — 1 дополнительных логических элементов, необходимых для образования z3 для 0 < j < п, компенсируются тем фактом, что нам не нужно вычислять V® для 1 < j < п. Следовательно, общая стоимость равна 14 • 2m — 3Fm+5 + 3, что превосходит метод условного суммирования (который, однако, имеет глубину 2т + 1, а не 2т + 2): п = Стоимость цепочки условного суммирования Ладнера-Фишера 2 4 8 16 32 64 128 256 512 1024 7 25 74 197 492 1179 2746 6265 14072 31223 7 20 52 125 286 632 1363 2888 6040 12509 [Джордж Буль (George Boole) разработал свою алгебру для того, чтобы показать, что логика может быть понята через арифметику. В конечном итоге логика стала настолько понятной, что ситуация стала обратной: такие исследователи, как Шеннон (Shannon) и Цу- зе (Zuse), начали в 1930-х годах разрабатывать схемы для арифметических вычислений посредством логики, и с тех пор было открыто немало подходов к задаче параллельного сложения. Первые булевы цепочки со стоимостью О(п) и глубиной O(logn) были разра- ботаны Ю. П. Офманом, Доклады Академии наук СССР 145 (1962), 48-51. Его цепочки подобны построенным выше, но их глубина—около 4т.] 45. Этот аргумент действительно проще, но он недостаточно строг для доказательства требующегося результата. (Множество цепочек с нулевым ветвлением по выходу завышают простую оценку.) Доказательство, приведенное в тексте раздела, дано Д. Э. Сэведжем (J. Е. Savage) в его книге The Complexity of Computing (New York: Wiley, 1976), теоре- ма 3.4.1. 46. Когдаг = 2"/n+O(l), мы имеемln(22r+1(n+r—l)2r/(j—1)!) = rlnr+(l+ln4)r+O(n) = (2"/n)(nln2 —lnn+l + ln4) + O(n). Так что a (n) < (n/(4e))-2”/n+o<n/|o8n), что достаточно быстро стремится к нулю при п > 4е. (В действительности (32) дает а(11) < 7.6х 107, а(12) < 4.2х 10“6, а(13) < 1.2х 10-38.) 47. Ограничим перестановки (г — тп)! случаями, где in = i для 1 < i < п, a (n+r+1—&)тг представляет собой fc-й выход. Тогда мы получим (г — т)1с(т,п,г) < 22г+1(п+г—1)2г вместо (32). Следовательно, как в упр. 46, почти все такие функции имеют стоимость, превосходящую 2пт/(п + Igm) при т = О(2"/п2). 48. (а) Не удивительно, что эта нижняя граница С(п) достаточно грубая при малых п: п = 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 r(n) = 1 1 2 3 5 9 16 29 54 99 184 343 639 1196 2246 4229 (б) Метод раскрутки (см. Concrete Mathematics §9.4) дает ,(„) Л(Н >^-2-1^2 +о/^1 п \ п \ п/ / / 49. Количество нормальных булевых функций, которые могут быть представлены форму- лой длиной < г, не превышает 5гпг+1дг, где дг — количество ориентированных бинарных деревьев с г внутренними узлами. Положим в этой формуле г = 2n/lgn — 2n+2/(lgn)2 и разделим на 22”-1, чтобы получить верхнюю границу доли функций, у которых L(f) < г. Результат быстро стремится к нулю согласно упр. 2.3.4.4-7, поскольку он представляет собой О((5а/16)2"/|в”), где а и 2.483. [Д. Риордан (J. Riordan) и К. Э. Шеннон (С. Е. Shannon) получили аналогичную нижнюю границу для последовательно-параллельных коммутируемых сетей в J. Math, and Physics 21 (1942), 83-93; такие сети эквивалентны формулам, в которых используются
638 ОТВЕТЫ К УПРАЖНЕНИЯМ 7.1.2 только канализирующие операторы. Р. Е. Кричевский получил более общие результаты в Проблемы кибернетики 2 (1959), 123-138, а О. Б. Лупанов дал асимптотическую верхнюю границу в Проблемы кибернетики 3 (1960), 61-80.] 50. (а) Если воспользоваться обозначениями подкубов, как в упр. 7.1.1-30, то простыми импликантами являются 00001*, (0001*1), 0100*1, 0111*1, 1010*1, 101*11, 00*011, 00*101, (01*111), 11*101, (0*1101), (1*0101), 1*1011, 0*0*11, *00101, (*01011), (*11101), где подкубы в скобках в кратчайшей дизъюнктивной нормальной форме пропущены, (б) Аналогич- но простые дизъюнкты и кратчайшая конъюнктивная нормальная форма задаются как 00111*, 01010*, 10110*, 0110**, 00*00*, 11*00*, 11*11*, (0*100*), (1*00**), 1*0*1*, (1****0), *0000*, (*1100*), *1***0, **1**0, ***1*0 и (****00). (Таким образом, конъюнктивная нормальная форма имеет вид (X1VX2VX3VX4VX5) Л (X1VX2VX3VX4VX5) Л - • • Л (x4Vxe).) 51. / = ([xsxe 6 {01}] Л [(xi 12X3X4)2 € {1,3,4,7,9,10,13,15}]) V ([хвХб 6 {10,11}] Л [Х1Х2Х3Х4 = 0000]) V ([хвхе G {11}] Л [(2:1X22:32:4)2 6 {1,2,4,5,7,10,11,14}]). 52. Результаты для малых п существенно отличаются от асимптотических: п k 1 (38) п к 1 (38) п к 1 (38) п к 1 (38) 5 2 2 39 8 3 2 175 11 4 4 803 14 5 5 4045 6 2 2 67 9 3 2 279 12 4 3 1329 15 5 5 7141 7 2 1 109 10 4 4 471 13 5 6 2355 16 5 4 12431 (Эти верхние границы достаточно слабы при малых п. Например, мы знаем, что С(п) - (0,1,4,7,12), когда п = (1,2,3,4,5); а 7.1.1-(16) дает С(п+1) < 2С(п)+2, так что С(6) < 26, С(7) < 54, и т. д.) 53. Сначала заметим, что 2fc/Z < п — 31gn, следовательно, mt < n — 31g п +1 и 2т< = О(2п/п3). Также I = О(п) и t(n—k) = О(2”/п2). Так что (38) сводится к l-2n~k +О(2п/п2) = 27(n-31gn) + O(27n2). 54. Эвристика жадных отпечатков дает цепочку длиной 14: хб = xi ф хз, Х6 = Х2 ф Хз, Х10 = Х4 Л ХБ, Хц = Х4 ф Хб, /3 = Х15 = Х8 Л Хд, /4 = Х16 - Х4 Л Хз, XT = Х1 Л Х2, Х12 = Хб Л Хц, fs = Хп = Хт Л Хд, Х8 = Х1 Л Хб, /1 = Х13 = Хт Л Х12, /в = a:ig = хе Л хю хд = Х4 Л хб, /2 = Х14 = Хб Л Хю, Метод первоначального вычисления минитермов соответствует цепочке длиной 22, после того как мы удалили никогда не использующиеся шаги: 2:5 = Х1 Л Х2, 2J13 = 2:5 Л Хю, Х20 = Хз Л Хц, хв = Х1 Л Х2, Х14 = Х5 Л Хц, /в = 2:21 = a:is V Xie Хт = Х1 Л Х2, 2:15 = Хб Л Хд, /1 = Х22 = 2:13 V Х21 Хз = Х1 Л Х2, 2J16 = Хб Л Хц, /2 = 2:23 = 2:12 V Х20 Хд = ХЗ Л Х4, Х1Т = Хт Л Хд, Х24 — Х14 V Х16 Х10 = 2:3 Л Х4, Х18 = Х-1 Л хц, /3 = ®25 = Х24 V Xig а:ц = хз Х12 = Хб Л Х4, Л Хд, fs = £19 = Х8 Л Хд, /4 = 2326 = Tit v Х20 (Закон дистрибутивности мог бы заменить вычисление хи, хщ и Х24 двумя шагами.) Кстати, три функции в ответе к упр. 51 могут быть вычислены всего за десять шагов: 215 = 12 V Х4, /з = 19 = Х6 0 Х8, Х12 = Х2 ф Хз, хе = xi Л хб, xio = xi ф хе, Х13 = хю Л Х12, хт = Х2 Л Х4, /2 = а:ц = хд V хю, /1 = хц = Х4 ф Х13. Х8 = Хз Л Хт,
7.1.2 ОТВЕТЫ К УПРАЖНЕНИЯМ 639 55. Оптимальные двухуровневые представления в дизъюнктивной нормальной форме и конъюнктивной нормальной форме в ответе к упр. 50 имеют стоимости 53 и 43 соот- ветственно. Формула (37) имеет стоимость 29, будучи оптимизированной, как в упр. 54. Альтернативное решение в упр. 51 имеет стоимость всего лишь 17. Но каталог оптималь- ных цепочек для пяти переменных предлагает для данной функции от шести переменных следующую цепочку: Ху = Xl Л Х2, хв = хз ф Ху, Хд = Х2 Л Хв, Хю =®1 Ф Хд, хц = xs Л 1ю, Х12 = Xs V 110, Х13 = Х4 Л ХЦ, Х14 — Хв Л Х12, Х15 = Х13 Ф £14, Х16 = Xs Л Х10, Х17 = Хз Л Х16, Х18 = Х4 Л Х17, xig = хв Л Xie, хго = xie V xig Существует ли лучшее решение? 56. Если нас интересуют не более двух значений, то функция представляет собой либо константу, либо Xj или Xj. 57. Таблицы истинности для значений от xs до xis в шестнадцатеричной записи представ- ляют собой соответственно Offf, Зссс, ЗОсО, 75d5, 4919, 7000, 0606, 4808, 2000, 5d5d, Зесе. Так что мы получаем lowюнноо1101^5, 11101111 [Кори Пловер (Corey Plover), полагающий, что было бы лучше иметь решение, в котором не цифры никогда не принимают вид цифр, открыл цепочку длиной 12 (с не жадным выбором Ху) Xs = Xl ф Х2, Хв = Хз Л Х4, Ху = XI ф Хв, Хв = Х4 V Ху, Xg = Х2 ф Хз, д = £10 = ху V Хд, d = 1ц = хв Ф Но, а = хю = хз Л хц, Ь = Нз = Х2 Л Хц, с = Х14 = Ху Л Хд, ё = ®15 = Х4 v Х12, f —— Х16 —“ Xs хв, при которой а, ..., д имеют таблицы истинности b7ff, f9f0, dfe3, b6df, a2aa, 8ff2, 3efd и 1010 1011 н+Д, 1100 Д , 1101 /, 1110 1111^5 Он также показал, что все ll-шаговые решения (44) отображают не цифры на один из вари- антов (0,7,4,5, Б, 7), (0,7, Б, 1,Б, □), (0,7, Б, 1,С,5), (?, 3, Б, 7, Б, 7), (?, I, Б, 7,4,5) или (?, 4, Б, 7,4,5).] 58. Таблицы истинности всех функций со стоимостью 7 с ровно восемью единицами в их таблицах истинности равны 0779, 169Ъ либо 179а. Комбинируя их всеми возможными спо- собами, получаем 9656 решений, различных относительно перестановок и/или дополнения {xi,X2,X3,X4}, так же, как и относительно перестановок и/или дополнения {/1,/г,/з,/4}. 59. Жадная эвристика на основе отпечатков дает следующую 17-шаговую цепочку: Xs = Х2 ф Хз, £11 = Х2 V Ху, Xiy — Хв Хв, Хв = Xl ф Хд, £12 = Х2 Л Хе, fl = Х18 = In Ф Я17 Ху = Xl ф Хз, Х13 = Хз Л Х4, /2 = Х19 = Хю Л Х14 Хв = X4V Хв, Х14 = Х4 Л Xs, /з = Х20 = Хд ф Х16, Хд = Хв Л Хв, Х15 = Xs Л Хю, /4 = Х21 = Х12 Ф Я15 Хю = Ху V Хд, Хю = Х2 А Х13, Все исходные функции имеют большие отпечатки, так что получить C(/i/2/3/4) = 28 мы не можем; но, вероятно, может существовать немного более трудный S-блок. 60. Одним из способов является щ = Х1 ф yi, «2 = 12® У2, vi = У2 Ф Ul, V2 = yi Ф 112, Zl = 1>1 Л Й2, Z2 = г>2 Л й1.
640 ОТВЕТЫ К УПРАЖНЕНИЯМ 7.1.2 61. Приведенное решение Дэвида Стивенсона (David Stevenson) с 17 логическими элемен- тами обобщается на 8m + 1 логических элементов для суммирования по модулю 2m + 1: ио = хо Л уо, vo = хо® уо, ui = xi Л j/i, vi = xi ф j/i, ti = i>i Л ио, tz = «1 ф ио, ег = iii V ti; U2 = Х2 Л У2, ta = Х2 V У2, t4 = £з V С2‘, tj = 1г V vo, to = ta Л ti, tr = te V U2‘, ta = tr Л vo, Zo = tr ® vo, zi = t2 ® ta', Z2 = ti® tr- (Обратите внимание, что (x2XiXo)2 + (1/21/11/0)2 = (u2tit2Vo)a — 4[x = у = 4]. Гильберт Ли (Gilbert Lee) нашел другое 17-шаговое решение, если входные данные представлены значениями ООО, 001, 011, 101 и 111.) 62. Имеется (^у) 22 с таких функций, не более с(п, т) из которых имеют стоимость < г. Так что мы можем рассуждать, как в упр. 46, чтобы из (32) заключить, что доля со стоимостью < г = [2nc/nJ не превышает 22г+1-2"с(п + г — 1)2г/(т — 1)! = 2-г1вп+о^г\ 63. [Проблемы кибернетики 21 (1969), 215-226.] Поместим таблицу истинности в массив 2* х 2п~к, как в методе Лупанова, и допустим, что в столбце j для 0 < j < 2п~к имеет- ся Cj определенных значений. Разобьем этот столбец на [cj/mJ подстолбцов, каждый из которых содержит m определенных значений, плюс (возможно, пустой) подстолбец внизу, который содержит менее m из них. Указание говорит нам, что не более 2m+fc векторов столбцов достаточно для соответствия нулям и единицам каждого подстолбца с определенной верхней строкой io и нижней строкой й. Таким образом, с помощью O(m2m+3fc) операций можно построить O(2m+3fc) функций gt(xi,... ,Xk) из минитермов из {ti, ..., а;*}, так что каждый подстолбец соответствует некоторому типу t. А для каждого типа t можно построить функции ht(xk+i, ,хп) из минитермов из {а;*+1,... ,а;п}, опре- деляющих столбцы, которые соответствуют t; соответствующая стоимость не превышает 52j([cj/mJ +1) < 2nc/m+2n~k. Наконец f = ^t(gt^ht) требует O(2m+3fc) дополнительных шагов. Выбор к = [2 lg nJ и m = [n — 91g nJ делает общую стоимость не превышающей (2nc/n)(l + 9n-11g п + О(п-1)). Конечно, мы должны доказать указание, что сделано Э. И. Нечипоруком (Доклады Академии наук СССР 163 (1965), 40-42]. В действительности достаточно 2m(l + [fcln2]) векторов (см. S. К. Stein, J. Combinatorial Theory А16 (1974), 391-397): если мы выберем q = 2m [fc In 2] векторов случайным образом, не обязательно различных, то ожидаемое ко- личество несоприкасающихся подкубов будет равно (Д)2т(1 — 2-"1)3 * * * * * 9 < (Д)2те“«2-"' < 2т. (Явное построение было бы более красивым.) Существенное обобщение можно найти в работе N. Pippenger, Mathematical Systems Theory 10 (1977), 129-167. 64. Эта игра—не что иное, как игра в крестики-нулики, если мы перенумеруем клетки , как в древнем китайском магическом квадрате. [Верлекамп (Berlekamp), Конвей (Conway) и Гай (Guy) использовали эту схему нумерации, чтобы представить полный анализ игры в крестики-нулики в своей книге Winning Ways 3 (2003), 732-736.] 65. Одним из решений является замена “обороняющихся” ходов dj “атакующими” хо- дами Oj и “контратакующими” ходами с, и включение их только для угловых клеток j G {1,3,9,7}. Пусть j • k = (jfc) mod 10; тогда 3 ’ 1 3 ‘ 2 j • 3 3 • 4 j • 5 j • 6 j 7 j • 8 j 9 дает нам другой способ взглянуть на диаграмму игры в крестики-нулики, когда j является углом, поскольку j _L 10. Точное определение dj и Cj в таком случае имеет вид dj = TTlj Л ((Xj.3 Л 0(j.8)(j S>) Л (Oj.4®Oj.e)) V (Xj.r Л /3(j.6)(j-9) Л (Oj.2®Oj.a)) V (mj.9 Л ((mj.a A Xj.2 Л (оу3фо5.в)) V (m,.e Л Xj.4 Л (о^-тфо^.а))))); Cj = dj Л (xj-в Л Oj-r) Л (xj-a А Oj-з) Л dj.g;
7.1.2 ОТВЕТЫ К УПРАЖНЕНИЯМ 641 здесь вместо (51) используется dj = mj Л 0(j-2)(j-3) Л /?0'-4)0-7). Мы также определяем и = (жт ф хз) ф (х-i ф Хд), V = (О1 ф оз) Ф (о? Ф Од), t = m2 Л те Л тз Л тд Л (« V v), если j = 5, если j Е {1,3,9,7}, если j Е {2,6,8,4}, для того, чтобы охватить несколько больше исключительных случаев. Наконец последо- вательность упорядоченных по рангу ходов dsdidsd^didzd^dsdAmsmimsmgmimzmemsmi в (53) заменяется последовательностью aiasagajcicscgcjzezizszgzjzizezgz^, и мы заменяем (dj Adj)\/ (т^ Л m'j) в (55) на (aj Л d') V (Cj Л ) V (ZjAz'j), когда j является угловой клеткой, а в противном случае просто на (z^AfJ). (Заметим, что эта машина должна ходить корректно из любой допустимой позиции, даже когда эти позиции не могут возникнуть после предыдущих ходов машины. Мы, по сути, разрешаем человеку играть до тех пор, пока он не попросит совета у машины. В противном случае были бы возможны существенные упрощения. Например, если X всегда ходит первым, можно было бы захватывать центральную клетку и убрать тем самым огромное количество будущих вариантов; при этом может получиться менее чем 8 х 6 х 4 х 2 = 384 партии. Даже если первым ходит О, имеется менее чем 9х7х5хЗ = 945 возможных сценариев. В действительности реальное количество различных партий с определенной здесь стратегией оказывается равным 76 + 457, из которых в 72 + 328 выигрывает машина, а в остальных случаях получается ничья.) 66. Булева цепочка в ответе к предыдущему упражнению выполняет поставленную перед ней задачу и делает корректные ходы из всех 4520 допустимых позиций, где коррект- ность, по сути, определена как наилучший ход в наихудшем случае. Но настоящий игрок в крестики-нулики поступает не так. Например, в позиции машина захватит центр, z^z, и О, вероятно, походит в угловую клетку. Но ход zjzjz или zjj: оставит О только два шанса избежать поражения. [См. Martin Gardner, Hexaflexagons and Other Mathematical Diversions, Chapter 4.] Кроме того, лучшим ходом в позиции наподобие Цф является [pjz, а не немедленная победа. Затем, если ответным ходом является |ф, выполняется ход Таким образом, вы все равно выигрываете, но без унизительного для противника “киндермата’.’ Наконец неверна сама концепция единственного “наилучшего хода’,’ поскольку хоро- ший игрок, как заметил Бэббидж (Babbage), в разных играх выбирает разные ходы. Можно решить, что программирование компьютера для игры в крестики-нулики, или разработка специальной схемы для машины, играющей в крестики-нулики, — простое дело. Это так и есть, если только ваша цель не заключается в создании робота, который выигрывал бы максимальное количество игр у неопытного игрока. — МАРТИН ГАРДНЕР (MARTIN GARDNER), Математические головоломки и развлечения (The Scientific American Book of Mathematical Puzzles & Diversions) (1959) 67. Наилучшее известное в настоящее время решение принадлежит Дэвиду Стивенсону (David Stevenson). Оно было получено им в 2010 году и использует всего 818 логических элементов (472 И, 327 ИЛИ, 13 НИ, 6 НО-НЕ); см. подробную информацию по адресу http: //ww-cs-f acuity. Stanford. edu/~knuth/818-gate-solution. После обработки таких ходов, как Wj и bj, и искусной оптимизации безразличных значений Стивенсон, по сути, выполняет ИЛИ для около 200 специальных позиций (таких, как z|zj|), 21 Зак. 3331
642 ОТВЕТЫ К УПРАЖНЕНИЯМ 7.1.2 которые делают с = 1, около 200 других (таких, как ^ф:), которые делают s = 1, и около 50 (таких, как которые делают т = 1; затем он экономит логические элементы путем поиска общих подвыражений среди И, которые определяют специальные позиции, а также с помощью закона дистрибутивности и т. п. [Это упражнение вызвано дискуссией в книге John Wakerly Digital Design (Prentice- Hall, 3rd edition, 2000), §6.2.7. Кстати, Бэббидж (Babbage) планировал выбирать среди fc возможных ходов с помощью значения N mod fc, где N — количество игр, выигранных к настоящему моменту; он не понимал, что последовательные ходы будут сильно коррели- рованы, пока не изменится N. Гораздо лучше положить N равным количеству сделанных к этому времени ходов.] 68. Нет. Этот метод дает “однородную” цепочку с ясной структурой, но ее стоимость равна П(п2п). Существует схема с примерно 2п/п логическими элементами, построенная в соответствии с теоремой L, однако ее гораздо сложнее создать. (Кстати, С(тгв) = 10.) 69. (а) Можно проверить этот результат, например, испытав все 64 случая. (б) Если хт лежит в той же строке или столбце, что и Xi, а также в той же строке или столбце, что и Xj, мы имеем ащ = aioi = «oil = 0, так что пары являются хорошими. В противном случае имеются три существенно разных возможности, и все они плохие: если = (1,2,4), то aioi = 0, аюо = 2:52:9 ©2:52:8, aoii = 2:9; если (i,j,т) = (1,2,6), то «010 = 2:42:9, аои = 2:7, cioo = 2:52:9, «101 = 2:9; если (г, j,m) = (1,5,9), то am = 1, оно = 0, ощо = 2:32:7. 70. (а) Х1/\((хъ/\хд)®(хе,/\Хб)) фX2l\{{xe/\xi)@(x4/\xg)) ф хзЛ((х4Лхз)®(хзЛх7)). (б) Х1Л((хьЛхе)У (хвЛхв)) V 2:2 А ((2^2:7) V (2^2:9)) V хзЛ((х4Лх&у/(а^Ла:?)). (в) Пусть У1 = Х1ЛХз/\Хв, У2 = Х1ЛХв/\Х8, уз = Х2/\ХвЛХ7, У4 = Х2Л.Х4/\Хд, уз = Х3Л.Х4Л хз, ув = хзЛхзЛхт. Функция f(yi,..., ре) = [pi + У2 + Уз > У4 + Уз + ре] может быть вычис- лена пятнадцатью последующими шагами с двумя полными сумматорами и компаратором; однако имеется и 14-шаговое решение. Пусть zi = (pi ф рг) Ф рз, z2 = (pi Ф рг) V (pi ф р3), Z3 = (Р4 Ф Ps) Ф Ре, Z4 = (Р4 Ф Рб) V (р4 ф Ре). Тогда f = (Z1 ф (z2 Л (24® (zi Vz3)))) A (Z3VZ4). Кроме того, Р1Р2Р3 = 111 Р4РбРе = 111; так что имеются безразличные значения, приводящие к ll-шаговому решению: f = ((ziAzs)Vz4) Л Z2- Общая стоимость равна 12 + 11 = 23. (Автору неизвестен способ, который позволил бы компьютеру найти такую эффек- тивную цепочку за приемлемое время по одной лишь таблице истинности /. Но, вероятно, лучшая цепочка все же имеется.) 71. (a) Р(р) = 1 — 12р2 + 24р3 + 12р4 — 96р® + 144рв — 96р7 + 24р8, что равно || + |е2 — Зе4 - 24ев + 24е8 при р = | + е. (б) Имеется N = 2П-3 множеств из восьми значений (/о, - • • ,/т), каждое из которых дает хорошие пары с вероятностью Р(р). Так что ответ равен 1 — P(p)N. (в) Вероятность того, что удачными окажутся ровно г множеств, равна (^)Р(р)г(1 — P(p))N-r; а в подобном случае t испытаний будут находить хорошие пары с вероятностью (r/Ny. Следовательно, ответ имеет вид 1—(^)P(p)r(l—P(p))JV-r(r/N)t = 1—Р(р)*+ O(t2/N). (Г) £" о (^)P(p)r(l - P(p))N-r T^(r/NY = (1 - Р(р)‘)/(1 - Р(р)) + O(t3/N). 72. Вероятность в ответе к упр. 71, (а) становится равной Р(р) + (72р3 — 264р4 + 432р® — 336рв + 96р7)г + (60р2 — 240р3 + 456р4 — 432р® + 144р6)г2 + (—48р2 + 144р3 — 216р4 + 96р®)г3 + (—36р2 + 24р3 + 12р4)г4 + (48р2 — 24р3)г® — 12р2г6. Если р = q — (1 — г)/2, то это значение равно (11 + 48г + 36г2 — 144г3 — 30т4 + 336г® — 348гв + 144г7 — 21г8)/32; например, при г = 1/2 это 7739/8192 и 0.94.
7.1.2 ОТВЕТЫ К УПРАЖНЕНИЯМ 643 73. Рассмотрим дизъюнкты Хорна 1Л2=>3, 1ЛЗ=>4, ..., 1Л(п — 1)=>п, 1Лп=>2 и iAj=>l для 1 < г < j < п. Предположим, что в разложении \Z\ > 1, и пусть г представляет собой минимум, такой, что xt 6 Z. Пусть также j представляет собой минимум, такой, что j > г и Xj 6 Z. Мы не можем иметь г > 1, поскольку в этом случае iAj=>l. Таким образом, г = 1, и Xj € Z для 2 < j < п. 74. Предположим, что мы знаем, что не существует нетривиального разложения с xi 6 Z или • • • или Xi-i G Z; изначально г = 1. Мы надеемся исключить и xt € Z путем искусного выбора j и т. Дизъюнкты Хорна zAj=>m сводятся к дизъюнктам Крома j=>m при принятии г. Так что, по сути, мы хотим использовать поиск в глубину Таржана (Tarjan) для сильно связных компонентов в ориентированном графе с дугами j=>m, которые могут как существовать, так и отсутствовать. При исследовании от вершины j сначала испытаем т = 1, ..., т = г — 1; если любая такая импликация iAj=>m успешна, мы можем удалить j и всех его предшественников из ориентированного графа для г. В противном случае проверяем j=>m для всех та- ких удаленных вершин т. В противном случае проверяем неисследованные вершины т. В противном случае проверяем вершины т, которые уже были просмотрены, оказывая предпочтение тем, которые находятся ближе к корню дерева поиска вглубь. В примере f(x) = (det X) mod 2 мы поочередно находим 1Л2^$3, 1Л2=>4, 1Л4=>3, 1ЛЗ=>5,1Л5=>6, 1Л6=>7, 1Л7=>8,1Л8=>9, 1Л9=>2 (теперь г Ч— 2); 2ЛЗ^-1, 2ЛЗ=>4, 2Л4^-1, 2Л4^$5, 2Л4=>6, 2Л6=>1 (теперь 3, 4 и 6 удалены из ориентированного графа для 2), 2Л5=>1 (удалено и 5), 2Л7^-1, 2Л7=>3 (удалено 7), 2Л8=>1, 2Л9=>1 (теперь г Ч— 3); ЗЛ4^-1, ЗЛ4=>2, ЗЛ5=>1, и т. д. 75. Эта функция равна 1 только в двух точках, являющихся дополнениями одна для другой. Так что эта функция неразложима; пары (58) никогда не могут быть плохими при п > 3. Каждое разбиение (У, Z) будет, таким образом, кандидатом на разложение. Аналогично, если f является разложимой по отношению к (У, Z), то неразложимая функция f(x)@So,n(x) будет действовать при этих проверках, по сути, как /. (В программе проверки разложимости общего назначения, вероятно, должен присутствовать метод для работы с почти разложимыми функциями.) 76. (а) Пусть ai = [г > /] для 0 < I < 2т. Как было замечено в ответе к упр. 38, (б), стоимость < 2t(m); и действительно, стоимость может быть снижена до 2m+1 — 2m — 2 при глубине G(m). Кроме того, функция [г <у] = (ii Л ji) V ((zi = у\) Л [га ... im < ji • • • Jm]) может быть вычислена с помощью 4m — 3 логических элементов. После вычисления х ф у каждое zi стоит 2m+1 + 1 = О(п). (б) Здесь стоимость не превышает С(®о) + • • + С(рат) < (2т + 1)(22”7(2т — О(т))) согласно теореме L, поскольку каждое gi представляет собой функцию от 2т входных данных. (в) Если г < j, мы имеем zi = х для I < г и zi = у для I > г; следовательно, fi(x) = со Ф • Ф Ci и fj (у) = Cj+i ф • • • ф cam - Если i > j, мы имеем zi = у для I < г и zi = х для I > г; следовательно, fj(y) = со Ф • • • Ф Cj и fi(x) = c,+i ф • • • ф cam. (г) Функции bi = [у < Z] могут быть вычислены для 0 < I < 2т за О(2т) шагов, как в п. (а). Так что мы можем вычислить F из (со,... , cam) с О(2т) дополнительными логическими элементами. Таким образом, шаг (б) доминирует в стоимости при больших т. (д) од = 1, ai = г, аа = 0; Ьо = 0, bi = j, bi = 1; d = [г < j] = г V у; mi = ai ф d, zio = Ю Ф (mi Л (хо ® Уо)), zn = xi Ф (mi Л (и Ф yi)) для I = 0, 1, 2; co = zoi; ci = zio A zu; сг = zao V zai; c't = ci A (d = ai), c" = ci A (d = bi) д,пя I = 0, 1, 2; и наконец F = (ci ф ci ф ci) V (eg ф с'/ ф ci').
644 ОТВЕТЫ К УПРАЖНЕНИЯМ 7.1.2 Себестоимость (29 после очевидных упрощений), конечно, вопиюще велика для тако- го малого примера. Удивит это вас или нет, но современный оптимизатор оказывается способным сократить эту цепочку всего до 5 логических элементов. [Этот результат является частным случаем более общих теорем из Математические заметки 15 (1974), 937-944; London Math. Soc. Lecture Note Series 169 (1992), 165-173.] 77. Пусть задана такая кратчайшая цепочка для /п или /п. Пусть Ui = {г | I = j(i) или I = fc(z)}— количество “использований” xi ипустыц = |С7||. Пусть t, = 1, если ж, = х^Ухк^у, в противном случае t, = 0. Мы покажем, что имеется цепочка длиной < г — 4, которая вычисляет либо /n-i, либо /п-i, воспользовавшись следующей идеей. Если переменной хт присвоено значение 0 или 1 для любого гп, мы можем получить цепочку для /п-1 или fn-i, удаляя все шаги Um и соответствующим образом изменяя другие шаги. Кроме того, если Xi = Xj(i) о xk(i) и если известно, что либо яд,), либо xk(i) равно t, при значении хт, установленном равным 0 или 1, то мы можем также удалить шаги Ui. (На протяжении нашего решения буква тп будет означать индекс в диапазоне 1 < тп < п.) Случай 1. Um = 1 для некоторого тп. Этот случай не может осуществиться в кратчай- шей цепочке. Если единственное использование хт представляет собой xt = xm, устране- ние этого шага изменит /п /п; в противном случае мы могли бы установить значения xi, ..., xm-i, дстп-ьх, ..., хп, чтобы сделать Xi независимым от хт, что противоречит хп+г = /п или /п. Таким образом, каждая переменная должна быть использована как минимум дважды. Случай 2. xi = хт для некоторых I и т, где um > 1- Тогда Xi = xioxk для некоторых г и fc, и мы можем установить хт <— tt, чтобы сделать xt независимым от хк. Тогда удаление шагов Um, Ui и Ui приведет к удалению как минимум 4 шагов, за исключением случая, когда ui = Ui = 1 и Um = 2, и Xj = Хт ° ху но в этом случае мы можем также удалить Uj. Случай 3. Um > 3 для некоторого т, но случай 2 не осуществляется. Если i,j, к G Um и г < j < к, установим хт +-tkn удалим шаги г, j, к, Uk. Случай 4- ui = uz = • • • = ип = 2, но случай 2 не осуществляется. Можно считать, что первым шагом является Тп-н = х\ о Х2 и что xi = xi о хк для некоторого к < I. Случай 4-1. к > п. Тогда fc > п + 1. Если ик = 1, установим xi <— tt и удалим шаги n+1, fc, I, Ui. В противном случае установим Х2 <— tn+i; это обеспечит хк = ti, и мы можем удалить п + 1, к, I, Uk. Случай 4 -2. zi = zi о хт-Тогда мы должны иметь т = 2; если т > 2, мы могли бы установить Х2 <- tn+i, Хт <- ti и сделать хп+г независимым от х±. Следовательно, мы можем считать, что жп-ы = xi Л Х2, х„+2 = xi V Х2. Установка xi Ч— 0 позволяет нам удалить Ui и t/n+i; установка х± <— 1 позволяет нам удалить Ui и Un+2- Таким образом мы действуем, пока не получаем itn+i = ип+2 = 1. Если хр = in+i, установим х± Ч— 0 и удалим п + 1, п + 2, р, Up\ если xq = хп+2, установим xi Ч— 1 и удалим п + 1, п + 2, q, Uq. В противном случае хр = хп+1 ° хи и xq = Хп+2 ° xv, где хи и xv не зависят от xi или Х2- Но это невозможно; это позволило бы нам установить хз, ..., хп, чтобы сделать хи = tp, а затем Х2 <— 1, чтобы сделать хп+г независимым от ti. [Проблемы кибернетики 23 (1970), 83-101; 28 (1974), 4. С помощью аналогично- го доказательства Редькин показал, что кратчайшие И-ИЛИ-НЕ-цепочки для функций ‘xi... хп < yi... Уп и ‘xj.... хп = yi.. • Уп имеют длины 5п — 3 и 5п — 1 соответственно.] 78. [SICOMP 6 (1977), 427-430.] Будем говорить, что ук активно, если k G S. Мы можем считать, что цепочка нормальная и что ||S|| > 1; доказательство при этом подобно доказательству Редькина из ответа к упр. 77. Случай 1. Некоторое активное ук используется более одного раза. Установка ук <— 0 экономит как минимум два шага и дает цепочку для функции с ||S|| — 1 активных значений.
7.1.2 ОТВЕТЫ К УПРАЖНЕНИЯМ 645 Случай 2. Некоторое активное у к появляется только в логическом элементе И. Уста- новка ук 4— 0 удаляет как минимум два шага, если только это И не является конечным шагом. Но оно не может быть конечным шагом, поскольку ук = 0 делает результат не зависящим от каждого другого активного yj. Случай 3. Подобен случаю 2, но с логическим элементом ИЛИ, или НЕ-НО, или НО- НЕ. Установка ук <— с для некоторой подходящей константы с дает требуемый эффект. Случай 4- Подобен случаю 2, но с логическим элементом ЛИБО. Этот логический элемент не может быть последним, поскольку результат должен быть независим от ук, когда (ti ... хт)2 адресует другое активное значение yj. Так что мы можем устранить два шага, установив значение ук равным функции, определяемой другим входом логического элемента ЛИБО. 79. (а) Предположим, что стоимость равна г < 2п — 2; тогда п > 1. Если каждая перемен- ная используется ровно один раз, два листа должны быть напарниками. Следовательно, некоторые переменные используются как минимум дважды. Обрезка этих ветвей дает цепочку стоимостью < г - 2 от п - 1 переменных, не имеющую напарников. (Кстати, стоимость составляет не менее 2п — 1, если каждая переменная используется как минимум два раза, поскольку не менее 2п использований переменных должны быть связаны в цепочке вместе.) (б) Заметим, что So,n = Au_v(w = i>), когда ребра и — v образуют свободное дерево на множестве {ац,... ,хп}. Так что имеется много способов получить стоимость 2п — 3. Любая цепочка со стоимостью г < 2п — 3 должна иметь п > 2 и должна содер- жать напарников и и г>. С помощью переименования и возможного дополнения проме- жуточных результатов можно считать, что и = 1, v = 2 и что f(xi,... ,хп) = g(xi о h(x3,..., хп), хз,.. -, хп), где о представляет собой Л или ф. Случай 1. о представляет собой И. Мы должны иметь Л(0,..., 0) = Л(1,...,1) = 1, поскольку в противном случае f(xi, х3,у, ,у) не будет зависеть от ц. Следовательно, f(xi,... ,Хп) = Л(а;з, • • ,хп) Л g(xi,x3,... ,хп) может быть вычислена с помощью цепочки той же стоимости, что и цепочка, в которой 1 и 2 являются напарниками и в которой путь между ними короче. Случай 2. о представляет собой ЛИБО. Тогда f = /о V fi, где fo(xi, , хп) = (xi = h(x3, • ,Хп))Лд(0,Х2,- •. ,хп) и fi(xi,... ,хп) = (xi®h(x3,.. • ,Хп))Лд(1,Х2,. • • ,хп). Но f = So,n имеет только две простые импликанты; так что имеется только четыре возможности. Случай 2, a. fo = f. Тогда мы можем заменить xi ф h на 0, чтобы получить цепочку СТОИМОСТЬЮ < Г - 2 ДЛЯ фуНКЦИИ д{<Л,Х2, ,Хп) = So,n-l(X2, ,хп). Случай 2,6. fi = f. Аналогичен случаю 2, а. Случай 2, в. fo(х) = жх Л • • • Л хп и fi(x) = Ti Л • • • Л х„. В этом случае мы должны иметь д(0,х3, - ., хп) = х3 Л • • • Л хп и д(1, Х2,...,хп) = Х2 Л • • • Л хп. Замена h на 1 дает, таким образом, цепочку, которая вычисляет f за < г шагов. Случай 2, г. fo(x) = ii Л • - - Л хп и fi(x) = xi Л • • • Л хп. Аналогичен случаю 2,в. Многократное применение этих приведений приведет к противоречию. Аналогично можно показать, что C(SoSn) = 2п — 2. (Theoretical Computer Science 1 (1976), 289-295.] 80. (а) Вез потери общности ао = 0, а цепочка является нормальной. Определим Ui и ui так, как это было сделано в ответе к упр. 77. Исходя из соображений симметрии мы можем считать, что ui = max(ui,..., ип). Мы должны иметь ui > 2. Если гц = 1, мы можем далее считать, что a?n+i = xi о Х2‘, следовательно, две из трех функций 8а(0,0,а;з,... ,хп) = SQ», 8а(0,1,а;з, ,хп) = S'a', Sa(l, 1, х3,..., хп) = S"a должны быть равны. Но тогда Sa должна быть функцией четности или S/a’ должно быть константой. Следовательно, установка xi = 0 позволяет нам убрать логические элементы Ui, давая цепочку для Sa, с как минимум на 2 меньшим количеством логических элементов. Отсюда
646 ОТВЕТЫ К УПРАЖНЕНИЯМ 7.1.2 следует, что C(Sa) > C(Sai) + 2. Аналогично установка xi = 1 доказывает, что C(Sa) > C(S,a) + 2. При дальнейшем изучении ситуации возникают три случая. Случай 1. ui > 3. Установка xi = 0 доказывает, что C(Sa) > C(Sa>) + 3. Случай 2. Ui = {г, у} и оператор о3- канализирующий (а именно И, НО-НЕ, НЕ-НО или ИЛИ). Установка переменной a?i равной соответствующей константе обеспечивает значение Xj и позволяет нам устранить Ui UUj; заметим, что г $Uj находится в оптимальной цепочке. Так что либо C(Sa) > C(Sa>) + 3, либо C(SQ) > C(Sia) + 3. Случай 3. t/i = {г,у} и о£ = о3- = ф. Мы можем считать, что xt = xi Фтг и Xj = xiфа;*. Если Uj = 1 и xi = Xj ф хр, можно реструктуризировать цепочку, полагая Xj = а;* ф хр, xi = xi ф Xj', следовательно, мы можем считать, что либо Uj 1, либо xi = Xj о хр для некоторого канализирующего оператора о. Если Ui = {», Jz}, можно аналогично считать, что Xji = Xi ф Xk' и что либо Ujt 1, либо xi> = Xj> o' Хр/ для некоторого канализирующего оператора о'. Кроме того, из соображений симметрии можно считать, что Xj не зависит ОТ Xj'. Если Xk не зависит от Xi, пусть /(хз,..., хп) = Xk', в противном случае пусть /(тз, • • •, хп) является значением Xk при Xi = 1. Установкой a;j = /(хз,... ,хп) и Xi = /(хз,... ,хп) (или наоборот) мы делаем xt и Xj константами и получаем цепочку для неконстантной функции S'a>. В действительности мы можем обеспечить, чтобы xi было константой в случае Uj = 1. Мы утверждаем, что как минимум пять логических элементов этой цепочки (включая Xi и Xj) могут быть удалены; следовательно, C(Sa) > C(S>ar) + 5. Это утверждение, безусловно, истинно, если |JA U Uj\ > 3. Мы должны иметь | tZ» U Uj | > 1. В противном случае мы бы имели р = г, и Xk не зави- село бы от Xi, так что Sa было бы независимо от xi при нашем выборе Xi. Следовательно, |С7< U t/y| = 2. Случай 3, a. Uj = {/}. Тогда xi является константой; мы можем убрать Xi, Xj «U,U Uj \JUi. Если последнее множество содержит только два элемента, то = Xi о xi также является константой и мы удаляем Uq. Поскольку S/ai константой не является, мы не можем убрать выходной логический элемент. Случай 3,6. Ui С Uj, |l7j| = 2. Тогда xq = Xi о Xj для некоторого g; мы можем убрать Xi, Xj и Uj U Uq. Наше утверждение доказано. (б) По индукции C(Sfc) > 2п + min(fc,n — к) — 3 — [n = 2fc] для 0 < к < п\ C(S>k) > 2п + min(fc, п + 1 — к) — 4 для 1 < к < п. Простыми случаями являются C(So) = C(Sn) = C(S>i) = C(S>n) = n — 1; C(S>o) = 0. (Согласно рис. 9 и 10 эти границы являются оптимальными при п = 4 за исключением для Si, S3, S>2 и S>3, и оптимальными при п = 5 за исключением для Si, S4, S>2 и S>4. Все известные результаты согласуются с гипотезой о том, что C(Sk) = C(S>k) для fc > п/2.) Источник-. Mathematical Systems Theory 10 (1977), 323-336. 81. Если некоторая переменная используется более одного раза, мы можем положить ее равной константе, уменьшая п на 1 и уменьшая с на > 2. В противном случае первая опе- рация должна включать xi, поскольку yi = rri является единственным выходом, который не требует вычислений; делая xi константой, мы уменьшаем п на 1, с на > 1, a d на > 1. [J. Algorithms 7 (1986), 185-201.] 82. (62) Ложно. (63) Читается как “для всех чисел т существует число п, такое, что т < п + 1”; высказывание истинно, поскольку мы можем взять т = п. (64) Ложно при п = 0 или п = 1, поскольку числа в формулах должны быть неотри- цательными целыми числами.
7.1.2 ОТВЕТЫ К УПРАЖНЕНИЯМ 647 (65) Гласит, что если Ъ превосходит а не менее чем на 2, то между этими числами имеется число ab. Конечно, это высказывание истинно, поскольку мы можем положить аЬ = а + 1. (66) Пояснялось в разделе, и оно также истинно. Заметим, что в (65) ‘Л’ имеет больший приоритет, чем ‘V’, а ‘=’—больший приоритет, чем '<=>’, так же как ‘+’ имеет более высокий приоритет, чем ‘>’, а '<’ имеет более высокий приоритет, чем ‘Л’; эти соглашения снижают необходимость в скобках в предложениях L. (67) Гласит, что если множество А содержит как минимум один элемент п, оно должно содержать минимальный элемент т (элемент, который не превышает все элементы мно- жества). Истинно. (68) Аналогично, но т теперь представляет собой максимальный элемент. Также истинно, поскольку все множества считаются конечными. (69) Говорит о существовании множества Р, обладающего следующими свойствами: [0GP] = [3£Р], [1 G Р] = [4£Р], ..., [999 GP] = [1002 £Р], [1000 G Р] / [1003 ^Р], [1001 €Р] [1004 $ Р], и т. д. Истинно тогда (и только тогда), когда Р = {х | х mod 6 G {1,2,3} и 0 < х < 1000}. Наконец, подформула Vn(n Е С 4Ф- п + 1 G С) в (70) представляет собой другой способ сказать, что С = 0, поскольку множество С конечно. Следовательно, формула в скобках после VAVB—это просто хитрый способ сказать, что А = 0 и В 0. (Стокмейер (Stockmeyer) и Мейер (Meyer) использовали этот трюк для сокращения предложений L, которые включают длинные подформулы более одного раза.) Высказывание (70) истинно, поскольку пустое множество не равно непустому множеству. 83. Мы можем считать, что цепочка—нормальная. Пусть канализирующими шагами являются pi, ..., ур. Тогда ук = а* о /Зк и f = ap+i, где ак и представляют собой ffi некоторых подмножеств {rci,..., хп, У1, • • •, j/fc-i}; для их вычисления с первоначальной комбинацией общих членов требуется не более п + к — 2 операторов ф. Следовательно, С(П <Р + ПХ}(п + к - 2) = (р + 1)(п + р/2) - 1. 84. Рассуждаем, как и в предыдущем упражнении, с V или Л вместо ф. [N. Alon and R. В. Boppana, Combinatorica 7 (1987), 15-16.] 85. (а) Простая компьютерная программа показывает, что 13744 являются законными, а 19 024 — нет. (Незаконное семейство такого вида имеет как минимум 8 членов; одним из них является {00, Of, 33,55, ff, 15,3f, 77}. Действительно, если функции х^Ухз (3f), х^Х/хз (77) и (х\ V хз) Л хз (15) присутствуют в законном семействе L, то хз LI15 = 33 | 15 = 37 также должно быть в L.) (б) Проецирующие и константные функции, очевидно, присутствуют. Определим А* = р| {В | В D А и В G А} или А* = оо, если такое множество В не существует. Тогда мы имеем [А] П [В] = [АПВ] и [A] L) [В] = [(АиВ)*]. (в) Сократим формулы до xi С xi V V»=n+i Xl — Xl V Vi=n+i е« и применим метод математической индукции. Если шаг I является шагом И, xi = Xj П хк С Xj Л хк С (х3 V Vt=n+1 Л (хк V Vt=n+1 = Xt V Vi=n+1 Xl = Х3 ^хк — (,х3 V Vi=n+1 е<) (^fc Vi=n+i е«) = (хз Л хк) V V»=n+i б*’ и хз л хк = xiV ei. Рассуждения в случае, когда шаг I представляет собой шаг ИЛИ, аналогичны. 86. (а) Если S является r-семейством, содержащимся в (г + 1)-семействе S', то ясно, что A(S) С A(S'). (б) В соответствии с принципом голубиного гнезда A(S) содержит элементы и и г> каж- дой части, когда S представляет собой r-семейство. И если A(S) = {и, г>}, мы, определенно, имеем и—г>. (в) Результат очевиден при г = 1. Имеется не более г — 1 ребер, содержащих любую заданную вершину и, в силу “сильности” свойства. А если и — г>, ребра, не имеющие
648 ОТВЕТЫ К УПРАЖНЕНИЯМ 7.1.2 общих элементов с {и, к}, являются сильно (г — 1)-замкнутыми; так что по индукции их имеется не более (г — 2)2. Таким образом, всего имеется не более 1 + 2(г — 2) + (г — 2)2 ребер. (г) Да, согласно упр. 85, (б), если г > 1, поскольку сильно r-замкнутые графы яв- ляются замкнутыми относительно пересечения. Все графы с < 1 ребер являются сильно т-замкнутыми, когда г > 1, поскольку они не имеют r-семейств, содержащих различные ребра. (д) Имеется Q) треугольников х^ Л хц, Л Xjk, только п — 2 из которых содержатся в любом члене xuv в /. Следовательно, минитермы для не более чем (г — 1)2(п — 2) треугольников содержатся в /, а другие должны содержаться в объединении членов = xi ф Л ®fc{»)) для р шагов И. Такой член имеет вид Т = ([G] П [Я]) ®([G] Л [Я]) = ([G] Л [Я]) Л [СПЯ], где G и Я являются сильно т-замкнутыми; мы докажем, что Т содержит не более 2(r — I)3 треугольников. Треугольник х^ Л хцс Л Xjk в Т должен включать некоторую переменную (скажем, Xij) из [G] и некоторую переменную (скажем, хцс) из [Я], но не переменную из [GP Я]. Имеется не более (г — I)2 вариантов выбора для гу; а тогда имеется не более 2(т — 1) вариантов выбора для fc, поскольку Я имеет не более г — 1 ребер, соприкасающихся с г, и не более г — 1 ребер, соприкасающихся с у. (е) Имеется 2П-1 полных биграфов, получаемых раскрашиванием 1 красным, а других вершин—красным или синим. Полагаем и — v тогда и только тогда, когда и и v имеют противоположные цвета. Согласно первой формуле из упр. 85, (в), минитермы В для каждого такого графа должны содержаться в одном из членов Т = Й, = £, ф (х,(4) V а^)) = [(СиЯ)*] Л [СиЯ]. (Например, если п = 4 и вершинами (2,3,4) являются (красный, синий, синий), то Я = Т12 Л Х1з Л хц Л Х2з А Х24 А Х34.) Минитерм В содержится в Т тогда и только тогда, когда в раскраске для В некоторое ребро из (G U Я)* имеет вершины противоположных цветов, но все ребра G U Я монохроматичны. Мы докажем, что Т включает не более 2П-Гт2 таких В. Пусть G—произвольный граф, а Т = | G*] Л [G]. Для поиска G* может использо- ваться следующий (неэффективный) алгоритм. Если имеется r-семейство S с | Д(8)| < 2, завершить работу алгоритма с G* = оо. В противном случае, если Д(5) = {и, к} и u-/—v, добавить ребро и—v к G и повторить алгоритм. Не более 2П-Г двудольных минитермов Я имеют монохроматичные {wy.vy} для 1 < j < г при |Д(8)| < 2. А когда Д(8) = {и, г>}, имеется 2П-Г-1 двудольных минитермов с монохроматичными и бихроматичными {w, к}. Так что мы хотим показать, что алгоритм для G выполняет менее 2г2 итераций, когда G сильно т-замкнутый. Пусть для k > 1 Uk — Vk представляет собой первое новое ребро, добавленное к G, которое не имеет общих элементов с {wy.vy} для 1 < j < к. Таких ребер имеется не более г согласно свойству “сильности”; и за каждым из них следует не более 2г — 3 новых ребер, которые соприкасаются с uj или щ. Так что общее количество шагов для поиска G* не превышает т(2т — 2) + 1 < 2г2. (ж) Упр. 84 говорит нам, что q < (£) + (р + ljQ)- Таким образом, мы имеем либо 2(т — 1)3р > (J) — (г — 1)2(п — 2), либо (£) + (р+ ljQ) > 2г-1/т2. Обе нижние границы для р представляют собой [В работе Noga Alon and Ravi В. Boppana, Combinatorica 7 (1987), 1-22, доказана таким способом, помимо прочего, нижняя граница J2(n/log п)а для количества Л в любой моно- тонной цепочке, которая решает, имеет ли граф G клику фиксированного размера s > 3.]
7.1.3 ОТВЕТЫ К УПРАЖНЕНИЯМ 649 87. Элементы в X3, где X представляет собой матрицу из нулей и единиц, не превышают п2. Булева цепочка с O(nle7(logn)2) логическими элементами может реализовать алго- ритм умножения матриц Штрассена (Strassen) 4.6.4-(36) над целыми числами по модулю 2Uen2J+i. 88. Всего имеется 1 422 564 таких функций в 716 классах по отношению к перестановке переменных. Алгоритм L и другие методы данного раздела легко расширяются на тер- нарные операции, и мы получаем следующие результаты для оптимальных медианных вычислений: Сс(/) Классы Функции Классы Функции Ьс(/) Классы Функции б>с(/) Классы Функции 0 1 7 0 1 7 0 1 7 0 1 7 1 1 35 1 1 35 1 1 35 1 1 35 2 2 350 2 2 350 2 2 350 2 13 5670 3 9 3885 3 9 3885 3 8 3745 3 700 1416 822 4 48 42483 4 48 42483 4 38 35203 4 1 30 5 201 406 945 5 188 391384 5 139 270830 5 0 0 6 353 798686 6 253 622909 6 313 699377 6 0 0 7 99 169891 7 69 134 337 7 176 367542 7 0 0 8 2 282 8 2 2520 8 34 43135 8 0 0 9 0 0 9 0 0 9 3 2 310 9 0 0 10 0 0 10 0 0 10 0 0 10 0 0 11 0 0 оо 143 224654 11 1 30 11 0 0 В работе S. Amarel, G. Е. Cooke and R. О. Winder [IEEE Trans. EC-13 (1964), 4-13, Fig. 5b] выдвинута гипотеза о том, что формула с девятью операциями {Х1Х2ХзХ4ХъХвХт} = {х1{{Х2ХзХъ}{х2Х4Хб}{хзХ4Хт)){{х2ХъХб}{хзХъХт}{х4ХбХт})} представляет собой наилучший способ вычисления медианы семи значений через медианы трех значений. Но “волшебная” формула (.Г 1 (.Г 2 ^ХзХ4ХзУ{хзХзХ7 ) ) (тд ^Х2Х@Х7 ) (*Гз*Г5 ^Х$ХвХ7 ))) ) требует только восьми операций; а в действительности кратчайшая цепочка использует только семь операций: (я: 13:22:32:43:52:62:7 ) — (ti (3:2 (2:52:62:7) (3:3 (2:5 2:62:7)2:4 ) ) (3:5 (3:23:33:4) (з:в (3:22:32:4)2:7 )) ) • Интересная функция /(3:1,... ,3:7) = (з:1Лз:2Лз:4) V (хзЛхзЛхъ) V (з:зЛз:4Лз:в) V (х4/\хз/\хг} V (з:вЛз:вЛз:1) V (хвЛхтЛхз) V (хтЛх^Лхз), простые импликанты которой соответствуют про- ективной плоскости с семью точками, оказывается самой трудной: ее минимальная длина £(/) = 11 и минимальная глубина D(f) = 4 достигаются замечательной формулой ((3:13:4(3:43:53:6)) (хзхз(3:1 (з?23:33:7){х2ХъХз}}} (3:23:7(3:1 {хьХ2Х4^{хзХзХ7))У)'). А следующая еще более удивительная цепочка вычисляет ее оптимальным образом: хз = (3:13:23:3), 3:9 = (3:73:42:6), 2:10 = (3:13:53:8), з:ц = (3:23:73:8), Х12 = (хзХдХю), Х13 = {Х4Х3Х12), Х14 = {хвХцХ12), Х15 = (Х7Х13Х14). РАЗДЕЛ 7.1.3 1. Эти операции обменивают биты х и у в позициях, где биты т равны 1. (В част- ности, если m = —1, шаг ‘у <— у ф (х & тп)’ превращается просто в ‘у 4— у ф х’, и эти три присваивания выполняют обмен х <-> у без использования дополнительного регистра. Г. С. Уоррен-мл. (Н. S. Warren, Jr.) обнаружил этот трюк в примечаниях к курсу IBM по программированию, датированному 1961 годом.)
650 ОТВЕТЫ К УПРАЖНЕНИЯМ 7.1.3 2. Все три соотношения выполняются для неотрицательных хну, или если мы рассмат- риваем хну как “беззнаковые 2-адические целые числа” для которых 0 < 1 < 2 < • • < —3 < —2 < —1. Но если отрицательные целые числа меньше неотрицательных, (i) не выполняется тогда и только тогда, когда х < 0 и у < 0; (ii) и (iii) не выполняются тогда и только тогда, когда х ф у < 0, а именно тогда и только тогда, когда х < 0 и у > 0 или х > 0 и у < 0. 3. Заметим, что х — у = (х ф у) — 2(т & у) (см. упр. 93). Удаляя общие для хну биты в левой части, можем считать, что rrn-i = 1 и pn-i = 0. Тогда 2(х&р) < 2((ггфр) — 2П-1) = (х ф у) - (х ф у)м — 1. 4. xCN = х + 1 = ies согласно (16). Следовательно, xNC =xNCSP=xNCCNP =xNNP = хр. 5. (а) Опровержение: пусть х = (... X2XiXo)2- Тогда бит I числа х к равен xi-k[l > fc]. Так что бит I в левой части равен > fc][Z — к >у], в то время как бит I в правой части равен яц_^_*:[/ > j + fc]. Эти выражения совпадают, когда j > 0 или к < 0. Но если j < 0 < к, они отличаются при I = max(0, j + fc) и xi-j-k = 1. (Однако во всех случаях мы имеем (х j) к С х (j + fc).) (б) Доказательство: бит I во всех трех формулах равен ггг+j[Z > —у] Л yi-k[l > fc]. 6. Поскольку х у > 0 тогда и только тогда, когда х > 0, мы должны иметь х > 0 тогда и только тогда, когда у > 0. Очевидно, что х = у всегда является решением. Решениями с х > у являются (а) х = — 1 и у = —2, или 2В > х > у > 0; (б) х = 2 и у = 1, или 2~х > -у > -х > 0. 7. Установите х' 4— (х + До) Ф До, где ро —константа из (47). Тогда х' = (... x^x^x'd^, поскольку (х' Ф До) — До = (•. • х'зх^х^х^г — (• • • 1010)2 = (• • • ОтгОт^г — ( • Тз0я:'10)2 = х. [Это хак 128 из НАКМЕМ; см. ответ к упр. 20. Д. П. Агравалем (D. Р. Agrawal), IEEE Trans. С-29 (1980), 1032-1035, была также предложена альтернативная формула я;' 4— (ро- ге) Фро- Результаты корректны по модулю 2П для всех п, но может произойти переполнение или потеря значимости. Например, бинарные числа в дополнительном коде в п-битовом регистре находятся в диапазоне от —2П-1 до 2П~Х — 1 включительно, а негабинарные—от —|(2П — 1) до |(2П — 1) при четном п. В общем случае формула х' 4— (rr + р) фр выполняет преобразование из бинарной записи в обобщенную числовую систему с бинарным базисом (2n(—1)т”), которая рассматривалась в упр. 4.1-30(с), при р = ( .. . тигпитпо^-] 8. Во-первых, х ф у (S ф у) U (х ф Т). Во-вторых, предположим, что 0 < к < х ф у, и пусть х®у = (а1а')г, fc = (аОа'^г, где а, а' и а" являются строками из нулей и единиц, обладающие тем свойством, что |а'| = |а"|. Исходя из симметрии будем считать, что х = (/31/3,)2 и у = (707')2, где |а'| = l/J'l = |т'|. Тогда к ф у = (/307")2 меньше, чем х. Следовательно, к@у£8вк = (fc® у) ®у Е S® у. [См. R. Р. Sprague, ТбЬоки Math. J. 41 (1936), 438-444; Р. М. Grundy, Eureka 2 (1939), 6-8.] 9. Теорема Спрэга-Гранди из предыдущего упражнения показывает, что две кучки с х и у камнями эквивалентны одной кучке с х ф у камнями. (Неотрицательное целое число к < х ф у существует тогда и только тогда, когда существует либо неотрицательное г < х с г® у < х®у, либо неотрицательное j < у, с x®j < х®у.) Так что fc кучек эквивалентны одной кучке размером ai ф • • ф a*,. [См. С. L. Bouton, Annals of Math. (2) 3 (1901-1902), 35-39.] 10. Для ясности и краткости будем писать просто ху вместо х ® у и х + у вместо х ф у, но только в частях от (i) до (iv) данного ответа. (i) Ясно, что Оу = 0, х+у = у+х нху = ух. По индукции по у, кроме того, выполняется 1у = У- (ii) Если х Ф х' и у ф у , то ху + ху' + х'у -I- х'у' 0, поскольку определение ху гласит, что ху' -I- х'у + х'у' ф ху при 0 < х' < х н 0 < у' < у. В частности, если а: / 0 и j/ / 0,
7.1.3 ОТВЕТЫ К УПРАЖНЕНИЯМ 651 то ху 0. Другое следствие заключается в том, что, если х = mex(S) и у = тех(Т) для произвольных конечных множеств S и Т, то мы имеем ху = mex{rrj + iy+ij | г G S, j G Т}. (iii) Следовательно, по индукции по (обычной) сумме х, у и z, (х + y)z равно шех{(я; + y)z + (х + y)z + (х + y)z , (х + y)z + (х + y')z + (х + y')z' | 0 < х' < х, 0 < у < у, 0 < z' < z}, что представляет собой mex{xz' +х'z+x'z' +yz, xz+yz'+y'z+y'z’} = xz+yz. В частности, действует закон сокращения: если xz = yz, то (х + y)z = 0, так что х = у или z = 0. (iv) По аналогичной индукции (xy)z = mex{(a;?/)z' + (ху' + х'у + x'y')(z + z')} = mex{(xy)z' + (xy')z + (xy')z' + • • } = mex{x(yz') + x(y'z) + x(y'z') + } = mex{(s + x')(yz' + y'z + y'z1) + x'(yz)} = x(yz). (v) Докажем, что если 0 < x,y < 22", то x®y < 22", 22" ®y = 22"»/ и 22" ® 22" = |22". Согласно закону дистрибутивности (iii) достаточно рассмотреть случай х = 2° и у = 2Ь для 0 < а,Ь < 2П. Пусть а = 2Р + а' и Ь = 2’ + Ь', где 0 < а' < 2Р и 0 < Ь' < 2’; тогда х = 22Р ® 2а' иу = 22’ ® 2Ь' по индукции по п. Если р < п — 1ид <п - 1, мы уже доказали, что х ® у < 22"-1. Если р < q = п — 1, то х ® 2Ь' < 22’, следовательно, х ® у < 22". А если р = q = п — 1, мы имеем х ® у = 22Р ® 22Р ® 2а' ® 2Ь' = (|22Р) ® z, где z < 22Р. Таким образом, х ® у < 22" во всех случаях. Согласно закону сокращения неотрицательные целые числа, меньшие, чем 22", обра- зуют подполе. Следовательно, в формуле 22" ® у = mex{22"j/ ф х'(у ф у) | 0 < х < 22", 0 < у < у} мы можем выбрать х' рдя каждого у', чтобы исключить все числа между 22Пу' и 22"(з/' + 1) — 1; но 22Пу никогда не исключается. Наконец в 22" ® 22" = тех{22"(х' ф у') ф (х' ® у') | 0 < х,у' < 22"} выбор х' = у' исключит все числа до 22" — 1 включительно, поскольку из х®х = у®у вытекает, что (х ф у) ® (х ф у) = 0, а следовательно, х = у. Выбор х' = у' Ф 1 исключает числа от 22" до |22" — 1, поскольку из (х®х)®х = (у®у)®у вытекает, что х = у или х = у®1, и поскольку старший бит х ® х тот же, что и старший бит х. Это же наблюдение показывает, что |22" не исключается. QED. Рассмотрим, например, подполе {0,1,..., 15}. Согласно закону дистрибутивности мы можем свести х ® у к сумме х ® 1, х ® 2, х ® 4, и/или х ® 8. Мы имеем 2 ® 2 = 3, 2 ® 4 = 8, 4®4 = 6; а умножение на 8 может быть выполнено путем умножения сначала на 2, а потом на 4, или наоборот, поскольку 8 = 2 ® 4. Таким образом, 2 ® 8 = 12, 4 ® 8 = 11, 8 ® 8 = 13. В общем случае представим п > 0 в виде п = 2т + г, где 0 < г < 2™. Суще- ствует матрица Qn размером 2m+1 х 2m+1, такая, что умножение на 2П эквивалентно применению Qn к блокам из 2m+1 бит при работе по модулю 2. Например, Qi = (JJ), и (... ® 21 = (... 2/42/з2/22ЛЗЛ>)2, где уо = xi, 2/1 = xi ф х0, 2/2 = хз, уз = хз® хз, У4 = хз и т. д. Матрицы образуются рекурсивно следующим образом: пусть Qo = Ro = (1) и Q2m+r = Rm R„ Rm 0 — Q‘2Tn+ 111 где Qr реплицирована достаточное количество раз, чтобы образовать 2m+1 строк и столб- цов. Например, (1 0 1 1\ 0 110 1 0 0 0 ’ 0 10 0; о _ п (Qi 0 Q3-Q4o р 1 о i\ 1011 1100 \1 0 0 0; = R2.
652 ОТВЕТЫ К УПРАЖНЕНИЯМ 7.1.3 Если в регистре х хранится любое 64-битовое число и если 0 < j < 7, то MMIX-команда MXOR y,q3, х будет вычислять у = х ® 21 для данных шестнадцатеричных матричных кон- стант Оо = 8040201008040201, Ч1 = с08030200с080302, q2 = Ь06080400Ь060804, q3 = d0b0c0800d0b0c08, q4 = 8d4b2cl880402010, q5 = c68d342cc0803020, q6 = b9678d4bb0608040 q7 = deb9c68dd0b0c080 [Д. X. Конвей (J. H. Conway), On Numbers and Games (1976), глава 6, показал, что эти опре- деления действительно дают алгебраически замкнутое поле над порядковыми числами.] 11. Пусть т = 2°’ + + 2О1 с аа > • > а* > 0 и п = 2Ь‘ + + 2bl с bt > • > bi > 0. Тогда т ® п = тп тогда и только тогда, когда (ая | - - - | ai) & (bt | • • • | bi) — 0. 12. Если х = 22"а + Ь, где 0 < а, b < 22", положим х' = х ® (х ф а). Тогда х = ((22"® а) ф Ь) ® ((22"® а) ф аф Ь) = (22" 1 ® а® а) ф (Ь® (афЬ)) < 22". Для ним-деления на х можно, таким образом, ним-поделить на х' и умножить на х ф а. [Этот алгоритм принадлежит X. В. Ленстре-мл. (Н. W. Lenstra, Jr.); см. SGminaire de Tbeorie des Nombres (Universite de Bordeaux, 1977-1978), expose 11, exercise 5.] 13. Если аг Ф • • Ф a* = ai ф аз ф • ф ((fc — 2) ® a*) = 0, каждый ход нарушает это условие; мы не можем иметь (а ® х) ф (Ь ® у) = (а® х') ф (Ь ® у') при х ф у = х' ф у' и а ф Ь, если только не выполняется условие (х,у) = (х',у'). И обратно, если аг Ф Ф at ф 0, можно уменьшить некоторое а3 с j > 2, чтобы сделать эту сумму нулевой; тогда ai можно установить равным аз®- -®((fc—2)®а*;). Если аг Ф • • • Ф а*, = 0 и ai аз ф • - - ф ((fc — 2) ® а*,), мы просто уменьшаем ai, если оно слишком велико. В противном случае имеется j > 3, такое, что равенство будет выполняться, если (j — 2) ® aj заменить подходящим меньшим значением ((j — 2) ® a'j) ф ((г — 2) ® (aj ф a'j)) для некоторого 2 < г < j и 0 < a'j < aj из-за определения ним-умножения; следовательно, оба искомых равенства достигаются путем установки aj 4— a'j на* 4— at фа,- фо';. [Эта игра была представлена в Winning Ways Берлекампом (Berlekamp), Конвеем (Conway) и Гаем (Guy) в конце главы 14.] 14. (а) Каждое у = (... узу1уо)з — хТ единственным образом определяет х = (...хзХ1 3:0)2, поскольку хо = уо Ф t И [»//2] = [я;/2]т®о. (б) Когда fc > 0, это выражение представляет собой функцию ветвления с метками taa0 = а для |/3| = к — 1 и ta =0 для |а| < fc. Но когда к < 0, отображение не является перестановкой; в действительности, когда fc < 0, оно отображает 2~к различных 2-адических целых чисел в 0. [Случай fc = 1 представляет особенный интерес: тогда хт отображает неотрицатель- ные целые числа в неотрицательные целые числа с четной четностью, отрицательные целые числа в неотрицательные целые числа с нечетной четностью и —1/3 •-> —1. Кроме того, [хт/2] представляет собой “бинарный код Грея” 7.2.1.1—(9).] (в) Если р(х ф у) = к, мы имеем Т(х) = Т(у) и х = у + 2к (по модулю 2fc+1). Следо- вательно, р(хт ф ут) = р(х ф у ф Т(х) ф Т(у)) = fc. И обратно, если р(хт ф ут) = к при у = х + 2к, мы получаем подходящую маркировку битами, полагая ta = (хт 3> |а|) mod 2 при x=(aR)2- (г) Это утверждение следует непосредственно из (а) и (в). Если мы всегда имеем р(х®у) = р(хи®уи) = p(xv®yv), то р(х®у) = р(хи®уи) = p(xuv®yuv). А если хти = х для всех х, р(хи® уи) = р(х ф у) эквивалентно р(х ®у) = р(тгФ ут). Мы можем также построить маркировку явно: если W = UV, заметим, что при a, b, с G {0,1} мы имеем Wo = UaVa>, Wab = UabVa'b' и WObC = UabcVa’b'c', где a! = афи, Ь' = b®ua, с' = с® иаь и т. д.; следовательно, w = и® v, wa = иа Ф va>, ыаь = иаь Ф va>b> и т. д.
7.1.3 ОТВЕТЫ К УПРАЖНЕНИЯМ 653 Маркировка Т, обратная U, получается путем обмена левого и правого поддеревьев всех узлов с меткой 1; таким образом, t = и, ta> = иа, taib' = иаЬ и т. д. (д) Явное построение в (г) демонстрирует, что условие сбалансированности при ком- позициях и инверсиях сохраняется, поскольку на каждом уровне {0х, 1'} = {0,1}. Примечания. Хендрик Ленстра (Hendrik Lenstra) заметил, что функции ветвления могут с пользой рассматриваться как изометрии (перестановки, сохраняющие расстояния) 2-адических целых чисел, при использовании для определения “расстояния” между 2- адическими целыми числами хну формулы 1/2р(х&у\ Кроме того, функции ветвления по модулю 2d оказываются 2-подгруппами Сылова группы всех перестановок {0,1,..., 2d — 1}, а именно уникальной (до изоморфизма) подгруппой, которая имеет максимальный порядок степени двойки среди всех подгрупп данной группы. Они также эквивалентны автомор- физмам полного бинарного дерева с 2d листьями. 16. Эквивалентно (х + 2а) ф Ъ = (х ф Ь) + 2а; так что мы можем найти также все Ь и с, такие, что (х ф Ь) + с = (х + с) ф Ъ. Из установок х = 0 и х = — с вытекает, что Ъ + с = Ь ф с и Ь — с = b ф (—с); следовательно, b & с = 5 & (—с) = 0 согласно (89), и мы имеем Ъ < 2рс. Это условие является также достаточным. Таким образом, 0 < b < 2ра+1—необходимое и достаточное условие для решения исходной задачи. 16. (а) Если р(х ®у) = к, мы имеем х = у + 2к (по модулю 2fc+1); следовательно, х + а = у + а + 2к и р((х + а) ф (у + а)) = к. А р((х ®Ь)®(у® Ь)) очевидно равно к. (б) Маркировка из указания, назовем ее Р(с), имеет единицы на пути, соответству- ющем с, и нули в остальных местах; таким образом, она является сбалансированной. Обобщенная анимирующая функция может быть записана как еСт) гдес, = ь, е...еь.. так что она сбалансирована тогда и только тогда, когда Ст = 0. [Кстати, множество S = {Р(0)} U {Р(к) ф P(fc + 2е) | к > 0 и 2е > fc} предостав- ляет интересный базис для всех возможных сбалансированных маркировок: маркировка сбалансирована тогда и только тогда, когда она представляет собой ф {g | q 6 Q} для некоторого Q С S. Эта операция исключающего или хорошо определена, несмотря на то, что Q может быть бесконечным, поскольку в каждом узле может присутствовать только конечное количество единиц.] (в) Функция Р(с) в (б) имеет указанный вид, поскольку хр^ = х ф [ж ф с]. Обратная к ней xs^ = ((я: ф с) + 1) ф с представляет собой х ф [я: ф с] = хр<&. Кроме того, мы имеем xp(c')pW = тр(с)ф [д^ИфЙ] =тф[2:фс]ф[а;фй5(с)], поскольку [я:ф?/| = [ттФ?/г] для любой функции ветвления хТ. Аналогично хр^р^р^ = хф [жфс] ф [я:фds(c)] ф [я:фes<d)s<c)] и т. д. После отбрасывания равных членов мы получаем требуемый вид. Получающиеся в результате числа р, уникальны, поскольку они являются единственными значениями х, в которых функция меняет знак. (г) Мы имеем, например, х ф [я: ф а] ф [я: ф 5] ф [я: ф с] = хр(а')р<ь')р<с'\ где а' = а, У = Ь^(о/) и с = [Теория анимирующих функций была разработана Д. X. Конвеем (J. Н. Conway) в гла- ве 13 его книги On Numbers and Games (1976) и основывалась на предшествующей работе К. П. Велтера (С. Р. Welter) в Indagationes Math. 14 (1952), 304-314; 16 (1954), 194-200.] 17. (Решение М. Сланины (М. Slanina).) Такие уравнения разрешимы, даже если мы до- пустим такие операции, как х&у, х, я:<^1, я:3>1, 2рх и 2Аг, и даже если мы разрешим булевы комбинации утверждений и квантификацию над целочисленными переменными путем их трансляции в формулы монадической логики второго порядка с одним преемником (S1S). Каждая 2-адическая переменная х = (.. ^22:12:0)2 соответствует переменной множества
654 ОТВЕТЫ К УПРАЖНЕНИЯМ 7.1.3 SIS X, где j G X означает х3 = 1: z = х становится Vt(t G Z <=> t $ X); z = х & у становится Vt(t eZtt(tGXAt6 У)); z = 2рх становится Vt(t 6 Z О (t 6 ХЛ Vs(s < t => в $ X))); z = x + y становится 3CVt(0^C Л (t € Z <=> (t€X) ф (КЕУ) Ф (t€C)) Л (t+1 6 С» <(teX)(tGy)(tGC)))). Тождество, такое как х & (—х) — 2рх, эквивалентно трансляции VXVYVZ((integer(X) Л 0 = х + ?/ Л z = х&у) => z = 2рх), где integer(X) означает 3tVs(s > f => (s Е X « t Е X)). Можно также включить 2- адические константы, если они представляют собой, скажем, отношения целых чисел; например, z = до эквивалентно формуле 0 6 Z Л Vt(t 6 Z « t + 1 Z). Но, конечно, мы не можем включать произвольные (невычислимые) константы. Ю. Р. Бюхи (J. R. Biichi) доказал, что все формулы S1S являются разрешимыми, в Logic, Methodology, and Philosophy of Science: Proceedings (Stanford, 1960), 1-11. Если мы ограничимся равенствами, то можно показать, что в действительности экспоненциального времени будет достаточно. С другой стороны, М. Гамбург (М. Hamburg) показал, что задача может быть неразре- шимой, если добавить в набор операций рх, Хх или 1 х; тогда может быть закодировано умножение. Кстати, имеется много нетривиальных тождеств, даже если мы используем только лишь операции х ф у и х + 1. Например, К. П. Велтер (С. Р. Welter) заметил в 1952 году, что ((хф(у + 1)) + 1)ф(х + 1) = ((((х + 1) ф у) + 1) ф х) + 1. 18. Конечно, строка х полностью пуста, когда х кратно 64. Мелкие детали этого изобра- жения, по всей видимости, “хаотичны” и сложны, но имеется достаточно простой способ понять, что происходит вблизи точек, где прямые линии х = 64-\/J пересекаются с гипер- болами ху = 2nk, для целых не слишком больших значений j, к > 1. Действительно, когда хиу представляет собой целые числа, значение х2»/3> 11 нечетно тогда и только тогда, когда х2у/212 mod 1 > |. Таким образом, если х = 64-\/J + 6 и ху = 2n(fc + е), мы имеем х2у я 1 ^12 modl 128л/у<5+<52 4096 2<5х—62 4096 у mod 1 ((fc + €)<5-^%)mOd1’ ) у mod 1 = и эта величина имеет известное отношение к |, когда, скажем, <5 близко к небольшому целому числу. [См. С. A. Pickover and A. Lakhtakia, J. Recreational Math. 21 (1989), 166-169.] 19. (а) Когда n = 1, f(A,B,C) имеет одно и то же значение при всех расположени- ях, за исключением случая, когда ао / aj, bo bi и с© ф ci; и тогда оно не может превышать 1. Для больших значений п доказательство можно провести по индукции, полагая п = 3, чтобы избежать громоздких обозначений. Пусть Ао = (оо, 01,02,03), Ai = (04,05,00,07), ..., Ci = (c4,cs,co,C7). В таком случае по индукции f(A,B,C) = y2jek®i=of(ABBk,Ct) < H3ekei=of(A*, Bl, Ci). Таким образом, можно считать, что ао > ai > аг > аз, 04 > аз > ао > а?, ..., С4 > С5 > со > ст. Можно также отсортировать подвекторы Ао = (00,01,04,05), А'г = (02,03,00,07), ..., С{ = (02,03,05,07) более простым способом. Наконец, можно отсортировать Ад = (00,01,00,07), А" = (02,03,04,05), ..., С" = (02,03,04,05), поскольку в каждом члене ajbkci количество индексов {j,k,l} со стар- шими битами 01, 10 и 11 должно удовлетворять соотношению soi ’ ею = sn (по модулю 2). А эти три операции сортировки делают А, В и С полностью отсортированными согласно
7.1.3 ОТВЕТЫ К УПРАЖНЕНИЯМ 655 упр. 5.3.4-48. (Для всех п > 2 необходимы ровно три сортировки подвекторов длиной 2"-1 ) (б) Предположим, что А = А*, В = В* иС = С*. Тогда мы имеем а, = $22_q 1 oit [j < t], где a3 = aj — a3+i > 0, и устанавливаем аг» = 0; аналогичные формулы выполняются для Ьь и ci. Пусть А(р) обозначает вектор (ар(0),.. . , ар(2"-1)), где р представляет собой перестановку {0,1,..., 2П — 1}. Тогда согласно п. (а) мы имеем /(А(р), В(д), С(г)) = X!j®fc®i=o at/?«7v[p(j) < *][«(*) < wJkG) < 4 < 53,фЬф«=о 'Lt.u.v < t][fc < u][z < v] = f(A, В, C). [Это доказательство принадлежит Харди (Hardy), Литтлвуду (Littlewood) и Пойа (Polya), Inequalities (1934), §10.3.] (в) Этот же метод доказательства распространяется на любое количество векторов. [R. Е. А. С. Paley, Proc. London Math. Soc. (2) 34 (1932), 265-279, Theorem 15.] 20. Приведенные шаги вычисляют наименьшее целое у, большее х, такое, что vy = их. Эта функция полезна для генерации всех сочетаний из п объектов по тп (т. е. всех т-элементных подмножеств n-элементного множества, где элементы представлены единичными битами). [Это хак 175 из НАКМЕМ, Massachusetts Institute of Technology Artificial Intelligence Laboratory Memo No. 239 (29 February 1972).] 21. Установить t 4— у + 1, u 4— t(+)y, v4- t&y, x <— v — (v & —v)/(u + 1). Если у — 2™ — 1 является первым m-сочетанием, эти восемь операций установят х равным нулю. (Тот факт, что х = f(y), похоже, не приводит к какой-либо более короткой схеме.) 22. Контрольное суммирование позволяет избежать деления: SUBU t.x.l; ANDN u.x.t; SADD k,t,x; ADDU v.x.u; X0Rt,v,x; ADDU k,k,2; SRU t,t,k; ADDU y,v,t. Но в действи- тельности можно сэкономить один шаг, если благоразумно воспользоваться константой топе = — 1: SUBUt,x,l; X0Ru,t,x; ADDUy,x,u; SADDk,t,y; ANDN у,у,u; SLUt,mone,k; CRN y,y,t. 23. (a) (0... 01... 1)2 = 2m — 1 и (0101... 01)2 = (22m - 1)/3. (б) Это решение использует 2-адическую константу ро = ( • 010101)2 = —1/3: t ч— х®ро, и ч— (t—l)ffit, и ч— я; | и, w ч— и + 1, у ч— w + -------------- L y/u +1 Если х = (22т —1)/3, операции приводят к странному результату, поскольку u = 22m+1 — 1. (в) XOR t,x,m0; SUBU u,t,l; XORu.t.u; 0Rv,x,u; SADD y,u,m0; ADDU w,v,l; ANDN t,v,w; SRUy,t,y; ADDU y,w,y. [Это упражнение основано на работах Йорга Арндта (Jorg Arndt).] 24. Имеет смысл “залить воды в насос” т. е. с самого начала инициализировать массив состоянием, которое он будет иметь после отсеивания всех кратных 3, 5, 7 и 11. Можно скомбинировать 3 с 11 и 5 с 7, как предложил Э. Вада (Е. Wada). LOC Data_Segment qbase GREG ® ;N IS 3584 ;n GREG N ;one GREG 1 Q OCTA #816dl29a64b4cb6e Qo (прямой порядок). LOC Q4-N/16 qtop GREG Q Конец таблицы Q. Init OCTA #92492492492492491 #4008010020040080 Кратные 3 или 11 в [129.. 255]. ОСТА #84210842108421081 #0408102040810204 Кратные 5 или 7. t IS $255 ;хЗЗ IS $0 ;х35 IS $1 ;j IS $4 LOC #100 Main LDOU x33,Init; LDOU x35,Init+8
656 ОТВЕТЫ К УПРАЖНЕНИЯМ 7.1.3 1Н LDA j,qbase,8; SUB j,j,qtop NOR t,x33,x33; ANDN t,t,x35; SLU t,x33,2; SRU x33,x33,31; SLU t,x35,6; SRU x35,x35.29; ADD j,j,8; PBN j,lB STOU t,qtop,j OR x33,x33,t OR x35,x35,t Подготовка к установке Qi. Инициализация 64 бит решета. Подготовка следующих 64 значений. Повторять до достижения qtop. | Затем отбрасываются составные числа р2, р2 + 2р, ... для р = 13, 17, ..., пока р2 < N: р IS $0 ;рр IS $1 ;m IS $2 ;mm IS $3 ;q IS $4 LDOU q,qbase,0; LDA pp,qbase,8 SET p,13; NEG m.l3*13,n; SRU q,q,6 IH SR m.rn.l 2H SR mm,m,3; LDOU s,qtop,mm; AND t,m,#3f; SLU t,one,t; ANDN s,s,t; STOU s,qtop,mm ADD m,m,p; PBN m,2B SRU q,q,l; PBNZ q,3F 2H LDOU q,pp,O; INCL pp,8 OR p,p,#7f; PBNZ q,3F ADD p,p,2; JMP 2B 2H SRU q,q,l 3H ADD p,p,2; PBEV q,2B MUL m,p,p; SUB m,m,n; PBN m,lB ;s IS $5 Начать c p = 13. ™<-L(p2-N)/2j. Обнуление бита. Продвижение на р бит. Переход к следующему потенциальному простому. Чтение другого пакета потенциально простых. Пропуск последних 128 составных. Установка р Ч— р + 2, пока р не станет простым. Повтор, пока р2 < N. | Время работы, 1172р + 5166ц, конечно же, гораздо меньшее, чем требуется для шагов Р1-Р8 программы 1.3.2'Р, а именно 10037р + 641543ц (улучшено до 10096/z + 215351ц в упр. 1.3.2'-14). [См. некоторые поучительные вариации в Р. Pritchard, Science of Computer Programming 9 (1987), 17-35. На практике программы наподобие приведенной катастрофи- чески замедляются, когда решето оказывается слишком большим для размещения в кэше. Лучшие результаты получаются при работе с сегментированным решетом, содержащим биты для чисел между No + кб и No + (fc + 1)<5, как предложено в работах L. J. Lander and Т. R. Parkin, Math. Comp. 21 (1967), 483-488; C. Bays and R. H. Hudson, BIT 17 (1977), 121-127. Здесь No может быть достаточно болыпйм, но <5 ограничено размером кэша; вычисления выполняются отдельно для fc = 0, 1, .... Сегментированные решета хорошо проработаны; см., например, Т. R. Nicely, Math. Comp. 68 (1999), 1311-1315, и цитируемые там ссылки. Автор в 2006 году использовал такую программу для обнаружения необыч- но большого промежутка длиной 1370 чисел между 418032 645 936712127 и следующим простым числом.] 25. (1 + 1 + 25+1 + 1 + 25-1-1-1-1 = 56) мм; червь никогда не увидит страницы 2-500 тома 1 или 1-499 тома 4. (Если только книги не выстроены на полке в духе “прямого порядка байтов”; в этом случае ответ—106мм.) Эта классическая головоломка имеется в книге Сэма Лойда (Sam Loyd) Cyclopedia (New York: 1914), страницы 327 и 383. 26. Вместо деления на 12 можно прибегнуть к умножению на *aa...ab (см. упр. 1.3.1-17); но умножение также является слишком медленной операцией. Можно работать с “плос- кой” последовательностью 12000000 х 5 последовательных битов (= 7.5 мегабайт), игнори- руя границы между словами. Еще одна возможность заключается в применении схемы, использующей не прямой и не обратный порядок байтов, а транспонированный: поместим элемент fc в октет 8(fc mod 220), где он сдвинут влево на 5[fc/220J. Поскольку fc < 12000000, величина сдвига всегда будет меньше 60. Код MMIX для размещения элемента fc в ре- гистре $1 имеет вид AND $O,k,№ffff]; SLU $0,$0,3; LDOU $l,base,$0; SRU $0,k,20; 4ADDU $0,$0,$0; SRU$1,$1,$O; AND
7.1.3 ОТВЕТЫ К УПРАЖНЕНИЯМ 657 [Это решение использует 8 большйх мегабайтов (223 байт). Будет работать любая удобная схема для преобразования номеров элементов в адреса октетов и величины сдви- гов, лишь бы был согласованно использован один и тот же метод. Конечно, простое ‘LDBU $1,base,к’ было бы быстрее.] 27. (а) ((т—1) ф х) + х. [Это упражнение основано на идее Лютера Будрами (Luther Woodrum), который заметил, что ((х—1) |х) + 1 = (х & — х) + х.] (б) (у + х) | у, где у = (х-1) ф х. _________ (в,г,д) ((z®x)+x) & z, ((z®x)+x) ф z и ((гфх)+х) & z, где z = х— 1. (е) хф(а); или, в качестве альтернативного решения, t®(t+l), где t = х| (х—1). [Число (0oo01ollb)2 выглядит проще, но, очевидно, требует пяти операций: ((t + 1) & t) — 1.] Все эти построения дают разумные результаты в исключительных случаях х = — 2Ь. 28. Бит 1, указывающий крайний справа 0 в х (например, (101011)2 •-> (ОООЮО)г); — 1 •-> 0. 29. y.k = Дк+i Ф (Дк+i 2fc) [см. STOC 6 (1974), 125]. Это отношение выполняется также для констант y,d,k из (48) при 0 < k < d, если начать с ра,а = 22<I — 1. (Однако не имеется простого пути перейти от рь к Дк+1, если только не использовать операцию “zip”; см. (77).) 30. Добавляем ‘CSZ rho,x,64’ к (50), что приводит к увеличению времени вычисления на Iv, или заменяем последние две строки на SRU t,y,rho; SLU t,t,2; SRU t, [*300020104] ,t; AND t,t,*f; ADD rho,rho,t, что экономит lv. В случае (51) нам просто нужно обеспечить rhotab [0] = 8. 31. Прежде всего, его код зациклится при х = 0. Но даже после исправления этой ошибки предположение о случайности х весьма сомнительно. Во многих приложениях, когда мы хотим вычислить рх для ненулевого 64-битового числа х, более разумным предположением является равновероятность получающихся результатов {0,1,... ,63}. При этом среднее значение и стандартное отклонение становятся равными 31.5 и ~ 18.5. 32. ‘NEGUy,x; AND у,х,у; MULU у.debruijn,y; SRU у,у,58; LDB rho,decode,у’ имеет оценоч- ную стоимость р + 14и, хотя умножение на степень 2 может оказаться быстрее типичного умножения. Добавьте Iv для исправления из упр. 30. 33. В действительности исчерпывающее вычисление показывает, что ровно 94 727 подходя- щих констант а дают “идеальную хеш-функцию” для данной задачи, 90 970 из них также распознают случаи степени двойки у = 23; 90918 из них способны также распознавать случай у = 0. Множитель *208Ъ2430с8с82129 является единственным наилучшим в том смысле, что не требует обращения к записям таблицы выше decode [32400], когда известно, что у является корректным входом. 34. Тождество (а) неверно при х = 5, у = 6; но (б) истинно, причем также и тогда, когда ху = 0. Доказательство (в): если х Ф у и рх = ру = к, мы имеем х = al0fc и у = /310*; следовательно, х ф у = (а ф /3)00fc = (х — 1) ф (у — 1). Если рх ~> ру = fc, мы имеем (х ф у) mod2fc+2 £ ((х—1) ф (у—1)) mod2fc+2. 35. Пусть f(x) = х@3х. Ясно, что f(2x) = 2f(x) и /(4х + 1) = 4/(х) + 2. Мы также имеем /(4т — 1) = 4/(х) + 2 согласно упр. 34(в). Отсюда следует тождество из указания. Для заданного п установим u4- п» 1, г> Ч— u + n, 14— и ф и, п+ Ч— v и п~ Ч— ukt. Ясно, что и = [п/2] и v - [Зп/2], так что п+ — п~ = и — и = п. А это и есть представление Райтвизнера, поскольку п+ | п~ не имеет последовательных единиц. [Н. Prodinger, Integers О (2000), А08:1-А08:14. Кстати, мы также имеем /(—х) = /(х).] 36. (i) Команды х ч— х Ф (х 1), х ч— х ф (х 2), х ч— х ф (х 4), х ч— х ф (х 8), х ч— х ф (х 16), х Ч— х ф (х 32) заменяют х на х®. (ii) т& = х & ~(х + 1). (Применения х® описаны в упр. 66 и 70; см. также упр. 128 и 209.) 37. Вставка ‘CSZ у,х,half’ после FLOTU в (55), где half = *3fе0000000000000; обратите внимание, что (55) гласит ‘SR’ (не ‘SRU’). Если iamtai>[0] = —1, изменения в (56) не нужны.
658 ОТВЕТЫ К УПРАЖНЕНИЯМ 7.1.3 38. ‘SRUt,x,l; 0Ry,x,t; SRUt.y.2; ORy.y.t; SRUt,y,4; ORy.y.t; ...; SRU t,y,32; OR y.y.t; SRU t.y.l; SUBU y,y,t’ выполняется за время 14u. 39. (Решение Г. С. Уоррена-мл. (Н. S. Warren, Jr.)) Пусть сг(х) обозначает результат распространения х вправо, как в первой строке (57). Вычислите х & сг((х 3> 1) & х). 40. Предположим, что Хх = Ху = к. Если х = у = 0, (58), определенно, выполняется, независимо от того, как мы определяем АО. В противном случае х = (1а)2 и у = (1/3)2 для некоторых бинарных строк а и /3 с |а| = |/3| = fc; и х ф у < 2к < х & у. С другой стороны, если Хх < Ху = fc, мы имеем х ф у > 2к > х & у. А Г. С. Уоррен-мл. (Н. S. Warren, Jr.) заметил, что Хх < Ху тогда и только тогда, когда х < у х. 41- (a) i(?">n = *27(l-*2fc) = Zr=i fc^27(l-^2fc+1) = г/(1-г)-£Г=о*27(1 + z2 ). Производящая функция Дирихле проще: $2^=1 (Р71)/71* = £(z)/(2z — !)• (б) ! (An)z" = , z27(1 - z). (B)fcSXi(^)7n = sr=o*27((l - г)(1 + г2*)) = где pfc(z) = (1 + z + ----1- z2fc-1)/(l — z2fc+1). (“Магические маски” из (47) соответствуют pk(2).) [В Automatic Sequences Ж.-П. Аллуша (J.-P. Allouche) и Д. Шаллита (J. Shallit) (2003), главе 3, имеется дополнительная информация о функциях р и и, которые они обозначают как Р2 И S2-] 42. ei2ei-1 + (ег + 2)2е2-1 Ч-h (ег + 21— 2)2ег~1 по индукции по г. [D. Е. Knuth, Proc. IFIP Congress (1971), 1, 19-27. Фрактальные аспекты этой суммы проиллюстрированы на рис. 3.1 и 3.2 книги Аллуша и Шаллита.] Рассмотрена также S„(l), где п— 1 S„(z) = ^z"* = (14-z)ei +z(i + z)e2 ч—-4-zr-1 (14-z)er. k=0 43. Непосредственная реализация (63), ‘SET nu,0; SET y,x; BZy.Done; 1H ADD nu.nu.t; SUBU t,y,l; AND y.y.t; PBNZ y.lB’, имеет стоимость (5 + 4pz)u; она превосходит реализа- цию (62) при их < 4, такая же при га = 4 и проигрывает при их > 4. Однако в реализации (62) можно сэкономить 4v, если заменить последнее умножение со сдвигом на ‘у 4— у + (у » 8), у 4- у + (у » 16), у 4— у + (у 3> 32), и 4— у & *f f ’. [Конечно, гораздо лучше использовать отдельную команду MMIX ‘SADD nu,x,0’.] 44. Пусть эта сумма равна и^х. Если мы можем решить задачу для 2а-битных чисел, то можем решить ее и для 2й+1-битных чисел, поскольку и^{22<1х + х') = и^х + и^х' + 2dux. Таким образом, на 64-битной машине само собой напрашивается решение, аналогич- ное (62): Установить z 4— (х 3> 1) & ро и у 4— х — z. Установить z4-((z+(z> 2)) & pi) + ((i/&pi) » 1) и у 4- (y&ipi) Ч- ((«/» 2) &pi). Установить z 4- ((z 4- (z » 4)) & p2) + {(y & p2) » 2) и у 4- (у + (у » 4)) & р2. Наконец и^ 4— (((Az) mod 264) » 56) Ч- ((((В?/) mod 264) » 56) 3), где А = (11111111)25б и В = (01234567)25б. Но на машине MMIX со встроенным контрольным суммированием есть лучшее решение, предложенное Д. Даллосом (J. Dallos). SADD nu2,x,m5 SADD t,x,m3 2ADDU nu2,nu2,t SADD t.x.mO SADD t.x.m4 2ADDU nu2,nu2,t 2ADDU nu2,nu2,t SADD t,x,m2 SADD t.x.ml 2ADDU nu2,nu2,t 2ADDU nu2,nu2,t | [В общем случае и^х = ^2к2ки(х к Рк). См. Dr. Dobb’s Journal 8,4 (April 1983), 24-37.]
7.1.3 ОТВЕТЫ К УПРАЖНЕНИЯМ 659 45. Пусть d = (х — у) & (у — ж); следует проверить выполнение соотношения d & у ф 0. [Рокицки (Rokicki) обнаружил, что эта идея, именуемая солекснылс упорядочением, может использоваться с адресами узлов для псевдослучайных бинарных деревьев поиска или декартовых деревьев, как если бы они были дерамидами (treaps), без необходимости в до- полнительном случайном “приоритетном ключе” в каждом узле. См. U.S. Patent 6347318 (12 February 2002).] 46. SADD t.x.m; NXOR y,x,m; CSOD x,t,y; маскат равна (В общем случае эти команды дополняют биты, указанные т, если эти биты имеют нечетную четность.) 47. у ч— (х » <5) & 0, z ч— (х & в) <5, х ч— (х & т) | у | z, где т = 0 | (0 <5). 48. Для заданного 5 имеется sg = HjZo различных «5-обменов, включая тож- дественную перестановку. (См. упр. 4.5.3-32.) Суммирование по <5 дает общее количество, равное 1 + - 1)- 49. (а) Множество S = {ai<5i + • • • + am«5m | {ai, - • •, ат} С {—1,0, +1}} для перемещений <51, ..., <5т должно содержать {п — 1, п — 3,..., 1 — п}, поскольку k-й бит должен быть обменен с (n + 1 — к)-м битом для 1 < к < п. Следовательно, |S| > п. AS содержит не более Зт чисел, не более 2 Зт-1 из которых нечетны. (б) Ясно, что s(mn) < s(m) + з(п), поскольку можно обратить порядок битов т полей по п бит каждое. Таким образом, s(3m) < т и з(2 3m) < т + 1. Кроме того, обращение порядка Зт бит использует только «5-обменов с четными значениями <5; соответствующие (<5/2)-обмены доказывают, что мы имеем s((3,rl ± 1)/2) < т. Эти верхние границы соответ- ствуют нижним границам (а) при тп > 1. (в) Строка aafdftyzu) с |a| — |/3| = |0| = |\&| = |ш| = п может быть изменена на u/zt^efiaa с помощью (Зп+1)-обмена с последующим (п+1)-обменом. Затем з(п) дальнейших обменов обращают весь порядок. Следовательно, s(32) < s(6) -I- 2 = 4, а s(64) < 5. А равенство выполняется согласно (а). Кстати, з(63) = 4, поскольку s(7) = s(9) = 2. Нижняя граница в (а) оказывается точным значением з(п) для 1 < п < 22, с тем исключением, что з(16) = 4. 50. Выразим п= (tm ti<о)з в сбалансированной тернарной записи. Пусть nj = (tm tj)s и 6j = 2nj + tj-i, так что n^-i — Sj = nj и 2<5j — n3~i = nj + tj-i для 1 < j' < m. Пусть Eo = {0} и JEj+i = E} U {tj — x | x G Ej} для 0 < j < m. (Таким образом, например, Ei = {0, to} и Ei = {0, to, ti, ti — to}.) Заметим, что из e G Ej вытекает |e| < j. Допустим по индукции no j, что «5-обмены для <5 = <5i, ..., Sj заменяют n-битовое слово ax... a3J на a33 ... ai, где каждое подслово cck имеет длину nj + е*, для некоторого £*, G Ej. Если n3+i > j, «Sj+i-обмен внутри каждого подслова будет сохранять это допущение. В противном случае каждое подслово а*, имеет |а*;| < nj + j < 3n,+i +1 + j < 4j + 1 < 4m. Следовательно, 2Л-обмены для [lg4Tnj > к > 0 обратят порядок их всех. (Заметим, что 2Л-обмен подслова размером t, где 2к < t < 2fc+1, сводит его к трем подсловам размером t — 2k, 2fc+1 - t и t - 2к.) 51. (а) Если с = (cj-i... co)i, мы должны иметь ва-i = Cd-ipd,d-i Но для 0 < к < d — 1 мы можем взять вк = ckpd,k Ф вк, где вк— любая маска С p.d,k- (б) Пусть G(d, с) — множество всех таких последовательностей масок. Ясно, что G(l,c) = {с}. Когда d > 1, мы рекурсивно получим G(d, с) = {(0о, - - -, 0d-2,0d-i, 0d-2,..., 0о) | 0fc = 0k-i t вк-i, 0k = в'к_1 { ft'-J, с помощью “zip-операции” последовательностей (0q, ... , 0d-3,0d-2,$d-3, • ,0o) £ G(d— l,c') И (00, • • • ,0d-3,0d-2,^d-3, >^o) € &(d — l,c") для некоторых подходящих 00 , 00, с' и с". Когда с нечетно, двудольный граф, соответствующий (75), имеет только один цикл; так что (0о,0о,с',с") имеет вид либо (pd,o,0, |’с/2], |c/2J), либо (0,pd.o, [с/2], |’с/2]). Но
660 ОТВЕТЫ К УПРАЖНЕНИЯМ 7.1.3 когда с четно, двудольный граф имеет 2d 1 двойных связей; так что во = во представляет собой произвольную маску С иао, и с' = с" = с/2. [Кстати, lg|G(d,c)| = 2d~1 (d — 1) — _ i)(2fc-i_ |2fc-1 —cmod2fc|).] В обоих случаях мы можем, таким образом, положить ва-2 = = во = 0 и опу- стить вторую половину (71) полностью. Конечно, в случае (б) мы должны выполнять циклический сдвиг непосредственно, вместо применения (71). Но упр. 58 доказывает, что с помощью (71) с в к = 0 для всех к могут быть обработаны многие другие полезные перестановки, следующие за циклическим сдвигом. Перестановки, обратные к ним, могут быть обработаны с вк = 0 для 0 < к < d — 1. 52. В следующих решениях, где это возможно, делается в} = 0. Маски в мы выразим через д, например, записывая дв.з & До вместо указания запрошенной шестнадцатеричной константы *55555555; запись через д короче и более поучительна. (а) вк = ро,к & р,5 и вк = дел & (дл+1 Ф дл-i) для 0 < к < 5; в5 = в4. (Здесь д-i = 0. Чтобы получить “другое” идеальное тасование, {хз^хвз 11X33X0X32)2, положим во = Дб,о & Д1 •) (Ь) во = вз = во = Дб.О & Дз; в1 = в4 = в\ = Дб,1 & Д4! = вз = 02 = Дб,2 & Дз; 0з = в4 = 0. [См. общую теорию в J. Lenfant, IEEE Tians. С-27 (1978), 637-647.] (в) во = Дб,0 & Д45 в1 = Дб,1 & ДЗ! вз = в4 = Дб,2 & Д45 вз = вз = дв,з & Дз; во = дв,о & Дг; вг = дед & дз; вз = во Ф вз-, вз = 01 ф 0з; 04 = 0. (г) вк = ро,к & Дз—fc для 0 < fc < 5; 0fc = 0fc для 0 < к < 2; вз = в4 = 0. 53. Можно записать чр как произведение d — t транспозиций, (uivi)... {ua-tVa-t) (см. упр. 5.2.2-2). Перестановка, вызванная одной транспозицией {uv) индексных цифр, при u < v соответствует (2” — 2“)-обмену с маской & Д«- Мы должны выполнить такой обмен для (uivi) первым, ..., {ua-tVd-t)—последним. В частности, идеальное тасование в 2d-6HTOBOM регистре соответствует случаю, где перестановка ф = (01... (d—1)) является одноцикловой; так что оно может быть достигнуто выполнением таких (2” — 2“)-обменов для {u, v) = (0,1), ..., (0, d — 1). Например, когда d = 3, двушаговая процедура представляет собой 12345678 •-> 13245768 <-> 15263748. [Гай Стил (Guy Steele) предложил альтернативную (d — 1)-шаговую процедуру: можно выполнить 2fc-обмен с маской ра,к+1 & Дл для d — 1 > к > 0. Когда d = 3, его метод отображает 12345678 •-> 12563478 >-> 15263748.] Транспонирование матрицы в упр. 52, (б) соответствует d = 6 и {u,v) = (0,3), (1,4), (2,5). Эти операции являются шагами, которые представляют собой 7-, 14- и 28-обмен для транспонирования матрицы размером 8x8, проиллюстрированного в тексте раздела; они могут быть выполнены в любом порядке. В упр. 52, (в) используйте d = 6 и {и, v) = (0,2), (1,3), (0,4), (1,5). Упр. 52, (г) выполняется так же легко, как и 52,(6), с {u,v) — (0,5), (1,4), (2,3). 54. Транспонирование заключается в обращении порядка битов побочных диагоналей (на- правленных с юго-запада на северо-восток). Последовательные элементы этих диагоналей находятся в регистре на расстоянии т — 1 один от другого. Одновременное обраще- ние порядка битов во всех диагоналях соответствует одновременному обращению порядка битов в подсловах размером 1, ..., т, которое может быть выполнено с помощью 2к- обменов для 0 < к < [lg m] (поскольку такое транспонирование легко выполняется при т, являющемся степенью 2, как показано в разделе). Вот как выглядит процедура для т = 7.
7.1.3 ОТВЕТЫ К УПРАЖНЕНИЯМ 661 Задано 00 01 02 03 04 05 06 10 11 12 13 14 15 16 20 21 22 23 24 25 26 30 31 32 33 34 35 36 40 41 42 43 44 45 46 50 51 52 53 54 55 56 60 61 62 63 64 65 66 6-обмен 00 10 02 12 04 14 06 01 11 03 13 05 15 25 20 30 22 32 24 16 26 21 31 23 33 43 35 45 40 50 42 34 44 36 46 41 51 61 53 63 55 65 60 52 62 54 64 56 66 12-обмен 00 10 20 30 04 14 24 01 11 21 31 05 15 25 02 12 22 32 06 16 26 03 13 23 33 43 53 63 40 50 60 34 44 54 64 41 51 61 35 45 55 65 42 52 62 36 46 56 66 24-обмен 00 10 20 30 40 50 60 01 11 21 31 41 51 61 02 12 22 32 42 52 62 03 13 23 33 43 53 63 04 14 24 34 44 54 64 05 15 25 35 45 55 65 06 16 26 36 46 56 66 55. Для заданных х и у сначала устанавливаем х <— х | (х 2*) и у <— у | (у 2*) для 2d < к < 3d. Затем устанавливаем х <- (22d+fc — 2*)-обмен х с маской Дга+к & Дь и у <— (22d+fc — 2d+fc)-o6MeH у с маской р2а+к & Да+k для 0 < к < d. Наконец устанавливаем z <— х & у, затем либо z <— z | (z 2fc), либо z <- z© (z » 2fc) для 2d < к < 3d и z <— z (2n2 — 1). [Идея заключается в формировании двух массивов размером п х п х п— х - (тооо - --iC(n-l)(n-l)(n-l))2 И У = (1/000 • • - У(п-1)(п-1)(п-1) )а С Xijk = djk И ytjh = bjh, затем—в транспонировании координат так, чтобы x^k = aji и yijh = после этого операция х8су выполняет все п3 битовых умножений за один раз. Этот метод представлен в V. R. Pratt and L. J. Stockmeyer, J. Computer and System Sci. 12 (1976), 210-213.] 56. Используйте (71) c 0O = 00 = 0, 0i = *0010201122113231, 02 = *00080e0400080c06, 03 = *00000092008100a2, 04 = *0000000000000f16, 0S = *0000000003199c26, 04 = *00000c9f0000901a, 03 = *003a00b50015002b, 02 = *000103080c0d0f0c и 0i = *0020032033233333. 57. Два варианта выбора для каждого цикла при d > 1 имеют дополняющие установки. Так что можно выбрать настройку, в которой не менее половины модулей перекрещиваний не активны, за исключением среднего столбца. (См. дополнительную информацию по перестановочным сетям в упр. 5.3.4-55.) 58. (а) Каждая отличная от других настройка модулей перекрещиваний дает свою, от- личную от других перестановку, поскольку имеется ровно один путь от входной линии г к выходной линии j для всех 0 < г, j < N. (Сеть с таким свойством называется сетью с автоблокиратором (“banyan”).) Единственный такой путь переносит вход г на линию к) = ((г к) к) + (J mod 2fc) после выполнения к обменивающих шагов. (б) Мы имеем Цйр,г,к) = l(j<p, j, к) тогда и только тогда, когда imod2fc = jmod2fc и йр к = j<p к; так что (♦) является необходимым. Это также достаточное условие, поскольку отображение <р, которое удовлетворяет (♦), всегда может быть направлено таким путем, что jip появляется на линии I = l(jip, j,k) после к шагов: если к > 0, j<p появится на линии l(j<p,j,k — 1), которая является одним из входов для I. Условие (♦) говорит, что его можно маршрутизировать на линию I без конфликтов, даже если I представляет собой 1(йр, i, к). [В IEEE Transactions С-24 (1975), 1145-1155, Дункан Ловри (Duncan Lawrie) доказал, что условие (♦) необходимое и достаточное для произвольного отображения tp множества в себя, когда модули перекрещиваний могут быть обобщенными отображающими модулями 2x2, как в упр. 75. Кроме того, отображение <р может быть только частично определенным, с ]<р = ♦ (“безразличное значение”) для некоторых значений j. Доказательство, приведен- ное в предыдущем абзаце, в действительности демонстрирует более общую теорему Ловри.] (в) г mod 2к = j mod 2к тогда и только тогда, когда к < р(г ф j); г к = j к тогда и только тогда, когда к > X(i ф j); a i<p = jy> тогда и только тогда, когда i = j, если <р представляет собой перестановку. (г) Х(йр ф j<p) > p(i ф j) для всех i £ j тогда и только тогда, когда Х(гт<р ф jrip) > р(гт ф jr) = p(i ф j) для всех i £ j, поскольку т является перестановкой. [Заметим, что обозначения могут вводить в заблуждение: бит j-r<p появляется в позиции j, если переста- новка <р применяется первой, а затем т. Группа Сылова Т включает много интересных и важных перестановок, в том числе обращение порядка битов и циклические сдвиги.
662 ОТВЕТЫ К УПРАЖНЕНИЯМ 7.1.3 Она соответствует настройкам омега-сети, когда перекрещивания длиной 23, являющиеся конгруэнтными по модулю 2^+1, либо все выполняют переключение сигналов, либо все пропускают сигналы без изменения, как единый узел.] (д) Поскольку к) = j для 0 < к < d, перестановка П фиксирует j тогда и только тогда, когда каждый из ее обменов фиксирует j. Таким образом, обмены, выполняемые р и ip, оперируют непересекающимися элементами. Объединение этих обменов дает <pip. (е) Любая установка перекрещиваний соответствует перестановке, которая заставляет модули компаратора Батчера выполнять эквивалентное переключение. 59. Это количество равно 2Md^a,b\ где Ма(а, Ь) представляет собой число перекрещиваний, обе конечные точки которых лежат в [а..Ь]. Для их подсчета положим к = А(а ф Ь), а' = a mod 2* и b' = bmod 2к; заметим, что Ь — а = 2к +Ь' — а' и Md(a,b) = Mk+i(a,',2k + b'). Подсчет перекрещиваний в верхней половине и в нижней половине, а также тех, которые проходят между половинами, дает Mk+i(a', 2fc+bz) = Мь(а',2к — 1)+ЛД(0, Ь')+((Ь' + 1)— a'). Наконец мы имеем Mk(0, b') = S(b' + 1); и 2к — 1) = Mk(0,2к — 1 — a') = S(2k — a') = k2k~1 — ka! + S(a'), где S(n) вычисляется, как в упр. 42. 60. Цикл длиной 21 соответствует шаблону но Ч— зд <-> fi —> wi <-> иг <— ^2 vu -1 —> «21-1 U21, где n2i = ио и 1и ч— v’ или ‘v —> и’ обозначает, что перестановка отправляет и в v, а ‘х <-> у’ обозначает, что х = у ф 1. Мы можем генерировать случайную перестановку следующим образом: для данного ио имеется 2п выборов vo, затем 2п — 1 выборов для гц, только один из которых дает н2 — ио, затем 2п — 2 выборов г>2, затем 2п — 3 выборов для из, только один из которых закрывает цикл, и т. д. Следовательно, производящая функция представляет собой G(z) = П"=1 2n-2j+i • Ожидаемое количество циклов, к, равно G'(l) = Нгп — | Inn + In 2 + 57 + O(n-1). Среднее значение 2к равно G(2) = (2”п!)2/(2п)! = ^/тгп + О^-1^2); а дисперсия составляет G(4) - G(2)2 = (n + 1 - G(2))G(2) = у4Гп3/2 + O(n). 62. Установку перекрещиваний в P(2d) можно сохранить в (2d — l)2d-1 = Nd — бит. Для получения обратной перестановки следует работать справа налево. [См. Р. Heckel and R. Schroeppel, Electronic Design 28,8 (12 April 1980), 148-152. Заметим, что любой способ представления произвольной перестановки требует как минимум lg IV! > Nd — N/In 2 бит памяти; так что с точки зрения используемой памяти это представление близко к оптимальному.] 63. (i) х = у. (ii) Либо z четно, либо х®у < 2max<°’(z~l>/2\ (Когда z нечетно, мы имеем (х t у) » z = (у » [z/2]) J (х » [z/2J ), даже когда z < 0.) (iii) Это тождество выполняется для всех w, х, у и z (а также для любого другого булева оператора вместо &). 64. (((z & до) + (z' | до)) & до) | (((z& до) + (z' | до)) & до). (См. (86).) 65. хи(х2) + v(x2) = хи(х)2 + v(x)2. 66. (a) v(x) = (и(х)/(1 + xs)) mod хп; это единственный полином степени, меньшей чем п, такой, что (1 + xs)v(x) = и(х) (по модулю хп). (Или, что то же самое, и является един- ственным n-битовым целым числом, таким, что (к® (г'< 5)) mod 2п = и.) (б) Можно считать, что п = 64m и что и = (wm-i • • .121240)26-4, v = (ym-i .vivo)^- Установить с ч— 0; затем, используя упр. 36, установить Vj <— и® ф (—с) и с <— Vj 63 для j = 0, 1, ..., m — 1. (в) Установить с <— vo <— по; затем Vj 1— Uj ® с и с 4— nj для j = 1, 2, ..., m — 1. (г) Начать с с<- Ои для j = 0, 1, ..., т — 1 выполнить следующее: установить t <— Uj, t«-1 ® (t <g 3), t <-1 ф (t <g 6), t <-1 ® (t«: 12), t <-1 ® (t«: 24), t«-1 ® (t«: 48), <-1 ® c, c <- (t » 61) x *9249249249249249.
7.1.3 ОТВЕТЫ К УПРАЖНЕНИЯМ 663 (д) Начать с v <— и. Затем для j = 1, 2, ..., т — 1, установить Vj 4— Vj (±) 3) и (если j < т — 1) dj+i «— vj+i ф (vj-i » 61). 67. Пусть п = 21 — 1 и т = п — 2d. Если ~п < к < п, мы имеем a:2fc = xm+t + х* (по модулю хп + хт + 1), где t — 2к — п нечетно. Следовательно, если v = (vn-\... i>i 110)2, число w = и ф (((и » d) ф (u » 2d) ф (и » 3d) ф • • • ) &-2i-d) оказывается равным (i)n_2 • • - vevivn-i. . 1’21’0)2- Например, когда I = 4 и d = 2, квадрат ивх6 Ч----F щх + ио по модулю (х7 + х3 + 1) равен ивх5 + и$х3 + (ив Ф гм)^1 + (ив ф из)х6 + (ив ф ид Ф и2)х4 + иц2 + uq. Для вычисления v мы, таким образом, выполняем идеальное тасование, v = [ги/21] t (wmod2*). Число ги может быть вычислено методами, подобными использованными в предыдущем упражнении. [См. R. Р. Brent, S. Larvala and Р. Zimmer- mann, Math. Comp. 72 (2003), 1443-1452; 74 (2005), 1001-1002.] 68. SRU t,x,delta; PUT rM.theta; MUX x,t,x. 69. Заметим, что процедура может работать некорректно, если мы попытаемся выполнить 2d-1 -сдвиг первым, а не последним. Ключ к доказательству того, что стратегия, заклю- чающаяся в том, чтобы сначала выполнять малые сдвиги, работает корректно, состоит в рассмотрении промежутков между выбранными битами; мы докажем, что длины этих промежутков после 2к-сдвига кратны 2fc+1. Рассмотрим бесконечную строку х* = ---ll402 1‘302 1‘202 1‘*02 1‘°, которая пред- ставляет ситуацию, где ti > 0 элементов необходимо сдвинуть на 2к1 позиций вправ^. 2*-сдвиг с любой маской вида вк = ... 0t4*2 + lf30t2*2 + I*10*° оставляет нас в ситуации, представленной строкой Xfc+i = • • • lT202fc+1lT102fc+IlT°, в которой ровно 7) = t2i + t2i+i элементов необходимо сдвинуть вправо на 2fc+1/ позиций. Так что исходное утверждение выполняется по индукции по к. 70. Пусть фк — вк (В (&к 1), так что вк = в обозначениях из упр. 36. Если в ответе к предыдущему упражнению взять *2fc+1 = О2*I2*, мы имеем й = \ и фк+1 = (V’k&0k)2>2\ Следовательно, мы можем действовать следующим образом. Установить ф <— х, к <— 0 и повторять следующие шаги до тех пор, пока ф 0: установить х «— ф и затем х «— х ф (х 21) для 0 < I < d, затем вк <— х, ф 4— (ф & х) » 2к и к 4— к + 1. Вычисления завершаются при к = Арх+1; остальные маски вк, ..., 0d-i, если таковые имеются, нулевые, и соответствующие шаги в (80) можно опустить. “Минимальные” маски, для которых *2fc+1 = 02fc+1 в ответе к упр. 69, получаются, если операции 1вк 4-х,ф4- (ф&.х)^>2к’ в приведенном выше цикле заменить на 1ф 4— (ф& х) » 2к, вк 4— х(х + ф)\ [См. раздел “Сжатие, или обобщенное извлечение” в Н. S. Warren, Jr., Hacker’s Delight (Addison-Wesley, 2002), §7-4 (Генри С. Уоррен, Алгоритмические трюки для программистов (М.: Издательский дом “Вильямс” 2003)); а также G. L. Steele Jr., U.S. Patent 6715066 (30 March 2004). В ЭВМ БЭСМ-6, разработанной в 1965 году, реализована команда сжа- тия под именем “сборка” Ее команда “разборка” действует в противоположном направ- лении.] 71. Начать с х 4— у. Выполнить (—2*)-сдвиг х с маской вк 2к для к = d — 1, ..., 1, 0, используя маски из упр. 70. Наконец, установить z 4— х (или z 4— х х, если нужен “чистый” результат). 72. Будем считать, что крайний слева бит маски, Xn-i, равен нулю, поскольку это не играет никакой роли. Тогда результат (z(jv_i)v - - - zivzo^)2 любого сбора с переворотом соответствует перестановке с O99 < • • • < kip > • • • > (N—l)tp, где к = vx. Например, если N = 8 и х = (00101100)2, результат равен (zoZiZ4Z6ZtZ5Z3Z2)2. Так что ip G Я согласно упр. 5.3.4-11 и 58, (е).
664 ОТВЕТЫ К УПРАЖНЕНИЯМ 7.1.3 Кроме того, маски во, &1, • •, ва-i для 1-, 2-, ..., 2d-1-o6MeHa могут быть вычислены следующим образом: перестановка = ip~ удовлетворяет соотношению = (N-l-j)xj + Sj, где Sj = Xj-i 4--bxi + Xo подсчитывает единицы, следующие за битом Xj маски. Пусть фо = Ф и = (L'0fc/2fcJ mod 2) & рк, где фк+i представляет собой 2*-обмен фк с маской вк- (В нашем примере s-i... s\so = 33221000 и (Ох?) • - - (6xi)(7xo) = 01030067; следовательно, = (7’0)... (1^)(0^) = 33221000 + 01030067 = 34251067. Тогда в0 = (10011001)2 & до = (00010001)2; ф1 = 34521076; в1 = (10010011)2 & щ = (00010011)2; ф2 = 32547610; в2 = (00111100)2 & дг = (00001100)2- В общем случае j-фк = j (по модулю 2*).) Представим каждую перестановку фк как множество d битовых векторов, а именно как “битовые срезы” фк mod 2, [^k/2j mod 2, и т. д. Тогда для этого вычисления будет достаточно O(d2) битовых операций. Операция разброса с переворотом (scatter-flip), которая обращает действие сбора с пе- реворотом, получается с помощью той же сети с перекрещиваниями, но работающей справа налево (первым выполняется 2d-1-обмен, а последним — 1-обмен). [См. Journal of Signal Processing Systems 53 (2008), 145-169.] 73. (а) Эквивалентно d операций sheep-and-goats должны быть способны преобразовать слово х” = (a:(2d_i)K .. . х^хо^г в (rc2**—i • • .®1®о)г для любой перестановки тг множества {0,1,..., 2d—1}. Это может быть сделано с помощью поразрядной сортировки в двоич- ной системе счисления (алгоритм 5.2.5R): сначала перенести биты с нечетными номерами влево, затем перенести влево биты j для нечетных U/2J и т. д. Например, когда d = 3 и х” = (хзХ1ХоХ7Х5Х2ХбХ4)г, три операции последовательно дают (хзХ1Х?Х5ХоХ2ХбХ4)2, (2:32:72:22:62:12:52:02:4)2, (2:72:62:52:42:32:22:12:0)2. [См. Z. Shi and R. Lee, Proc. IEEE Conf. ASAP’00 (IEEE CS Press, 2000), 138-148.] (б) В случае сбора с переворотом та же стратегия всегда дает (xg(2d_i) • • • хд(1)хд(о'))2, где д(к) представляет собой бинарный код Грея 7.2.1.1—(9). Так, пример из п. (а) теперь Имеет ВИД (2:52:72:12:32:02:22:62:4)2, (ХбХ2ХзХ7Х5Х1ХоХ4)2, (Х4Х5Х7ХбХ2ХзХ1Хо)2. 74. Если |52 С21 — 52 c2i+i I = 2Д > 0, мы должны забрать Д у “богатой” половины и отдать “бедной” В бедной части имеется позиция I с ci = 0; в противном случае эта половина должна дать сумму, не меньшую 2d-1. Циклический 1-сдвиг, который изменяет позиции от I до (I + t) mod2d, делает c'J+fc = с;+ь+1 для 0 < к < t, c'l+t = ci+t+i — <5, c'J+t+i = <5 и c»+k = ci+k Для всех прочих fc; здесь <5 может быть любым требуемым числом в диапазоне 0 < <5 < ci+t+i. (В этих формулах мы рассматриваем все индексы по модулю 2d.) Так что мы можем использовать наименьшее четное t, такое, что сц-i + сц.3 + • • • + сц-t+i = ci + сц-2 + • • • + ci+t + Д + <5 для некоторого б > 0. (1-сдвиг не обязан быть циклическим, если мы допустим сдвиг влево вместо сдвига вправо. Но свойство цикличности может потребоваться в последующих шагах.) 75. Эквивалентно, для данных индексов 0 < io < ii < • • • < i«-i < ie = 2d и 0 = jo < ji < < ja-i < js = 2d мы хотим отобразить (x2d_i... £1X0)2 •-» (x^d-i)^ ... xi^xo^b, где jip = ir для jr < j < jr+i и 0 < г < s. Если d = 1, это выполняет модуль отображения. Когда d > 1, мы можем настроить левые перекрещивания таким образом, чтобы они маршрутизировали вход гг в линию irffi((ir+r) mod 2). Если s четно, мы рекурсивно требу- ем от одной из сетей F(2d-1) внутри F(2d) решения задачи для индексов [{io, г2, , ia}/2] и L{jo 1J2, • • •, Js}/2], в то время как другая решает ее для [{ii,i3,... ,i«-i, 2d}/2] и [{jo> J2,..., je}/2]. Теперь справа от F(2d) можно проверить, что, когда jr < j < Jr+i, модуль отображения для линий j и j ф 1 имеет вход ir на линии j, если j = г (по модулю 2), в противном случае гг находится на линии j ф 1. Аналогичное доказательство работает для нечетного s. Например, если (io,...,is) = (jo,---,js) = (0,1,3,5,7,8), в подзадачах i = j = (0,1,3,4) и (0,2,4); Х7...Х0 •-> Х6Х7Х5Х4Х2Х3Х1Х0 !-»••••-» Х5Х7Х5Х3Х1Х3Х1Х0 •-> Х7Х5Х5Х3Х3Х1Х1Х0.
7.1.3 ОТВЕТЫ К УПРАЖНЕНИЯМ 665 Примечания. Эта сеть представляет собой немного усовершенствованную конструк- цию Ю. П. Офмана, Труды моек. мат. общества 14 (1965), 186-199. Можно реализовать соответствующую сеть, подставляя “^-отображения” вместо <5-обменов; вместо (69) мы используем две маски и выполняем семь операций вместо шести: у ч— хф (i>i5), х ч— х ф (у 8с 0) Ф ((у & 0) <5). Это расширение (71), таким образом, требует только d дополнительных единиц времени. 76. Когда отображающая сеть осуществляет перестановку, все ее модули должны дей- ствовать как перекрещивания; следовательно, G(n) > 1g п!. Офман доказал, что G(n) < 2.5n 1g п, и отметил в сноске, что константа 2.5 может быть улучшена (не приводя никаких дополнительных деталей). Мы видели, что в действительности G(n) < 27ilg7i. Заметим, что G(3) = 3. 77. Представим тг-сеть как (rc2"-i • • • 2:12:0)2, где Xk = [бинарное представление к является возможной конфигурацией нулей и единиц при применении сети ко всем 2" последова- тельностям нулей и единиц], для 0 < к < 2П. Таким образом, пустая сеть представлена как 22" — 1, а сортирующая сеть для ti = 3 имеет представление (10001011)2. В общем случае х представляет сортирующую сеть для п элементов тогда и только тогда, когда оно представляет тг-сеть и vx = 71+1, тогда и только тогда, когда 2: = 2°+21 + 23+27 -|-F 22" _ 1. Если в соответствии с этими соглашениями х представляет а, то представлением a[i:j] является (х ф у) | (у » (2n-’ - 2”“^)), где у = х & & д„_л . [См. V. R. Pratt, М. О. Rabin, and L. J. Stockmeyer, STOC 6 (1974), 122-126.] * 78. Если к > lg(7n — 1), тест корректен, поскольку мы всегда имеем xi + Х2 + • • + xm > xi I X2 I • • • I xm, причем равенство достигается тогда и только тогда, когда множества являются непересекающимися. Кроме того, мы имеем (xi + • • • + xm) — (xi | • • • | xm) < (тп - l)(2n-fc-1 + • • • + 1) < (тп - l)2n-fc < 2n. Обратно, если тп>2к+2мп> 2к, тест некорректен. Например, мы можем иметь ан + • • • + хт = (2fc + i)(2n-fc - г71-2*-1) + г71-*-1 = 2П + (2n-fc - г71-2*-1). Но если тг < 2к, тест остается корректным при тп = 2к + 2, поскольку наше доказа- тельство показывает, что в этом случае xi Ч-l-xm — (xi | • • • |a:m) < (2fc + l)(2n-fc —1) < 2”. 79. Xi = (х—1)&х- (А формула а:/ = {{х—Ъ— 1)&а)+Ь соответствует (85).) Эти методы для а/ и Xi являются частью подпрограмм “битового колдовства” Йорга Арндта (Jorg Arndt) (2001); их происхождение неизвестно. 80. Вероятно, наиболее красивый способ состоит в том, чтобы начать с х ч— х <— 1 как знакового числа; затем, пока х > 0, устанавливать х Ч— х 8с х, посещать х и устанавливать х Ч— 2х — х- (Операция 2а: — х фактически может быть выполнена одной командой MMIX, ‘2ADDU х,х, minuschi’.) Но этот трюк не работает, если х так велико, что уже “отрицательно’.’ Немного более медленный, но и более общий метод начинает с х ч— х и, пока х ф 0, выполняет следующее: устанавливает t ч— х 8с —х, посещает х ~ t и устанавливает х Ч— х — t. 81. ((z & х) ~ (z‘ X)) & X- (Один из способов проверить эту формулу—воспользовать- ся (18).) 82. Да, положив z = 2! в (86): w | (z 8с х), где w = ((z 8i х) + (z | х)) & X- 83. (Приведенная далее итеративная процедура передает биты у вправо, в зазоры рас- сеянного аккумулятора t. Вспомогательные переменные и и v помечают соответственно левую и правую границы каждого зазора; они удваиваются в размере, пока не оказываются стертыми переменной ш.) Установить t ч— z & х, Ч— (х » 1) & Х> v ((X 1) + 1) & X, w ч— 3(u'8cv), и ч— Зи', v Ч— 3v и к Ч— 1. Затем, пока и 0, выполнять следующие действия: t ч— 11 ((t» к) 8с и'), fc Ч— fc 1, и Ч— и & w, Ч— щ & w, w ч— ((щ &: (и 2> 1) & й) (fc + 1)) — {(и& (г> 1) & г>) » fc), гг' ч— (гг & й) » fc, г> Ч— v + ((г> & й) fc), и ч— гг + гг'. Наконец вернуть ответ ((t» 1) & х) I (z & х)-
666 ОТВЕТЫ К УПРАЖНЕНИЯМ 7.1.3 84. z v- х = w — (z & у), где w = (((z & х) 1) + X) & X появляется в ответе к упр. 82; z —т х представляет собой величину t, вычисляемую (с большими трудностями) в ответе к упр. 83. 85. (а) Если х = L0C(a[i, j, fc]) представляет собой позицию барабана, соответствующую чередующимся, как было показано, битам, то LOC(a[i + 1, у, fc]) = гг®((я:®((я:&Х)-х))&Х) и LOC(a[i — 1, у, fc]) = x ф ((x ф ((x & у) — 1)) & X), где X = (И1И)8 согласно (84) и ответу к упр. 79. Формулы для LOC(a[z, j ± 1, fc]) и LOC(a[i, j, к ± 1]) аналогичны, с масками 2х и4х- (б) Для произвольного доступа будем надеяться, что у нас окажется достаточно места для таблицы длиной 32, дающей /[(гдШгйзоЪ] = (гдШгйцОв- Тогда LOC(a[i, j, fc]) = (((/[fc] <Д) + /[)’]) 1)+/И- (На древних машинах битовое вычисление f было бы гораздо хуже табличного поиска, поскольку используемые операции с регистрами у них столь же медленные, как и выборка из памяти.) (в) Пусть р—позиция страницы, находящейся в настоящее время в быстрой памяти, и пусть z = —128. Если при доступе к позиции х оказывается х & z / р, необходимо считать 128 слов с позиции х 8с z барабана (после сохранения текущих данных (если они были изменены) в позицию барабана р); затем нужно установить р ч— х 8с z. [См. J. Royal Stat. Soc. В-16 (1954), 53-55. Эта схема размещения массива во внешней памяти была разработана около 1960 года Э. В. Дейкстрой (Е. W. Dijkstra), который назвал ее методом “застежки-молнии” (“zip-fastener”). Она часто переоткрывалась, например, в 1966году Г. М. Мортоном (G. М. Morton), а позже разработчиками квадрадеревьев (quadtrees); см. Hanan Samet, Applications of Spatial Data Structures (Addison-Wesley, 1990). См. также современное состояние дел в R. Raman and D. S. Wise, IEEE Trans. C57 (2008), 567-573. Георг Кантор (Georg Cantor) рассмотрел чередующиеся цифры десятичных дробей в Crelle 84 (1878), 242-258, §7; но он заметил, что эта идея не приводит к простому взаимно однозначному соответствию между единичным отрезком [0.. 1] и единичным квадратом [0-.1] х [0..1].] 86. Если (pz,</,rz) крайних справа битов и (р",q", г") прочих битов (i,j, к) находятся в ча- сти адреса, которая не влияет на номер страницы, то общее количество ошибок отсутствия страницы составляет 2((2Р~Р — l)2q+r + (2q~9 — l)2p+r + (2Г-Г — 1)2р+в). Следовательно, мы хотим минимизировать 2~р + 2~9 + 2-г по всем неотрицательным целым числам (pz,Qz,r',p",q",r"), таким, чтор'+р" < р, </+qzz < q, г'+r" < г, р'+q' +r' +р"+q" +r" = s. Поскольку 2“ + 2Ь > 2“-1 + г*”*-1, когда а и Ь представляют собой целые числа, такие, что а > b + 1, минимум (для всех s) осуществляется, когда мы выбираем биты справа налево циклически до их исчерпания. Например, когда (р, д, г) = (2,6,3), функция адресации должна иметь вид (jsjijskijikijiiikojoio)!- В частности, схема Точера (Tocher) является оптимальной. [Но такое отображение не обязательно наилучшее, когда размер страниц не равен степени 2. Например, рассмотрим матрицу размером 16 х 16; функция адресации (jsiaiiiiiojijijo)! лучше функции (jaiajzizjiiijoio)? для всех размеров страниц от 17 до 62, за исключением размера 32, для которого обе эти функции одинаково хороши.] 87. Установить х Ч— х & ~((а: 8с 1QMQQQQO1) 1); каждый байт (а-г.. ,ао)г тем самым изменяется на (arOefasAde)^ • • .00)2. То же самое преобразование работает и для 30 дополнительных букв в дополнении “Latin-1” к ASCII (например, ? i-> ?); но есть и один сбой — у 1-> ?. [Дон Вудс (Don Woods) использовал этот трюк в своей игровой программе “Adventure” (1976), переводя пользовательский ввод в верхний регистр перед его поиском в словаре.] 88. Установить z ч— (х ф у) 8с h, затем z ч— ((х | h) — (у 8с h)) ф z.
7.1.3 ОТВЕТЫ К УПРАЖНЕНИЯМ 667 89. t +- х | у, t t— t & (t 1), z <— {х & у 8с До) | (4 & до). [Из тестовой программы “nasty” для компилятора SWARC Г. Г. Дитца (Н. G. Dietz) и Р. Д. Фишера (R. J. Fisher) (1998), оптимизированного Т. Далхаймером (Т. Dahlheimer).] 90. Вставьте ‘z +- z | ((а:ф у) 8с I)' либо до, либо после ‘z <— {х 8с у) + z’. (Порядок не имеет значения, поскольку х + у — х®у (по модулю 4), когда х + у нечетно. Следовательно, MMIX может выполнять округление к нечетному числу без дополнительной стоимости, используя команду MOR. Округление к четному числу в неоднозначных ситуациях более сложное и в случае арифметики с фиксированной точкой не имеет преимуществ.) 91. Если |[т,2/] обозначает среднее, как в (88), то искомый результат получается с помо- щью повторения следующих операций семь раз, с последующим выполнением Z <- Цт, у] еще один раз: zt—±[x,y], tt—a8ch, т<-(4<;1)-(4>7), х 4—(т 8с z) I (т 8с х), у <— (т8с z) | (т8с у), at— а<^1. Хотя ошибки округления накапливаются на восьми уровнях, получающаяся абсолютная ошибка никогда не превышает 807/255. Более того, она составляет и 1.13 при усредне- нии по всем 2563 случаям, и она меньше 2 с вероятностью ~ 94.2%. При округлении к нечетному, как в упр. 90, максимальная и средняя ошибки снижаются до 616/255 и » 0.58; вероятность ошибки < 2 вырастает до и 99.9%. Такое несмещенное округление используется следующим MMIX-кодом: х GREG ;у GREG ;z GREG XOR t.x.y MOR m,ffhi,alf' alf GREG ;m GREG ;t IS $255 MOR z,rodd,t PUT rM,m Повторить семь раз: AND t,x,y MUX x,z,x rodd GREG «4020100804020101 ADDU z,z,t MUX y,y,z ffhi GREG -1«56 SLU alf,alf,1 но с пропуском последнего SLU, а затем следует вновь повторить первые четыре команды. Общее время работы для восьми а-смешиваний (66г?) меньше стоимости восьми умноже- ний. 92. Мы получим Zj = [(т^ +yj)/2] для каждого j. (Этот факт, замеченный Г. С. Уорреном- мл. (Н. S. Warren, Jr.), следует из тождества х + у = ((а: | у) 1) — {х ф у). См. так?ке следующее упражнение.) 93. х — у = (х ф у) — {{х 8су) <£. 1). (“Заемы” вместо “переносов’.’) 94. (х — l)j = {xj — 1 — bj) mod 256, где bj представляет собой “заем” из полей справа. Так что tj ненулевое тогда и только тогда, когда {xj ...2:0)256 < (1 1)256 = (256j+1 — 1)/255. (Соответственно, ответами к заданным вопросам являются “да” и “нет’.’) В общем случае, если константа I может иметь любое значение (1у.. ./1/0)256, опера- ция (90) делает tj / 0 тогда и только тогда, когда (xj ... 2:0)256 < (lj ... /0)256 и Xj < 128. 95. Использовать (90): выполнить проверку h8c(t(x®((x^>8) + (х^56))) 14(г:ф((з:2>16) + (2:^ 48))) [ 4(2: ф ((2:» 24) +(2: 40))) | 4(г:ф((2:»32) + (2:<^:32)))) = 0, где t(x) = (х — Г)8сх. (Эти 28 шагов сводятся к 20, если доступен циклический сдвиг, или к 11 при использовании MXOR и BDIF.) 96. Предположим, что 0 < х,у < 256, хь, = |_2:/128], xi = х mod 128, уь = [y/128j, yi = у mod 128. Тогда [2: < 3/] = (жлз/тДг:/ < 2/г]); см. упр. 7.1.1-106. А [2:1 <pj] = [l/z+127—xi > 128]. Следовательно, [2: < у] = [(xj/z)/128J, где z = (х 8с 127) + (у 8с 127). Отсюда следует, что t = h 8с {xyz) обладает требующимися свойствами, когда z = (х 8с h) + {у 8с h). Эта формула может также быть записана как t = h 8с ~(xyz), где z = ~((т 8с h) + {у 8с h)) = {x\h) — (y8ch) согласно (18).
668 ОТВЕТЫ К УПРАЖНЕНИЯМ 7.1.3 Чтобы получить подобную тестовую функцию для [xj <J/j] = 1 — [yj <Tj], мы просто обмениваем х <-> у иберем дополнение: t <— h8c~{xyz) = h8c(xyz), где z = (х &h) + (у &h). 97. Установить х <— хб '********', у' 4- х&у, t 4— h&c(x\ ((rr | h) — 1))8с(у | ((j/' | h) — I)), m*- (t<l)-(t>7), t | ((я/ | h) — /)), z <- (m& '*»*»*»*»') | (m&y). (20 шагов.) 98. Установить и <— x ф у, z <— (х & h) + (у & h), t <— h & (x ф (u | (x ф z))), «<-((*«: i)- (t 2> 7)) & и, z <— x ф v, w <— у ф v. [Эта 14-шаговая процедура включает ответ к упр. 96 для вычисления t = h & (xyz} с использованием метода отпечатка из раздела 7.1.2 для вычисления медианы только за три шага, когда известно х ф у. Конечно, MMIX-решение гораздо быстрее: BDIF t,x,у; ADDUz,y,t; SUBU v,x,t.] 99. В этом попурри для каждого из восьми байтов решается задача иного вида; мы должны переформулировать условия так, чтобы они укладывались в общую схему: /о = [®о Ф '!' <0], /1 = [®i ф >0], /г = [®2 < - 1], /з = [т3 > 'z'], /4 = [т4 > 'а' - 1], fs = [т5 ф h' < 9], /6 = [Ze Ф 255 > 86], /7 = [х? ф 1 ?1 < 3]. Ага! Мы можем использовать формулы из ответа к упр. 96, при необходимости приспосабливая d для переключения меж- ду < и >: а = (' ?1 (255)h'000' ♦' '! ')25б = *3fff300000002а21; b = h = *7f7f7f7f7f7f7f7f; c = h $£ ~(3(86)9('a' — IJ’z'^A' — 1)00)г5б = *7c29761f053f7f7f (самое сложное); d = *8000800000800080; и e = h = *8080808080808080. 100. Мы хотим получить Uj = Xj + yj + Cj — lOcj+i и Vj = Xj — yj — bj + lOfcj+i, где Cj и bj представляет собой “перенос” и “заем” в цифровой позиции j. Установим и' ч— (х + у + (6... 66)1б) mod 264 и v' Ч— (х — у) mod 264. Затем найдем u'j = Xj + yj + Cj + 6 — 16cj+i и v'j = Xj — yj — bj + 165j+i для 0 < j < 16 по индукции no j. Следовательно, и' и v' имеют один и тот же шаблон переносов и заемов при работе в десятичной системе счисления, и мы имеем и = и' — 6(cie... C2Ci)ie, v — v — 6(bie... bsbijie- Таким образом, требуемые результаты дают следующие схемы вычислений (10 операций для сложения, 9 для вычитания): у Ч- у + (6... 66)16, и' Ч- х + у, t Ч— {ху'и) & (8... 88)16, и Ч— и — t + (t 2); v Ч— х — у. t ч— (xyv1) & (8... 88)i6, v Ч— v — t + (t 2). 101. Для вычитания установите z4—x—y; для сложения установите z4—T+j/+*e8c4c4fcl8, где эта константа строится из 256 — 24 = *е8, 256—60 = *с4 и 65536—1000 = *fcl8. Заемы и переносы между полями осуществляются так, как если бы выполнялось вычитание или сложение в системе счисления со смешанным основанием. Остается задача коррекции для случаев, когда имелись заемы или не было переносов. Это можно легко сделать путем проверки отдельных цифр, поскольку основания счисления оказываются меньше половины размеров полей: установим t Ч— z & *8080808000, t Ч— (t 1) — (t 7) — ((t 15) & 1), z 4— z — (t & *e8c4c4fcl8). [Cm. Stephen Soule, CACM 18 (1975), 344-346. Нам повезло, что ‘с’ в ‘fcl8’ четно.] 102. (а) Мы считаем, что х = (xis.. ,хо)1в и у = (2/15 • • -Уо)1в с 0 < Xj,yj < 5; цель заключается в вычислении и = (ui5---uo)i6 и v = (fis • --зд)1б, с компонентами Uj = (xj + yj) mod 5 и Vj = (xj — yj) mod 5. Вот как это делается: и ч— х + у, t 4- (и + 31) 8с h, и ч— v. — ((t — (t » 3)) 8c 5Z); v ч— х — у + 51, t Ч— (г> + 31) & h, v ч— v — ((t — (t » 3)) & 51). Здесь I = (l...l)i6 = (264 — 1)/15, h = 81. (Сложение выполняется за 7 операций, вычитание—за 8.)
7.1.3 ОТВЕТЫ К УПРАЖНЕНИЯМ 669 (б) Теперь х = (120 ... ^о)в и т. д., и мы должны быть более осторожны с ограничением переносов: * ,/ jo Еч 2 +- (x I h) -(ykh), z 4— (4 & h) + (y & h), t,i 1 t - t 1, «^(„1 z. z. 0» v «- x - У + 4 + (t» 2). ut-x + y- (4 +(4» 2)); Здесь h = (4...4)s = (26® — 4)/7. (Сложение выполняется за 11 операций, вычитание— за 10.) Аналогичные процедуры, конечно, работают и для других модулей. В действитель- ности в общем случае мы можем работать с многобайтной арифметикой с использованием координат торов, с различными модулями в каждом компоненте (см. 7.2.1.3-(66)). 103. Пусть h и I представляют собой константы в (87) и (88). Сложение выполняется просто: и +- rr|((rr&/i)+2/). В случае вычитания необходимо отнять 1 и добавить ®,-&(1— yj): t «— (х & I) » 1, v +- t | (4 + (x & (у Ф I))). 104. Да, это можно сделать за 19 операций. Пусть а = (((1901 4) + 1) 5) + 1, Ь = (((2099<^4)+12)<^5)+28. Установим тп +- (rc»5)&*f (месяц), с <— *10&~((а:| (ж»1))»5) (коррекция високосного года), и «— b+*3&((*3bbeecc+c)3>(m+m)) (коррекция max-day) и 4 <— ((гфоф (i - а)) | (i® иф (w -i))) fc * 1000220 (проверка нежелательных переносов). 105. В упр. 98 поясняется, как вычислить битовые min и шах; простая модификация будет вычислять min в одних позициях байтов, и max—в других. Таким образом, мы можем “сортировать путем идеального тасования’’ как в разделе 5.3.4, рис. 57, если можем переставлять соответствующим образом байты между хну. Такая перестановка про- ста согласно упр. 1. [Конечно, есть гораздо более простые и быстрые пути сортировки 16 байт. Об асимптотических последствиях такого подхода можно прочесть в S. Albers and Т. Hagerup, Inf. and Computation 136 (1997), 25-51, и в M. Thorup, J. Algorithms 42 (2002), 205-230.] 106. n бит рассматриваются как д полей по д бит каждое. Сначала обнаруживаются ненулевые поля (41), и мы образуем слово у, которое имеет (у9-1... 2/0)2 в каждом «/-битовом поле, где у3 = [поле j в х ненулевое]. Затем мы сравниваем каждое поле с константами 29-1, ..., 2° (4г) и образуем маску т, которая идентифицирует старшее ненулевое поле в х. После размещения д копий этого поля в г мы тестируем z, как тестировали у (ta). Наконец соответствующее контрольное сложение 4 г и 4з (по-д-битово) дает А. (Испытайте случай д = 4, п = 16.) Для вычисления 2Л без сдвига влево замените ‘4г «О’ на ‘42+42’ и замените последнюю строку на ш +- (((а-(4зф(4з»</))) mod 2п)»(п —</))•!; тогда w&cm представляет собой 2Хх. 107. h GREG *8000800080008000 SLU 4 t,i6 OR t,t,y ms GREG «OOffOfOf33335555 ADDU t t,q AND t,t,h 1H SRU q,x,32 SLU q t,32 5H SLU q,t,15 ZSNZ lam,q,32 ADDU t t,q ADDU t,t,q ADD t,lam,16 3H ANDN У t,ms SLU q,t,30 SRU q,x,t 4H XOR t t.y ADDU t,t,q CSNZ lam,q,t OR q у.ь 6H SRU q,t,60 2H SRU t,x,lam SUBU t q.t ADDU lam,lam,q | Общее время работы равно 22v (без обращений к памяти). [Имеется также версия (56) без обращений к памяти со стоимостью только 16г>, если заменить последнюю строку на ADD t,lam,4; SRU y.x,t; CSNZ lam,y,t; SRU y,x,lam; SLU t.y.l; SRU t,[#ffffaa50],t; AND t,t,3; ADD lam, lam, t.]
670 ОТВЕТЫ К УПРАЖНЕНИЯМ 7.1.3 108. Например, пусть е представляет собой минимальное значение, для которого п < 2е • 22 . Если п кратно 2е, мы можем использовать 2е полей размером п/2е с е уменьшениями на шаге В1; в противном случае мы можем использовать 2е полей размером с е + 1 уменьшениями на шаге В1. В любом случае имеется е итераций в шагах В2 и В5, так что общее время работы составляет О(е) = O(loglogn). 109. Начните с х Ч— х&.—х и примените алгоритм В. (Шаг В4 этого алгоритма может быть немного упрощен в данном частном случае путем использования константы I вместо х®у.) 110. Пусть s = 2d, где d = 2е — е. Мы будем использовать s-битовые поля в п-битовых словах. К1. [Растяжение х mod s.] Установить у Ч— х Sz (s — 1). Затем установить t Ч— у Sz p,j и. у 4— ?/ Ф t Ф (t 2J(s — 1)) для е > j > 0. Наконец установить у ч— (у s) — у. [Если х = (а:2е-1 •. .2:0)2, мы имеем у — (уге-1 - yo)2s, где yj = (2s — l)a:j[j <d].] K2. [Подготовка минитермов.] Установить у ч— у ф (аг'-i... ао)г», где aj = fia.j, для О < j < d и aj = 2s — 1 для d < j < 2е. КЗ. [Сжатие.] Установить у Ч— у&г(у'^23 s) для е > j > 0. [Теперь у — 1 (х mod s). Это ключевой момент, делающий алгоритм работоспособным.] К4. [Завершение.] Установить у ч— у | (у С 2Js) для 0 < j < е. Наконец установить У Ч— у & (р2е>л Ф -((а:» j) & 1)) для d < j < 2е. | 111. п бит разделяются на поля по s бит, хотя крайнее слева поле может быть и короче. Сначала у устанавливается так, чтобы помечать все минус одно поле. Затем t = ( ... tito)2s содержат биты-кандидаты для q, включая “ложные попадания” для некоторых шаблонов 01* с s < к < г. Мы всегда имеем i/tj < 1, и из tj ф 0 вытекает tj-i = 0. Биты и и v подразделяют t на две части так, что мы можем безопасно вычислить т = (t 1) | (t 5> 2) I • • I (*5>r), перед тем как выполнить последнюю проверку для устранения ложных попаданий. 112. Заметим, что если q = х (х 1) & • & (х (г — 1)) & ~(ж г), то мы имеем х & x + q = х & (х С 1) & • (х (г — 1)). Если мы можем решить поставленную задачу за 0(1) шагов, то мы можем также выделить старший бит r-битового числа за 0(1) шагов: для этого следует применить случай п = 2г к числу 2" — 1 — х. И обратно, можно показать, что решение задачи выделения дает решение задачи 1г0. Таким образом, из упр. 110 вытекает решение за O(loglogr) шагов. 113. Пусть 0z — 0, х'о = хо, и построим х\, = хл для 1 < i < г следующим образом: если Xi = а о4 Ь и Oj {+, —, <;}, положим г' = (г — 1)' + 1 и х[, = a' ot Ь', где а' = х'-,, если а = Xj, м. а' = а, если а = с,. Если xi = а с, положим г' = (г — 1)' + 2 и (a^/_i,a^z) = (а'&([2”-с]—l),^/-!*^). Если ж» = а+b, положим г' = (г—1)'+6ипусть(а:/(4_1у+1,...,а:^) вычисляет ((а' & h) + (Ь' & Л)) ф ((а' ф b') & h), где h = 2”-1. А если Xi = а — Ь, выполняем аналогичное вычисление ((az | h) — (b' & h)) ф ((а' = Ь') & h). Ясно, что г < бг. 114. Просто положим X, = Хз(^ о, Хк^ при ц = Xj^ ot хк^, X, = Ci о4 Xfc(i) при xt = Ci°ia:fc(i) и Xj = Xj(i)OiCi приз:, = Xj^OiCi, где Ct = Ci, когда Ci является величиной сдвига; в противном случае Ci = (ci...Ci)2" = (2mrl — l)ci/(2" — 1). Это построение возможно благодаря тому факту, что сдвиги переменной длины запрещены. [Заметим, что если т = 2d, мы можем воспользоваться этой идеей для моделирования 2d экземпляров f(x,yi)\ тогда O(d) дальнейших операций разрешают “квантификацию”] 115. (a) z Ч— (х 1) & (х 2), у ч— х & (х + z). [Эта задача была предложена автору Воганом Праттом (Vaughan Pratt) в 1977 году.] (б) Сначала найдем xi ч— (гг<О)&а: и хг Ч— х&г(х<^1), левые и правые концы блоков х, и установим з!Т Ч— xr & (хг — 1). Тогда ze Ч— x'r Sz (x'r — (xi & До)) и zo Ч— х!г & (xr — (xi & до))
7.1.3 ОТВЕТЫ К УПРАЖНЕНИЯМ 671 являются правыми концами, за которыми левый конец следует соответственно в четной или нечетной позиции. Ответ имеет вид у ч— х 8с (х + (ze & До) + {zo & до)); его можно упростить до у Ч— х & (х + (ze ф (х'г & до)))- (в) В этом случае решение невозможно согласно следствию I. 116. Язык L является вполне определенным согласно лемме А (за исключением того, что наличие или отсутствие пустой строки не имеет значения). Язык является регулярным тогда и только тогда, когда он может быть определен с помощью конечного автомата, а 2- адическое целое число является рациональным тогда и только тогда, когда оно может быть определено с помощью конечного автомата, игнорирующего входные данные. Тождествен- ная функция соответствует языку L = 1(0111)’, а простое построение будет определять автомат, который соответствует сумме, разности или булевой комбинации чисел, опре- деленных любыми двумя заданными автоматами, работающими с последовательностью Х0Х1Х2 .... Следовательно, L является регулярным. В упр. 115 L представляет собой (a) ll*(000*l(0Ul)*U0*); (б) ll*(00(00)‘l(0Ul)*U0*). 117. Кстати, упомянутый язык L соответствует обратному бинарному коду Грея: он опре- деляет функцию, обладающую тем свойством, что f(2x) = ~f(2x+1) и g(f(2x)) = g(f(2x+ 1)) = х, где д(х) = а: ф (ж >> 1) (см. 7.2.1.1-(9)). 118. Если х = (in-i .11X0)2 и 0 < о, < 2J для 0 < j < п, мы имеем ajXj = 52"Zj(aj — (х & 2J)). Возьмем aj = L2J-1J, чтобы получить х 1. И обратно, приведенное далее рассуждение М. С. Патерсона (М. S. Paterson) доказы- вает, что монус должен использоваться как минимум п— 1 раз. Рассмотрим любую цепочку для f(x), которая использует сложение, вычитание, битовые булевы операции, и к операций “антипереполнения” у < z = (2"—1)[у <z]. Если к < п — 1, должно иметься два п-битовых числа, х' и х", таких, что х' mod 2 = х" mod 2 = 0, и таких, что все к антипереполнений < дают один и тот же результат как для х', так и для х". Тогда f(x') mod 2J = f(x") mod 2J при j = p(x' ф x"). Так что f(x) не является функцией х 1. 119. z ч— х ф у, f 4— 2Р 8с z 8г (z — 1). (См. (90).) 120. Обобщая следствие W, это функции, такие, что f(xi,...,хт) = f(yi,ут) (по мо- дулю 2к) при Xj = yj (по модулю 2к) для 1 < j < т, 0 < к < п. Младший бит представляет собой бинарную функцию от т переменных, так что имеется 22"1 возможных вариантов. Следующий по старшинству бит является бинарной функцией от 2m переменных, а именно битов (xi mod 4,... ,хт mod 4), так что имеется 222т вариантов; и т. д. Таким образом, окончательный ответ имеет вид 2 2 +2 +•••+* 121. (а) Если f имеет период длиной pq, где q > 1 нечетно, ее р-кратная итерация /^J имеет период длиной q, скажем, у0 yi уд = у0, где yj+i = /Ы(?/7) и yi / у0. Но тогда согласно следствию W мы должны иметь уо mod 2”-1 mod 2”-1 yq mod 2”-1 в соответствующей (п — 1)-битовой цепочке. Следовательно, yi = уо (по модулю 2П-1) по индукции по п. Следовательно, у\ = уо Ф 2”-1, уз = уо и т. д., так что мы получаем противоречие. (б) xi = хо + хо, Х2 = хо (р — 1), хз — xi | Х2', период длиной р начинается со значения хо = (1 + 2₽ + 22₽ + • • •) mod 2”. 122. Вычитание аналогично сложению; булевы операции еще проще; а константы имеют только один битовый шаблон. Единственный оставшийся случай—xr = Xj с, где мы имеем Sr = Sj + с; сдвиг направлен влево при с < 0. Тогда Vpqr = ^(p+e)(4+e)j, и Хг & |2₽ - 2’J = ((х} 8г [2р+с - 2’+cJ) » с) & (2” - 1). Следовательно, по индукции |Хрдг| < |X(P+c)(g+c)j| < Bj = Br-
672 ОТВЕТЫ К УПРАЖНЕНИЯМ 7.1.3 123. Если х = (ж9-1.. .2:0)2, заметим сначала, что в (104) t = 29-1 (хо . .xg-i)2s; следова- тельно, у = (а?о • хд-1)2, как утверждалось. Из теоремы Р теперь следует, что требуется LjlgffJ широкословных шагов для умножения на a9+i и на a9~i. Как минимум одно из этих умножений должно требовать 1g pj или более шагов. 124. Изначально t «— 0, хо = х, Uo = {2°, 21,..., 2"-1} и 1' ч— 0. При продвижении t <— t+1, если текущей командой является т\ ч— Tj ± »>, мы просто определим xt = ху ± Хк> и. г' 4—t. Случаи Ti Ч— Tj о Гк и Ч— с просты. Если текущая команда выполняет ветвление при г< < Tj, определим xt = Xt-i и положим 14 = {а: € Ut-i | ху < ху), Vb = Ut-i \ 14- Пусть Ut —большее из множеств 14 и V); ветвление выполняется при Ut = 14- Заметим, что в этом случае |С4| > |t4-i|/2. Если текущей командой является ч— Tj Гк, положим W = {а: € £4—1 | х 8с [2*8”+s — 2sJ / 0 для некоторого s 6 Sk'} и заметим, что |W| < |Sfcz| Ign < 2*~1+e+f. Пусть Ve = {x 6 Ut-i \ W I xk' = с} для |c| < n и Vn = Ut-i \ W \ U|c|<n Лемма В гласит, что не более В# + 1 < 22‘~1-1 + 1 из множеств Vc являются непустыми. Пусть наибольшим является множество Ut', и если это 14, определим xt = ху с, г' ч— t. В этом случае |14| > (|14-11 - 2‘-1+е+/)/(22‘-1-1 + 1). Аналогично для ч— M[rj mod 2m] или M[rj mod 2m] ч— положим W = {a: € Ut-i I x & [2m+® — 2sJ 0 для некоторого s € Sjz} и 14 = {a: 6 Ut-1 \ W | xy mod 2m = z} для 0 < z < 2m. Согласно лемме В не более By < 22‘-1-1 множеств 14 являются непустыми; пусть наибольшим оказывается Ut =14. Чтобы записать г, в M[z], определим xt = Xt-i, z" ч— i'; для чтения г, из M[z] установим г' ч— t и положим Xt = xzu, если z" определено; в противном случае положим Xt равным предвычисленной константе M[z]. В обоих случаях |t4| > (|t4-i| — 2t-1m)/22‘_ -1 достаточно велико. Если t < /, мы не можем быть уверены,' что п = рх. Причина заключается в том, что множество W = {а: € Ut | х & |^2lg"+® — 2sJ 0 для некоторого s € Si>} имеет размер |W| < |SV| Ign < 2t+e+f и. |14 \ W| > 22'+/-2‘+i - 2‘+«+/ > 22‘-i > |{a:r & |2lf5” - lj | x0 € 14 \ IV}|. Два элемента Ut\W не могут иметь одно и то же значение рх = ху & [2*8" — 1J. [Та же нижняя граница применима, даже если мы допустим произвольные 22‘-1- вариантные ветвления, основанные на содержимом (п,... ,п) в момент t.] 125. Начнем, как в ответе к упр. 124, но с Uo = [0.. 2s). Упрощение рассуждений пу- тем удаления множеств W приведет к множествам, таким, что |С4| > 29/max(2m, 2п)*; например, может иметься не более 2п различных команд сдвига. Предположим, мы можем остановиться в момент t, такой, что t < [lg(h + 1)J - Дока- зательство теоремы Р дает р и q, обладающие тем свойством, что xR & [2₽ — 2’J не зависит от х & [2₽+® — 2,+®J. Следовательно, расширение леммы В из указания показывает, что xR принимает не более 22‘-1 < 2^-1^2 различных значений для каждого набора прочих битов {а: & [2₽+s — 2,+sJ | s € St}. Следовательно, ri = ху сможет быть корректным значением xR для не более чем 2(-h~1^2+a~h значений х. Но 2^h~1^2+s~h меньше, чем |Г4|, согласно (106). 126. М. С. Патерсон (М. S. Paterson) выдвинул связанную (но иную) гипотезу: для каждой 2-адической цепочки с к операциями сложения-вычитания имеется (возможно, огромное) целое число х с их = к + 1, такое, что цепочка не вычисляет 2Хх. 127. Йохан Хастад (Johan Hastad) [Advances in Computing Research 5 (1989), 143-170] показал, что любая схема полиномиального размера, вычисляющая функцию четности для входных данных {a?i,..., xn, xi,...,хп} с использованием логических элементов И и ИЛИ с бесконечным коэффициентом объединения по входу, должна иметь глубину Q(logn/ log log п). 128. (Заметим также, что суффиксная функция четности а:® рассматривалась в упр. 36 и 66.)
7.1.3 ОТВЕТЫ К УПРАЖНЕНИЯМ 673 130. Если ответ “нет” сам собой встает аналогичный вопрос о переменной а. 131. Эта программа выполняет типичный “поиск в ширину” сохраняя LINK(q) = г. Ре- гистр и представляет собой вершину, исследуемую в настоящий момент; v является одним из ее преемников. ОН LDOU r,q,link 1 г 4—LINK(q). STOU vtqtlink |Л|-К?| LINK(q) ч— v. SET u,r 1 11 4— r. STOU r,v,link LINK(v) ч— г. 1Н LDOU a.u.arcs |R| a 4— ARCS(u). SET q.’ l^|-|Q| q + v. BZ a,4F l«l S[u] = 0? 3H PBNZ a,2B S Цикл по а. 2Н LDOU v,a,tip S v 4— TIP (a). 4H LDOU u.u.link |Я| ич- LINK (и). LDOU a,a,next S a 4— NEXT(a). CMPU t,u,r |Я| и/г? LDOU t,v,link S t 4— LINK(v). PBNZ t,lB |Я| Да—продолжить. PBNZ t,3F s Is v € R? 1 132. (а) Мы всегда имеем t(U) С = o’(U). Равенство выполняется тогда и только тогда, когда 2“ С р(и') для всех и € U и и' € U. (б) Мы доказали, что r(tT') С следовательно, Т С U. А если t € Т, мы имеем 2‘ С ри для всех и € U. Следовательно, <т(Т) С т(Т). (в) В пп. (а) и (б) доказано, что элементы Сп представляют клики. (г) Если w С V, то iz&pjt С v&pfc и п&йь С к&йь; так что мы можем работать только с максимальными записями. Приведенный далее алгоритм использует кэширующее по- следовательное (а не связанное) распределение, некоторым образом аналогичное обменной поразрядной сортировке (алгоритм 5.2.2R). Мы считаем, что wi.. ,и>в представляет собой рабочее пространство из s беззнаковых слов, ограниченное wo = 0 и w„+i — 2" — 1. Элементы Cj^_1 изначально находятся в позициях wi... wm, и наша цель состоит в том, чтобы земенить их элементами С*. Ml. [Инициализация.] Завершить работу алгоритма, если рь = 2П — 1. В противном случае установить v ч— 2fc, г ч— 1, j ч— т. М2. [Разбиение на гл] Пока wt & v = 0, устанавливать г Ч— г + 1. Пока Wj 8с v О, устанавливать j Ч— j — 1. Затем, если г > j, перейти к шагу М3; в противном случае обменять w, 4+ Wj, установить г Ч— г+1, j Ч— j — 1 и повторить этот шаг. М3. [Разделение ш,... wm.] Установить I Ч— j, р ч— s + 1. Пока г < т, выполнять подпрограмму Q с и = и устанавливать i Ч— г + 1. М4. [Комбинация максимальных элементов.] Установить т Ч— I. Пока р < з, уста- навливать т ч— т + 1, wm ч— wp и р ч— р + 1. | Подпрограмма Q использует глобальные переменные j, к, I, ртл. v. Она, по сути, заменяет слово и на и' = и 8с р* и и" = и 8с 6k, оставляя их, если они максимальны. Если это так, и' переходит в верхнее рабочее пространство wp... wB, но и" остается внизу. Q1. [Исследование гг'.] Установить шч— гг&рьидч— s. Если w = и, перейти к шагу Q4. Q2. [Сравнимо?] Если q < р, перейти к шагу Q3. В противном случае если w8cwg = w, перейти к шагу Q7. В противном случае если w & wg = wg, перейти к шагу Q4. В противном случае установить q Ч— q — 1 и повторить Q2. Q3. [Предположительное принятие гг'.] Установить р <— р — 1 и wp Ч— w. Если р < т+1, происходит переполнение памяти. В противном случае перейти к шагу Q7. Q4. [Подготовка к циклу.] Установить г ч— р и wp-i Ч— 0. Q5. [Удалениене максимальных элементов.] Покаш|ш9 w, устанавливать q Ч— q—1. Пока ии | wr = w, устанавливать г Ч— г +1. Затем, если q < г, перейти к шагу Q6; 22 Зак. 3331
674 ОТВЕТЫ К УПРАЖНЕНИЯМ 7.1.3 в противном случае установить wq ч— wr, wr ч— 0, q ч— q— 1, г ч— г+1 и повторить этот шаг. Q6. [Сброс р.] Установить wq Ч— w и р Ч— q. Завершить работу подпрограммы, если W = и. Q7. [Исследование «".] Установить w Ч— и 8с v. Если w = wq для некоторого q в диапазоне 1 < q < j, не делать ничего. В противном случае установить I ч— 1 + 1 и wi <— w. | На практике этот алгоритм работает достаточно эффективно; например, будучи приме- ненным к графу ферзя размером 8x8 (упр. 7-129), он находит 310 максимальных клик после 306 513 обращений к памяти с использованием 397 слов рабочего пространства. Он находит 10188 максимальных независимых множеств того же графа после примерно 310 миллионов обращений к памяти с использованием 15090 слов; имеется соответственно (728,6912,2456,92) таких множеств размером (5,6,7,8), включая 92 знаменитых решения задачи о восьми ферзях. Источник. N. Jardine and R. Sibson, Mathematical Taxonomy (Wiley, 1971), Appen- dix 5. Были опубликованы и многие другие алгоритмы для перечисления максимальных клик. См., например, W. Knodel, Computing 3 (1968), 239-240, 4 (1969), 75; С. Bron and J. Kerbosch, CACM 16 (1973), 575-577; S. Tsukiyama, M. Ide, H. Ariyoshi, and I. Shirakawa, SICOMP 6 (1977), 505-517; E. Loukakis, Computers and Math, with Appl. 9 (1983), 583-589; D. S. Johnson, M. Yannakakis, and С. H. Papadimitriou, Inf. Proc. Letters 27 (1988), 119-123. См. также упр. 5-23. 133. (а) Независимое множество представляет собой клику G; так что мы дополняем G. (б) Вершинное покрытие является дополнением независимого множества; так что мы до- полняем G, а затем дополняем полученный результат. 134. а ►+ 00, b ►+ 01, с i-> 11 представляет собой первое отображение класса II. 135. Унарные операторы просты: -<(xixr) = xrxi; o{xixT) = xTxr\ a(xixr) — xixi. A xixr <=> yiVr = (zi A zr)(zt V zr), где zt = (xi = yi) и zr = (xr = yr). 136. (а) Классы II, III, IVO и IVC имеют оптимальную стоимость 4. Любопытно, что функции zi = xi V yi V (xr A yr), Zr = xrV Ут одинаково подходят как для отображения (а, Ь, с) ►+ (00,01,11) из класса II, так и для отображения (а, Ь, с) ►+ (00,01,1*) из класса IVC. [Эта операция эквивалентна насыщающему сложению, когда а = 0, 5=1, ас означает “больше 1.”] (б) Из симметрии между а, 5 и с вытекает, что мы должны проверить только классы I, IVO и Vo; и оказывается, что эти классы имеют стоимости 6, 7 и 8. Победителем в клас- се I, с (а, 5, с) >-> (00,01,10), является zi = vr Л fit, Zr = vi Л йг, где щ = xi ф yi, иг = хг Ф уг, vi = Ут Ф ui и vr = yi Ф Ur- [См. упр. 7.1.2-60, которое дает тот же ответ, но с zi Ч-> zr. Причина этого в том, что в данной задаче мы имеем (x + y + z) mod 3 = 0, но в указанной задаче (х + у — z) mod 3 = 0; a zi ч+ zr эквивалентно смене знака. Бинарная операция z — х о у в этом случае также может быть охарактеризована тем фактом, что все элементы (х, у, z) одинаковы или все различны; таким образом, это знакомо игрокам в игру SET. Это единственная бинарная операция над n-элементными множествами, которая имеет п! автоморфизмов и отличается от тривиальных примеров х о у = х или хоу = у.] (в) Стоимость 3 достигается только с классом I: положим (а, 5, с) ►+ (00,01,10) и zi = (xi V Хт) A yi, zr = Хт А ут- 137. Действительно, z = (х+ 1)&у при (а, 5, с) >-> (00,01,10). [Это искусственный пример.]
7.1.3 ОТВЕТЫ К УПРАЖНЕНИЯМ 675 138. Простейший случай, известный автору, требует вычисления двух бинарных операций, таких как a b b\ / а b а\ a b b I и I a b а I; с а а / \ с а с / каждая имеет стоимость 2 в классе Vo, но при этом в классах I и II их стоимость составляет (3,2) и (2,3). 139. Вычисление z%, по сути, эквивалентно упр. 136, (б); так что победителем оказывается естественное представление (111). К счастью, это представление также хорошо подходит ДЛЯ Z1, С Zu = Xl Л yi, Zlr = хг Л уг. 140. С представлением (111) сначала используйте полные бинарные сумматоры для вы- числения (0100)2 = xi + yi + zi и (6160)2 = xr + Ут + zT за 5 + 5 = 10 шагов. После этого метод “жадных отпечатков” показывает, как вычислить четыре требуемые функции от (ai,ao,6i,6o) за еще восемь шагов: гц = fli Л бо, ur = «о Л 61; ti = ai ф 60, 1г = ао Ф 61, <з = ai ф <2, <4 = «о Ф ti, ад = <з Л ti, = <4 Л ?2- [Является ли этот метод наилучшим?] 141. Предположим, что мы вычисляем биты а = aoai... a2m-i и 6 = 6061... 62m-1, такие, что as = [s = 1 или s = 2, или s представляет собой сумму различных чисел Улама < тп ровно одним способом], bB = [s представляет собой сумму различных чисел Улама < тп более чем одним способом], для некоторого целого числа тп = Un > 2. Например, когда тп = п = 2, мы имеем а = 0111 и 6 = 0000. Тогда {s | s < тп и ав = 1} = {Ui,..., tln}; а tl„+i = min{s | s > тп и ав = 1}. (Заметим, что ав = 1 приз = Un-i+Un.) Следующие простые битовые операции сохраняют указанные условия: п Ч— n+1, тп 4- Un и (Gm - • • П2т— 1,6m . . . 62m—1) Ч ((firn • • • Д2т—1 Ф До • - • Um—1) & 6m . . . 62m—1, (Дт • • - Д2т—1 & ДО - • • Дт—1) | 6т • - • 62т—1), где ав = Ьв = 0 для 2Un-i < s < 2Un в правой части этого присваивания. [См. М. С. Wunderlich, BIT 11 (1971), 217-224; Computers in Number Theory (1971), 249-257. Эти загадочные числа, впервые определенные С. Уламом (S. Ulam) в SIAM Review 6 (1964), 348, озадачили специалистов в области теории чисел на многие годы. Отноше- ние Ст In выглядит сходящимся к константе, ss 13.52; например, С20000000 = 270371127 и ГЛооооооо = 540 752 349. Кроме того, Д. У. Вильсон (D. W. Wilson) эмпирически обнару- жил, что эти числа образуют квазипериодические “кластеры” центры которых отличаются на кратное другой константе, и 21.6016. Вычисления Джада Мак-Крейни (Jud McCranie) и автора для Un < 640000000 указывают, что наибольший промежуток Un — Un-i наблю- дался между 1/24576523 - 33 2 250 401 и С24576524 = 332 251032; а наименьший промежуток Un — Un-i = 1, вероятно, имеется только при Un G {2,3,4,48}. Некоторые небольшие промежутки наподобие 6, 11, 14 и 16 не наблюдались ни разу.] 142. Алгоритм Е в этом упражнении выполняет следующие операции над подкубами: (i) подсчитывает ♦ в данном подкубе с; (ii) для заданных с и с' проверяет выполнение условия с С с\ (iii) для заданных с и с вычисляет с LI с (если таковой существует). Операция (i) с помощью контрольного сложения выполняется просто; давайте посмотрим, какие из девяти классов двухбитных кодировок (119), (123), (124) лучше всего подходят для (ii) и (iii). Предположим, что а = 0, 6 = 1, с = *; симметрия между 0 и 1 означает, что нужно проверить только классы I, III, IVO, IVC, Vo и Vc.
676 ОТВЕТЫ К УПРАЖНЕНИЯМ 7.1.3 Для отображения (0,1, *) >-> (00,01,10), принадлежащего классу I, таблица истинно- сти для с g с' представляет собой 010*100*110***** в каждом компоненте. (Например, 0 С ♦ и ♦ g 1. В этой таблице истинности звездочки ♦ представляют собой безразличные значения для неиспользуемого кода 11.) Методы из раздела 7.1.2 указывают, что самые дешевые такие функции имеют стоимость 3; например, с С с' тогда и только тогда, когда ((ЬФЬ') | а) 8г а' = 0. Кроме того консенсус с LI с = с" существует тогда и только тогда, когда vz = 1, где z = (5 ф Ь') & ~(а фа'). Ив этом случае а" = (а®Ь(& Ь') & ~(а ф а'), Ь" = (Ь | Ь') 8г z. [Звездочка и битовые коды для этой цели были использованы М. А. Бройером (М. A. Breuer) в Proc. ACM Nat. Conf. 23 (1968), 241-250.] Но класс III работает лучше при (0,1,*) •-> (01,10,00). В этом случае с С с' тогда и только тогда, когда (cj 8г с{) | (сг 8г <4) = 0; с U с' = с" существует тогда и только тогда, когда vz = 1, где z = х 8г у, х = ct | с], у = с,. | <4; а с{' = х ф z, с” = у ф z. Мы экономим две операции для каждого консенсуса по сравнению с классом I, компенсируя лишний шаг при подсчете звездочек. Классы IVO, Vo и Vc оказываются далеко позади. Класс IVC имеет некоторые досто- инства, но класс III наилучший. 143. /(х) = ((х 8г пц) <g 17) | ((х » 17) 8г пи) | ((а; 8г m2) <g 15) | {{х 5> 15) 8г m2) | ((х 8г m3) С 10) | ((х >> 10) 8г тз) | ((х 8г md) С 6) | ((х ~^>6) 8г т*), где mi = *7f7f7f7f7f7f, m2 = *fefefefefefe, m3 = *3f3f3f3f3f3f3f, пм = *fcfcfcfcfcfcfс. [См., например, Chess Skill in Man and Machine, ed. by Peter W. Frey (1977), c. 59. Для вычисления f(x) на машине MMIX достаточно пяти шагов (четырех операций M0R и одной 0R), поскольку f(x) = qxq'\qf xqcq = *40аОБО2814ОаОБО2 и q = *2010884422110804.] 144. Узел j ф (к 1), где к = j 8г —j. 145. Это предок листа j | 1 на высоте h. 146. Согласно (136) нам надо показать, что 8г —г) = pl при I — 2pl <i<l<j<l + 2pl. Искомый результат следует из (35), поскольку — I < — i < — I + 2pl. 147. (a) nvj = fivj = j, avj = 1 pj и rj = Л для 1 < j < n. (б)------Предположим, что n = 2'1 + • • • + 2e‘, где ei > • • > et > 0, и пусть njt = 2'1 4- p 2е* для 0 < к < t. Тогда irvj = j и flvj = av, = njt для njt-i < j < Пк- Кроме того, тпк = l для 1 < к < t, где зд = Л; все прочие rj = Л. 148. Да, если ttj/i = 010000, пу2 = 010100, nxi = 010101, ПХ2 = 010110, тгтз = 010111, (Зхз = 010111, (Зу2 = 010100, 0X2 = 011000, fiyi = 010000 и /Зц = 100000. 149. Мы считаем, что изначально CHILD (п) = SIB(u) = PARENT(п) = Л для всех вершин v (включая v = Л) и что имеется как минимум одна ненулевая вершина. S1. [Создание трижды связанного дерева.] Для каждой из п дуг и—>г> (возможно, v = Л) установить SIB(u) Ч— CHILD(v), CHILD(d) ч— и, PARENT(и) ч— v. (См. упр. 2.3.3-6.) S2. [Начало первого обхода.] Установить р Ч— CHILD (Л), п Ч— 0 и АО Ч-1. S3. [Вычисление (3 в простом случае.] Установить п ч— п + 1, пр ч— п, тп Ч— Л и Ап Ч— 1 + А(п >> 1). Если CHILD(p) Л, установить р ч— CHILD(р) и повторить данный шаг; в противном случае установить /Зр ч— п. S4. [Восходящее вычисление т.] Установить т/Зр Ч— PARENT (р). Затем, если SIB(p) Л, установить р ч— SIB(p) и вернуться к шагу S3; в противном случае установить р Ч-PARENT (р). S5. [Вычисление /3 в трудном случае.] Если р Л, установить h Ч— А(п& —тгр), затем /Зр ч— ((n >> h) | 1) <g h и вернуться к шагу S4.
7.1.3 ОТВЕТЫ К УПРАЖНЕНИЯМ 677 S6. [Начало второго обхода.] Установить р ч— CHILD (Л), АО Ч— Ап, тгЛ Ч— /ЗА Ч— аЛ ч— 0. S7. [Нисходящее вычисление а.] Установить ар Ч— a(PARENT(p)) | (/Зр& — fip). Затем, если CHILD (р) ф Л, установить р Ч— CHILD (р) и повторить этот шаг. S8. [Продолжение обхода.] Если SIB(p) / Л, установить р ч— SIB(p) и перейти к шагу S7. В противном случае установить р Ч— PARENT (р) и повторить шаг S8, если р ф Л. | 150. Можно считать, что элементы Aj различны, рассматривая их как упорядоченные пары (Aj,j). Упомянутое в указании бинарное дерево поиска, являющееся частным слу- чаем “декартовых деревьев’’ введенных Жаном Вюллемином (Jean Vuillemin) [САСМ 23 (1980), 229-239], обладает тем свойством, что k(i,j) является ближайшим общим предком i и j. Действительно, предками любого данного узла j являются те узлы к, для которых А», является право-левым минимумом для Ai... Aj либо Ак является лево-правым минимумом для Aj . ..Ап. Алгоритм из ответа к предыдущему упражнению выполняет требуемые предвычис- ления, за исключением того, что нам надо иначе настроить трижды связанное дерево на узлах {0,1,...,п}. Начнем, как и ранее, с CHILD(v) = SIB(v) = PARENT(v) = 0 для О < v < n, и пусть A = 0. Будем считать, что Ао < Aj для 1 < j < п. Установим t Ч— 0 и выполним следующие шаги для v = п, п — 1, ..., 1: установить и Ч— 0; затем, пока А„ < At, устанавливать и ч— t и t ч— PARENT(t). Если и 0, установить SIB(d) ч— SIB(u), SIB (и) ч— 0, PARENT (и) ч— v, CHILD(v) ч— и; в противном случае просто установить SIB(v) ч— CHILD(t). Установить также CHILD(t) ч— v, PARENT(v) ч— t, t 4— v. После того как дерево построено, продолжаем с шага S2. Время работы составляет О(п), поскольку операция t ч— PARENT Ct) выполняется не более одного раза для каждого узла t. [Этот красивый способ приведения задачи поиска минимума на отрезке к задаче поиска ближайшего общего предка был открыт Г. Н. Габовым (Н. N. Gabow), И. Л. Бентли (J. L. Bentley) и Р. Э. Таржаном (R. Е. Tarjan), STOC 16 (1984), 137-138, которые также предложили следующее упражнение.] 151. Для узла v с к дочерними узлами щ, ..., Uk определим последовательность узле® S(v) — v, если к - 0; S(v) = vS(ui), если к = 1; и S(i>) = S(ui)v... vS(uk), если к > 1. (Следовательно, v появляется в S(v) ровно max(fc — 1,1) раз.) Если в лесу имеется к деревьев с корнями tti, ..., Uk, запишем последовательность узлов S(wi)A... AS(wjt) = Vi... Vjv. (Длина этой последовательности будет удовлетворять соотношению п < N < 2п.) Пусть Aj является глубиной узла Vj для 1 < j < N, где А имеет глубину 0. (Например, рассмотрим лес (141), но добавим к нему еще один дочерний узел К —>D и изолированный узел L. Тогда V1...V15 = CFAGJDHDKABEIAL иАь-.Аи = 231342323012301.) Ближайшим общим предком и и v, при и = V и v = Vj является, таким образом, Vfc(ij) из задачи о поиске минимума на отрезке. [См. J. Fischer and V. Heun, Lecture Notes in Comp. Sci. 4009 (2006), 36-48.] 152. На шаге VI выполняется поиск уровня, выше которого ах и ау имеют биты, примени- мые к обоим их предкам. (См. упр. 148.) На шаге V2 при необходимости h увеличивается до уровня, где у них имеется общий предок, или до наивысшего уровня Ап, если такового нет (а именно если к - 0). Если fix ф fiz, на шаге V4 выполняется поиск наивысшего уровня среди предков х, ведущих на уровень h; следовательно, становится известен наинизший предок х, для которого fix = fiz (или х = А). Наконец на шаге V5 прямой порядок обхода говорит нам, кто из х и у является предком другого узла. 153. Этот указатель имеет pj бит, так что он заканчивается после pl+р2 Ч 1- pj = j — i/j бит упакованной строки согласно (61). [Здесь j четно. Навигационные стопки впервые появились в Nordic Journal of Computing 10 (2003), 238-262.]
678 ОТВЕТЫ К УПРАЖНЕНИЯМ 7.1.3 154. Серые линии определяют треугольники с углами 36°, 36° и 90°, десять таких тре- угольников образуют пятиугольник с углами 72° в каждой вершине. Эти пятиугольники заполняют гиперболическую плоскость таким образом, что в каждой вершине их встреча- ется ровно пять. 155. Сначала заметим, что 0 < (aO)i/^, < ф~г + ф~3+ф~5 + • • = 1, поскольку отсутствуют следующие друг за другом единицы. Далее заметим, что Р-пф = ф~п (по модулю 1) согласно упр. 1.2.8-11. Теперь добавим Fkl фЛ-\-Ркгф. Например, (40) mod 1 = ф~ъ+ф~2-, (—20) mod 1 = ф~* Ч- 0-1- Эти рассуждения доказывают также интересную формулу [N(a)0j = — N(a0). 156. (а) Начнем с у ч— 0 и с к достаточно большого, чтобы |ж| < Fk+i- Если х < 0, установить к ч— (к — 1) | 1, и, пока х + Fk > 0, устанавливать к ч— к — 2; затем установить у Ч— у + (1 к), х Ч— х + Fk+r, повторить. В противном случае, если х > 1, установить fc ч— fc & —2 и, пока х — Fk < 0, устанавливать к Ч— к — 2; затем установить у ч— у + (1 к), х Ч— х — Ffc+i; повторить. В противном случае установить у Ч— у + х и завершить работу алгоритма с у = (а)г- (б) Операции xi ч— щ, yi ч— — а±, Хк ч— ук-i + ajt, Ук ч— Хк-i — Хк вычисляют Хк = N(ai ...ак) и ук = N(ai ...ajtO). [Требует ли П(п) шагов каждая широкословная цепочка для N(ai ... an)?] 157. Эти правила очевидны, за исключением двух случаев, включающих (а—). Для них мы имеем N((a—)0fc) = W(aOfc) + F-k-2 Для всех fc > 0, поскольку уменьшение никогда не выполняет “заем” справа. (Но аналогичная формула Лг((о'+)0/с) = N(a0k)+ F-k-i не выполняется.) 158. Увеличение удовлетворяет правилам (a00)4- = a01, (al0)+ = (a4-)00, (al)4- = (a4-)0. Его можно осуществить с помощью шести 2-адических операций над целым числом х = (а)г, устанавливая у ч— х | (х >> 1), z ч— у & ~(у + 1), х Ч- (х | z) + 1. Уменьшение ненулевого кодового слова более сложное. Оно удовлетворяет соотноше- ниям (al02fc)— = a0(10)fc, (al02fc+1)— = a(01)fc+1; следовательно, согласно следствию I его нельзя вычислить с помощью 2-адической цепочки. Если допустить использование монуса, достаточно семи операций: у Ч— х — 1, zt-ylcx, w <— z&. до, xi—у —w + (w — (z — w)). 159. Помимо фибоначчиевой системы счисления (146) и негафибоначчиевой системы счис- ления (147), имеется также нечетная фибоначчиева система счисления-, каждое положи- тельное целое число х можно единственным образом записать в виде х = Fi, + Fi2 Ч--1- Ft,, где h » I2 »- • • • »- ls > 0 и ls нечетно. Следующая 19-шаговая 2-адическая цепочка для заданного негафибоначчиева кода а кон- вертирует х = (а)г в у = (/3)г в z = (7)2, где /3—нечетное кодовое слово с N(a) = F(/3), а 7—стандартное кодовое слово с F(J3) = F(t0): х+ ч— х iz. до, х~ ч— х ф х+; d ч— х+ — х~; t ч— d\x~,t ч- t&~(t«C 1); у ч— (d&po)®t®((t&2c“) »1); z ч- (уЧ-1)»1; юч- гф(4д0); t ч— w & ~(w+l); z Ч— (z 1t) — (t >> 1). Соответствующие негафибоначчиево и нечетное представления удовлетворяют заме- чательному закону Fk1+m Ч-----Ь Fkr+m = (—l)m(Fi1-m Ч------1- Fis-m) для всех целых чисел тп. Например, если АГ(а) < 0, приведенные выше шаги будут конвертировать х = (а0)г в у = (/3)2, где F((/3 2)0) = — N(a). Кроме того, (3 представляет собой нечетный код для негафибоначчиева а тогда и только тогда, когда ай является нечетным кодом для негафибоначчиева 0R при нечетном |а| = |/3| и N(a) > 0.
7.1.3 ОТВЕТЫ К УПРАЖНЕНИЯМ 679 В соответствии со следствием 1 конечной 2-адической цепочки, работающей иным способом, не существует, поскольку фибоначчиев код 10fc соответствует негафибоначчи- евому 10fc+1 при нечетном к и (10)fc^2l при к четном. Но если 7 представляет собой стандартное фибоначчиево кодовое слово, мы можем вычислить у = (/3)г из z = (7)2 путем установки у <— z С 1, t <— у & — у До, У <— (t=0? у : у — 1 — ((t—1) & До)). А тогда приведенный выше метод будет вычислять aR из /3й. Общее время работы по преобразованию к негафибоначчиеву виду будет иметь порядок log |7|, для двух обращений строк. 160. Правила в разделе на самом деле неполные: они должны также определять ори- ентацию каждого соседа. Давайте потребуем, чтобы asn = а; аеГ1 = а; (а0)шп = аО, (al)wo = al; (a00)ns = аОО, (alO)nu> = alO, (al)ne = al; (a0)oo = aO, (al01)oo = alOl, (al001)oo = alOOl, (a0001)ow = aOOOl. Тогда рассмотрение вариантов по индукции по расстоянию в графе d доказывает, что все ячейки в пределах d шагов от начальной ячейки обладают согласованными метками и ориентациями. (Обратите внимание на тождество а+ = ((аО)—) 1.) Кроме того, маркировка остается согласованной при добавлении координат у и перемещении при необходимости с одной полосы на другую с помощью 6-правил (153). 161. Да, соответствующий граф двудолен, поскольку все его ребра определяются множе- ством линий границ. (Гиперболический цилиндр раскрасить двумя цветами нельзя; но две смежные полосы, у mod 2,—можно.) Л В' 162. Удобно рассматривать гиперболическую плоскость “через другие оч- ки” отображая ее точки на верхнюю полуплоскость £?z > 0. Тогда “пря- & мые линии” станут полуокружностями с центрами на оси х, с вертикаль- ными линиями в качестве предельного случая. При таком представлении ребра \z — 1| = \/2, |z| = г и S?z = 0 определяют треугольник 36о-45°-90°, £ если г2 = ф + у/ф. Каждый треугольник АВС имеет три соседа, СВА!, АСВ' и ВАС’, получающихся “отражением” двух его сторон относительно третьей, где отражение |z — с'| = т относительно |z — с| = г представляет собой \z — с — |(Ж1 + ггг)! = ||®1 - х21, х, = г2/(с' ±г' - с). Отображение zh (z- zo)/(z — zo) отображает верхнюю полуплоскость в единичный круг; когда Zo = ^(у/Ф — 1/</>)(1 + б1^4»), центральный пятиугольник будет симметричен. Повторение отражений исходного треугольника с использованием поиска в ширину до достижения невидимых треугольников приведет к рис. 14. Для получения только лишь пятиугольников (без серых линий) можно начать с центральной ячейки и выполнять от- ражения относительно ее сторон, и т. д. 163. (Эту фигуру можно начертить так, как в упр. 162, начиная с вершин, которые проецируются на три точки, гг, irw и гты2, где г2 = |(1 + \/2)(4 — у/2 — д/б) и w = е21Г1^3. Используя обозначения, разработанные в 1852 году Л. Шляфли (L. Schlafli), ее можно описать как бесконечное замощение с параметрами {3,8}, означающими, что в каждой вершине встречается восемь треугольников; см. работу Шляфли Gesammelte Matbematis- che Abbandlungen 1 (1950), 212. Аналогично пентагрид и замощение из упр. 154 имеют параметры Шляфли {5,4} и {5,5} соответственно.) 164. Оригинальное определение требует большего количества вычислений, даже несмотря на то, что оно может быть разложено: custer'(X) = X & ~(VN & У & Is), У = Xw & X & ХЕ. Но основная причина предпочтения (157) заключается в том, что оно дает более тонкую границу, связанную ходом короля. Граница, связанная ходом ладьи, получающаяся в ре- зультате определения 1957 года, менее привлекательна, поскольку заметно темнее в случае
680 ОТВЕТЫ К УПРАЖНЕНИЯМ 7.1.3 диагонали, чем в случае горизонтали или вертикали. (Поэкспериментируйте, и вы увидите это сами.) 165. Сначала представим Х^ как “внешнюю” границу исходных черных пикселей. Затем образуются изгибы наподобие отпечатков пальцев. Например, начиная с рис. 15, (а), мы получаем в растре 120 х 120 в конечном итоге приходя к причудливым бесконечно чередующимся рисункам. (Каждый ли непустой растр М х N ведет к такому 2-циклу?) 166. Если X = custer (X), сумма элементов X + (X А 1) + (X С 1) + (X 1) + (X V 1) не превышает 4MN + 2М + 27V, поскольку это значение не больше 4 в каждой клетке прямоугольника и не больше 1 в смежных клетках. Эта сумма также в пять раз превышает количество черных пикселей. Следовательно, f(M,N) < ^MN + |Л/ + |7V. И обратно, мы получаем f(M, N) > ^MN — |, допуская в строке i и столбце j черные пиксели, кроме случаев (i + 2j) mod 5 = 2. (Эта задача эквивалентна поиску наименьшего доминирующего множества сетки М х N.) 167. (а) С помощью 17 шагов можно построить полусумматор и три полных сумматора (СМ. 7.1.2-(23))> Так ЧТО (Z1Z2)2 — Znw+zw + zsw, (2324)2 = Xn+^S, (2526)2 = Xnb+^b+Xse и (z72g)2 = z2 + Z4 + Ze- Тогда f = Si(zi, Z3,25, zy) Л (x V zg), где симметричной функции Si требуется семь операций согласно рис. 9 в разделе 7.1.2. [Это решение основано на идеях В. Ф. Манна (W. F. Mann) и Д. Слитора (D. Sleator).] (б) Для заданных х~ = Xj!^, х = Х^ и х+ = Xj^x вычислим а 4— х~ & x+ (= Z3), b 4— я:~фя:+ (= Z4), с 4— хфЬ, d 4— с^>1 (= ze), с 4— сС1 (= Z2), е 4— c®d, с 4— c&d, f 4— b&e, f 4- f I c (= Z7), e 4- b ф e (= zg), c 4- x&tb, c4-c|a, 64-c<l (= Z5), c 4- c> 1 (=21), d4-b&c, c4-b|c, b4-a&/, / 4-a|/, / 4-d|/, c4-b|c, / 4-/фс(= Si(zi,Z3,zs,zt)), e <— e I x, ft- f & e. [Отличное изложение радостей и печалей Жизни, включая доказательство возможно- сти моделирования любой машины Тьюринга, имеется в книге Мартина Гарднера (Martin Gardner) Wheels, Life and Other Mathematical Amusements (1983), Chapters 20-22; cm. также E. R. Berlekamp, J. H. Conway and R. K. Guy, Winning Ways 4 (A. K. Peters, 2004), Chapter 25.]* Наконец, я получил то, что хотел, — по-видимому, непредсказуемые законы генетики. .. .Перенаселенность, как и недоуплотненность, ведет к гибели. Здоровое сообщество не является ни слишком плотным, ни слишком разреженным. — ДЖОН X. КОНВЕЙ (JOHN Н. CONWAY), письмо Мартину Гарднеру (Martin Gardner) (март 1970) 168. Приведенный далее алгоритм, использующий четыре n-битовых регистра х~, х, х+ и у, корректно работает даже тогда, когда М = 1 или N = 1. Он требует только около двух чтений и двух записей на слово растра для выполнения преобразования Х^ в Х^<+1^ из (158). * Отличная высокоскоростная компьютерная реализация “Жизни" (и ее разновидностей) име- ется по адресу http://golly.sourceforge.net/.—Примеч. пер.
7.1.3 ОТВЕТЫ К УПРАЖНЕНИЯМ 681 С1. [Цикл по fc.] Установить А^о Ч— 0 для 0 < j < М. Затем выполнить шаг С2 для к = 1, 2, ..., N'. Затем перейти к шагу С5. С2. [Цикл по j.] Установить х Ч— А(м-1)л, х+ <— Ао* и Амк <— х+. Затем выполнить шаги СЗ и С4 для j = 0, 1, ..., М — 1. СЗ. [Перемещение вниз.] Установить х~ <— х, х <— х+ и х+ A(j+1)fc. (Теперь х = Ajk, и х~ хранит предыдущее значение A(j_i;fc.) Вычислите значения битовой функции у ч— f(x~ 1,х~,х~ С 1,sc 3> 1,х,х С 1,х+ 1,х+,х+ С 1). С4. [Обновление А^.] Установить х~ ч— Aj(fc_ij & —2, у Ч— y&t (2"-1 — 1), АдЛ_1) ч— х~ + (у » (п - 2)), Ajk Ч- у + (х- С (п - 2)). С5. [Оборот.] Для 0 < j < М установить х ч— AjN> & —2"_1-d, AiNi ч— х + (Aji S> d) и Aji ч— Aji + (i< d), где d = 1 + (N — 1) mod (n — 2). | [Во многих случаях, таких как (157) и (159), и даже (161), тор MxN эквивалентен массиву (М — 1) х (N — 1), окруженному нулями. Для упр. 173 можно очистить массив (М — 2) х (N — 2), ограниченный двумя строками и столбцами нулей. Но изображения “Жизни” (см. упр. 167) могут расти безгранично; их нельзя безопасно ограничить тором.] 169. Он быстро превратится в кролика, который затем взорвется. Начиная с момента 278, ситуация стабилизируется, и у нас остаются несколько “светофоров” три дополнительные “мигалки” а также три стабильных объекта (“ванная” “лодка” и “улей”). 170. Если М > 2 и N > 2, на первом шаге вырезается верхняя строка и крайний справа столбец. Затем, если М > 3 и N > 3, на очередном шаге вырезаются нижняя строка и крайний слева столбец. Так что в общем случае после t = min(A/, N) — 1 шагов мы останемся с одной строкой или столбцом черных пикселей: первые [t/2] строк, последние [t/2] столбцов, последние |t/2J строк и первые [t/2J столбцов устанавливаются равными нулю. Автомат остановится после того, как выполнит два (непроизводительных) цикла. 171. Без (160): xi ч— xSE & xN, хг ч— xN & xSe, хз ч— хе & Xi, Х4 ч— xNE & Х2, хз ч— хз | Х4, хз Ч— Xw & Хз, Хт Ч— Xi & Xnb, Х8 Ч— Хт & Znw, Хд Ч— Хе | Xsw, zio Ч— xg & Хд, Хц Ч— Xio | Хе, Х12 Ч Xs&Xll, Х13 Ч Х2&ХЕ, Х14 Ч X13&Xw, Х15 Ч Xn^Xne, Xie Ч Xsw&Zw, Z17 Ч 3*15 | Xie, Xie ч— xNe & Zsw, zig <— Z17 & Xie, X20 ч— xE | Xse, X21 ч— X20 | Zs, X22 ч— xNw & Z21, Z23 4— X22 & zig, Z24 4— X12 I X14, g 4— X23 | Z24- C (160) установите X4 4— xNE & xN, а все остальное оставьте таким же. 172. Это утверждение не вполне истинно; рассмотрим следующие примеры. ‘Г и ‘Н’ слева показывают, что пиксели иногда остаются нетронутыми там, где соединяются пути, и что поворот на 90° может изменить ситуацию. Два следующих примера иллю- стрируют необычное влияние зеркального отражения слева направо. Пример с ромбом демонстрирует, что очень толстые изображения могут быть неутончаемыми; ни один из его черных пикселей не может быть удален без изменения количества дыр. Последние примеры, один из которых вызван к жизни ответом к упр. 166, были сначала обработаны без учета случаев (160) и при этом остались неизменными. Но стоит применить (160), и это приведет к разительному утончению. 173. (а) Указание легко проверяется. Обратите внимание, что если X и Y закрыты, X&Y закрыт; если X и Y открыты, X | Y открыт. Таким образом, XD закрыт, a XL открыт; XDD = XD и XLL = XL. (Фактически мы имеем XL = ~(~X)D, поскольку определения дуальны и получаются путем обмена черного и белого.) Теперь XDL С XD, так что
682 ОТВЕТЫ К УПРАЖНЕНИЯМ 7.1.3 XDLD с XDD — XD. И, дуально, XL С XLDL. Мы заключаем, что нет причин для отмывания чистого рисунка: XDLDL = (XDLD)L С XDL С (XD)LDL = XDLDL. (б) Мы имеем XD = (X | Xw | XNW | XN)&(X | XN | XNE | ХЕ)&(Х | ХЕ | XSE | Xs)& (X|XS |XSw |xw). Кроме того, по аналогии с ответом к упр. 167, (б), эта функция может быть вычислена из х~, х и х+ за десять широкословных шагов: f <— х | (х >> 1) | ((х~ | (х~ 3> 1)) & (х+ | (х+ 1))), f <— f & (/ 1). [Этот ответ включает идеи Д. Р. Фачса (D. R. Fuchs).] Чтобы получить XL, просто обменяйте | и &. [Дополнительную информацию можно почерпнуть из С. Van Wyk and D. E. Knuth, Report STAN-CS-79-707 (Stanford Univ., 1979), 15-36.] 174. Трехмерная цифровая топология изучалась в R. Malgouyres, Theoretical Computer Science 186 (1997), 1-41. 175. Таковых 25 во внешнем контуре, 2 + 3 в глазах, 1 + 1 в ушах, 4 в носу и 1 в улыбке, т. е. всего 37. (Все белые пиксели фона связаны ходом короля.) 176. (а) Если v не является изолированной вершиной, то имеется восемь простых случаев, которые следует рассмотреть, зависящих от того, какого вида сосед имеется у v в G. (б) Некоторая w' € С смежна или эквивалентна каждой вершине Nu U Nv. (Четыре случая.) (в) Да. Фактически, согласно определению (161), мы всегда имеем |S'(t/)| > 2. (г) Пусть IV', = {и | v' € М,}- Если v' является восточным соседом и', назовем его пЕ; либо и € G, либо г4 6 G- Этот элемент совпадает или смежен с каждой вершиной в N'u, U N’vi. Аналогичные рассуждения применимы и тогда, когда v' = и^. Если v' = и'^Е, в случае, когда и' € G, нет никаких проблем. В противном случае u'w EG,usEG,k либо u'N € G, либо и'Е G G; следовательно, N'u, U N'v, является связным в G. Наконец, если и' = и'5Е, доказательство оказывается простым при u's € G; в противном случае и' € G и v' € G. (д) Пусть для данного нетривиального компонента С графа G, обладающего тем свойством, что v € С и v' € S(t>), С' представляет собой компонент G', который содер- жит v'. Этот компонент С' вполне определен, согласно п. (а) и (б). Пусть для заданного компонента С' графа G', обладающего тем свойством, что v G С' и v G S'(v'), G пред- ставляет собой компонент графа G, который содержит v. Этот компонент G нетривиален и вполне определен согласно п. (в) и (г). Наконец соответствие С ++ С является взаимно однозначным. 177. Теперь вершинами G являются белые пиксели, смежные, когда они достижимы ходом ладьи. Так что мы определим 7V(ij) = {(i, j), (г—l,j), (*• j+1)}- Доказательство, подобное приведенному в ответе к упр. 176, но более простое, устанавливает взаимно однозначное соответствие между нетривиальными компонентами G и компонентами G . 178. Заметим, что в соседних строках X* два пикселя с одним и тем же значением явля- ются соединенными ходом коня, только если они соединены ходом ладьи. 179. Пиксели xi... каждой строки могут быть закодированы с использованием метода кодирования длин серий как последовательность целых чисел 0 = со < ci < - - - < C2m+i = N + 2, так что Xj = 0 для j € [со - - ci) U [сг .. сз) U • • • U [с2,п .. С2т+1) и xj = 1 для j е [ci ..сг) U ••• U [c2m-i С2т). (Количество серий в строке в большинстве изображений достаточно малб. Заметим, что неявно предполагается условие хо = in+i = 0.) В приведенном ниже алгоритме используется модифицированное кодирование с aj = 2cj ~ (j mod 2) для 0 < j < 2m + 1. Например, вторая строка чеширского кота имеет (с1,С2,Сз,С4,сз) = (5,8,23,25,32); вместо этого мы будем использовать (01,02,03,04,05) = (9,16,45,50,63). Причина заключается в том, что белые серии смежных строк являются “ладейно-смежными” тогда и только тогда, когда соответствующие отрезки [aj..aj+i)
7.1.3 ОТВЕТЫ К УПРАЖНЕНИЯМ 683 и [bit ..bfc+i) перекрываются, и точно такое же условие описывает “королевско-смежные” черные серии в смежных строках. Таким образом, модифицированное кодирование краси- во объединяет оба случая (см. упр. 178). Мы строим трижды связанное дерево текущих компонентов, где каждый узел имеет несколько полей: CHILD, SIB и PARENT (связи в дереве); DORMANT (циклический список, с помощью связей SIB, из всех первых дочерних узлов, которые не связаны с текущей строкой); HEIR (узел, который его поглощает); ROW и COL (положение первого пикселя); и AREA (общее количество пикселей в компоненте). Алгоритм обходит дерево в двойном порядке (см. упр. 2.3.1-18), используя пары указателей (P,PZ), где Р' = Р при первом обходе Р, Р' = PARENT (Р) при втором обходе Р. Преемником (Р, Pz) является (Q,QZ) = next(P, Pz), определяемый следующим образом: если Р = Р' и CHILD (Р) Л, то Q ч— Q' ч— CHILD (Р); в противном случае Q ч— Р и Qz ч— PARENT(Q). Если Р / Р' и SIB(P) / Л, то Q <- Q' <- SIB(P); в противном случае Q Ч— PARENT (Р) и Q' Ч- PARENT (Q). Если имеется тп черных серий, дерево будет иметь m + 1 узлов, не считая “спящих” или поглощенных узлов. Более того, подготовленные указатели Р i, ..., P^m+i двойного обхода (Pi,Pi), ..., (Pjm+iiPam+i) в точности являются компонентами текущей строки, в порядке слева направо. Например, в (163) мы имеем тп = 5; и (P'i,... , Рп) указывают соответственно на ©, ф, ф, Ф> ©, Ф, @, ®, @> Ф> ©• II. [Инициализация.] Установить t ч— 1, ROOT ч— LOC(NODE(O)), CHILD (ROOT) ч— SIB (ROOT) 4— PARENT (ROOT) 4- DORMANT (ROOT) 4- HEIR (ROOT) 4- Л; а также уста- новить ROW (ROOT) 4— COL (ROOT) 4- 0, AREA (ROOT) 4- N + 2, s 4- 0, a0 4- bo 4- 0, ai ч— 2N + 3. 12. [Ввод новой строки.] Завершить работу алгоритма, если s > М. В противном случае устанавливать bk ч— а& для fc = 1, 2, ..., пока не будет выполнено условие bk = 2N + 3; затем установить bk+i ч— bk в качестве “стопора’.’ Установить s ч— s + 1. Если s > М, установить ai ч— 2N + 3; в противном случае ai, ..., a2m+i представляют собой результат модифицированного кодирования длин серий строки s, рассмотренного выше. (Это кодирование может быть достигнуто с помощью функции р; см. (43).) Установить уч—fc4—1иРч— Р'ч— ROOT. 13. [Поглощение коротких Ь.] Если bt+i > aj, перейти к шагу 19. В противном случае установить (Q, Q') ч— next(P,P'), (R, Rz) ч— next(Q, Q') и выполнить четырехвари- антное ветвление к (14,15,16,17) в зависимости от значения 2[Q^Q'] + [R^RZ] = (0,1,2,3). 14. [Случай 0.] (Сейчас Q = Qz является дочерним узлом по отношению к Pz, a R = R' является первым дочерним узлом по отношению к Qz. Узел Q останется дочер- ним узлом Pz, но он будет предшествовать любому другому дочернему узлу R.) Включить R в Р' (см. ниже). Установить CHILD (Q) ч— SIB(R) и Qz ч— CHILD (R). Если Qz Л, установить R ч— Qz и, пока R Л, устанавливать PARENT (R) ч— Pz, R ч— SIB(R); затем SIB(R) ч— Q, Q ч— Qz. Установить CHILD(P) ч— Q, если Р = Pz, SIB(P) ч— Q, если Р^Р'. Перейти к шагу 18. 15. [Случай 1.] (Сейчас компонент Q = R окружен Pz = Rz.) Если Р = Р', установить CHILD(P) ч— SIB(Q); в противном случае установить SIB(P) Ч— SIB(Q). Устано- вить R ч— DORMANT(Rz). Затем, если R = Л, установить DORMANT(Rz) Ч— SIB(Q) ч— Q; в противном случае SIB(Q) ч— SIB(R) и SIB(R) ч— Q. Перейти к шагу 18. 16. [Случай 2.] (Сейчас Qz является родителем как Pz, так и R. Либо у Р = Pz нет дочерних узлов, либо Р представляет собой последний дочерний узел Pz.) Включить R в Р' (см. ниже). Установить SIB(P') ч— SIB(R) и R ч— CHILD(R). Если
684 ОТВЕТЫ К УПРАЖНЕНИЯМ 7.1.3 Р = Р', установить CHILD (Р) Ч— R; в противном случае SIB(P) ч— R. Пока R Л, устанавливать PARENT (R) ч— Р' и R Ч— SIB(R). Перейти к шагу 18. 17. [Случай 3.] (Узел Р' = Q является последним дочерним узлом Q' = R, который является дочерним узлом R'.) Включить Р' в R' (см. ниже). Если Р = Р', установить Р ч— R. В противном случае установить Р' ч— CHILD (Р') и, пока Р' Л, устанавливать PARENT(P') ч— R', Р' ч— SIB(P'); установить также SIB(P) ч— SIB(Q') и SIB(Q') ч- CHILD(Q). Если Q = CHILD(R), установить CHILD(R) ч- Л. В противном случае устанавливать R ч— CHILD (R), затем R ч— SIB(R), пока не будет выполнено условие SIB(R) = Q, затем SIB(R) ч— Л. Наконец установить Р' ч- R'. 18. [Продвижение fc.] Установить к ч— к + 2 и вернуться к шагу 13. 19. [Обновление площади.] Установить AREA(P') ч— AREA(P') + [oj/2] — [aj-i/2]. Затем вернуться к шагу 12, если aj = 2N + 3. ПО. [Поглощение короткого а.] Если aj+i > bk, перейти к шагу Ill. В противном случае установить Q ч— LOC(NODE(t)) и t ч— t + 1. Установить PARENT(Q) ч— Р', DORMANT(Q) ч- HEIR(Q) ч- Л; а также ROW(Q) ч- s, COL(Q) Ч- [aj/2], AREA(Q) ч- [aj+i/2] - [aj/2]. Если Р = Р', установить SIB(Q) ч- CHILD(P) и CHILD(P) ч- Q; в противном случае установить SIB(Q) ч— SIB(P) и SIB(P) ч— Q. Наконец установить Р ч— Q, j Ч— j + 2 и вернуться к шагу 13. Ill. [Продвижение.] Установить j ч— j + 1, к ч— к + 1, (Р,Р') ч— next(P,P') и перейти к шагу 13. | “Включить Р в Q” означает выполнение следующих действий: если (ROW (Р), COL (Р) ) меньше (ROW(Q),COL(Q)), установить (ROW(Q),COL(Q)) ч- (ROW(P),COL(P)). Установить AREA (Q) ч- AREA(P) + AREA(Q). Если DORMANT(Q) = Л, установить DORMANT(Q) ч- DORMANT(Р); в про- тивном случае, если DORMANT (Р) / Л, обменять SIB (DORMANT (Р)) Ч-> SIB (DORMANT (Q) ). Наконец установить HEIR(P) ч— Q. (Связи HEIR могут использоваться при втором проходе для идентификации последнего компонента каждого пикселя. Заметим, что связи PARENT “спящих” узлов не поддерживаются в актуальном состоянии.) [Аналогичный алгоритм был предложен Р. К. Луцем (R. К. Lutz) в Comp. J. 23 (1980), 262-269.] 180. Пусть F(x,y) = х2 — у2 + 13 и Q(x,y) = F(x — |,у — |) = х2 — у2 — х + у -I- 13. Применим алгоритм Т для оцифровки гиперболы от (&,tf) = (—6,7) до (tf ,tf) = (0, л/13); следовательно, х = —6, у = 7, х' = 0, у' = 4. Получающиеся в результате ребра представляют собой (—6,7) — (—5,7) — (—5,6) — (—4,6) — (—4,5) — (—3,5) — (—3,4)---------(0,4). Затем применим его опять с £ = 0, г] = л/13, С' = 6, tf = 7, х - 0, у = 4, а/ = 6, у' = 7; будут найдены те же ребра (в обратном порядке), но с обратным знаком координаты х. 181. Выполните подразделение в точках (£,tf), где Fx(£, tf) = 0 или Fy(£,tf) = 0, а именно в действительных корнях {Q(—(Ь(ч+ |) +d)/(2a),7?+ |) = 0, £ — —(Цч+ %) + d)/(2a) ~ j} или в действительных корнях {Q(£+|,— (Ь(£+|)+е)/(2с)) = 0, 7] = — (5(£+|)+е)/(2с)— |}, если таковые существуют. 182. По индукции по |я:' — х| + \у' — р|. Рассмотрим, например, случай х > я/ и у < у'. Из (iii) мы знаем, что (£, tf) лежит в прямоугольнике х — | < £ < х + | и р — | < 7] < у + |, а из (ii), что кривая при движении из точки (£,tf) в (£',tf) монотонна. Следовательно, она должна выходить из прямоугольника через сторону (я: — |,р — |) — (я: — |,р + |) или (я: — |, у + |) — (х + |, у + |). Последнее выполняется тогда и только тогда, когда F(x — |, у +1) < 0, поскольку кривая не может пересекать это ребро дважды при х' < х. A F(x — |,р+ |) представляет собой значение Q(x,y +1), проверяемое на шаге Т4, в соответствии
7.1.3 ОТВЕТЫ К УПРАЖНЕНИЯМ 685 с инициализацией на шаге Т1. (Мы считаем, что кривая не проходит в точности через (х — |, у + |), путем неявного добавления за сценой к функции F малой положительной величины.) 183. Рассмотрим, например, эллипс, определяемый как F(x — |,j/ — |) = Q(x,y) = 13х2 + 7ху + у2 — 2 = 0; этот эллипс представляет собой сигарообразную кривую, которая распо- лагается примерно между (—2,5) и (1,-6). Предположим, что мы хотим оцифровать ее верхнюю правую границу. Гипотезы (i)-(iv) алгоритма Т выполняются с х = 1, у = —6, х' = —2, у' = 5. На шаге Т1 устанавливается Q ч— 0(1,—5) = 1, что заставляет шаг Т4 двигаться влево (L); фактически получающийся в результате путь представляет собой L3Ulr, в то время как корректная оцифровка согласно (164) имеет вид U3LU4LU3LU. Сбой в работе алгоритма происходит потому, что Q(x,y) = 0 имеет два корня на границе (1, —5) — (2, —5), а именно ((35 ± —\/29)/26, —5), приводя к тому, что 0(1,—5) имеет тот же знак, что и Q(2, —5). (Один из этих корней располагается на границе, которую мы не пытаемся чертить.) Аналогичный сбой происходит и в случае параболы, определяемой уравнением Q(x, у) = 9х2 + бху + у2 — у = 0, £ = —5/12, 7) = —1/4, = —5/2, 7]' = —19/2, х = 0, у = 0, х = —2, у' = 9. Гиперболы также не лишены этой неприятности (рассмотрите 6х2 + бху + у2 = 1). Алгоритмы дискретной геометрии печально известны своей чувствительностью; не- обычные ситуации приводят их в недоумение. Алгоритм Т корректно работает для частей любого эллипса (или параболы), максимальная кривизна которого меньше 2. Максималь- ная кривизна эллипса с полуосями а > /3 равна а//32; сигарообразный пример имеет максимальную кривизну я 42.5. Максимальная кривизна параболы у = ах2 равна а/2; описанная выше аномальная парабола имеет максимальную кривизну я 5.27. “Разумные” конические сечения не делают таких крутых поворотов. Чтобы заставить алгоритм Т корректно работать без гипотезы (v), нам придется немного его замедлить, заменив проверку ‘Q < 0’ на ‘Q < 0 или X’, где X представляет со- бой проверку знака производной, а именно X представляет собой соответственно проверку ‘S > с', ‘R > а', 41 < —a’, ‘S < —с’ на шагах Т2, ТЗ, Т4 и Т5. 184. Положим Q'(x,y) = — 1 — Q(x,y). Ключевой момент заключается в том, что Q(x,y) < 0 тогда и только тогда, когда Q'(x, у) > 0. (Любопытно, что алгоритм принимает те же самые решения в обратном направлении, хотя проверяет значения Q’ и Q в разных местах.) 186. Найдем положительное целое число h, такое, чтобы d = (г] — r]')h и е = ((' - £)h были целыми и d + е было четным. Затем выполним алгоритм Т с х = [£ + |J, у = L7? + 1J> х' = « + |J> У' = IV + |J и Q(x,y) = d(x - |) + е(у - |) + /, где f = L(V€ “ t'nW - [d > 0 и (т/f - grfjh целое]. (Член ‘d > 0’ гарантирует, что противоположная прямая линия, от (£',»/) до (£,»?), будет см. упр. 184.) Шаги Т1 и Т6-Т9 становятся гораздо проще, чем :у R = du S = е являются константами. (Ф. Г. Стоктон (F. С. Stockton) [САСМ в (1963), 161, 450] и Д. Э. Брезенхам (J. Е. Вге- senham) [IBM Systems Journal 4 (1965), 25-30] разработали подобные алгоритмы, но с раз- решенными диагональными границами.) 188. (а) В(е) = zo + 2e(zi — zo) + О(е2); В(1 — е) = Z2 — 2е(гг — zi) + О(е2). (б) Каждая точка S(zo, zi, гг) представляет собой выпуклую комбинацию zo, zi и гг. (в) Очевидно, истинно, поскольку (1 — t)2 + 2(1 — t)t + t2 = 1. иметь точно тот же вид; I в обшем случае, поскольк
686 ОТВЕТЫ К УПРАЖНЕНИЯМ 7.1.3 (г) Условие коллинеарности следует из (б). В противном случае, согласно (в), нам нужно рассмотреть только случай zo = 0 и Z2 — 2zi = 1, где zi = xi + iyi и yi 0. В этом случае все точки лежат на параболе 4х = (p/j/i)2 + 4yx\/yi. (д) Заметим, что В(и0) = (1 — u)2zo+2u(l — и)((1—0)zo +0Z1) +и2В(0) для 0 < и < 1. [С. Н. Бернштейн ввел Bn(zo, zi,... , zn;t) = Gt)(l — t)n~ktkZk в Сообщениях Харь- ковского математического общества (2) 13 (1912), 1—2.] 187. Можно считать, что zq = (хо,Уо), zi = (xi,j/i) и zj = (212,1/2), где координаты являются, скажем, числами с фиксированной точкой, представленными в виде 16-битовых целых чисел, деленных на 32. Если zo, zi и Z2 коллинеарны, используем метод из упр. 185 для черчения прямой линии от zo до Z2. (Если zi не лежит между zo и Z2, другие границы взаимно уничтожа- ются, поскольку алгоритмом заполнения к ним неявно применяется операция ЛИБО.) Это осуществляется тогда и только тогда, когда D = xoyi + xiy3 +хзуо — хгуо — хзу1 — хоуз = 0. В противном случае точки (х,у) кривой S(zo, zi, Z2) удовлетворяют уравнению F(x,y) = 0, где F(x, у) = ((х - xo)(l/2 - 2pi + уо) -(у- уо)(хз - 2xi + то))2 - 4Z>((xi - х0)(у - уо) - (1/1 - Уо)(х - хо)), a D определено выше. Для получения целочисленных коэффициентов мы выполняем умно- жение на 324; затем меняем знак формулы и вычитаем 1, если D < 0, чтобы удовлетворить условие (iv) алгоритма Т и условие обратного порядка (см. упр. 184.) Условие монотонности (ii) выполняется тогда и только тогда, когда (xi — хо)(а/2 — я/i) > 0 и (yi — уо)(уз — pi) >0. При необходимости мы можем использовать рекуррентное соотношение из упр. 186, (д), чтобы разбить S(zo,zi,zz) на максимум три монотонных подсквайна; например, выбор 0 = (хо — xi)/(xo — 2ц + хз) дает монотонность по х. (При выполнении арифметических действий с числами с фиксированной точкой может появиться небольшая ошибка округления, но рекуррентность можно выполнить таким образом, чтобы сквайны были точно монотонными.) Примечания. Когда zo, zi и Z3 близки друг к другу, для большинства практиче- ских целей достаточно более простого и быстрого метода, основанного на упр. 186, (д) с 0 = |, если не беспокоиться о точном выборе между локальными последовательностями границ наподобие “вверх-и-влево” и “влево-и-вверх’.’ В конце 1980-х годов Сампо Каасила (Sampo Kaasila) выбрал сквайны в качестве базового метода спецификации для шрифтов в формате TrueType, что и позволяет оцифровывать их так быстро. Система METAFONT достигает большей гибкости с помощью1 кубических сплайнов Безье [см. D. Е. Knuth, METRFONT: The Program (Addison-Weslpy, 1986)], но ценой большего времени работы. Однако впоследствии Джоном Хобби (Johp Hobby) для результирующих кубических кри- вых был разработан “шестирегистровый (алгоритм” [ACM TYans. on Graphics 9 (1990), 262-277]. Воган Пратт (Vaughan Pratt) разработал конические сплайны, нечто среднее между сквайнами и кубическими сплайнами Безье, в Computer Graphics 19,3 (July 1985), 151-159. Сегменты конического сплайна могут быть эллиптическими, гиперболическими или параболическими, следовательно, они требуют меньшего количества промежуточных и управляющих точек, чем сквайны; кроме того, с ними можно работать с помощью алгоритма Т. 188. В следующей программе, работающей с обратным порядком байтов, предполагается, что п < 74880.
7.1.3 ОТВЕТЫ К УПРАЖНЕНИЯМ 687 LOC Data_Segment LDO k,Initk BITMAP LOC <8+M*N/8 OH SET s,N/64 base GREG Q 1H SET a,h Трюк (см. ниже). GRAYMAP LOC <8+M*N/64 SET r,8 GTAB BYTE 255,252,249.246,243 2H LDOU t,base,k BYTE 240,236,233,230,227 MOR u,cl,t BYTE 224,221,217,214,211 SUBU t,t,u (По-четвертьбайтовая сумма) BYTE 208,204,201,198,194 MOR u,c2,t BYTE 191,188,184,181,178 AND t,t,mul BYTE 174,171,167,164,160 ADDU t,t,u (По-полубайтовая сумма). BYTE 157,153,150,146,142 MOR u,c3,t BYTE 139,135,131,128,124 AND t,t,mu2 BYTE 120,116,112,108,104 ADDU t,t,u (Побайтовая сумма). BYTE 100,96,92,88,84 ADDU a,a,t BYTE 79,75,70,66,61 INCL k,N/8 Переход к следующей строке. BYTE 56,52,46,41,36 SUB r,r,l BYTE 30,24,18,10,0 PBNZ r,2B Повторить 8 раз. Initk OCTA BITMAP-GRAYMAP 3H SRU t,a,56 corr GREG N-8 LDBU t,gtab,t cl GREG «4000100004000100 SLU a,a,8 c2 GREG «2010000002010000 STBU t,z,0 c3 GREG «0804020100000000 INCL Z,1 mul GREG «3333333333333333 PBN a,3B (Трюк). mu2 GREG #0f Of Of Of Of Of Of Of SUB k,k,corr h GREG «8080808080808080 SUB 8,8,1 gtab GREG GTAB-«80 PBNZ s, IB Цикл по столбцам. LOC «100 INCL k,7*N/8 Цикл по группам MakeGray LDA z,GRAYMAP PBN k,OB из 8 строк. [Вдохновленный DVIPAGE Нейла Ханта (Neil Hunt), автор широко использовал та- кие изображения при подготовке нового издания Искусства программирования в 1992- 1998 годах.] 189. Если строками растра являются (Хо,Х1,...,Хвз), выполните следующие операции для fc = 0, 1, ..., 5: для всех г, таких, что 0 < г < 64 и г&2* =0, положить j = i + 2k и либо (а) установить! ч— (X,®(Xj^>2fc))&/ze,fc, X, ч— Х,ф!, Xj ч— Xj®(t<j2fc); либо (б) установить t ч— Xt & pe.fc, и <— Xj & P6,k, Xi ч— ((Xj 2fc) & Дел) | u, Xj 4— ((Xj 2fc) & Дел) 1t. [Основная идея заключается в преобразовании 2fc х 2fc подматриц для увеличения fc, как в упр. 5-12. На машине MMIX можно добиться ускорения за счет применения инструк- ций M0R и MUX, как в упр. 208, и использования LDTU/STTU при fc = 5. См. L. J. Guibas and J. Stolfi, ACM Transactions on Graphics 1 (1982), 204-207; M. Thorup, J. Algorithms 42 (2002), 217. Кстати, теорема P и ответ к упр. 54 показывают, что для транспонирования би- товой матрицы п х п необходимы Q(n log п) операций с n-битовыми числами. Приложение, которому часто требуется выполнять транспонирование, может воспользоваться избыточ- ным представлением, одновременно поддерживая матрицу в прямом и транспонированном виде.] 190. (а) Мы должны иметь aj+i = f(<*j) ф Qj-i для j > 1, где ао = 0...0 и /(а) = ((а 1) fc 1... 1) ф о ® (a > 1). Элементы нижней строки ат удовлетворяют условию четности тогда и только тогда, когда это правило делает am+i полностью нулевым. (б) Истинно. Условие четности, накладываемое на элементы матрицы а,л-, имеет вид av = a(«-i)j ® ai(j-i) ® at(j+i) Фа(ы-1Ъ> где = 0, если i = 0 или i = m +1, или j = 0, или
688 ОТВЕТЫ К УПРАЖНЕНИЯМ 7.1.3 j = п + 1. Если матрицы (a,j) и (Ьц) удовлетворяют этому условию, то ему удовлетворяет и (cij) при сц = ац ф bij. (в) Верхняя левая подматрица, состоящая из всех строк, предшествующих первой полностью нулевой строке (если таковая имеется) и всех столбцов, предшествующих пер- вому полностью нулевому столбцу (если таковой имеется), является идеальной. А эта подматрица определяет всю матрицу, поскольку шаблон с другой стороны от строки или столбца нулей представляет собой горизонтальное или вертикальное отражение ее соседей. Например, если am/+i равно нулю, то am,+1+^ = am>+1_j для 1 < j < тп'. (г) Начиная с заданного вектора си и используя правило из п. (а), мы всегда придем к строке с am+i = 0...0. Доказательство: мы должны иметь (aj,aj+i) = (afc,at+i) для некоторого 0 < j < к < 22" согласно принципу голубиного гнезда. Если j > 0, мы также имеем (aj_i,aj) = (а&-1,а&), поскольку aj-i = f(aj) ф ay+i = /(а*) ф а&+1 = ал-i. Следовательно, первая повторяющаяся пара начинается со строки нулей at. Кроме того, мы имеем сц = ak-i для 0 < г < к; следовательно, первая полностью нулевая строка am+i встречается, когда т равно fc — 1 или fc/2 — 1. Строки ai, ..., ат образуют идеальный шаблон, если только не имеется столбца, состоящего из нулей. Имеется t > 0 таких столбцов тогда и только тогда, когда t + 1 явля- ется делителем п + 1, a ai имеет вид а0ая0... Oa (t четно) или а0ая0... 0ая (t нечетно), где |а| + 1 = (п + l)/(t + 1). (д) Этот стартовый вектор имеет вид, не запрещенный в п. (г). 191. (а) Первый представляет собой ai, a2, ... тогда и только тогда, когда последний имеет вид 0а10ая, 0а20ая, .... (б) Пусть бинарная строка aoai.. . aw-i соответствует полиному ao + aix + • - • + aw-ix1*"1 и пусть у = х-1+1+х. Тогда ao = 0...0 соответствует Fo(y); ai = 10...0 соответствует Fi (р); и по индукции а^ соответствует Fj (у) по модулю xN+1 и по модулю 2. Например, когда N = 6, мы имеем аг = 110001 <-> 1+ х + Xs, поскольку х~г mod (х6 +1) = Xs, и т. д. (в) И вновь применяется индукция по j. (г) Тождество в указании выполняется по индукции по т, поскольку оно очевидно истинно при т = 1 и т = 2. При работе по модулю 2 это тождество дает простые уравнения F2k(y) = yFk(y)2-, F2fc-i(p) = (Fk-i(y) + Fk(y))2. Так что мы можел? перейти от пары Р* = (Fk-i(y) mod (xN+l), Fk(y) mod (xN+l)) к паре Pfc+i за O(n) шагови к паре Ргь за О(п2) шагов. Таким образом, мы можем вычислить Fj(y) mod (xN+ 1) после O(log j) итераций. Умножение на fa (х) + /Q(x-1) и последующее уменьшение по модулю xN+ 1 позволяет нам вывести значение aj. Кстати, Fn+i(x) является частным случаем Кп(х,х,... ,х) континуант; см. 4.5.3-(4). Мы имеем Fn+i(x) = 52£=О (n~jek)xn~2k = i~nUn(ix/2), где Un — классический полином Чебышева, определяемый как Un(cos0) = sin((n + l)0)/sin0. 192. (а) Согласно упр. 191, (в), с(д) является наименьшим j > 0, таким, что (х+х-1 )Fj (х-1+ 1 + х) = 0 (по модулю х2’ + 1), с использованием полиномиальной арифметики по моду- лю 2. Или, что то же самое, это наименьшее положительное j, для которого Fj(y) кратно (х2’ + 1)/(х2 + 1) = (1 + х -I-1- х’-1)2, когда у = х-1+14-х. (б) Используйте метод из упр. 191, (г) для вычисления ((х + x~l)Fj(y)) mod (х2’ + 1) при j = М/р для всех простых делителей р числа М. Если результат окажется нулевым, установите М <— М/р и повторите процесс. Если ни один из таких результатов не равен нулю, с(д) = М. (в) Мы хотим показать, что с(2е) является делителем 3 • 2е-1, но не 3 2е-2 или 2е-1. Последнее утверждение выполняется, поскольку F2e-i(p) = у2*~ -1 является взаимно
7.1.3 ОТВЕТЫ К УПРАЖНЕНИЯМ 689 простым с x2‘+t + 1. Первое утверждение справедливо потому, что Р3.2.-г(у) = +1/)2' = Z^V'+Z, 2е+1 i что = 0 по модулю х + 1, но не по модулю х +1. (г) F2e-i(y) = X2Z=i У2*-2*- Поскольку у = х~1 (14-хЧ-х2) взаимно простое с ж’-Ы, мы имеем y~l = аоЧ-агхЧ-----Fag-ix’-1 (по модулю х9 + 1) для некоторых коэффициентов а^, следовательно, у~2 = ао + aix2 Ч-----1- aq-ix2 = ао + aix2 + Ч--------1- aq-ix2 + = у~2 по модулю хч Ч-1 для 0 < к < е, и отсюда следует, что F2^_l(y) кратно х2я Ч-1. (д) В этом случае с(д) делит 4(22е — 1). Доказательство: пусть х9Ч-1 = fi(х) f2(x) ... х fr(x), где fi(x) = х Ч- 1, /г(я) = х2 Ч- х Ч- 1, и каждое fi(x) неприводимо по модулю 2. Поскольку q нечетно, эти множители различны. Следовательно, в конечном поле поли- номов по модулю fj(x) для j > 3 мы имеем р-2* = у~2к+*, как в п. (г). Следовательно, кратно f3(x) ... fr(x) = (х9 Ч- l)/(z3 Ч- 1). Так что F4(22«_i)(!/) = У3^2^-1(.У)4 кратно (х2я Ч- 1)/(х2 Ч-1) = /г (я)2/з (я)2 ... fr(x)2, что и требовалось доказать. (е) Если Fc(g)(j/) кратно я:2’ Ч-1, легко видеть, что c(2g) = 2с(д). В противном случае F3c(q)(.y) кратно F3(y) = (1 Ч- у)2 = т-2(1 Ч- х)4; следовательно, Fec(g)(p) кратно х4« Ч- 1 и с(2д) делит 6с(д). Последнее происходит только тогда, когда q нечетно. Примечания. Шаблоны четности имеют отношение к популярной головоломке “Lights Out” изобретенной в начале 1980-х годов Дарио Ури (Dario Uri) и независимо от него почти в то же время Меро Ласло (Liszl6 Мёгб) и названной XL.EI5. [См. David Singmaster, Cubic Circular, issues 7&8 (Summer 1985), 39-42; Dieter Gebhardt, Cubism For Fun 69 (March 2006), 23-25.] Клаус Сатнер (Klaus Sutner) разработал прочие аспекты этой теории в Theoretical Computer Science 230 (2000), 49-73. 193. Пусть b(2i)(2j) = Oij, b(2i+l)(2j) = a4®a(i+l)jl b(2t)(2j+l) ~ ОуФв*0+1) и b(2»+l)(2j+l) = 0 для 0 < i < тиО < j <n, где мы считаем ay = 0 при i = 0 или i = тЧ-1, или j = 0, или j = пЧ-1. (h(2i)i,b(2«)2) • • •, Ь(2»)(2п+1)) = (0,0,...,0) не выполняется, поскольку (a«i,... ,а«п) (0,...,0) для 1 < г < т. Не выполняется также и (b(2i+i)i,b(2i+i)2,• • • ,b(2«+i)(2n+i)) = (0,0,..., 0), поскольку соседние строки (a,i,..., a,n) и (а(4+1)!,..., a(i+1jn) всегда различны для 0 < i < т, когда т нечетно. 194. Установим ч— (1 С (n—i)) | (1 С (г—1)) для 1 < г < т, где т = [п/2]. Установим также 7, ч— (/3i & a.i) ч- (/?2 & оц2) Ч-F (J3m & счт), где ay представляет собой j-ю строку шаблона четности, который начинается с /3,; вектор 7, записывает диагональные элементы такой матрицы. Затем установим г Ч— 0 и применим подпрограмму N из ответа к упр. 195 к г ч— 1, 2, ..., т. Получающиеся в результате векторы #1, ..., вг являются базисом для всех п х п шаблонов четности с восьмикратной симметрией. Чтобы проверить, является ли любой такой шаблон совершенным, допустим, что шаблон, начинающийся с 0t, содержит нуль в строке &. Если одно из с, = п Ч- 1, то ответ—да. Если lcm(ci,..., Сг) < п, то ответ—нет. Если же ни одно из этих условий не дает окончательный ответ, то можно прибегнуть к грубому перебору 2Г — 1 ненулевых линейных комбинаций векторов в. Например, при п = 9 мы находим 71 = 111101111, 72 = 7з = 010101010, 74 = 000000000, 75 = 001010100; тогда г = 0, 91 = 011000110, 02 = 000101000, а = с2 = 5. Так что идеального решения в этом случае не существует. В экспериментах автора для п < 3000 “грубая сила” потребовалась только при п = 1709. В этом случае г = 21 и значения всех а оказались равными 171 или 855, за исключением С21 = 342. Тут же оказалось найденным решение 01 ф 02i.
690 ОТВЕТЫ К УПРАЖНЕНИЯМ 7.1.3 Ответами для 1 < п < 383 являются 4, 5, 11, 16, 23, 29, 30, 32, 47, 59, 62, 64, 65, 84, 95, 101, 119, 125, 126, 128, 131, 154, 164, 170, 185, 191, 203, 204, 239, 251, 254, 256, 257, 263, 314, 329, 340, 341, 371, 383. [Фрактал, подобный показанному на рис. 20 и называющийся “узором микадо’,’ по- явился в статье Н. Eriksson, К. Eriksson and J. Sjostrand, Advances in Applied Matb. 27 (2001), 365. См. также S. Wolfram, A New Kind of Science (2002), правило 150R на с. 439.] 195. Установить 0, Ч— 1 (т — г) и 74 Ч— а, для 1 < г < т; установить также г Ч— 0. Затем выполнить следующую подпрограмму для i = 1, 2, ..., т. N1. [Выделение младшего бита.] Установить х ч— 74 & —74. Если х = 0, перейти к шагу N4. N2. [Поиск у.] Найти наименьшее j > 1, такое, что 7j & х 0 и т> & (х — 1) = 0. N3. [Зависимый?] Если j < г, установить 7, ч— 74 ®7>, 0i Ч— /3; ф 0j и вернуться к ша- гу N1. (Эти операции сохраняют матричное равенство С = ВА.) В противном случае завершить работу подпрограммы (поскольку 74 линено независимо от 71, ...,74-1). N4. [Запись решения.] Установить г ч— г-|-1 и 9, Ч- /З4. | В заключение т — г ненулевых векторов 74 представляют собой базис векторного про- странства всех линейных комбинаций ai, ..., ат; они характеризуются своими младшими битами. 196. (а) *0а; *сеаЗ; *е7ае97; *f09d8581. (б) Если Аа; = Аа/, результат очевиден, так как 1 = 1'. В противном случае мы имеем либо aj < о/, либо (ai = aj и аг < 01'2)', последний случай может осуществиться только при х > 216. (в) Установим j ч— к; пока aj ф *80 < *40, будем устанавливать j Ч— j — 1. Тогда а(a;(i)) начинается с aj. 197. (а) *000а; *ОЗаЗ; *7Ъ97; *d834dd41. х (б) Лексикографический порядок не сохраняется, когда, скажем, х = *1111 и х' = *10000. (в) Чтобы правильно ответить на этот вопрос, нужно знать, что 2048 целых чисел в диапазоне^*d800 < х < *е000 не являются корректными кодовыми точками UCS; они называются заменителями (surrogates). С учетом сказанного 0(х^) начинается с 0к, если 0к ф *dc00 > *0400, в противном случае 0(х<-*>) начинается с 0к-1- 198. а = *е50000, Ъ = 3, с = *16. (Можно положить b = 0, но тогда а будет огромным. Этот трюк предложен П. Рэйнод-Ричардом (Р. Raynaud-Richard) в 1997 году. Указанные константы, предложенные Р. Пурнадером (R. Pournader) в 2008 году, являются наимень- шими возможными.) 199. Нам необходимо, чтобы выполнялись условия ai > *cl; 28ai + <12 < *1490; и либо (ai & —ai) + ai < *100, либо ai + аг > *171. Эти условия выполняются тогда и только тогда, когда (*cl - ai) & (2®ai + а2 - *1490) & (((ai & -ai) + ai - *100) | (*171 - ai - a2)) < 0. Маркус Кун (Markus Kuhn) предложил добавить оператор ‘&(*20 —((2®ai +a2)®*eda0))’, чтобы гарантировать, что aia? не начинает код заменителя. 200. Если $0 = (хт ... xixo)256, то $3 представляет собой значение симметричной функции 02(Х7,Х4,Х2). 201. NOR х,с,х, где с = *1010101001010101. 202. NOR х,х,с, где с = *с0с030300с0с0303; затем NOR x,mone,x. (См. ответ к упр. 209.)
7.1.3 ОТВЕТЫ К УПРАЖНЕНИЯМ 691 203. а = *0008000400020001, Ъ = *0f Of Of Of Of Of Of Of, c - *0606060606060606, d - *0000002700000000, e = *2a2a2a2a2a2a2a2a. (ASCII-код О представляет собой 6 + *2a; ASCII-код а представляет собой 6 + *2a + 10 + *27.) 204. p = *8008400420021001, q = *8020080240100401 (транспонированное p), r = *4080102004080102 (симметричная матрица) и m = *aa55aa55aa55aa55. 205. Тасовать, но с р О q, г = *0804020180402010, т = *f Of Of Of OOf Of Of Of. 206. Просто замените p на *0880044002200110. (Кстати, эти тасования можно также определить как перестановки в z = (хез 21X0)2 другим способом: внешнее тасование отображает Zj Z(2j) mod ез Для 0 < у < 63, в то время как внутреннее отображает Xj Z(2j-|-1) mod 65*) 207. Выполните MOR у,р,х; MOR у.у.р; MOR t,y,q; PUT rM,ml; MUX у,у,t; MOR PUT rM,m2; MUX y,y,t. В обоих случаях p = *2004801002400801; в случае тройного тасования q = *4020100804020180, mi = *4949494949494949, m2 = *dbdbdbdbdbdbdbdb; для обратного q = *0402018040201008, mi = *0707070707070707, т2 - *3f3f3f3f3f3f3f3f. 208. (Решение Г. С. Уоррена-мл. (Н. S. Warren, Jr.).) Описанный в разделе метод, исполь- зующий 7-, 14- и 28-обмен, можно реализовать с помощью всего лишь 12 команд: MORt.x.cl; MORt.cl.t; PUT rM.ml; MUX y,x,t; M0Rt,y,c2; M0Rt,c2,t; PUT rM,m2; MUX у,у,t; M0Rt,y,c3; M0Rt,c3,t; PUT rM,m3; MUX y,y,t; здесь ci = *4080102004080102, cz = *2010804002010804, c3 = *0804020180402010, mi = *aa55aa55aa55aa55, m2 - *cccc3333cccc3333, m3 - * f Of Of Of OOf Of Of Of. 209. Достаточно всего лишь четырех команд: MXOR у,р,х; MXOR х,топе,х; MXOR x,x,q; XOR х,х,у; здесь р = *80c0e0f0f8fcfeff = q, а регистр топе = —1. 210. SLU х,опе,х; MOR x,b,x; AND х,х,а; M0Rx,x,#ff; здесь регистр one = 1. 211. В общем случае элемент ij произведения булевых матриц АХВ представляет собой \/{хы | aikbij = 1}. В данной задаче мы выбираем = [iDfc] и by = [ZGу]; ответ— ‘MOR t,f ,a; MOR t,b,t’, где a = *80c0a0f088ccaaff и b = *ff5533110f050301 = aT. . (Обратите внимание, что этот трюк дает простую проверку монотонности [/ = /]• Кроме того, 64-битовый результат (to3 • • • tito)2 дает коэффициенты мультилинейного пред- ставления f(xi,..., хв) = (te3 + te2Xe + — + tixixziraa^irs + toxiX2X3X4XeXe) mod 2, если заменить MXOR на MOR, согласно результату упр. 7.1.1-11.) 212. Если • означает MXOR, как в (183), а Ь = (/3? - - - 010о)2ьв имеет байты Д,-, то мы можем вычислить с = (a-Bq) ф ((а «: 8) (В^+В%)) ф ((а 16)(Bf+Bf)) Ф • • • Ф ((а «С 56)-(В^+В^)), где By = (q(3j) & т, Bj" = (((q(3j) < 8) + /3,) & т, q = *0080402010080402 и т = *7f3f If Of07030100. (Здесь q(3j означает обычное умножение целых чисел.) 213. В данном вычислении с обратным порядком байтов регистр пп хранит — п, а регистр data указывает на октет, следующий в памяти за данными байтами a„-i ...aiao (пер- вым идет байт a„-i). Константы аа = *8381808080402010 и bb = *339bcf6530180c06 соответствуют матрицам А и В, найденным путем вычисления остатков хк mod р(х) для 72 < fc < 80.
692 ОТВЕТЫ К УПРАЖНЕНИЯМ 7.1.3 SET c,0 СЧ-О. LDOU t,data,nn t 4— следующий октет. LDOU t,data,nn t 4— следующий октет. XOR u,u,c u 4— u ф c. ADD nn,nn,8 n ч— n — 8. SLU c,v,66 c 4— v 56. BZ nn,2F Выполнено, если n = 0. SRU v,v,8 v 4— v » 8. IH MXOR u,aa,t u 4— t A. XOR u.u.v u 4— u Ф v. MXOR v,bb,t v 4— t- B. XOR t,t,u t 4— t ф u. ADD nn,nn,8 n 4— n — 8. PBN nn,lB Повтор, если n > 0. | Аналогичный метод выполняет работу, не требуя при этом вспомогательной таблицы. 2H SET nn,8 n 4— 8. SRU v,v,8 v 4— v » 8. 3H AND x,t,ffooo x 4— старший байт. XOR t,t,v t 4— t ф v. MXOR u,aaa,x u 4— x • A'. SUB zm.nn.l n 4— n — 1. MXOR v,bbb,x v 4— x • B'. PBP zm,3B Повтор, если n > 0. SLU t,t,8 t 4— t« 8. XOR t,t,c t 4— t ф c. XOR t,t,u t 4— t ф u. SRU crc,t,48 Вернуть t» 48. | Здесь ааа = *8381808080808080, bbb = *0383c363331b0f05 и ffooo = *ffOO...OO. ...но книги Тупоконечников давно запрещены... — ДЖОНАТАН СВИФТ (JONATHAN SWIFT) Путешествия Гулливера (1726) 214. Рассматривая неразложимые делители характеристического полинома X, мы долж- ны иметь Xn = I, где n = 23 • З2 • 5 • 7 - 17 • 31 • 127 = 168661 080. Нейлл Клифт (Neill Clift) показал, что 1(п — 1) = 33, и нашел такую последовательность из 33 команд MXOR для вычисления Y — X~l — Xn~1: MXOR t,x,x; MXOR 31,t,x; MXOR 32,t,31; MXOR $3.32,32; MXOR t,33,33; S6; MXOR t,t,32; S3; MXOR 31,t,31; MXOR t,31,33; S13; MX0Rt,t,31; S; MXORy.t, x; здесь S обозначает ‘MXOR Чтобы проверить, что X не является вырожденной матрицей, выполните MXOR t,y,x и сравните t с единичной матрицей *8040201008040201. 21Б. SADD ЗО.х.О; SADD 31,х,a; NEG 30,32,30 ; 2ADDU 31,31,30; SLU 30,Ъ,31 ; затем BN 30, Yes; здесь а = *аааааааааааааааа и Ъ = *2492492492492492. 216. Начнем с s* ч— 0 и t* Ч— — 1 для 0 < к < тп. Затем для 1 < к < m выполним следующее: если зд / 0 и зд < 2т, установим I ч— Аж* и si ч— si + хь; если й < 0 или ti > хк, установим также ti Ч— хк. Наконец установим у Ч— 1 и к Ч— 0; пока у > tk и к < т, будем устанавливать р Ч— у + зк и к 4— к + 1. Для у и s* достаточно п-битовой арифметики с двойной точностью. [Этот красивый алгоритм появился 22 марта 2008 года в блоге Д. Эппштейна (D. Eppstein).] 217. См. R. D. Cameron, U.S. Patent 7400271 (15 July 2008); Proc. ACM Symp. Principles and Practice of Parallel Programming 13 (2008), 91-98. 218. Пусть b—любое целое число, обладающее тем свойством, что b mod 8 = 5. Тогда х = bL^ mod 2d для некоторого целого L(x), зависящего от Ъ, при 0 < х < 2d и х mod 4 = 1 (см. раздел 3.2.1.2). Приведенный далее алгоритм вычисляет s = 4L(x) для заданной таблицы чисел t* = — 4L(2fc + 1) для 1 < к < d, в предположении, что tk = 2fc для к > d/2. Установить s ч— 0, j ч— 1; затем, пока j < d/2 — 1, устанавливать j ч— j + 1 и, если о;& (14CJ) 0, устанавливать также х ч— (х + (х у)) mod 2d, s ч— (s +1,) mod 2d. Наконец установить s 4— (s + 1 — x) mod 2d. Теперь, чтобы вычислить a • xv, можно действовать следующим образом (вся ариф- метика выполняется по модулю 2d): если х 8г 2 0, установить х ч-х и а ч— (—l)w&1a. (Теперь х mod 4 = 1.) Установить s ч— 4L(x) у, используя приведенный выше алгоритм, и j ч— 1; затем, пока в 0, устанавливать j Ч— j + 1 и, если s & (1 j) 0, устанавливать
7.1.4 ОТВЕТЫ К УПРАЖНЕНИЯМ 693 также в ч— s + tj, а 4— a + (a<^j). Тогда требуемый ответ равен а. (При другом умножении мы можем вернуть (1 — з)а, если только j > d/2.) Подходящие числа tk можно вычислить путем установки tj. ч— 1 к для d — 1 > fc > d/2 и следующих действий для остальных к в порядке уменьшения: установить х ч— 1 + (1 к), х ч— х + (х fc), в ч— 0, j ч— fc; затем, пока j < d/2 — 1, устанавливать j ч— j +1 и, если x&(l<g.j) 0, устанавливать также х ч— x + (x<g.j), в ч— s — tj; наконец установить tk Ч— (в + х — 1) 1. Например, при d = 32 мы получаем tie = *20008000, tit = *18004000, ti3 = *0е002000, ti2 = *07801000, tn = *03е00800, tio = *41180400, te = *18fe0200, t8 = *0b7f8100, t7 = *319fe080, te = *5e8bf840, t5 = *4a617e20, tt = *17c26f90, t3 = *6119dle8, t2 = *2c30267c. (Эта процедура находит значения L для некоторого целого числа b без вычисления самогб значения Ы) [Методы из данного упражнения имеют интересную связь с алгоритмами Бриггса (Briggs) и Фейнмана (Feynman) для действительных логарифмов и экспонент в упр. 1.2.2- 25 и 1.2.2-28. Наша широкословная процедура для xv работает также для вычисления обратного значения х по модулю 2d, когда у - —1; но для этого есть и прямой алгоритм: установить z ч— 1, j ч— 0; пока х / 1, устанавливать j ч— j + 1 и, если х & (1 <S у) / 0, устанавливать также z Ч— (z + (zj)) mod 2d, x ч— (x + (xj)) mod 2d. Конечное значение z представляет собой обратное исходного нечетного числа а:.] РАЗДЕЛ 7.1.4 1. Вот как выглядят БДР для таблиц истинности 0000, 0001, ..., 1111 с указанием в нижней строке их размеров. 1443435445343441 2. (Свойство упорядочения определяет направление каждой дуги.) 3. Имеются две функции с БДР размером 1 (а именно, две константные функции); ни одной размером 2 (поскольку два стока не могут быть оба достижимы при отсутствии узла ветвления); и 2п размером 3 (а именно, Xj и Xj для 1 < j < п). 4. Установить у Ч— *0ffffffeffffffe&5+*20000002, у Ч— (р^28)&* 10000001, х' ч— х(&у. (См. 7.1.3-(93).) 5. Вы получите f(xi,... ,хп) = fD(xi,...,xn), функцию, дуальную функции f (см. упр. 7.1.1-2). 6. Все наибольшие подтаблицы 1011000110010011, а именно 10110001, 10010011, 1011, 0001, 1001, ООП, являются различными бусинами; квадраты и дубликаты не будут на- блюдаться, пока мы не доберемся до подтаблиц {10,11,00,01} длиной 2. Так что g имеет размер 11.
694 ОТВЕТЫ К УПРАЖНЕНИЯМ 7.1.4 7. (а) Если таблица истинности f имеет вид aooi - - гДе каждое a-j представляет собой бинарную строку длиной 2п~к, то таблица истинности дк имеет вид /З0/З2 (32к_2, где fej = a2ja2j+ia2j+ia23+i. (б) Таким образом, бусины f и дк тесно связаны. Мы получаем БДР для gk из БДР 8. (а) Теперь /hj = (б) Вновь заменим Q) на (j-1) для 1 < j < к. Если в f присутствует (^ , но не заменим на заменим в противном случае [Е. Dubrova and L. Macchiarulo, IEEE Trans. C-49 (2000), 1290-1292.] 9. Если s = 1, решения нет. В противном случае установить к 4— з — 1, уч— 1 и много- кратно выполнять следующие шаги: (i) пока j < vk, устанавливать xj Ч— 1 и j Ч— j + 1; (ii) остановиться, если к = 0; (iii) если hk 1, установить Xj Ч— 1 и к Ч— hk, в противном случае установить Xj Ч— 0 и к Ч— Ik', (iv) установить j Ч— j + 1. 10. Пусть Ik = (vk? 1к-hk) для 0 < к < в и I'k = (v'k?l'k: h'k) для 0 < к < s'. Можно считать, что s = s'; в противном случае f Приведенный далее алгоритм либо находит индексы (to,..., t«-i), такие, что 1к соответствует 1[к, либо заключает, что f II. [Инициализация и цикл.] Установить ts-i ч— s — 1, ti Ч— 1, to 4-0 и tn Ч-1 для 2 < к < з — 2. Выполнить шаги 12-14 для к = s — 1, s — 2, ..., 2 (в указанном порядке). Если эти шаги “выходят” в любой точке, мы имеем f в противном случае f = f. 12. [Проверка «&.] Установить t Ч— tk. (Теперь t > 0; в противном случае Д не должно иметь предшественника.) Выйти, если v't vk. 13. [Проверка /&.] Установить Z Ч— Д. Если ti < 0, установить ч— l't; в противном случае выйти, если l't tt. 14. [Проверка /г&.] Установить h ч— hk. Если th < 0, установить th Ч— h't- в противном случае выйти, если h't th. | 11. (а) Да, поскольку ск корректно подсчитывает количество установок х„к ... хп, ведущих из узла к в узел 1. (Фактически многие БДР-алгоритмы будут работать корректно (хотя и более медленно) при наличии эквивалентных узлов или избыточных ветвей. Однако приведенность важна, скажем, когда мы хотим быстро проверить равенство f = f , как в упр. 10.) (б) Нет. Предположим, например, что 1з = (1? 2:1), Д = (1? 0:1), Д = (2? 1:1), 10 = (2? 0:0); тогда алгоритм устанавливает сг ч— 1, сз ч— |. (Однако см. упр. 35, (б).) 12. (а) Первое условие делает К независимым; второе делает его также максимальным. (б) Нет при нечетном п; в противном случае имеется два множества чередующихся вершин. (в) Вершина находится в ядре тогда и только тогда, когда это сток или когда она находится в ядре графа, полученного путем удаления всех стоковых вершин и их непо- средственных предшественников.
7.1.4 ОТВЕТЫ К УПРАЖНЕНИЯМ 695 [Ядра представляет выигрышные позиции в играх типа “Ним” а также возникают в играх с п участниками. См. J. von Neumann and О. Morgenstern, Theory of Gaines and Economic Behavior (1944), §30.1; C. Berge, Graphs and Hypergraphs (1973), Chapter 14.] 13. (а) Максимальна^ клика G представляет собой ядро G, и наоборот, (б) Минималь- ное вершинное покрытие U представляет собой дополнение V \ W ядра W, и наоборот (см. 7-(61)). 14. (а) Размер равен 4(п—2) +2{п = 3]. Когда п > 6, эти БДР образуют шаблон, в котором имеются четыре узла ветвления для переменных 4, 5, ..., п — 2, а также фиксированный шаблон в верхней и нижней частях. Четыре ветви, по сути, представляют собой следующее. (xixj-i = 00) (xixj-i = 01) (xixj-i = 10) (xixj-i = 11) ........................................ (xixj = 00) (xixj = 01) ^[T] (tiXj = 10) (xixj = 11) n±| (б) В этом случае ответами для 3 < п < 10 являются (7,9,14,17,22,30,37,45); затем, как в (а), наблюдается фиксированный шаблон вверху и внизу с девятью узлами ветвления для каждой переменной в средине и общим размером 9(п — 5). Девять узлов на каждом среднем уровне разделяются на три группы по три, (а;л_2Тл_1 = 00) (а;^_2Тл_1 = 10) (т>-1 = 1) .. [Т]"' (xj-iXj = 00) (xj-ixj = 10) (xj = 1) с одной группой для цхг = 00, другой—для xix2 = 01 и третьей—для xi = 1. 15. Оба случая по индукции ведут к хорошо известным последовательностям чисел, (а) Числа Люка L„ = F„+t + F„-i = фп + фп [см. Е. Lucas, Theorie des Nombres (1891), Chapter 18]. (б) Числа Перрина, определяемые следующим образом: Рз = 3, Pt = 2, Р$ = 5, Рп = Рп-з + Рп-з = х"+х"+х". [См. Е. Lucas, Association Francaise pour 1’Avancement des Sciences, Compte-rendu 5 (1876), 62; R. Perrin, L’Intermediaire des Math&naticiens 6 (1899), 76-77; Z. Fiiredi, Journal of Graph Theory 11 (1987), 463.] 16. Если БДР не является [Т], все решения генерируются вызовом List(l, root), где List(j,p) представляет собой следующую рекурсивную процедуру: если u(p) > j, устано- вить Xj Ч— 0, вызвать List(j +1,р), установить Xj Ч— 1 и вызвать List(j +1, р). В противном случае посетить решение xi ...хп, если р—стоковый узел [т]. (Идея “посещения” ком- бинаторных объектов в процессе их генерации рассматривается в начале раздела 7.2.1.) Иначе установить Xj Ч— 0; вызвать List(j + 1, LO(p)), если LO(p) [Т]; установить Xj Ч— 1; и вызвать List(j + 1,Н1(р)), если Н1(р) [Т]. Решения генерируются в лексикографическом порядке. Предположим, что всего их имеется N. Если к-е решение согласуется с (к— 1)-м решением в позициях xi... Xj-i, но не в Xj, то пусть с(к) = п — j\ и пусть с(1) = п. Тогда время работы пропорционально с(&), которая в общем случае равна O(nN). (Эта граница справедлива в силу того, что каждый узел ветвления БДР ведет как минимум к одному решению. Фактически на практике время работы обычно составляет O(N).) 17. Это невозможно, поскольку имеется функция с N = 22fc и B(f) = O(22fc), для которой каждые два решения отличаются более чем в 2fc~* битовых позициях. Время работы любого алгоритма, генерирующего все решения для такой функции, должно составлять Q(23fc), поскольку между решениями требуется fl(2fc) операций. Чтобы построить /, сна- чала положим g(xi,... ,Xk,yo,---,y2k_i) = [j/(ti...t*)2 =®iti ® ••• ®xktk для 0<ti,...,tfe < 1].
696 ОТВЕТЫ К УПРАЖНЕНИЯМ 7.1.4 (Другими словами, д утверждает, что уо-. -P2*-i представляет собой строку (xi...xk)2 матрицы Адамара; см. 4.6.4-(38).) Теперь положим /(хг,... ,хк,у0,... ,у2к_1,х'г,... ,х'к, lih-dfa-i) = д(х!,... ,хк,у0,... ,y2k\j) Л g(x'i,... ,хк,уо,... ,у'2к_1). Ясно, что при упо- рядочении переменных таким способом B(f) = О(22*). Действительно, Т. Далхаймер (Т. Dahlheimer) заметил, что B(f) = 2В(д) — 2, где В(д) = 2* + 1 + J2jli 2mln(fc,1+^eJi^ = |22*-1 +2* + |. 18. Сначала (ИЛ,..., ИЛ) = (5,4,4,4,0). Затем тпг = W4 = 4 и t2 = 1; тз = £з = 0; mt = тах(тз, тг+ВДз) = 1, t4 — 1; тъ = ИЛ—ИЛ = 4, tB = 0; те = гог+ИЛ—ИЛ = 2, te = 1; т? = тах(тпв,т4 + ш2) = 4, t? = 0; тз = тах(7Пт,пгв + wi) = 4, tg = 0. Окончательным решением является хц2хзХ4 = 0001. 19. $2"=1 min(w>,0) < Y^=Vk min(Wj,0) < тк < 52?=„* max(wj,0) = ИЛ* < ИЛ- 20. Установить wi 4— —1, затем w2j 4— Wj и W2j+i 4— — Wj для 1 < j < п/2. [Этот метод может также вычислить w„+i- Последовательность названа так из-за работ А. Тью (A. Thue) Skrifter udgivne af Videnskabs-Selskabet i Christiania, Mathematisk-Naturviden- skabelig Klasse (1912), No. 1, §7, и Г. M. Морзе (Н. М. Morse), Trans. Amer. Math. Soc. 22 (1921), 84-100, §14.] 21. Да; мы просто должны изменить знак каждого веса Wj. (Можно также изменить роли LO и HI в каждой вершине.) 22. Если f(x) = f(x') = 1, когда f представляет ядро графа, расстояние Хэмминга v(x@x') не может быть равно 1. В таких случаях БДР для f имеет vi = v + 1 при 1 / 0 и 1 при h 0. 23. БДР для функции связности любого связного графа будет иметь ровно п—1 сплошных дуг на каждом пути от корня к [т], поскольку такое количество ребер необходимо для связи п вершин и потому что БДР не имеет избыточных ветвей. (См. также теорему S.) 24. Применение алгоритма В с весами (w'i2i • • • .tugs) = (—W12— х,..., —шзв—ж), где х до- статочно велико, чтобы сделать все новые веса w„v отрицательными. Максимум суммы 52 w'uvXuv будет достигнут с 52 = 8, и эти ребра будут образовывать остовное дерево с наименьшей 52 wuvzuv. (Мы видели лучший алгоритм для поиска наименьших остовных деревьев в упр. 2.3.4.1-11, а другие методы решения этой задачи будут рассматриваться в разделе 7.5.4. Однако это упражнение указывает, что БДР может компактно представ- лять множество всех остовных деревьев.) 25. Ответом на шаге С1 следует сделать (1 + z)v,~1~1ca-i\ значение ск на шаге С2 стано- вится равным (1 + z)v,~Vk~1ci + (1 + z)Vh~Vk~1 zch. 26. В этом случае ответом на шаге С1 становится просто ca-i; а значением ск на шаге С2 является просто (1 — pVk)ci + pVkck. 27. Мультилинейный полином H(xi ,...,хп) = F(xi,... ,хп)—G(xi,... ,хп) является нену- левым по модулю д, поскольку он представляет собой ±1 для некоторого выбора целых чисел, при котором каждое хк € {0,1}. Если он имеет степень d (по модулю д), можно доказать, что имеется как минимум (д— l)dg"-d множеств значений (gi, • • •, дп) с 0 < д* < д, таких, что 7f(gi,...,д„) mod д 0. Это утверждение очевидно при d = 0. А если хк является переменной, появляющейся в члене степени d > 0, коэффициент хк представляет собой полином степени d — 1, который по индукции по d является ненулевым для как минимум (д — l)d-1gn-d выборок (gi,...,gfc_i,gfc+i,...,gn); для каждой из этих выборок имеется д — 1 значений дк, таких, что H(gi,...,gn) modд 0. Следовательно, указанная вероятность равна > (1 — l/g)d > (1 — 1/g)". [См. М. Blum, А. К. Chandra and М. N. Wegman, Information Processing Letters 10 (1980), 80-82.]
7.1.4 ОТВЕТЫ К УПРАЖНЕНИЯМ 697 28. F(p) = (1 — p)"G(p/(l — р)). Аналогично G(z) = (1 + z)nF(z/(l + г)). 29. На шаге С1 установить также со ч— О, с! ч— 0; вернуть ся_1 и ca_i. На шаге С2 установить с* ч- (1 — р)а + рсн и с* ч- (1 — р)с{ — с{ + pc'h + ch. 30. Эту работу выполняет следующий аналог алгоритма В (в предположении точной арифметики). А1. [Инициализация.] Установить Рп+i ч— 1 и Pj ч— Pj+i max(l —pj,Pj) для n > j > 1. A2. [Цикл no fc.] Установить mi Ч— 1 и выполнить шаг АЗ для 2 < к < в. Затем выполнить шаг А4. АЗ. [Обработка Д.] Установить v Ч— Vk, I Ч— Ik, h Ч— hk, t* Ч— 0. Если I ф 0, установить m.k Ч— Ш|(1 — pv)Pv+i/Pvr Затем, если h ф 0, вычислить т ч— mhpvPv+i/Pvh’, и если I = 0 или т > тк, установить тк Ч— т и tk Ч— 1. А4. [Вычисление а:.] Установить уч— 0, fc Ч— в — 1 и выполнять следующие операции, пока не будет выполнено условие j = п: пока j < Vk — 1, устанавливать j Ч— j + 1 и Xj ч— [pj > |]; если fc > 1, установить у ч— у+1 и Xj ч— tk и к ч— (tk=O? Ik- hk)- I 31. Cl'. [Цикл no fc.] Установить ao ч- i, щ + T и выполнить шаг С2' для fc = 2, 3, ..., з — 1. Затем перейти к шагу СЗ'. С2'. [Вычисление а*.] Установить v ч— Vk, I ч— 1к и h ч— hk- Установить /3 Ч— ац и j Ч— vt — 1; затем, пока у > v, устанавливать /3 Ч— (Xj о Xj) • /3 и j Ч— у — 1. Установить 7 Ч— аь и у Ч— г>ь — 1; затем, пока у > v, устанавливать 7 Ч— (XjOXj) и j> ч— у; — 1. Наконец установить а к ч— (xv • /3) ° (xv • 7). СЗ'. [Завершение.] Установить а ч— ая-1 и j ч— vB~i — 1; затем, пока у > 0, устанавли- вать а Ч— (xj о Xj) • а и j Ч— j — 1. Вернуть ответ а. | Этот алгоритм выполняет операции о и • не более O(nB(f)) раз. Верхнюю границу часто можно понизить до О(п) + O(B(f)); но сокращения наподобие вычисления Wk на шаге В1 не всегда доступны. [См. О. Coudert and J. С. Madre, Proc. Reliability and Maint. Conf. (IEEE, 1993), 240-245, §4; O. Coudert, Integration 17 (1994), 126-127.] 32. В упр. 25 ‘о’ представляет собой сложение, *•’—умножение, ‘±’ равно 0, ‘Т’ равно 1, ‘Xj’ равно 1, ‘xj’ — z. Упражнение 26 аналогично, но ‘xj’ равно 1 — pj, a ‘xj’—pj. В упр. 29 объектами алгебры являются пары (с, с'), и мы имеем (а, а') о (5,5') = (а + 5, а' + 5'), (а, а') • (5,5') = (а5,а5' + а'5). Кроме того, *±’ представляет собой (0,0), ‘Т’ — (1,0), ‘Xj’ — (1-р,-1), а %’ —(р,1). В упр. 30 ‘о’ представляет собой операцию шах, —умножение, ‘±’ 00, ‘Т’ — 1, ‘Xj’ равно 1 — pj, a ‘xj’—pj. Операция умножения является дистрибутивной относительно операции шах, поскольку величины являются либо неотрицательными, либо —оо; для удовлетворения (22) мы должны определить 0 • (—оо) = —оо. (Имеется много других возможностей в связи с повсеместной распространенностью в математике ассоциативных и дистрибутивных операторов. Алгебраические объекты не обязаны быть числами, полиномами или парами; это могут быть строки, матрицы, функции, множества чисел, множества строк, множества или мультимножества матриц пар функций от строк и т. д., и т. п. Множество других примеров мы увидим в разделе 7.3. Особенно важной оказывается min-плюс-алгебра, в которой о = min и • = +, и мы могли бы воспользоваться ею в упр. 21 или 24. Ее часто называют тропической, неявно подчеркивая роль бразильского математика Имре Саймона (Imre Simon.) 33. Следует работать с тройками (с, с', с"), для которых (а, а', а") о (5,5',5") = (а + 5, а' + 5',а" + 5") и (а,а', а") • (5,Ь',Ь") = (аЬ, а'Ь + 5'а,а"5 + 2а'5' + а5"). Интерпретируем *±’ как (0,0,0), ‘Т’ — как (1,0,0), 4j' — как (1,0,0) и lXj' — как (l,Wj,Wj).
698 ОТВЕТЫ К УПРАЖНЕНИЯМ 7.1.4 34. Пусть xVy = тах(х, у). Работаем с парами (с, с'), для которых (а, а')о(Ь, b') = (aVb, а'V Ъ') и (а, а') • (Ь, Ъ') = (а + Ъ, (а' + Ъ) V (а + Ь'))- Интерпретируем ‘±’ как (—оо, —оо), ‘Т’ — как (О, —оо), lXj’ — как (0,w") и lxj'—как (Wj,Wj +w"). Первый компонент результата будет соответствовать результату алгоритма В; второй компонент—искомый максимум. 35. (а) Предложенная FBDD может быть представлена инструкциями 7s-i, ..., Io, как в алгоритма С. Начнем с Ro Ч— Ri Ч— 0, затем выполним следующие действия для к = 2, ..., s — 1: сообщить об ошибке, если Vk € Rik U Rhk', в противном случае установить Rk Ч— {«к} U Rik U Rhk- (Множество Rk идентифицирует все переменные, достижимые из 1к.) (б) Полином надежности может быть вычислен так же, как и в ответе к упр. 26. Для подсчета решений мы по сути устанавливаем р\ = • • • - рп - | и выполняем умножение на 2": начнем с со Ч— 0 и щ Ч— 2", затем установим Ск ч— (cik + Chfc)/2 для 1 < к < в. Искомый ответ—cs_i. 36. Вычислите множества Rk, как в ответе к упр. 35, (а). Вместо цикла по j, как указано на шаге С2' в ответе к упр. 31, установите /3 Ч— сц, а затем /3 ч— (xj о xj) • (3 для всех j € Rk \ Ri \ {«}; 7 обрабатывается точно так же. Аналогично на шаге СЗ’ установите а Ч— (xj о Xj) • а для всех j $ Rs-i- 37. Для любой заданной FBDD для f функция G(z) представляет собой сумму (1 + 2^-длииаР2спЛОшиь.е дуги в Р до в№м путям р т корня к Щ [См TheoreticaJ Comp. Scj 3 (1976), 371-384.] 38. Ключевой факт состоит в том, что Xj = 1 обеспечивает f = 1 тогда и только тогда, когда мы имеем (i) hk = 1 при vk = j', (ii) vk = j как минимум на одном шаге fc; (iii) не имеется шагов с (щ < j < vik и Ik 1) или (щ < j < Vhk и hk / 1). К1. [Инициализация.] Установить tj ч— 2 и pj ч— 0 для 1 < j < п. К2. [Проверка всех ветвлений.] Выполнить следующие операции для 2 < к < з. Установить j ч— щ, и д ч— 0. Если lk = 1, установить д Ч-------1; в противном случае установить р3 Ч— max(pj,vik). Если hk = 1, установить д ч— +1; в противном случае установить pj ч— тах(р^, Vhk) Если tj = 2, установить tj ч— g; в противном случае при tj д установить tj ч— 0. КЗ. [Завершение.] Установить т Ч— ця-1 и выполнить следующие действия для j = 1, 2, ..., п. Если j < т, установить t3 Ч— 0; затем, если Pj > т, установить m<-pj. | [См. S.-W. Jeong and F. Somenzi, Logic Synthesis and Optimization (1993), 154-156.] 39. k(n + 1 — fc) + 2 для 1 < к < n. (См. (26).) 40. (а) Предположим, что бинарные диаграммы решений для f и д имеют соответствен- но aj и bj узлов ветвления (J) для 1 < j < п. Каждая подтаблица f порядка п + 1 — к имеет вид а/3^5, где а, /3, 7 и 5 представляют собой подтаблицы порядка п — 1 — к. Соответствующими подтаблицами д являются аа55; следовательно, они представляют собой бусины тогда и только тогда, когда а 6, и в этом случае бусиной является либо а/З-уб, либо а/3 = у<5. Следовательно, Ьк < ак + <U+i и bk+i = 0. Мы также имеем bj < aj для 1 < 3' < поскольку каждая бусина д порядка > п + 1 — к “сжата” как минимум из одной такой бусины /. A bj < aj для j > к + 1, поскольку подтаблицы (хк+2, , хп) идентичны, хотя могут и отсутствовать в д. (б) Не всегда. Простейшим контрпримером является /(т1,Г2,тз,Т4) = xz Л (хз V xt), h(xi,x2,xi,x«) = Х2 Л (xi V х^), когда B(f) = 5 и B(h) = 6. (Однако мы всегда имеем B(h) < 2B(f).)
7.1.4 ОТВЕТЫ К УПРАЖНЕНИЯМ 699 41. (а) Зп — 3; (Ь) 2п. (Общий шаблон про- иллюстрирован здесь для п = 6. Можно также показать, что “порядок органных труб” / Fi Fa F4 „fn-2 \ пает a'l 3'n—l3'2 ••• a'[n/2J+(nчетно] a'fr>/2] / ДЭеТ профиль 1, 2, 4, ..., 2[n/2]—2, 2[n/2j—1,..., 5, 3, 1, 2, приводя к общему размеру БДР (") + 3; похоже, что этот порядок является наихудшим для весов Фибоначчи.) Функции [F„a:i -I-1- Fixn > t] были изучены Й. Т. Батлером (J. Т. Butler) и Ц. Cacao (Т. Sasao), Fibonacci Quart. 34 (1996), 413-422. 42. (Ср. с упр. 2.) Шестнадцатью корнями являются узлы (Т) и два стока. ООП 1100 43. (а) Поскольку f(xi,...,X2n)—симметричная функция Sn(xi,... ,хп,хп+1, ,Х2п), мы имеем B(f) = 1 + 2 Ч---1- (n+1) -I-F3-f-2 + 2 = n2+2n + 2. (б) Из соображений симметрии размер является тем же для [ХХ®* I ® € 7} = I г ^7}], |7| =п. 44. Имеется не более min(fc, 2п+2~к — 2) узлов, помеченных (к), для 1 < к < п, поскольку имеется 2п+2~к — 2 симметричных функций от (хк, .хп), не являющихся константами. Таким образом, Еп не превышает 2 + $2"=i min(fc, 2п+2~к — 2), что можно выразить в ана- литическом виде как (п + 2 — bn)(n + 1 — Ьп)/2 + 2(2Ь" — Ь„), где Ьп = А(п + 4 — А(п + 4)) и An = [_lg nJ. Симметричная функция, достигающая границы для наихудшего случая, может быть построена следующим образом (связанным с циклами де Брейна, строившимися в упр. 3.2.2-7). Пусть р(х) = xd + aix^1 + • • • + aj — примитивный полином по модулю 2. Установим tit <— 1 для 0 < к < d-, tk Ч— (aitk-i -I-F adtk-d) mod 2 для d<k<2d+d — 2; tk 4— (1 + aitk-i + • • • + adtk-d) mod 2 для 2d + d — 2 < к < 2d+1 + d — 3; и t2d+i+d_3 1- Например, когда р(х) = х3 + х + 1, мы получаем to ... tie = 11100101101000111. Тогда (i) последовательность ti... t2«i+<1_3 содержит все d-кортежи за исключением 0d и ld в качестве подстрок; (ii) последовательность t2d+d-2 ... t2d+i+d_4 представляет собой циклический сдвиг to...t2d_2; и (iii) t* = 1 для 2d — 1 < к < 2d + d — Зи 2d+1 — 2 < к < 2d+1 + d — 3. Значит, последовательность to .. • ^2<1+1+<1-з содержит все (d + 1)- кортежи за исключением 0d+1 и ld+1 в качестве подстрок. Установим f(x) = tux, чтобы максимизировать B(f) при 2d + d — 4 <п < 2d+1 + d — 3. Асимптотически £„ = |n2 —nlgn + O(n). [См. I. Wegener, Information and Control 62 (1984), 129-143; M. Heap, J. Electronic Testing 4 (1993), 191-195.] 45. Модуль Mi имеет только три входа, (xi,yi,zi), и только три выхода, U2 = xi, «2 = j/ixi, W2 = zixi. Модуль JMn-i почти нормальный, но не имеет входного порта для z„_i и не выводит п„; он устанавливает z„-2 = xn-i3/n-i- Модуль Мп имеет только три входа, (v„, w„, хп), и один выход, з/„-1 =х„, вместе с основным выходом w„Vv„xn. При таких опре- делениях зависимости между портами образуют ациклический ориентированный граф.
700 ОТВЕТЫ К УПРАЖНЕНИЯМ 7.1.4 (Модули могут быть построены со всеми Ь* = 0 и а* < 5 или даже с а& < 4, как мы увидим в упр. 47. Но (33) и (34) предназначены для иллюстрации обратных сигналов на простом примере, а не для демонстрации наиболее плотно сжатой конструкции.) 46. Для 6 < к < п — 3 имеется девять ветвей в (к), соответствующих трем случаям, (®i,:ei®2,®i®2), умноженным на три случая (xk-i,Xk-2Xk-i,Xk-3Xk-2Xk-i)- Общий размер БДР оказывается равным 9п — 38, если п > 6. 47. Предположим, что f имеет д* подтаблиц порядка п— к, так что ее КДР имеет д* узлов с ветвлениями в ast-t-i- Их можно закодировать с помощью ак = [lg 9ft] бит и построить модуль Affc+i, такой, что Ь* = Ь&+1 = 0, который имитирует поведение этих qk узлов ветвления. Таким образом, согласно (86) £2“*2bfc =^2Р«’‘1 < 52(2фь - i) =2Q(/)-(n+l) < (n+l)B(/). *=0 *=О fc=0 (2”*-канальный мультиплексор показывает, что необходим дополнительный множитель (n + 1); в действительности теорема М дает верхнюю границу Q(f)) 48. Суммы Uk = xi + • • • + Хк и Vk = Xk+i + + хп могут быть представлены 1 + Хк и 1 + A(n — fc) проводами соответственно. Пусть t* = х* Л [u* + г>* = fc] и Wk = ti V • • • V tk- Можно построить модули Мк, имеющие входы Uk-i и Wk-i из Mk-i вместе со входами Vk из модуль Мк выводит u* = Uk-i + Хк и Wk = w*-i V t* для модуля Mk+i, а также Vk-i =Vk + xk для Mk-i- Если р представляет собой полином, 2p(“fc,,>fc) = 2(logn)°(1> асимптотически мень- ше 2°(п\ [См. К. L. McMillan, Symbolic Model Checking (1993), §3.5, где была опубликована теорема М с расширениями для нелинейных схем. Частный случай bi = • • • = Ьп = 0 до того был упомянут в работе С. L. Berman, IEEE TYans. CAD-10 (1991), 1059-1066.] s>3 s>2 (6) 61. В этом случае B(fj) = 3j + 2 для 1 < j < n и B(/n+i) = 3n + 1; так что отдельные БДР оказываются только около 1/3 по размеру по сравнению с (36). Однако при этом почти нет совместно используемых узлов—только стоки и одно ветвление. Так что общий размер БДР составляет (Зп2 + 9п)/2. 52. Если база БДР для {/i,..., fm} имеет з узлов, то B(f) = з + тп + 1 + [з = 1].
7.1.4 ОТВЕТЫ К УПРАЖНЕНИЯМ 701 63. Назовем узлы ветвления a, b, с, d, е, f, д, при этом ROOT = а. После выполнения шага R1 мы имеем HEAD[1] = ~а, AUX(a) = ~0; HEAD[2] = ~Ь, AUX(b) = ~с, AUX(c) = ~0; HEAD[3] = ~d, AUXW) = ~е, AUX(e) = AUX(J) = ~р, AUX(p) = ~0. После шага R3 с v = 3 мы имеем s = ~0, AUX(O) = ~е, AUX(e) = f, kUX.(f) = 0; также AVAIL = д, LO(p) = ~1, HI(p) = d, LOW) = ~0 и HIW) = a, где a—начальное значение AVAIL. (Узлы g и d были переработаны в пользу 1 и 0.) Затем шаг R4 устанавливает з «— е и AUX(O) «— 0. (Оставшиеся узлы с V = v, начиная с з, связываются посредством AUX.) Теперь R7, начиная ср = д = еиз = 0, устанавливает AUX(l) «— ~е, L0(/) <— ~е, НК/) <— д, AVAIL <— /; а R8 выполняет сброс AUX(l) <— 0. Затем шаг R3 с v = 2 устанавливает LO(b) «— 0, L0(c) «— е и HI (с) «— 1. Никаких других важных изменений нет, хотя некоторые поля AUX временно становятся отрицатель- ными. Заканчиваются вычисления рис. 21. 64. Создаем узлы j для 1 < j < 2”-1 путем установок V(j) «— [lgJ], LO(j) <— 2j — 1 и HI(j) «— 2j; а также для 2n-1 < j < 2” путем установок V(j) «— n, LO(j') «— f(xi,... jin-i.O) и HI(j') «— f(xi,... jXn-i, 1) при j = (lxi • • .Tn—1)2 + 1. Затем применим алгоритм R c ROOT = 2. (Можно опустить шаг R1 с помощью первоначальной установки AUX(j) <— — j для 4 < j < 2”, а затем HEAD [А:] <— ~(2*) и AUX(2*-1 + 1) «— — 1 для 1 < к < п.) 66. Достаточно построить неприведенную диаграмму, поскольку после этого алгоритм R завершит работу. Пронумеруем вершины 1, ..., п таким образом, что никакая вершина, за исключением 1, не появляется до всех ее соседних вершин. Представим ребра дугами ai, ..., ae, где а* представляет собой и* —> и* для некоторого и* < и* и где дуги, имеющие и* = j, являются последовательными, с Sj < к < Sj+i и 1 = si < • • • < sn = sn+i = е+1. Опреде- лим “границу” V* = {1, i>i,..., и*} П {и*,,..., п} для 1 < к < е и положим Vo = {1}. Непри- веденная диаграмма решений будет иметь ветви, связанные с дугой а*, для всех разбиений Vfc-i, соответствующих отношениям связности, возникающим из-за предыдущих ветвей. Рассмотрим, например, Рз □ Рз, где (si,..., ею) = (1,3,5,7,8,10,11,12,13,13) и Vo = {1}, Vi = {1,2}, V2 = {1,2,3}, V3 = {2,3,4}, ..., V12 = {8,9}. Ветвь, связанная с дугой а>, идет от тривиального разбиения 1 множества Vo к разбиению 112 множества Vi, если 1 -/-2, или к разбиению 12, если 1 — 2. (Запись ‘ 1|2* обозначает разбиение множества {1} U {2}, как в разделе 7.2.1.5.) Из 1|2 ветвь, связанная с аз, идет к разбиению 1|2|3 множества V2, если 1 —3, в противном случае—к 13|2; из 12 ветви идут соответственно к разбиениям 12|3 и 123. Из 1|2|3 обе ветви, связанные с аз, идут к [Т], поскольку вершина 1 больше не может быть связана с другими. И т. д. В конечном итоге разбиения множества Ve = V12 идентифицируются с [Т], за исключением тривиального разбиения, состоящего из одного множества, которое соответствует [т]. 66. Начнем с тп «— 2 на шаге R1 и г>о <— ui «— vmex +1, Zo «— Ло «— 0, Zi «— hi «— 1, как в (8). Будем считать, что Н1(0) = 0 и Н1(1) =1. Опустим присваивания, включающие AVAIL, на шагах R3 и R7. После установки AUX(HI(р) ) «— 0 на шаге R8 следует также установить I'm <— v, Im <— HI (L0(p)), hm «— HI(HI(p)), HI(p) «—/питч—тп + 1. В конце шага R9 нужно установить з <— m — [ROOT = 0]. 67. Установить LO(ROOT) <— ~LO(ROOT). (Мы кратко дополняем поле L0 узлов, которые остаются доступными после ограничения.) Затем для v = V(ROOT), ..., umex установить р 4— ~HEAD [и], HEAD [n] <— ~0 и выполнять следующие действия до тех пор, пока р / 0. (i) Установить р' «— ~AUX(p). (ii) Если LO(p) > 0, установить Н1(р) <— AVAIL, AUX(p) «— 0 и AVAIL «— р (узел р больше не может быть достигнут). В противном случае устано- вить LO(p) «— ~L0(p); если FIX[n] = 0, установить Н1(р) <— LO(p); если FIX[n] = 1, установить LO(p) «— Н1(р); если LO(LO(p)) > 0, установить LO(LO(p)) «- ~L0(L0(р)); если L0(HI(p)) > 0, установить L0(HI(p)) «— ~L0(HI(p)); и установить AUX(p) «— HEAD [и],
702 ОТВЕТЫ К УПРАЖНЕНИЯМ 7.1.4 HEAD [и] <— ~р. (iii) Установить р <— р. Наконец, по завершении цикла по v, восстановить L0(0) <-0, L0(l) <- 1. 58. Поскольку I -ф- h и I' h', мы имеем lol' hoh', loot hoa' и aol' aoh1. Предположим, что аоа' = flofi', где fi = (v" ,1", h") к fi' = (v", I'", h'"). Если v" = v'", мы имеем v = v", lol' = l"ol'" и hoh.' = h"oh'". Если v" < v", мы имеем v = v", loa = l"ofi' и hoa' = h" о fi'. В противном случае мы имеем v' = v'", aol' = fiol'" и aoh' — fio h"'. Следовательно, по индукции a = fi и a' = fi' во всех случаях. 59. (а) Если h не является константой, мы имеем B(fog) = 3B(h) — 2, по сути, полученное взятием копии БДР для h и заменой ее стоковых узлов двумя другими копиями. (б) Предположим, что профиль и квазипрофиль h представляют собой (bo,---,bn) и (qo, • , Qn), где bn = Qn — 2. Тогда в f о д имеются Ььдь ветвей в a?2fc+i и qkbk-i ветвей в X2k, соответствующих упорядоченным парам бусин и подтаблиц h. Когда БДР для h содержит ветвление от а к fi и от а' к fi', где V(a) = j, V(fi) = k, V(a') = j' и V (/?') = fc', БДР для fog содержит соответствующую ветвь с V (а о а') = 2j — 1 из а о а' в fio а' при j < j' < fc и с V(aoa') = 2j' из аоа' в а о fi' при j' < j < fc'. 60. Каждая бусина порядка п — j упорядоченной пары (/, д) является либо одной из bjb'j упорядоченных пар бусин f и д, либо одной из bj(q'j — bj) + (д3 — b3)b'j упорядоченных пар, имеющих вид (бусина, не бусина) или (не бусина, бусина). Эта верхняя граница достигалась в примерах в упр. 59, (б) и 63.] 61. Считаем, что v = V(a) < V(fi). Пусть од, ..., аь являются узлами, указывающими на а, и пусть fii, ..., fit являются узлами с V(fij) < v, указывающими на /3; на каждый корень указывает воображаемый узел. (Таким образом, fc = входящая степень(а) и I < входящая степень(/3).) Тогда смешанные узлы, указывающие на а о fi, могут быть трех типов: (i) аг о flj, где V(a,) = V(flj), и либо (ЬО(а<) = а и LO(/3j) = fi), либо (Н1(а,) = а и HI(/3j) = fi)-, (ii) aofij, где Р(аг) < V(fij) для некоторого г; либо (iii) а, о fl, где Р(а,) > V(fij) для некоторого j. 62. БДР для f имеет по одному узлу на каждом уровне, а БДР для д имеет два, за исключением верхнего и нижнего уровней. БДР для f V д имеет по четыре узла почти на каждом уровне согласно упр. 14, (а). БДР для fog имеет семь узлов Q) при 5 < j < п — 3, соответствующих упорядоченным парам подтаблиц (f,g), которые зависят от Xj, когда (ti, ... ,xj-i) имеют фиксированные значения. Таким образом, B(f) = п + 0(1), В(д) = 2n+O(l), B(fog) = 7п + О(1) и B(fVg) = 4п + О(1). (Также В(/Лр) = 7п + О(1), B(f Ф д) = 7п + 0(1), В(/ Л д) = 6п + 0(1).) 63. Профилями fug являются соответственно (1,2,2,...,2m-1,2"*-1,2m, 1,1,..., 1,2) и (0,1,2,2,..., 2т-1,2"*-1,1,1,..., 1,2); так что В(/) = 2т+2 -1 ю 4п и В(р) = 2m+1 + 2т - 1 и Зп. Профиль f Л д начинается с (1,2,4,..., 22"1-2,22"1-1 — 2т-1), поскольку имеется единственное решение xi.. ,Х2т уравнений ((xi ©I2)(l3®l4) • - - (X2m-1 Ф Х2т))2 = Р,((х2 Ф Тз) - - • (Х2т-2 Ф Х2т-1)х2гп)2 = q для 0 < p,q < 2т и р = q тогда и только тогда, когда xi = хз = • • - = X2»n-i = 0. После этого профиль продолжается— (2"*+1 — 2,2m+1 — 2,2"*+1 — 4,2m+1 — 6,..., 4,2,2); подфункциями являются Х2т+з Л Х2т+к или X2m+j Л Х2т+ь для 1 < j < к < 2т вместе с X2m+j и Х2т+з для 2 < j < 2"1. В общем, мы имеем В(/ Л д) = 22m+1 + 2т~1 -1 я 2п2. 64. БДР для любой булевой комбинации /1, /2 и /з содержится в смеси /10/2 о/з, размер которой не превышает В(Д)В(/2)В(/з). 65. h = д? fi: fo, где fc представляет собой ограничение /, получающееся путем установки Xj «— с. Первая верхняя граница следует, как в ответе к упр. 64, поскольку B(fc) < B(f). Вторая граница оказывается неверной, например п = 2т + Зт и h= Мт(х,у)? Мт(х';у):
7.1.4 ОТВЕТЫ К УПРАЖНЕНИЯМ 703 Мт{х",у), где а: = (ал,... ,хт), х' = (rci,... ,а?Ц, х" = (х",. ..,£„) и у = (у0,... , 2/2”*—1); но такие неудачи редки. [См. R. Е. Bryant, IEEE Trans. С-Зб (1986), 685; J. Jain, К. Mohanram, D. Moundanos, I. Wegener and Y. Lu, АСМ/IEEE Design Automation Conf. 37 (2000), 681-686.] 66. Установить NTOP 4— fo + 1 — l и завершить работу алгоритма. 67. Пусть tk обозначает положение шаблона POOLSIZE — 2fc. На шаге S1 устанавливаются LEFT(ti) ч— 5, RIGHT(ti) ч— 7, I ч— 1. На шаге S2 для I = 1 ti помещается как в LLISTE2], так и в HLISTE2]. На шаге S5 для I = 2 устанавливаются LEFT(t2) ч— 4, RIGHT(t2) ч— 5, L(ti) ч— t2; LEFT(ts) ч— 3, RIGHT(<з) ч— 6, H(ti) ч— ta. На шаге S2 для I = 2 устанавливается L(t2) ч— 0 и t2 помещается в HLIST[3]; затем tg помещается в LLIST[3] и HLIST[3]. И т. д. Первый этап завершается с (LSTART [0],..., LSTART [4] ) = (fо, f 1, <з, te, f8) и fc LEFT(tfc) RIGHT (tfc) L(tfc) H(tfc) fc LEFT(tfc) RIGHT (tk) L(tfc) H(tfc) 1 5 Ы 7 М t2 ta 5 ЗЫ 4 [v>] te tg 2 4 И 5М 0 ti 6 2 [<5] 2 И 0 1 3 ЗЫ 6 ДО t4 tg 7 2 [<5] 1 [T] 0 1 4 з Ы 1 [т] t7 1 8 1 [T] 3M 1 0 что представляет смесь а о ш на рис. 24, нос!ож = го1 = 1иТоТ = Т. Пусть fk = fo + fc. На втором этапе шаг S7 для I = 4 устанавливает LEFT(te) ч— ~0, LEFT(t7) <- te, LEFT(te) < 1 и RIGHT(te) Ч- RIGHT(t7) Ч- RIGHT(te) Ч 1. На шаге S8 отменяются изменения, внесенные в LEFT(O) и LEFT(l). На шаге Sil с s = tg устанавливаются LEFT(te) ч— ~2, RIGHT(te) ч— tg, V(/2) ч— 4, L0(/2) ч— 1, Н1(/2) ч— 0. С s = t7 на этом шаге устанавливаются LEFT(t7) ч— ~3, RIGHT(t7) ч- t7, У(/з) ч— 4, ЬО(/з) ч— 0, Н1(/з) ч— 1; в то же время на шаге S10 должно быть установлено RIGHT(te) ч— t7. В конечном итоге шаблоны должны быть преобразованы в fc LEFT (tfc) RIGHT (tfc) L(tfc) H(tfc) 1 ~8 ti ta tg 2 ~7 ta 0 ti 3 ~6 ta ti tg 4 ~5 ti t7 1 fc LEFT (tfc) RIGHT (tfc) L(tfc) H(tfc) 5 ~4 tg t7 tg 6 ~0 t7 0 1 7 ~3 t7 0 1 8 ~2 tg 1 0 (но затем они могут быть отброшены). Полученная в результате БДР для f /\д имеет вид fc V(/fc) L0(/*) HI(/fc) fc V(/*) L0(/fc) HI(/fc) 241 0 625 4 340 1 720 5 4332 8176 5 3 3 1 68. Если LEFT(t) < 0 в начале шага S10, установить RIGHT (t) 4- t, q 4- NTOP, NTOP 4- q + 1, LEFT(t) ----{q - fo), LO(g) 4-LEFT(L(t)), HI(g) 4---LEFT(H(t)), V(g) 4- l и вернуться к шагу S9. 69. Убедитесь, что NTOP < ТВОТ в конце шага S1 и при переходе от шага S11 к шагу S9. {Не вносите этот тест внутрь цикла в S11.) Убедитесь также, что NTOP < HBASE непосредственно после установки HBASE на шаге S4. 70. Этот выбор делает хеш-таблицу немного меньшей; таким образом, переполнение па- мяти становится менее вероятным ценой немного большего количества коллизий. Но это также замедлит работу, поскольку теперь make-template потребуется проверять условие NTOP < ТВОТ при каждом уменьшении ТВОТ. 71. Добавить новое поле, EXTRA (t) = а", к каждому шаблону t (см. (43)). 72. Вместо шагов S4 и S5 следует воспользоваться подходом из алгоритма R для карман- ной сортировки элементов связанных списков, начинающихся с LLISTUJ и HLISTEZ]. Это
704 ОТВЕТЫ К УПРАЖНЕНИЯМ 7.1.4 возможно, если использовать в указателях однобитовую подсказку для того, чтобы отли- чать связи в полях L от связей в полях Н, поскольку тогда можно определять параметры LO и HI потомков t как функцию от t и ее “четности” 73. Если профилем БДР является (Ьо, • • •, Ьп), мы можем назначить pj = i /2е] страниц ветвям Xj. Вспомогательные таблицы из pi Ч----hpn+i < [В(/)/2е] + п коротких целых чисел позволяют нам вычислить V(p) = Т’[тг(р)], LO(p) = LO(JVf[ir(p)] + <т(р)), HI(p) = HI (JVf [тг(р)] + o(p)). Например, если e = 12 и n < 216, мы можем представить произвольные БДР размером до 232 — 228 + 216 + 212 узлов с помощью 32-битовых виртуальных указателей L0 и HI. Каждая БДР требует соответствующих вспомогательных таблиц Т и М размером < 220, сконструированных из ее профиля. [Этот метод может значительно улучшить кэширующее поведение. Он основан на статье П. Ашара (Р. Ashar) и М. Ченга (М. Cheong), IEEE/АСМ Internat. Conf. Computer- Aided Design CAD-94 (1994), 622-627, которые также разработали алгоритмы, подобные алгоритму S.] 74. Требуемое условие представляет собой Mn(ii,... ,Х2’*)Л [ii = Х2’*] Л [хз = a^-i] Л • • • Л [з.2п—1 = Х^п—ЕСЛИ уСтаНОВИТЬ 1/1 — Гх, уз ~ Хз, • • • , Узп~3 = Х%п—— 1» У2п~3+1 = x2n-i, J/2"-3+2 = x2n-i_2, •••> 1/2"-1 = (49) приведет к эквивалентному условию Дп—i(pi, • • •, Р2п—1) А [узп—з < 1/2п—3+1] А [узп—з_ 1 < Узп—з+г] Л - - - Л [pi < Узп—1 ], которое за- мечательно подходит для вычисления алгоритмом S. (Вычисление должно выполняться слева направо; вычисление справа налево будет генерировать чудовищные промежуточные результаты.) При таком подходе мы найдем, что имеется соответственно 1, 2, 4, 12, 81, 2646, 1422 564, 229809982112 монотонных самодуальных функций от 1, 2, ..., 8 переменных. (См. табл. 7.1.1-3 и ответ к упр. 7.1.2-88.) Функции от 8 переменных характеризуются БДР с 130 305 082 узлами; алгоритму S для ее вычисления требуется около 204 миллиардов обращений к памяти. 76. Начнем с р\(х1,хз) = [ti <12] и заменим Сзп(х\,... ,хз") в (49) функцией H2"(xi, - - -, Х2") = [Х1 < хз < Хз < Х4] Л • • • Л [хг**—3 < Хзп—2 <Х2" —1 < Х2**]- (Оказывается, что В(рд) = 3683424; для вычисления этой БДР достаточно около 170 миллионов обращений к памяти; рю находится почти на пределе досягаемости. Алго- ритм С быстро дает точное количество регулярных булевых функций от п переменных для 1 < п < 9, а именно 3, 5, 10, 27, 119, 1173, 44315, 16175190, 284432 730176. Аналогично можно подсчитать и самодуальные функции, как в упр. 74; эти числа, ранняя история которых рассматривалась в ответе к упр. 7.1.1-123, представляют собой 1, 1, 2, 3, 7, 21, 135, 2470, 319124, 1214554343 для 1 < п < 10.) 76. Будем говорить, что хо-..Xj-i обеспечивает Xj, если = 1 для некоторого i Q j с 0 < i < j. В таком случае тон • •. X2"-i соответствует клаттеру тогда и только тогда, когда Xj = 0, если xo-.-Xj-i обеспечивает Xj, для 0 < j < 2”. А Цп(хо, ,хзп~1) = 1 тогда и только тогда, когда Xj = 1, если хо •.. Xj-i обеспечивает Xj. Так что мы получим искомую БДР из таковой для pn(zi, • • •, хзп) путем (i) изменения каждой ветви Q) на (j—1) и (ii) взаимообмена ветвей LO и Ш в каждом узле ветвления, который имеет LO = |±|. (Заметим, что согласно следствию 7.1.1Q простые импликанты каждой монотонной булевой функции соответствуют клаттерам.) 77. Продолжая ответ к предыдущему упражнению, будем говорить, что битовый вектор хо .. - xic-i является согласованным, если мы имеем Xj = 1, когда Хо - Xj-i обеспечивает Xj для 0 < j < к. Пусть bk представляет собой количество согласованных векторов длиной к. Например, Ь* = 6, так как согласованными являются четырехбитовые векторы {0000, 0001,0011,0101,0111,1111}. Заметим, что ровно сь = 5*+i — bk клаттеров S обладают
7.1.4 ОТВЕТЫ К УПРАЖНЕНИЯМ 705 тем свойством, что fc представляет их “наибольшее” множество, max{s | s представляет множество 5}. БДР для p„(xi,... ,Х2») имеет Ьк-1 узлов ветвления (к) при 1 < к < 2П-1. Доказа- тельство: каждая подфункция, определяемая х±,..., Xk-i, либо тождественно ложна, либо определяет согласованный вектор xi.. .Xk-i- В последнем случае подфункция является бусиной, поскольку она принимает различные значения при определенных установках Tfc+i, ..., тг»*. Действительно, если xi... Xk-i обеспечивает Хк, мы устанавливаем ifc+i <— • • • «— тг" «— 1; в противном случае мы устанавливаем х, <— yj для к < j < 2", где = [т«+1 =1 для некоторого i С j с i + 1 < fc]; заметим, что узп+к = 0. С другой стороны, когда к = 2П — к' и 0 < к' < 2"-1, имеется Ьк> ветвей (fc). В этом случае неконстантные подфункции, возникающие из ®i, ..., Xk-i, приводят ко значени- ям yj, показанным выше, где вектор Уо'У1' • • - Ук' является согласованным. (Здесь О' = 2П, 1' = 2" — 1, и т. д.) И обратно, каждый такой согласованный вектор описывает такую подфункцию; можно, например, установить Xj «— 0, когда j < к — 2"-1 или 2"-1 < j < к, в противном случае Xj <— у^-'+з- Эта подфункция является бусиной тогда и только тогда, когда ук> = 1 или уо>... P(it-i)' обеспечивает Ук>- Таким образом, эти бусины соответствуют согласованным векторам длиной fc'; а различные векторы определяют различные бусины. Эти рассуждения показывают, что имеется bk-i — c*_i ветвлений (fc) с LO = [Т|, когда 1 < к < 2П-1, и сг»»-к таких ветвлений, когда 2"-1 < к < 2". Следовательно, ровно половина В(д„) — 2 узлов ветвления имеет LO = |±]. 78. Для подсчета графов на п помеченных вершинах с максимальной степенью < d по- строим булеву функцию от Q) переменных из его матрицы смежности, а именно функцию Д£=1 S<d(Xfc), где Хк представляет собой множество переменных в строке fc матрицы. Например, когда п = 5, имеется 10 переменных, а функция имеет вид S<d(xi, хз,хз, Х4) Л S<d(xi,X5,Xe, Xj) Л S<d(X2, Хъ,Х8,Хд) Л S<d(X3,Xe, Хв, Tio) Л S<d(X4, 3:7,3:9,3:10). При п = 12 БДР для d = (1,2,..., 10) имеют соответственно (5960, 137477, 1255813, 5295204, 10159484, 11885884, 9190884, 4117151, 771673, 28666) узлов, так что они быстро вычисляются с помо- щью алгоритма S. Для подсчета решений с максимальной степенью d вычтем количество решений для степени < d— 1 из количества для степени < d; ответами для 0 < d < 11 являются: 1 3038643940889754 29271277569846191555 140151 211677202624318662 17880057008325613629 3568119351 3617003021179405538 4489497643961740521 8616774658305 17884378201906645374 430038382710483623 [В общем случае имеется tn — 1 графов на п помеченных вершинах с максимальной степе- нью 1, где tn — количество инволюций 5.1.4-(40).] Методы из раздела 7.2.3 превосходят БДР для таких перечислений, как здесь, при больших п, поскольку помеченные графы имеют п! симметрий. Но когда п имеет умерен- ный размер, бинарные диаграммы решений быстро дают ответ и красиво характеризуют все решения. 79. В следующих результатах подсчетов, сделанных на основе бинарных диаграмм реше- ний из ответа к предыдущему упражнению, каждый граф с fc ребрами имел вес 266-fc. Для получения вероятностей следует выполнить деление на З66. 73786976294838206464 553156749930805290074112 598535502868315236548476928 68379835220584550117167595520 1380358927564577683479233298432 7024096376298397076969081536512 11646725483430295546484263747584 7767741687870924305547518803968 2514457534558975918608668688384 452733615636089939218193403904 45968637738881805341545676736 2093195580480313818292294985 23 Зак. 3331
706 ОТВЕТЫ К УПРАЖНЕНИЯМ 7.1.4 80. Если исходные функции f и д не имеют общих узлов БДР, оба алгоритма сталкиваются почти с одними и теми же подзадачами: алгоритм S работает со всеми узлами fog, которые не происходят от узлов вида а о [Т] или [Т] о fi, в то время как (55) также избегает узлов, происходящих от а о [Т] или [т| о fi. Кроме того, (55) использует сокращения, встречаясь с нетривиальными подзадачами И(/',д') с /' = д'-, алгоритм S не в состоянии распознать простоту таких случаев. Еще (55) может также выиграть, если столкнется с соответствующими записями, оставшимися от предыдущего вычисления. 81. Просто везде замените ‘И’ на ‘ЛИБО’ и ‘Л’ на ‘ф’. Простыми случаями теперь являются /®0 = /, 0фд = ди/вд = 0 при f = д. Мы должны также выполнить обмен f д, если f > д 0. Примечания. Автор в качестве эксперимента добавлял в кэш дополнительные записи ‘/фг = д’ и ‘рфг = но, похоже, они приносили больше вреда, чем пользы. Рассматривая другие бинарные операторы, заметим, что нет необходимости реализовывать оба оператора НО-НЕ(/, д) = f Л д и НЕ-НО (f,g) = f Л д, поскольку последний представляет собой НО- НЕ^, /). Кроме того, реализация ЛИБО (1, ИЛИ (/,р)) может оказаться лучше реализации НЕ-ИЛИ(/, р) =->(/V </). 82. Вычисление верхнего уровня F <— И(/, д) начинается с f и д в регистрах компьютера, но REF(/) и REF(p) не включают “ссылки” как таковые. (Однако мы можем считать, что и /, и д “живы”) Если алгоритм (55) обнаруживает, что f /\д очевидным образом является г, он увели- чивает REF(r) на 1. Если (55) находит f Л д = т в кэше записей, он увеличивает REF(r) и рекурсивно увеличивает REF(L0(r)) и REF(HI(r)) тем же способом, если г было “мертво” Если на шаге U1 обнаруживается р = q, REF (р) уменьшается на 1 (поверите вы в это или нет); это не приводит к уничтожению р. Если на шаге U2 обнаруживается г, возможны два варианта: если г было “живым” устанавливаются REF(r) <— REF(r) + 1, REF(p) <— REF(p) — 1, REF(g) <— REF(g) — 1. В про- тивном случае просто устанавливается REF (г) <— 1. Когда на шаге U3 создается новый узел г, устанавливается REF(r) <— 1. Наконец, после того как И на верхнем уровне возвращает значение г, которое мы хотим назначить F, необходимо сначала разыменовать F, если F / Л; в данном случае это означает установку REF(F) <— REF(F) — 1 с рекурсивным разыменованием L0(F) и HI(F), если REF(F) становится равным 0. Затем мы устанавливаем F «— г (без изменения REF(r)). [Кроме того, в подпрограмме квантификации, такой как (65), или в подпрограмме композиции (72) и п, п гк должны быть разыменованы после того, как ИЛИ или MUX вычислит г.] 83. В упр. 61 показано, что подзадача f Л д встречается не более одного раза на один вызов верхнего уровня, когда REF(J) = REF(p) = 1. [Эта идея принадлежит Ф. Соменци (F. Somenzi); см. статью, упомянутую в ответе к упр. 84. Многие узлы имеют количество ссылок, равное 1, поскольку среднее значение приблизительно равно 2 и поскольку стоки обычно имеют большие значения. Однако такое избегание обращения к кэшу в экспе- риментах автора не повышало общую производительность, возможно, из-за исследуемых примеров или из-за “случайных” попаданий в кэш в других операциях верхнего уровня.] 84. Имеются различные возможности, но явного победителя при этом нет. Размеры кэша и таблиц должны представлять собой степени 2 для облегчения вычислений хеш-функций. Размер таблицы уникальности для х„ должен быть грубо пропорционален числу (живых и мертвых) узлов, в настоящий момент выполняющих переходы по переменной xv. Нет необходимости выполнять хеширование заново при уменьшении или увеличении таблицы.
7.1.4 ОТВЕТЫ К УПРАЖНЕНИЯМ 707 В экспериментах автора во время написания данного раздела размер кэша удваивался, когда количество вставок с начала последней команды верхнего уровня превосходило те- кущий размер кэша в In 2 раз. (В этот момент случайная хеш-функция должна заполнять около половины слотов.) После сборки мусора кэш при необходимости уменьшался, так что он либо имел 256 слотов, либо был заполнен как минимум на четверть. Отслеживать текущее количество мертвых узлов достаточно легко; следовательно, в любой момент мы знаем, какое количество памяти нам вернет сборка мусора. Автор получил удовлетворительные результаты путем вставки нового шага U2| между U2 и U3: “увеличить С на 1, где С—глобальный счетчик. Если С mod 1024 = 0 и если как минимум 1/8 всех текущих узлов мертвы, выполнить сборку мусора” [См. различные другие предложения, основанные на богатом экспериментальном опы- те, в работе F. Somenzi, Software Tools for Technology Transfer 3 (2001), 171-181.] 85. Полная таблица должна хранить 232 записей по 32 бита, т. е. 234 байт (и 17.2 Гбайт). База БДР, рассматривавшаяся после (58), с около 136 миллионами узлов, с битами в чере- дующемся порядке “застежки-молнии" требует для хранения около 1.1 Гбайт памяти; база БДР, рассматривавшаяся в следствии Y, с последовательным порядком битов множителей, требует для хранения только около 400 Мбайт памяти. 86. Если f = 0 или д = h, вернуть д. Если f = 1, вернуть h. Если д = 0 или f = д, вернуть И(/, h). Если h = 1 или f = h, вернуть ИЛИ (/,<;). Если д = 1, вернуть СЛЕДУЕТ(/,/г); если h = 0, вернуть НО-НЕ(р, /). (Если бинарные СЛЕДУЕТ и/или НО-НЕ не реализованы непосредственно, соответствующие случаи могут принимать тернарный облик.) 87. Отсортировать заданные значения указателей /, д, h так, что f < д < h. Если f = 0, вернуть И(р, h). Если f = 1, вернуть ИЛИ(р,Л). Если f = д или д = h, вернуть д. 88. Тройка функций (/, д, h) = (Ro, Ri, Ri) образует забавный пример при Ra(xi, • • • , Z-n) — [(«Сп • • • ^С1 )2 mod 3 tt] — ft(2a4<ci) mod з(«С2, • - - , Tn). Благодаря записям тернарная рекурсия находит f/\g/\h = 0 путем исследования на каждом уровне только одного случая; бинарное вычисление, скажем, f Л д = h, определенно, оказывается более длинным. Еще более эффектно положить f = ц Л (х2? F: G), д = Х2 Л (xi? G: F) и h = xi? хз Л F: Х2 Л G, где F и G являются функциями от (хз,... ,хп), такими, что B(F /\G) = G(B(F)B(G)), как в упр. 63. Тогда каждая из функций f Лд, д /\hn h/\ f имеет большую БДР, но тернарная рекурсия немедленно выясняет, что f Л д Л h = 0. 89. (а) Истинна; левая часть представляет собой (/оо V /oi) V (/ю V fn), правая — (/оо V /ю) V (/oi V /и). (б) Аналогично истинна. (Квантор G также является коммутативным.) (в) Обычно ложна; см. п. (г). (г) УзчЗхг/ = (/оо V /oi) Л (/ц> V /и) = (B^Vxi/) V (/оо Л /и) V (/oi Л /ю). 90. Замените 3ji... 3jm на Gji... Gjm. 91. (а) /4-1 = /, f I xj = fi и f I Xj = fo в обозначениях (63). (б) Этот закон дистрибутивности очевиден по определению 4- (Он также истинен для V, ф и т. д.) (в) Истинно тогда и только тогда, когда д не тождественна нулю. (Следовательно, значение f(xi,..., хп) 4- 9 для д 0 определяется только значениями Xj 4- д для 1 < j < п.) (г) f(xi, 1,0, Х4,0,1,Х7, • • • ,Хп). Это ограничение / по отношению к хз = 1, хз = 0, хз = 0, хв = 1 (см. упр. 57), также называется кофактором f по отношению к подкубу д. (Аналогичный результат выполняется, когда д представляет собой любое произведение литералов.)
708 ОТВЕТЫ К УПРАЖНЕНИЯМ 7.1.4 (д) f(xixn-i, xi ф • • • ф Хп-i Ф 1). (Рассмотрите случай f = Xj для 1 < j < n.) (е) xi? /(1,..., 1): /(0, ...,0). (ж)/(1,хг,...,хп) 4 д(хг,...,х„). (з) Если f = хг и д = xi V хг, мы имеем f J, д = xi V хг- (и) CONSTRAIN (/, д) = “Если /4-Р имеет очевидное значение, вернуть его. В про- тивном случае, если f 4- д = г находится в кэше записей, вернуть г. В противном случае представить fug, как в (52); установить г <— CONSTRAIN (fh,gh), если gi = 0, г <— CONSTRAIN (/(,р<), если дк = 0, в противном случае г <— UNIQUE(i>,CONSTRAIN(/i,pi), CONSTRAIN (А, рь)); поместить ‘/4p = г’ в кэш записей, и вернуть г”. Здесь очевидными значениями являются /4-О = О4-Р = О; / 4-1 = /; 14-Р = Р4-Р = [РТ^О]. [Оператор /4-Р был введен в 1989 году О. Кудером (О. Coudert), К. Берте (С. Berthet) и Ж. К. Мадре (J. С. Madre). Примеры, такие как в п. (з), привели их также к предло- жению модифицированного оператора ограниченности / 4) р, который имеет аналогичную рекурсию, за исключением того, что он использует / -Ц- (За^р) вместо (xv? fi gr- fh -Ц- Ph) при ft = fh- См. Lecture Notes in Computer Science 407 (1989), 365-373.] 92. Для части “тогда” см. ответ к упр. 91, (г). Заметим также, что (i) xi 4- Р = xi тогда и только тогда, когда ро 0 и pi / 0, где рс = д(с,Хг, ,xn); (ii) хп4Р = хп тогда и только тогда, когда Gx„p = 0 и р / 0. Предположим, что /” 4рп = (/ 4-Р)’г Для всех / и тг. Если р 0 не является подкубом, существует индекс j, такой, чторо 0, pi 0 иОз^р 0, гдерс = p(xi,..., xj-i,с, Xj+i, • • •, хп). Согласно предыдущему абзацу мы имеем (i) Xj 4-Р = Xj и (ii) Xj 4-Р 7^ Xj, т. е. получаем противоречие. 93. Пусть / = J(xi,.. .,x„;/i,.. .,/„) и р = J(n,... ,xn;gi, ,дп), где А = 3!n+l V ••• V Х5п v J(X5n+l,...,X6n;[l'—1],.. . , [u —п]), gv = Хп+1 V • • V x5n v J(X5n+l, • ,X6n; [u = l]+[u—1],..., [u = n]+[u—n]), a J представляет собой функцию соединения из упр. 52. Если G может быть раскрашен тремя красками, пусть / — J(xi,... ,хп; fi, , А), где А = Хп+1 V ’ • • V Xgn V «7(Я-5п+1, • • • , 3-6nJ fvl, • • • , fvn), a Aw = [и и w имеют разные цвета]. Тогда B(f) < п + 3(5п) + 2. И обратно, предположим, что существует приближенная функция /, такая, что B(f) < 16п + 2, и пусть А является подфункцией с xi = [г> = 1], ..., х„ = [г> = п]. Различны не более трех из этих подфункций, поскольку каждая отличная А должна иметь ветвление по каждой из переменных in+i, • • -, xs„. Раскрасим вершины таким образом, чтобы и и v имели одинаковый цвет тогда и только тогда, когда А = А; это может случиться, только когда u—f—v, так что раскраска корректна. [М. Sauerhoff and I. Wegener, IEEE Transactions CAD-15 (1996), 1435-1437.] 94. Случай 1. v gv. Тогда мы не квантифицируем xv; следовательно, р = рьи/Ер = xvf fiEg: fhEg. Случай 2. v = gv. Тогдар = xvAgh и /Ер = (/«Eph)V(AEph) = rt Vrh. В подслучае v fv мы имеем fi = fh = f', следовательно, ri = гь и мы можем непосредственно привести / Ер к / Е рн (пример “концевой рекурсии”). [Руделл (Rudell) заметил, что порядок квантификации в (65) соответствует восходя- щему порядку переменных. Этот порядок удобный, но не всегда наилучший; иногда лучше удалять кванторы 3 по одному в ином порядке, основываясь на знаниях об используемых функциях.] 95. Если ri = 1 и v = р„, можно установить г <— 1 и забыть об гь- (Это изменение приводило в некоторых экспериментах автора к стократному ускорению.)
7.1.4 ОТВЕТЫ К УПРАЖНЕНИЯМ 709 96. Для V просто заменим Е на А и ИЛИ на И. Для G заменим Е на D и ИЛИ на ЛИБО; также, если v fv, возвращаем 0. [Подпрограммы для кванторов да/нет А и N аналогичны случаю G. Кванторы да/нет должны использоваться только при тп = 1; в противном случае их применение имеет мало смысла.] 97. В восходящем направлении количество работы на каждом уровне в худшем случае пропорционально количеству узлов на этом уровне. 98. Функция NOTEND(a:) = 3y3z(ADJ(x, у) Л ADJ (я, z) Л [y^z]) идентифицирует все вер- шины степени > 2. Следовательно, ENDPT(x) = KER(x) Л -iNOTEND(x). A PAIR(x,p) = ENDPT(x) Л ENDPT (у) Л ADj(x,p). [Например, когда G представляет собой граф граничащих штатов США, со штатами, упорядоченными, как в (104), мы имеем B(NOTEND) = 992, B(ENDPT) = 264 и B(PAIR) = 203. Перед применением ЗрЗг размер БДР равен 50511. Имеется ровно 49 ядер степени 1. Девять компонентов размером 2 получаются путем объединения следующих трех решений. Общая стоимость этих вычислений с применением упомянутых алгоритмов составляет около 14 миллионов обращений к памяти и требует около 6.3 Мбайт памяти—всего лишь 52 обращений к памяти на ядро.] 99. Найдите треугольник взаимно смежных штатов и зафиксируйте их цвета. Размер БДР также существенно уменьшится, если выбрать штаты с высокими степенями на “средних” уровнях. Например, путем установки ацо = 5мо = otn = Ьтя = а*а = Ъщ, = 1 мы превращаем 25579 узлов во всего лишь 4642 (а общее время работы падает до менее 2 миллионов обращений к памяти). [В рукописи Брайанта о БДР была детально рассмотрена раскраска графов, но при публикации в 1986 году он решил заменить этот материал другим.] 100. Заменим IND(a?ME> • • •, яс*) на IND(a?ME, ...,яс*) А 5т2(яне>...,яс*), чтобы получить независимые множества, состоящие из 12 узлов; эта БДР имеет размер 1964. Затем используем (73) как и ранее, и прибегнем к трюку из упр. 99, получая функцию COLOR с 184 260 узлами и 12 554 677 864 решениями. (Время работы составляет около 26 миллионов обращений к памяти.) 101. Если вес штата равен w, назначим 2w и w в ка- честве соответствующих весов его переменным а и b и применим алгоритм В. (Например, переменная ат получает вес 2(23 + 25) = 96.) Показанное здесь реше- ние с кодами цветов Ф 2 Оф , является единствен- ным. 102. Основная идея заключается в том, что при изменении gj все результаты в кэше для функций с fv > j остаются действительными. Чтобы воспользоваться этим принципом, мы можем поддерживать массив “временных меток” Gi > Gi > • • > Gn > 0, по одной для каждой переменной. Имеется время “тактового генератора” G > Gi, представляющее количество различных выполненных или подготовленных композиций; еще одна перемен- ная G' записывает, было ли значение G изменено после последнего вызова COMPOSE. Изначально G = G' = Gi = - • • = Gn = 0. Подпрограмма NEWG (j, д) реализована следующим образом.
710 ОТВЕТЫ К УПРАЖНЕНИЯМ 7.1.4 N1. [Простой случай?] Если gj = д, выйти из подпрограммы. В противном случае установить gj ч— д. N2. [Можно выполнить сброс?] Если д Xj или если j < п и Gj+i > 0, перейти к шагу N4. N3. [Сброс меток.] Пока j > 0 и gj = Xj, устанавливать Gj <- 0 и j ч— j — 1. Затем, если j = 0, установить G ч— G — G', G' ч— 0 и выйти из подпрограммы. N4. [Обновление G?] Если G' = 0, установить G«-G+ 1 hG' «- 1. N5. [Новые метки.] Пока j > 0 и Gj G, устанавливать Gj 4— G и j 4— j — 1. Выйти из подпрограммы. | (Счетчики ссылок также должны поддерживаться соответствующим образом.) Перед вызовом верхнего уровня подпрограммы COMPOSE установите G' <— 0. Измените под- программу COMPOSE в (72) так, чтобы она использовала при обращении к кэшу /[G„], где v = fv; проверка ‘v > тп' становится проверкой ‘Gv = О’. 103. Эквивалентная формула p(/i(a:i,... ,жп), • . ,/т(®1, ,Жп)) может быть реализована с помощью операции COMPOSE (72). (Однако преподаватель был оправдан, когда ока- залось, что его формула может быть вычислена более чем в сто раз быстрее формулы Шустрого, несмотря на тот факт, что она использует в два раза больше переменных! В его приложении вычисление (3/1 = /i(xi,... ,xn)) Л • • Л (j/m = fm(xi,... ,хп)) Л p(j/i,... ,ym) оказывается гораздо проще, чем вычисления операций COMPOSE от рл (/1,. - -,/т) для каждой подфункции gj функции р; см., например, упр. 162.) 104. Следующий рекурсивный алгоритм COMPARE(/, д) требует не более О(В(/)В(р)) шагов при использовании совместно с кэшем записей. Если f — д, вернуть “=’. В про- тивном случае при f = 0 или д = 1 вернуть при f = 1 или д = 0 вернуть *>’. В противном случае представить fug, как в (52); вычислить п ч— COMPARER, gi). Если представляет собой ‘||’, вернуть в противном случае вычислить гь ч— COMPARER, рь). Если гь представляет собой *||’, вернуть ‘||’. В противном случае: если п представляет собой “=’, вернуть гь', если гь представляет собой *=’, вернуть гг, если п = гн, вернуть п. Иначе вернуть ‘||’. 106. (а) Унатная функция с полярностями (yi,..., Уп) имеет Axjf = 0 при yj = 1 и Nxjf = О при yj = 0 для 1 < j < п. И наоборот, функция f унатна, если эти условия выполняются для всех j. (Заметим, что Xxjf = Nxjf = 0 тогда и только тогда, когда Qxjf = О, тогда и только тогда, когда / не зависит от Xj. В таких случаях yj не имеет значения; в противном случае yj определяется однозначно.) (б) Приведенный далее алгоритм поддерживает глобальные переменные (pi,... ,рп), изначально равные нулю и обладающие тем свойством, что pj = +1, если yj должно быть равно 0, и pj = —1, если yj должно быть равно 1; pj будет оставаться нулевым, если f не зависит от Xj. С пониманием этого UNATE(/) определяется следующим образом. Если f представляет собой константу, вернуть true. В противном случае представить /, как в (50). Вернуть false, если либо UNATE(/z), либо UNATE(/h) равно false-, в противном случае установить г ч— COMPARE(/i, Д) с использованием упр. 104. Если г представляет собой ‘||’, вернуть false. Если г представляет собой ‘<’, вернуть false, если pv < 0, в противном случае установить pv <-1-1 и вернуть true. Если г представляет собой *>’, вернуть false, если pv > 0, в противном случае установить pv <-1 и вернуть true. Этот алгоритм весьма часто быстро завершается. Он опирается на тот факт, что f(x) < в(х) Для всех х тогда и только тогда, когда f(x ф у) < д(х ф у) для всех х при фиксированном у. Если мы просто хотим протестировать монотонность функции /, то вместо нулевого значения переменные р должны быть инициализированы значением +1.
7.1.4 ОТВЕТЫ К УПРАЖНЕНИЯМ 711 106. Определим HORN(/,p, h) следующим образом. Если f > д, обменяем f <-> д. Затем, если f = 0 или h = 1, вернем true. В противном случае если д = 1 или h = 0, вернем false. В противном случае представим f,gnh как в (59). Вернем true, если HORN(/i,pi,/ii), HORN(/i,ph, hi), HORN(/h,pi,/ii) и HORN(/h,ph, hh) все равны true; в противном случае вернем false. [Этот алгоритм опубликован в Т. Horiyama and Т. Ibaraki, Artificial Intelligence 136 (2002), 189-213; его авторам также принадлежит алгоритм, аналогичный алгоритму из ответа к упр. 105, (б).] 107. Пусть e$f$g$h означает, что из е(х) = f(y) = g(z) = 1 вытекает h((xyz)) = 1. Тогда f является функцией Крома тогда и только тогда, когда /$/$/$/, и мы можем использовать следующий рекурсивный алгоритм KROM(e, f,g, h). Переупорядочить {e,f,g} так, чтобы е < f < д. Затем, если е = 0 или h = 1, вернуть true. В противном случае если f = 1 или h = 0, вернуть false. В противном случае представить е, f,g,hc помощью кватернарного аналога (59). Вернуть true, если все KROM(ej,/j,gi,/it), KROM(e<,/t,ph,/it), KROM(ez, fh, gi, hi), KROM(ei, fh, gh, hh), KROM(e/,, fi, gi, hi), KROM(eh, fi, gh, hh), KROM(eh, fh,gi,hh) и KROM(eh, fh,gh, hh) равны true; в противном случае вернуть false. 108. Пометим узлы как {1,...,в}, причем корень получает метку 1, а стоки получают метки {s—1, з}; тогда (з—3)! перестановок прочих меток дают различные ориентированные ациклические графы для одной и той же функции. Указанное неравенство следует из того, что каждая инструкция (зд? Ik- hk) имеет не более n(s — I)2 возможных вариантов для 1 < к < з — 2. (В действительности оно выполняется также для произвольных ветвящихся программ, а именно для бинарных диаграмм решений в общем случае, независимо от того, являются ли они упорядоченными и/или приведенными.) Поскольку 1/(з — 3)! < (з — 1)3/з! и з! > (з/е)я, мы имеем Ь(п, з) < (пзе)я. Пусть Sn = 2n/(n + ff), где 0 = 1g е = 1/1п 2; тогда 1g Ь(п,з„) < snlg(nsne) = 2n(l - (lg(l + в/п))/(п + в)) = 2n — Q(2n/n2). Так что вероятность того, что случайная булева функция от п переменных имеет B(f) < зп, не превышает 1/2п(2"/п2). А это очень малая величина. 109. 1/2п^2"/"2' очень мало даже при умножении на п!. 110. Пусть/п = Mm(a:n_rn+i,... ,хп;0,... ,0, ад,... jXn-mJV^n-m+iA-•-ЛхпЛ[0.. .Oxi... Хп-т является квадратом]), когда 2m-1 +т— 1 < п < 2т +т. Каждый член этой формулы имеет 2т + т — п нулей; второй член уничтожает все 2т-битовые квадраты. [См. H.- Т. Liaw and C.-S. Lin, IEEE Transactions C-41 (1992), 661-664; Y. Breitbart, H. Hunt III, and D. Rosenkrantz, Theoretical Comp. Sci. 146 (1995), 45-69.] 111. Пусть pn = A(n — An), и заметим, что рп = т тогда и только тогда, когда 2т + т < п < 2m+1 + т + 1. Сумма для 0 < к < п — рп равна 2П-ДП — 1; прочие члены суммы дают 112. Предположим, что к = п — 1g п + 1g а. Тогда = ЧХХ) - Если а < |, мы имеем 2п~п^аа/п < 1/(п2”+1); следовательно, Ьк = (2п^а — 2пА2а1) х (2п-п/“а/п)(1 + О(2-п/“)) = 2*(1 - О(2-п/(2“>)). А если а > 2, мы имеем 2п~п/а а/п > 2"/2+1/п; таким образом Ьк = (22”-fc— 22"~fc-1)(l + О(ехр(—2п^2/п))). [Дисперсия Ьк найдена в работе I. Wegener, IEEE Trans. С-43 (1994), 1262-1269.] 113. Эта идея, на первый взгляд, довольно привлекательна, но при более близком зна- комстве теряет свой блеск. Согласно теореме U на нижних уровнях базы БДР нахо- дится сравнительно немного узлов; и алгоритмы наподобие алгоритма S затрачивают сравнительно небольшое время на работу с этими уровнями. Кроме того, неконстантные
712 ОТВЕТЫ К УПРАЖНЕНИЯМ 7.1.4 стоковые узлы могут усложнить ряд других алгоритмов, в первую очередь, алгоритмов переупорядочения. 114. Например, таблица истинности может иметь вид 01010101 00110011 00001111 00001111. 116. Пусть Nk = bo -I---f-bfc-i представляет собой количество узлов (J) БДР, для которых j < к. Сумма входящих степеней этих узлов составляет как минимум Nk', сумма исходящих степеней равна 2Nk', и имеется внешний указатель на корень. Таким образом, от к верхних уровней к нижним могут идти не более № + 1 ветвей. Каждая подтаблица порядка п — к соответствует некоторой такой ветви. Следовательно, д* < № + 1. Более того, мы должны иметь qk < Ьк-I----|-Ьп, поскольку каждая подтаблица порядка п — к соответствует единственной бусине порядка < п — к. В случае (124) заменим ‘БДР’ на ‘НДР’, ‘Ьк' на ‘z*’, ‘бусина’ на ‘z-бусина’, a ‘gfc’ на Ч’- 116. (а) Пусть Vk = 22<° + 22* * + ••• + 22°. Тогда Q(/) < min(2*-1,22"+1 *) = Un + Vx(n->n)-i- Примеры наподобие (78) показывают, что эта верхняя граница не может быть улучшена. (б) qk/bk = 2^~к/(2^~к - 22"-fc"1) для 0 < к < п; qn = bn. 117. qk = 2* для 0 < к < т, a qm+k = 2т + 2 — к для 1 < к < 2т. Следовательно, Q(/) = 22m-1 у. 2m-1 -1 й В(/)2/8. (Такие / делают КДР непривлекательными с практической точки зрения.) 118. Если п = 2Тп — 1, мы имеем hn(xi,... ,хп) = Mm(zm-i, - • • ,zo;0,xi,... ,хп), где (zm-i • • • 20)2 = xi + • • • + хп вычислимо за 5п — 5т шагов согласно упр. 7.1.2-30, а Мт требует других 2п + О(у/п) шагов согласно упр. 7.1.2-39. Поскольку hn(xi,... ,хп) = hn+k(xi, • • •, хп, 0,..., 0), мы имеем C(hn) < 14п + О(у/п ) для всех п. (Поработав немного больше, можно уменьшить эту величину до 7п+О(у/п log п); не смогут ли читатели достичь большего?) Стоимость ht составляет 6 = £(/14), а а?2Ф((т1Ф(т2Ла:4))Л(а:зФ(:г2Лз:4))) представляет собой формулу наименьшей длины. (Кроме того, C(hs) = 10 и £(/15) = 11.) 119. Истинно. Например, 5г,з,5(3:1,••• ,хв) = /113(3:1,3:2,0,0,1,1,0,1,0,хз,Х4,xs,xo). 120. Мы имеем h£(xi,... ,хп) = hn(yi, ,уп), где у, = х^ для 1 < j < п. A /in(yi,--, Уп) ~ Уи1Л—Hi/n = У^хл—= з:(х!н—i-xnjir- 121. (а) Если ук - хп+1-к, мы имеем hn(yi,..., уп) = У»у = Уп— VX - ^П+1 — (п — 1/х) - (б) Если х = (3:1,... ,хп) и t 6 {0,1}, мы имеем hn+i(x, t) = (t? 3:„x+i: x„x)- (в) Нет. Например, >/> отображает 0*11 •-> 0*-11011-> 0*-210211-> - - -1-> 10*11-> 0*11. (Несмотря на простое определение, перестановка ф обладает замечательными свойства- ми, включая наличие фиксированных точек, таких как 10011010000101011000111001011 и 11101111011001011101111101111.) (г) На самом деле hn(xi... хп) = 3:1 (!) по индукции с использованием рекуррентного соотношения из п. (б). (Если /(xi,... ,хп) является произвольной булевой функцией, а т представляет собой произвольную перестановку бинарных векторов зц... з:п, можно записать /(х) = /(хт) и может оказаться, что работать с преобразованной функцией / гораздо проще. Поскольку /(х) Л д(х) = /(хт) Л д(хт), преобразование И от двух функций представляет собой И от их преобразований, и т. д. Рассмотренные в разделе перестановки вектора (3:1... з?п)тг = Xi„ ... Хп-к, которые просто преобразуют индексы, представляет собой простой частный случай этого общего принципа. Но этот принцип в определенном смысле оказывается слишком общим, поскольку каждая функция / тривиально имеет как минимум одну пе- рестановку г, для которой / является худой в смысле упр. 170; вся сложность / может быть перенесена в т. Даже простые преобразования наподобие ф имеют ограниченную
7.1.4 ОТВЕТЫ К УПРАЖНЕНИЯМ 713 полезность, поскольку не образуют хорошие композиции; например, -ф-ф не является пре- образованием того же самого типа. Но линейные преобразования, выполняющие отобра- жения х i-> хТ рдя некоторых несингулярных бинарных матриц Т, доказанно полезны для упрощения БДР. [См. S. Aborhey, IEEE Trans. С-37 (1988), 1461-1465; J. Bern, C. Meinel, and A. Slobodova, АСМ/IEEE Design Automation Conf. 32 (1995), 408-413; C. Meinel, F. Somenzi, and T. Theobald, IEEE Trans. CAD-19 (2000), 521-533.]) 122. Например, при n - 7 рекуррентное соотношение из ответа к упр. 121, (б) дает где затененные узлы вычисляют подфункцию hDR от переменных, которые еще не бы- ли протестированы. Упрощения находятся в нижней части, поскольку /12(3:1,3:2) = xi и h^R(xi,X2) = Х2. [См. D. Sieling and I. Wegener, Theoretical Comp. Sci. 141 (1995), 283-310.] 123. Пусть t = к — s = xi + + Хк- Имеется реестр для каждой комбинации s' единиц и t' нулей, такой, что s' +t' = w, s' < s и t' < t. Сумма = (“) по всем таким (s',t') равна (97). (Заметим также, что она равна 2“ тогда и только тогда, когда w < min(s,t).) 124. Пусть m = п — к. Каждый реестр [го,..., rm] соответствует функции от (жк+i,..., х„), таблица истинности которой является бусиной, за исключением четырех случаев: (i) [0, ...,0] = 0; (ii) [1, ...,1] = 1; (iii) [0, зтп, 1] = хп (который не зависит от хп-1); (iv) [1,..., 1, a:jt+i, 0,. -., 0] (где имеется р единиц, так что з:ц+1 = гр), которая представляет Собой S<p(Xk+2, ..., Хп). Приведенный далее алгоритм за полиномиальное время вычисляет дь = q и Ь* = д— </ путем подсчета всех реестров. Когда все записи [го, • • •, гт] представляют собой нули или единицы, имеется тонкость, связанная с тем, что такие реестры могут существовать для разных значений в; не хотелось бы подсчитывать их дважды. Решение заключается в поддержке четырех множеств Саъ = {п + • • • + Гт-i | го = а и тт = Ь в некотором реестре}. Значение Отт должно быть искусственно установлено равным п + 1, а не 0. Мы считаем, что 0 < к < п. Н1. [Инициализация.] Установить mt- п — к, q </ 4— з 4— 0, Coo 4— С01 4— Сю 4— Си 4- 0. Н2. [Поиск v и w.] Установить v4—J2”_11[(s + j)tt < fc], W4—1Н-[зтг < fc]+[(s + т)тг < fc]. Если v = m — 1, перейти к шагу Н5. НЗ. [Проверка небусин.] Установить р 4---1. Если v т — 2, перейти к шагу Н4. В противном случае, если т = 2 и (з + 1)тг = п, установить р 4— [(з + 2)тг < fc]. В противном случае, если w = т и (з + у)тг = fc +1 для некоторого j 6 [1.. т— 1], установить р 4— j.
714 ОТВЕТЫ К УПРАЖНЕНИЯМ 7.1.4 Н4. [Добавление биномов.] Для всех s' и t', таких, что s' + t' = w, 0 < s' < s и 0 < t' < к — s, установить q ч— q + (^) и </ ч— q' + [s' =р]. Затем перейти к шагу Н6. HS. [Запоминание 0-1 реестров.] Для всех s' at', таких, как на шаге Н4, выполнить следующие действия. Если (з+т)тг < к, установить Coo CooUs' и Coi <— Coi U (s'—1); в противном случае установить Coi ч— CoiUs'. Если stt < к и (з+т)тг < к, установить Сю «— Cio U (s'—1) и Си ч— Сц U (s'—2). Если stt < к и (s + т)тг > к, установить Сц «— Сц U (s'—1). Н6. [Цикл по s.] Если s < к, установить s «— s + 1 и вернуться к шагу Н2. Н7. [Завершение.] Для аЬ = 00, 01, 10 и 11 установить q <— g+ (m“1) Для всех г 6 Саь- Установить также </ Ч— </ + [0 6 Соо] + [тп—1 G Сц]. I 126. Пусть S(n, тп) = (о) + • • • + („)• При 0<s<kns>2k — п + 2 имеется S(k + 1 — s, s) — 1 неконстантных реестров. Единственные другие неконстантные реестры возникают по одному при s = 0 и к < (п — 1)/2. Константные реестры учесть сложнее, но обычно их S(n + 1 — к, 2к + 1 — п) штук, появляющихся при s = 2к — п или s = 2к + 1 — п. Принимая во внимание граничные условия и небусины, мы находим П —fc Ьк = S(n — к, 2к — п) + S(n—к—s, 2fc+l—n+s) s=0 — min(/c, n — к) — [n = 2/c] — [3fc > 2n — 1] — 1 для 0 < к < n. Хотя S(n,m) не имеет простого вида, можно выразить Ьк как Bn/z + So<m<n-2fc<n (п+3—т—%к) (£) +(мелочь) при четном п, и то же самое выражение работает при нечетном п, если заменить Вп/2 на -А(п+1)/2- С двойной суммой можно справиться, выполнив сначала суммирование по к, поскольку (к + 1)(Д) = (ni + l)(^_i): £ (<„ + 5 - Го) ( ™ ) - (2га+2) ( К“ - ")). ш=0 Оставшуюся сумму можно разбить на четыре части, в зависимости от четности тп и/или п. Здесь оказываются полезными производящие функции. Пусть A(z) = Х^спСгк*)2" И B{z) = Sfc<n(2nfc-*)z". Тогда A(z) = 1 + £к<п (-*->" + Еь<„ (Ть-?)*” = 1 + J2fc<n (n2/)2”+1 + У2*<п (2Х+1)z"+2 = 1 + zA(z) + z2B(z). Аналогичный вывод доказывает, что B(z) = zB(z) + zA(z). Следовательно, _ 1-г _ 1-z2 В(-Л- Z — г+г? (Z)~ l-2z+z2-z3~ l-z-z2-z4' {Z) l—2z+z2—z3 l-z-z2-z4' Таким образом, An = 2An-i — An-2 + Ап-з = An-i + An-2 + An-4 для n > 4 и Bn удо- влетворяет тем же рекуррентным соотношениям. Фактически, мы имеем А„ = (3F2n+i + 7F2n — 2F2n-i)/23 и Вп = (3F2„4-2 + 7F2n+i — 2F2n)/23 с использованием чисел Перрина из упр. 15. Кроме того, устанавливая A*(z) = 52*<пи в*(2) = 52k<nмы находим А* (2) = z2A(z)B(z) и B*(z) = z2B(z)2. Если собрать все это вместе, можно получить замечательную точную формулу = _ рг+i j+(пюо<12) _ 10 Исторические справки. Последовательность (Ап), по всей видимости, впервые была изучена Р. Остином (R. Austin) и Р. К. Гаем (R. К. Guy), Fibonacci Quarterly 16 (1978),
7.1.4 ОТВЕТЫ К УПРАЖНЕНИЯМ 715 84-86; она подсчитывает бинарные xi.. .хп-1 со всеми единицами одно за другим. Кон- станта у, как было показано К. Л. Сигелем (С. L. Siegel), представляет собой наименьшее “число Писо” а именно наименьшее алгебраическое число > 1, все сопряженные к которому находятся внутри единичной окружности; см. Duke Matb. J. 11 (1944), 597-602. 126. Когда п > 6, мы имеем Ь* = ^L(fc+7)/2j + ^Г(*+7)/2] — 4 для 1 < к < 2п/3 и Ь* = 2n-fc+2 _ 6 — [к = п — 2] для 4п/5 < к < п. Но основные ограничения на B(h„) исходят от 2п/15 элементов профиля между этими двумя областями, и методы из ответа к упр. 125 можно расширить для работы с ними. Интересные последовательности имеют соответствующие производящие функции (1 — z)2/p(z), (1 — z)z/p(z), z2/p(z), где p(z) = (1 — z)3 — z5. Эти последовательности возникают в данной задаче из-за того, что Sk=o(''n-fe*/3'l) = А„ + Вп-1 +Сп-2- Они растут как а", где а и 1.7016 представляет собой действительный корень уравнения (а—1)3а2 = 1. Размер БДР не может быть выражен в аналитическом виде, но существует аналитиче- ская запись с использованием членов последовательности от A[n/3j до A|n/3j+4 с точностью О(2п^4/у/п). Таким образом, B(h„) = 0(ап^3). 127. (Перестановка тг = (3, 5, 7, ..., 2п' — 1, п, п — 1, п — 2, ..., 2п', 2п' — 2, ..., 4, 2, 1), п! = [2п/5], оказывается оптимальной для hn при 12 < п < 24; но она дает В(Ы00) = 1366282025. Как показано в упр. 152, просеивание работает гораздо лучше; но практически гарантированно существуют еще лучшие перестановки.) 128. Рассмотрим, например, Мз(х^,х2,хт,хз,Х1,хз,хз,хо,3:11,3:5,3:10). Первые т пере- менных {з:4,3:2,3:7} называются “адресными битами”; прочие 2т называются “целевыми? Подфункции, соответствующие 3:1 = ci, ..., Хк = с*, могут быть описаны реестрами вариантов, аналогичными (96). Например, когда к = 2, имеется три реестра, [3:5,0,3:9,3:11], [3:5,1,3:9,3:11], [3:5,3:3,3:5,3:10]; результат в этом случае получается путем использования (3:43:7)2 для выбора соответствующего компонента. Только третий из них зависит от хз; следовательно, дз = 3 и Ьг = 1. Когда к = 6, реестрами являются [0,0], [0,1], [1,0], [1,1], [3:5,0], [3:5,1], [3:9,3:11], [0,37ю] и [1,з:щ] с компонентами, выбираемыми переменной з:?; следовательно, де = 9 и be = 7. В общем случае, если переменные {3:1,... ,з:ц} включают а адресных битов и t це- левых, реестры будут иметь А = 2т~а записей. Разделим множество всех 2т целевых битов на 2“ подмножества, зависящих от адресных битов, и предположим, что Sj из этих подмножеств содержат j известных целевых битов. (Таким образом, во + ei 4---F вл = 2“ и ei + 2в2 + • • • + Asa = t. Мы имеем (во,..., в4) = (1,1,0,0,0) при k = 2ua = t= l в примере выше; и (во,в1,вг) = (1,2,1) при к = 6, а = 2, t = 4.) Тогда общее количество реестров д* равно 2°во 4- 2гв1 4-(- 2л-1вл-1 4- 2л[вл > 0]. Если з:*-ц является адресным битом, количество реестров Ьь, зависящих от з:*+1, равно д* — 2a^2[sa >0]. В противном случае Ь* = 2е, где с—количество констант, находящихся в реестрах, содержащих целевой бит з:*+1. 129. (Решение М. Соергофа (М. Sauerhoff); см. I. Wegener, Branching Programs (2000), Theorem 6.2.13.) Поскольку Pm(xi,.. -,x„p) = Qm(a:i, • • - ,xma)ASm{x\,... ,хтз) и B(Sm) = m3 + 2, мы имеем B(P^) < (m3 4- 2)B(Q™). Применяем теорему К. (Должна существовать более строгая нижняя граница, поскольку, как представляет- ся, Qm имеет большие БДР, чем Рт- Например, при тп = 5 перестановка (1тг,..., 25тг) = (3, 1, 5, 7, 9, 2, 4, 6, 8, 10, 11, 12, 13, 14, 15, 16, 20, 23, 17, 21, 19, 18, 22, 24, 25) является наилучшей для Qs; но B(Q£) = 535 в то время как B(Ps) = 229.)
716 ОТВЕТЫ К УПРАЖНЕНИЯМ 7.1.4 130. (а) Каждый путь, который начинается в корне БДР и содержит s ветвей HI и t ветвей LO, определяет подфункцию, которая соответствует графам, в которых обязательны в смежностей, a t—запрещены. Мы покажем, что эти (я+*) подфункций различны. Если подфункции д и h соответствуют различным путям, можно найти к вершин W, обладающих следующими свойствами: (i) W содержит вершины w и w' с w — w', обязательным в д и запрещенным в h. (ii) Не имеется смежностей между вершинами W, обязательными в h или запрещенными в д. (iii) Если и 6 W и v W, и и—v обязательно в h, то u = w или и = ш'. (Эти условия делают не более 2s+t = т—к вершин непригодными для помещения в W.) Можно установить оставшиеся переменные таким образом, что и — v тогда и только тогда, когда {и, и} С W, если смежность не является ни обязательной, ни запрещенной. Такое присваивание делает д = 1, h = 0. (б) Рассмотрим подфункцию от , в которой вершины {1,..., fc} обязаны быть изолированными, но и — v при к < и < [m/2] < v < т. Тогда fc-клика на [m/2J вершинах { [m/2] + 1,..., m} эквивалентна [т/2]-клике на {1,..., т}. Другими словами, эта подфункция от Стдт/2] представляет собой С[т/2],к- Теперь выберем fc и у/т/3 и применим (a). [I. Wegener, JACM 3S (1988), 461-471.] 131. (а) Можно показать, что профиль имеет вид (1, 1, 2, 4, ..., 2’-1, (р — 2) х (2’ — 1, q х 2’-1), 2’ — 1, 2’-1, ..., 4, 2, 1, 2), где г х Ь означает r-кратное повторение Ь. Следовательно, общий размер равен (pq + 2р — 2q + 2)29-1 — р + 2. (б) В случае упорядочения xi, х2, ..., хр, уц, y2i, ..., ypi, ..., 3/iQ, рг9, , yPq профиль принимает вид (1, 2, 4, ..., 2₽-1, (q— 1)р х (2₽-1), 2₽-1, ..., 4, 2, 1, 2), делая общий размер равным (pq — р + 4)2р-1. (в) Предположим, что среди первых fc переменных в некотором упорядочении на- ходится ровно т = [min(p,q)/2J переменных х; можно считать, что это {xi,... ,з:т}. Рассмотрим 2т путей в КДР для С, таких, что Xj = xm+j для 1 < j < р — т и у,] = [z = j или i = j+m, или j >т]. Эти пути должны проходить через различные узлы на уровне fc. Следовательно, qk > 2т; воспользуйтесь (85). [См. М. Nikolskaia and L. Nikolskaia, Theor. Comp. Sci. 266 (2001), 615-625.] Оптимальными упорядочениями для (p, q) = (4,4), (4,5) и (5,4) с использованием упр. 138 являются: Х1у11х2у21хзуз1у41уг2у22уз2у42у1зу2зуззу4зу14у24уз4у44х4 (размер 108); Х1У11Х2у21ХзУ31У41У12У22У32У42У13У23УЗЗУ43У14У24У34У44У13У25УЗбУ45Х4 (рЭЗМвр 140); Х1У11Х2У21У12У22У13У23У14У24ХЗУ31У32УЗЗУ34Х4У41У42У51У52У43У53У44У54Х5 (рЭЗМвр 167). 132. Согласно табл. 7.1.1-5 имеется 616 126 существенно различных классов функций от 5 переменных. Максимальное значение Вт;п(/), равное 17, достигается в 38 из этих классов. Три класса обладают тем свойством, что B(f*) = 17 для всех перестановок тг; один такой пример, ((х2 ф Х4 ф (xi Л (хз V 3:4))) Л ((х2 ф х$) V (хз ф 3:4))) Ф (х& Л (хз ф (rti V хг))), обладает интересными симметриями /(х1,хг,хз,14,3:5) = f(x2,X3,X4,xi,xs) = f(x2,xs,xi,3:3,14). Кстати, максимальная разность Втлх(/) — Bmin(/) = 10 достигается только в классе “функции соединения” xi? х2: хз? Х4: хз при Bmin = 7 и Вт&х = 17. (При п = 4 имеется 222 класса; и Bmin(/) = 10 в 25 из них, включая S2 и S2,4. Класс, проиллюстрированный таблицей истинности 16ad, уникально труден, в том смысле что Bmin(/) = 10 и большинство из 24 перестановок дают B(f*) = 11.) 133. Представим каждое подмножество X С {1,...,п} n-битовым целым числом г(Х) = и ПУСТЬ Ь«(Х),х обозначает вес ребра между X и X U х. Установим со 4— 0 и для 1 < г < 2" установим с, ч— min{ciffij + | j = 21-1 и г & j / 0}. Тогда Bmin(/) = С2П-1 + 2, и оптимальное упорядочение может быть найдено, если вспомнить,
7.1.4 ОТВЕТЫ К УПРАЖНЕНИЯМ 717 какие х = х(г) минимизируют каждое с,. Для поиска Втлх в этом рецепте следует заменить ‘min’ на ‘max’. Максимальный профиль, (1,2,4,2,2), встречается на путях, таких как 0 —> {2} —> {2,3} —> {2,3,4} —> {1,2,3,4}. Минимальный профиль, (1,2,2,1,2), встречается только на путях 0 —> ({3} или {4}) —> {3,4} —> {1,3,4} —> {1,2,3,4}. (Пять из 24 возможных путей имеют профиль (1,2,3,2,2) и не улучшаются просеиванием ни по одной из переменных.) 136. Пусть 0О = 1, 0\ = xi, Oi = xi Л Х2 и 0п = хп? 0п-Г- 0п-з для п > 3. Можно доказать, что когда п > 4, B(fin) = п + 2 тогда и только тогда, когда (птг,..., 1тг) = (1,...,п). Ключевым фактом является то, что, если к < п и п > 5, подфункции, полу- чаемые путем установки Хк <— 0 или Хк <— 1, различны, и обе они зависят от переменных {a?i,... , x*-i,x*+i,... ,хп}, за исключением того, что подфункция для а?п-1 <— 0 не зависит от Хп—2- Таким образом веса {хь} —> {хц,х|} в главной профилограмме равны 2, за исключением случаев к = п или (fc,Z) = (п — 1,п — 2). Ниже {xn-i,xn-2} имеются три подфункции, а именно хп? Оп-4- 0п-з, хп? 0п-з- 0п-з и 0п-з; все они зависят от {xi,... ,хп-з}, а две из них—от хп. 136. Пусть п = 2п' — 1 и т = 2т' — 1. Входные данные образуют матрицу размером тхп, и мы вычисляем медиану т медиан строк. Пусть V, обозначает переменные в строке г. Если X представляет собой подмножество тп переменных, обозначим Xi = X П V, и = |Xj|. Подфункции типа (si,..., sm) возникают, когда ровно з, элементов X* установлены равными 1; этими подфункциями являются (S1S2 ... Sm), где Si = S>n'-si(Vi\Xi) и 0 < s, < г, для 1 < г < т. Когда х X, мы хотим подсчитать, сколько из этих подфункций зависят от х. Из соображений симметрии можно считать, что х = хтп- Заметим, что симметричная по- роговая функция S>t(xi,... ,хп) равна 0, если t > п, или 1, если t < 0; она зависит от всех п переменных, если 1 < t < п. В частности, Sm зависит от х ровно для тт$п = min(rm + 1, п — Гт) выборов Sm- Пусть а, = = j] ДляО < j < п. Тогда On из функций {Si,..., Sm-i} являются константными, a an-i + • • • + anz от них могут как быть, так и не быть константными. Выбор неконстантных с, дает нам количество различных подфункций, зависящих от х, равное (гт$п)((оп + вп-i 4-F anz — Cn-i — • • • — cnz)$m), умноженному на (ст;) о100201 -i)c"'- 2)c"'+i • • •icn_i • Суммирование по {cn-i, • • •, с„/} дает нам ответ. Когда переменные естественным образом построчно упорядочены, эти формулы при- менимы с гт = к mod п, ап = [fc/nj1 ao = т — 1 — On- Элемент профиля Ьк для 0 < к < тп,
718 ОТВЕТЫ К УПРАЖНЕНИЯМ 7.1.4 таким образом, равен ([fc/nj$ni)((fc modn)$n), и мы имеем = (т'п')2 + 2. Это упорядочение оптимально, хотя, похоже, не имеется простого доказательства этого факта; например, некоторые упорядочения могут уменьшать Ьп+2 или Ьгп-2 от 4 до 3, увеличивая при этом bk для других к. Каждый путь от вершины до низа главной профилограммы можно представить как ао —> ai —> • • • —> «тп, где каждое ст, представляет собой строку гц ... rjm с 0 < гц < • • • < rjm < п, Tji + • • • + rjm = j с увеличением на каждом шаге одной координаты. Например, одним из путей при т = 5 и п = 3 является 00000 —> 00001 —> 00011 —> 00111 —> 00112 -> 00122 -> 00123 -> 01123 -> 11123 -> 11223 -> 12223 -> 12233 -> 12333 -> 22333 -> 23333 —> 33333. Этот путь можно конвертировать в “естественный” путь путем ряда шагов, которые не увеличивают общий вес ребер, следующим образом. В начальном отрезке, до первого раза, когда rjm = п, первыми выполняем все переходы по крайней справа координате. (Таким образом, первыми шагами пути в примере станут 00000 —> 00001 —> 00002 —> 00003 —> 00013 —> 00113 —> 00123.) Затем в последнем отрезке после последнего rji = 0 последними выполняем все переходы по крайней слева координате. (Последними шагами, таким образом, станут 01123 —> 01223 —> 02223 —> 02233 —> 02333 —> 03333 —> 13333 —> 23333 —> 33333.) Затем, после первых п шагов аналогично нормализуем вторые с конца координаты (00003 —> 00013 —> 00023 —> 00033 —> 00133 —> 01133 —> 01233 —> 02233); а перед последними п шагами—вторые координаты (00133 —> 00233 —> 00333 —> 01333 —> 02333 -> 03333). И т. д. [Этот метод доказательства “назад и вперед” был вдохновлен цитируемой ниже ста- тьей Боллиг (Bollig) и Вегенера (Wegener). Можно ли улучшить каждое неоптимальное упорядочение с помощью простого просеивания?] 137. Если добавить клику из с новых вершин и (“) новых ребер, стоимость оптималь- ного размещения увеличится на (Сд1). Так что можно считать, что заданный граф име- ет т ребер и п вершин {1, ...,тг}, где тип нечетны и достаточно велики. Соответ- ствующая функция /, которая зависит от тп + т + 1 переменных Xij и Зк для 1 < г < т, 1 < j < п и 0 < к < т, представляет собой J(so,si,... ,sm',h,gi,... ,дт), где gf = (xiUi Л f\{xiw | w £ {wi,r>i}}, когда г-м ребром является и, — vt и где h = ((a?ii... Xml} • (xin ... Хтп}} представляет собой транспозицию функции в упр. 136. Можно показать, что Bmin(/) = minw v lU7r — U7rl + (H^:i)2(2S2^)2 + mn + m + 2; оптимальное упорядочение использует (12^-)2(21^)2 узлов для h, п + |п,тг — п,тг| узлов для gi, по одному узлу для каждого з*, и два стоковых узла, минус один узел, разделенный между h и некоторым gi. [См. В. Bollig and I. Wegener, IEEE Trans. C-4S (1996), 993-1002.] 138. (а) Пусть Хк = {xi,... ,а:*}. Узлы КДР на глубине к представляют подфункции, которые могут получиться, когда константы замещают переменные Хк- Мы можем доба- вить к каждому узлу n-битовое поле DEP для определения, от каких именно переменных Хп \ Хк он зависит. Например, КДР для f из (92) имеет следующие подфункции и поля DEP: глубина 0: 0011001001110010 [1111]; глубина 1: 00110010 [0111], 01110010 [0111]; глубина 2: 0010 [000], ООП [0010], 0111 [000]; глубина 3: 00 [0000], 01 [0001], 10 [0001], 11 [0000]. Изучение всех полей DEP на глубине к дает нам веса главной профилограммы между Хк и Хк U xi для 0 < к < I < п. (б) Представим узлы на глубине fc в виде троек №Р = (hep, hkp, dkp) для 0 < р < Qk, где (hep, hkp) представляет собой указатели (LO, HI), a dkp записывает биты DEP. Если к < п, эти узлы выполняют ветвление по а:*-ц, так что мы имеем 0 < hep, hkp < 9*+i! но если fc = п, мы имеем Zno = hno = 0 и Zni = hni = 1 для представления [Т] и [Т]. Определим
7.1.4 ОТВЕТЫ К УПРАЖНЕНИЯМ 719 dfcp = 52{2* * 1 I №р зависит от a:t}; следовательно, 0 < dkP < 2" *. Например, КДР (82) эквивалентна Noo = (0,1,7); Nw = (0,1,3), Mi = (1,2,3); Mo = (0,0,0), Mi = (0,1,1), М2 = (1,1,0); Mo = (0,0,0), Mi = (1,1,0). Для подъема с глубины Ь до глубины а мы, по сути, делаем две копии узлов на глубинах Ь — 1, Ь — 2, ..., а,—по одной для случаев rtt>+i = 0 и rtt>+i = 1. Эти копии перемещаются вниз до глубин b, b — 1, ..., а + 1, и с ними выполняется приведение для удаления дубликатов. Затем каждый оригинальный узел на глубине а заменяется узлом с ветвлением по хь+1; его поля LO и HI указывают соответственно на 0- и 1-копию оригинала. Этот процесс включает некоторую достаточно простую обработку списков для об- новления полей DEP в процессе карманной сортировки: узлы распаковываются в рабочую область, состоящую из вспомогательных массивов г, s, t, и и v, изначально нулевых. Вместо использования 1кР и hkp для LO и HI мы сохраняем HI в ячейке ир рабочей области и связываем vp с предыдущим узлом (если таковой имеется) с таким же полем LO; кроме того, мы делаем si указывающим на последний узел, для которого LO = I (если таковой имеется). В приведенном ниже алгоритме UNPACK(p, I, h) используется как аббревиатура для иир 4— h, vp 4— st, si 4— р + 1? Когда узлы на глубине fc распакованы таким образом в массивы з, и и v, следующая подпрограмма ELIM(fc) пакует их обратно в структуру КДР с удаленными дубликатами. Она также устанавливает тр равным новому адресу узла р. Е1. [Цикл по Z.] Установить q 4— 0 и th 4— 0 для 0 < h < qk+i- Выполнить шаг Е2 для 0 < I < Qit+i- Затем установить Qk 4— q и завершить работу алгоритма. Е2. [Цикл по р.] Установить р 4— si и si 4— 0. Пока р > 0, выполнять шаг ЕЗ и устанавли- вать р 4— vp-i. Затем продолжить выполнение шага Е1. ЕЗ. [Упаковка узла р — 1.] Установить h 4— up-i. (Распакованный узел имеет (LO, Ш) = (Z, h).) Если th 0 и Zfc(th-i) = I, установить rp-i 4— th — 1. В противном случае установить 1кд 4- I, hkg 4- h, dkg 4- ((d(fc+i)i | d(*+i)h) 1) + [Z / Л], rp_i 4- q, q 4- q+1, th 4— q- Продолжить выполнение шага E2. | Теперь мы можем использовать ELIM для подъема от Ь до a. (i) Для к = Ъ — 1, Ъ — 2, ..., а выполнить следующие шаги. Для 0 < р < qk установить Z 4— lkp, h 4— Zi*p; если fc = b— 1, UNPACK(2p, 1ы, hu) и UNPACK(2p+l, 1ьь, Ziw»), в противном случае UNPACK(2p, Гц, тъь) и UNPACK(2p + 1,Г21+1,Г2ь+1) (тем самым создавая две копии Nkp в рабочей области). Затем выполнить ELIM(fc + 1). (ii) Для 0 < р < qa выполнить UNPACK(р,Г2Р,Г2р+1). Затем выполнить ELIM(a). (iii) Если а > 0, установить Z 4— l(a-i)P-> h 4— h(a-i)P, l(a-i)P 4— ri, Zl(a—l)p 4 Гь ДЛЯ 0 < p < qa—1* Эта процедура подъема искажает содержимое полей DEP выше глубины а, поскольку переменные становятся переупорядоченными. Но мы будем использовать ее только с теми полями, которые больше не нужны. (в) По индукции на первых 2П-2 шагах вычисляются все подмножества, не содержа- щие п; затем выполняется подъем от п — 1 до 0, а на остальных шагах вычисляются все подмножества, которые содержат п. (г) Начнем с установок ук 4— к и Wk 4— 2к — 1 для 0 < к < п. В приведенном далее алгоритме массив у представляет текущее упорядочение переменных, а битовая карта Wk = 52{2Из | 0 < j < к} —множество переменных на fc верхних уровнях. Мы наращиваем подпрограмму ELIM(fc), так что она также вычисляет искомые веса ребер главной профилограммы: счетчики Cj изначально равны 0 для 0 < j <п — к; после установки dkg на шаге ЕЗ мы устанавливаем cj 4— Cj +1 для каждого j, такого, что 23 С dkg; наконец мы устанавливаем bwfclPfc+3+i 4— Cj для 0 < j < п — к, используя обозначения из ответа к упр. 133. [Для ускорения мы можем подсчитывать байты, а не биты, увеличивая на 1 для 0 < у < (n - fc)/8.]
720 ОТВЕТЫ К УПРАЖНЕНИЯМ 7.1.4 Мы инициализируем поля DEP, выполняя следующие действия для к - п — 1, п — 2, ..., 0: UNPACK(р, Zfcp, hkp) для 0 < р < </*,; ELIM(fc); если к > 0, установить I <— h «— Л(*-1)р, ^(fc-i)p 4— Ti и fyfc_!)p «— rh для 0 < р < qk-i- Основной цикл алгоритма теперь выполняет следующие действия для 1 < i < 2"-1. Установить at- vi— 1 ub 4- vi+pi. Установить (ра, ...,уь) «— (уь,Уа, -,Уъ-1) и (wo+i, • • •, Wb) «— (2Ьь + via,. • •, 2Ьь + vib-i)- Выполнить подъем от b до а с помощью процедуры из п. (б); но использовать на шаге (ii) исходную (не дополненную) подпрограмму ELIM для вызова ELIM(a) на шаге (ii). (д) Пространство, необходимое для узлов на глубине fc, не превышает Qk = min(2fc, 22" ); нам также нужна память для 2 max(Qi,..., Qn) элементов в массивах г, u, v плюс max(Qi,..., Qn) элементов в массивах s и t. Так что в окончательном ответе доминирует О(2пп) для выходных данных Подпрограмма ELIM(fc) вызывается (£) раз в нарощенном виде для 0 < к < п и (^“}) раз в недополненном. В обоих случаях время ее работы составляет O(qk(n — к)). Таким образом, общее время работы составляет O(52fc(£)2fc(n — fc)) = О(3"п) и будет значительно меньшим, если КДР никогда не станет большой. (Например, оно равно О((1 + \/2)пп) для функции hn-) [Первый точный алгоритм для определения оптимального упорядочения переменных в БДР был разработан С. Д Фридманом (S. J. Friedman) и К. Д. Суповитом (К. J. Supowit), IEEE Trans. С-39 (1990), 710-713. Они использовали расширенные таблицы истинности вместо КДР, получив для т = 1 метод, который требовал @(Зп/у/п) памяти и 0(3"п2) времени и мог быть усовершенствован до О(3"п).] 139. Применим тот же алгоритм почти без изменений: будем рассматривать все узлы КДР с ветвлением по ха как находящиеся на уровне 0, а все узлы с ветвлением по а?ь+1 — как стоки. Таким образом, мы выполним 2Ь~“ подъемов, а не 2"-1. (Этот алгоритм не полагается на предположение о том, что qo = 1 и qn = 2, за исключением анализа требуемых памяти и времени в п. (д).) 140. Можно найти кратчайшие пути в сети без предварительного знания сети путем ге- нерации вершин и дуг “на лету” при необходимости. В разделе 7.3 указывается, что расстояние d(X, Y) каждой дуги X —> Y может быть изменено на d'(X, Y) = d(X, Y)—1(Х)+ 1(У) для любой функции 1(Х) без изменения кратчайших путей. Если пересмотренные расстояния d' неотрицательны, 1(Х) представляет собой нижнюю границу для расстояния от X к цели; трюк заключается в том, чтобы найти хорошую нижнюю границу, которую не слишком сложно вычислить. Если |Х| = I и если КДР для f с X на ее верхних I уровнях имеет неконстантные узлы на следующем уровне, то ЦХ) = max(q,n — Г) представляет собой подходящую нижнюю границу для задачи Bmin- [См. R. Drechsler, N. Drechsler and W. Gunther, АСМ/IEEE Design Automation Conf. 35 (1998), 200-205.] Тем не менее, чтобы этот подход мог конкурировать с алгоритмом из упр. 138, нужна более сильная нижняя граница, если только f не имеет относительно короткой БДР, которая не может быть достигнута очень многими способами. 141. Ложно. Рассмотрим g(a?iV-•-Vxe, ttV-•-Va:i2, (2:13V-•-Vxiejffixie, £17, a?ieV- • -Vxaz), rpeg(yi,.. .,y5) = ((((j/iVp5)Al/4)®l/3)A((l/iA2/2)®l/4®l/5))®l/5. ТогдаВ(р) = 40 = Bmin(p) не может быть достигнуто с последовательными {а?1з, • •. ,116,^18}- [М. Teslenko, A. Martinelli and Е. Dubrova, IEEE Trans. С-54 (2005), 236-237.] 142. (а) Предположим, что т нечетно. Подфункциями, которые возникают после того, как станут известны (a?i,... ,a;m+i), являются (wm+2Xm+2 -I-Fuwcn > 2m~1m — 2m~2— t], где 0 < t < 2™. Подслучаи im+2 + • • • + xn = (m — l)/2 показывают, что как минимум ((гп^)/г) из этих подфункций различны.
7.1.4 ОТВЕТЫ К УПРАЖНЕНИЯМ 721 тт z- / 2т — 1 1 2т —2 2 2т — 2т~~2 2т~*\ Но порядок органных труб ^3^4 х5 • • • хп-2 хп-1 хп ) гораздо луч- ше: пусть tk = xi + (2m — 1)а?2 + хз 4---F (2m — 2fc-1)a;2fc + 2fc-1a;2fc+i для 1 < к < т — 1. Оставшаяся подфункция зависит не более чем от 2к + 2 различных значений, [tk/2k}. (б) Пусть п = 1 + 4m2. Переменными являются а?о и Xij для 0 < i,j < 2т-, весами являются wo = 1 и Wij = 2г+22т+1+^т. Пусть X/ представляет собой первые I переменных в некотором порядке, и предположим, что Xi включает элементы в ii строках и ji столбцах матрицы (xij). Докажем, что если max(zj, ji) = т, то qi > 2т; следовательно, B(f) > 2™ согласно (85). Пусть I и J являются подмножествами {1,..., 2т}, такими, что |1| = | J| = т и Xi С а?о U {i,j | г 6 I, j 6 J}; и пусть I' и J' представляют собой дополняющие подмножества. Выберем т элементов X' С Xi\xo в разных строках (или, если it < т, в разных столбцах). Рассмотрим 2™ путей в КДР, определяемых следующим образом: хо = 0 и xtj = 0, если Xij 6 Xi \ X'- также x^j = Xiji = х^ = Xij для i 6 I, j 6 J, где г i' и j о j' являются паросочетаниями между I О I' и J о J'. Тогда имеется 2ТП различных значений t = ^iei,jeJWiiXiH но на каждом пути Eo<ij<2m = (22m-l)(l+22m+1m). Эти пути должны проходить через различные узлы на уровне I. В противном случае, если t 0 t', один из нижних подпутей будет вести к [±], а другой к [т]. [Эти результаты получены в работе К. Hosaka, Y. Takenaga, Т. Kaneda and S. Yajima, Theoretical Comp. Sci. 180 (1997), 47-60, авторы которой доказали также, что |Q(/) — Q(/fl)| < п. Всегда ли также самодуальная пороговая функция удовлетворяет условию |В(/) - В(/д)| < п?] 143. Фактически в алгоритмах из упр. 133 и 138 доказывается, что для этих весов наи- лучшим является порядок органных труб: (1, 1023, 1, 1022, 2, 1020, 4, 1016, 8, 1008, 16, 992, 32, 960, 64, 896, 128, 768, 256, 512) дает профиль (1, 2, 2, 4, 3, 6, 4, 8, 5, 10, 4, 8, 3, 6, 2, 4, 1, 2, 2, 1, 2) и B(f) = 80. Наихудшее упорядочение (1022, 896, 512, 64, 8, 1, 4, 32, 1008, 1020, 768, 992, 1016, 1023, 960, 256, 128, 16, 2, 1) делает В(/) = 1913. (Можно решить, что свойства бинарной записи являются ключевыми для этого при- мера. ОДНаКО ^XjX2^3^4Х5Х6 х7 х8 х9 х10 «Ец *^12 *^13 *^14 *^15 *^16 *^17 *^18 *^19 *^20 / ® ДСИ- ствительности является той же функцией согласно упр. 7.1.1-103(!).) 144. (5,7,7,10,6,9,5,4,2); КДР-не-БДР-узлы соответствуют fi, f2, Уз, 0, 1. 145. Bmin = 31 достигается в (36). Наихудшее упорядочение для (хзх2Х1Хо)2 + (2/32/23/12/0)2 представляет собой у0, У1, У2, Уз, х2, a?i, а?о, хз и делает Втах = 107. Кстати, наихудшим упорядочением для 24 входов 12-битового сложения (in ... 2:0)2 + (2/11 • • • 2/0)2 оказывается Уо, У1, - -, Уп, хю, хв, хо, Х4, хз, xs, х2, хт, Xi, хд, Хо, xii, дающее Втах = 39111. [Б. Боллиг (В. Bollig), Н. Рэндж (N. Range) и И. Вегенер (I. Wegener), Lecture Notes in Comp. Sci. 4910 (2008), 174-185, доказали, что Bmin = 9n —5 для сложения двух n-битовых чисел при п > 1, а также что для 2тп-канального мультиплексора Вт,п(Мт) = 2п —2тп+1.] 146. (а) Очевидно, что Ьо < до; а если qo = Ьо + ао, то hi < 2bo + ао = Ьо + до- Также до — ho = ао < bi + q2 < q2, количества двухбуквенных строк дг-буквенного алфавита; аналогично bo + hi + q2 < (hi + дг)2. (Те же соотношения выполняются между qk, qk+2, Ьк и hfc+i.) (б) Пусть подфункции на уровне 2 имеют таблицы истинности aj для 1 < j < q2\ воспользуемся ими для построения бусин /3], ..., 0ьг на уровне 1. Пусть (71,..., 7в2+Ь!) представляют собой таблицы истинности (aiai,... ,ag2ag2,Pi,... ,Ръ1). Если Ьо < bi/2, пусть функции на уровне 0 имеют таблицы истинности {/?2«-1/?2« | 1 < г < bo} U {PjPj | 2Ьо < j < bi} U {тут,- | 1 < j < bo + qo — hi}. В противном случае нетрудно определить Ьо бусин, которые включают все Р, и использовать их на уровне 0 вместе с небусинами {7з7з I 1 < 3 < qo - bo}.
722 ОТВЕТЫ К УПРАЖНЕНИЯМ 7.1.4 147. Прежде чем начать любое переупорядочение, мы очищаем кэш и выполняем сборку всего мусора. Приведенный далее алгоритм обменивает уровни (и) ч-> (у) при и = и + 1. Он работает путем создания связных списков одиночных, связанных и скрытых узлов, на которые указывают переменные S,T и Н (изначально Л), с использованием вспомогатель- ных полей LINK, которые могут быть временно заимствованы из алгоритма хеш-таблиц списков уникальности, после того как они будут перестроены. Т1. [Построение S и Т.] Для каждого @-узла р установить q ч— L0(p), г ч— Н1(р) и удалить р из его хеш-таблицы. Если V(q) / и и V(r) и (р является одиночным), установить LINK(p) ч— S и S ч— р. В противном случае (р является связанным) установить REF(g) Ч— REF(q) — 1, REF(r) ч— REF(r) — 1, LINK(p) ч— T и Т Ч— р. Т2. [Построение Н и перемещение видимых узлов.] Для каждого (г?)-узла р установить q ч— L0(p), т ч— Н1(р) и удалить р из его хеш-таблицы. Если REF(p) = 0 (р является скрытым), установить REF(q) ч— REF(q) —1, REF (г) Ч— REF(r) —1, LINK(p) ч— Н и Н ч— р; в противном случае (р является видимым) установить V(p) ч— и и INSERT(u,р). ТЗ. [Перемещение одиночных узлов.] Пока S Л, устанавливать р Ч— S, S ч— LINK(p), V(p) ч— и и INSERT(v,p). Т4. [Превращение связанных узлов.] Пока Т Л, устанавливать р ч— Т, Т ч— LINK(p) и выполнять следующие действия. Установить q ч— L0 (р), г ч— HI (р). Если V (q) > и, установить qo ч— qi ч— q; в противном случае установить qo <— LO(q) и qi Ч— HI(q). Если V (г) > и, установить г0 ч— и ч— г; в противном случае установить го ч— L0 (г) и и ч— HI (г). Затем установить L0(p) Ч— UNIQUE(i),qo,ro), Н1(р) ч— UNIQUE(i), qi,n) и INSERT(u,p). Т5. [Уничтожение скрытых узлов.] Пока Н Л, устанавливать р ч— Н, Н ч— LINK(p) и удалять узел р. (Все оставшиеся узлы—живые.) | Подпрограмма INSERT (у, р) просто помещает узел р в таблицу уникальности х„, используя ключ (L0(p),HI(p)); этого ключа уже не будет в наличии. Подпрограмма UNIQUE на шаге Т4 подобна алгоритму U, но вместо использования ответа к упр. 82 рассматривает счетчики ссылок совсем по-другому на шагах U1 и U2: если U1 обнаруживает р = q, он увеличивает REF(p) на 1; если U2 обнаруживает г, он просто устанавливает REF(r) ч— REF(r) -I- 1. Внутренне переменные ветвления остаются в своем естественном порядке 1, 2, ..., п сверху вниз. Таблицы отображений р и тг представляют текущую перестановку с точки зрения внешнего пользователя, с р = тг-; таким образом, переменная пользователя находится на уровне итг — 1, а узел UNIQUE(u,p, q) на уровне и — 1 представляет функцию пользователя {xvp? р: q). Для поддержки этих отображений устанавливаем j ч— up, к Ч— ир, up ч— к, ир ч— j, уп ч— и, ктг ч— и. 148. Ложно. Например, рассмотрим шесть стоков и девять функций-источников с расши- ренными таблицами истинности 1156, 2256, 3356, 4456, 5611, 5622, 5633, 5644, 5656. Восемь из этих узлов связанные и один видимый, но нет ни одного скрытого или одиночного. Имеется 16 новичков: 15, 16, 25, 26, 35, 36, 45, 46, 51, 61, 52, 62, 53, 63, 54, 64. Так что обмен отображает 15 узлов в 31. (Мы можем использовать узлы В(тз Ф Ф ^ч) в качестве стоков.) 149. Последовательные профили ограничены значениями (bo, bi,..., bn), (bo+bi, 2bo, Ьг, - - -, Ъп), (Ьо + Ь1,25о + Ьг,4Ьо, Ъз,..., Ь„), ..., (2°bo + bi,— ,2fc 2bo + bk-i,2k 1bo,bk,— ,bn)- Аналогично в дополнение к теореме J+ мы также имеем В(/Г,..., /^) _ B(/i,..., fm) + 2(bo + • • • + bk-i), поскольку обмены вносят не более 2bfc_i, 2bk-z, , 2bo новых узлов. 150. Можно считать, что т = 1, как в упр. 52. Предположим, что мы хотим переместить Xk в позицию, являющуюся J-й в упорядочении, где j ф к. Сначала вычислим ограничения
7.1.4 ОТВЕТЫ К УПРАЖНЕНИЯМ 723 на /, когда ц = 0 = 1 (см. упр. 57); назовем их д и h. Затем перенумеруем оставшиеся переменные: если j < к, заменим (xj,... ,Xk-i) на (xj+i,... ,Xk); в противном случае заменим (a?fc+i,...,xj) на (xk, - -.,xj-i). Затем вычислим f «— (xj hg)V (xj f\ h), используя вариант алгоритма S с линейным временем работы из упр. 72. Чтобы показать, что этот метод имеет указанное в условии время работы, достаточно доказать следующее: пусть g(xi,... ,хп) и h(xi,... ,хп) представляют собой функции, такие, что из д(х) = 1 вытекает Xj = 0, а из h(x) = 1 вытекает х, = 1. Тогда комбинация goh имеет не более чем в два раза больше узлов, чем gVh. Но это почти очевидно, если рассматривать таблицы истинности: например, если п = 3 и j = 2, таблицы истинности для g и h имеют соответственно вид abOOcdOO и OOstOOun. Бусины (3 у g X/ h на уровнях < j однозначно соответствуют бусинам /3' о/3" у goh на этих уровнях, поскольку /3 = /?' V/3" можно “разложить” только одним способом, помещая нули в соответствующие места. А бусины /3 у g V h на уровнях > j соответствуют не более двум бусинам yg oh, а именно /3 о [±] и/или [±] о )3. [См. Р. Savicky and I. Wegener, Acta Informatica 34 (1997), 245-256, Theorem 1.] 151. Установить tfc «— 0 для 1 < к < n и выполнить операцию обмена Xj-i <-> Xj, а также tj-i О tj. Затем установить к 4— 1 и выполнять следующие действия до достижения к > п: если tfc = 1, установить к <— к + 1; в противном случае установить h <- 1 и просеять хь- (Этот метод многократно просеивает верхнюю среди еще не просеянных переменную. Исследователи испытывали более привлекательные стратегии, такие как просеивание пер- вым наибольшего уровня; но ни одна из них не оказалась превосходящей предложенный здесь метод.) 152. Применение алгоритма J так, как в ответе к упр. 151 дает B(/ii00) = 1 382 685 050 после 17179 обменов, что почти так же хорошо, как и результат “настроенной вручную” перестановки (95). Пара следующих просеиваний уменьшает размер до 300 451396, а затем до 262 969 049; дальнейшие повторения сходятся к размеру 231376 264 узлов после общего количества обменов, равного 232951. В случае обрыва циклов на шагах J2 и J5 при S > 1.05s результаты оказываются даже лучшими (!), хотя и выполняется меньше обменов: 1 342 191 700 узлов после одного про- сеивания в конечном счете сокращаются до 208 478 228 после общего количества обменов, равного 139245. Более того, Филип Стапперс (Filip Stappers) использовал просеивание вместе со случайным обменом в сентябре 2010 года и получил значение B(/i”00), равное всего лишь 198 961868, со следующей перестановкой тг, являющейся “текущим чемпионом’.’ 3 4 6 8 10 12 14 16 18 20 22 24 27 28 30 32 35 37 39 41 43 45 47 49 51 53 54 83 85 98 99 100 79 77 81 75 73 95 71 97 69 96 57 91 67 59 65 60 63 62 64 61 66 87 58 68 56 94 93 70 92 72 90 74 76 78 80 89 88 86 84 82 55 52 50 48 46 44 42 40 38 36 34 33 31 29 26 25 23 21 19 17 15 13 11 9 7 5 1 2 Кстати, если просеивать переменные Дюо в порядке размера профиля, так что первой просеивается Тео, затем—Т59, а;61, т58, Т57, а?б2, тве и т. д. (где бы они ни находились в данный момент), получающаяся в результате БДР имеет 2 196 768 534 узла. Простой “нисходящий обмен” вместо полного просеивания неприменим для Люо: (1°°) обменов a?i о тг, хз яч, а?з Х2, ..., 1100 xi, - - •, 1100 о T99 полностью обращают порядок всех переменных, не влияя на размер БДР ни на одном шаге. 153. Каждый логический элемент легко синтезируется с использованием рекурсии напо- добие (55). Около 1 Мбайт памяти и 3.5 миллионов обращений к памяти достаточно для построения всей базы БДР из 8242 узлов. Используя упр. 138, можно сделать вывод об оптимальности упорядочения xj, а?з, хд, xi, 09, 01, 03, 07, Х4, хе, Об, 04, 02, оа, Х2, ха, 05, xs и о том, что Bmin(pi,... ,2/9) = 5308.
724 ОТВЕТЫ К УПРАЖНЕНИЯМ 7.1.4 Переупорядочение переменных не рекомендуется для такого рода задач, поскольку имеется всего лишь 18 переменных. Например, автопросеивание при каждом удвоении размера потребует более 100 миллионов обращений к памяти, сокращая при этом 8242 узла до примерно 6400. 154. Да: при последнем просеивании СА переместилась между ID и 0R, а выполняя всю работу в обратном направлении, можно вывести, что первое просеивание поместило ME между МА и RI. 155. Лучший результат автора в случае (а) имеет вид ME NH VT МА СТ RI NY DE NJ MD PA DC VA OH WV KY NC SC GA FL AL IN MI IA IL MO TN AR MS TX LA CO WI KS SD ND NE OK WY MN ID MT NM AZ OR CA WA UT NV и дает = 403, В(/г ) = 677, B(fi, fi) = 1073; в случае (б) упорядочение NH ME МА VT СТ RI NY DE NJ MD PA VA DC OH WV KY TN NC SC GA FL AL IN MI IL IA AR M0 MS TX LA CO KS OK WI SD NE ND MN WY ID MT AZ NM UT OR CA WA NV дает В(/Г) = 352, B(ff) = 702, B(ff,ff) = 1046. 156. Можно ожидать, что два “просеивания вверх” будут как минимум столь же хороши, как и одно двустороннее просеивание. В действительности же тесты Р. Руделла (R. Rudell) показали, что одного лишь просеивания вверх, определенно, недостаточно. Иногда спуски необходимы для того, чтобы компенсировать временные подъемы переменных, хотя их оптимальная окончательная позиция находится ниже. 157. Внимательное изучение ответа к упр. 128 показывает, что мы всегда улучшаем раз- мер, когда первый адресный бит, за которым следует целевой, перемещается в положение после всех целевых битов. [Но простые обмены слишком слабы. Например, Mi(xi,xe;xi, хз, Х4,ха) и Мз(х1,Х1о,Х1Г,Х2,хз,..., хд) локально оптимальны при обменах Xj-i Xj для любых у.] 158. Рассмотрим сначала случай m=lnn = 3t — 1 > 5. Тогда если тит = fc, количество узлов с ветвлением по j равно aj, если jxr < fc, bj, если jn = к, и an+i-j, если jir > к, где aj = j — 3 max(J — 2t, 0), bj = min(j, t, n + 1 — j). Случаями с последовательными {xj,...,xn-i} являются fc = 1 и B(f^) = 3t2 + 2; к = n и B(f") = 3t2 +1. Но когда fc = [n/2], мы имеем B(f^) = |_3t/2j ([3t/2] — 1) + n— [t/2j +2. Аналогичные вычисления применимы при т > 1: мы имеем B(f*) > 6(Р23) + В(д^), когда тг делает {xi,... ,хр} последовательными, но B(f^) ~ 2(р^2) + ^В(д7Т), когда тг помещает {xp+i,... ,хр+гп} в средину. Поскольку д фиксировано, рВ(дп) = О(п) при 71 —> ОО. [Если д является функцией того же вида, мы получаем примеры, когда симметричные переменные в д лучше разделить. Но булевы функции, для которых оптимальное значение B(f") меньше, чем 3/4 наилучшего, при том ограничении, что никакие блоки симметрич- ных переменных не являются разделенными, неизвестны. См. D. Sieling, Random Structures tz Algorithms 13 (1998), 49-70.] 159. Это почти симметричная функция, так что имеется только девять вариантов. Ко- гда центральный элемент х помещается в позицию (1,2,..., 9) от вершины, размер БДР становится соответственно (43,43,42,39,36,33,30,28,28). 160. (а) Вычислим /\$=0/\j=0(-'Lij(X)), булеву функцию от 64 переменных, например, путем 100-кратного применения COMPOSE к относительно простой функции L из упр. 159. В экспериментальной программе автора для поиска этой БДР (имеющей при обычном упо- рядочении 251873 узла) потребовалось 35 Мбайт памяти и около 320 миллионов обращений к ней. Затем алгоритм С быстро находит интересующий нас ответ: 21929 490 122. (Коли- чество решений 11 х 11, 5530201631127973447, может быть найдено таким же образом.)
7.1.4 ОТВЕТЫ К УПРАЖНЕНИЯМ 725 (б) Производящая функция представляет собой 1 4- 64z + 2016z2 + 39740z3 + • • • + 80z45+8z46, и алгоритм В быстро находит восемь решений с весом 46. Три из них различны по отношению к симметрии шахматной доски; наиболее симметричное решение показано ниже, на рис. (АО). (в) БДР для Л<=1 Aj=i(_|^'o(-^)) имеет 305 507 узлов и 21942036750 решений. По- этому должно быть 12 546 628 диких решений. (г) Теперь производящая функция представляет собой 40z14+936z15 +10500z16 + •+ 16z55 + z56; примеры с весами 14 и 56 показаны ниже, на рис. (А1) и (А2). (д) Ровно 28 с весом 27 и 54 с весом 28, все ручные; см. (АЗ). (е) Имеется соответственно (26260, 5, 347, 0, 122216) решений, найденных с помощью около (228, 3, 32, 1, 283) миллионов обращений к памяти. Среди самых легких и самых тяжелых решений (1) — (А4) и (А5); самое красивое решение (2) — (А6); (А7) и (А9) решают (3) легко и (5) тяжело. Шаблон (4), основанный на бинарном представлении тг, не имеет предшественников 8x8; но он имеет, например, предшественника 9 х 10, показанного на рис. (А8). (АО) (Al) (А2) (АЗ) (А4) 161. (а) При нормальном построчном упорядочении (a?n,a;i2, - - - ,a;n(n_i),a;nn) БДР имеет 380 727 узлов и характеризует 4 782 725 решений. Вычисления требуют 100 Мбайт памяти и около 2 миллиардов обращений к ней. (Аналогично 29 305 144137 натюрмортов размером 10 х 10 могут быть подсчитаны с помощью 14 492 923 узлов, полученных в результате менее чем 50 миллиардов обращений к памяти.) (б) Это решение, по сути, единственное; см. (В1) ниже. Имеется также единственное (и очевидное) решение с весом 36. (в) Теперь БДР имеет 128 переменных с упорядочением (in, рц,..., а;пп, Упп)- Мож- но сначала построить БДР для [Г(Х) = У] и [Г(У) = X], а затем выполнить их пересечение; но это оказывается плохой идеей, требующей более 36 миллионов узлов даже в случае раз- мера 7x7. Гораздо лучше применить ограничения Ltj(X) = уц и £<3(У) = хц построчно, а также добавить лексикографическое ограничение X < У, так чтобы пораньше исключить натюрморты. Вычисление в этом случае может быть завершено с использованием 1.6 Гбайт памяти и около 20 миллиардов обращений к ней; в наличии имеется 978 563 узла и 582 769 решений. (г) Решение вновь единственное с точностью до поворота; см. “свечу зажигания” (В2) о (ВЗ). (А (В4) о (В5) представляет собой единственный перевертыш размером 7 х 7 с постоянным весом 26. Жизнь полна изумительных вещей!) (В1) (В2) (ВЗ) (В4) (В5) (В6) 162. Пусть Т(Х) = [X ручная] и Ek(X) = [X сбегает после к шагов]. Мы можем вычислить БДР для каждого Ek, используя рекуррентное соотношение ЕДХ) = -7(Х); Efc+i(X) = ЭУ(7(Х) Л [£(Х) = У] Л £*(У)). (Здесь ЗУ обозначает Эрц 3?Д2 • • • Зрев. Как упоминалось в ответе к упр. 103, это рекур- рентное соотношение оказывается гораздо эффективнее правила Ек+i = 7(Х) Л£к(£ц (X),
726 ОТВЕТЫ К УПРАЖНЕНИЯМ 7.1.4 ..., Lee (А")), хотя последнее выглядит более “элегантно”) Количество решений, |£fc|, ока- зывается равным (806544 • 216, 657527179 • 24, 2105885159, 763710262, 331054880, 201618308, 126169394, 86820176, 63027572, 41338572, 30298840, 17474640, 9797472, 5258660, 3058696, 1416132, 523776, 204192, 176520, 62456, 13648, 2776, 2256, 440, 104, 0) для fc = (1, 2, ..., 26); таким образом, ZZfcii 1^1 = 67166017379 из 236 = 68719 476736 возможных конфигураций, которые в конечном итоге сбегают из клетки 6x6. (Один из 104 “тормозов” из Е25 показан выше, на рис. (В6).) Методы БДР отлично подходят для данной задачи при малых fc; например, B(£i) = 101 и В(£г) = 14441. Но Ek в конечном итоге становится сложной “нелокальной” функ- цией: размер достигает пика В(Ев) = 28696866, после которого количество решений становится достаточно малым, чтобы размер уменьшился. До квантификации в формуле Т(Х) Л [L(X) = У] Л Es(Y) присутствует более 80 миллионов узлов; это выходит за рамки разумного. Действительно, БДР для Vfcli Еь(Х) требует памяти больше, чем ее 233- байтовая таблица истинности. Следовательно, “прямой” метод для этого упражнения предпочтительнее применения БДР. (Клетки, большие, чем 6x6, выглядят невозможно сложными с точки зрения любого известного метода.) 163. Предположим сначала, что о представляет собой Л. Мы получим БДР для f = д f\h, беря БДР для д и заменяя ее сток [т| корнем БДР для h. Чтобы представить также /, сделаем отдельную копию БДР для д и используем базу БДР как для Л, так и для h; заменим в копии [L~| на [Т| и заменим [т| в копии корнем БДР для h. Эта диаграмма решений является приведенной, поскольку h — не константа. Аналогично, если о представляет собой ф, мы получаем БДР для f = д ф h (и, воз- можно, /) из БДР для д (и, возможно, д) после замены [±] и [т| корнями бинарных диаграмм решений для h и h. Другие бинарные операторы о, по сути, такие же, поскольку B(f) = B(f). Например, если f = д h = g/\h, мы имеем B(f) = B(f) — В(д) + B(h) — 2 = В(д) + В(Л) — 2. 164. Пусть Ui(xi) = Vi(a?i) =a?i, t/„+i(a;i,... ,a;„+i) = a?i ф V„(a;2,.. - ,Zn+i), и V„+i(a;i,..., Zn+i) = C/n(a:i,..., xn) Л a?n+i- Тогда по индукции можно показать, что B(f) < B(Un) = 2Г<"+1)/21 2l(n+i)/2J _ j ддЯ всех бесповторных /, а также что мы всегда имеем В(/, /) < B(V„, Vn) = 2^n/,2^+1 4- 2^2^+1 — 2. (Но оптимальное упорядочение сильно снижает эти размеры до B(t7”) = |_|n + 2J и B(V*, Vn*) = 2п + 2.) 165. По индукции также доказывается, ЧТО B(ti2m, Й2тп) - 2mF2m+3+2, В(и2т+1, й2т+1) = 2т+1.р2тп+3 + 2, B(V2m,V2m) = 2m+1F2m+l + 2, B(l?2m+1, «2тп+1) = 2m+1F2m+3 + 2. 166. Можно считать, как в ответе к упр. 163, что о представляет собой либо Л, либо ф. Путем перенумерации можно также считать, что ja = j для 1 < j < п, следовательно, fa = f. Пусть (bo,..., Ьп) представляет собой профиль /, а (Ьо,..., Ь'п) —профиль (/, /); и пусть (ci„,..., с(п+1)эт) и (с'17Г,..., С(п+1)зг) —профили и (7”, 7”), где (п + 1)тг = п + 1. Тогда Сутг представляет собой количество подфункций для = д* о /г”, которые зависят от Xj,, после установки переменных {xiT,..., i(j-i)»} равными фиксированным значениям. Аналогично с^ является количеством таких подфункций для или f”. Мы попытаемся доказать, что bj„-i < Cj„ и 5^_i < для всех j. Случай 1. о представляет собой Л. Можно считать, что тит = п, поскольку оператор Л коммутативен. Случай 1,а. 1 < jn < fc. Тогда bj7r_1 и 5'-^_i подсчитывают подфункции, в которых определены только переменные х,п с1<г<зи1<гтг<к. Эти подфункции для д Л Л или д V h имеют аналоги, которые подсчитываются в и с^, поскольку Л” не является константой ни в какой подфункции при тит = п. Случай 1,6. к < jir < п. Тогда б,-,,-! и подсчитывают подфункции для h или Л, которые имеют аналоги, подсчитываемые в Cj„ и с'„.
7.1.4 ОТВЕТЫ К УПРАЖНЕНИЯМ 727 Случай 2. о представляет собой ф. Можно считать, что 1тг = 1, поскольку оператор ф коммутативен. Тогда применимы рассуждения, аналогичные рассуждениям из случая 1. [Discrete Applied Math. 103 (2000), 237-258.] 167. Пусть f = fin-, будем рекурсивно вычислять dj = Bmin(fij), с'^ = В„йп(/ц,/ц) и перестановку 7Г<3 множества {»,... ,j} для каждой подфункции ..., Xj) следующим образом. Если г = j, мы имеем fij(xi) = хц пусть ctJ = 3, c'i3 = 4, irtj = i. В противном случае г < j, и мы имеем ft, (x,,...,Xj) = fik(xi, • • •, хк) ° f(k+i)j (a^fc+i ,...,Xj) для некото- рого к и некоторого оператора о. Если о наподобие Л, пусть dj = dk + C(fc+i)j — 2 и либо (cij = 2Cjfc + C(fc+l)j — 4, TTij = TTjfcTT(fc-f-l)j), либо (c£j- = 2C(fc+1)3 + Cik — 4, Ttij = ^(fc+ljj^ik) минимизирует c'i3 . Если о наподобие ф, пусть с'^ = c'ik 4- cjfc+1^ — 2 и либо (c,j = cik + С(*+Ш ~ 2’ = 7r*fc’r(k+iw)> либ° (СО = c(k+i)j + c'ik “2> Ъз = Щк+i^ik) минимизирует dj. (Перестановки тг^, в данном описании представленные в виде строк, в компьютере могут быть представлены как связанные списки. Можно также построить оптимальную БДР для f рекурсивно за O(Bmin(/)) шагов, воспользовавшись ответом к упр. 163.) 168. (а) Это утверждение преобразует и упрощает рекуррентные соотношения (112) и (113). (б) Истинно по индукции; также х > п. (в) Легко проверяемо. Заметим, что Т является отражением относительно прямой у = (>/2 — 1)а; с наклоном 22 (г) Если z 6 Sk и z' 6 Sn-k, мы имеем |z| = q^ и |z'| = q,/3, где q<kwq'<n — kno индукции. Из соображений симметрии можно положить q = (1 — 6)t и </ = (1 + 6)t, где t = |(q + </) < |п. Тогда, если верно первое указание, мы имеем \z • z'| < (2t)^ < пР. Мы также будем иметь |z о z'| < пР согласно п. (в), поскольку |zT| = |z|. Чтобы доказать первое указание, заметим, что максимум |z • z'\ достигается при у = у'. Когда у > у1, мы имеем \z • z'|2 = (х + х' + у')2 + у2 = г2 + 2 (а/ + у')х + (а/ + у')2', наибольшее значение для заданного z' достигается при у = у'. Аналогичные рассуждения применимы при у' > у. Теперь, когда у = у', мы имеем у = \/rr'sin(? для некоторого в; и маздой-показать, что х + х' < (г + г') cos 0. Таким образом, z • z' = (х + х' + у, у) лежит в з т TJlJti ц op or о указания. В этом эллипсе мы имеем (acost? + bsin0)2 + (bsint?)2 = a2/2 + fr*-Mksin.20 + vcos20 = a2/2 + b2 + wsin(20 + г), где и = ab, v = |a2 — b2, w2 = u2 + w2 и cost = u/w. Следовательно, |z«z'|2 < |a2 + b2+w. A 4w2 = (r+r')4 + 4(rr')2 < (r2 + (2\/5 — 2)rr' +r'2)2, так что |z • z'|2 < r2 + (\/5 + l)rr' + r'2, r = (1 — r = (1 + 6)0. Остается доказать, что эта величина не превышает 22/3 = 2ф2-, или, что то же самое, А(2) < где /t(a) = (е‘/о + е-*/“)“ — 2“ и t = /31п((1 — fr)/(l + 6)). Фактически можно показать, что, когда а > 2, функция ft является возрастающей функцией от а. [См. G. Bennett, АММ 117 (2010), 334-351. Граница О(пР) для Sn, похоже, требует деликатного анализа; ранние попытки Соергофа (Sauerhoff), Вегенера (Wegener) и Верхнера (Werch- ner) оказались ошибочными. Приведенное здесь доказательство найдено А. К. Чангом (А. X. Chang) и В. И. Спитковски (V. I. Spitkovsky) в 2007 году.] 169. Эта гипотеза была проверена для m < 7. [Многие другие любопытные свойства также остаются необъясненными. В момент написания этого ответа “группой изучения любопытных явлений” готовится к публикации статья о том, что же известно к настоящему времени.] 170. (а) 22"-1. В (7) при 1 < j < п имеется четыре варианта, а именно LO = [±] или LO = [т], или HI = |±], или HI = [т]; и два варианта для (п). (б) 2"-1, поскольку половина вариантов в каждом узле ветвления отбрасывается. (в) Действительно, если t = (ti... tn)z, мы имеем LO = [Т] в (J) при tj = 1 и HI = [т] в (7) при tj = 0. (Эта идея была применена к случайной генерации битов в упр. 3.4.1-25.
728 ОТВЕТЫ К УПРАЖНЕНИЯМ 7.1.4 Поскольку имеется 2"-1 таких значений t, мы показали, что каждая монотонная худая функция является пороговой с весами {2П-1,..., 2,1}. Другие худые функции получаются с помощью операции дополнения отдельных переменных.) (г) ft(x) = [(т)г < t] = [(а:)2 > t] = [(х)? > 2" - 1 - t] = (д) Согласно теореме 7.1.1Q кратчайшая DNF представляет собой ИЛИ простых им- пликант, и ее обобщенный вид демонстрируется случаем п = 10 и t = (1100010111)2: (х1/\Х2/\хз) V (ххАхгА^) V (а^АтгЛтв) V (тхЛтгЛтбЛтт) V (цАтгАтбАтвАтдАтю). (По одному члену для каждого нуля в t, и еще один дополнительно.) Кратчайшая CNF дуальна кратчайшей DNF дуальной функции, которая соответствует 2" — t = (0011101001)2: (ti) Л (а?г) Л (xsV^VxsVxe) Л (xsV^VxsVxtVxs) Л (xaV^VxeVxrVxg) Л (xzX/xiVxsVxrVxio). 171. Заметим, что классы бесповторных, регулярных, худых и монотонных функций яв- ляются замкнутыми по отношению к операции дуальности и ограничениям. Худая функ- ция очевидным образом является бесповторной; монотонная пороговая функция с wi > • > Wn является регулярной; а регулярная функция является монотонной. Мы должны показать, что регулярная бесповторная функция является худой. Предположим, что f(xi,..., а;п) = д(х^,...,Xik) о hfxj,,Xjt), где о представляет собой нетривиальный бинарный оператор, и мы имеем ii < ••• < ik, ji < ••• < ji, к + I = n и {ii,... ,Zfc,Ji,... ,ji} — {1,...,n}. (Это условие слабее условия “бесповторности”) Мы можем считать, что й = 1. Используя ограничения и индукцию, получаем, что и д, и h являются худыми и монотонными; таким образом, их простые импликанты имеют специальный вид из упр. 170, (д). Оператор о должен быть монотонным, так что это либо V, либо Л. В связи с дуальностью можно считать, что о представляет собой V. Случай 1. f имеет простую импликанту длиной 1. Тогда a?i представляет собой про- стую импликанту f в силу регулярности. Следовательно, f(xi,..., хп) — xi V /(0, а?г, - • •, а:„), и мы можем использовать индукцию. Случай 2. Все простые импликанты д и h имеют длину > 1. Тогда Xjt Л • • • f\Xjp является простой импликантой для некоторого р > 2, но x^-iAx^A • • • Aa;Jp таковой не является, что противоречит регулярности. [См. Т. Eiter, Т. Ibaraki and К. Makino, Theor. Comp. Sci. 270 (2002), 493-524.] 172. Рассматривая CNF для ft в упр. 170, (д), мы видим, что когда t = (ti... £п)г, ко- личество функций Хорна, получаемое путем дополнения переменных, на одну больше количества для (1г - - . tn)2 при ti = 0, но в два раза превышает количество при ti = 1. Таким образом, пример! = (1100010111)2 соответствует2х(2х(1+(1 + (1 + (2х(1+(2х(2х 2)))))))) функциям Хорна. Суммирование по всем t дает sn, где sn = (2n-2 +sn-i) + 2sn-i, и si --- 2; а решением этого рекуррентного соотношения является 3" — 2"-1. Чтобы сделать и /, и f функциями Хорна, будем считать (согласно дуальности), что t mod 4 = 3. Тогда мы должны дополнить х, тогда и только тогда, когда tj = 0, за исключением строки единиц справа от t. Например, когда t = (1100010111)2, мы должны дополнить хз, Х4, хз, а;?, а затем не более одной переменной из {a?8,a:9,a:io}. Это дает p(t + 1) + 1 > 3 вариантов выбора, связанных с ft- Суммирование по всем t с t mod 4 = 3 дает 2" — 1; так что окончательный ответ равен 2n+1 — 2. 173. Рассмотрим сначала монотонные функции. Можно записать t = (0011“2... 0“2fc_11“2|с )г где ai + • • + азк = п, ai > 0, aj > 1 для 1 < j < 2fc и a?k > 2 при t mod 4 = 3. Когда t mod 4 = 1, 2" — t имеет указанный вид. Тогда ft имеет ai! аг! ... агь! автоморфизмов, так что она эквивалентна n!/(ai! аг! ... агк!) — 1 другим, ни одна из которых не является худой. Суммирование по всем t дает 2(Pn — nPn-i) монотонных булевых функций, которые могут быть переведены в “худую” форму путем переупорядочения переменных при п > 2, где Рп равно количеству слабых упорядочений (упр. 5.3.1-3). [См. J. S. Beissinger and U. N. Peled, Graphs and Combinatorics 3 (1987), 213-219.]
7.1.4 ОТВЕТЫ К УПРАЖНЕНИЯМ 729 Каждая такая монотонная функция соответствует 2" различным унатным функциям, которые остаются равно худыми при дополнении переменных. (Это функции, обладающие тем свойством, что все их ограничения являются канализирующими, известны также как “унатные каскады” или “обобщенные пороговые бесповторные функции’.’) 174. (а) Назначим узлам (1), ..., (п), [т|, [±~| номера 0, ..., п—1, п, п+1; и пусть из узла к к узлам (a2fc+i,a2fc+2) для 0 < к < п ведут ветви (LO, Hi). Затем определим рк для 1 < fc < 2п следующим образом: пусть I = [(fc — 1)/2J и Pi = {pi,... ,P2i}- Установим Pk «— flfc, если afc Pi; в противном случае если ак представляет собой m-й наименьший элемент Pi О {I + 1,... ,п + 1}, установим pt равным m-му наименьшему элементу {п + 2,..., п + I + 1} \ Pi. (Это построение принадлежит Т. Далхаймеру (Т. Dahlheimer).) (б) Инверсия pi1.. -Р2п перестановки Деллака удовлетворяет условию 2(к — п) — 1 < р^1 < 2к. Она соответствует разупорядочению Дженоччи qi... <72^+2 при <72 = 1, <?2n+i = 2п + 2 и g2fc+2 = 1 +Рк\ g2fc_i = 1 +Pfc|„ для 1 < к < п. (в) Пусть для заданной перестановки qi... qin+2 первым элементом последовательно- сти qk *, q~-i, ..., который > fc, является гк. Это преобразование отображает перестановки ^к Дженоччи в пистолеты Дюмона и обладает тем свойством, что qk = к тогда и только тогда, когда гк = к g {и,..., Tfc-i}. (г) Каждый узел (j, к) представляет множество строк и ... г2, где (1,0) = {1}, а дру- гие множества определяются следующими правилами перехода: предположим, что ri... гз € 0, к), и пусть I = 2к. Если fc = 0, то 0 + l,fc) содержит 1г+ ...г+ при четном j и 2ri .. .г* при нечетном j, где т+ означает т + 1. Если к > 0, то (j + 1, fc) содержит ... r~i (Z+lJr^j... rt при четном j пг± ... г±_ г (1)г±.. ,г± при нечетном j, где г± означает г + 1 при г > I и т — 1 при т < I. Действуя по вертикали, если I < j — 3 и j нечетно, 0, fc + 1) содержит ri... пп+2Г1+з(1+3)п+4 ... Tj. С другой стороны, если к = 1 и j четно, 0,0) содержит Г2Г1Г3.. .Tj. Наконец, если к > 1 и j четно, (у,к — 1) содержит строку t'i ... r[_3(Z—2)r{_2r{_1r[+1... r'j, где г' обозначает I при т = I — 2, в противном случае г' = г. (Можно показать, что элементами (2j, к) являются пистолеты Дюмона для перестановок Дженоччи порядка 2j, наибольшей фиксированной точкой которых является 2fc.) Все эти построения обратимы. Например, путь (1,0) —> (2,0) —> (3,0) —> (3,1) —> (4,1) -> (5,1) -> (6,1) -> (7,1) -> (7,2) -> (7,3) -> (8,3) -> (8,2) -> (8,1) -> (8,0) соот- ветствует пистолетам 1 —> 22 —> 133 —> 333 —> 4244 —> 53355 —> 624466 —> 7335577 —> 7355577 -> 7355777 -> 82448688 -> 82646888 -> 82466888 -> 28466888. Последний писто- лет, который может быть представлен диаграммой , соответствует разупорядочению Дженоччи gi... q& = 61537482. А это разупорядочение соответствует pj-1.. .рё1 = 231546 и перестановке Деллака pi.. .рв = 312546. Эта перестановка, в свою очередь, соответствует ai... ав = 312343, что означает тонкую БДР Ш- Пусть djk—количество пистолетов в (у, к), которое также равно количеству ориен- тированных путей от (1,0) до 0, fc). Эти числа легко найти сложением, начиная с 38227 38227 2073 2073 38227 76454 155 155 2073 4146 36154 112608 17 17 155 310 1918 6064 32008 144616 3 3 17 34 138 448 1608 7672 25944 170560 1 1 3 6 14 48 104 552 1160 8832 18272 188832 1 1 1 2 2 8 8 56 56 608 608 9440 9440 198272
730 ОТВЕТЫ К УПРАЖНЕНИЯМ 7.1.4 и суммы по столбцам Dj = ^2kdjk равны (Di,D2,...) = (1,112,3,8,17,56,155,608,2073, 9440,38227,198272,929569,...). Элементы этой последовательности с четными номерами, Dzn, известны как числа Дженоччи бгп+г- Поэтому элементы с нечетными номерами, Dzn+i, названы “медианными числами Дженоччи1.’ Количество Sn тонких БДР равно <i(2n+2)0 = Dln+l Ссылки. Л. Эйлер (L. Euler) рассматривал числа Дженоччи в томе 2 своего труда Institutiones Calculi Differentialis (1755), в главе 7, где он показал, что нечетные целые числа бгп можно выразить через числа Бернулли: бгп = (22n+1 — 2)|В?п| и ztan| = 52XL1 G2nZ2n/(2n)!. А. Дженоччи (A. Genocchi) исследовал эти числа в Annali di Scienze Matematicbe e Fisiche 3 (1852), 395-405; а Л. Зейдель (L. Seidel) в Sitzungsbericbte matb.- phys. Classe, Akademie Wissen. Miincben 7 (1877), 157-187, открыл, что они могут быть вычислены аддитивным путем из чисел djk. Их комбинаторная важность была открыта гораздо позже; см. D. Dumont, Duke Matb. J. 41 (1974), 305-318; D. Dumont and A. Randria- narivony, Discrete Matb. 132 (1994), 37-49. Тем временем И. Деллак (Н. Dellac) предложил кажущуюся никак не связанной с указанными числами задачу, эквивалентную подсчету того, что мы именуем перестановками Деллака; см. L’lntermediaire des Matb. 7 (1900), 9-10, 328; Annales de la Faculte sci. Marseille 11 (1901), 141-164. Существует также непосредственная связь между тонкими БДР и путями из п. (г), открытая в 2007 году Торстеном Далхаймером (Thorsten Dahlheimer). Заметим сначала, что неограниченные пистолеты Дюмона порядка 2п + 2 соответствуют тонким БДР, явля- ющимся упорядоченными, но не обязательно приведенными, поскольку можно положить ri... Г2ПГ2п+1Г2п+2 = (2ai) ... (2а2п)(2п+2)(2п+2). Количество таких пистолетов, в кото- рых min{i | 7*21—1 = r*2*} = I, оказывается равным d(2n+2)(n+i-i)- Чтобы это доказать, можно использовать новые правила переходов вместо таковых из ответа к п. (г): предположим, что ri.. .гj 6 (j, fc), и пусть I = j — 2fc. Тогда (j + 1, fc) содержит г/"... rfr+... т*+, когда j нечетно, и т*± ... rjLi(l—1)г± ... r±, когда j четно. Если j нечетно, О,fc+ 1) содержит 1т*17*з...т*л- при I = 3, а при I > 3 оно содержит т*1 .. 4)r£_3r{_2r{.. .r'j, где г = г + 2[г = 1—4]. Наконец, если j четно и fc > 0, О,fc — 1) содержит ri...ri-iqri+2ri+2 rj, где q = I, если n = n+i, в противном случае Я = П+1- При таких магических переходах приведенный выше путь соответствует 1 —> 22 —> 313 -> 133 -> 2244 -> 31355 -> 424466 -> 5153577 -> 5135577 -> 1535577 -> 22646688 -> 26446688 -> 26466688 -> 26466888; так что щ ... а6 = 132334. 175. Эта задача кажется требующей подхода, отличного от методов, работающих при Ьо = •• = bn-i = 1- Предположим, что у нас имеется база БДР из N узлов, включая два стока— [±] и [т], вместе с разными ветвлениями, помеченными как (2), ..., (п), и будем считать, что ровно s из этих узлов являются источниками (имеющими нулевую входящую степень). Пусть c(b, s,t, N)— количество способов добавления Ъ дополнительных узлов, помеченных как (1) таким образом, что источниками остаются ровно s+b—t узлов. (Таким образом, 0 < t < 2b; ровно t из старых узлов-источников теперь достижимы из ветвления (Т).) Тогда количество неконстантных булевых функций f(xi,... ,хп), имеющих профиль БДР (Ьо, • •, Ь„), равно Т(Ьо,..., bn-i; 1), где Т(Ьо; s) = 2[s = Ьо = 1] + [s = 2][Ьо = 0] + [s = 2][Ьо = 2]; 2Ь0 T(bo,...,b„_i;s) = c(bo,s+t-bo,t,bi-i----t-b„-i+2)T(bi,...,bn-i;s+t—bo). t=max(O,bo — s)
7.1.4 ОТВЕТЫ К УПРАЖНЕНИЯМ 731 Можно показать, что c(b,s,t,N) = Er=o arbPtr(s,N)/U, где мы имеем (А(А — 1))~ = Е^о arbNr и ptr(s,N) = £fc (3{^(N ~ = Еь WCW " »)— = [^] х e(N~s)z(wez -w + l)s. 176. (а) Если р / р', мы имеем Еоел ьев[Ла,ь(р) = ha,b(p')] < |А| |В|/2* согласно определе- нию универсального хеширования. Пусть г,(а, Ь) является количеством р 6 Р, таких, что fcQ,t>(p) = г- Тогда 52 12 г«(о>ь)2= 52 Е Emp)=^(p')] обЛ.ЬбВ 0<»<2* а6А,Ь6Вр6Рр'6Р < |Р||А||В| + 52 52 = 2‘|А||В| (1 + реРр'еР С другой стороны, Е*=оХ г*(а> Ь)2 = Ei=oX (г«(а> Ъ) — 2‘/|7|)2 + 22t/|7| > 22t/|7| для любых а и Ь. Подобные формулы применимы, когда имеется Sj(a,b) решений уравнения hatb(q) = j- Так что должны быть а 6 А и b 6 В, такие, что q 2t o2t _____ ____________ е nt ч r,2t q 2t И+ й S i 2,+‘(> + ^-) i jr + iF^F- (б) Средние l бит чисел aqk + b и aqk+2 + b отличаются как минимум на 2, так что средние 1 — 1 бит чисел aqk и aqk+2 должны быть различными. (в) Пусть <? и </ являются различными элементами Q*, такими, что (p(q') — ff(q)) mod 21-1 > 2i-2. (В противном случае можно обменять q <-> </.) Если I > 3, из условия ff(p) + g(q) - 2i-1 вытекает, что fg(p) = 0. Теперь мы имеем (р(р) + p(q')) mod 2/-1 = (р(р') — р(р)) mod 21~1; кроме того, и р(д'), и ff(p) четны. Следовательно, перенос не может распространиться так, чтобы изменить средний бит, и мы имеем fg'(p) — 1. (г) Множество Q" имеет как минимум (1 — е)21-1 элементов, и то же относится к аналогичному множеству Р". Не более 21-2 элементов Q" имеют нечетное р(р); и не более 21-1 + 1 — |Р"| элементов с четным р(р) не находятся в Q*. Таким образом, |Q*| > (1 - е)2‘-1 - 21~2 - 21-1 - 1 + (1 - е)2'-1 = (1 - 4е)21-2 - 1, и мы имеем Bmin(Zn,o) > (1 — 4е)21-1 — 2 согласно (85). Наконец выберем / = ( - 4 и е = 1/9. При п < 14 теорема очевидна. 177. Предположим, что к > п/2 их = 2к+1х/, + xi,y = 2куь + уь Тогда (ху к) mod 2п~к зависит от 2хьУ1, xiyh и xiyi к по модулю 2п~к, так что P2k+i < 2n-fc-1+n_fc+n_fc. Суммируя, мы получаем Е2”0 qk < E0<fc<6n/s 2к + E6n/S<fc<2„ 23n-2Lfc/2J-rfc/21 .Если п = 5t+(0,1,2,3,4), сумма равна в точности (2^®”/®! -(19,10,12,13,17)—12)/7. [М. Зауэрхоф (М. Sauerhoff) в Discrete Applied Math. 158 (2010), 1195-1204, доказал для этого упорядо- чения нижнюю границу П(26п^®).] 178. Можно записать х = 2кхь + xi, как в доказательстве теоремы А; но сейчас xi = ii + (ж mod 2), где £i четно, a zmod2 пока что неизвестно. Аналогично у = 2куь + yi = 2куь + yi + (у mod 2). Пусть zi = xiyi mod2fc. На уровне 2к — 2 для п/2 < к < п нам нужно “запомнить” только три (п — /с)-битовых числа, xi mod2n-fc, yi mod2”-fc, (xiyi fc) mod2n-fc, и три “переноса” ci = (xi + zj) fc, сг = (yi + z<) fc, сз = (xi +yi + zi) fc. Эти шесть величин дают нам средний бит, поскольку известны хк, уь, х mod 2 и у mod 2. Для переносов имеется только шесть возможных вариантов: C1C2C3 = 000, 001, 011, 101, 111 и 112. Таким образом, q2k-2 < 6 - Аналогично, когда п/2 < к < п — 1, мы имеем q2k-i < 6 • 2(n_fc_2)+(n_fc_1)+<"_fc\ Эти оценки вместе с qk < 2к дают нам Ел=о4 Як < (261 (37,86,184,464,1024) - 268)/28, когда п = 5t + (0,1,2,3,4).
732 ОТВЕТЫ К УПРАЖНЕНИЯМ 7.1.4 Фактические размеры БДР для функции f из теоремы А и функции д из данного упражнения равны «(/) = (169, 381, 928, 2188, 5248, 12373, 29400, 68777, 162768, 377359, 879709) и В(р) = (165, 352, 806, 1802, 4195, 9774, 22454, 52714, 121198, 278223, 650188) для 6 < п < 16; так что этот вариант дает около 25% экономии. Немного лучшее упорядочение получается путем тестирования (младший-бит(х), старший-бит(у), старший- бит(х), младший-бит(у)) на четырех последних уровнях, дающего B(h) = В(д) — 20 для п > 6. Тогда B(/i)/Bmin(/) ~ (1-07, 1.05, 1.04, 1.04, 1.04, 1.01, 1.02) для 6 < п < 12, так что это упорядочение может оказаться ближе к оптимальному при п —> оо. 180. Полагая am+i = ат+2 = • = 0, мы можем считать, что т > р. Пусть а — (ар ... <11)2, и запишем х = 2кхь + xi, как в доказательстве теоремы А. Если р < п, мы имеем qk < 2p-fc для 0 < к < р, поскольку заданная функция f = Z^n(cr,x) зависит только от a, хк и (axi к) mod 2p-fc. Таким образом, можно считать, что р > п. Рассмотрим мультимножество А = {2fcXhamod2p-1 | 0 < Xh < 2п~к}. Запишем А = {2Р-1 — ai,..., 2Р-1 — asJ, где s = 2п~к и 0 < ai < • • < as = 2Р-1, и пусть аа+* = а* + 2Р-1 для 0 < г < s. Тогда Qk < 2s, поскольку f зависит только от а, хк и индекса г 6 [0.. 2s), такого, что oti < axi mod 2Р < Qi+i. Следовательно, qk < E£=o min(2fc, 2n+1-fc) = 2Ln/2J+1 + 2rn/21+1 - 3. 181. Согласно упр. 170 для каждого (xi,... ,хт) требуется только О(п) дополнительных узлов. 182. Да; Б. Боллиг (В. Bollig) [Lecture Notes in Comp. Sci. 4978 (2008), 306-317] пока- зала, что этот рост равен П(2П/432). Кстати, Bmin(Li2,i2) = 1158 получается при стран- ном упорядочении L12,12(^18, Х17, Х16, X1S, Х14, Х12, Гю, Хв, Хд, Х4, Х2, Xi; Х19, Х20, Х21, Х22, Х23, Х13,Х11,Хд,Х7,Х5,Хз,Х24\, & Втл^Ью, 12) = 9302 получается при L12,12(^24, жгз, хго, Х19, Х22, зп, хе, хч, хз, хд, хю, Х1з\ Xi, Х2, Х3, Х4, Х5, Х21, Xie, хи, Xig, Х15, Х14, Х12). Аналогично Bmin(L8,i6) = 606 и Bmax(L8,i6) = 3415 не так уж страшно далеки друг от друга. Могут ли как Bmin(Lm,n), так и Bmax(LTn,n) предположительно представлять собой @(2mm(Tn,n))? 183. Профиль (bo,bi,...) начинается с (1, 1, 1, 2, 3, 5, 7, 11, 15, 23, 31, 47, 63, 95, ...). При fc > 0 для каждой пары целых чисел (а, Ь) существует узел на уровне 2к, такой, что 2fc-1 < a,b < 2к и ab < 22fc-1 < (a+ 1)(Ь+ 1); этот узел представляет функцию [((а + х)/2к)((Ь + у)/2к) > |]. Когда b задано, в соответ- ствующем диапазоне имеется [22fc-1/b] — [22k~1/(b + 1)] вариантов выбора для а; следовательно, Ьгк = 55г*=-1<ь<2*= (Г22*-1/Ь1 - |22fc-7(b+ 1)J), которая те- лескопируется к 2к—1. Аналогичные рассуждения показывают, что Ь2к+1 = 2к+2к 1— 1. 184. В bm(i-i)+j-i вносят вклад два вида бусин: один для каждого выбора из г столбцов, как минимум один из которых <j; и один для каждого выбора из г — 1 столбцов, в ко- тором отсутствует как минимум один элемент > j. Таким образом, = ((’]') — (m+i-j)) + ц mj _ (т^7))- Суммирование по 1 < i, j < т дает В(Рт) - (2т - 3)2™ + 5. (Кстати, qk = Ьк + 1 для 2 < к < тп2.) НДР имеет просто = (7J11) для 1 — ЬЗ — mi по одному для каждого выбора из г — 1 столбцов у; следовательно, Z(Pm) = т2т~1 + 2 я |В(РТП). (Нижняя граница теоремы К применима также и к узлам НДР, поскольку только такие узлы по- лучают этикетки; следовательно, естественное упорядочение переменных оптимально для НДР. Естественное упорядочение может быть оптимально и для БДР; известно, что эта гипотеза справедлива для т < 5.)
7.1.4 ОТВЕТЫ К УПРАЖНЕНИЯМ 733 185. Предположим, что f(x) = tvx для некоторого бинарного вектора to ... tn. Тогда под- функции порядка d > 0 соответствуют различным подстрокам ... t,+d- Такие подстроки т соответствуют бусинам тогда и только тогда, когда т 0d+1 и т ld+1; z-бусинам они соответствуют тогда и только тогда, когда т 0d+1 и т / 10d. Таким образом, максимум Z(f) представляет собой функцию Sn из ответа к упр. 44. Чтобы достичь этого наихудшего случая, нам нужен бинарный вектор длиной 2d+1 + d — 2, который содержит все (d + 1)-кортежи, за исключением 0d+1 и 10d, в качестве подстрок; такие векторы можно охарактеризовать как первые 2d+1+d—2 элементов любого цикла де Брейна с периодом 2d+1, начинающегося с 0dl. 186. Х1 Л Х2 Л Хз Л Х4 Л я>в Л Хв- 187. (Эти диаграммы следует сравнить с ответом к упр. 1.) 14 3 4 3 4 4 514232533 188. Чтобы избежать вложенных скобок, пусть е, а, b и ab обозначают подмножества 0, {1}, {2} и {1,2}. Таким образом, семействами являются 0, {ab}, {а}, {а, аЬ}, {Ь}, {Ь, аЬ}, {а,Ь}, {а,Ь,аЬ}, {е}, {е, аЬ}, {е,а}, {е,а,аЬ}, {е,Ь}, {е,Ь,аЬ}, {е,а,5}, {е,а,Ь,аЬ} в порядке таблицы истинности. 189. При п = 0 это только константные функции; при п > 0 это только функции 0 и xi Л • • • Л хп. (Однако имеется много функций, таких как хз Л (xi V хз), обладающих тем свойством, что (Ьо, • • •, Ь„) = (го,..., zn).) 190. (а) Только xi ф • ф хп и 1 ф xi ф • • • ф хп для п > 0. (б) Это условие выполня- ется тогда и только тогда, когда все подтаблицы порядка 1 представляют собой либо 01, либо 11. Так что при п > 0 имеется 22"-1 решений, а именно все функции, такие, что /(a:i,...,a:„_i,l) = 1. 191. Язык Ln таблиц истинности для всех таких функций имеет контекстно-свободную грамматику Lo —> 1; Ln+i —> LnLn | L„02". Таким образом, искомое количество 1п = |Ьп| удовлетворяет условиям lo - 1, ln+i — ln(ln + 1); так что (/о, h, lz, • • •) представляет собой последовательность (1, 2, 6, 42, 1806, 3263442, 10650056950806, ... ). Асимптотически 1п = 02" — | — е, где 0 < е < 0-2"/8 и в = 1.5979102180318731783380701181574553123622+. [См. CMath, упр. 4.37 и 4.59, где ln + 1 названо еп+1 (“число Евклида”), а в названо Е2. Числа /„+1 введены Д. Д. Сильвестером (J. J. Sylvester) в связи с его изучением египетских дробей, Amer. J. Matb. 3 (1880), 388. Заметим, что монотонно убывающая функция, подобно функции, представляющей независимые множества, всегда имеет z„ = 1.] 192. (а) 10101101000010110. (б) Истинно по индукции по |т|, поскольку а (3 0п тогда и только тогда, когда az (3Z 0п. (в) Бусинами f порядка к являются z-бусины fz порядка к для 0 < к < п. Следова- тельно, бусины fz являются также z-бусинами (fz)z = f. Следовательно, если (Ьо, - - - ,ЬП) и (zo,...,zn) представляют собой профиль и z-профиль /, в то время как (Ьо,...,Ь„) и (z'0,...,z„) являются профилем и z-профилем fz, мы имеем bk = zj. и zk = Ь'к для 0 < к < п. (Мы также имеем zn — z„, но они оба могут быть равны 1 вместо 2. Квазипрофили f и fz могут отличаться, но, в связи с нулевыми подтаблицами, только не более чем на 1 на каждом уровне.)
734 ОТВЕТЫ К УПРАЖНЕНИЯМ 7.1.4 193. S>k(xi,... ,хп) по индукции по п. (Следовательно, также S>k(xi,... ,xn)=Sk(xi, , хп). В упр. 249 имеются аналогичные примеры.) 194. Определим ai ... азп как в ответе к упр. 174, но с использованием НДР вместо БДР. При этом (1,..., 1) является z-профилем тогда и только тогда, когда (2ai) ... (2агп) пред- ставляет собой неограниченный пистолет Дюмона порядка 2п. Так что ответ представляет собой число Дженоччи бгп+г- 195. z-профиль имеет вид (1,2,4,4,3,2,2). Мы получаем оптимальный z-профиль (1,2,3, 2,3,2,2) из М2(х4,Х2’,Хб,хв,хз,Х1)-, а наихудший z-профиль (1,2,4,8,12,2,2)—из М2(хз,хд; xi,X2,X3,Xi), как в (78). (Кстати, алгоритм из упр. 197 можно использовать для того, чтобы показать, что Итт(ЛД) = 116 получен с поразительно своеобразным упорядо- чением Mifxg, Xs,Xn, X2j Х2О, Т19, Х18, Xie, X15,X13, X14, Х12,Хц , Xg, X10,X4, Xj, Хд, X3, Xl)!) 196. Например, Mm(xi,... ,xm', em+i, , en), где n = m 4- 2m, a ej представляет собой элементарную функцию из упр. 203. Тогда мы имеем Z(f) = 2(п — т) + 1 и Z(f) = (п — тп + 7)(п — тп)/2 — 2. 197. Ключевая идея заключается в изменении смысла полей DEP так, чтобы dhp теперь было 22{2<_fc-1 I №₽ поддерживает х«), где мы говорим, что g(xi,...,xm) поддержива- ет Xj, если имеется решение g(xi,... ,хт) = 1 с Xj = 1. ^(ля реализации этого изменения мы вводим вспомогательный массив (Со, • , Сп), где С*, = q, если 7Vfcg обозначает подфункцию 0, и Cfc = — 1, если такой подфункции на уровне к нет. Изначально Сп ч— 0, и мы устанавливаем Сь ч— —1 в начале шага Е1. На шаге ЕЗ операция установки dkg должна стать следующей: “если d^+i)h # Cfc+i> установить dkg Ч— ((d(it+i)i | d(k+i)h) <С1) + 1; в противном случае установить dkq Ч— d(k+i)i С 1- Установить также Ск 4- 9, если d(k+V)t = d(k+i)h = Cfc+i” (Главная z-профилограмма может использоваться, как ранее, для минимизации zg + • • • + Zn-H но если важен абсолютный минимум, требуется дополнительная работа по рассмотрению zn.) 198. Реинтерпретируя (50), представим произвольное семейство множеств f в виде (xv? fr. fh), где v = fv индексирует первую переменную, которую поддерживает f; см. ответ к упр. 197. Таким образом, fi представляет собой подсемейство Д которое не поддержива- ет xv, а fh представляет собой подсемейство, которое это делает (но с удаленным xv). Мы также положим fv = оо, если f не поддерживает ничего (т. е. если f представляет собой либо 0, либо {0}, внутренне представленное как [±] или [Т]; см. ответ к упр. 200). В (52) v = шш(/|1,gv) теперь индексирует первую переменную, поддерживаемую либо f, либо р; таким образом, Д = 0, если Д > р„, и рь = 0, если Д < р„. Подпрограмма И(Д р), в стиле НДР, в настоящее время вместо (55) имеет следующий вид: “представить f и р, как в (52). Пока Д gv, вернуть 0, если либо f = 0, либо р = 0; в противном случае установить f Ч— fi, если Д < gv, установить р ч— gi, если Д > р„. Выполнить обмен f ч-> р, если f > g. Вернуть f, если f = р или f = 0. В противном случае, если f f\g = г находится в кэше записей, вернуть г. В противном случае вычислить ri Ч— И(Д р/) и гь Ч— И(Д, рь); установить г Ч— ZUNIQUE(i), п, гь) с применением алгоритма наподобие алгоритма U, за исключением того, что первый шаг возвращает р при q = 0, а не при q = р; поместить ‘ f f\g = г’ в кэш записей и вернуть г.” (См. также предложение в ответе к упр. 200.) Счетчик ссылок обновляется, как и в упр. 82, с небольшими изменениями; например, шаг Ш уменьшает значение счетчика ссылок [Т| (и только этого узла), когда q = 0. Важно записать подпрограмму контроля корректности, которая дважды проверит все счетчики ссылок и прочую избыточность во всей базе БДР/НДР, так, чтобы в корне пресечь появление труднообнаруживаемых ошибок. Пока все подпрограммы не будут
7.1.4 ОТВЕТЫ К УПРАЖНЕНИЯМ 735 тщательнейшим образом протестированы, подпрограмма проверки должна вызываться очень часто. 199. (а) Если f = д, вернуть /. Если f > д, обменять f ч-> д. Если f = 0, вернуть д. Если f V д = г находится в кэше записей, вернуть г. В противном случае установить v Ч— fv, ri Ч— ИЛИ(/,р|), Th Ч— ИЛИ(Д,рд), установить v Ч— fv, ri Ч— ИЛИ(/,р), Th Ч- fh, увеличить REF(/h) на 1, установить v ч— gv, ri ч— ИЛИ(/,gi), Th ч— рь, увеличить REF(ph) на 1, если fv = gv\ если fv < gv\ если fv > gv. Затем установить гЧ— ZUNIQUE(i), п, гь); кэшировать г и вернуть его, как в ответе к упр. 198. (б) Если f = р, вернуть 0. В противном случае действовать, как в п. (а), но исполь- зовать (ф,ЛИБО), а не (\/,ИЛИ). (в) Если f = 0 или f = р, вернуть 0. Если р = 0, вернуть /. В противном случае, если gv < fv, установить р Ч— gi и начать заново. В противном случае установить п Ч- HO-HE(/<,pt), гн Ч— НО-НЕ(Д,рь), установить п Ч— НО-НЕ(//,р), ть Ч— fh, увеличить REF(/h) на 1, если fv = gv; если fv < gv- Затем установить г Ч— ZUNIQUE(/„, ri, тт») и закончить работу, как обычно. 200. Если f = 0, вернуть р. Если f = h, вернуть ИЛИ(/,р). Если р = h, вернуть р. Если р = 0 или f = р, вернуть И(/, А). Если h = 0, вернуть НО-НЕ(р,/). Если fv < gv и fv < hv, установить f ч— fi и начать все сначала. Если hv < fv и hv < gv, установить h Ч— hi и начать все сначала. В противном случае проверить кэш и работать рекурсивно, как обычно. 201. В приложениях НДР, в которых разрешены проецирующие функции и/или операция дополнения, лучше всего вначале, при общей инициализации, зафиксировать множество булевых переменных. В противном случае каждая внешняя функция в базе НДР должна изменяться, когда в игру вступает новая переменная. Предположим поэтому, что мы решили работать с функциями от (зд,xn), где N заранее задано. В ответе к упр. 198 при f = 0 или f = {0} мы полагали fv = N +1, а не оо. Тогда функция тавтологии 1 = р имеет (N + 1)-узловую НДР (ТУ"(2У~"- • которую мы строим, как только становится известно N. Пусть tj представляет собой узел (7) этой структуры с tN+i = [Т| • НДР для Xj теперь имеет вид • -Д/ТТ— tj 1; таким образом, база НДР для множества всех Xj будет занимать (N^1) узлов в дополнение к представлениям 0 и р. Если N мало, все N проецирующих функций можно приготовить заранее. Но во многих приложениях НДР N велико; а проецирующие функции редко требуются при использовании “алгебры семейств” для построения структур, как в упр. 203-207. Так что в общем случае лучше дождаться, когда действительно требуется проецирующая функция, перед тем как ее создавать. Кстати, для ускорения операций синтеза в упр. 198 и 199 можно использовать ча- стично тавтологические функции tj: если v = fv < gv и f = tv, мы имеем И(/,р) = д, HJIH(f,g) = /, а также (если v < hv) MUX(f,g,h) = h, MUX(g,h,f) = ИЛИ(р,А). 202. В шаге Т4 замените ‘до Ч— qi Ч— q’ на ‘qo Ч— q, qi Ч— 0’ и ‘го Ч— тт ч— г’ на ‘го Ч— г, тт Ч— 0’. Кроме того, используйте ZUNIQUE вместо UNIQUE; на шаге Т4 эта подпрограмма увеличивает REF(p) на 1, если шаг Ш обнаруживает q = 0. Более тонкое изменение требуется для поддержки частично тавтологических функ- ций из ответа к упр. 201 в актуальном состоянии из-за их специального смысла. Корректное поведение заключается в поддержке tu неизменным и в установке tv Ч— LO(tu). 203. (a) /L)p = {{1,2}, {1,3}, {1,2,3}, {3}} = (е1и((е2и(езие))иез))иез; вторым является (ei U е2) U е, поскольку / П р = (ei U (е2 U е)) U ез U е и / Е0 ei = ei U е2 U ез.
736 ОТВЕТЫ К УПРАЖНЕНИЯМ 7.1.4 (б) (/LJp)(z) = BxBy{f{x)/\g{y)/\{z = xVp)); (/l"lp)(z) = 3z3p(/(z)Ap(p)A(z = хЛу)); {f Е P)(z) = BxBy{f{x) Л р(р) Л (z = х 0 у)). Другой формулой является (/ Е p)(z) = V{/(z ® У) I 9{у) = 1} = V{P(^ ® х) I f{x) = !}• (в) И (i), и (ii) истинны; кроме того, /ffl(pUh) = (/EBp)U(/EBh). Формула (iii) ложна в общем случае, хотя мы имеем f U (р П ti) С (/ U р) П (/ U ti). Формула (iv) имеет мало смысла; правая часть представляет собой (/ U /) U (/ U ti) U (р U /) U (р U ti) согласно (i). Формула (v) истинна, поскольку все три части представляют собой 0. A (vi) истинна тогда и только тогда, когда f 0. (г) Только (ii) истинно всегда. Для (i) условием должно быть f П р С е, поскольку из f П р = 0 вытекает f ± р. В случае (iii) заметим, что |/ U р| = |/ П р| = |/ Ш р| = 1 при 1/1 = Iffl = 1- Наконец в утверждении (iv) у нас f ± р => / U р = / Е0 р; но обратное не выполняется, когда, скажем, f = р = ei U е. (д) f = 0 в (i) и f = е в (ii); кроме того, е Е0 р = р для всех р. Решений для (iii) не существует, поскольку f должно быть {{1,2,3,... }}, а мы рассматриваем только конечные множества. Но в конечном универсуме из ответа к упр. 201 мы имеем f = {{1,... ,7V}}. (Это семейство U обладает тем свойством, что (/ Е U) U (р Е0 U) = (/ П р) ЕВ U.) Общее решение (iv) имеет вид f = ei Ll ег Ll f', где f представляет собой произвольное семейство; аналогично общее решение (v) имеет вид f = (ei Ll f) U (e2 U /") U (ei Ll e2 LJ (/' U f" U f"’)), где f" и f" — произвольны. В (vi) f = ((((ei Ll e2) Ue)U /') U ((ei U e2) Ll /")) LJ (e3 U e), где f' U f" ± ei U e2 U e3; это представление следует из упр. 204, (е). В (vii) |/| = 1. Наконец (viii) характеризует функции Хорна (теорема 7.1.1Н). 204. (а) Это соотношение очевидно из определения. (Кроме того, (/Up)/h D {f/ti)U{g/ti).) (б)//е2 = {{1},0} = ei U е; f/ei = е2 U е3; f/e = f; следовательно, //(ei U е) = е2 U е3. (в) Деление на 0 приводит к проблемам, поскольку все множества а принадлежат //0. (Но если мы ограничим рассмотрение семействами подмножеств {1,..., IV}, как в упр. 201 и 207, то мы имеем //0 = р; кроме того, р/р = е и //р = 0 при f р.) Ясно, что f/e = f. A f/f = е, когда f 0. Наконец (/ modp)/p = 0, когда д 0, поскольку из а 6 (/ mod д)/д и /3 6 д вытекает, что a U fi 6 f, а 6 f/g и a U fi $ {f/д) LJ д, так что мы получаем противоречие. (г) Если fi 6 д, мы имеем fi U а 6 f тл fi ГУ а = 0 для всех а 6 //р; этим доказы- вается указание. Следовательно, f/g С f/{f/{f/д)). Кроме того, f/h С f/g при h D д согласно (а); положим h = f/{f/д). (д) Пусть f//д представляет собой семейство в новом определении. Тогда f/g С f Цд, поскольку р LJ {f/g) С / и р 1 {f/g)- И обратно, если а 6 fЦд и fi 6 р, мы имеем а 6 h для некоторого ЛсриЛС/ир±Л; так что аи/?€/иаП/3 = 0. (е) Если f имеет такое представление, мы должны иметь р = f/е^ и h = /modej. И обратно, эти семейства удовлетворяют ej _L р U h. (Этот закон представляет собой фун- даментальный рекурсивный принцип, лежащий в основе НДР,—так же как единственное представление f = {xj? д: ti), с д та h, не зависящими от Xj, лежит в основе БДР.) (ж) Оба истинны. (Для их доказательства представьте fug, как в п. (е).) [Р. К. Брейтон (R. К. Brayton) и К. Мак-Мюллен (С. McMullen) ввели частное и оста- ток в Proc. Int. Symp. Circuits and Systems (IEEE, 1982), 49-54, но немного в ином контексте: они работали с семействами несравнимых множеств подкубов.] 205. Во всех случаях мы строим рекурсию, основанную на упр. 204, (е). Например, если А = Р« = и, мы имеем f U р = {v? ft Ll gt: {ft U gh) U {fh Ll gi) U {fh Ll рь)); f П p = (n? {fi Пgi) U {fi Пgh) U {fh Пpt): fh Пgh); f fflp = (v? {fi Sgi)U{fhS gh): {fh Bgi)U{fiBgh)). (а) Если A < gv или (A = Р» и f > p), обменять f 4-> p. Если f = 0, вернуть A если f = e, вернуть p. Если f LJ p = г находится в кэше записей, вернуть г. Если А > 9^1 установить г< <— JOIN(A gi) и гь <— JOIN(A Ph); в противном случае устано- вить п Ч- JOIN(A,pj), rih 4- JOIN(A,Ph), rM 4- JOIN(A,pz), rhh 4- JOIN(A,Ph), rh 4-
7.1.4 ОТВЕТЫ К УПРАЖНЕНИЯМ 737 OROR(rih,rhi,rhk) и разыменовать пь, ты, тьь- Закончить с т Ч— ZUNIQUE(g^,n,rh); кэшировать эту запись и вернуть ее, как в упр. 198. (Можно также вычислить Th по формуле ИЛИ(г;д, JOIN (Д, ИЛИ(р«, дь})), шли. по фор- муле ИЛИ (гы, JOIN (ИЛИ (Д,Д),рь)). Иногда один путь оказывается существенно лучше двух других.) Операция DISJOIN, которая производит семейство непересекающихся объединений {a\Jf3\aGf,f3Gg, aCi(3 = 0}, аналогична, но с опущенным ты,- (б) Если Д < gv или (Д = gv и f > д), обменять f ч-> д. Если f < е, вернуть Д (Мы считаем 0 < е и е < всех прочих.) В противном случае, если запись MEET (Др) не была кэширована, имеются два случая. Если Д > gv, установить гь ч— ИЛИ(р/,рь), т Ч— MEET(Д ть), и разыменовать гь; в противном случае действовать, как в п. (а), но с I ч-> h. Кэшировать и вернуть г, как обычно. (в) Эта операция подобна (а), но п Ч— ИЛИ(г«,гьь) и ть Ч— ИЛИ (ль, гы). (г) Сначала мы реализуем важные простые случаи //е„ и / mode,,. {Если Д = v, вернуть Д; если Д > v, вернуть 0. В противном случае искать f/ev = г в кэше; если его там нет, вычислить как т Ч- ZUNIQUE(/„, EZDIV(/j, v), EZDIV(/h, v)). {Если Д = v, вернуть Д; если Д > v, вернуть Д В противном случае искать f mod ev = т в кэше; если его там нет, вычислить как т Ч- ZUNIQUE(/„, EZMOD(/j, v), EZMOD(/h, v)). Сейчас DIV(/,p) = “Если p = 0, см. ниже; если р — е, вернуть Д В противном случае, если f < е, вернуть 0; если f = р, вернуть е. Если gi = 0 и рь = е, вернуть EZDIV(/,p„). В противном случае, если f/g = г имеется в кэше записей, вернуть т. В противном случае установить п Ч— EZDIV(/,p„), т Ч— DIV(r;,ph) и разыменовать г/. Если т ф 0 и gi 0, установить ть Ч— EZMOD(/,p„) и ri ч— DIV(rh,pi), разыменовать ть, установить ть Ч— г. и г Ч— И(г;,гь), разыменовать ri и ть- Вставить lf/g = г’ в кэш записей и вернуть г”. Деление на 0 возвращает р, если существует фиксированный универсум {1,... ,7V}, как в упр. 201. В противном случае получается ошибка (поскольку не существует универсаль- ного семейства р). (д) Если р = 0, вернуть Д Если р = е, вернуть 0. Если (р/,рь) = (0, е), вер- нуть EZMOD(/,pt,). Если /modp = г кэшировано, вернуть его. В противном случае установить г Ч— DIV(/,p) и ть Ч— JOIN(г,р), разыменовать г, установить т Ч— НО-НЕ(Дгь) и разыменовать ть- Кэшировать и вернуть т. [Ш. Минато (S. Minato) привел EZDIV(/,d), EZREM(/,w) и DELTA (Де«) в своей оригинальной статье о НДР. Его алгоритмы для JOIN (Др) и DIV(/,p) были приведены в продолжении, АСМ/IEEE Design Automation Conf. 31 (1994), 420-424.] 206. Нетрудно доказать верхнюю границу O(Z(f)3Z(g)3) для случаев (а) и (б), как и O(Z(f)2Z(g)2) для случая (в). Однако существуют ли примеры, требующие такого большого времени работы? И может ли время работы для (г) быть экспоненциальным? На практике все пять программ выглядят достаточно быстрыми. 207. Если f = U- • -Ue,, и k > 0, пусть SYM(/, v, k) представляет собой булеву функцию, истинную тогда и только тогда, когда ровно к из переменных {ач,,..., ж,,} П {а:«, а\,+1,... } равны 1и1] = • • • = = 0. Мы вычисляем (е^ U • • • Ue*,) §fc путем вызова SYM(/, l,fc). SYM(/, v, к) = “Пока Д < v, устанавливать f Ч— Д. Если fv = N +1 и к > О, вернуть 0. Если fv = N + lnk = 0, вернуть частично тавтологическую функцию tv (см. ответ к упр. 201). Если f § v § к = т имеется в кэше, вернуть т. В противном случае установить т ч- БУМ(ДД + l,fc). Если к > 0, установить р ч— БУМ(Д,Д + 1,к — 1) и т ч- ZUNIQUE(/„,r,д). Пока Д > v, устанавливать Д Ч- Д — 1, увеличивать REF(r) на 1 24 Зак. 3331
738 ОТВЕТЫ К УПРАЖНЕНИЯМ 7.1.4 и устанавливать г Ч— ZUNIQUE(/„, г, г). Поместить § v § к = г' в кэш и вернуть г". Время работы составляет O((fc + 1)N). Заметим, что 0 § 0 = р. 208. Необходимо просто опустить множители 2”*-1-1, З’'1-’'*-1 и г’''1-’'*-1 в шагах С1 и С2. (Мы также получаем производящую функцию путем установки с* Ч— а + zch на шаге С2; см. упр. 25.) Количество решений равно числу путей от корня НДР до [т]. 209. Сначала вычисляем <5„ Ч— ± и <5 j Ч— (Xj+i о xj+i) • <5j+i для n > j > 1. Затем, там, где в ответе к упр. 31 говорится ‘а Ч— (аг,- о Xj) • а’, меняем его на ‘а Ч— (х3 • а) о (xj • Sj)’. Делаем также аналогичные изменения с fi и 7 вместо а. 210. Фактически, когда х = xi... хп, можно заменить их в определении д любой линейной функцией с(х) = cixi Ч---1- СпХп, таким образом характеризуя все оптимальные решения обобщенной задачи булева программирования, рассматриваемой в алгоритме В. Для каждого узла ветвления х в НДР с полями V(а:), L0 (а:) и HI (ж) можно вычислить его оптимальное значение М(т) и новые связи Их), Н(т) следующим образом: пусть пц = M(LO(a:)) и тпк = Су(а) + М(Н1(а:)), где М([Т]) = —оо и М([Т]) = 0. Тогда Их) Ч- L0(x), если mi > тпь., в противном случае Их) Ч— |±|; Н(а:) Ч— НПа:), если mi < m^, в противном случае Н(а:) Ч— [Т|. НДР для д получается путем приведения связей L и Н, достижимых из корня. Заметим, что Z(g) < Z(f), а все вычисления требуют O(Z(f)) шагов. (На это красивое свойство НДР указал О. Кудер (О. Coudert); см. ответ к упр. 237.) 211. Да, только если матрица не имеет нулевых строк. Фактически без таких строк про- филь и z-профиль f удовлетворяют соотношению bk > Qk — 1 > Zk для 0 < к < п, поскольку единственной подфункцией на уровне к, не зависящей от Tk+i, является константа 0. 212. Наилучшим вариантом в экспериментах автора было создание НДР для каждого терма Tj = Si(Xj) в (129) с использованием алгоритма из упр. 207 с последующей сборкой их вместе с помощью оператора И. Например, в задаче (128) мы имеем Xi = {xi,X2}, Х2 = {xi,X3,Xi}, ..., Хб4 = {3:105,3:112}; чтобы создать терм 81(Хг) = 81(37,3:3,3:4), НДР которого имеет 115 узлов, просто образуем 5-узловую НДР для ei U (ез U e<) и вычислим Тг Ч— (ei U ез U е<) § 1. Но в каком порядке следует выполнять операторы И после того как мы получим отдельные термы Ti, ..., Т„ из (129)? Рассмотрим задачу (128). Метод 1: 71 Ч— Г, А Тг, Ti Ч— Ti Л Тз, ..., Ti Ч— Ti Л То4. Этот “нисходящий” метод сначала заполняет верхние уровни и требует около 6.2 миллиона обращений к памяти. Метод 2: Тв4 Ч— Тб4 Л Тез, Тв4 ч— Тв4 Л Тег, ..., Тб4 ч— Тв4 Л Ti. С помощью заполнения первыми нижних уров- ней (“восходящий” метод) время работы сокращается до около 1.75 миллиона обращений к памяти. Метод S'. Т2 Ч— Тг Л Ti, Т4 Ч— Та Л 7з, -.., Тб4 Ч— Тб4 Л Тез; Т4 Ч- Т4 Л Тг, Тз ч— Тз Л Те, —, Тв4 ч— Тв4 Л Тег; Те ч— Тз Л Т4, Tie ч— Tie Л Т12, —, Тв4 ч— Тв4 Л Тео; ...; Тб4 Ч— Тв4 Л Тзг. Этот “сбалансированный” подход также требует около 1.75 миллиона обращений к памяти. Метод 4- Тзз Ч— Тзз Л Ti, Т34 ч— Т34 Л Тг, ..., Тв4 Ч— Тб4 Л Тзг; Т49 Ч— Т49 Л Тзз, Т50 Ч— Т50 Л Т34, ..., Тв4 Ч— Тв4 Л Tie; Т57 ч— Т57 Л Т49, Тез Ч— Тез Л Т50, ..., Тб4 ч— Тв4 Л Тее! • • •; Тв4 Ч— Тв4 Л Тез. Это гораздо лучший способ балансировки работы, требующий всего около 850 тысяч обращений к памяти. Метод 5: Аналогичная стра- тегия балансировки, использующая тернарную операцию И-И, оказывается еще лучшей, стбящей только 675 тысяч обращений к памяти. (Во всех пяти случаях следует добавить около 190 тысяч обращений к памяти для образования 64 начальных термов Tj.) Кстати, можно уменьшить размер НДР с 2300 до 1995 с помощью требования ц = 0 ИХ2 = 1 в (128) и (129), поскольку “транспонирование” каждого покрытия является другим покрытием. Однако существенно эта идея время работы не снижает. Строки (128) находятся в убывающем лексикографическом порядке, который может не быть идеальным. Но динамическое упорядочение переменных бесполезно при таком
7.1.4 ОТВЕТЫ К УПРАЖНЕНИЯМ 739 большом количестве переменных. (Просеивание снижает размер от 2300 до 1887, но требует длительного времени работы.) Очевидно, что желательно продолжить изучение этого вопроса для широкого диапа- зона задач точного покрытия. 213. Мы получаем двудольный граф с 30 вершинами в одной части и 32 в другой. (Каждая кость домино соединяет белый и черный квадраты, а мы удалили два черных квадрата.) Построчная сумма (1,..., 1,1, ♦, ♦) имеет единицы как минимум в 31 “белой” позиции, так что последние ее две координаты должны быть либо (2,1), либо (3,2).* 214. Добавим дальнейшие ограничения к условию покрытия (128), а именно Д ii 5>1(У>), где Yj представляет собой множество xi, которые пересекают j-ю потенциальную линию ошибки. (Например, Yi = {x2,x4,xe,xs,xio,xi2,xi4,xi5} представляет собой множество способов вертикального размещения костей домино в двух верхних рядах доски; каждое |У,| = 8.) Получающаяся в результате НДР имеет 9812 узлов и характеризует 25506 ре- шений. Кстати, размер БДР — 26622. [Безошибочное замощение костями домино дос- ки размером т х п существует тогда и только тогда, когда тп четно, т > 5, п > 5 и (т,п) (6,6); см. R. L. Graham, The Mathematical Gardner (Wadsworth International, 1981), 120-126. Решение, показанное в (127), является единственным примером разме- ром 8x8, симметричным как по горизонтали, так и по вертикали; на рис. 29, (б) можно встретить решение, симметричное относительно поворота на 90°.] 215. В этот раз мы добавляем ограничения Д^1] S>i(Zj), где Zj представляет собой мно- жество четырех размещений х,, окружающих точку внутреннего угла. (Например, Zi = {а:1,а:2,а:4,а:1б}.) Эти ограничения уменьшают размер НДР до 66. Имеется только два таких решения, одно из которых получается транспонированием другого, и их легко найти вручную. [См. Y. Kotani, Puzzlers’ Tribute (А. К. Peters, 2002), 413-420. Множество всех покрытий татами было охарактеризовано Дином Хикерсоном (Dean Hickerson); со- ответствующая производящая функция была получена Фрэнком Раски (Frank Ruskey) и Дженнифер Вудкок (Jennifer Woodcock), Electronic J. Combinatorics 16,1 (2009), #R126.] 216. (а) Назначим каждой строке (128) три переменные, (o,i,bi,Ci), соответствующие цве- там домино, если выбрана строка г. Каждый узел ветвления НДР для f в (129) теперь превращается в три узла ветвления. Мы можем воспользоваться симметрией относительно транспонирования, заменяя f на /Лтг; это уменьшает с 2300 до 1995 размер НДР, который увеличивается до 5981 при утроении каждого узла ветвления. Теперь выполним И в смежных ограничениях для всех 682 случаев {г, г'}, где строки ini представляют собой смежные позиции домино. Такие ограничения имеют вид “'((щ Л а«') V (bt ЛЬг,)у (Cj Л Cj/)), и мы применяем их в восходящем направлении, как в методе 2 ответа к упр. 212. Это вычисление раздувает НДР, пока она не достигает размера более чем в 800 тысяч узлов; но в конечном итоге он опускается до 584 205. Искомый ответ оказывается равным 13 343 246 232 (что, конечно же, кратно 3! = 6, поскольку каждая перестановка трех цветов дает другое решение). (б) Этот вопрос отличен от вопроса в п. (а), поскольку многие покрытия (включая показанное на рис. 29, (б)) могут быть раскрашены в три цвета несколькими способами; мы же хотим учесть каждое из них только один раз. Предположим, что /(ai,5i,ci,...,aTn,bm,cm) = /(xi,... ,хзт) является функцией с Oj = хц-2, bi = xat-i и с, = X3i, такой, что из f(xi,... ,хзт) = 1 вытекает щ + 5, + с, < 1 * В свое время эта задача предлагалась в журнале для школьников “Квант” где решение основывалось на том, что при покрытии шахматной доски костями домино количество покрытых черных квадратов должно быть равно количеству покрытых белых квадратов, а при вырезанных угловых клетках этого достичь невозможно. — Примеч. пер.
740 ОТВЕТЫ К УПРАЖНЕНИЯМ 7.1.4 для 1 < i < т. Давайте определим “открашивание” (uncoloring) $/ для f как Sf(xi,...,Xm) = 3yi • • Зузт (/(г/1, ,2/Зтп) Л (xi — У1 + У2 + уз) Л • • Л (хт = узт-2 + УЗт-1 + УЗт))- Непосредственная рекурсивная подпрограмма вычисляет НДР для $/ из НДР для /. Этот процесс преобразует 584 205 узлов, полученных в п. (а), в НДР размером 33 731, из которой мы и получаем ответ: 3 272 232. (Время работы для п. (а) составляет 1.2 миллиарда обращений к памяти плюс 1.3 миллиарда для открашивания; общее количество требующейся памяти—около 44 Мбайт. Аналогичные вычисления на основе ВДР, а не НДР, стоят 13.6 + 1.5 миллиарда обращений к памяти и требуют 185 Мбайт памяти.) От переводчика: в комментарии (в 'ЩХ-файле) к данному упражнению автор просит при переводе на немецкий язык использовать в качестве цветов желтый, красный и чер- ный. В связи с этим можно было бы добавить вопрос о раскраске в два цвета для стран с двухцветными флагами, но в этом случае ответ слишком прост и очевиден—имеется 4 покрытия, причем три из них получаются из четвертого путем транспонирования и обмена цветов. 217. Условие раздельности добавляет 4198 дополнительных ограничений вида -*(xi Л х^), где строки ini' определяют смежное размещение конгруэнтных фигур. Применение этих ограничений при вычислении конъюнкции Si(Xj) в экспериментах автора оказалось плохой идеей; еще худшей идеей оказалась попытка построения отдельной НДР для новых ограничений. Гораздо лучшим оказалось построение 512 227-узловой НДР, как ранее, с последующим внедрением новых ограничений по одному, начиная с ограничений на нижних уровнях. Полученная в результате НДР размером 31300 699 узлов оказывается полностью построенной после 286 миллиардов обращений к памяти и доказывает, что имеется ровно 7 099 053 234102 раздельных решений. Можно также задаться вопросом о строго раздельных решениях, в ко- торых конгруэнтные фигуры не могут даже касаться одна другой углами; это требование добавляет еще 1948 ограничений. Всего имеется 554 626 216 строго раздельных покрытий, найденных ценой 245 миллиардов обращений к памяти с НДР размером 4 785 236 узлов. (Стандартный перебор с возвра- том находит их быстрее и с очень небольшим количеством памяти.) 218. Это задача точного покрытия. Например, при п = 3 матрица имеет вид 001001010 (—2—2) 010001001 (-3---3) 010010010 (-2—2-) 010100100 (-1-1—) 100010001 (3---3-) 100100010 (2—2—) 101000100 (1-1---) и в общем случае имеется Зп столбцов и (2п^-1) — (”) строк. Рассмотрим случай п = 12: НДР от 187 переменных имеет 192 636 узлов. Ее можно найти ценой 300 миллионов обращений к памяти с использованием метода 4 из ответа к упр. 212 (бинарное балансирование); в этом случае метод 5 оказывается на 25% медленнее метода 4. ВДР получается гораздо большей (2198 195 узлов), а стоимость оказывается большей 900 миллионов обращений к памяти. Таким образом, для данной задачи НДР явно предпочтительнее ВДР и идентифици- рует £12 = 108 144 решения с приемлемой эффективностью. (Однако метод “танцующих связей” из раздела 7.2.2 оказывается примерно в четыре раза быстрее и требует гораздо меньше памяти.)
7.1.4 ОТВЕТЫ К УПРАЖНЕНИЯМ 741 219. (а) 1267; (б) 2174; (в) 2958; (г) 3721; (д) 4502. (Для формирования НДР для WORDS(n) требуется выполнить п—1 ИЛИ с 7-узловыми НДР для wiUh2Ui3Uc4l_lh5, tiLH^UeaU^Ues, и т. д.) 220. (а) Существует один узел ог для потомков каждой начальной буквы, за которой во второй позиции может следовать a (aargh, babel, ..., zappy); таких букв 23—все, за исключением q, и и х. Имеется также один узел Ьг для каждой начальной буквы, за которой может следовать буква b (abbey, ebony, oboes). Однако действующее правило не такое простое; например, имеются три, а не четыре узла z% из-за одинаковых окончаний czars и tzars. (б) Не существует г?в, так как нет пятибуквенных слов, заканчивающихся на v. (Кол- лекция Stanford GraphBase не включает arxiv или webtv.) Три узла для wb возникают потому, что один означает случаи, в которых за буквами < wb должна следовать w (agio и многие другие); другой узел означает случаи, в которых должны следовать либо w, либо у (strа, или resa, или когда мы видим allo, но не allot); имеется также узел wb для случая, когда за unse не следует ни е, ни t, поскольку за ним должно следовать либо w, либо х. Аналогично два узла для х$ представляют случаи, в которых должна быть буква х или последней буквой должна быть либо х, либо у (после rela). Имеется только один узел ys, поскольку нет таких четырех букв, за которыми могли бы следовать как у, так и z. Конечно же, имеются только один узел z&, и два стока. 221. Для каждой возможной z-бусины £ мы вычисляем вероятность встретиться с ней и выполняем суммирование по всем Для определенности рассмотрим z-бусину, ко- торая соответствует ветвлению по гз, и предположим, что она представляет подсемей- ство из 10 трехбуквенных суффиксов. Имеется ровно (eJ34) — (®4°8) ~ 1-3 х Ю31 та- ких z-бусин, и согласно принципу включения и исключения каждая из них получает- ся с вероятностью « 2-5 х КГ32. [Указание: |{т, s,t,u, v,iv,x,y, z}\ = 9, 676 = 262 и 6084 = 9 х 262.] Таким образом, такие z-бусины вносят в общее значение вклад, равный около 0.33. Согласно аналогичному анализу гз-z- бусины для подсемейств размером 1, 2, 3, 4, 5, ... дают вклады, примерно равные 11.5, 32.3, 45.1, 41.9, 29.3, ...; так что можно ожидать около 188.8 ветвления по гз в среднем. Итоговая сумма 26®-1(27—у) S )-( 26®“'(26-j) S ~ /гб'-Ч , nfc+i/265 - 26®"'(27—j)k\ Н 26® \ к Г } k 5757-sfc // \5757/’ к=1 плюс 2 для стоков, приближается к и 7151.986. Средний z-профиль представляет собой и (1.00, ..., 1.00; 25.99, ..., 25.99; 188.86, ..., 171.43; 86.31, ..., 27.32; 3.53, ..., 1.00; 2.00). 222. (а) Это множество всех подмножеств слов из F. (Имеется 50 569 таких подслов из 27® = 14 348 907 возможных. Они описываются НДР размером 18 784, построенной из F и рс помощью ответа к упр. 205, (б) ценой около 15 миллионов обращений к памяти.) (б) Эта формула дает тот же результат, что и F П р, поскольку каждый член F содержит ровно один элемент каждого Xj. Но вычисление при этом оказывается гораз- до медленнее—около 370 миллионов обращений к памяти—несмотря на тот факт, что Z(X) = 132 почти всегда столь же мало, как и Z(p) = 131. (Заметим, что |р| = 2130, в то время как |Х| = 26® » 223 ®.) (в) (F/P) U Р, где F = ti U из U hs представляет собой шаблон. (Искомые слова— touch, tough, truth. Это вычисление при использовании алгоритма из ответа к упр. 205 требует около 3000 обращений к памяти.) Другими претендентами на простые формулы
742 ОТВЕТЫ К УПРАЖНЕНИЯМ 7.1.4 являются F П Q, где Q описывает допустимые слова. Если установить Q = ti Ll Х2 U из Ll Xt Llhs, то мы имеем Z(Q) = 57, а стоимость опять оказывается равной к 3000 обращений к памяти. С другой стороны, при Q = (ti U из U he) § 3 мы имеем Z(Q) = 132 и стоимость вырастает примерно до 9000 обращений к памяти. (Здесь |Q| равно 262 в первом случае, но 2127 во втором—что противоположно накопленным в п. (а) и (б) интуитивно понятным представлениям! Поди разберись...) (г) F П ((Vi U • U Vs) § fc). Количество таких слов равно (24, 1974, 3307, 443, 9, 0) для к = (0, ..., 5) соответственно, что получается из НДР размерами (70, 1888, 3048, 686, 34, 1). (д) Искомые шаблоны удовлетворяют соотношению Р = (F П р) П Q, где Q = ((Xi U • • U Х5) § 3). Мы имеем Z(Q) = 386, Z(F) = 14221 и |F| = 19907. (е) Формула для этого случая хитрее. Сначала Рз = F П F дает F вместе со всеми шаблонами, удовлетворяемыми двумя различными словами; мы имеем Z(F2) = 11289, |Р2| = 21234 и |Рз П Q| = 7753. Но F2 Г1 Q не является ответом; например, здесь пропущен шаблон *atc*, который встречается восемь раз, но только в контексте ♦atch. Правильный ответ — P^CiQ, где F2 = (Р2\Р)Пр. Тогда Z(P2) = 8947, ZfF^CiQ) = 7525, |P£nQ| = 10472. (ж) Gi U UGs, где Gj = (F/(bjUoj))Ubj. Ответами являются bared, bases, basis, baths, bobby, bring, busts, herbs, limbs, tribs. (з) Шаблоны, допускающие все гласные на втором месте: b«lls, b«nds, m«tes, p«cks. (и) Первая формула дает все слова, средние три буквы которых являются гласными. Вторая дает все шаблоны с указанными первой и последней буквами, для которых имеется как минимум одно соответствующее слово с тремя вставленными гласными. Имеется 30 решений для первой формулы, но только 27—для второй (поскольку, например, louis и luaus дают один и тот же шаблон). Кстати, комплементарное семейство р \ F имеет 2130 — 5757 членов и 46 316 узлов в своей НДР. 223. (a) d(a, р) + d(J3, р) + d(y, р) = 5, поскольку d(a, р) = [ai Д1] + • • + [as / Ps]- (б) Для заданных семейств f,gnh, семейство {р | р = (a/Jy) для некоторых а € /, /3 € р, y^hca/p, Р р, 7^риаП/?Г17 = 0} может быть определено рекурсивно для того, чтобы позволить вычисление НДР, если рассмотреть восемь вариантов, в которых ослаблены подмножества ограничений, являющихся неравенствами. В экспериментальной системе автора НДР для медиан WORDS(п) для п = (100, 1000, 5757) имеют соответственно (595,14389, 71261) узлов и характеризуют (47, 7310, 86153) пятибуквенных решений. Среди 86153 медиан при п = 5757 имеются chads, stent, blogs, ditzy, phish, bling и tetch; фактически tetch = (fetch teach total) возникает всегда при n = 1000. (Время работы, составляющее около (.01, 2, 700) миллиардов обращений к памяти соответственно, не было особо впечатляющим; вероятно, НДР — не лучший инструмент для данной задачи. Тем не менее программирование оказалось весьма поучительным.) (в) Когда п = 100, ровно (1, 14, 47) медиан WORDS(п) принадлежат WORDS (100), WORDS (1000), WORDS (5757) соответственно; решение с наиболее распространенными словами представляет собой vhile = (white whole still). При n = 1000 соответствующие числа равны (38, 365, 1276); а при п = 5757 это (78, 655, 4480). Наиболее распространенные английские слова, не являющиеся медианами трех других английских слов,—their, first и right. 224. Каждая дуга и —► v ориентированного ациклического графа соответствует вершине v леса. НДР имеет ровно один узел ветвления для каждой дуги. Указатель LO этого узла ведет к правому брату соответствующей вершины v или к |±], если v не имеет правых братьев. Указатель Ш ведет к левому дочернему по отношению к v узлу или к [т], если v представляет собой лист. Эти дуги можно упорядочить многими способами (например, в прямом или обратном порядке обхода, по порядку уровней), не изменяя НДР.
7.1.4 ОТВЕТЫ К УПРАЖНЕНИЯМ 743 225. Как в упр. 55, попытаемся пронумеровать вершины таким способом, чтобы “граница” между ранними и поздними вершинами оставалась достаточно небольшой; в таком случае нет необходимости помнить слишком много о решениях, которые были сделаны на ранних вершинах. В данном случае мы также хотим, чтобы вершина-источник s имела номер 1. В ответе к упр. 55 соответствующее состояние из предыдущих ветвлений соответ- ствует отношению эквивалентности (разбиению множеств); но сейчас мы выражаем его таблицей mate [г] для j < г < I, где j — Uk представляет собой меньшую вершину текущего ребра Uk —Vk и где I — шах{щ,..., Пусть mate [г] = г, если вершина г до сих пор не была задействована; пусть mate [г] = 0, если вершина г уже была задействована дважды. В противном случае mate [г] = г и mate [г] = г, если предыдущие ребра образуют простой путь с конечными точками {г, г}. Изначально мы устанавливаем mate [г] 4— г для 1 < г < п, за исключением того, что mate[l] 4— t и mate[t] Ч— 1. (Если t > I, значение mate[t] хранить не требуется, поскольку оно может быть определено из значений mate [г] для j < г < /.) Пусть j' = Ufc+i и I' = шах{щ,..., Vfc} представляют собой значения j и I после рассмотрения ребра fc; предположим также, что Uk = j, Vk = m, mate [7] = j, matefm] -- fh. Мы не можем выбрать ребро j — тп, если j = 0 или fh = 0. В противном случае, если j тп, после выбора ребра j — тп путем присваиваний matefj] Ч— 0, mate[m] ч— 0, mate [7] 4— тп, mateffn] ч— j (в указанном порядке) может быть вычислена новая таблица mate. В противном случае мы имеем j = тп и fh = j; мы должны видеть конец игры. Пусть г является наименьшим целым, таким, что г > j, г ф тп и либо г > I', либо mate [г] 0 0 и mate [г] £ г. Новое состояние после выбора ребра j — тп равно 0, если г < I', в противном случае оно равно е. Независимо от того, выбрано ребро или нет, новым состоянием будет 0, если mate [г] ф 0 и mate [г] г для некоторого г в диапазоне j < г < j'. Например, вот первые шаги для путей от 1 до 9 в решетке 3x3 (см. (132)). к j I m mate[l]... mate[9] 1 1 1 2 923456781 2123 923456781 2123 093456782 3234 029456783 3234 093456782 j fh mate'fl]... mate'[9] 9 2 093456782 9 3 029456783 0 3 2 4 049256783 9 4 003956784 Здесь mate' описывает следующее состояние при выбранном ребре j — тп. Переходы между состояниями matej..i i-> mate'y л, представляют собой 9 •-> (12? 92: 09); 92 i-» (13? 0: 29); 09 (13? 93: 0); 29 (24? 294: 492); 93 (24? 934: 039). После того как найдены все достижимые состояния, НДР можно получить путем при- ведения эквивалентных состояний с использованием процедуры наподобие алгоритма R. (В задаче с решеткой 3 х 3 57 узлов ветвления приводятся к 28 плюс два стока Пока- занная в разделе НДР с 22 ветвлениями получена путем последовательной оптимизации с использованием упр. 197.) 226. Просто опустите начальные присваивания lmate[l] Ч— t, mateft] 4-1’. 227. Замените в двух местах проверку ‘matefi] ф 0 и mate[i] ф V на *mate[i] ф О’. Замените также ‘г < Z’’ на ‘г < п’. 228. Используйте ответ к предыдущему упражнению со следующими дальнейшими из- менениями. Добавьте фиктивную вершину d = п + 1 с новыми ребрами v — d для всех v з; принятие этого нового ребра будет означать “закончить в v”. Инициализируйте таблицу mate значениями mate[l] Ч— d, matefd] 4— 1. При вычислении I и I' оставьте d за пределами максимизации. Когда начинается исследование сохраненной таблицы mate, начинайте с mate[d] ч— 0, а затем, если встречаете matefi] = d, устанавливайте matefd] Ч— г.
744 ОТВЕТЫ К УПРАЖНЕНИЯМ 7.1.4 229. 149 692 648 904 из последних путей идут от VA до MD; в графе (133) опущен DC. (Однако графы (18) имеют меньше чем (133) гамильтоновых путей, поскольку (133) имеет 1 782 199 гамильтоновых путей от СА до НЕ, которые не проходят от VA до MD.) 230. Единственные минимальный и максимальный маршруты идут из ME, и оба заканчи- ваются в WA. Пусть g(z) = zm,les(r), просуммированное по всем маршрутам г. Средняя стоимость g'(l)/g(l) = 1022014257375/68656026 ~ 14886.01 может быть быстро вычислена так, как в ответе к упр. 29. (Аналогично д"(1) = 15243164303013274, так что стандартное отклонение составляет и 666.2.) Примечание переводчика. Воспользовавшись графом (133, у), можно найти соответ- ствующие (также единственные) маршруты для Украины, приведенные ниже. В этом слу- чае при одной и той же начальной точке конечные точки минимального и максимального маршрутов различны. 4309 км Усреднение по всем 3410 гамильтоновым путям дает среднюю длину, равную 5127.04 км (заметим, что ни один гамильтонов путь не заканчивается ни в Херсоне, ни во Львове). 231. Алгоритм из ответа к упр. 225 дает прото-НДР с 8062831 узлом ветвления; она приводится к НДР с 3024 214 ветвлениями. Количество решений с применением ответа к упр. 208 составляет 50 819 542 770 311581606 906 543. 232. С помощью ответа к упр. 227 находим h — 721613 446 615 109 970 767 гамильтоновых путей из угла к его горизонтальному соседу и d = 480 257 285 722 344 701834 из них к его диагональному соседу; в обоих случаях соответствующая НДР содержит около 1.3 мил- лиона узлов. Количество ориентированных гамильтоновых циклов составляет 2h + d = 1 923 484178 952 564 643 368. (Деление на 2 дает количество неориентированных гамильто- 233. Может использоваться аналогичная процедура, но с matefi] = г и mate[r] = —г, когда предыдущие выборы определяют ориентированный путь от г до г. Последовательно обработаем все дуги иь —> Vk и иь ч— Vk при иь = j < ьь = т. Определим j = — j, если matefj] = j, в противном случае j = mate[7]. Выбор j —>т некорректен, если j > 0 или т < 0. Обновленное правило для этого выбора, когда он корректен, имеет вид mate [7] Ч— 0, mate[m] ч— 0, mate[—j] ч— т, mate[m] ч— j.
7.1.4 ОТВЕТЫ К УПРАЖНЕНИЯМ 745 234. 437 ориентированных циклов можно представить НДР с ss 800 узлами. Кратчайшими циклами, конечно, являются AL—>LA—>AL и MN—>NM—>MN. Имеется 37 циклов длиной 17 (максимальной), таких как (ALARINVTNMIDCOKSC), т. е. AL—>LA—>-->SC—>СА—>AL. Кстати, рассматриваемый ориентированный граф представляет собой ориентирован- ный граф дуг D* ориентированного графа D с 26 вершинами {А,В,..., Z}, 49 дугами которого являются А —> L, А —> R, ..., W —> Y. Каждый ориентированный путь в D" представляет собой ориентированный путь в D и обратно (см. упр. 2.3.4.2-21); но ори- ентированные циклы в D* не обязательно просты в D. Фактически D имеет только 37 ориентированных циклов с единственным самым длинным среди них циклом (ARINMOKSDC). Если расширить наше рассмотрение, распространив его на 62 почтовых кода из упр. 7-54, (в), то количество ориентированных циклов вырастет до 38336, включая един- ственный 1-цикл (А), а также 192 с длиной 23, такие как (APRIALASCTNMNVINCOKSDCA). Для определения всего семейства ориентированных циклов в этом случае достаточно НДР с около 17 000 узлов. 235. Этот ориентированный граф имеет 7912 дуг; но его можно существенно обрезать, удаляя дуги с нулевой входящей степенью, а также дуги с нулевой исходящей степе- нью. Например, мы отбрасываем owner —> nerdy, поскольку nerdy оказывается тупиком; фактически все преемники owner оказываются удаленными, так что убирается и crown. В конечном счете мы остаемся со 112 дугами, соединяющими 85 слов, и задача в основном решается вручную. Имеется только 74 ориентированных цикла. Наикратчайший цикл единственный, slant —> antes —> tesla —> slant, и может быть описан, как в предыдущем .упражнении, аббревиатурой ‘(slante)’. Двумя длиннейшими циклами являются (аи>) и (J3w), где а = picastepsomaso, (3 = pointrotherema, а tv = nicadrearedidoserumoreliciteslabsitaresetuplenactoricedarerunichesto. 236. (а) Предположим, что a 6 f и (3 6 g. Если a C /3, to a € f П g. Если а Г) (3 € f, то а П (3 f Z g. Аналогичные рассуждения, или использование п. (б), показывают, что f 9 = f \ if Ы <?) Примечания. Операции дополнения “/ \ д = f \ (f \ д) = {а € f | a D (3 для некоторого [3 6 д}” для надмножеств и “/ Z д = f \ (J 7 д) = {а € f | а С (3 для некоторого [3 6 д}” для подмножеств также важны в приложениях. Они были опущены в этом упражнении только потому, что пять операций уже выглядят достаточно пуга- юще. Операция надмножества была введена О. Кудером (О. Coudert), Ж. К. Мадром (J. С. Madre) и Г. Фрейссом (Н. Fraisse) [АСМ/IEEE Design Automation Conference 30 (1993), 625-630]. Тождество f \ g = f Г) (/ Ll g) было отмечено X. Окуно (H. Okuno), Ш. Минато (S. Minato) и X. Исозаки (Н. Isozaki) [Information Processing Letters 66 (1998), 195-199], которые также перечислили ряд законов из п. (г). (б) Достаточно элементарной теории множеств. (Первые шесть тождеств появля- ются в парах, каждое из тождеств эквивалентно своему напарнику. Строго говоря, fc включает бесконечные множества, и U является И бесконечного числа переменных; но формулы выполняются в любом конечном универсуме. Заметим, что при переводе на язык булевых функций fc(x) = f(x) является дополнением булево дуальной функции fD; см. упр. 7.1.1-2. Имеется ли какое-то применение дуальности для а именно того, что {Из а | [3 € f вытекает а U (3 17}^? Если да, то мы можем обозначить ее как /ь.) (в) Истинны все, за исключением (ii), которое должно гласить = х^с = х^с = ес = U. (г) “Тождествами” которые следует вычеркнуть, в данном случае являются (ii), (viii), (ix), (xiv) и (xvi); прочие стоят того, чтобы их запомнить. Что касается (ii)—(vi), то заметим, что f=f^ тогда и только тогда, когда /=/*, тогда и только тогда, когда f является клат-
746 ОТВЕТЫ К УПРАЖНЕНИЯМ 7.1.4 тером. Формула (xiv) должна иметь вид f\g^ = f xg, дуальный (xiii). Формула (xvi) почти верна; она неверна, только когда f = 0 или д=0. Формула (ix), пожалуй, наиболее интерес- на: в действительности мы имеем = f тогда и только тогда, когда f является клаттером. (д) В предположении конечности универсума всех вершин мы имеем (i) f = р X д и (ii) д = (р \ /)*•, где р представляет собой универсальное семейство из упр. 201 и 222, поскольку д является семейством минимальных зависимых множеств. (Пуристы должны заменить в этих формулах pv = Llt>ev(tl-Iet’) на Р- же отношения справедливы в любом гиперграфе, в котором ни одно ребро не содержится в другом.) 237. MAXMAL(/) = “Если f - 0 или f = е, вернуть /. Если f^ = r кэшировано, вернуть г. В противном случае установить г Ч— MAXMAL(Ji), гд Ч— МАХМАЕ(Д), г/ Ч— NONSUB(r, гд), разыменовать г, установить г ч— ZUNIQUE(/V,T|,^); кэшировать и вернуть г”. MINMAL(f) = “Если f = 0 или / = е, вернуть /. Если fl=r кэшировано, вернуть г. В противном случае установить п Ч— MINMAL(/<), г Ч— МШМАЬ(Д), гд ч— NONSUP(r,г;), разыменовать г, установить г Ч— ZUNIQUE(/v,rj,Th); кэшировать и вернуть г”. NONSUB(/,g) = “Если д = 0, вернуть /. Если f = 0 или f = е или f = д, вернуть 0. Если f S' 9 — г кэшировано, вернуть г. В противном случае представить fug, как в (52). Если v < gv, установить п ч— NONSUB(/;,g), гд ч— Д и увеличить REF(/h) на 1; в противном случае установить rh ч— NONSUB(/<,g<), г ч— NONSUB(/j,gh), ri ч— И(т,тд), разыменовать г и гд и установить гд Ч— NONSUB(/h,gh). Наконец г Ч— ZUNIQUE(v,ri,Th); кэшировать и вернуть г” NONSUP(/,g) = “Если д — 0, вернуть /. Если f — 0 или д = е, или f = g, вернуть 0. Если Д > д„, вернуть NONSUP(/, gi). Если f х д = г кэшировано, вернуть г. В противном случае установить v = fv. Если v < gv, установить г/ Ч— NONSUP(/<, д) и гд ч— NONSUP(/h,g); в противном случае установить п ч— NONSUP(/h,gh), г Ч— NONSUP(/h,g<), гд ч— И(г,п), разыменовать типи установить п ч— NONSUP(/i,g;). Наконец г ч— ZUNIQUE(z),r;,rh); кэшировать и вернуть г” MINHIT(f) = “Если f = 0, вернуть е. Если f = е, вернуть 0. Если /** = г кэшировано, вернуть г. В противном случае установить г ч— ИЛИ(/;, Д), г, ч— MINHIT(r), разыменовать г, г ч— MINHIT(/i), гд ч— NONSUP(r,rj), разыменовать г, и установить г Ч— ZUNIQUE(/i,,Ti,Tb); кэшировать и вернуть г” Как в упр. 206, неизвестно время работы этих подпрограмм в наихудшем случае. Хотя NONSUB и NONSUP можно вычислить через JOIN или MEET и НО-НЕ, согласно упр. 236, (а), эта непосредственная реализация обычно быстрее. Может оказаться пред- почтительной замена ‘f = е’ на ‘е € /’в MINMAL и MINHIT; а также ‘д = е’ на ‘е € д’ в NONSUP. [Оливье Кудер (Olivier Coudert) ввел и реализовал операторы /т, f/дп f Хд в Proc. Europ. Design and Test Conf. (IEEE, 1997), 224-228. Он также разработал рекурсивную реализацию интересного оператора f (Эд = (/Ug)T; однако в экспериментах автора гораздо лучшие результаты были получены без нее. Например, если f представляет собой 177- узловую НДР для независимых множеств смежных штатов США, операция д Ч— JOIN (/, /) стоит около 350 тысяч обращений к памяти, a h ч— MAXMAL(g)—около 3.6 миллиона обращений к памяти; но внезапно вычисление h Ч— MAXJOIN (/, /) потребовало более 69 миллиардов обращений к памяти. Конечно, картину могут изменить усовершенствованные стратегии кэширования и сборки мусора.] 238. Можно вычислить 177-узловую НДР для семейства f независимых множеств, ис- пользуя упорядочение (104), двумя способами. При использовании булевой алгебры (67) f = -> V«—v(Xu A Tv); стоимость составляет около 1.1 миллиона обращений к памяти при использовании алгоритмов из ответов к упр. 198-201. С другой стороны, при применении алгебры семейств мы имеем / = р \ U«—v(e« Ч е«) согласно упр. 236, (д); стоимость при использовании ответа к упр. 237 оказывается меньше 175 тысяч обращений к памяти.
7.1.4 ОТВЕТЫ К УПРАЖНЕНИЯМ 747 Подмножествами, дающими подграфы, раскрашиваемые двумя и тремя цветами, яв- ляются соответственно д = /1_1/ и h = gl_l/; максимальными подмножествами являются д* и /Л Мы имеем Z(g) = 1009, Z(gT) = 3040, Z(h) = 179, Z(M) = 183, |p| =9028058789780, |g7| = 2 949441, |h| = 543871144820736 и |h7| = 384. Последующая стоимость вычислений д, g7, h и А7 примерно равна 350 Кд, 3.6 Мд, 1.1 Мд и 230 Кд. (Мы можем вычислить А7 посредством, скажем, (д* LI /)7; но это оказывается плохой идеей.) Максимальные порожденные двух- и трехдольные подграфы имеют соответственно производящие функции 7654г25Ч I-9040г33+689г34 и 128г43+84г44+112г45+36г46+24г47. Вот типичные примеры наименьшего и наибольшего из них. (Сравните с наименьшим и наибольшим “однодольными” подграфами в 7-(61) и 7-(62).) Заметим, что семейства д и h говорят нам о том, какие порожденные подграфы могут быть раскрашены в два и три цвета, но не говорят о том, как это сделать. 239. Поскольку h = ((ei U • U 649) § 2) \ g представляет собой множество не ребер G, кликами являются f = р X h, а максимальная клика есть ни что иное как /7. Например, мы имеем Z(f) = 144 для 214 клик графа США и Z(f^) = 130 для 60 максимальных из них. В этом случае максимальные клики состоят из 57 треугольников (которые легко видимы в (18)) вместе с тремя ребрами, которые не являются частью никакого из треугольников: AZ---NM, WI--MI, NH--ME. Пусть fk описывает множества, покрываемые к кликами. Тогда /1 = /, a fk+i = А и/ для к > 1. (Вычислять fie как /в LJ /в—идея не из хороших; гораздо быстрее выполнить каждое соединение отдельно, даже если промежуточные результаты нас не интересуют.) Наибольшие элементы fk в графе США имеют размеры 3, 6, 9, ..., 36, 39, 41, 43, 45, 47, 48, 49 для 1 < к < 19; в таком небольшом графе, как наш, эти значения легко определить вручную. Однако вопрос о максимальных* элементах гораздо более тонкий, и, пожалуй, лучший инструмент для его исследования—бинарные диаграммы решений с подавлением нулей. НДР для fi, ..., /19 легко находится ценой 30 миллионов обращений к памяти вычислений, и они невелики: max Z(fk) = Z(/n) = 9547. Другие 400 миллионов обращений к памяти дают НДР для //, ..., /79, которые также невелики: max Z(f£) = = 9458. Мы находим, например, что производящая функция для /78 имеет вид 12г47 + 13г48; восемнадцати клик достаточно для покры- тия всех 49 вершин, кроме одной, если мы не будем включать СА, DC, FL, IL, LA, MI, MN, MT, SC, TN, UT, WA или WV. Имеются также двенадцать случаев максимального покрытия 47 вершин; например, если все вершины, кроме NE и NM, покрыты 18 кликами, то ни один из указанных штатов не покрыт. Необычный пример максимального покрытия кликами приведен на рисунке: если 29 “черных” штатов покрыты 12 кликами, то не будет покрыт ни один из “белых” штатов. 240. (а) Фактически подформула f(x) = f\v(xv V Vu_vx^) из (68) точно характеризует доминирующие множества х. А если удален любой элемент ядра, оно не доминирует над другими. [С. Berge, ТЬёопе des graphes et ses applications (1958), 44.] (б) Булева формула из п. (а) дает НДР с Z(f) = 888 после примерно 1.5 Мд вычисле- ний; затем другие 1.5 Мд с алгоритмом MINMAL из ответа к упр. 237 дают минимальные элементы с Z(f±) = 2082. * Вспомните обсуждение различия терминов “максимальный” и “наибольший” в разделе 7 на с. 56. — Примеч. пер.
748 ОТВЕТЫ К УПРАЖНЕНИЯМ 7.1.4 Более ясный путь заключается в том, чтобы начать с h = (Jr(et, D LL—t, e«)> a затем вычислить hJ, поскольку h* = /L Однако ясность в данном случае не главное: для вычисления h достаточно около 80 Кд, но вычисление h? с помощью алгоритма MINHIT стоит около 350 Мд. В любом случае мы выводим, что имеется ровно 7 798 658 минимальных доминирую- щих множеств. Говоря точнее, производящая функция имеет вид 192г11 + 58855г12 -F 4170г18 + 40г19 (что можно сравнить с 80г11 -I- 7851г12 -I-F 441г18 + 18г19 для ядер). (в) Действуя так, как в ответе к упр. 239, мы можем определить множества вершин dk, над которыми доминируют подмножества размеров к = 1, 2, 3, ..., поскольку dfc+i = dk Ll di. Это гораздо быстрее, чем начинать с di = р П h вместо di что Z(p П h) = 313 при Z(h) = 213, поскольку нас не интересуют подробности о маломощных членах dk. Используя тот факт, что производящая функция для d? имеет вид + 61г42 + г43, можно убедиться в том, что приведенное на рисунке решение единственное. (Общая стоимость вычислений и 300 Мд.) = h, несмотря на то Примечание переводчика. В случае графа для Украины имеется десять наименьших доминирующих множеств размером 5, одно из которых (единственное, включающее столицу) показано на рисунке. Заметим, что каждое из решений включает Винницу, Львов и Херсон. 241. Пусть g представляет собой семейство всех 728 ребер. Тогда, как в предыдущих упражнениях, f = р \ j представляет собой семейство независимых множеств, а кликами являются с= р \ (((LL е«) § 2) \ <?)• Мы имеем Z(p) = 699, Z(f) = 20244, Z(c) = 1882. (а) Среди |/| = 118969 независимых множеств имеется |/т| = 10188 ядер с Z(f^) = 8577 и производящей функцией 728г® 4-6912г® + 2456г7 4-92г8. 92 максимальных незави- симых множества представляют собой знаменитые решения классической задачи о восьми ферзях, которую мы изучим в разделе 7.2.2; пример (С1) является единственным решени- ем, в котором никакие три ферзя не находятся на одной прямой, как было замечено Сэмом Лойдом (Sam Loyd) в Brooklyn Daily Eagle (20 Dec 1896). 728 = 91 x 8 минимальных ядер были впервые перечислены К. Ф. де Янишем (С. F. de Jaenisch), Traite des applications de 1’analyse math, au jeu des echecs 3 (1863), 255-259, который приписал их некоему “Mr de R***’.’ Верхний левый ферзь в (СО) может быть заменен королем, слоном или пешкой, что не повлияет на доминирование над всеми открытыми полями [Н. Е. Dudeney, The Weekly Dispatch (3 Dec 1899)]. (C7) (б) В этом случае Z(c7) = 866; 310 максимальных клик описаны в упр. 7-129.
7.1.4 ОТВЕТЫ К УПРАЖНЕНИЯМ 749 (в) Эти подмножества вычислительно более сложные: НДР для всех доминирую- щих множеств d имеет Z(d) - 12663505, |d| = 18446595708474987957; минимальные имеют Z(d^) = 11363849, |d*| = 28281838, а производящая функция имеет вид 4860г5 + 1075580z6 + 14338028z7+11978518z8+873200z9+11616zlo+36z11. С использованием булевой алгебры можно вычислить НДР для d за 1.5 Gp и затем НДР для d± еще за 680 Gp; альтернативный, более “ясный” подход из ответа к упр. 240 получает d± за 775 Gp без вычисления d. Расстановка 11 ферзей (С5) является единственным таким минимальным доминирующим множеством, ограниченным тремя рядами. Г. Э. Дьюдени (Н. Е. Dudeney) представил (С4), единственное решение, оставляющее пустым центральный ромб, в Tit Bits (1 Jan 1898), 257. Множество всех 4860 наименьших решений было впервые подсчитано К. фон Сили (К. vonSzily) [Deutsche Schachzeitung 57 (1902), 199]; полный его список был приведен в W. Ahrens, Math. Unterhaltungen und Spiele 1 (1910), 313-318. (г) Здесь достаточно вычислить (с П d)± вместо с П (d^), если мы еще не знаем d\ поскольку сП р = с. Мы имеем Z(cПd*) - 342 и |сП d'4'| = 92 с производящей функцией 20г5 + 56г6 + 16г7. И вновь Дьюдени был первым, кто открыл все 20 решений с 5 ферзями [The Weekly Dispatch (30 July 1899)]. (д) Мы имеем Z(f LI /) = 91780989 ценой 24 Gp; затем Z((f LI /)т) = 11808436 после очередных 290 Gp. Имеется 27 567 390 максимальных порожденных двудольных подграфов с производящей функцией 109894г10 + 2561492г11 + 13833474г12 + 9162232г13 + 1799264г14 + 99408г16 + 1626г16. Любые 8 независи- мых ферзей можно скомбинировать с их зеркальным отражением и получить решение с 16 ферзями; так (С1) дает (С9). Но непересекающееся объединение ми- нимальных ядер не всегда представляет собой макси- мальный порожденный двудольный подграф; напри- мер, рассмотрим объединение (СО) с его отражением: Пункты (а), (б), (г) и, возможно, (в) можно решить и без применения НДР; см., напри- мер, упр. 7.1.3-132. Однако для п. (г), похоже, наилучшим является подходе применением НДР. А вычисление всех максимальных трехдолъных подграфов Qs может оказаться за рамками любого реального алгоритма. [В больших графах ферзей Qn известно, что наименьшие ядра и наименьшие доми- нирующие множества имеют размеры либо [п/2], либо [п/2] + 1 для 12 < п < 120. См. Р. R. J. Ostergard and W. D. Weakley, Electronic J. Combinatorics 8 (2001), #R29; D. Fino- zhenok and W. D. Weakley, Australasian J. Combinatorics 37 (2007), 295-300. Наибольшие минимальные доминирующие множества были исследованы в А. Р. Burger, Е. J. Cockayne and С. М. Mynhardt, Discrete Mathematics 163 (1997), 47-66.] 242. Это ядра интересного 3-регулярного гиперграфа с 1544 ребрами. 4113 975079 его независимых подмножеств f (т. е. его подмножеств, в которых не имеется трех коллинеар- ных точек) имеют Z(f) — 52 322 105, вычислимое примерно за 12 миллиардов обращений к памяти с использованием алгебры семейств, как в ответе к упр. 236, (д). Другие 575 Gp вычисляют ядра f\ для которых мы имеем Z(f^) = 31438750 и |/т| = 66509584; про- изводящая функция имеет вид 228г8 + 8240г9 + 728956г10 + 9888900г11 + 32215908г12 + 20739920г13 + 2853164г14 + 73888г15 + 380г16. оооомоо 00009900 99000000 99000000 00000099 00000099 00990000 00990000 00900090 00909000 99000000 00009090 09090000 00000909 90090000 00000909 ОООООООО ОООООООО 00909000 00009900 00990000 00090900 ОООООООО ОООООООО ОООООООО oototooo 060*0000 000*0*00 00909000 ОООООООО ОООООООО ОООООООО ооооооооооо 00000900009 90900000000 09090000000 09090000000 9O9OOOOOOOQ 00000900009 ООООООООООО [Задача поиска независимого множества размером 16 была впервые поставлена Г. Э. Дью- дени (Н. Е. Dudeney) в The Weekly Dispatch (29 апреля и 13 мая 1900 года), где он привел
750 ОТВЕТЫ К УПРАЖНЕНИЯМ 7.1.4 шаблон, крайний слева из показанных выше. Позже, в лондонской Tribune (7 ноября 1906), Дьюдени поставил перед любителями головоломок задачу найти второй шаблон с двумя точками в центре. Полное множество максимальных ядер, включая 57 различных с учетом симметрии, было найдено в работе М. A. Adena, D. A. Holton and Р. A. Kelly, Lecture Notes in Math. 403 (1974), 6-17, авторы которой также обратили внимание на существование 8-точечного ядра. Средний из показанных выше шаблонов является одним из таких ядер, у которого все точки находятся в центральном квадрате 4x4. Два другие шаблона дают ядра, которые имеют соответственно (8,8,10,10,12,12,12) точек в решетках п х п для п = (8,9,..., 14); они были найдены С. Айнли (S. Ainley) и описаны в письме Мартину Гарднеру (Martin Gardner) от 27 октября 1976 года.] 243. (а) Этот результат легко проверить даже для бесконечных множеств. (Заметим, что как булева функция /п является наименьшей функцией Хорна, которая представляет собой D f согласно теореме 7.1.1Н.) (б) Можно образовать = f П f, затем П /(2), ... и далее до f-2 + } = f(2 \ используя упр. 205. Однако быстрее разработать рекуррентное соотношение, быстро приводящее к пределу. Если f = fo U (ei LI /i), мы имеем fn = f U (ei LI /Г), где f' = /о1и(/о1П/1Г|). [Альтернативной формулой является f' = (/oLI/i)n\(/1nZ/o); см. S. Minato and H. Arimura, Transactions of the Japanese Society for Artificial Intelligence 22 (2007), 165-172.] (в) При применении первого предложения из п. (б) вычисление F^2\ и = F^ стоит около (610+450+460) миллионов обращений к памяти. В этом примере оказывается, что F^ = F^ и что только три шаблона принадлежат F^ \ F<2\ а именно c***f, *k*t* и ***вр. (Словами, соответствующими шаблону ***вр, являются clasp, crisp и grasp.) Непосредственное вычисление Fn с помощью рекуррентного соотношения, основанного на /о1 П /1П, стоит только 320 Мр; в данном примере альтернативное рекуррентное соотноше- ние, основанное на (foU/i)n, имеет стоимость 470 Мр. Производящая функция имеет вид 1 + 124z + 2782z2 + 7753z3 + 4820z4 + 5757z®. 244. Чтобы преобразовать рис. 22 из БДР в НДР, мы добавляем соответствующие узлы с LO = HI, где связи перепрыгивают через уровни, приводя к z-профилю (1, 2, 2, 4, 4, 5, 5, 5, 5, 5, 2, 2, 2). Чтобы преобразовать его из НДР в БДР, мы добавляем узлы в те же места, но с HI = [Т], получая профиль (1, 2, 2, 4, 4, 5, 5, 5, 5, 5, 2, 2, 2). (Фактически функция связности и функция остовного дерева представляют собой Z-преобразование друг друга; см. упр. 192.) 245. См. упр. 7.1.1-26. (Было бы интересно сравнить производительность алгоритма Фред- мана-Хачияна из упр. 7.1.1-27 с НДР-алгоритмом MINHIT из ответа к упр. 237 для мно- жества различных функций.) 246. Если неконстантная функция не зависит от xi, можно заменить xi в формулах на xv, как в (50). Пусть Р и Q—простые импликанты функций р и q. (Например, если Р = вг U (ез Сед), то р = Х2 V (тз Лтд).) Согласно (137) и индукции по |/| функция f, описанная в теореме, является легкой тогда и только тогда, когда р и q легкие и Р1(/о) Г) PI(/i) = 0. Последнее равенство выполняется тогда и только тогда, когда р С q. 247. Их можно охарактеризовать с помощью БДР, как в (49) и в упр. 75; но в этот раз <7n(a;i,... ,Х2") = <7n-i(a:i, • • • ,a:2"-i) Л 2*-1 ((х2 Л • • • Л Х2" ) V (<7Я-1 (хг, • • • , а?2" ) Л Д (x2j+l V у X2i+2 j ) ) • J=O icj
7.1.4 ОТВЕТЫ К УПРАЖНЕНИЯМ 751 Ответами |<тп| для 0 < п < 7 являются (2, 3, 6, 18, 106, 2102, 456774, 7108935325). (Это вычисление строит БДР размером В(<тт) = 7701683, выполняя около 900 миллионов обращений к памяти и используя 725 Мбайт памяти.) 248. Ложно; например, (xi V тг) A (xz V хз) не является легкой. (Но конъюнкция является легкой, если fug зависят от непересекающихся множеств переменных или если xi является единственной переменной, от которой зависят обе функции.) 249. (Решение Шаддина Дахми (Shaddin Dughmi) и Яна Поста (Ian Post).) Ненулевая монотонная булева функция сверхлегкая тогда и только тогда, когда простые импликанты являются базами матроида; см. раздел 7.6.1. Расширяя ответ к упр. 247, можно определить количества сверхлегких функций f(xi,... ,хп) для 0 < п < 7: (2, 3, 6, 17, 69, 407, 3808, 75165). 250. Исчерпывающий анализ показывает, что среднее B(f) = 76726/7581 и 10.1; среднее Z(PI(/)) = 71513/7581 » 9.4; Pr(Z(Pl(/)) > В(/)) = 151/7581 и .02; и максимальное Z(PI(/))/B(/) —- 8/7 достигается в единственном случае, когда f представляет собой (xiAa^) V (rriArrg) V (xzAxsAxt) V (xzAxs). 251. Говоря более строго, может ли выполняться limsupZ(PI(/))/B(/) = 1? 252. НДР должна описывать все слова из алфавита {ej, e'j,..., еп, е„}, которые имеют ров- но j букв без штриха и k—j букв со штрихом и в одном слове не встречаются одновременно Cj и е\ для некоторого множества пар (j, к). Например, если п = 9 и f(x) = vvx, где v = 110111011, этими парами являются (0,8), (3,6) и (8,8). Независимо от множества пар, все элементы z-профиля будут О(п2), следовательно, Z(PI(/)) = О(п3). (Мы упорядочиваем переменные так, чтобы а\ и x't были соседями.) A f(x) = 3^п/з^.|2n/3J (х) имеет Z(PI(/)) = Q(n3). 253. Пусть !(/) представляет собой семейство всех импликант f; тогда Р1(/) = !(/)'*'• Формулу 1(f) = I(/o A /i)U(e'1LH(/o))U(e1LII(/i)) легко проверить. Таким образом, !(// = A U (e'i U (Р1(/о) Ч A)) U (ех U (PI(/i) Ч А)), как в упр. 237. Но Р1(/о) Ч А = Р1(/о) \ А, поскольку А С 1(f). [Это рекуррентное соотношение для простых импликант было получено О. Кудером (О. Coudert) и Ж. К. Мадре (J. С. Madre), АСМ/IEEE Design Automation Conf. 29 (1992), 36-39. Частичные результаты были сформулированы ранее в работе В. Reusch, IEEE TYans. С-24 (1975), 924-930.] 254. Согласно (53) и (137) нам надо показать, что Р1(рь) \Р1(/ь Up<) = (PI(p/>)\PI(pi)) \ (PI(/h)\PI(/i))- Но обе стороны выражения равны PI(ph) \ (Р1(/ь) U PI(pi)), поскольку fl С fh С gh и fi С gi С gh. [Это рекуррентное соотношение строит НДР непосредственно из БДР f и д и дает Р1(р), когда f = 0. Таким образом, его проще реализовать, чем (137), где требуется также оператор разности множеств для НДР. Кроме того, на практике оно часто работает быстрее.] 255. (а) Типичный элемент а наподобие ег U eg Ll ев имеет очень простую НДР. Можно легко разработать подпрограмму BUMP, которая устанавливает д Ч— д ф а и возвращает [а 6 р] для заданных НДР д и а. Для вставки а в мультисемейство f начинаем с к ч— с Ч— 0; затем, пока с = 0, устанавливаем с Ч— ВиМР(Д) и к Ч— к +1. Для удаления а, в предположении его наличия, начинаем cfc4—Оисч— 1; пока с = 1, устанавливаем с Ч— ВиМР(Д) и к Ч— к + 1. (б) Предположим, что и р* представляют собой 0 для к > т. Установить к Ч— 0 и t ч— 0 (НДР [Т]). Пока к < т, устанавливать А* Ч- ф р* ф t и t ч— (Apfct). Наконец установить hm Ч— t.
752 ОТВЕТЫ К УПРАЖНЕНИЯМ 7.1.4 [Это представление и алгоритм вставки разработаны Ш. Минато (S. Minato) и X. Ари- мура (Н. Arimura), Proc. Workshop, Web Information Retrieval and Integration (IEEE, 2005), 4-11.] 256. (а) Зеркально отобразим бинарное представление слева направо и добавим нули, чтобы количество битов стало равным 2П для некоторого п. Результат представляет собой таблицу истинности соответствующей булевой функции f(xi,... ,хп) с хк, соответствую- щим 22 6 U. Когда х = 41, например, 10010100 представляет собой таблицу истинности (хгЛхъЛхз) V (xiAxzAxs) V (хтЛхзЛхз). (б) Если х < 22", мы имеем Z(x) <Un = O(2n/n) согласно (79) и упр. 192. (в) Имеется простая рекурсивная подпрограмма ADD (а;, у, с), которая получает “бит переноса” с и указатели на НДР для х и у и возвращает указатель на НДР для х + у + с. Эта подпрограмма вызывается не более чем 4Z(x)Z(y) раз. (г) Мы не можем утверждать, что Z(x—у) = O(Z(x)Z(y)), поскольку Z(x — у) = п+1 и Z(x) = 3 и Z(y) = 1 при х = 22 и у - 1. Но путем вычисления х — 3/ = (а; + 1 + ((22" — 1) Ф у)) — 22 при у < х < 22 можно показать, что Z(x — у) = O(Z(x)Z(y)loglogx). (См. узлы tj НДР в ответе к упр. 201.) Так что окончательный ответ— “да’.’ (д) Нет. Например, если х = (22 + — 1)/(22 — 1), мы имеем Z(x) - 2* + 1, но Z(x2) = 3 • (22 — 1) = U2k+k+1 — 2, где U2k+k+1 —наибольший возможный размер НДР для чисел с lg 1g а;2 < 2* + fc + 1 (см. п. (б)). [На это упражнение натолкнули исследования Жана Вюллемина (Jean Vuillemin), который начал эксперименты с такими разреженными целыми числами около 1993 года. К сожалению, важные в комбинаторных вычислениях числа—такие, как числа Фибонач- чи, факториалы, биномиальные коэффициенты и т. п. — на практике редко оказываются разреженными.] 257. См. Proc. Europ. Design and Test Conf. (IEEE, 1995), 449-454. В случае знаковых ко- эффициентов можно использовать {—2,4, —8,...} вместо {2,4,8,... }, как в негабинарной арифметике. [В частном случае, когда степень каждой переменной не превышает 1 и когда сложе- ние выполняется по модулю 2, полиномы из этого упражнения эквивалентны мультили- нейному представлению булевых функций (см. 7.1.1-(19)) и НДР эквивалентны “бинарным моментальным диаграммам” (binary moment diagrams — BMD). См. R. E. Bryant and Y.- A. Chen, АСМ/IEEE Design Automation Conf. 32 (1995), 535-541.] 258. Если n нечетно, БДР должна зависеть от всех своих переменных, и их должно быть как минимум [1g п]. Таким образом, B(f) > [lg п] + 2 при п > 1, и худые функции из упр. 170, (в) достигают этой границы. Если п четно, добавим неиспользуемую переменную к решению для п/2. Как легко видеть, вопрос об НДР эквивалентен поиску кратчайшей суммирующей цепочки, как в разделе 4.6.3. Таким образом, наименьшее значение Z(f) для |/| = п равно Z(n) + 1, включая [т|. 259. Теория вложенных скобок (см., например, упр. 2.2.1-3) говорит нам, что Nn(x) - 1 тогда и только тогда, когда xi + • • • + хк > хк Ч-1- хк для 0 < к < 2п, причем равенство достигается при fc — 2п. Или, что эквивалентно, к — п < xi + + хк < fc/2 для 0 < к < 2п. Так что БДР для Nn во многом похожа на БДР для Sn(x), но проще; фактически элементами профиля являются bk = [fc/2] + 1 для 0<А:<пиЬ*=п + 1 — [fc/2] для п < к < 2п. Следовательно, B(Nn) = bo + • • • + ban-i + 2 = (n+2) + 1- z-профиль имеет zk = bk — [fc четно] для 0 < к < 2n, поскольку ветви HI на четных уровнях ведут в [Z]; следовательно, Z(Nn) = B(Nn) — п. [Интересная база БДР для п+1 булевых функций, соответствующих Спп, C(n_i)(n+ij, - - •, Со(2п) из 7.2.1.6-(21), может быть построена по аналогии с упр. 49.]
7.1.4 ОТВЕТЫ К УПРАЖНЕНИЯМ 753 260. (а,б) Расположим переменные xn,o, хп,1, , xn,n-i, •••, xi,o сверху вниз. Тогда ветвь HI из корня НДР для Rn представляет собой корень НДР Яп-i. (Это упоря- дочение, как оказывается, минимизирует Z(Rn) для п < 6 и, вероятно, также для всех п.) z-профиль имеет вид 1, ..., 1; п — 2, ..., 2, 1, 1; п — 3, ..., 2, 1, 1; ...; следовательно, Z(Bn) = (3) + 2п + 1 я |п3 и Z(Rwo) = 161901. Обычный профиль представляет собой 1, 2, 2, 3, 4, ..., п — 1; п — 1, 2п — 4, 2п — 5, ..., п — 1; п — 2, 2п — 6, ..., п — 2; ...; в целом В(Я„) = 3(;) + ("+1) + 3 для п > 2 и В(Яюо) = 490153. [См. I. Semba and S. Yajima, Hans. Inf. Proc. Soc. Japan 35 (1994), 1666-1667. Кстати, метод из упр. 7.2.1.5-26 приводит к НДР для разбиений множества, которая имеет всего лишь (") переменных и (”) + 1 узлов. Но связь между этим представлением и разбие- ниями менее непосредственная; таким образом, внести ограничения естественным путем оказывается труднее.] (в) Теперь при п = 100 имеется 573 переменные вместо 5050; количество переменных в общем случае равно nl — 2l +1, где I = [1g п] согласно 5.3.1-(3). Мы рассматриваем биты чисел Оп, йп-1, • • •, начиная со старшего бита. Тогда В(7?'1ОО) = 31861, и можно показать, что B(R'rl) = (")1 — |4* — |2' — р(п — 1) + I + | для п > 2. Размер НДР более сложен, и оказывается больше примерно на 60%; мы имеем Z(7?'10o) = 60154. 261. Для заданной булевой функции f(xi,..., хп) множество всех бинарных строк xi... хп, таких, что f(xi,..., хп) = 1, является конечным языком, так что он является регулярным. Детерминированный автомат с минимальным количеством состояний А для этого языка представляет собой КДР для f. (В общем случае, когда L -регулярен, состояние А после чтения xi... хь принимает язык {а | xi ... XkOi € Lj.) [Цитируемая теорема была открыта в более общем контексте Д. А. Хаффманом (D. A. Huffman), Journal of the Franklin Institute 257 (1954), 161-190, и независимо от него Э. Ф. Муром (Е. F. Moore), Annals of Mathematics Studies 34 (1956), 129-153.] Интересный пример связи между этой теорией и теорией БДР можно найти в ранних работах Юрия Брейтбарта, подытоженных в Доклады Акад, наук СССР 180 (1968), 1053- 1055. Лемма 7 в статье Брейтбарта гласит, по сути, что BminC0) = П(2П^4), где ф является функцией от 2п переменных х = (a?i,..., хп), а у = (l/i,. - -, Уп) определяется с помощью i/>(x, у) — xvy ф yvx с учетом того, что хо = уо = 0. (Заметим, что ijj представляет собой “двухстороннюю” скрыто взвешенную битовую функцию.) 262. (а) Если а обозначает функцию или подфункцию f, можно, например, использовать С(а) = а ф 1 для обозначения / в предположении, что каждый узел занимает четное число байтов. Тогда С(С(а)) = а и связь с а обозначает не нормальную функцию тогда и только тогда, когда а нечетно; а & —2 всегда указывает на узел, который всегда представляет нормальную функцию. Указатель LO каждого узла четный, поскольку нормальная функция остается нор- мальной при замене любой переменной нулем. Но указатель HI любого узла может быть дополнен; также может быть дополнен и внешний корневой указатель на любую функцию нормализованной базы БДР. Заметим, что сток [т| теперь невозможен. (б) Уникальность очевидна из-за связи с таблицами истинности: бусина является либо нормальной (т. е. начинается с 0), либо дополнением нормальной бусины. (в) На приведенных диаграммах каждая дополняющая связь указана пунктиром. (г) Имеется 22*"-1 — 22”* 1-1 нормальных бусин порядка т. Наихудший случай, В°(/) < В°(/„) = 1+$2£“о min(2fc,22"-fc-1—г2"-’1-1-1) = (Un+i —1)/2, осуществляется для
754 ОТВЕТЫ К УПРАЖНЕНИЯМ 7.1.4 функций из ответа к упр. 110. Чтобы найти средний нормализованный профиль, заменим 22"~ — 1 в (80) на 22n-fc — 2 и разделим всю формулу на 2; средний случай оказывается очень близким к наихудшему. Например, вместо (81) мы имеем (1.0,2.0, 4.0, 8.0,16.0, 32.0,64.0,127.3,103.9,6.0,1.0,1.0). (д) Мы экономим [т|, один (б), два (б) и три (4), оставляя 45 нормализованных узлов. (е) Вероятно, лучше всего иметь подпрограммы И, ИЛИ, НО-НЕ для случая, когда известно, что f и д являются нормальными, вместе с подпрограммой GAND для общего случая. Подпрограмма GAND(J,g) возвращает И (/,<;), если fag четны, НО-НЕ(/,С(д)), если f четно, но д нечетно, НО-НЕ(р, С(/)), если д четно, но f нечетно, С(ИЛИ(C(f), С(д))), если / ид нечетны. Подпрограмма И(/,р) подобна (55) за исключением того, что гь <— GAND(/h,ph); только случаи / = 0, д = 0 и / = д должны быть протестированы как “очевидные” значения. Примечания. Дополняющие связи были предложены С. Акерсом (S. Akers) в 1978 го- ду и независимо от него Ж. П. Биллоном (J. Р. Billon) в 1987 году. Хотя такие связи использовались во всех основных пакетах БДР, их трудно рекомендовать, так как компью- терные программы становятся слишком сложными. Экономия памяти обычно получается незначительной, и никогда не более чем в два раза; кроме того, эксперименты автора демонстрируют малый выигрыш и во времени работы. При использовании НДР вместо БДР “нормальное семейство” функций представляет собой семейство, не содержащее пустого множества. Шин-ичи Минато (Shin-ichi Minato) предложил использовать при работе с НДР обозначение С(а) вместо f для семейства /фе. 263. (а) Если Нх = 0 и х ф 0, у нас не может быть их = 1 или 2, поскольку столбцы Н ненулевые и различные. [R. W. Hamming, Bell System Tech. J. 29 (1950), 147-160.] (б) Пусть гь представляет собой ранг первых fc столбцов Н, а а* — ранг последних fc столбцов. Тогда Ьк = 2Гк+‘п~к~Гп для 0 < к < п, поскольку это количество элементов в пе- ресечении векторных пространств, охватываемых первыми fc и последними п—к столбцами. В коде Хэмминга Гк = 1 + Afc и вк = min(m, 2 + A(fc — 1)) для fc > 1; так что мы находим В(/) = (п2 +5)/2. [См. G. D. Forney, Jr., IEEE Trans. IT-34 (1988), 1184-1187.] (в) Пусть qk = 1 —pk- Максимизация ПГ=1 такова же, как и максими- зация ШкХк, где Wk = (2ук~ 1) log(pfe/Qk), так что мы можем использовать алгоритм В. Примечания. Ученые в области теории кодов, начиная с неопубликованных работ Форни (Forney) в 1967 году, разработали идею так называемой решетки (trellis) кода. В бинарном случае решетка представляет собой то же самое, что и КДР для f, но все узлы для константной подфункции 0 из нее удалены. (Полезные коды имеют расстояние > 1; в этом случае решетка также представляет собой БДР для f, но с удаленным [±].) Изна- чально Форни хотел показать, что декодирующий алгоритм А. Витерби (A. Viterbi) [IEEE Ilans. IT-13 (1967), 260-269] оптимален для сверточных кодов. Несколько лет спустя в работе L. R. Bahl, J. Cocke, F. Jelinek and J. Raviv, IEEE Trans. IT-20 (1974), 284-287, структура решетки была расширена до линейных блочных кодов и были представлены более оптимальные алгоритмы. См. также статьи G. В. Horn and F. R. Kschischang, IEEE Hans. IT-42 (1996), 2042-2048; J. Lafferty and A. Vardy, IEEE Trans. C-48 (1999), 971-986. 264. Процедуры, объединяющие “восходящие” методы алгоритма В с “нисходящими” ме- тодами, которые выполняют оптимизацию над предшественниками узла, могут оказаться более эффективными по сравнению с методами, работающими строго в одном направлении. 265. Вычислим количества Cj в восходящем направлении, как в алгоритме С, с использова- нием n-битовой арифметики. Затем будем работать в нисходящем направлении, начиная с fc 4— з — 1, J Ч— 1, тп-*— т — 1 и повторяя следующие шаги (во время которых мы
7.2.1.1 ОТВЕТЫ К УПРАЖНЕНИЯМ 755 будем иметь 0 < т < 2Vk~iCk). если t>* > j, установить Xj 4— [m/2Vk~:’~1Ckj, т 4— mmod2"fc_)1ct, j 4— j + 1; в противном случае при к = 1 завершить работу алгоритма; в противном случае установить I 4— Ik, h 4— hk и, если т < 2',‘~'’k~lci, установить Xj 4— О, к 4— I, j>4— j' + 1; в противном случае установить Xj 4— 1, т 4— т — 2’',-’'*-1С|, к 4— h, 3 <- 3 + 1- 266. Фактически НДР получается непосредственно из стандартного бинарного дерева “ле- вый сын, правый брат” для F (см. 7.2.1.6-(4)), если использовать левую дочернюю связь для HI, и правую “братскую” связь для LO; нулевые связи изменяются таким образом, чтобы указывать на [т], за исключением того, что связь LO корня крайнего справа дерева (последнего узла в обратном порядке обхода) должна указывать на ЦТ]. 267. Размер НДР для d(F) может быть вычислен следующим образом с использованием вспомогательной функции С(Т), рекурсивно определяемой на деревьях: если |Т| = 1 (т. е. если Т имеет только один узел), £(Т) = 1. В противном случае Т состоит из корня вместе с к > 1 поддеревьями, Ti, Тк, и мы определяем С(Т) = 1 +C(Ti) Ч-----l-C(Tfc) +|71 — |Т*|. Тогда, если F состоит из fc > 1 деревьев Ti, ..., Tk, мы имеем Z(d(F)) = 1 + С (71) + • • • + C(Tfc) + [|т*| = 1]. Минимальный размер, п, очевидно, получается, когда F состоит из п одноузловых деревьев. Максимальный размер, [п2/4] + 2п + 1, достигается для п = 2m — 1 в дереве, в котором узел fc имеет два дочерних узла, fc + 1 и к + m для 1 < к < тп\ случай п = 2m аналогичен. Для того чтобы найти средний размер, рассмотрим производящую функцию Z(w, z) = 22 k/^z^' с суммированием по всем деревьям Т. Определение Q дает функциональное уравнение Z(w, z) = wz + w2zZ(w, z)/(l — Z(w,wz)). Дифференцирование no w и no z с последующей установкой w = 1 говорит нам, что Z(l, z) — (1 — s)/2, Zw(l, z) — z/s + z/s2 и Z2(l,z) = 1/s, где s = \/l — 4z. Производящая функция 22f wz^d^F»z'F* с суммировани- ем по всем непустым лесам F равна (wZ(w, z) + w3z — w2z)/(l — Z(w, z)). Дифференцируя no w и устанавливая w 4— 1, мы получаем z/(l — 4z) + 2z/\/l — 4z; следовательно, среднее значение Z(d(F)) равно (4""1 + 2nCn-i)/Cn - |75Fn3/2 + | + O(n1/2), где С'п—число Каталана (7.2.1.6-(15)). РАЗДЕЛ 7.2.1.1 1. Пусть mj = Uj—lj+1, и в алгоритме М вместо (щ,... ,ап) посетим (ai+Zi,... ,ап+1п). Или заменим в этом алгоритме ‘а,- 4— 0’ на ‘а,- 4— lj’ и ‘aj = mj — 1’ на ‘aj = Uj’ и установим /о 4— 0, зд 4— 1 на шаге Ml. 2. (0,0,1,2,3,0,2,7,0,9). 3. Шаг М4 выполняется тда... тк раз при j = к; следовательно, общее количество равно £"=0 П*=1 mj = mi... m„(l + l/mn + l/mnmn-i -I-------1- l/mn • • .mi). Если все mj не меньше 2, это значение меньше 2mi... mn. [Таким образом, мы должны иметь в виду, что методы на основе кодов Грея, которые изменяют при каждом посещении только одну цифру, в действительности уменьшают общее количество изменений цифр не более чем в два раза.] 4. N1. [Инициализация.] Установить aj 4— mj — 1 для 0 < j < п, где то = 2. N2. [Посещение.] Посетить n-кортеж (ai,..., an). N3. [Подготовка к вычитанию 1.] Установить j 4— п. N4. [Заем при необходимости.] Если aj = 0, установить aj 4— mj — 1, j 4— j — 1, и повторить данный шаг.
756 ОТВЕТЫ К УПРАЖНЕНИЯМ 7.2.1.1 N5. [Уменьшение или завершение.] Если j = 0, завершить работу алгоритма. В про- тивном случае установить aj 4— а, — 1 и вернуться к шагу N2. | 5. Обращение битов легко выполняется на машине наподобие MMIX, но на других ком- пьютерах эту задачу можно решить следующим образом. Z1. [Инициализация.] Установить j 4— к 4— 0. Z2. [Обмен.] Обменять A\j + 1] 4-> A[fc + 2П-1]. Кроме того, если j < к, обменять A[j] О A[fc] и A[j + 2"-1 + 1] 4-> A[fc + 2"-1 + 1]. Z3. [Продвижение fc.] Установить к 4— к + 2 и завершить работу алгоритма, если к >2П-1. Z4. [Продвижение у.] Установить h 4— 2П-2. Если j > h, многократно устанавливать j 4— j — h и h 4— h/2 до тех пор, пока не будет выполнено условие j < h. Затем установить j 4— j+h. (ТеперьJ = (bo.. .bn-i)2, если fc = (bn-i - • .Ьо)г-) Вернуться к шагу Z2. | 6. Если р((0Ьп-1 • - biMz) = (0(bn-i) • • • (&2 Ф bi)(bi ф Ьо))2, то g((lbn-i - - ЬхМг) = 2n + p((Obn-i ...bibo)2) = (l(bn-i). ..(ba ®bi)(bi ®bo))2, где b = Ьф 1. 7. Для 2г секторов можно использовать g(fc) для 2П — г < к < 2П + г, где п = [1gг], поскольку р(2п — г) ф р(2п + г — 1) = 2П согласно (5). [G. С. Tootill, Proc. IEE 103, Part В Supplement (1956), 434.] См. также упр. 26. 8. Воспользуйтесь алгоритмом G с п 4— п — 1 и добавьте справа бит четности Ооо- (Это дает р(0), р(2), р(4), ....) 9. Одеть крайнее справа кольцо, поскольку р(1011000) нечетно. 10. А„ + Вп = </“ *1 (2П — 1) = [2п+1/3] и Ап = В„ + п. Следовательно, Ап = [2П/3 + п/2] и Вп = [2П/3 - п/2]. Историческая справка. Японский математик Ериюки Арима (Yoriyuki Arima) (1714- 1783) рассмотрел эту задачу в своей работе Sbiiki Sanpb (1769), задача 44, заметив, что головоломка с п кольцами сводится к головоломке с (п — 1) кольцами после определенного ряда шагов. Пусть Сп = Ап — An-i = Вп — Вп-1 +1 — количество снятий колец в процессе такого приведения. Арима заметил, что Сп = 2Cn-i — [п четно]; таким образом, он мог бы вычислить Ап = Ci + Сг + ••• + Сп для п = 9 без знания формулы Сп = [2п-1/3]. Более чем двумя столетиями ранее Кардано (Cardano) уже упоминал “complicati annuli”* в своей De Subtilitate Libri XXI (Nuremberg: 1550), Book 15. Он считал их “беспо- лезными и замечательно неуловимыми” ошибочно указав, что для снятия семи колец доста- точно 95 шагов, и еще 95, чтобы вернуть их на место. Джон Уоллис (John Wallis) посвятил этой головоломке семь страниц в латинском издании своей книги Algebra 2 (Oxford: 1693), Chapter 111, представив детально описанные, но не очень эффективные методы решения головоломки с девятью кольцами. Он добавил к операциям снятия и одевания кольца операцию его перемещения по стержню и указал, что возможны улучшения описанного метода, но найти наилучшее решение не пытался. 11. Решением соотношения Sn = Sn-2 + 1 + Sn-2 + Sn-i при Si = S2 = 1 является Sn = 2n-1 — [n четно]. [Math. Quest. Educational Times 3 (1865), 66-67.] 12. (а) Теория n— 1 китайских колец доказывает, что бинарный код Грея дает композицию в удобном порядке (4, 31, 211, 22, 112, 1111, 121, 13). С1. [Инициализация.] Установить t 4— 0, j 4— 1, Si 4— п. (Считаем, что п > 1.) С2. [Посещение.] Посетить si... Sj. Затем установить t 4— 1 — t и перейти к шагу С4, если t = 0. Сложные отмены (итал.). — Примеч. пер.
7.2.1.1 ОТВЕТЫ К УПРАЖНЕНИЯМ 757 СЗ. [Нечетный шаг.] Если Sj > 1, установить Sj Ч— Sj — 1, s^+i Ч— 1, j 4— j + 1; в противном случае установить j ч— j — 1 и Sj ч— Sj + 1. Вернуться к шагу С2. С4. [Четный шаг.] Если Sj-i > 1, установить sj-i ч— Sj-i — 1, Sj+i Ч— Sj, Sj ч— 1, j Ч— j + 1; в противном случае установить j ч— j — 1, Sj Ч— sj+i, Sj-i Ч— s3_j + 1 (но завершить работу алгоритма, если j — 1 = 0). Вернуться к шагу С2. | (б) Теперь gi, ..., qt-i представляют кольца на стержне. В1. [Инициализация.] Установить t ч— 1, до ч— п. (Считаем, что п > 1.) В2. [Посещение.] Установить qt Ч— 0 и посетить (до—Qi) • • (gt-i — qt)- Перейти к шагу В4, если t четно. ВЗ. [Нечетный шаг.] Если gt-i = 1, установить t Ч— t — 1; в противном случае установить gt4—1и{4—t + 1. Вернуться к шагу В2. В4. [Четный шаг.] Если gt-2 = gt-i + 1, установить qt-2 Ч— gt-i и t Ч— t — 1 (но завершить работу алгоритма, если t = 2); в противном случае установить qt ч— gt-i, gt_i ч— qt + 1, t ч— t + 1. Вернуться к шагу В2. | Эти алгоритмы [см. J. Misra, ACM Trans. Math. Software 1 (1975), 285] не содержат циклов даже на этапе инициализации. 13. На шаге С1 установите также С ч— 1. На шаге СЗ установите С Ч— SjC, если Sj > 1, в противном случае С ч— C/(Sj-i + 1). На шаге С4 установите С Ч— Sj~iC, если Sj-i > 1, в противном случае С Ч— C/[Sj-2 + 1). Аналогичные изменения следует внести и в шаги В1, ВЗ, В4. В случае значения С = п! для композиции 1... 1 требуется определенное расширение понятия алгоритма без циклов; примем, что арифметические операции выполняются за единичное время. 14. VI. [Инициализация.] Установить j ч— 0. V2. [Посещение.] Посетить строку ai... aj. V3. [Удлинение.] Если j < п, установить j ч— j + 1, aj Ч— 0 и вернуться к шагу V2. V4. [Увеличение.] Если aj < mj — 1, установить aj Ч-а, + 1 и вернуться к шагу V2. V5. [Сокращение.] Установить j Ч— j — 1 и вернуться к шагу V4, если j > 0. | 15. Л. [Инициализация.] Установить j Ч— 0. J2. [Четное посещение.] Если j четно, посетить строку <ц... aj. J3. [Удлинение.] Если j < п, установить j Ч— j + 1, aj Ч— 0 и вернуться к шагу J2. J4. [Нечетное посещение.] Если j нечетно, посетить строку <ц... aj. J5. [Увеличение.] Если aj < mj — 1, установить aj Ч— aj + 1 и вернуться к шагу J2. J6. [Сокращение.] Установить j ч— j — 1 и вернуться к шагу J4, если j > 0. | Этот алгоритм не содержит циклов, хотя, на первый взгляд, может показаться, что это не так. Последовательные посещения разделяют не более четырех шагов. Основная идея связана с упр. 2.3.1-5 и прямо-обратным обходом (алгоритм 7.2.1.6Q). 16. Предположим, что LINK(j—1) = j+nbj для 1 < j < п и LINK(J—1+n) = j+n(l—bj) для 1 < j < п. Эти связи представляют (ai,... ,ап) тогда и только тогда, когда g(ai... an) = bi.. .bn, так что для получения требуемого результата можно воспользоваться бесцикло- вым генератором бинарного кода Грея. 17. Поместите на пересечении j-й строки и к-го столбца (0 < j, к < 8) конкатенацию трех- битовых кодов (<?(/), <?(&)). [Нетрудно доказать, что это, по сути, единственное решение, за исключением перестановок и/или дополнения позиций координат, и/или циклических сдвигов строк, поскольку координаты, изменяющиеся при перемещении по вертикали,
758 ОТВЕТЫ К УПРАЖНЕНИЯМ 7.2.1.1 зависят только от строк (аналогичное утверждение применимо и к столбцам). Изоморфизм Карно между четырехмерным кубом и тором 4x4 описан в The Design of Switching Circuits by W. Keister, A. E. Ritchie, and S. H. Washburn (1951), page 174. Кстати, Кейстер (Keister) придумал интересный вариант “Китайских колец” под названием SpinOut, а также его обобщение The Hexadecimal Puzzle, U.S. Patents 3637215-3637216 (1972).] 18. Воспользуйтесь двухбитовым кодом Грея для представления цифр Uj = (0,1,2,3) со- ответственно как битовых пар n^j-iUvi = (00,01,11,10). [Ч. Ю. Ли (С. Y. Lee) предложил свою метрику в IRE Trans. IT-4 (1958), 77-82. Аналогичная m/2-битовая кодировка рабо- тает для четных значений т; например, при т = 8 можно представить (0,1,2,3,4,5,6,7) в виде (0000,0001,0011,0111,1111,1110,1100,1000). Но такая схема оставляет в стороне некоторые из бинарных шаблонов при т > 4.] 19. (а) Алгоритм модульного кватернарного кода Грея требует чуть меньше вычислений, чем алгоритм М, но это не имеет значения в силу малости числа 256. Результат имеет вид 2^0 + 21 + ^2 + 2з + 14(20^2 + 212з) + 5б2о212з2з(2о + 2з)(2х + 2з). (б) Замена (20,zi,22,23) на (1,г,г2,г) дает l+112z6+30z8+112zlo+z16; таким образом, все ненулевые веса Ли > 6. Теперь можно воспользоваться этой конструкцией в преды- дущем упражнении для преобразования каждого вектора (uo,ui,U2,t43,t44,t45,ue,u00) в 16- битовое число. 20. Восстановите кватернарный вектор (140,111,142,143,144,115,146,1400) из и' и используйте алгоритм 4.6.1D для поиска остатка от деления t4o+t4ia;4---l-uex6 на д(х) по модулю 4; этот алгоритм можно использовать, несмотря на тот факт, что коэффициенты не принадлежат полю, поскольку д(х) нормирован. Выразим остаток как х-* + 2хк (по модулю д(х) и 4) и положим d = (к — j) mod 7, s = (ио + • • • + + t4oo) mod 4. Случай 1. s = l. Если fc = оо, то ошибка—х? (другими словами, корректный вектор содержит t4j <— (t4j — 1) mod 4); в противном случае имеется три или более ошибок. Случай 2. з = 3. Если j = к, то ошибка---------х?-, в противном случае имеется > 3 ошибок. Случай 3. з = 0. Если j = к = оо, ошибок нет; если j = 00 и к < оо, имеется как минимум четыре ошибки. В противном случае ошибками являются ха — хь, где а = (J + (оо, 6,5,2,3,1,4,0)) mod 7, и соответственно d = (0,1,2,3,4,5,6,00) и b = (y+2d) mod 7. Случай 4- s = 2. Если j = 00, то ошибки — 2хк. В противном случае ошибками являются х? + т°°, если fc = оо; —а;3 — т°°, если d = 0; ха + хь, если d € {1,2,4}, а = (j — 3d) mod 7, b = (J — 2d) mod 7; —ха — xb, если d € {3,5,6}, а = (j — 3d) mod 7, b = (j — d) mod 7. Для заданного и' = (1100100100001111)2 мы имеем и = (2,0,3,1,0,0,2,2) и 2 + За;2 + х3 + 2а;6 — 1 + Зх + За;2 = х3 + 2а;6; а также з = 2. Таким образом, ошибками являются а;2 + х3, а ближайшее безошибочное кодовое слово — (2,0,2,0,0,0,2,2). Алгоритм 4.6.1D говорит нам о том, что 2 + 2а;2 + 2а;6 = (2 + 2х + 2а;3)д(а;) (по модулю 4); так что восемь ин- формационных битов соответствуют (vo,fi,иг,г>з) = (2,2,0,2). [Более интеллектуальный алгоритм мог бы заметить, что это первые 16 бит числа тг.] Об обобщениях других эффективных схем кодирования на основе кватернарных век- торов можно прочесть в классической статье Hammons, Kumar, Calderbank, Sloane, and Sol6, IEEE Trans. IT-40 (1994), 301-319. 21. (a) C(e) = 1, C(0a) = C(la) = C(a) и C(*a) = 2C(a) — [10...Оба]. Итерирование этой последовательности дает С(а) = 2t—2t~1et—2t~2et-i--------20в1,гдее, = [10...0€а^], a aj является суффиксом а, следующим за у-й звездочкой. В приведенном примере ai =
7.2.1.1 ОТВЕТЫ К УПРАЖНЕНИЯМ 759 *10**0*, аг = 10**0*, ..., as = е; таким образом, ei = 0, ег = 1, ез = 1, = 0 и es = 1 (по соглашению), следовательно, С'(**10**0*) = 2® — 24 — 22 — 21 = 10. (б) Можно удалить завершающие звездочки, так что t = t'. Тогда из е« = 1 вытекает et-i = • • • = ei =0. [Случай С(а) = 2*'-1 осуществляется тогда и только тогда, когда а заканчивается 10J*k.] (в) Чтобы вычислить сумму С'(а) по всем t-подкубам, заметим, что (") кластеров начинаются с п-кортежа 0... О, а ("7') кластеров—с последующего n-кортежа (а именно по одному кластеру для каждого t-подкуба, содержащего этот n-кортеж и определяющего изменяемый бит). Таким образом, среднее равно ((7) + (2n — l)(n71))/2n-t(7) = 24(1 — t/п) + 2t-n(i/n). [Формула в (в) справедлива для любого n-битового пути Грея, но (а) и (б) характерны только для рефлексивного бинарного кода Грея. Эти результаты получены в работе С. Faloutsos, IEEE Trans. SE-14 (1988), 1381-1393.] 22. Пусть а*-’ и /3*к являются последовательными листьями бинарного луча Грея, где а и /3 представляют собой бинарные строки, и j < к. Тогда последние к — j бит а представляют собой строку а', такую, что а и (За — последовательные элементы бинарного кода Грея, а следовательно, смежны. [Интересные приложения этого свойства к кубиче- ски связанным (cube-connected) параллельным компьютерам со связью путем передачи сообщений рассматриваются в William J. Dally, A VLSI Architecture for Concurrent Data Structures (Kluwer, 1987), глава 3.] 23. Из 23 = g(k)(Bg(l) = g(k(Bl) вытекает, что I = fc®gf-1!(2-’) = fc®(2^+1 — 1). Другими словами, если fc = (bn-i. • • Ьо)г, то Z = (bn-i • - - bj+ibj ... Ьо)г- 24. Определяя д(к) = fc ф [fc/2j как обычно, найдем д(к) = д(—1 — fc); следовательно, существуют два таких 2-адических целых числа fc, что д(к) имеет заданное 2-адическое значение I. Одно из них четно, второе—нечетно. Удобнее определить, что — четное решение; тогда (8) заменяется на bj = Oj-i ф • • • ф ао для j > 0. Например, согласно этому определению (/"^(l) = —2; если I—обычное целое число, то “знак” д^~ 1'(1)—четность I. 25. Пусть р = к ф Z; из упр. 7.1.3-3 известно, что 2>-1в₽-1+I — р < |fc — /| < р. Имеем р(р(р)) = v{gW ® 9(0) = * тогда и только тогда, когда существуют натуральные числа Ji, • • •, jt, такие, что р = (Р1(Р2Р3 ... (О от 1)л‘)г- Наибольшее возможное число р < 2П получается при ji = п + 1 — t и _?г = • • • = jt = 1, достигая р = 2П — [2*/3]. Наименьшее возможное число q = 2*-lg₽J+1 — р = (l’20is ... (1 or 0)3‘)г + 1 получается при j’2 = • • • = jt = 1, достигая q = [2*/3]. [С. К. Yuen, IEEE Trans. IT-20 (1974), 668; S. R. Cavior, IEEE Trans. IT-21 (1975), 596. Аналогичная граница для модульного m-арного кода Грея равна [mf/(m2 — 1)], и эта формула справедлива и для рефлексивного m-арного кода Грея при четном m; см. van Zanten and Suparta, IEEE Trans. IT-49 (2003), 485-487; Proc. South East Asian Math. Soc. Conf. (Yogyakarta: Gadjah Mada University, 2003), 98-105.] 26. Пусть N = 2n‘ + • • • + 2ni, где nt > • • • > ni > 0; пусть также Гп —произвольный код Грея для {0,1,..., 2П — 1}, который начинается с нуля и заканчивается единицей, за исключением Го, просто равного нулю. Используйте г", г^+Гп,.,, ..., 2П‘+ • • • + 2ПЗ + Г„2, 2П‘+ - + 2П2+ГП1, если t четно; ГП4, г’-Ч-Г*,^, ..., 2П‘+ -- + 2ПЗ+Г" , 2п‘+ - +2П2+ГП1, если t нечетно. 27. В общем случае, если fc = (bn-i... Ьо)г, (fc + 1)-й наибольший элемент Sn равен 1/(2 - (-1)“-7(2 - • /(2 - (-1)“7(2 - (-1)“°)). - )) со структурой знаков д(к) = (an-i ...ао)г- Таким образом, по рангу можно вычислить любой элемент Sn за О(п) шагов. Задав fc = 2100 — 1О10 и п = 100, мы получим ответ
760 ОТВЕТЫ К УПРАЖНЕНИЯМ 7.2.1.1 373065177/1113604409. [Всякий раз, когда f(x) является положительной монотонной функ- цией, 2" элементов /(±/(... ±/(±з:) ...)) упорядочены в соответствии с бинарным кодом Грея, как показал Н. Е. Salzer, САСМ 16 (1973), 180. В данном частном случае, однако, от- вет можно получить и другим путем, поскольку мы также имеем Sn = //2, ±2,..., ±2, ±1// (используя обозначения из раздела 4.5.3). Непрерывная дробь в этом виде упорядочена дополняющими чередующимися битами А:.] 28. (а) Так как t = 1, 2, ..., бит aj медианы (Gt) пробегает периодическую последова- тельность 0,..., 0, *, 1,..., 1, *, 0,..., 0, *,... со звездочками на каждом 21+з-м шаге. Таким образом, строки, соответствующие двоич- ному представлению [(t — l)/2j и [t/2j, являются медианами. И эти строки в действитель- ности являются “экстремальными” в том смысле, что все медианы согласуются с общими битами [(t — 1)/2] и |t/2j, следовательно, звездочки встречаются там, где согласования нет. Например, при t = 100 = (01100100)2 и п = 8 мы получаем медиану Gioo, равную 001100**. (б) Поскольку Gzt = 2Gt U (2Gt +1), можно считать, что t = (an~2 ... aiaol)2 нечетно. Если а равно д(р), а /3 равно д(д) в бинарном коде Грея, то мы имеем р = (рп-1 - • .ро)г и q = (pn-i.. -Pj+iPj .. .р0)2; а an-ian-2 = 01 = pn-iPn-2- У нас не может быть р < t < q, поскольку это повлекло бы за собой j = п — 1 и рп-з = Рп-4 = • • • = ро = 1- [См. A. J. Bernstein, К. Steiglitz, and J. Е. Hopcroft, IEEE Trans. IT-12 (1966), 425-430.] 29. В предположении, что p 0, обозначим I = [IgpJ и Sa = {s | 2* a < s < 2l(a + 1)} для 0 < a < 2n~l. Тогда (к ф p) — к имеет постоянный знак для всех к € Sa и 52 |(fc®p)-fc| =2‘|Sa| = 22'. kesa Кроме того, </-1’(<7(fc) Фр) = А: ф </-1’(р) и [lgд^~1’(p)J = UgpJ- Следовательно, 2п—1 2п~^—1 2п~~1—1 fc=0 a=0 keSa a=0 [Cm. Morgan M. Buchner, Jr., Bell System Tech. J. 48 (1969), 3113-3130.] 30. Цикл, в котором содержится fc > 1, имеет длину 2^lg18 *’+1, поскольку из уравне- ния (7) легко показать, что если к = (bn-i • • - 5о)г, то д12 ’(fc) = (cn-i • • • со)г, где с, = bj ф bj+2i. Чтобы переставить все элементы fc, такие, что [lg fc] = t, есть два варианта: если t является степенью 2, цикл, содержащий 2[fc/2j, содержит также и 2[fc/2j + 1, так что для t — 1 нужно удвоить ведущие элементы цикла. В противном случае цикл, содержащий 2 [fc/2j, не пересекается с циклом, содержащим 2[fc/2j+l, так что Lt = (2Lt-i)U(2Lt-i+l) = (Lt-i*)2- Это рассуждение, открытое Йоргом Арндтом (Jorg Arndt) в 2001 году, дает подсказку и приводит к следующему алгоритму. Р1. [Инициализация.] Установить t 4— 1, тп 0. (Можно считать, что п > 2.) Р2. [Цикл по ведущим элементам.] Установить г <— тп. Выполнить алгоритм Q с к = 2‘ + г; затем, если г > 0, установить г <— (г — 1) & тп и повторять эти действия, пока не будет выполнено условие г = 0. [См. упр. 7.1.3-79.] РЗ. [Увеличение lg fc.] Установить t 4— t + 1. Завершить работу алгоритма, если t равно п; в противном случае установить тп <— 2тп + [t & (t — 1) 0] и вернуться к шагу Р2. |
7.2.1.1 ОТВЕТЫ К УПРАЖНЕНИЯМ 761 Q1. [Начало цикла.] Установить s <- Хк, I <- к, j <- I ф [Z/2J. Q2. [Выполнение цикла.] Пока j к, устанавливать Xi 4— Xj, I 4— j и j 4— l ф [Z/2J. Затем установить Xt ч— s. | Г21 31. Поле из fn получается тогда и только тогда, когда можно получить поле из /п , кото- рая превращает (a„_i ...00)2 в ((an-i ®an-2)(an-i ®ап-3)(ап-2 Фйп-4)... (a2 ®ao)(ai))2. Пусть Сп(ж)—характеристический полином матрицы А, определяющей это преобразова- ние, по модулю 2; тогда ci(x) = х + 1, с2(х) = х2 + х + 1, а сз+1(а:) = xcj(x) + Cj-i(x). Поскольку Cn(A)—нулевая матрица по теореме Кэли-Гамильтона, поле получается тогда и только тогда, когда Сп(х)— примитивный полином, а это условие можно проверить так, как описано в разделе 3.2.2. Первыми такими значениями п являются 1, 2, 3, 5, 6, 9, 11, 14, 23, 26, 29, 30, 33, 35, 39, 41, 51, 53, 65, 69, 74, 81, 83, 86, 89, 90, 95. [Прокручивая это рекуррентное соотношение назад, можно показать, что c-j-i(x) = Cj(x), следовательно, Cj(x) является делителем c^2j+ifk+j(x)', например, сзк+1(ж) всегда кратно х +1. Таким образом, все числа п вида 2jk +j + k исключаются при j > 0 и к > 0. Полиномы cib(jc), С5о(ж), Cgs(x) и С99(ж) неприводимы, но не примитивны.] 32. Почти всегда истинно, но ложно в точках, где шк(х) меняет знак. (Уолш (Walsh) изначально предположил, что функция wk(x) в таких точках должна быть нулевой, но принятое здесь соглашение лучше, так как делает простые формулы наподобие (15)-(19) корректными при всех х.) 33. По индукции по к имеем wk(x) = wLfc/2J (2ж) = Г1(2ж)(’1+(’2г2(2ж)(’2+(’3 ... = n(x)bo+blr2(x)bl+b2r3(x)b2+b3 ... для 0 < х < |, поскольку Tj(2x) = rj+i(x) и Tj(x) = 1 в этом диапазоне. А когда | < х < 1, wk(x) = (-l)rfc/21 wLfc/2J (2х - 1) = n(x)bo+blri(2x - l)bl+b2r2(2x - 1)Ь2+Ьз ... = n(x)bo+blr2(x)bl+b2r3(x)b2+bs ... поскольку [fc/2] = bo + bi (по модулю 2) и Tj(2x — 1) = r1+i(x — |) = rj+i(a:) для j > 1. 34. рк(х) = П3>о гз+1(а:); так чт0 Wk(x) = Pk(a:)pLfc/2j(a:) = pgW(x). [R. E. A. C. Paley, Proc. London Math. Soc. (2) 34 (1932), 241-279.] 35. Если j = (an-i ао)г и к = (bn-i • - • Ьо)г, то элемент на пересечении строки j и столбца к представляет собой (—1)-^.*), где f(j, к)—сумма всех агЬа, таких, что: г = s (матрица Адамара); г + s = п — 1 (матрица Пейли); г + s = п или п — 1 (матрица Уолша). Пусть Rn, Fn и Gn—матрицы перестановок, которые преобразуют j = (an-i .00)2 в к = (ао .. - а„-1)2, к = 2n-l-j = (an-i а0)г и к = g[-1]0) = ((a„-i) ... (a„-i®- • ®a0))2 соответственно. Тогда, используя прямое произведение матриц, мы получим рекурсивные формулы р _ (Rn ® (1 0) \ р _ р к?, (0 1А — (Gn 0 \ Я"+1 oj’ Gn+1 ~ 0 GnFn)’ H бо(1 Л P w _/W„®(ll)\ Hn+i jj, F„+i ^p„0(il)j’ Wn+1 ®(1 T)) ’ Таким образом, Wn = G%Pn = PnGn; Hn = PnRn = RnPn, и F„ = WnGn = G„W„ = HnRn = RnHn. 36. TI. [Преобразование Адамара.] Для к = 0, 1, ..., п — 1 заменить пару (Xj,Xj+2k) парой (Xj + Xj+2k,Xj — Xj+2k) для всех j с четным U/2fcJ, 0 < j < 2". (Эти операции эффективно устанавливают Хт ч— НпХт.)
762 ОТВЕТЫ К УПРАЖНЕНИЯМ 7.2.1.1 Т2. [Обращение битов.] Примените алгоритм из упр. 5 к вектору X. (Эти операции эффективно устанавливают Хт 4— RnXT в обозначениях упр. 35.) ТЗ. [Бинарная перестановка Грея.] Примените алгоритм из упр. 30 к вектору X. (Эти операции эффективно устанавливают Хт G„XT.) | Если п имеет одно из частных значений из упр. 31, может оказаться быстрее объединить шаги Т2 и ТЗ в один шаг перестановки. 37. Если к = 2е1 + • • • + 2е‘, где ei > • • • > et > 0, то изменения знака происходят в Sei U •U Set, где So = |||, Si = |}, ..., Se = | jjrr | 0 < j < 2е}. Следовательно, количество изменений знака в (0.. х) равно [2е^х+1]. Подстановка х = 1/(к + 1) дает I + O(t) изменений; так что l-е изменение находится от 1/{к + 1) на расстоянии не более O(p(fc))/2L18fcJ. [Это рассуждение позволяет утверждать, что имеется бесконечно много пар (к, I), таких, что \zm — l/(fc+l)| = fl ((log fc)/fc). Однако способ явного построения таких “плохих” пар пока не обнаружен.] 38. Пусть to(x) = 1 и tk(x) = иД3а:-1Г2к/311|£/з](Зж), где ш = е2”*^3. Тогда tk{x) обходит вокруг начала координат jfc раза при возрастании ж от 0 до 1. Если sk(x) = оЛ3*1! — тернарный аналог функции Радемахера гк(х), то tk(x) = П3>о sj+i(x)b:’~bi+I при & = (Ь„_1... Ьо)з, как в модульном тернарном коде Грея. 39. (а) Воспользуемся вместо {a,b,c,d,e,f,g,h} символами {жо,®!,... .ж?}. Мы хотим найти перестановку р множества {0,1,..., 7}, такую, что матрица с (—1)Зкхр^^к в строке j и столбце к имеет ортогональные строки; это условие эквивалентно требованию, что (J Ф j') • (p(j) ФР(з')) = 1 (по модулю 2) для 0 < j < j' < 8. Одно решение имеет вид р(0) ...р(7) = 01725634, что дает тождество (a2 + b2+c2+d2 + e2+f2+g2+h2)(A2+B2+C2+D2+E2+F2+G2+H2)=A2+B2+C2+D2+£2+Jr2+g2+'H2, где f \ (а Ь с d е f д h > (А\ В ъ —а d —с f —е h -д в с h д -f —е d с -ь —а с т> с -d —а Ъ д -h —е f D £ — f е h д -ъ —а -d —с Е F д -h е -f —с d —а b F 6 d с —b —а -h -д f е G \н/ ( е -f -д h —а ь с -d / \н/ [Это тождество было открыто в С. F. Degen, Mdmoires de 1’Acad. Sci. St. Petersbourg (5) 8 (1818), 207-219. Связанные октонионы рассматриваются в интересном обзоре J. С. Baez, Bull. Amer. Matb. Soc. 39 (2002), 145-205; 42 (2005), 213, 229-243. См. также J. H. Conway and D. A. Smith, On Quaternions and Octonions (2003).] (б) Решения 16 x 16 не существует. Ближайшее решение имеет вид р(0) . . . р(15) = 0 1 11 2 14 15 13 4 9 10 7 12 5 6 3 8, который нарушается тогда и только тогда, когда j ф j' = 5. (См. Philos. Mag. 34 (1867), 461-475. В §9, §10, §11 и §13 этой статьи Сильвестер сформулировал и доказал основ- ные результаты, которые теперь известны как преобразование Адамара, хотя сам Адамар (Hadamard) ссылается на Сильвестера [Bull, des Sciences MatMmatiques (2) 17 (1893), 240-246]. Кроме того, Сильвестер вводит преобразование тпп элементов в §14, используя m-е корни единицы.)
7.2.1.1 ОТВЕТЫ К УПРАЖНЕНИЯМ 763 40. Да; такое изменение действительно проходило бы через переставленные подмноже- ства в лексикографическом бинарном порядке, а не в порядке бинарного кода Грея. (Любая матрица размером 5x5, состоящая из нулей и единиц и не являющаяся сингулярной по модулю 2, будет генерировать все 32 возможности при проходе по всем линейным комбинациям ее строк.) В таких случаях, как здесь, где любое количество aj может меняться одновременно при одинаковых затратах, наиболее важным является появление линеечной функции или некоторой другой дельта-последовательности кода Грея, а не тот факт, что на каждом шаге выполняется только одно изменение а,. 41. Не более 16; например, fired, fires, finds, fines, fined, fares, fared, wares, wards, wands, wanes, waned, wines, winds, wires, wired. Те же 16 слов мы также получим из пар paced/links и paled/mints; вероятно, то же самое получится и из слова, смешиваемого с несловом-антиподом. 42. Предположим, что п < 22 + г + 1, и пусть в = 2Г. Мы используем вспомогательную таблицу из 2г+® бит fjk для 0 < j < 2® и 0 < к < в, представляющую фокусные указатели, как в алгоритме L, совместно со вспомогательным s-битовым “регистром” j = (js-i -jo)? и (г + 2)-битовым “счетчиком программы” р - (рг-ц . ..ро)г. На каждом шаге мы про- веряем счетчик программы и, возможно, регистр j и один из битов /; затем, на основе просмотренных битов, мы выполняем дополнение бита кода Грея, дополняем бит счетчика программы и, возможно, изменяем бит j или /, тем самым эмулируя шаг L3 по отношению к старшим п — г — 2 битам. Например, вот построение при т — 1. Установить Ло <- /(j+l)0 1 f /0+1)1 w+l)l j Р2Р1Р0 Изменить Установить Р2Р1Р0 Изменить ООО ао,ро jo foo 1 . . 110 ао,ро 00 1 ai,pi ji<-foiJ3 111 ai,Pi Oil ao,po /00 «—0 1 , _ 101 ao,po 0 10 02,P2 /oi 0 J ° 10 0 Oj+3,P2 Процесс останавливается при попытке изменить бит an. [На самом деле на каждом шаге нужно изменять только один вспомогательный бит, если мы позволим себе исследовать вместе со вспомогательными некоторые биты бинарного кода Грея, поскольку рг.. .ро = аг • •. ао, и можно установить /о <— 0 более интеллектуаль- ным способом, когда j не принимает свое окончательное значение 2® — 1. Это построение, предложенное Фредманом в 2001 году, усовершенствует другое его построение, опублико- ванное в SICOMP 7 (1978), 134-146. С помощью улучшенного построения можно снизить количество вспомогательных битов до О(п).] 43. Это количество было оценено Сильверманом (Silverman), Виккерсом (Vickers) и Сэмп- соном (Sampson) [IEEE Trans. IT-29 (1983), 894-901] как приближенно равное 7 х 1022. Г. Хаанпаа (Н. Haanpaa) /and П. Р. И. Остергард (Р. R. J. Ostergard) нашли точное значение d(6) = 71676427445141767741440 в 2011 году, используя симметрию и “склеивая” непе- ресекающиеся пути, конечные точки х которых имеют vx = 3, а внутренние вершины — vx < 3. 44. Каждый n-битовый цикл Грея определяет пару совершенных паросочетаний (см. упр. 55). 45. (а) (000 002 012 010 090 094 0Ъ4 0Ъ6 2Ь6 2Ье 2ае 2а6 226 22е 23е 23с 33с ЗЗе 32е 32с Зас За8 388 38а 18а 182 192 19а 11а 112 102 100) —всего 32 элемента в шестнадцатеричной записи. Обратите внимание, что сигнатуры элементов в каждом цикле обходят код Грея Г4. (б) Заземленной вершине v в ее цикле предшествует ее брат v®2. Если v—заземлен- ная вершина в другом цикле из ее брата и = v ф 1, то можно объединить эти циклы путем
764 ОТВЕТЫ К УПРАЖНЕНИЯМ 7.2.1.1 удаления {и®2— и, v®2— и} и вставки {и — v, иф2— иф2}. Повторите эти действия для всех заземленных вершин v. (в) Рассмотрим мультиграф G', вершины которого являются циклами, а ребра идут от цикла v к циклу v + 1 для всех четных заземленных вершин v. Каждая вершина G' имеет четную степень, так что ребра представляют собой объединение циклов в G'. Таким образом, любое ребро G' может быть удалено без изменения связанных компонентов. (г) Нетрудно построить путь Р = г/0’ — г/1) — — •, проходящий через вершины G, где г>о = I'-i = 0, который проходит через все такие v, для которых <т(г») < 1, и через такие, что G {0,1,2,4,8} для всех г. Возьмем цикл из (б), который содержит г/°\ и назовем его рабочим циклом W. Затем для г = 1, 2, ..., пока W не будет включать все вершины, будем выполнять следующие действия. Если v = W, положим, что и = г/’-1) имеет щ vt. Случай 1. и®с — и является ребром W для с = 1 или с = 2. Возьмем цикл для класса эквивалентности v, который содержит ребро v®c — v. Удалим эти ребра и вставим {и — v, и®с — г»фс}. Случай 2. Иначе на предыдущем шаге к w = г/1-2) и и должен быть применен случай 1. Если с = 1, то W содержит ребро иф2 — ифЗ. Мы можем найти цикл с г»ф2 — г»фЗ и заменить эти ребра на {иф2 — ифЗ, ифЗ—v®3}. Аналогичный обмен ребрами работает и при с = 2. (д) Последний цикл W позволяет нам восстановить Л4ц«) (у). Когда 1(у) 0, функция эквивалентна t = 23г-1 независимым паросочетаниям r-мерного куба, поскольку существует t способов выбрать vt (г Г) с корректной сигнатурой. Так что количество различных циклов—не менее M(r)12t (см. упр. 44). 46. Имеются fc-битовые сигнатуры о (у). Когда в бинарном коде Грея о(у) = g(j), 4.v) = (p(j + l) + b/2fc-l])U + 2 не является степенью 2]. Возникает как минимум Af(r)<2fc_fc)f циклов, где t = 2<*:~1)<r~1)+2. [information Processing Letters 109 (2009), 267-272.] 47. Границы (j)2r 1 < 2г-1!/(2г-1/г)2 1 < M(r) < г!2 = (^ + O(logr))2 доказы- ваются в разделе 7.5.1. Следовательно, d(n)1/2" < п/е + O(logn) в соответствии с упр. 44. Если Gj считать гj-мерным кубом, то из упр. 46 вытекает нижняя граница (M(r1)2’l“ri“fc+1)2fc’1-fc • (M(r2)2n~r3~k+1f~2 (M(r3)2n~r3~k+1f~3 ..... (M(rfc_1)2n’rfc-1’fc+1)2 • (М(гк)2П-Гк~к+1)2 ; но лучше выбрать rj ~ (п — 2)/2J-^=fc' для 1 < j < к вместо использования кубов грубо того же размера. Пусть aj =Tjfe—нижняя граница Af(rj)2 Нижняя границаd(n)1/2" упрощается до Ql/2-fc/2*Ql/4Ql/8 а1/2^а1/2^ = 2-2+(fc-4)/2‘ (i + что равно п/(4е) + O(logn)2 при к = lg п + 0(1). 49. Возьмите любой путь Гамильтона Р от 0... 0 до 1... 1 в (2п — 1)-мерном кубе, такой, как код Сэведж-Винклера, и используйте OP, 1Р. (При п = 1 или п = 2 с помощью данной конструкции получаются все такие циклы, но при п > 2 имеется гораздо больше разных возможностей.) 50. а1(п+1)а^па1з1а2па2 (п+1)а2 • • 3i-iO‘inO‘^(n+l)°‘inO‘^3i-1 -jia^n. 51. Пусть Cj = 2[(2"-1 + j)/nJ и cj = 2[(2"+1 + j)/(n + 2)J. Если n / 3, нетрудно проверить, что 4cj > 8[2"-1/nJ > 2[2"+1/(n + 2)] > c'k для 0<j<nn0<k<n + 2. Следовательно, можно применить теорему D к любому n-битовому циклу Грея с количе- ством переходов Cj, подчеркивая bj копий j и размещая подчеркнутый 0 последним, где bj = 2cj - |c'0+2+d) mod(„+2) - [j = 0], a d выбирается так, что c'd = c'd+l. Эта конструкция
7.2.1.1 ОТВЕТЫ К УПРАЖНЕНИЯМ 765 работает, поскольку I = Ьо-1 bb„-i = 2(cqH — |(соЧ Fc'n+1 — с^ — Са+1) — 1 — c'd—l нечетно. [Следствие В было открыто Т. Бакосом (Т. Bakos) в 1950-х годах и подробно доказано в работе A. Adam, Truth Functions (Budapest: 1968), 28-37. В книге Адама (Adam) представлено также доказательство Г. Поллака (G. Pollak) того, что = ci для всех п; следовательно, можно взять d = 0. См. также J. Р. Robinson and М. Cohn, IEEE Trams. С-30 (1981), 17-23.] 52. Количество различных шаблонов кода в наименьших положениях координаты j не превышает со + • • • + Cj-i. 53. Теорема D дает только циклы с Cj = cj+i для некоторого j, так что она не может давать количества (2,4,6,8,12). Расширение в упр. 50 дает также Cj = cj+i — 2, но не может дать (6,10,14,18,22,26,32). Эти множества чисел, удовлетворяющие условиям из упр. 52, в точности совпадают с теми, которые получаются, если начать с {2,2,4,..., 2"-1} и многократно заменять некоторые пары {с,, c*J, в которых Cj < Ск, парой {cj + 2,Ск — 2}. 54. Предположим, что значениями являются {pi,...,р„}, и пусть Xjk —количество раз, когда pj встречается в (ai,..., а^). Тогда для некоторых к < I должно выполняться (жик,... ,хпк) = (%и, ,xni) (по модулю 2). Но если р—простые числа, изменяющиеся как дельта-последовательность n-битового цикла Грея, то единственным решением будет к = 0 и I = 2". [АММ 60 (1953), 418; 83 (1976), 54.] 55. В действительности для каждого заданного совершенного паросочетания Q в графе Кзп можно за 0(2") шагов найти совершенное паросочетацие R в n-мерном кубе, такое, что Q U R представляет собой Гамильтонов цикл графа К?п. [См. J. Fink, J. Comb. Theory В97 (2007), 1074-1076; Elect. Notes Disc. Math. 29 (2007), 345-351.] 56. [Bell System Tech. J. 37 (1958), 815-826.] 112 канонических дельта-последователь- ностей дают следующее. Класс Пример t Класс Пример t Класс Пример t А 0102101302012023 2 D 0102013201020132 4 G 0102030201020302 8 В 0102303132101232 2 Е 0102032021202302 4 Н 0102101301021013 8 С 0102030130321013 2 F 0102013102010232 4 I 0102013121012132 1 Здесь В—сбалансированный код (рис. 33, (б)), G—стандартный бинарный код Грея (рис. 30, (б)), а Н — комплементарный код (рис. 33, (а)). Класс Н эквивалентен также модульному (4,4) коду Грея в соответствии с упр. 18. Класс с t автоморфизмами соот- ветствует 32 х 24/t из 2688 различных дельта-последовательностей <5о<51 • • .«Sis- Аналогично (см. упр. 7.2.3-00), 5-битовые циклы Грея подразделяются на 237 675 различных классов эквивалентности. 57. В случае только типа 1 изолированными оказываются 480 вершин, а именно вершины из классов D, F, G из предыдущего упражнения. В случае типа 2 граф состоит из 384 компонентов, 288 из которых представляют собой изолированные вершины классов F и G. Имеется 64 компонента с 9 вершинами каждый, из которых 3 принадлежат классу Е, а 6—классу А; 16 компонентов размером 30, в каждом из которых 6 вершин принадлежат классу Н, а 24 — классу С; и 16 компонентов размером 84, в каждом из которых 12 вершин принадлежат классу D, 24 — классу В и 48 — классу I. В случае только типа 3 (или 4) весь граф оказывается связным. [Аналогично все 91392 4-битовых путей Грея оказываются связанными, если путь а/3 рассматривать как смежный с путем aR/3. Виккерс (Vickers) и Сильверман (Silverman) в IEEE Trams. С-29 (1980), 329-331, предположили, что изменений третьего типа будет достаточно для связывания графа n-битовых циклов Грея для всех п > 3.] 58. Если некоторая непустая подстрока /3/3 включает каждую координату четное число раз, то такая подстрока не может иметь длину |/?|, так что некоторый циклический сдвиг
766 ОТВЕТЫ К УПРАЖНЕНИЯМ 7.2.1.1 (3 имеет префикс 7 с тем же свойством четности. Но тогда а не определяет цикл Грея, поскольку мы можем изменить каждое п в 7 обратно в 0. 59. Если а является нелокальным в упр. 58, то таким же является и (3(3, при условии, что q > 1 и что 0 встречается в а больше q 4- 1 раз. Следовательно, начиная с а из (30), но с переставленными местами 0 и 1, мы получим нелокальные циклы для п > 5, в которых координата 0 изменяется ровно 6 раз. [Mark Ramras, Discrete Math. 85 (1990), 329-331.] С другой стороны, 4-битовый цикл Грея не может быть нелокальным, поскольку в нем всегда содержится серия длиной 2; если 8к = 6к+2, элементы {зд, зд+i, Vk+2, ЗД+з} образуют 2-подкуб. 60. Воспользуйтесь конструкцией из упр. 58 с q = 1. 61. Идея заключается в чередовании m-битового цикла U = (no,ui,U2,...) и п-битового цикла V = (vq,vi, V2,...) с образованием конкатенаций — (^<0 Vjo , Hi, Vji, Ut2 r^j'2 ,*••), ®fc — Oo 4* * * 4* Ofc— 1, jk — Oo 4* 4- Ofc— 1, где 000102 . • • представляет собой периодическую строку контрольных битов ааа...; мы переходим к следующему элементу U при а* = 0, в противном случае—к следующему элементу V. Если а.—произвольная строка длиной 2т < 2", содержащая s нулевых битов и t = 2m — s единичных, то W представляет собой (т 4- побитовый цикл Грея при нечетных s и t. Мы имеем ik+i = ik (по модулю 2”1) и jk+i = jk (по модулю 2"), только если I кратно 2т, поскольку ik 4- jk = к. Допустим, что I = 2тс; тогда jk+i = jk 4- tc, так что с кратно 2". (а) Пусть а. = 0111; тогда серии длиной 8 находятся в двух левых битах, а серии длиной > [|r(n)J —в п правых битах. (б) Пусть в—наибольшее нечетное число < 2тг(т)/(г(т) 4- г(п)). Пусть также t = 2" - « и а* = [(fc 4- l)t/2mJ — [kt/2mJ, так что ik = [ks/2m1 и jk = lkt/2mJ. Если серия длиной I находится в т левых битах, то мы имеем ifc+i+i > ik 4- г(rri) 4-1, следовательно, I 4-1 > 2mr(m)/s > r(m) 4- r(ri). А если она находится в п правых битах, то jk+1+i > jk 4- r(n) 4- 1, следовательно, I 4-1 > 2mr(n)/t > 2"lr(n)/(2’nr(n)/(r(m) 4- r(n)) 4- 2) . . , . 2(r(m) 4- r(n))2 , . , . , = r(m) 4- r(n) — -—7—r————r-------7—^ > r(m) 4- r(n) — 1 2mr(n) 4- 2(r(m) 4- r(n)) поскольку r(m) < r(ri). Эта конструкция часто работает и в менее ограниченных случаях. Более подробно серии в кодах Грея рассматриваются в работе L. Goddyn, G. М. Lawrence, and Е. Nemeth, Utilitas Math. 34 (1988), 179-192. 63. Установите а* 4— fc mod 4 для 0 < fc < 210, за исключением а* = 4 при fc mod 16 = 15 или fcmod64 = 42, или fcmod256 = 133. Установите также (50,5’1,52,53,54) 4— (0,2,4,6,8). Затем для fc = 0, 1, ..., 1023, установите 8к 4— jak и jail 4-14- 4а* — jak. (Эта конструкция обобщает метод из упр. 61.) 64. (а) Каждый элемент Uk появляется вместе с {i'fc,i?fc+2m,-.-,i'*.+2”>(2r'-1-i)} и {^fc+i, Vfc+H-2”1, • • •,^fc+n-2m(2’*-1-i)}- Таким образом, перестановка сто...СТ2”>-1 должна быть 2П-1 -циклом, содержащим n-битовые четные вершины и умноженным на произвольную перестановку других вершин. Это условие является и достаточным. (б) Пусть Tj является такой перестановкой, что v i-> v®23, и пусть тгл-(и,щ) представ- ляет собой перестановку (uw)Tj. Если u®w = 2* 4-2-’, то itj(u,w) выполняет отображения и I-+ и ф 2’ и wH w®2‘, тогда как v t-> v Ф 23 для всех других вершин v, так что каждая вершина переходит в соседнюю.
7.2.1.1 ОТВЕТЫ К УПРАЖНЕНИЯМ 767 Если S — произвольное множество С {0,... ,п — 1}, то пусть a(S)— поток всех пере- становок Tj для всех j € {0,..., п — 1} \ S, в порядке возрастания j, повторенный дважды; например, если п = 5, мы имеем ст({1,2}) = тоТзТ4ТоТзГ4. Тогда поток Грея E(i,J,u) = состоит из бп — 8 перестановок, произведение которых представляет собой транспозицию (и иф21ф2-’). Более того, когда этот поток применяется к любой n-битовой вершине v, то все его серии имеют длину не менее п — 2. Можно считать, что п > 5. Пусть <5о-..<52"-1 представляет собой дельта-последова- тельность для n-битового цикла Грея (зд, П, • - -, г>2п-1), в которой все серии имеют длину не менее 3. Тогда произведение всех перестановок в 2"-1-1 S = fj (^(82k-l,82k,V2k-l)^(82k,62k+l,V2k)) к=1 равно (щ 1?з)(цз vt) ... (г>2п-з i?2n-i)(t)2n-2 vo) = (v2"-i • • • vi)(t>2"-2 • • • vo), т. e. удовлетворя- ет условию цикла (a). Более того, все степени (ст(0)Е)* дают при применении к произвольной вершине v серии длиной > п — 2. Повторяя отдельные множители <т({г, j}) или tr({j}) в Е столько раз, сколько нам нужно, мы можем настроить длину <т(0)Е, получив 2n + (2"-1 — 1)(12п — 16) + 2(п — 2)а + 2(п — 1)5 для произвольных целых чисел а, Ь > 0; таким образом, можно увеличить ее длину ровно до 2т при условии, что 2т > 2п+(2п~1— 1)(12п—16)+2(п2—5п+6), согласно упр. 5.2.1- 21. (в) Граница г(п) > п — 41g п + 8 может быть доказана для п > 5 следующим образом. Сначала заметим, что она справедлива для 5 < п < 33, согласно методу из упр. 60-63. Затем заметим, что каждое целое число N > 33 может быть записано как N = т + п или N = т + п + 1 для некоторого т > 20, где п = т — 141g mJ + 10. Если т > 20, то 2т достаточно велико для того, чтобы построение из п. (б) было корректно; следовательно, r(N) > г(т + п) > 2 min(r(m), п — 2) > 2(т — [4 lgmJ + 8) = т + n + 1 — [41g TV — 1 + ej + 8 > TV —41g TV+ 8, где e = 4 lg(2m/TV) < 1 + [TV = m + n], [Electronic Journal of Combinatorics 10 (2003), #R27, 1-10.] Рекурсивное применение (б) дает r(1024) > 1000. 65. Компьютерный поиск дает восемь существенно различных возможных шаблонов (и обратных к ним). Один из них имеет дельта-последовательность 0102031420302404 1234214103234103, достаточно близкую к двум другим. 66. (Решение Марка Кука (Mark Cooke).) Одной из подходящих дельта-последователь- ностей является 012345607012132435657607102135346267015374123625670173142620 65701342146560573102464537571020435376140736304642737035640271327505412102 756415024036542501360254161560431257603257204315762432176045204175163547670 35647570625437242132624161523417514367143164314. (Решения для п > 8 пока что неизвестны.) 67. Пусть V2k+i = V2k и V2k = Ouk, где (uo,ui,... ,u2n-i_i)—произвольный (n — 1)- битовый цикл Грея. [См. Robinson and Cohn, IEEE Trans. C-30 (1981), 17-23.] 68. Да. Вероятно, простейшим способом будет взять (п — 1)-значный модульный тернар- ный код Грея и добавить к каждой его строке 0... 0, 1... 1, 2... 2 по модулю 3. Например, при п = 3 получится код 000, 111, 222, 001, 112, 220, 002, ПО, 221, 012, 120, 201, ..., 020, 101, 212.
768 ОТВЕТЫ К УПРАЖНЕНИЯМ 7.2.1.1 69. (а) Необходимо проверить только те изменения в h, когда одновременно дополняются биты bj-i ...bo, для j = 1, 2, ...; этими изменениями являются соответственно (1110)2, (1101)г, (0111)2, (1011)2, (10011)2, (100011)2, .... Чтобы доказать, что встречаются все п- кортежи, заметим, что 0 < h(k) < 2", когда 0 < к < 2" ип > 3; также /J-1l((a„_i... 00)2) — (bn-i - - .£>0)2, где bo = ao®ai®a2® - • •, bi = ao, b2 = а2фаз®а4ф - • •, Ьз = ao®ai фаз® - • • и bj = aj ф aj+i ф • • • для j > 4. (б) Пусть h(k) = (... 020100)2, где aj = bj ф bj+i ф bo[j < t] Ф bt-1 [t — 1 < 3 < t]. 70. Как и в (32) и (33), можно удалить множитель п!, полагая, что строки с весом 1 упорядочены. Тогда для п = 5 имеется 14 решений, начинающихся с 00000, и 21 решение, начинающееся с 00001. Когда п = 6, имеется 46935 кодов каждого типа (связанных обращением и дополнением). При п = 7 количество монотонных кодов гораздо, неимоверно большее, но при этом все равно очень маленькое по сравнению с общим количеством 7- битовых кодов Грея. 71. Предположим, что отличается от a„j в координате tj, для 0 < 3 < п — 1. Тогда tj = в соответствии с (44) и (38). Теперь (34) говорит нам, что to = п — 1; и если 0 < j < п— 1, мы имеем tj - ((j — l)7rn-i)7rn-i согласно (40). Таким образом, tj = jtrn7r^_i для 0 < j < п — 1, а значение (п — 1)тгп определяется тем, что осталось. (Обозначения для перестановок весьма запутанны, так что всегда разумно выполнить тщательную проверку для нескольких малых случаев.) 72. Дельта-последовательность имеет вид 0102132430201234012313041021323. 73. Пусть Qnj - P„j, и обозначим последовательности (41) и (42) как Sn и Тп. Таким образом, Sn = PnoQniPn2-.. и Тп = QnoPniQn2 , если опустить запятые. Итак, мы имеем Sn+i = QPno 0Q„i IQ^o IPni 0P„2 0Q„3 № 1^3 0P„4 • • •, Tn+i =0Q„o IPno 0Fnl 0Q„2 IQ’j 1F"2 0F„3 0Qn4 1Q«3 •••, где тг = тг„, которые демонстрируют относительно простую взаимную рекурсию между дельта-последовательностями Дп и Еп для Sn и Тп. А именно, если записать Дп = Ф1 О1 Ф2 02 • • • фп-1 Оп—1 фп, Еп = Ф1 Ь1 фг Ьг • • • фп-1 Ьп-1 фп, где каждое фj и i/>j представляет собой строку длиной 2("2j) — 1, то следующие за ними последовательности имеют вид Дп+1 = Ф1 0.1 фг п фиг Ь1тг фгтг п фз аз фц п фзтг Ьзтг ^>4тг п . . . Еп+1 = ф1 п ф1тг п фг Ь2 фз п ф?тг anir фзтг п фь Ь4 фз п ф^тт а4тг фзтг п . . . Например, имеем Дз = 0102101 и Ез = 0212021, если подчеркнуть а и Ь, чтобы отличать их от ф и ф; и Д4 = 010213 Отт 2тг 1тг 2тг Отт 313 1тг = 01021321012313 0, F4 = 03 Отт 3120213 Отт 2тг17г Отт 1тг = 03231202132102 0; здесь аз фь и Ьзфд— пустые. Элементы подчеркнуты для следующего шага. Таким образом, можно вычислить дельта-последовательности в памяти следующим образом. Здесь p[j] = jirn для 1 < 3 < п; Sk = 6к, tk = £к и ш = [<5* и Ек подчеркнуты] для 0 < к < 2"- 1. XI. [Инициализация.] Установить п 4— 1, р[0] 4— 0, во 4— to 4— Uo 4— 0. Х2. [Продвижение п.] Выполнить приведенный ниже алгоритм Y, который вычисля- ет массивы s', t' и и' для следующего значения п; затем установить п 4— п + 1.
7.2.1.1 ОТВЕТЫ К УПРАЖНЕНИЯМ 769 ХЗ. [Готово?] Если п достаточно большое, искомая дельта-последовательность Дп находится в массиве s'; работу алгоритма следует завершить. В противном случае продолжить выполнение алгоритма. Х4. [Вычисление тг„.] Установить р'[0] = п — 1 и p'[j] = p{p(j — 1]] для 1 < j < п. Х5. [Подготовка к продвижению.] Установить p\j] Ч— р' [у] для 0 < j < п; установить sfc ч— s'fc, tk ч— t'k и ик ч— и'к для 0 < к < 2"— 1. Вернуться к шагу Х2. | В приведенных далее шагах фраза “Передавать нечто(/,7), пока Uj = 0” представляет собой сокращение для “если Uj = 0, многократно выполнять нечто (I, j), I ч— I +1, j ч— j +1, пока не будет выполнено условие и3 ф О? Y1. [Подготовка к вычислению Д„+1.] Установить j4—fc4—/ч—Ои U2n-i Ч-1. Y2. [Продвижение у.] Передавать s'{ ч— Sj и и\ ч— 0, пока Uj = 0. Затем перейти к шагу Y5, если Uj < 0. Y3. [Продвижение j и fc.] Установить s't ч— Sj, u'i ч— 1, I ч— I + 1, j ч— j + 1. Затем передавать s'( ч— Sj и и'; ч— 0, пока Uj = 0. Затем установить s[ ч— п, и\ ч— 0, I ч— I + 1. Затем передавать s\ ч— p[tk] и щ ч— 0, пока ик = 0. Затем установить s'i ч— p[tk], u'i ч— 1,1 ч— I +1, к ч— к + 1. И еще раз передавать s'z ч— p[tk] и и\ ч— 0, пока ик = 0. Y4. [Готово с Д„+1?] Если ик < 0, перейти к шагу Y6. В противном случае уста- новить s'i ч— п, u'i ч— 0, I ч— I + 1, j ч— j + 1, fc 4— fc + 1 и вернуться к шагу Y2. Y5. [Завершение Д„+1.] Установить s[ ч— п, u'i ч— 1, I ч— I + 1. Затем передавать s'; ч— p[t[fc]] и и'| ч— 0, пока ик = 0. Y6. [Подготовка к вычислению E„+i.] Установить j ч— к ч— I ч— 0. Передавать t'i ч— tk, пока ик = 0. Затем установить t't ч— п, I ч— I + 1. Y7. [Продвижение у.] Передавать t'i ч— p[sj], пока Uj = 0. Завершить работу, если Uj < 0; в противном случае установить t\ ч— п, I ч— I + 1, j ч— j + 1, к ч— к + 1. Y8. [Продвижение fc.] Передавать t\ ч— tk, пока ик = 0. Затем перейти к шагу Y10, если ик < 0. Y9. [Продвижение к и у.] Установить ч— tk, I ч— I + 1, к ч— к + 1. Затем передавать ч ч— пока ик = 0. Затем установить t\ ч— п, I ч— I + 1. Затем передавать t'i ч— р[в;-], пока Uj = 0. Затем установить t'{ ч— p[sj], I ч— I + 1, j ч— j + 1. Вернуться к шагу Y7. Y1O. [Завершение E„+i.] Установить t't ч— п, I ч— I + 1. Затем передавать t't ч— p[sj], пока Uj = 0. | Для генерации монотонного кода Сэведж-Винклера для достаточно больших п можно сначала сгенерировать, скажем, Дю и Ею или даже Дго и Его- Используя эти табли- цы, подходящая рекурсивная процедура сможет достигнуть высоких значений п с очень небольшими средними накладными вычислительными расходами на один шаг. 74. Если монотонный путь имеет вид зд, ..., U2"-i и если vk имеет вес j, то 2 52 (, Г2ч)+ м+р(зд)) mod 2) -к -252 (~2t)++"(’*’)) mod 2) “ 2’ t>o7 t>0 47 7 Следовательно, максимальное расстояние между вершинами с весами j и j + 1 составляет 2((7-i) + ("J1) + (7+1)) ~ 1- Максимальное значение, приближенно равное 3 • 2п+1/-\/27гп, осуществляется при j, приближенно равном п/2. [Оно всего лишь примерно в три раза 25 Зак. 3331
770 ОТВЕТЫ К УПРАЖНЕНИЯМ 7.2.1.1 больше минимального значения, достижимого при любом упорядочении вершин и равного ^?=о (|j/2j) согласно упр. 7.10-00.] 76. Все канонические дельта-последовательности без трендов дают циклы Грея. 0123012421032101210321040123012(1) 0123012421032101301230141032103(1) 0123012421032102032103242301230(2) 0123012421032102123012343210321(2) 0123012423012302012301242301230(2) 0123410121030143210301410123410(3) (Вторая и четвертая последовательности циклически эквивалентны.) 76. Если vo,..., «2"-1 не имеет тренда, то то же самое справедливо и в отношении (п+1)- битового цикла Ог>о, 1зд, lfi, 0щ, 0г>2,1 «г, , 1«2" -1, 0t>2n -1 • На рис. 34, (ж) показана более интересная конструкция, которая обобщает первое решение упр. 75 до (п + 2)-битового цикла 00Г"д, 01Г'д, 11Г', ЮГ", ЮГ, ИГ'", 01Г"/Д, 00Гд, где Г—n-битовая последовательность р(1), ..., р(2п-1) и Г' = Г ф р(1), Г" = Г ф р(2п-1), Г'" = Гфр(2п-1+1). [n-битовая структурабез тренда, которая является почти кодом Грея, имея только четыре шага, где v(i>fc ®«hi) = 2, была найдена для всех п > 3 Ч. С. Ченгом (С. S. Cheng), Proc. Berkeley Conf. Neyman and Kiefer 2 (Hayward, Calif.: Inst, of Math. Statistics, 1985), 619-633.] 77. В описании шага Hl замените массив (on-i,-.-,oo) массивом ограничителей (sn~i, ... ,so) с Sj <— mj — 1. На шаге Н4 установите а> <— (а> + 1) modmj. Если на шаге Н5 выполняется условие aj = Sj, установите Sj -f— (sj — 1) modmj, fj -f— fj+i, fj+i <— j + 1. 78. В случае (50) обратите внимание, что Bj+i представляет собой количество отражений в координате j, поскольку координата j пропускается на шагах, кратных mj ... то. Сле- довательно, если bj < mj — 1, увеличение bj на 1 вызывает соответствующее увеличение или уменьшение aj на 1. Кроме того, если bi = mi — 1 для 0 < i < j, замена всех этих bi на 0 при увеличении bj приведет к увеличению каждого из Во, ..., Bj на 1, тем самым оставляя значения ао, ..., aj-i в (50) неизменными. В случае (51) заметим, что Bj = mjBj+i+bj =mjBj+i+aj + (m,j — l)Bj+i = aj+Bj+i (по модулю 2); следовательно, Bj = aj + aj+i + • • и очевидно, что (51) эквивалентно (50). В модульном коде Грея для оснований (mn~i,..., то) примем (Ln— 1, •••» G2j Glj GO ТПп— 1, , П12, Ш1, Ш0 когда к определяется в (46). Тогда aj = (bj — Bj+i) modmj, поскольку координата j увеличивается по модулю mj ровно Bj — Bj+i раз, если начать с (0, ...,0). Обратная функция, которая определяет значения b из модульного кода Грея а, в частном случае, когда каждое mj является делителем m,j+i (например, если все mj равны) имеет вид bj = (aj + aj+i + aj+2 + • • ) modmj. Но в общем случае обратная функция простого вида не имеет; ее можно вычислить с помощью рекуррентных соотношений bj = (aj+Bj+i) modmj, Bj = mjBj+i + bj для j = n — 1, ..., 0, начиная c Bn = 0. [Рефлексивные коды Грея для основания т > 2 были предложены Айвеном Флоресом (Ivan Flores) в IRE Trans. ЕС-5 (1956), 79-82; он вывел (50) и (51) для случая, когда все mj равны. Модульные коды Грея с общими смешанными основаниями неявно рассмотрены Джозефом Розенбаумом (Joseph Rosenbaum) в АММ 45 (1938), 694-696, но без формул преобразований; формулы преобразований, когда все mj имеют общее значение т, были опубликованы Мартином Коном (Martin Cohn), Information and Control в (1963), 70-78.]
7.2.1.1 ОТВЕТЫ К УПРАЖНЕНИЯМ 771 79. (а) У последнего n-кортежа всегда an~i = rrin-i — 1, так что он находится на рас- стоянии одного шага от (0,..., 0), только если mn-i = 2. Это условие достаточно, чтобы сделать последним п-кортежем (1,0, ...,0). [Аналогично последний подлее, выводимый алгоритмом К, смежен с начальным тогда и только тогда, когда крайнее слева дерево является изолированной вершиной.] (б) Последний n-кортеж имеет вид (m„_i — 1,0,... ,0) тогда и только тогда, когда rrin-i... m,j+i mod mj = 0 для 0 < j < п — 1, поскольку bj = mj — 1 и Bj = mn-i... mj — 1. 80. Пройдите все p“1 ... p“‘ с использованием рефлексивного кода Грея с основаниями тз = ез + 1- 81. Первый цикл содержит ребро от (х, у) др (х, (у + 1) mod тп) тогда и только тогда, когда (х + у) mod тп тп — 1, тогда и только тогда, когда второй цикл содержит ребро от (х, у) до ((а; + 1) mod тп, у). 82. Имеется два 4-битовых цикла Грея (uo,...,ujb) и (vo,. .. ,vib), которые покрыва- ют все ребра четырехмерного куба. (В самом деле, неребра классов А, В, D, Н и I в упр. 56 образуют циклы Грея в тех же классах, что и их дополнения.) Следовательно, с помощью 16-ричного модульного кода Грея можно образовать четыре искомых цикла (uoUo,UoUi, , U0U15, U1U15, , U15U0), (U<)UO,U1UO, , U15UO, U15U1, , U0U15), (vqVO, , V15V0), (vo«o, • - , wis). Аналогично можно показать, что существует п/2 п-битовых циклов Грея с непересе- кающимися ребрами при п, равном 16, 32, 64 и т. д. [Abbandlungen Math. Sem. Hamburg 20 (1956), 13-16.] Ж. Обер (J. Aubert) и Б. Шнайдер (В. Schneider) [Discrete Math. 38 (1982), 7-16] доказали, что то же свойство выполняется для всех четных значений п > 4, но неизвестно ни одной простой конструкции. 83. Марк Кук (Mark Cooke) нашел следующее несимметричное решение в декабре 2002 года. (1) 2737465057320265612316546743610525106052042416314372145101421737 2506246064173213107351607103156205713172463452102434643207054702 4147356146737625047350745130620656415073123731427376432561240264 3016735467532402524637475217640270736065105215106073575463253105 (2) 0616713417232175171671540460247164742473202531621673531632736052 6710141503047313570615453627623241426465272021632075363710750740 3157674761545652756510451024023107353424651230406545306213710537 2620501752453406703437343531502602463045627674152752406021610434 (3) 3701063751507131236243765735103012042353747207410473621617247324 6505132565057121565024570473247421427640231034362703262764130574 0560620341745613151756314702721725205613212604053506260460173642 6717641743513401245360241730636545061563027414535676432625745051 (4) 6706546435672147236210405432054510737405170532145431636430504673 4560621206416201320742373627204506473140171020514126107452343672 1320452752353410515426370601363567307105420163151210535061731236 4272537165617217542510760215462375452674257037346403647376271657 (Каждая из этих дельта-последовательностей должна начинаться с одной и той же верши- ны куба.) Имеется ли симметричное решение поставленной задачи? 84. Если обозначить исходное положение как (2,2), то 8-шаговое решение будет иметь вид, показанный на рис. А.1, т. е. представляет собой последовательность, доходящую до (0,0). Например, на первом шаге передняя половина веревки обходит вокруг и под правой “расческой^ затем проходит через большую правую петлю. Среднюю линию на рисунке
772 ОТВЕТЫ К УПРАЖНЕНИЯМ 7.2.1.1 Рис. А.1. Решение головоломки. нужно рассматривать справа налево. Обобщение на случай п пар петель требует 3" — 1 шагов. [Происхождение этой замечательной головоломки не совсем ясное. В книге The Book of Ingenious Sc Diabolical Puzzles Джерри Слокама (Jerry Slocum) и Джека Ботерманса (Jack Botermans) (1994) показаны версия головоломки с двумя петлями, вырезанная из рога и, вероятно, сделанная в Китае около 1850 года [с. 101], а также современная версия с ше- стью петлями из Малайзии (около 1988 года) [с. 93]. У Слокама имеется версия с четырьмя петлями, сделанная из бамбука в Англии примерно в 1884 году. Он нашел ее в книгах Henry Novra, Catalogue of Conjuring Tricks and Puzzles (1858 или 1859) и W. H. Cremer, Games, Amusements, Pastimes and Magic (1867), а также в каталоге Хамли (Hamley) 1895 года под названием “Удивительное каноэ” См. также U.S. Patents 2091191 (1937), D172310 (1954), 3758114 (1973), D406866 (1999). Дикман (Dyckman) заметил связь данной головоломки с рефлексивным тернарным кодом Грея в письме Мартину Гарднеру (Martin Gardner), датированном 2 августа 1972 года.] 85. Согласно (50) элемент [&’&,] произведения Г 1 Г' представляет собой ааа'а,, если t'D ~ It’ е] в Рефлексивном коде Грея для оснований Теперь можно показать, что элемент [&’*,’£„] обоих произведений—и (Г 1 Г7) I Г", и ГI (Г* I Г" ) — представляет собой ааа'а,а"„, если д([£’ £„]) = [“• “ • “,] в рефлексивном коде Грея для оснований (t,t',t"). См. упр. 4.1-10, а также обратите внимание на правило смешанных оснований [X1 . . . * . Хп "1 Г 1 ~~ X1 • .... TThn 1 Хп = 7711, j 77ln J L 7711 у • • > Т71п В общем случае рефлексивный код Грея для оснований (mi,... ,mn) представляет собой (0,..., mi — 1) 1 • • • 1 (0,..., тп — 1). [Information Processing Letters 22 (1986), 201-205.]
7.2.1.1 ОТВЕТЫ К УПРАЖНЕНИЯМ 773 Итп(п+1) 86. Пусть Гтп—рефлексивный m-арный код Грея, который можно определить как Гт0 = f и Гт(п+1) = (0,1,..., m - 1) I Гтп, п > 0. Этот путь проходит от (0,0,..., 0) до (тп — 1,0,..., 0) при четном т. Рассмотрим путь Грея Пгт, определяемый как Пто = 0 и (0,1,..., тп — 1) 1 Птп, 7тгГ^„+1)п, если т нечетно; (0,1,..., т) I Птп, тГт„, если т четно. Этот путь проходит по всем (т + 1)" — тп неотрицательным целым n-кортежам, для которых max(ai,..., a„) = тп, начиная с (0,..., 0, тп) и заканчивая (тп, 0,..., 0). Искомый бесконечный путь Грея имеет вид По„, ПД, П2п, ПД,, .... 87. Это невозможно при нечетном п, поскольку n-кортежи с max(|ai |,..., |an|) = 1 вклю- чают |(3П + 1) кортежей с нечетной четностью, и |(3П — 3) —с четной. При тг = 2 можно использовать спираль So, Si, S2, , где Em закручивается против часовой стрелки от (тп, 1 — тп) до (тп, —тп) при тп > 0. Для четных значений тг > 2, если Тт представляет собой путь п-кортежей от (тп, 1 — тп, тп —1,1 — тп,..., тп —1,1 — тп) до (тп, —тп,тп, —тп,..., тп, —тп), можно использовать Ет 1(7о,• • .,?т-1)я,(Ео,...,Ет)я<7т для (п + 2)-кортежей с тем же свойством, где I—дуальная операция ГI Г' = (qoqo> — , а«-1«о, at-iai, • , аоа1>аоа2> — , at-ia2i at—ia3> - - - )- [Бесконечные тг- мерные коды Грея без ограничения величины впервые были построе- ны в работе Е. Vdzsonyi, Ada Litterarum ac Scientiarum, sectio Scientiarum Mathematicarum 9 (Szeged: 1938), 163-173.] 88. Он вновь посетит все подлеса, но уже в обратном порядке, заканчивая (0,..., 0) и возвращаясь в состояние, которое имел после инициализирующего шага К1. (Этот принцип отражения является ключевым в понимании работы алгоритма К.) 89. (а) Пусть Mo = е, Mi = • и М„+2 = • М„+1, —М„. Такая конструкция работает, поскольку последний элемент М„+1 является первым элементом Mn+i, а именно точкой, за которой следует первый элемент Мя. (б) Для заданной строки di...di, где каждое dj является • или —, можно найти ее преемника, полагая fc = I — [ф = •] и действуя следующим образом: если fc нечетно и dk = •, заменить dkdk+i на —; если fc четно и dk = —, заменить dk на в противном случае уменьшить fc на 1 и повторять описанные действия до тех пор, пока не произойдут изменения или пока не будет достигнуто значение fc = 0. Следующим за указанным в условии словом является слово --•••• — • — •. 90. Цикл может существовать только тогда, когда количество слов кода четно, поскольку число тире изменяется на каждом шаге на ±1. Таким образом, должно быть п mod 3 = 2. Пути Грея Мп из упр. 89 не подходят; они начинаются с (. — )Ln/3J .n mod 3 и заканчиваются ( — •) Ln/3J. I” mod 3=11 — mod 3=21. Но M3fc+1 •, МД — представляет собой гамильтонов цикл в графе кода Морзе при п = 3fc + 2. 91. Указанное условие эквивалентно тому, что п-кортежи 01020304... не имеют двух последовательных единиц. Такие n-кортежи соответствуют последовательностям кода Морзе длиной n + 1, если добавить 0, а затем представить «и — соответственно как 0 и 10. В таком случае можно преобразовать путь M„+i из упр. 89 в процедуру наподобие алгоритма К с каймой, содержащей индексы начала каждой точки и тире (за исключением последней точки). U1. [Инициализация.] Установить а3 4— [((j — 1) mod6)/3j и fj 4— 3 для 1 < j < п. Также установить fo ч- 0, го ч— 1, h ч— 0, Tj 4— 3 + (j mod 3) и li+^ mod 3) ч— j для
774 ОТВЕТЫ К УПРАЖНЕНИЯМ 7.2.1.1 1 < j < п, за исключением того, что если j + (j mod 3) > п, то установить г, ч— О и /о <— 3- (Сейчас “кайма” содержит 1, 2, 4, 5, 7, 8, ....) U2. [Посещение.] Посетить n-кортеж (щ,... ,an). U3. [Выбор р.] Установить q <— lo, р ч— fg, fg <— q. U4. [Проверка ap.] Завершить работу алгоритма, если р = 0. В противном случае установить ар ч— 1 — ар и перейти к шагу U6, если сейчас ар + р четно. U5. [Вставка р + 1.] Если р < п, установить q Ч— гр, 1д ч— р + 1, rp+i ч— q, гр ч— р + 1, /Р+1 ч— р. Перейти к шагу U7. U6. [Удаление р + 1.] Если р < п, установить q ч— rP+i, гр ч— q, 1д ч— р. U7. [Пассивизация р.] Установить fp ч— fip и fip ч— /р. Вернуться к шагу U2. | Этот алгоритм можно также получить как частный случай существенно более общего метода Ганга Ли (Gang Li), Фрэнка Раски (Frank Ruskey) и Д. Э. Кнута (D. Е. Knuth), который расширяет алгоритм К, позволяя пользователю указать для каждой пары (р, q) типа (родитель, потомок) либо ар > ад, либо ар < ад. [См. Knuth and Ruskey, Lecture Notes in Computer Science 2636 (2004), 183-204.] Обобщение в другом направлении, которое порождает все строки длиной п, которые не содержат определенных подстрок, открыто М. Б. Сквайром (М. В. Squire), Electronic J. Combinatorics 3 (1996), #R17, 1-29. Кстати, забавно отметить, что отображение fc д(к)/2 представляет собой взаимно однозначное соответствие между всеми бинарными n-кортежами, в которых нет серий еди- ниц нечетной длины, и всеми бинарными n-кортежами, в которых нет последовательных единиц. 92. Да, поскольку ориентированный граф всех (п — 1)-кортежей (zi,... ,zn-i) с zi,..., zn-i < т и с дугами (xi,... ,zn_i) —> (z?, . ,хп) в случае max(zi,... ,zn) = т является связным и сбалансированным; см. теорему 2.3.4.2G. Действительно, такая последователь- ность получается из алгоритма F, если заметить, что последние fc" элементов простых строк длины, делящей п, при вычитании из т — 1 одни и те же для всех т > к. Например, при п = 4 первой 81 цифрой последовательности $4 является 2—aR = 0000101 ООН ..., где а—строка (62). [Существуют также бесконечные m-арные последовательности, первые тп" элементов которых представляют собой циклы де Брейна для всех п для заданного фиксированного т > 3. См. L. J. Cummings and D. Wiedemann, Cong. Numerantium 53 (1986), 155-160.] 93. Цикл, генерируемый /(), является циклической перестановкой al, где а имеет длину тп — 1 и завершается I"-1. Цикл, генерируемый алгоритмом R, представляет собой цикли- ческую перестановку 7 = со-..стП+1_1, где с* = (со+ЬоЧ l-hfc-i) mod тп ибо • -5mn+i_i = 0=ат1т. Если хо - Хп имеется в 7 (скажем, Xj=Ck+j для 0<j <п), то yj = bk+j для 0<j<п, где yj - (xj+i — Xj) modm. [Это связь с модульным тп-арным кодом Грея; см. упр. 78.] Те- перь, если уо .. -уп-1 = 1”, то имеем тп"+1—тп—п < к < тп"+1—п; в противном случае существу- ет индекс к', такой, что —п < к' < тп" — тг и уо ... г/n-i встречается в 0 в позициях к = (к' + г(тп" — 1)) mod тп"+1 для 0 < г < тп. В обоих случаях тп вариантов выбора fc имеют различ- ные значения хо, поскольку сумма всех элементов в а равна тп— 1 (по модулю тп) для тг > 2. [Алгоритм R корректен и при тг = 1, если тп mod 4^2, поскольку в этом случае тп ± а-] 94. 0010203041121314223243344. (Подчеркнутые цифры вставлены в чередование 00112234 с 34. Алгоритм D можно использовать в общем случае при тг -- 1 и г = тп—2 > 0; однако это бессмысленно ввиду (54).) 95. (а) Пусть C0C1C2... имеет период г. Если г нечетно, то р = q = г, так что г = pq только в тривиальном случае р = q = 1 и ао = Ьо- В противном случае, согласно 4.5.2-(10),
7.2.1.1 ОТВЕТЫ К УПРАЖНЕНИЯМ 775 т11 — lcm(p, g) = pg/gcd(p, д), следовательно, gcd(p, д) = 2. В последнем случае 2п-кортежи QCI+1 ...с1+2п-1 будут иметь вид ajbk...a-j+n-ibk+п-! для 0 < j < р, 0 < к < q, j = к (по модулю 2) и b/cOj ... b/c+n-iaj+n-i для 0 < j < р, 0 < к < д, j £ к (по модулю 2). (б) В выводе будут перемежаться две последовательности, aoai... и bobi - - •, периоды которых соответственно равны тп + г и тп — г; последовательность из а образует цикл /() с хп, замененными на xn+1, а последовательность из b образует цикл /'() с хп, замененными на х"-1, для 0 < х < г. Согласно (58) и п. (а) период равен т2п — г2 и каждый 2п-кортеж встречается с исключением (ху)п для 0 < х,у < г. (в) Реальный шаг D6 изменяет поведение (б) переходом к D3 при t > п, t' = п и 0 < х' = х < г; это изменение приводит к выводу дополнительного х сразу после вывода х2”-1 и перед выводом Ь, где b представляет собой цифру, следующую в цикле за xn. D6 также позволяет передать управление D7, а затем D3 с t' = п в случае t > п и х < х' < г; это поведение приводит к выводу дополнительного х'х сразу после вывода (хх')п~1х с последующим выводом Ь. Эти г2 дополнительных цифр дают г2 недостающих 2п-кортежей из (б). 96. (а) Например, когда п = 5, сопрограмма верхнего уровня типа R вызывает сопрограм- му типа D для п = 4, которая вызывает две сопрограммы типа S для п = 2; следовательно, Rs = £>5 = 1 и S$ = 2. Рекуррентные соотношения 7?г = 0, Rzn+i = 1 + Т?2п, /?2п = 2/?п, D2 = 0, О2п+1 = О2п = 1 + 2Dn, S2 = 1, &n+i = S2n = 2S„ имеют решение Rn = п — 2Sn, Dn = Sn — 1, Sn = 2LlgnJ-1. Таким образом, Rn + Dn + Sn n — 1. (б) Каждый вывод верхнего уровня обычно включает [lg nJ—1 D-активизаций и i/(n) — 1 R-активизаций, плюс одну базовую активизацию на нижнем уровне. Однако имеется исключение: алгоритм R может вызвать свою сопрограмму /() дважды, если первая активизация завершает последовательность 1"; и иногда алгоритму R вызов /() не тре- буется вовсе. Алгоритм D может вызывать свои сопрограммы /'() дважды, если первая активизация завершает последовательность (х')п для х' < г; но иногда алгоритму D вовсе не требуются вызовы /() или /'(). Алгоритм R завершает последовательность хп+1 тогда и только тогда, когда его дочерняя сопрограмма /() только что завершила последовательность 0". Алгоритм D 2n j. завершает последовательность х для х < г тогда и только тогда, когда он только что совершил переход от Е>6 к D3 без вызова какой-либо дочерней сопрограммы. Из этих наблюдений можно заключить, что, когда сопрограмма для тпп-цикла про- изводит последнюю цифру серии хп или первую цифру, следующую за такой серией, никаких исключений не возникает. Следовательно, наихудший случай реализуется тогда, когда сопрограмма верхнего уровня активизирует подсопрограмму дважды, всего выпол- няя 2 [lg nJ + 2р(п) — 3 активизаций. 97. (а) (ООН), (00011101), (0000101001111011) и (000001100010110111110011101010 01). Таким образом, j2 = 2, J3 = 3, jt = 9, Jo = 15. (б) Очевидно, что fn+i(k) = E/„(fc) mod 2 для 0 < к < jn + п. Следующее значение, fn+i(jn + п), зависит от того, выполняется ли переход от шага R4 к шагу R2 после вычисления у = fn(jn + п — 1). Если выполняется (а именно, если /n+i(jn + п — 1) 0), то мы имеем fn+i(k) = 1 + E/n(fc + 1) для jn + n < к < 2" + j„ + п\ в противном случае fn+i(k) = 1 + E/n(fc — 1) для таких значений к. В частности, fn+i{k) = 1 при 2П < к + <5П < 2П + п. Предложенная формула, которая имеет более простые диапазоны для индекса к, выполняется потому, что 1 + E/n(fc ± 1) = E/„(fc), когда jn < к < jn + п или 2n+j„ <к <2n+jn + n. (в) Перемежаемый цикл имеет Cn(2fc) = fn(k) и Cn(2fc + 1) = f~(к), где ,+_ ( fn(k-l), если 0 < к < jn+1; , _ ( /„(fc+1), если 0 < к < jn; " I fn(k—2), если jn+l < к < 2п+2; " [ /n(fc+2), если jn < к < 2П—2;
776 ОТВЕТЫ К УПРАЖНЕНИЯМ 7.2.1.1 ЛГ(^) = fn mod (2п+2)), /„ (к) — f„ (к mod (2П—2)). Следовательно, последовательность I2"-1 начинается с позиции кп = (2П-1 — 2)(2П+ 2) + 2j„ + 2 в цикле Сп', это делает j2n нечетным. Подпоследовательность (01)п-10 начинается с позиции ln = (2n“1 + l)(j„ — 1), если jn mod 4 = 1, и с позиции ln = (2n-1 + l)(2n+ jn — 3), если jn mod 4 = 3. Кроме того, к2 = 6, 1'2 = 2. (г) Алгоритм D вставляет четыре элемента в цикл Сп', следовательно, когда jn mod4<3 (ln<kn)'- {Сп(к—1), если 0<fc<Zn+2; Сп(к—3), если 1п+2<к<кп+3; Сп(к—4), если fcn+3<fc<22n; когда jn mod4=3 [кп<1п)- {Сп(/с—1), если 0<fc<fc„+l; Сп(к—2), если fcn+l<fc<Zn+3: Сп(к—4), если Z„+3<fc<22n. (д) Следовательно, j2n = кп + 1 + 2[jn mod 4 < 3]. Действительно, элементы, предше- ствующие 12п, состоят из 2П-2 — 1 полных периодов fn(), перемежаемых 2П~2 полными периодами /„ (), с одним вставленным элементом 0, а также с элементом 10, вставленным, если In < кп, после чего следует /п(1)/п(1)/п(2)/п(2)... fn(jn - l)/n(jn - 1). Сумма всех этих элементов нечетна, если только не выполняется условие 1п < кп-, следовательно, <52п = 1 - 2[jn mod 4 = 3]. Пусть п = 2* q, где q нечетно и п > 2. Эти рекурентные соотношения подразумевают, что, если q = 1, мы имеем jn — 2n-1 + bt, где bt = 2f/3— (—l)f/3. А если q > 1, то мы имеем jn = 2n-1±bt+2, где знак + выбирается тогда и только тогда, когда [lg д] + [[4д/2^8’JJ =5] четно. 98. Если f(k) = д(к), когда fc лежит в определенном диапазоне, имеется константа С, такая, что E/(fc) = С + Eg(fc) для fc в этом диапазоне. Следовательно, можно продол- жить и почти без привлечения головного мозга вывести дополнительные рекуррентные соотношения: если п > 1, то Sy2n(fc), когда jn mod 4 < 3 (ln < fcn): когда jn mod 4 = 3 (fcn < In)- {Ec„(fc—1), если 0 < fc < Zn+2; (Ec„(fc- 1), если 0 < fc < fcn+l; 1+Ec„(fc—3), если Zn+2 < fc < fcn+3; = < 1+Ec„(fc—2), если fcn+l < fc < Z„+3; Ecn(fc—4), если fcn+3 < к < 22n; I Ecn(fc—4), если Z„+3 < fc < 22n. Ecn(fc) = E/+(Ffc/2]) + E/-(|fc/2J). ^+Zfc\=f если 0<fc<jn+l; yf-(fc\={ ^fn(k+1^’ если0<(г<уп; Vn( ^-|1+Eyn(*._2), если jn+l<fc<2"+2; fn ( l+E/„(fc+2), если j„<fc<2n-2; E/„ (fc) = |_fc/(2n ± 2)J + E/n (fcmod (2n ± 2)); E/„(fc) = E/„(fcmod2n). У f ffcl = I (fc), если 0 < fc < jin или 22n + j2n <k< 22n+1; J2n+il | j + k + EE/2n(fc + 52n)> ecjm j2n < fc < 22" + j2n. EE/2n(fc), когда jn mod4<3 (ln<kn): когда jn mod4=3 (fc„<Zn): {EEc„(fc—1), если 0<fc<Zn+2; f EEc„(fc—1), если 0<fc<fcn+l; l+fc+EEc„(fc—3), если Zn+2<fc<fcn+3; =< l+fc+EEc„(fc—2), если fcn+l<fc<?n+3; EEcn(fc—4), если fcn+3<fc<22n; I l+EEcn(fc—4), если Zn+3<fc<22n. EE/2n(fc) = [jn mod4 < 3]|fc/22nJ + EE/2n(fc mod22n). И тогда имеется замыкание: EEc„(2fc) = E/+(fc), EEc„(2fc + 1) = E/“ (fc). Если n = 2*q, где q нечетно, то время вычисления fn(k) с помощью этой системы рекурсивных формул составляет O(t + S(g)), где S(l) = 1, S(2k) = 1 + 2S(k) и S(2k + 1) =
7.2.1.1 ОТВЕТЫ К УПРАЖНЕНИЯМ 777 1 + S(k). Ясно, что S(k) < 2к, так что вычисление включает не более О(п) простых операций с n-битовыми числами. На самом деле этот метод часто значительно быстрее: если усреднить S(k) по всем к, таким, что [1g кJ = s, то мы получим (3s+1 — 2s+1)/2s, что меньше, чем 3fclg^3^2^ < 3fc059. (Кстати, если fc = 2s+1 — 1 — (2s-ei + 2s-ez Ч-1- 2s-e‘), где О < ei < • < et, мы получим S(k) = s + 1 + et + 2et-i + 4et-2 4-1- 2t-1ei.) 99. Строка, начинающаяся с позиции fc в /„(), начинается с позиции к+ = к +1 + [fc > Jn] в fn() ис позиции fc- = fc — 1 — [fc > jn] в f~ (), с тем исключением, что 0" и 1" дважды встречаются в f„ (), но их вовсе нет в /„ (). Чтобы найти 7 = аоЬо - - Qn-ibn-i в цикле /2п(), обозначим а = ао-..ап-1 и /? = Ьо ... Ьп-1- Предположим, что в /„() а начинается с позиции j, а 0—с позиции fc и что ни а, ни 0 не представляет собой 0п или 1п. Если j+ - fc+ (по модулю 2), положим, что 1/2 является решением уравнения j+ + (2П+ 2)х = к~ + (2П— 2)у; можно получить 1/2 = к + (2n— 2)(2n~3(j — fc)mod(2n-1 + 1)), если j > к, в противном случае 1/2 = j + (2n+ 2)(2n-3(fc — j)mod(2n-1 — 1)). Иначе положим (I — 1)/2 = к+ + (2П+ 2)х = j~ + (2П— 2)у. Тогда -у начинается с позиции I в цикле <?„(); следовательно, она начинается с позиции I + 1 + [Z > fc„] + 2[Z > Z„] в цикле /гп(). Аналогичные формулы выполняются, когда справедливо условие a G {0n, 1"} или 0 6 {0n, 1"} (но не оба условия одновременно). Наконец 02п, 12п, (01)п и (10)п нечинаются соответственно в позициях 0, j2n, Zn+l+[fcn < Zn] и ln + 2 + [fcn < Zn]. Чтобы найти 0 = bobi... bn в fn+i () для четного n; предположим, что п-битовая строка (Ьо ФZ>i) ... (Ьп-i ФЬп) начинается с позиции j в /„(). Тогда 0 начинается с позиции к = j — <£n[j >jn] + 2n[j = jn][<5n = 1], если /n+i(fc) = bo, в противном случае с позиции fc + (2П — 8п,6п,2п+ 8„) для соответственно (j<jn,j=jn,j>jn). Время работы этой рекурсии удовлетворяет уравнению Т(п) = О(п) + 2T([n/2j), так что оно представляет собой О(п log п). [Упр. 97-99 основаны на работе Д. Тулиани (J. Tuliani), который также разработал методы для некоторых больших значений тп; см. Discrete Math. 226 (2001), 313-336.] 100. Даже если очевидные дефекты не заметны, прежде чем рекомендовать любую по- следовательность, следует провести тщательное тестирование. Напротив, цикл де Брейна, неявно создаваемый алгоритмом F, является неудачным источником предположительно случайных битов, даже если он имеет n-распределение в смысле определения 3.5D, по- скольку в начале доминируют нули. Действительно, когда п—простое число, биты tn + 1 этой последовательности нулевые для 0 < t < (2П— 2)/п. 101. (а) Пусть 0—собственный суффикс XX' с 0 < АА'. Либо 0 является суффиксом А', откуда А < А' < 0, либо 0 = аА' и мы имеем А < а < 0. Теперь А < 0 < А А' влечет за собой то, что 0 = А7 для некоторого 7 < X'. Но 7 является суффиксом 0 с 1 < I7I = |/?| — |А| < |А'|; следовательно, 7 является собственным суффиксом X' и X' < 7. Получаем противоречие. (б) Любая строка единичной длины—простая. Объединим смежные простые строки согласно п. (а) в любом порядке, пока не будет невозможно никакое дальнейшее объеди- нение. [Более общие результаты можно найти в работе М. Р. Schiitzenberger, Proc. Amer. Math. Soc. 16 (1965), 21-24.] (в) Если t 0, то пусть А является наименьшим суффиксом Ai... At. Тогда А — простая строка по определению и имеет вид 0у, где 0—непустой суффикс некоторой строки Xj. Следовательно, Xt < Xj < 0 < 0-у = А < At, так что должно выполняться А = At- Удалим At и будем повторять эти действия до тех пор, пока не окажется выполненным условие t = 0. (г) Истинно. Если а = Х0 для некоторой простой строки А с |А| > |Ai|, то можно было бы добавить множители 0 и получить другое разложение а.
778 ОТВЕТЫ К УПРАЖНЕНИЯМ 7.2.1.1 (д) 3 1415926535897932384626433832795 02884197. (Эффективный алгоритм пред- ставлен в упр. 106. Знание большего количества цифр тг не приведет к изменению первых двух множителей. Бесконечное десятичное расширение любого числа, являющегося “нор- мальным” в смысле Бореля (Borel) (см. раздел 3.5) раскладывается на простые строки конечной длины.) 102. Мы должны получить 1/(1 — mz) = 1/П^=1(1 ~ zn)Lm^n\ Отсюда вытекает (60), как в упр. 4.6.2-4. 103. Когда п = р простое, (59) гласит, что Lm(l) + pLm(p) = тр, и мы также имеем Lm(l) = тп. [Это комбинаторное доказательство интересно контрастирует с традиционным алгебраическим доказательством теоремы 1.2.4F.] 104. 4483 непростыми строками являются abaca, agora, ahead, ...; 1274 простыми стро- ками являются ..., rusts, rusty, rutty. (Поскольку строка prime (простая) не является простой, стоило бы называть простые строки lowly (скромными).) 105. (а) Пусть а' представляет собой а с увеличенной последней буквой, и предположим, что а' = /?7', где а = /?7 и /3 е, 7 е. Пусть в—префикс а с |0| = |7|. Согласно предположению существует строка ш, такая, что аш—простая строка; следовательно, 0 < аш < уш, так что должно выполняться в < 7. Поэтому в < 7', и мы имеем а' < 7'. (б) Пусть а = Ai/3 = од... од, где Ai/?w—простая строка. Из условия Ai/?w < /Зы вытекает, что aj < од+r для 1 < j < n — г, где г = |Ai|. Но aj < aj+r не может быть; в противном случае а начиналась бы с простой строки, более длинной, чем Ai, что противоречит упр. 101, (г). (в) Если а представляет собой n-расширение и А, и А', где |А| > |А'|, то мы должны получить А = (А')’в, где 0—непустой префикс А'. Но тогда в < А' < А < 6. 10в. Е1. [Инициализация.] Установить ai «— • • • «— ап <— т — 1, ап-ц <-1 и j «— 1. Е2. [Посещение.] Посетить (од,...,од) с индексом j. ЕЗ. [Вычитание единицы.] Завершить работу алгоритма, если aj = 0. В противном случае установить aj <— aj — 1 и од ч— т — 1 для j < к < п. Е4. [Подготовка к разложению.] (Согласно упр. 105, (б), нужно найти первый про- стой множитель Ai строки од... од.) Установить j ч— 1 и к ч— 2. Е6. [Поиск нового j.] (Сейчас од...од_1 представляет собой (к — 1)-расширение простой строки од .. .aj.) Если аь-j > од, вернуться к шагу Е2. В противном случае, если од_^ < од, установить j ч— к. Затем увеличить к на 1 и повторить этот шаг. Эффективный алгоритм разложения на шагах Е4 и Е5 разработан Ж.-П. Дювалем (J. Р. Duval), J. Algorithms 4 (1983), 363-381. Более подробную информацию можно найти в Cattell, Ruskey, Sawada, Serra and Miers, J. Algorithms 37 (2000), 267-282. 107. Количество посещенных n-кортежей равно Pm(n) = y2"=i t'm(j). Поскольку Lm(n) = imn + О(тп^2/п), имеем Рт(п) = Q(m,n) +O(Q(y/m,n)), где п тп Q(m,n) = —£ =----Р(т,п); п—1 п/2 —к к=О ' к—О ' = ^TE^E{n(^ip+o(n’f) длявсех‘- J=o I ' '
7.2.1.1 ОТВЕТЫ К УПРАЖНЕНИЯМ 779 Таким образом, Pm(n) ~ тп+1/((т — 1)п). Основной вклад во время выполнения дают циклы на шагах F3 и F5 стоимостью п — j для каждой простой строки длиной j. Следо- вательно, общее время равно пРт(п) — $2>=i = гпп+1(1/((тп — 1)2п) + О(1/(тпп2))). Это меньше времени, необходимого для вывода тп” отдельных цифр цикла де Брейна. 108. (а) Если а ф 9... 9, то имеем Afc+i < /39'“', поскольку последняя строка является простой. (б) Можно считать, что /3 не состоит только из нулей, поскольку 9J0n-3 является подстрокой At-iAtAiA? = 89n0nl. Пусть к—минимальное значение, для которого /3 < А*,; тогда А* < /За, так что /3 представляет собой префикс А*. Поскольку /3—предпростая строка, она является |/3|-расширением некоторого простого числа /3' < /3. Предпростая строка, посещенная алгоритмом F непосредственно перед /3', согласно упр. 106 — (/3' — I)9n-I0 I, где /3' — 1 означает десятичное число, на единицу меньшее /3'. Таким образом, если /3' не является Afc_i, из указания (которое также следует из упр. 106) вытекает, что Afc-i заканчивается как минимум п—|/3'| > п—1/3| девятками, аа является суффиксом Afc-i. С другой стороны, если ft' = Afc~i, а является суффиксом Afc_2, a ft—префиксом Afc-iA*. (в) Если а 9... 9, имеем Afc+i < (/3a)d-1/39'“', поскольку последняя строка простая. В противном случае A*_i заканчивается как минимум (d — l)|/3a| девятками, а Afc+i < (/3a)d-19'^“', так что (a/3)d является подстрокой Ak-iAfcAk+i. (г) Указанные подстроки появляются в простых строках 135899135914, 787899787979, 12999913131314, 09090911, 08999909090911, 118999119119122. (д) Да: во всех случаях позиция ai... an предшествует позиции подстроки ai... an-i (a„ + 1), если 0 < an < 9 (и если мы считаем, что строки наподобие 9-’0n-J находятся в начале). Кроме того, Э-’О”-’-1 располагается только после появления 9-’-10n_-’a для 1 < a < 9, так что мы не должны размещать 0 после 9,0п-,“1. 109. Предположим, что мы хотим найти подматрицу (wn-l ...WltUoh (Xn-l ...XlXo)? (l/n-l...J/U/o)2 (z„-l . . . ZlZo)2 Бинарный случай n = 1 уже рассмотрен в качестве примера в условии упражнения, а если п > 1, то по индукции можно считать, что требуется найти только старшие биты azn-i, O2n-2, &2n-i и Ьзп-г- Случай п = 3 типичен: нужно решить систему уравнений Ьъ = w2, Ъ4 = х2, а5 ф Ь5 = j/г, bi = w2, Ь'6 -- х2, а4 ф Ь4 = j/2, а5 Ф b5 = w2, а4 ф Ь4 = х2, Ьъ = у2, а4 ®b4 = W2, as ф b'5 = х2, bi = у2, а4 ф b4 = Z2, если ао = 0, Ьо = 0; аб ф b's = z2, если ао = 0, bo = 1; bi = Z2, если ао = 1, Ьо = 0; b's = z2, если do = 1, bo = 1; здесь b'5 = bs Ф Ь4ЬзЬгЬ1 учитывают переносы, когда j становится равным j + 1. 110. Пусть a0a1...am2_i является m-арным циклом де Брейна, таким, как первые тп2 элементов (54). Если т нечетно, положим dtj = aj для четного г и dtj = a^j+^i_1-j/2-j modm2 для нечетного. [Первым из множества изобретателей этого построения, похоже, был Джон К. Кок (John С. Cock), который также построил торы де Брейна других форм и размеров в Discrete Math. 70 (1988), 209-210.] Если т = т'т" где т' ± т", воспользуемся китайским алгоритмом остатков для определения d^ = d'ij (по модулю т') и dti = d"j (по модулю т") через матрицы, которые решают эту задачу для т! и т". Таким образом, предыдущее упражнение приводит к решению для произвольного т.
780 ОТВЕТЫ К УПРАЖНЕНИЯМ 7.2.1.1 Другое интересное решение для четных значений т было найдено Анталом Ива- ни (Antal Ivanyi) и Золтаном Тотом (Zoltan Toth) [2nd Conf. Automata, Languages, and Programming Systems (1988), 165-172; см. также Hurlbert and Isaak, Contemp. Math. 178 (1994), 153-160]. Первые m2 элементов aj бесконечной последовательности ООП 021331203223 04152435534251405445 0617263746577564 ... 07667 08... определяют цикл де Брейна с тем свойством, что расстояние между появлениями ab и Ьа всегда четно. Тогда можно положить d,j = aj при четном г + j и dij = а, при нечетном. Например, для т = 4 мы имеем /00100212203022324 /00100010302030204 0001020320212223 0001020301000203 0111031321312333 0111011131213121 1011121330313233 1011121311101213 0010021220302232 0010001030203020 0203000122232021 2021222321202223 0111031321312333 0111011131213121 1213101132333031 3031323331303233 0010021220302232 (упр. 109); 0313031333233323 (Тот (Toth)) 2021222300010203 1011121311101213 0111031321312333 0212021232223222 3031323310111213 0001020301000203 0010021220302232 0313031333233323 2223202102030001 2021222321202223 0111031321312333 0212021232223222 \3233303112131011/ \3031323331303233/ 111. (а) Пусть dj = j и 0 < aj < 3 для 1 < j < 9, ад 0. Образуем последовательности Sj, tj с помощью следующих правил: si = 0, ti = di; tj+i = dj+i + 10t>[aj =0] для 1 < j < 9; sj+i = Sj + (O,tj,—tj) для aj = (0,1,2) и 1 < j < 9. Тогда возможным результатом является sio; нам нужно только запомнить наименьшие получающиеся значения. Можно сэкономить больше половины работы, если запретить а* = 2 при вк = 0, а затем использо- вать |sio | вместо sio- Поскольку нужно испытать менее чем З8 = 6561 возможность, вполне применима тернарная версия алгоритма М; для того, чтобы выяснить, что таким образом можно представить все целые числа, меньшие 211, но не само число 211, требуется меньше 24 000 обращений к памяти и 1600 умножений. (Легко также выяснить, что наибольшим количеством способов—46—представляется число 9. — Примеч. пер.) Другой подход, использующий код Грея для варьирования знаков после разбиения цифр на блоки всеми 28 возможными способами, снижает количество умножений до 255, но ценой около 500 дополнительных обращений к памяти. Таким образом, код Грея в данном случае не обладает никакими преимуществами. (б) В этом случае (с помощью 73 000 обращений к памяти и 4 900 умножений) можно получить все числа, меньшие 241, но не само число 241. Число 100 можно получить 46 способами, в том числе замечательным способом 9 — 87 + 6 + 5 — 43 + 210. (И в этом случае рекордсменом по количеству представлений является число 9, но на этот раз со 103 способами представления. — Примеч. пер.) [Г. Э. Дьюдени (Н. Е. Dudeney) сформулировал эту “задачу века” в The Weekly Dispatch (4 and 18 June 1899). См. также The Numerology of Dr. Matrix Мартина Гарднера (Martin Gardner), глава 6; Steven Kahan, J. Recreational Math. 23 (1991), 19-25; а также упр. 7.2.1.6-122.]
7.2.1.2 ОТВЕТЫ К УПРАЖНЕНИЯМ 781 112. Теперь метод из упр. 111 требует более 167 миллионов обращений к памяти и 10 мил- лионов умножений, поскольку З16 гораздо больше, чем З8. Можно поступить существенно лучше (обойдясь 10.4 миллионами обращений к памяти и 1100 умножениями), если сначала протабулировать все возможные результаты, получаемые при использовании первых к и последних к цифр, для 1 < к < 9, а затем рассмотреть все блоки цифр, использующие 9. Имеется 60318 представлений 100, а первое непредставимое число—16040. (В этот раз девятка с ее 84 475 представлениями оказалась на втором месте, уступив первенство тройке, которую можно представить 84483 способами. — Примеч. пер.) РАЗДЕЛ 7.2.1.2 1. [Д. П. Н. Филлипс (J. Р. N. Phillips), Comp. J. 10 (1967), 311.] В предположении, что п > 3, можно заменить шаги L2-L4 следующими. L2'. [Простейший случай?] Установить у ч— an-i и z Ч— an. Если у < z, установить an-i Ч— z, ап Ч— у и вернуться к шагу L1. L2.1'. [Следующий простейший случай?] Установить х ч— ап-2- Если х > у, перейти к шагу L2.2'. В противном случае установить (an_2,an-i,an) ч— (z,x, у), если х < z и (у, z,x), еслзи х > z. Вернуться к шагу L1. L2.2'. [Поиск у.] Установить j ч— п — 3 и у ч— aj. Пока у > х, устанавливать j Ч— j — 1, х ч— у и у ч— aj. Завершить работу алгоритма, если j = 0. L3'. [Простое увеличение?] Если у < z, установить aj ч— z, aj+i ч— у, ап Ч— х и перейти к шагу L4.1'. L3.1'. [Увеличение а,.] Установить I ч— п — 1; если у > at, многократно уменьшать I на 1, пока не будет выполнено условие у < ai. Затем установить aj ч— ai и at ч— у. L4'. [Начало обращения.] Установить ап Ч— aj+i и a^+i ч— z. L4.1'. [Обращение а>+2 • •. an-i.] Установить к -t— j + 2 и 11— п— 1. Затем, пока к < I, обменивать а*, Ч-> а; и устанавливать к Ч— /с+1,1 Ч— I—1. Вернуться к шагу L1. | Программа может работать еще быстрее, если at хранится в памяти по адресу A[n — t] для 0 < t < п или если используется обратный солексный порядок, как в следующем упражнении. 2. Вновь будем считать, что изначально ai < а? < • • • < а„; однако генерируемыми для {1,2,2,3} перестановками будут 1223, 2123, 2213, ..., 2321, 3221. Пусть a„+i—вспомога- тельный элемент, больший Оп- Ml. [Посещение.] Посетить перестановку aja? ... ап. М2. [Поиск у.] Установить j Ч— 2. Если aj-i > aj, увеличивать j на 1, пока не будет выполнено условие aj-i < aj. Завершить работу алгоритма, если j > п. М3. [Уменьшение <ij.] Установить I ч— 1. Если at > aj, увеличивать I, пока не будет выполнено условие at < aj. Затем выполнить обмен ai Ч-> aj. М4. [Обращение ai ...aj_i.] Установить /с Ч— 1 и / ч— j — 1. Затем, если к < I, обменять а/с Ч-> <ц, установить /сч— /с+1, 1 Ч— I — 1 и повторять эти действия, пока не будет выполнено условие к > I. Вернуться к шагу Ml. | 3. Пусть Ci... Сп = са1 ... Сап —таблица инверсий, как в упр. 5.1.1-7. Тогда rank(ai... On) представляет собой число со смешанным основанием [^..с"-1’ *^п]. [См. Н. A. Rothe, Sammlung combinatoriscb-analytiscber Abhandlungen 2 (1800), 263-264; см. также пионер- скую работу Сарнгадева (Saxngadeva) и Нараяна (Narayana), ссылки на которую имеются в разделе 7.2.1.7.] Например, 314592687 имеет ранг [£’ °’ j’ °’ °’ 2 °] = 2 • 8! + 6! + 5! + 4 • 4! + 1! = 81577; это факториальная система счисления, представленная в 4.1-(10).
782 ОТВЕТЫ К УПРАЖНЕНИЯМ 7.2.1.2 4. Воспользуйтесь рекуррентным соотношением rank(ai... ап) = E>=i <ei] х ( ” п») + гапк(аг ... an). Например, rank(314159265) равен tUuLa.i) + °+ IG.iAi.i) + 0 +1(1 AJ + f (1Д1) + °+ ИЛ) = 30991. 5. (а) Шаг L2 выполняется п! раз. Вероятность того, что будет выполнено ровно к сравнений, равна дь — 9*4-1, где qt— вероятность того, что an_t+i > ••• > a„, а именно [t<n]/t!. Следовательно, среднее значение равно E^(9* — qk+i) = 914-l-Qn = |n!ej/n! — 1 ке - 1 я 1.718, а дисперсия равна $2 - 9*4-1) - теап2 = 91 + 392 Ч-1- (2п - 1)д„ - (91 Ч-F 9п)2 и е(3 - е) и 0.766. [Информацию о более высоких моментах можно найти в работе R. Kemp, Acta Informatica 36 (1998), 17-89, Theorem 4.] Кстати, таким образом среднее количество обменов на шаге L4 равно Е1Л/2](9* ~ 9*+1) = 92 Ч- 94 Ч- • • ~ cosh 1 — 1 = (е Ч- е-1 — 2)/2 ~ 0.543 (результат получен Р. Д. Орд- Смитом (R. J. Ord-Smith) [Comp. J. 13 (1970), 152-155]. (б) Шаг L3 выполняется только п! — 1 раз, но для удобства мы будем считать, что он выполняется на один раз больше (с нулем сравнений). Тогда вероятность того, что выполняется ровно к сравнений, равна Е"=*-ц1/j! для 1 < к < пи 1/п! для к = 0. Следо- вательно, среднее равно | Ед=о ^/з- ~ е/2 ~ 1-359; в упр. 1 это количество уменьшается на j. Дисперсия равна | Е"2о 1/у! Ч-1 E"Jo Уз' ~ mean2 ~ |е - |е2 ~ 0.418. 6. (а) Пусть e„(z) = Е*=оzk/k\\ тогда количество различных префиксов ai.. .aj равно j! [z-*] еП1 (z)... e„t (z). Это в N = ( n ) раз больше вероятности qn-j того, что на шаге L2 делается как минимум п — j сравнений. Следовательно, среднее значение равно ^w(eni(z).. .e„t(z)) — 1, где w(E^*z*/A:!) = Е1*- В бинарном случае среднее равно М/О-1, гдеМ = (?) = ЕГ=о (n-;++i'+1) = CiD-l = C)(2+^hi4-^f)-l. (б) Если {ai,...,a,-} = {ni xi,...,n't xt}, префикс ai...aj дает вклад в общее количество сравнений, выполняемых на шаге L3, равный Ei<*<i<t(n* ~n*)[ni > п{]. Таким образом, среднее равно j? Ei<*<i<t ™(/*i(z)), гДе /*i(z) = ( fj е„т(гЛ ($2(nfc - г)^Ле„,_1(г) X l<m<t / \r=o ’ / тп^к, тп^Ы = eni(z) .. .e„f (z)(nfc - zrfc(z))rt(z), где rfc(z) = e*k\z) В бинарном случае эта формула сводится к j^w((sea(z) — zea-i(z))en_a_i(z)) = ((”+J) — 1) - жпо- - ^i)+1)=-1+r:1))=^1 - 7. При использовании обозначений из ответа к предыдущему упражнению значение ^ю(еП1 (z)... e„t(z)) - 1 равно П1 Ч----h (П1П2 Ч~ П1ПЗ Ч-------h nt-int) Ч~ П1(щ-1) Ч-h nt(nt-l) п п(п — 1) С применением 1.2.9-(38) можно показать, что предел равен -14- exPE*>i гк/к, где Тк = 1ппе_юо(П1 Ч- • • • Ч- n*)/(ni Ч- • • • Ч- п±)к. В случаях (а) и (б) имеем Тк = [k = 1], так что предел равен е — 1 ~ 1.71828. В случае (в) имеем Тк = l/(2fc — 1), так что предел равен -1 4-expEfc>i l/(k(2* - 1)) « 2.46275.
7.2.1.2 ОТВЕТЫ К УПРАЖНЕНИЯМ 783 8. Будем считать, что изначально j равно нулю, и изменим шаг L1 на L1'. [Посещение.] Посетить вариацию ai.. .aj. Если j < п, установить j ч— j + 1 и повторить этот шаг. Этот алгоритм предложен Л. Й. Фишером (L. J. Fischer) и К. X. Краузе (К. С. Krause), Lebrbucb der Combinationslebre und der Aritbmetik (Dresden: 1812), 55-57. Кстати, общее количество вариаций равно w(eni (z) ... e„t (z)) в обозначениях ответа к упр. 6. Эта задача подсчета количества вариаций была впервые рассмотрена Якобом Бернулли (James Bernoulli) в его Ars Conjectandi (1713), Part 2, Chapter 9. 9. Считаем, что г > 0 и что мы начинаем с ао < ai < аг < • • • < оп. R1. [Посещение.] Посетить вариацию ai... ar. (В этот момент ar+i < • < оп.) R2. [Простой случай?] Если аг < ап, обменять аг ч-> aj, где j представляет собой наименьший индекс, такой, что j > г и aj > аг, и вернуться к шагу R1. R3. [Обращение.] Установить (ar+i,...,an) ч— (an,..., ar+i), как на шаге L4. R4. [Поиск у.] Установить j ч— г — 1. Если aj > aj+i, уменьшать j на 1, пока не будет выполнено условие aj < aj+i. Завершить работу алгоритма, если j = 0. R5. [Увеличение а>.] Установить I ч— п. Если aj > at, уменьшать I на 1, пока не будет выполнено условие aj < at. Затем обменять aj ai. R6. [Опять обращение.] Установить (а,+1,..., оп) ч— (оп,..., aj+i), как на шаге L4, и вернуться к шагу R1. | Количество выводов алгоритма равно г! [zr] e„j (z)... e„t(z); если все элементы различны, само собой разумеется, это значение равно пг. 10. aia2 ...ап = 213... п, С1С2 ...Сп = 010.. .0, O1O2 .. .оп = 1(—1)1... 1, если п > 2. 11. Шаг (Р1, ..., Р7) выполняется (l,n!,n!,n! + хп,п\ — 1, (а:п + 3)/2,хп) раз, где а:п = fc!, поскольку шаг Р7 выполняется (у — 1)! раз при 2 < j < п. 12. Нас интересует перестановка с рангом 999999. Вот интересующие нас ответы, (а) 2783915460 согласно упр. 3; (б) 8750426319, поскольку отраженным числом со смешан- ным основанием, которое соответствует числу [°’ °’ 3’ 4’ g’ ?’ в’ в’ ю]» является [о,о, 1, з-2, з, s-о, 2, 7, в-о, 9-9], в соответствии с 7.2.1.1—(50); (в) произведение (0 1 ... 9)®х (01’..’. 8)°(6 1 ...’ 7)7(0 1 ... 6)2 ... (О 1 2)1, а именно 9703156248. 13. Первое утверждение истинно для всех п > 2. Но когда 2 пересекает 1, т. е. когда сг изменяется с 0 на 1, имеем сз = 2, c< = 3, сз = • • • = Сп = 0, и следующей перестановкой при п > 5 является 432156... п. [См. Time Travel (1988), page 74.] 14. Истинно в начале шагов Р4-Р6, поскольку ровно j — 1 — Cj + s элементов лежат слева от Xj, а именно у — 1 — Cj элементов из {a:i,... ,^-1} и в элементов из {a:j+i,... ,а:п}. (В определенном смысле эта формула является сутью алгоритма Р.) 15. Если [ь"1-1’ ^] соответствует рефлексивному коду Грея [с*.с”], то мы переходим к шагу Р6 тогда и только тогда, когда bn-fc = к — 1 для j < к < п и Bn_j+i четно, в соответствии с 7.2.1.1-(50). Но из Ьп-ь = к— 1 для j < к < п вытекает, что Вп-к нечетно для j < к < п. Следовательно, на шаге Р5 s = [cj+i =у] + [с^+г =у + 1] = [o>+i <0] + [о>+2 <0]. [See Math. Comp. 17 (1963), 282-285.] 16. Pl'. [Инициализация.] Установить Cj ч— j и Oj ч-1 для 1 < j < п; установить также z Ч— On. Р2'. [Посещение.] Посетить ai... ап. Затем перейти к шагу Р3.5', если ai = z.
784 ОТВЕТЫ К УПРАЖНЕНИЯМ 7.2.1.2 РЗ'. [Колебание вниз.] Для j ч— п — 1, п — 2, ..., 1 (в указанном порядке) установить aj+i ч— aj, aj ч— z и посетить ai ...ап- Затем установить j ч— п — 1, s ч— 1 и перейти к шагу Р4'. РЗ.б'. [Колебание вверх.] Для j ч— 1, 2, ..., п — 1 (в указанном порядке) установить aj ч— aj+i, aj+i ч— z и посетить ai... ап. Затем установить j ч— п — 1, s ч— 0. Р4'. [Готовность к изменению?] Установить q ч— Cj + Oj. Если q = 0, перейти к шагу Р6'; если q > j, перейти к шагу Р7'. Рб'. [Изменение.] Обменять aCj+s ч-> ад+е. Затем установить Cj ч— q и вернуться к шагу Р2'. Р6'. [Увеличение s.] Завершить работу алгоритма, если j = 1; в противном случае установить s ч— s + 1. Р7'. [Переключение направления.] Установить Oj ч--Oj, j ч— j—1 и вернуться к шагу Р4'. | 17. Изначально aj ч— a'j ч— j для 1 < j < п. Шаг Р5 должен теперь устанавливать t ч— j — Cj + s, и ч— j — q + s, v ч— au, at ч— v, a'v 4— t, au 4— j, a'j 4— u, Cj 4— q. (См. ynp. 14.) Однако, как заметил Г. Эрлих (G. Ehrlich) [JACM 20 (1973), 505-506], требование доступности обратных перестановок обеспечивает возможность существенно упростить ал- горитм, позволяя избежать переменной s, а управляющей таблице ci... Сп —использовать только убывания. Q1. [Инициализация.] Установить aj ч— aj Ч— j, Cj ч— j — 1 и Oj ч-1 для 1 < j < п. Установить также со = — 1. Q2. [Посещение.] Посетить перестановку aj ... ап и обратную к ней а{ ... а'п. Q3. [Поиск fc.] Установить к Ч— п. Затем, пока ск = 0, устанавливать с* ч— fc — 1, о* Ч-------Ofc и к ч— к - 1. Завершить работу алгоритма, если fc = 0. Q4. [Изменение.] Установить с* ч— Cfc — 1, j ч— а'к и i = j + о*. Затем установить t ч— at, af к, Oj t, a't ч— j, a'k 4— i и вернуться к шагу Q2. | 18. Установить ап Ч— п и использовать (п — 1)1/2 итераций алгоритма Р для генерации всех перестановок {1,... ,n —1}, таких, что 1 предшествует 2. [М. К. Roy, САСМ 16 (1973), 312-313; см. также упр. 13.] 19. Например, можно воспользоваться идеей алгоритма Р с n-кортежами щ ... Сп, из- меняющимися, как в алгоритме 7.2.1.1Н, по отношению к основаниям (1,2, ...,п). Этот алгоритм корректно поддерживает направления, хотя и нумерует индексы по-другому. Смещение s, требующееся алгоритму Р, может быть вычислено, как в ответе к упр. 15; мож- но обойтись без него путем поддержки обратной перестановки, как это сделано в упр. 17. [См. G. Ehrlich, САСМ 16 (1973), 690-691.] Без циклов можно также реализовать и другой алгоритм, подобный алгоритму Хипа. (Примечание. В большинстве приложений генерации перестановок нас интересует уменьшение общего времени работы, а не максимального времени между последователь- ными посещениями; с этой точки зрения отсутствие циклов обычно нежелательно, если только речь не идет о работе на параллельном компьютере. Тем не менее нельзя сбрасы- вать со счетов чисто интеллектуальное удовлетворение от бесциклового решения задачи, независимое от его практичности.) 20. Например, когда п = 3, можно начать с 123, 132, 312, 312, 132, 123, 213, ..., 213, 213, .... Если дельта-последовательность для п представляет собой (<51<5г - •-^"ni), то соответствующая последовательность для п+1 имеет вид (Дп<51 Дп5г • • • ДгА"™;), где Дп — последовательность 2n + 1 операций п п— 1 ... 1 — 1 ... п—1 п; здесь 5к = j означает aj ч-> aj+i, а <5* — — означает ai ч-щ.
7.2.1.2 ОТВЕТЫ К УПРАЖНЕНИЯМ 785 (Знаковые перестановки предстают в ином виде в упр. 5.1.4-43 и 5.1.4-44. Множество всех знаковых перестановок называется октаэдрической группой.) 21. Ясно, что И = 1, следовательно, 0 должно быть 0, a S должно быть 5 — 1. Тогда N = E + 1, R = Ь — 2hD + E = J + Y. При этом остается ровно max(0, Ь — 7 — к) вариантов выбора для Е при Y = к > 2, следовательно, всего имеется 52^=2 (h~ 7 — к) = решений, когда Ь > 8. [Math. Mag. 46 (1972), 48-49. Кстати, Д. Эппштейн (D. Eppstein) доказал, что решение буквометика в системе счисления с заданным основанием является NP-полной задачей; см. SIGACT News 18,3 (1987), 38-40.] 22. (Х)ь + (Х)ь = (ХУ)ь имеет решение только при Ъ = 2. 23. Почти истинно, поскольку количество решений будет четным, если только не выпол- няется условие [у / [fcG F1]. (Рассмотрите тернарный буквометик X + (ХХ)з + (УУ)з + (XZ)3 = (ХУХ)з-) 24. (а) 9283+7+473+1062 = 10825. (б) 698392+3192 = 701584. (в) 63952+69275 = 133227. (г) 653924 + 653924 = 1307848. (д) 5718 + 3 + 98741 = 104462. (е) 127503 + 502351 + 3947539 + 46578 = 4623971. (ж) 67432 + 704 + 8046 + 97364 = 173546. (з) 59 + 577404251698 + 69342491650 + 49869442698 + 1504 + 40614 + 82591 + 344 + 41 + 741425 = 5216367650 + 691400684974. [Все решения единственны. Источники для (б)-(ж): J. Recreational Math. 10 (1977), 115; б (1972), 296; 10 (1977), 41; 10 (1978), 274; 12 (1979), 133-134; 9 (1977), 207.] (и) В этом случае имеется 10! = 2903040 решений, поскольку годится любая пере- становка {0,1,..., 9}, за исключением тех из них, для которых Н или N равны 0. (Хорошо продуманная программа решения аддитивных буквометиков должна в таких случаях со- кращать объем выводимых данных.) 25. Можно считать, что «!<•••< ею- Пусть г является наименьшим индексом F. Установим а, ч— 0, после чего установим значения остальных элементов о, в порядке возрастания у. Доказательство, аналогичное доказательству теоремы 6.1S, показывает, что эта процедура максимизирует а s. Аналогичная процедура дает минимум, поскольку min(a s) = — max(a • (—s)). 26. 400739 + 63930 - 2379 - 1252630 + 53430 - 1390 + 738300. 27. Читатели, вероятно, смогут улучшить следующие примеры: BLOOD + SWEAT + TEARS = LATER; EARTH + WATER + WRATH = HELLO + WORLD; AWAIT + ROBOT + ERROR = SOBER + WORDS; CHILD + THEME + PEACE + ETHIC = IDEAL + ALPHA + METIC. (Это упражнение появилось после знакомства с буквометиком WHERE + SEDGE + GRASS + GROWS = MARSH [A. W. Johnson, Jr., J. Recr. Math. 15 (1982), 51], удивительно чистым, если бы не одинаковые сигнатуры D и 0.) Д. А. Браун (J. A. Brown), Й. Сабо (J. Szabo) и Т. Д. Троубридж (Т. J. Trowbridge) предложили буквометики GREAT + GREAT = LARGE и GREAT + GREAT = SMALL. 28. (a) 11 = 3+3+ 2 +2+1, 20 = 11+3+3+3, 20 = 11+3+3+ 2+1,20 = 11+3+3+1 + 1 + 1, 20 = 8 + 8 + 2+1 + 1, 20 = 7 + 7 + 6, 20 = 7 + 7 + 2 + 2 + 2, 20 = 7 + 7 + 2 + 1 + 1 + 1 + 1, 20 = 7 + 5 + 5 + 2 + 1, 20 = 7 + 5 + 2 + 2 + 2 + 1 + 1, 20 = 7 + 5 + 2 + 2 + 1 + 1 + 1 + 1, 20 = 7 + 3 + 3 + 2 + 2 + 1 + 1 + 1,20 = 7+ 3 + 3+1 + 1 + 1 + 1 + 1 + 1 + 1,20 = 5 + 3 + 3 + 3 + 3 + 3. [Эти четырнадцать решений были впервые вычислены Роем Чайлдсом (Roy Childs) в 1999. Следующими значениями п, имеющими дважды истинные разбиения, являются 30 (20 способами), затем 40 (94 способами), 41 (67 способов), 42 (57 способов), 50 (190 способов, включая 50 = 2 + 2 -I-1- 2) и т. д.] (б) 51 = 20 + 15 + 14 + 2, 51 = 15 + 14 + 10 + 9 + 3, 61 = 19 + 16 + 11 + 9 + 6, 65 = 17 + 16 + 15 + 9 + 7+ 1, 66 = 20 + 19 + 16 + 6 + 5, 69 = 18 + 17+ 16+ 10 + 8, 70 = 30+20+10+7+3, 70 = 20+16+12+9+7+6, 70 = 20+15+12+11+7+5, 80 = 50+20+9+1, 90 = 50+12+11 + 9 + 5 + 2 + 1, 91 = 45 + 19 + 11 + 10 + 5 + 1. [Два способа для 51 вычислены Стивом Каганом (Steven Kahan); см. его книгу Have Some Sums То Solve (Farmingdale, New
786 ОТВЕТЫ К УПРАЖНЕНИЯМ 7.2.1.2 York: Baywood, 1978), 36-37, 84, 112. Удивительные примеры с семнадцатью различными членами на итальянском языке и пятьюдесятью восемью членами, записанными римскими цифрами, найдены Джулио Чезаре (Giulio Cesare), J. Recr. Math. 30 (1999), 63.] Примечания. Очень красивый пример THREE = TWO + ONE + ZERO [Richard L. Breisch, Recreational Math. Magazine 12 (December 1962), 24], к сожалению, не удовлетворяет по- ставленным условиям. Общее количество дважды истинных разбиений на различные части в английском языке, вероятно, конечно (хотя терминология для произвольно больших чисел не стандартизована). Удастся ли кому-то найти пример, больший чем NINETYNINENONILLIONNINETYNINESEXTILLIONSIXTYONE = NINETYNINENONILLIONNINETYNINESEXTILLIONNINETEEN + SIXTEEN + ELEVEN + NINE + SIX (предложен Г. Гонзелес-Моррисом (G. GonzAlez-Morris))? (Примечание переводчика. Что касается русского и украинского языков, то они гораздо менее приспособлены для получения дважды истинных разбиений. Исчерпыва- ющий поиск до 100 включительно дает только 4 дважды истинных разбиения на русском языке, причем все они для одного и того же числа—40 (для экономии места суммы заменены умножениями, причем курсивом указывается количество суммируемых членов, т. е., например, 5*2 означает 2+2+24-2+2, а не 5+5): 40 = 5*3+51 *1 = 3+5*2+27*1 = 3+57*1 = {0*1 (обратите внимание на красоту последнего разбиения). Благодаря близости русского и украинского языков эти же разбиения дважды истинны и на украинском языке, где они записываются совершенно так же, как и на русском, хотя и читаются несколько иначе. Кроме них, на украинском языке имеются еще три дважды истинных разбиения, два—для числа 40, а именно 40= 5*8 = 5 *8 + 2 *7 + 2, и еще одно—для числа 70: 70 = 5*10 + 2*9 + 8 + 2*7 (70, 7, 8 и 9 на украинском языке записываются как схмдесят, ciM, вгам и дев’ятъ).) 29. 10 + 7 + 1 = 9 + 6 + 3, 11 + 10 = 8 + 7 + 6, 12 + 7 + 6 + 5 = 11 + 10 + 9, ..., 19 + 10 + 3 = 14 + 13 + 4 + 1 (всего 31 пример). 30. (а) 5672 = 321489, 8072 = 651249 или 8542 = 729316. (4592 = 210681 для русского варианта, 7392 = 546121 для украинского.) (б) 9582 = 917764. (в) 96 х 72 = 4704. (г) 51304/61904 = 7260/8760. (д) 3285092 = 47613. [Strand 78 (1929), 91, 208; J. Recr. Math 3 (1970), 43; 13 (1981), 212; 27 (1995), 137; 31 (2003), 133. Решения (б)-(д) являются единственными. С помощью подхода, основанного на алгоритме X, ответы можно найти ценой (14, 13, 11, 3423, 42) тысяч обращений к памяти соответственно. Нобуюки Йошигара также заметил, что буквометик NORTH/SOUTH = WEST/EAST имеет единственное решение: 67104/27504 = 9320/3820.] 31. (а) 5/34+7/68+9/12(!). В единственности этого решения можно убедиться, воспользо- вавшись алгоритмом X с дополнительным условием А < D < G (при этом потребуется около 265 тысяч обращений к памяти). [Quark Visual Science Magazine, No. 136 (Tokyo: Kodansha, October 1993).] Забавно, что единственное решение имеет и похожая головоломка: 1/(3 х 6) + 5/(8 х 9) + 7/(2 х 4) = 1 [Scot Morris, Omni 17,4 (January 1995), 97]. (6) ABCDEFGHI = 381654729, решение с применением алгоритма X требует около 10 тысяч обращений к памяти. 32. Имеется одиннадцать способов, среди которых самый удивительный—3 + 69258/714. [См. The Weekly Dispatch (9 and 23 June 1901); Amusements in Mathematics (1917), 158-159.] 33. (a) 1, 2, 3, 4, 15, 18, 118, 146. (6) 6, 9, 16, 20, 27, 126, 127, 129, 136, 145. [The Weekly Dispatch (11 and 30 November, 1902); Amusements in Math. (1917), 159.] В этом случае одна из подходящих стратегий заключается в поиске всех вариаций, где а/с... ai-i/ai... ад является целым числом, с последующей записью решений для всех перестановок ai ...аь-i. Имеется 164959 целых чисел с единственным представлением,
7.2.1.2 ОТВЕТЫ К УПРАЖНЕНИЯМ 787 наибольшее из них—9 876 533. Имеются решения для всех годов XXI века, за исключением 2091. Наибольшее количество решений (389) имеется для п = 12 221; наибольший отрезок представимых чисел—5109 < п < 7060. Сам Дьюдени смог дать ответы только для небольших значений п путем “отбрасывания девяток” 34. (а) х = 10®, 7378 + 155 + 92467 = 7178 + 355 + 92467 = 1016 + 733 + 98251 = 1014 + 255 + 98731 = 100000. (б) х = 47, 3036 + 455 + 12893 = 16384 (решение единственное). Наиболее быстрый способ решения данной задачи, вероятно, заключается в том, чтобы начать со списка 2529 простых чисел, состоящих из пяти различных цифр (т. е. 10243, 10247, ..., 98731), и переставлять оставшиеся пять цифр. Кстати, буквометик без ограничений EVEN+ODD = PRIME имеет десять решений; и ODD, и PRIME являются простыми только в одном из них. [См. М. Arisawa, J. Recr. Math. 8 (1975), 153.] 36. В общем случае, если Sk = |S*| для 1 < к < п, имеется si... Sk-i способов выбора каж- дого из нетождественных элементов Sk- Следовательно, ответ имеет вид П£=* (П>=1 s^fc-1). что в данном случае равно 22 • 63 • 2415 = 436 196 692 474 023 836123136. (Но при перенумерации вершин значения Sk могут изменяться. Например, если вершины (0,3,5) в (12) обменять с (e,d, с), то получим S14 = 1, S13 = 6, sn = 4, вц = 1 и 4® - 241® таблиц Симса.) 36. Поскольку каждый из элементов {0,3,5,6,9, а, с, f} находится на трех линиях, а каж- дый из остальных—только на двух, ясно, что можно положить St = {(),а, а2, а3, а, аа, аа2,аа3}, где а = (03fc)(17e8)(2bd4)(56a9) представляет собой поворот на 90°, а а = (05)(14)(27)(36)(8d)(9c)(af)(be) является кручением изнутри наружу. Кроме того, S» = где Р = (14)(28)(3c)(69)(7d)(be) является транспозицией, а 7 = (12)(48) (5а)(69)(7b)(de)—еще одним кручением; Sa = = Si = {()}. (Всего имеется 47 — 1 альтернативных ответов.) 37. Множество Sk можно выбрать к\к способами (см. упр. 35), а его нетождественные элементы можно присвоить а(к, 1), ..., а(к, к) еще к\ способами. Так что окончательный ответ—Ап = JlfeZi к\к+1 — п!^ 2 )/Пк=1^( * X Например, Аю « 1.148 х 10170. По формуле суммирования Эйлера мы получаем У"( )lnfc=- I х(х — l)\nxdx + О(п2 logri) =-n3lnn + О(п3), 2Л 6 так что In Ап = |n3 Inn + O(n3). 38. Вероятность того, что на шаге G4 потребуется ф(к), равна 1/fc! — l/(fc + 1)!, для 1 < к < п; вероятность того, что мы вообще не попадем на шаг G4, составляет 1/п!. Поскольку ф(к) выполняет [7с/2] транспозиций, среднее значение равно J2£~j(l//c! —1/(/с+1)!) [fc/2] = Е;£(Г*/21 - Г(* - 1)/21)/Л! - Г(п - 1)/2]/п! = Екнечетно 1/k! + О(1/(п - 1)!). 39. (а) 0123, 1023, 2013, 0213, 1203, 2103, 3012, 0312, 1302, 3102, 0132, 1032, 2301, 3201, 0231, 2031, 3021, 0321, 1230, 2130, 3120, 1320, 2310, 3210; (б) 0123, 1023, 2013, 0213, 1203, 2103, 3102, 1302, 0312, 3012, 1032, 0132, 0231, 2031, 3021, 0321, 2301, 3201, 3210, 2310, 1320, 3120, 2130, 1230. 40. По индукции находим <т(1,1) = (0 1), а(2,2) = (0 1 2), _ ( (0 к)(к—1 к—2 ... 1), если к > 3 нечетно, ’ 1 (0 к—1 к—2 1 ... к—3 к), если к > 4 четно;
788 ОТВЕТЫ К УПРАЖНЕНИЯМ 7.2.1.2 также ш(к) = (0 к), когда к четно, ш(к) = (0 к—2 ... 1 к—1 к), когда к > 3 нечетно. Таким образом, когда к > 3 нечетно, <т(к, 1) = (к к—1 0), a a(k,j) отображает к t-> j — 1 для 1 < j < к; когда к > 4 четно, cr(k,j) = (0 к к—3 ... 1 к—2 к—I)7 для 1 < j < к. Примечания. Первая схема, которая заставляет алгоритм G генерировать все пере- становки с помощью одних транспозиций, была разработана Марком Уэллсом (Mark Wells) [Math. Comp. 16 (1961), 192-195], но при этом была существенно более сложной. В. Липски- мл. (W. Lipski, Jr.) изучал такие схемы в общем случае и обнаружил ряд других методов [Computing 23 (1979), 357-365]. 41. Можно считать, что г < п. Алгоритм G будет генерировать r-вариации для любой таблицы Симса, если просто заменить ‘к Ч— 1’ на ‘к ч— п — г’ на шаге G3, при условии переопределения ш(к) как <т(п — г, п — г) ... <r(fc, к) вместо использования (16). Если п — г нечетно, метод (27) остается корректным, хотя формулы в ответе к упр. 40 при к < п—г+2 следует пересмотреть. Новые формулы имеют вид a(k,j) = (к j—1 ... 10) и ш(к) = (к ... 10), когда к = п — г; <т(к, j) = (к ... 1 О)7, когда к = п — г + 1. Если п — т четно, можно использовать (27), обратив четный и нечетный случаи при г < 3. Но когда г > 4, требуется более сложная схема, поскольку фиксированная транспозиция типа (к 0) может быть использована для нечетного к, только если ш(к — 1) является /с-циклом, что означает, что ш(к — 1) должна быть четной перестановкой; но ш(к) нечетна для к > п — г + 2. Следующая схема работает, когда п — г четно. Пусть т(к,])ш(к — I)- = (к k—j) Для l<j<k = n — г, и используем (27) для к > п — г. Тогда при к = п — г + 1 имеем ш(к—1) = (01 ... к—1), следовательно, а(к, j) отображает к i-> (2j—1) mod к для 1 < j < к, и <т(к,к) = (к к-1 к-3 ... 0 к-2 ... 1), ш(к) = (к ... 10), а(к + l,j) = (к+1 ... О)7. 42. Если <т(к, j) = (к j—1), имеем т(к, 1) = (к 0) и т(к, j) = (к j—1)(к j—2) = (к j—1 j—2) для 2 < j < к. 43. Конечно, w(l) = <т(1,1) = т(1,1) = (0 1). Следующее построение создает ш(к) = (к—2 к—1 к) для всех к > 2. Пусть a(k,j) = T(k,j)a>(k — I)-, где а(2,1) = (2 0), а(2,2) = (2 0 1), а(3,1) = а(3,3) = (3 1), а(3,2) = (3 1 0); это делает ст(2,2) = (0 2), ст(3,3) = (0 3 1). Тогда для к > 4 положим а(к, 1) = (к к—4), a(k,j) = (к к—3—j к—2—j) для 1 < j < к — 2, а к mod 3 = 0 к mod 3=1 а(к, к—2) = (к к—2 0) а(к,к—1) = (к к-2 к-3) а(к, к) = (к к—2) или (к к—3 0) или (к к—3) или (к к—3 к—2) к mod 3 = 2 или (к к—1 0), или (к к—1 к—3), или (к к—2). Это дает а(к, к) = (к—3 к к—2), что и требовалось. 44. Нет, поскольку r(k,j) является (к + 1)-циклом, а не транспозицией. (См. (19) и (24).) 45. (а) 202280070, поскольку иь = max({0,1,... ,а^ — 1} \ {ai,... ,afc_i}). (В действи- тельности un никогда не устанавливается алгоритмом, но мы можем считать это значение нулем.) (б) 273914568. 46. Истинно (в предположении, что ип = 0). Если либо иь > Ufc+i, либо a* > afc+i, то мы должны получить а* > и* > ait+i > Ufc+i- 47. Шаги (Xl, X2,..., Хб) выполняются соответственно (1, А, В, A — 1, В — Nn, А) раз, где A — No + • • • + Nn—i и В = nNo + (n — l)Ni + • • • + lNn—i. 48. Шаги (X2, X3,..., Хб) выполняются соответственно A„ + (1, n!, 0,0,1) раз, где An = n- = 1/fc! ~ n! (e — 1). Полагая их стоимости равными соответственно (1,1,3,1,3) обращений к памяти, общая стоимость операций с aj, lj или Uj составляет около 9е — 8 ~ 16.46 обращений к памяти на перестановку.
7.2.1.2 ОТВЕТЫ К УПРАЖНЕНИЯМ 789 Алгоритм L использует приблизительно (е, 2 + е/2,2е+2е 1 — 4) обращений к памяти на одну перестановку на шагах (L2, L3, L4), с общей стоимостью 3.5е + 2е-1 -2 к 8.25 (см. упр. 5). Алгоритм X можно улучшить для данного случая, оптимизировав код, когда к близко к п. Но, как показано в упр. 1, то же самое можно сделать и с алгоритмом L. 49. Упорядочьте сигнатуры так, чтобы |®о| > • • > |sg|; подготовьте также таблицы ио ... wg, хо - - - яд, уо • • У9, так, чтобы сигнатуры {sit,..., sg} представляли собой wXk < • • • < wVk. Например, когда SEND+M0RE = MONEY, мы имеем (so,..., sg) - (—9000,1000, —900, 91, —90,10,1, —1,0,0) соответственно для букв (М, S, 0, Е, N,R, D, Y, А, В); также (wo, • • •, wg) = (-9000,-900,-90,-1,0,0,1,10,91,1000) и х0...хд = 0112233344, у0...уд = 9988776554. Еще одна таблица fo-.-fg содержит fj = 1, если цифра, соответствующая Wj, не может быть нулем; в этом случае fo... fo = 1000000001. Эти таблицы упрощают вычисление самого большого и малого значений Skak + - - - + sgag для всех вариантов выбора а& ... ад из оставшихся цифр с использованием метода из упр. 25, поскольку связи lj информируют нас об этих цифрах в порядке возрастания. Этот метод требует очень затратных вычислений в каждом узле дерева поиска, но зато часто позволяет обойтись малым деревом. Например, первые восемь буквометиков из упр. 24 он решает ценой всего лишь 7, 13, 7, 9, 5, 343, 44 и 89 тысяч обращений к памяти; это существенное улучшение в случаях (а), (б), (д) и (з), хотя в случае (е) наблюдается значительное ухудшение. Еще одним плохим случаем является пример ‘CHILD’ из упр. 27, где подход слева направо требует 2947 тысяч обращений к памяти, в то время как подход справа налево — 588 тысяч обращений к памяти. Но он выигрывает в буквометиках BLOOD 4- SWEAT + TEARS (73 тысяч обращений к памяти против 360) и HELLO 4-WORLD (340 против 410). 50. Если а входит в группу перестановок, то в нее входят и все ее степени а2, а3, ..., включая ат~1 = а~, где т является порядком а (наименьшее общее кратное длин циклов). А (32) эквивалентно а~ = <ti<72 • • <тп-1- 51. Ложно. Например, и <j(k,i)~, и могут отображать к t-> 0. 52. r(k,j) = (k—j к—j+l) представляет собой смежный обмен, а w(k) = (n—1 ... 0) (п—2 ... 0) ... (к ... 0) = ф(п — 1)ф(к — 1) является fc-переворотом, за которым следует n-переворот. Перестановка, соответствующая управляющей таблице eg .. .Cn-i в алгорит- ме Н, имеет Cj элементов справа от j, которые меньше j, для 0 < j < п\ так что она точно такая же, как и перестановка, соответствующая щ ... Сп в алгоритме Р, за исключением того, что индексы смещены на 1. Единственным существенным отличием алгоритма Р и данной версии алгоритма Н является то, что алгоритм Р для прохода по всем вариантам управляющей таблицы ис- пользует рефлексивный код Грея, в то время как алгоритм Н выполняет обход чисел со смешанным основанием счисления в возрастающем (лексикографическом) порядке. Действительно, код Грея можно использовать вместе с любой таблицей Симса, изме- няя либо алгоритм G, либо алгоритм Н. Тогда не имеют значения все переходы, выполня- емые т(к, j) или т(к, j)~, а также перестановки w(fc). 53. В приведенном в разделе доказательстве того, что при п = 4 нельзя получить п! — 1 транспозиций, также показано, что можно свести эту задачу от п до п — 2 ценой одной транспозиции (п— 1 п—2), которая в обозначениях доказательства была названа ‘(Зс)’. Таким образом можно генерировать все перестановки с помощью следующего пре- образования на шаге Н4: если к = п — 1 или к = п — 2, то выполнить транспонирование fljmodn •<-> tt(j-i) modn> где j = Cn-i — 1. Если fc = n — 3 или fc = n — 4, транспонировать ап-1 <-> ап-2, а также aj mOd (n-2) <-> “(j-i) mod (n-2)> где j -- с„-з - 1. И в общем случае, если к = п — 2t — 1 или к = п — 2t — 2, транспонировать <in-2»+i <-> an-2i для 1 < г < t, а также a, mod (n-2t) *+ ab-i) mod (n-2t), где j = Cn-2t-i - 1. [См. CACM 19 (1976), 68-72.]
790 ОТВЕТЫ К УПРАЖНЕНИЯМ 7.2.1.2 <г(М) = Перестановки соответствующей таблицы Симса могут быть записаны следующим образом, хотя они и не появляются явно в самом алгоритме: (0 1 ... j—1 fc), если п — к нечетно; (0 1 ... к)3, если n — fc четно. Значение aj mod (n-2t) после обмена будет равно п — 2t — 1. Для повышения эффективно- сти можно также использовать тот факт, что fc обычно равно тг — 1. Общее количество транспозиций равно (тг — 2t)! — |тг/2] — 1. 54. Да; это преобразование может быть любым fc-циклом на позициях {1,..., fc}. 55. (а) Поскольку pi(m) = pi(mmodn!), когда тг > мы имеем р|(тг! + тп) = pi(m) для 0 < тп < тг • тг! = (тг + 1)! - тг!. Следовательно, /3„!+т = aP!(n!+m).. .aP!(n!+i)/3n! = • O'p!(i)0nt = PmPni для 0 < тп < п тг!, и мы, в частности, имеем /3(п+1)1 = °п+1 /?(п+1)!-1 = Cn+lPnl-lPni = <7п+1<7п /Зп!+1- Аналогично ап!+т = /З“,ат/Зп!ап! для 0 < тп < тг • тг!. Поскольку /?п! коммутирует с тп и т„+1, мы находим ап! = rnan|_i и ^(п+1)! Тп+10(п_|„1)!_ 1 7п+1 1—п! = тп+1/3-," = /?-!п-1тп+1т-(/Зп|ап!)"+1 /^(п+1)!^п+1 &П ^n+l Т~п (/^n!^nl) (б) В этом случае an+ia„ = (тг тг—1 ... 1) и тп+1т„ = (тг+1 тг 0), и по индукции мы имеем /?(„+!)! «(п+г)! = (п+1 тг ... 0). Следовательно, ajn!+m = /3~3ат(п ... О)-* для 0 < j < тг и 0 < тп < тг!. Достигаются все перестановки {0, ...,п}, поскольку (3~3ат фиксирует тг и (тг ... 0)J отображает тг i-> тг — j. Б6. Если в предыдущем упражнении установить а* = (fc—1 fc—2)(fc—3 fc—4) ..., то по индукции найдем, что /Зп!«п! представляет собой (тг + 1)-цикл (0 тг п— 1 тг—3 ... (2 или 1) (1 или 2) ... тг—4 тг—2). 57. Те же рассуждения, что и в упр. 5, дают нам 52^2 [fc нечетно]/fc! — (|тг/2] — 1)/тг! = sinhl — 1 — О(1/(тг — 1)!). Б8. Истинно. Согласно формулам из упр. 55, on|_i = (0 тг)/3~|(тг ... 0) и 0 i-> тг — 1, поскольку (Зп\ фиксирует тг. (Следовательно, алгоритм Е определит гамильтонов цикл на графе из упр. 66 тогда и только тогда, когда /?„' = (п—1 ... 2 1), а это справедливо тогда и только тогда, когда длина каждого цикла является делителем тг. Последнее утверждение истинно для тг = 2, 3, 4, 6, 12, 20 и 40, но не для прочих тг < 250 000.) 59. Граф Кейли с генераторами (аг,..., аь) в определении в тексте данного раздела изо- морфен графу Кейли с генераторами (of,..., ) в альтернативном определении, посколь- ку тг —> ajir в первом определении тогда и только тогда, когда тг- —> я~а~ в последнем. 60. (а, б) Имеется 88 дельта-последовательностей, которые сводятся к четырем клас- сам: Р = (32131231)3 (простые изменения, представлен восемью различными дельта- последовательностями); Q = (32121232)3 (вариант двойного кода Грея для простых из- менений с восемью представителями); R = (121232321232)2 (двойной код Грея с 24 пред- ставителями); S = 2аЗан, а = 12321312121 (48 представителей). Классы Р и Q являются циклическими сдвигами своих дополнений; классы P,QviS являются сдвигами своих обра- щений; класс R является сдвинутым обращением своего дополнения. [См. A. L. Leigh Silver, Math. Gazette 48 (1964), 1-16.] 61. Имеется (26,36,20,26,28,40,40,20,26,28,28,26) таких путей, заканчивающихся соот- ветственно (1243,1324,1432,2134,2341,2413,3142,3214,3421,4123,4231,4312).
7.2.1.2 ОТВЕТЫ К УПРАЖНЕНИЯМ 791 62. Для п = 3 есть только два пути, заканчивающихся соответственно 132 и 213. Но при п > 4 имеются коды Грея, ведущие от 12... п к любой нечетной перестановке а^аг ... ап- В упр. 61 это установлено для п = 4, и по индукции это можно доказать для п > 4 следующим образом. Пусть A(j)— множество всех перестановок, начинающихся с j, и пусть A(j,k) — те из них, которые начинаются с jk. Если (ao,ai,... ,ап)—любые нечетные перестанов- ки, такие, что aj G А(а^,а^+1), то (12)aj является четной перестановкой в A(xj+i,Xj). Следовательно, если х^хг ... хп —перестановка множества {1,2,..., п}, то существует как минимум один гамильтонов путь вида (1 2)оо--------ai — (12)ai----------а2----------(12)a„-i--------a„; подпуть от (1 2)aj-i до aj включает все элементы А(г^). Такое построение решает задачу по крайней мере (п — 2)!П/2П-1 различными спосо- бами при ai 1, поскольку можно принять <зд = 2 1... п и ап = aiaz ... ап; существует (п — 2)! способов выбора хг ... Zn-i, и (п — 2)1/2 способов выбора каждого из ai, ..., an-i- Наконец, если ai = 1, возьмем произвольный путь 12...п — — а^аг.-.ап, который проходит через все А(1), и выберем произвольный шаг а — а' с a G A(l, j) и а' € A(l, j') для некоторого j j'. Заменим этот шаг на а — (12)ai-----------аг--------(1 2)an-i--------ап — а', используя конструкцию наподобие приведенного выше гамильтонова пути, но теперь с ai = а, ап = (12)az, xi = 1, хг = j, хп = j' и rcn+i = 1. (В этом случае все перестановки ai, ..., ап могут быть четными.) 63. Оценки методом Монте-Карло с использованием методов из раздела 7.2.3 говорят о том, что общее количество классов эквивалентности можно грубо оценить как 1.2 х 1021; большинство из этих классов будут содержать 480 циклов Грея. 64. Свойством двойного кода Грея обладают ровно 2 005 200 дельта-последовательностей; они принадлежат 4206 классам эквивалентности по отношению к циклическому сдвигу, обращению и/или дополнению. Девять классов, таких как код 2a2aR, где а= 12343234321232121232321232121234343212123432123432121232321, являются сдвигами своих обращений; 48 классов состоят из повторяющихся циклов дли- ной 60. Один из наиболее интересных классов последнего типа имеет вид аа, где а = /32/34/34/34/34, /3 = 32121232123. 6Б. Такой путь существует для любого заданного N < п!. Пусть N-я перестановка имеет вид а = ai ...ап и пусть j = сц. Пусть также П^ представляет собой множество всех перестановок /3 = bi... bn, для которых bi = к и /3 < а. По индукции по N существует путь Грея Pi для Цр Тогда можно построить пути Грея Рк для П^ U П1 U U Щ_1 для 2 < к < j, последовательно комбинируя P*-i с циклом Грея для Щ_1. (См. построение из ответа к упр. 62. Фактически Pj будет циклом Грея при N, кратном 6.) 66. Определяя дельта-последовательность с помощью правила 7T(fc+i) mod n! = (1 мы находим ровно 36 таких последовательностей, причем все они являются циклическими сдвигами шаблона типа (xyzyzyxzyzyz)2. (Следующий случай, п = 5, вероятно, имеет около 1018 решений, не являющихся эквивалентными по отношению к циклическому сдви- гу, обращению и перестановке координат, т. е. всего около 6 х 1021 различных дельта- последовательностей.) Кстати, Игорь Пак (Igor Рак) показал, что граф Кейли, сгенериро- ванный звездными транспозициями, в общем случае является (п — 2)-мерным тором.
792 ОТВЕТЫ К УПРАЖНЕНИЯМ 7.2.1.2 67. Если положить тг эквивалентным тг(12345), то можно получить приведенный граф с 24 вершинами, имеющий 40 768 гамильтоновых циклов, 240 из которых приводят к дельта- последовательностям вида а5, в которых а использует каждую транспозицию 6 раз (напри- мер, а = 354232534234532454352452). Общее количество решений этой задачи, вероятно, составляет около 1016. 68. Если А не является связным, то связным не является и G. Если А—связный граф, можно считать, что он является свободным деревом. Более того, в этом случае можно доказать обобщение результата упр. 62: для п > 4 существует гамильтонов путь в G от тождественной перестановки к любой нечетной перестановке. Без потери общности можно считать, что А содержит ребро 1 —2, где 1—лист дерева, и применить доказательство, подобное использованному в упр. 62. [Эта элегантная конструкция принадлежит М. Чуэнте (М. Tchuente), Ars Combinato- ria 14 (1982), 115-122. Широкие обобщения рассмотрены Раски (Ruskey) и Сэведж (Savage) в SIAM J. Discrete Math. 6 (1993), 152-166. См. также публикацию на русском языке Кибернетика 11,3 (1975), 17-21 (английский перевод—Cybernetics 11 (1975), 362-366).] 69. Если последовать указанию, модифицированный алгоритм будет вести себя при п = 5 так, как показано далее. 1234 1243 1423 4123 4132 1432 1342 1324 3124 3142 3412 4312 4 t 4 t 4 t 4 t 4 t 4 4 54321 24351 24153 54123 14523 14325 24315 24513 54213 14253 14352 54312 12345 15342 35142 32145 32541 52341 51342 31542 31245 35241 25341 21345 15432 12435 32415 354124-31452 51432 52431 324514-35421 31425 21435 25431 23451 53421 51423 21453—>25413 23415 13425 15423->12453 52413 53412 13452 21543 51243 53241 23541 23145 25143 15243 13245 13542 53142 52143 12543 34512 34215 14235 14532 54132 34152 34251 54231 24531 24135 34125 34521 32154—>35124 15324->12354 52314 325144-31524 51324 21354->25314 35214—>31254 45123 <—42153 423514—45321 41325 41523—>42513 42315 453124-41352 412534-45213 43215 43512<—41532 41235 45231->43251 43152->45132 42135 425314-43521 43125 51234 21534->23514 53214 132544-15234 251344-23154 53124 13524—> 12534 52134 4- t 4- t 4 t 4 t 4 t 4 t Здесь столбцы представляют множества перестановок, циклически поворачиваемых и/или отражаемых всеми 2п способами; следовательно, каждый столбец содержит ровно одну “неточную перестановку” (см. упр. 18). Для систематического перебора всех неточных перестановок можно прибегнуть к алгоритму Р, зная, что пара ху находится в столбце перед ух, а применение т' вместо р' будет перемещать нас вправо или влево. На шаге Z2 пропускается обмен ai Наг, тем самым заставляя перестановки ai...an-i повторять самих себя в обратном направлении. (Мы неявно используем тот факт, что в выходе алгоритма Т t[fc] = £[тг! — fc].) Теперь, если заменить 1... п на 24 ... 31 и ф ... Ап на AiAnA2An-i..., можно полу- чить немодифицированный алгоритм, результат работы которого показан на рис. 42, (б). Этот метод вдохновлен (неконструктивной) теоремой Э. Ш. Рапапорт (Е. S. Rapa- port), Scripta Math. 24 (1959), 51-58. Он иллюстрирует более общий факт, замеченный Карлой Сэведж (Carla Savage) в 1989 году, а именно то, что граф Кейли для любой группы, сгенерированной тремя инволюциями, р, а, т, имеет гамильтонов цикл, когда рт = тр. [См. I. Рак и R. Radoicic, Discrete Math. 309 (2009), 5501-5508.] 70. Нет; самый длинный цикл в этом ориентированном графе имеет длину 358. Но есть пары непересекающихся циклов длиной 180, из которых можно получить гамильтонов путь
7.2.1.2 ОТВЕТЫ К УПРАЖНЕНИЯМ 793 длиной 720. Например, рассмотрим циклы асгрсг и устст, где а = та5та5та3та2та5та3та2та5та5та2та3та1та5тсг5та5та3та1та1та3т<г2т<г1то'1; а 352252311513553212311324 Р = сг тег тег тег тег тег тег тег тег тег тег тег тег тег тег тег тег тег тег тег тег тег тег тег ; 5531132523515321231132 7 = егтег тег тег тег тег тег тег тег тег тег тег тег тег тег тег тег тег тег тег тег тег тег 55535252311513355152312 тег тег тег тег тег тег тег тег тег тег тег тег тег тег тег тег тег тег тег тег тег тег тег . Если мы начнем с 134526 и последуем асг[3т, то достигнем 163452; следуя затем 7<тт, достигнем 126345; следуя затем сгут, достигнем 152634; следуя затем Рета, в итоге получим 415263. 71. Брендон Мак-Кей (Brendan McKay) и Фрэнк Раски (Frank Ruskey) нашли такие циклы с помощью компьютера для п = 7, 9 и 11, но какую-либо интересную структуру им выявить не удалось. 72. Любой гамильтонов путь включает (п— 1)! вершин, отображающих у i-> х, за каждой из которых (если она не последняя) следует вершина, отображающая х i-> х. Таким обра- зом, одна вершина должна быть последней; в противном случае вершин, отображающих х i-> х, было бы (п — 1)! + 1. 73. (а) Сначала предположим, что /3 является тождественной перестановкой (). Тогда каждый цикл а, который содержит элемент А, целиком лежит в А. Следовательно, циклы сг получаются путем опускания всех циклов а, не содержащих элементов А. Все остальные циклы имеют нечетную длину, так что а представляет собой четную переста- новку. Если р не является тождественной перестановкой, применим эти рассуждения к а' = а.р~, Р' = () и сг' = сгР~, делая вывод о том, что сг' является четной перестановкой; таким образом, сг и Р имеют один и тот же знак. Аналогично одинаковые знаки имеют а и а, поскольку Ра~ = (ар~)~ имеет тот же порядок, что и аР~. (б) Пусть X — вершины графа Кейли из теоремы R и пусть а—перестановка X, отображающая вершину тг в атг; эта перестановка имеет д/а циклов длиной а. Аналогично определим перестановку р. Тогда ар~ имеет д/с циклов длиной с. Если с нечетно, любой гамильтонов цикл графа определяет цикл а, который содержит все вершины и удовле- творяет гипотезе из п. (а). Следовательно, а и Р имеют нечетное количество циклов, поскольку знак перестановки п элементов с г циклами равен (—1)п-г (см. упр. 5.2.2-2). [Это доказательство, которое показывает, что X не может быть объединением любого нечетного числа циклов, представлено Ранкином (Rankin) в Proc. Cambridge Phil. Soc. 62 (1966), 15-16.] 74. Представление /3J7fc единственное, если потребовать 0 < j < д/с и 0 < к < с. Если мы имеем Pi = 7* для некоторого 0 < j < д/с, то группа будет иметь не более jc элементов. Отсюда следует, что р9^с = 'у* для некоторого t. Пусть сг является гамильтоновым циклом, как в ответе к предыдущему упражнению, и пусть 7 = &р~. Если тгст = тга, то тгуст должно быть равно тг-уа, поскольку тгу/3 = тга. А если тгст = тгД то тгу<7 не может быть равно тгуа, поскольку отсюда вытекало бы тгу2<7 = тгу2», ..., тгуса = тгу0». Таким образом, все элементы тг, тгу, тгу2, ... имеют эквивалентное поведение по отношению к их преемникам в сг. Когда путь тг —> тгст —> • • —> тгст’ имеет k(j) шагов типа а, имеем ттст3 = тгр^'ук^\ Таким образом, тгст®^с = тгу‘+к^9^с\ и мы имеем k(j + д/с) = k(j) для j > 0. Путь возвращается к тг в первый раз за д шагов тогда и только тогда, когда t + к(д/с) является взаимно простым с с.
794 ОТВЕТЫ К УПРАЖНЕНИЯМ 7.2.1.2 75. Воспользуемся результатом предыдущего упражнения с д = тп, а = т, Ь = п, с = mn/d. Число t удовлетворяет условиям t = 0 (по модулю т) и t + d = 0 (по модулю п); отсюда следует, что к +1 ± с тогда и только тогда, когда (d — k)m/d ± kn/d. Примечания. Модульный код Грея из упр. 7.2.1.1-78 представляет собой гамильтонов путь от (0,0) до (тп — 1, (—тп) modn), так что он является гамильтоновым циклом тогда и только тогда, когда тп кратно п. Естественно было бы сделать предположение (увы, ложное), что при d > 1 имеется как минимум один гамильтонов цикл. Но П. Эрдеш (Р. Erdos) и У. Т. Троттер (W. Т. Trotter) обнаружили [J. Graph Theory 2 (1978), 137-142], что если р и 2р + 1 —нечетные простые числа, то при тп = р(2р + 1) (Зр + 1) и п = (Зр + l)IIq=i qf,npoCTOe^”t₽^”t2₽+1] подходящего fc не существует. Интересные факты о других типах циклов в Gn х Сп можно найти в работе J. A. Gal- lian, Mathematical Intelligencer 13,3 (Summer 1991), 40-43. 76. Можно считать, что обход начинается в левом нижнем углу. Решений при тп и п, делящихся на 3, не существует, поскольку 2/3 ячеек в этом случае недостижимы. В про- тивном случае положим d = gcd(m, п) и, рассуждая, как в предыдущем упражнении, но с (х, у)а — ((х + 2) mod тп, (у + 1) mod ri) и (х, у)[3 = ((х + 1) mod тп, (у + 2) mod ri), найдем ответ y^(^[gcd((2d- fc)m, (fc + d)n) = d или (тп ±3 и gcd((2d — к)т, (к + d)ri) = 3d)]. 77. 01 • Генератор перестановки по типу Хила 02 N IS 10 Значение n (3 или больше, но не слишком). 03 t IS $255 04 j IS $0 8j 05 k IS $1 8fc 06 ak IS $2 07 Ч IS $3 08 LOC Data_Segment 09 a GREG 0 Базовый адрес для ао... ап-1- 10 AO IS 0 11 Al IS e+8 12 A2 IS 0+16 13 LOC 0+8*N Память для ао ... an-i. 14 c GREG 0-8*3 Ячейка 8со- 15 LOC 0-8*3+8*N 8сз ... 8cn-i, изначально—нуль. 16 OCTA -1 8сп = — 1, удобный ограничитель. 17 u GREG 0 Содержимое ао, кроме внутреннего цикла. 18 V GREG 0 Содержимое ai, кроме внутреннего цикла. 19 u GREG 0 Содержимое аг, кроме внутреннего цикла. 20 LOC «100 21 1H STCO O.c.k В — A Cfc <— 0. 22 INCL k.8 В — А к <— fc + 1. 23 OH LDO j,c,k В j +- ск. 24 CMP t, j,k В 25 BZ t,lB В Цикл, если Ск = к. 26 BN j.Done А Завершить работу, если ск < 0 (к = п). 27 LDO ak.a.k А — 1 Выборка afc. 28 ADD t, j,8 А — 1 29 STO t,c,k А - 1 ск +- j + 1.
7.2.1.2 ОТВЕТЫ К УПРАЖНЕНИЯМ 795 30 AND t,k,#8 A — l 31 CSZ j ,t,0 A — 1 Установить j <- 0, если к четно. 32 LDO aj.a.j A — 1 Выборка aj. 33 STO ak.a,j A — 1 Заменить на щ. 34 CSZ u, j,ak А — 1 Установить и <— ак, если j = 0. 35 SUB j.j.8 А - 1 j <- j — 1. 36 CSZ v, j.ak А — 1 Установить v <— ак, если j = 0. 37 SUB j.j.8 А - 1 j <- j - 1. 38 CSZ v. j.ak А — 1 Установить w <— ак, если j = 0. 39 STO aj,a,k А — 1 Заменить ак тем, что было aj. 40 Inner PUSHJ 0,Visit А ... (См. (42)) 55 PUSHJ 0,Visit А 56 SET t.u А Обмен и <-> w. 57 SET u.u А 58 SET w.t А 59 SET k,8«3 А к <- 3. 60 JMP OB А 61 Main LDO u.AO 1 62 LDO v.Al 1 63 LDO w,A2 1 64 JMP Inner 1 1 78. Строки 31-38 дают 2г — 1 инструкций, строки 61-63 дают г, а строки 56-58 — 3 + (г — 2)[г четно] инструкций (см. и>(г — 1) в ответе к упр. 40). Общее время работы, таким образом, равно ((2г! + 2) А + 2В + г — 5)д + ((2г! + 2г + 7 + (г — 2)[гчетно])А + 7 В — г — 4)г>, где А = п\/т\ и В = п!(1/г! + + 1/п!). 79. SLUu,[«f],t; SLU t,а,4; XOR t.t.a; AND t.t.u; SRUu.t,4; ORt.t.u; XOR a.a.t; здесь, как и в ответе к упр. 1.3. Г-34, запись ‘[#f] ’ означает регистр, который содержит константное значение *f. (См. аналогичный код в 7.1.3-(69).) 80. SLUu.a.t; MXOR и, [«8844221188442211] ,u; AND и,и, [«ffOOOOOO] ; SRU и,и,t; XOR а,а,и. Это легкое жульничество, поскольку при t = 4 код преобразует *12345678 в *13245678, но (45) все равно работает. Еще быстрее и хитрее была бы подпрограмма, аналогичная (42): рассмотрим PUSHJ 0,Visit; MXOR a,a,cl; PUSHJ 0,Visit; ... MXOR а,а,с5; PUSHJ 0,Visit где cl, ..., c5 представляют собой константы, которые приводят к последовательному преобразованию *12345678 в *12783456, *12567834, *12563478, *12785634, *12347856. Прочие инструкции, выполняемые с относительной частотой всего лишь 1/6 или 1/24, мо- гут позаботиться о перетасовке полубайтов внутри байтов и между ними. Этот остроумный способ не лучше (46) из-за накладных расходов на выполнение PUSHJ/POP. 81. k IS $0 ;kk IS $1 ;c IS $2 ;d IS $3 SET k.l к <— 1. ЗН SRU d,a,60 d <— крайний слева полубайт. SLU a,a,4 a <— 16a mod 1616. CMP c,d,k SLU kk,k,2 SLU d.d.kk OR t,t,d t «- t + 16fcd.
796 ОТВЕТЫ К УПРАЖНЕНИЯМ 7.2.1.2 PBNZ с ,1В INCL к,1 PBNZ а,ЗВ Вернуться в основной цикл, если d / к. к 4— к + 1. Вернуться во второй цикл, если к < п. | 82. д + (5п! + ПА — (п — 1)! + 6)и = ((5 + 10/п)г> + О(п 2))п! плюс время посещения, где А = 2Е2*= i fc! — количество итераций цикла ЗН. 83. При соответствующей инициализации и таблице из 13 октабайт потребуется только около десятка инструкций MMIX. magic GREG *8844221188442211 ОН (Посетить регистр а.) PBN с, Sigma Таи MXOR t,magic,a; ANDNL t,«ffff; JMP IF Sigma SRU t,a,20; SLU a,a,4; ANDNML a,#fOO 1Н XOR a,a,t; SLU c,c,l 2Н PBNZ c,OB; INCL p,8 ЗН LDOU c,p,O; PBNZ c,0B 84. Считая, что все процессоры имеют одну и ту же скорость работы, мы можем пред- ложить, чтобы fc-й процессор генерировал все перестановки ранга (fc — 1)п!/р < г < кп\/р, используя любые методы, основанные на управляющих таблицах ci... Сп. Начальную и ко- нечную управляющие таблицы легко вычислить путем преобразования их рангов в числа в системе счисления со сметанными основаниями (см. упр. 12). 85. Можно воспользоваться методом наподобие используемого в алгоритме 3.4.2Р: для вычисления fc = г(а) сначала установить а'а. 4— j для 1 < j < п (обратная перестановка). Затем установить к 4— 0 и для j = п, п — 1, ..., 2 (в указанном порядке) установить t 4— a'j, к 4— kj + t — 1, at 4— а^, a'aj 4— t. Для вычисления И-4(fc) следует начать с ai 4— 1. Затем для j = 2, ..., п — 1, п (в указанном порядке) установить t 4- (fcmodj) + 1, aj 4- at, at 4- j, к 4- [fc/j'J. [Cm. S. Pleszczynski, Inf. Proc. Letters 3 (1975), 180-183; W. Myrvold and F. Ruskey, Inf. Proc. Letters 79 (2001), 281-284.] Если же нам нужно искать ранг объекта и объект по рангу только для п® вариаций ai... ат множества {1,... ,п}, то предпочтительнее использовать другой метод. Для вы- числения fc = r(ai... ат) следует начать с Ьг ... Ьп 4— b'i... 5„ 4- 1... п; затем для j = 1, ..., т (в указанном порядке) установить t 4— b'aj, bt <— bn+i-j и b'bt 4— t; наконец установить к 4— 0 и для j = т, ..., 1 (в указанном порядке) установить fc 4- fc х (n+1 —j)+ba. — 1. Для вычисления г'-Ч (fc) следует начать с bi... bn 4— 1... п; затем для j - 1, ..., т (в указанном порядке) установить t 4— (fc mod (n + 1 — j)) + 1, aj 4- bt, bt 4- bn+i-j, к 4- [fc/(n + 1 — j)J. (См. ynp. 3.4.2-15 для случаев больших n и малых m.) 86. Если х -< у и у -< z, алгоритм никогда не поместит ни у слева от х, ни z слева от у, так что он никогда не будет выяснять взаимоотношение х и z. 87. Они находятся в лексикографическом порядке; алгоритм Р использует рефлексивный порядок Грея. 88. Сгенерируйте обратные перестановки с а'о < a'j < a^, а'3 < а'4 < а'5, а'6 < а'7, a'g < ag, a0 < 03, a6 < Og. 89. (а) Пусть dk - max{j | 0 < j < к и j нетривиален}, где 0 считается нетривиальным. Такую таблицу легко предвычислить, поскольку j тривиален тогда и только тогда, когда он следует за {1,... ,j — 1}. В алгоритм следует внести следующие изменения: установить fc 4- dn на шаге V2 и fc 4- dk-i на шаге V5. (Считаем dn > 0.) (б) Теперь М = 52"=1 tj [7 нетривиален].
7.2.1.2 ОТВЕТЫ К УПРАЖНЕНИЯМ 797 (в) Имеется не менее двух топологических сортировок а,-... ак множества {у,..., fc}, и каждая из них может быть размещена после любой топологической сортировки ai... a,-i множества (г) Алгоритм 2.2.3Т многократно выводит минимальные элементы (т. е. элементы, не имеющие предшественников), удаляя их из графа отношений. Мы используем его в обрат- ном порядке, повторно удаляя и присваивая наивысшие метки максимальным элементам (т. е. элементам, не имеющим преемников). Если существует только один максимальный элемент, он тривиален. Если и fc, и 2 максимальны, они оба выводятся до любого элемента х, для которого справедливо отношение х -< к или х -< I, поскольку шаги Т5 и Т7 хранят максимальные элементы в очереди, а не в стеке. Таким образом, если fc нетривиален и выводится первым, то элемент I может стать тривиальным, но следующий нетривиальный элемент j не будет выводиться перед 2; а fc не связан никаким отношением с I. (д) Пусть для нетривиальных t выполняются условия si < S2 < • < sr = N. Тогда согласно (в) имеем Sj > 2sj-2- Следовательно, М = S2 + • • • + sr < sr(l + | + | + • • •) + Sr-1(1 + | + 5 + •••) < 4sr. (На самом деле истинна более сильная оценка, как заметил М. Печарски (М. Peczars- ki): пусть so = 1, нетривиальными индексами являются 0 = fci < fc2 < • < кг и пусть k'j = max{fc | 1 < fc < fcj, fc / fcj} для j > 1. Тогда fcj+1 > fcj. Существует Sj топологи- ческих сортировок {1,..., fcj+i}, которые заканчиваются fcj+i; и существует как минимум Sj-i сортировок, которые заканчиваются fcj+i, поскольку каждая из Sj-i топологических сортировок {1,..., kj — 1} может быть расширена. Следовательно, Sj+1 > Sj + Sj-l для 1 < j < г. Пусть теперь уо — 0, зд = F2 Ч--1- Fr и у, = yj-2 + yj-i - Fr+i для 1 < j < г. Тогда г—1 Fr+l(si Ч---h Sr) Ч~ 3/j (sr+l-j — Sr-j — Sr-l-j) = (7*2 -I-FFr+l)sr, 3=1 и каждое значение з/j = Fr+i — 2Fj — (— l)JFr+i_j является неотрицательным. Следователь- но, si Ч---1- sr < ((7*2 Ч-1- Fr+i)/Fr+i)sr » 2.6sr. В следующем упражнении показано, что данная граница является наилучшей возможной.) 90. Согласно упр. 5.2.1-25 количество таких перестановок N равно F„+i. Следовательно, М = Fn+i + + F2 = Fn+з — 2 ~ <f>2N. Кстати, заметим, что все такие перестановки удовлетворяют условию «д .. .ап = а{ .. .а'п, и их можно упорядочить в виде пути Грея (см. упр. 7.2.1.1-89). 91. Поскольку tj = (j — l)(j — 3) ... (2 или 1), находим, что М = (1 Ч- 2/х/тгтг Ч- О(1/тг))N. Примечание. Таблица инверсий ci... сгп для перестановок, удовлетворяющих соот- ношениям (49), характеризуется условиями щ = 0, 0 < С2к < C2fc-i, 0 < C2fc+i < С2к-1 Ч-1. 92. Общее количество пар (R, S), где R—частичное упорядочение, a S—линейное упоря- дочение, включающее R, равно Рп, умноженному на ожидаемое количество топологических сортировок; оно также равно Qn, умноженному на п!. Таким образом, ответ имеет вид тг! Q„/P„. Вычисление Рп и Qn будет рассматриваться в разделе 7.2.3. Для 1 < п < 12 ожидаемые значения приближенно равны (1,1.33,2.21,4.38,10.1,26.7,79.3,262,950,3760,16200,74800). Асимптотические значения при тг —> оо были получены Брайтвеллом (Brightwell), Прёме- лем (Promel) и Стигер (Steger) [J. Combinatorial Theory А73 (1996), 193-206], но предельное
798 ОТВЕТЫ К УПРАЖНЕНИЯМ 7.2.1.2 поведение очень сильно отличается от поведения при практических значениях п. Значе- ния Qn были впервые получены для п < 5 Ш. П. Аванном (S. Р. Avann) [?quationes Math. 8 (1972), 95-102]. 93. Основная идея заключается в введении фиктивных элементов п + 1 и п + 2, таких, что j -< п + 1 и j < п + 2 для 1 < j < п, и поиске для таких расширенных отношений всех топологических сортировок, осуществляющихся с помощью смежных обменов. Затем можно взять каждую вторую перестановку, игнорируя фиктивные элементы. Можно использовать алгоритм, аналогичный алгоритму V, но с рекурсией, сводящей п к п — 2 путем вставки п — 1 и п среди ai... ап-2 всеми возможными путями, в предположении, что п — 1 / п, время от времени обменивая п + 1 с п + 2. [См. G. Pruesse and F. Ruskey, SICOMP 23 (1994), 373-386. Реализация без применения циклов описана в работе Canfield and Williamson, Order 12 (1995), 57-75.] 94. Случай n = 3 иллюстрирует общую идею шаблона, который начинается с 1... (2п) и заканчивается 1(2п)2(2п-1).. .п(п+1): 123456, 123546, 123645, 132645, 132546, 132456, 142356, 142536, 142635, 152634, 152436, 152346, 162345, 162435, 162534. Совершенные паросочетания можно рассматривать как инволюции {1,... ,2п}, име- ющие п циклов. При таком представлении рассматриваемый шаблон включает две транс- позиции на шаг. Обратите внимание, что таблицы инверсий С только что перечисленных перестановок представляют собой соответственно 000000, 000100, 000200, 010200, 010100, 010000, 020000, 020100, 020200, 030200, 030100, 030000, 040000, 040100, 040200. В общем случае Ст = Сз = = Cin-i = 0 и n-кортежи (С2,С4,...,С2п) проходят по рефлексивному коду Грея с основаниями (2п — 1,2п — 3,..., 1). Таким образом, при желании процесс генерации легко сделать бесцикловым. [См. Timothy Walsh, J. Combinatorial Matb. and Combinatorial Computing 36 (2001), 95-118, Section 1.] Примечание. Алгоритмы для генерации всех совершенных паросочетаний восходят к работе И. Ф. Пфаффа (J. F. Pfaff) [Abbandlungen Akad. Wissenschaften (Berlin: 1814-1815), 124-125], который описал две такие процедуры. Его первый метод является лексикогра- фическим, а также соответствует лексикографическому порядку таблиц инверсий С; его второй метод соответствует солексному порядку этих таблиц. В обоих случаях наблюда- ется чередование четных и нечетных перестановок. 95. Сгенерируйте обратные перестановки с a'i < а'п > a2 < а„-1 > с помощью алгоритма V. (Количество решений приведено в упр. 5.1.4-23.) 96. Например, можно начать с ai... an-ian = 2... nl и bit>2 .. bnbn+i = 12...nl и ис- пользовать алгоритм Р для генерации (п — 1)! перестановок Ь2 • Ьп множества {2,..., п}. Сразу после того, как этот алгоритм выполнит обмен bi Ь>+1, мы устанавливаем аь4_, <— bi, аь4 <— Ь»+1, аь4+1 Ь»+2 и посещаем щ .. .оп- 97. Воспользуйтесь алгоритмом X с tfc(ai,... ,аь) = ‘а. к / к'. 98. Используя обозначения из упр. 47, мы имеем в соответствии с методом включения и исключения (упр. 1.3.3-26) № = (*)(—l)*(n — J)—• Если fc = O(logn), то Nn-k = (n!e-1/fc!)(l + O(logn)2/n); следовательно, A/n\ w (e — l)/e и B/n\ и 1. Количество обращений к памяти при предположениях из ответа к упр. 48, таким образом, составляет и А + В + ЗА + В — Nn + ЗА к п! (9 - ®) й б.Обп!, около 16.5 на одно неупорядочение. [См. аналогичный метод в работе S. G. Akl, BIT 20 (1980), 2-7.] 99. Предположим, что Ln генерирует Dn UDn-i, начиная с (1 2 ... п), затем (21 ... п) и заканчивая (1 ... п— 1); например, £3 = (1 2 3), (2 1 3), (1 2). Тогда можно генерировать D„+i как КПп, - -., Кп2, Кп1, где Кпк = (12 ... n)-fc(n n+l)L„(l 2 ... n)k; например, Dt
7.2.1.2 ОТВЕТЫ К УПРАЖНЕНИЯМ 799 представляет собой (12 3 4), (2 13 4), (12)(3 4), (3 1 2 4), (13 2 4), (3 1)(2 4), (2 3 1 4), (3 2 1 4), (2 3)(1 4). Обратите внимание, что Кпк начинается с цикла (fc+1 ... п 1 ... fc n+1), а заканчивается (fc+1 ... п 1 ... к—l)(fc n+1); так что умножение слева на (fc—1 fc) переносит нас от Кпк к Кп(ь-1-). Кроме того, умножение слева на (1 п) возвращает нас от последнего элемента Dn+i к первому. Умножение слева на (1 2 п+1) возвращает нас от последнего элемента Dn+i к (2 1 3 ... п), откуда мы можем вернуться к (1 2 ... п), следуя циклу для D„ в обратном направлении, тем самым завершая список Ln+i, что и требовалось. 100. Используйте алгоритм X с tk(ai,... ,аь) = ‘р> О или Z[g] /fc + 1’. Примечания. Количество неприводимых перестановок равно [zn] (1 — 1/ fc! zk); см. Л. Комте (L. Comtet), Comptes Rendus Acad. Sci. A275 (Paris, 1972), 569-572. Э. Д. Кинг (A. D. King) [Discrete Math. 306 (2006), 508-516] показал, что непри- водимые перестановки можно эффективно генерировать с помощью одной транспозиции на каждом шаге. В действительности для этого достаточно смежных транспозиций; например, когда п = 4, неприводимыми перестановками являются 3142, 3412, 3421, 3241, 2341, 2431, 4231, 4321, 4312, 4132, 4123, 4213, 2413. 101. Вот как выглядит лексикографический генератор инволюций, аналогичный алго- ритму X. Y1. [Инициализация.] Установить +- к и lk-i +- fc для 1 < к < п. Затем установить In Ч— 0, fc 4— 1. Y2. [Вход на уровень fc.] Если к > п, посетить ai... ап и перейти к шагу Y3. В против- ном случае установить р <— Zo, Uk +- р, lo Ip, к <— к + 1 и повторить данный шаг. (Мы решили положить ар - р.) Y3. [Уменьшение fc.] Установить fc f- fc - 1 и завершить работу алгоритма, если fc = 0. В противном случае установить q <— Uk и р «— ач. Если р = q, установить Zo <— q, q 4— 0, т* 4— Zp и fc 4— fc + 1 (подготовка к ар > р). В противном случае установить ZUfc_x 4- q, г 4- 1д (подготовка к ар > q). Y4. [Увеличение ар.] Если г = 0, перейти к шагу Y5. В противном случае установить lq 4- Ir, Uk-i 4- q, Uk 4— г, ap 4— r, aq <— q, ar 4- p, к 4- к + 1 и перейти к шагу Y2. Y5. [Восстановление ар.] Установить Zo 4- р, ар 4- р, ач <— q, к 4- к — 1 и вернуться к шагу Y3. | Пусть t„+i = tn + nt„-i, an+i = 1 + an + nan-i, to = ti = 1, ao = 0, ai = 1 (cm. 5.1.4-(40)). Шаг Y2 выполняется tn раз с к > п и ап раз с к < п. Шаг Y3 выполняется an раз с р = q, а всего—ап + tn раз. Шаг Y4 выполняется tn — 1 раз; шаг Y5—ап раз. Общее количество обращений к памяти для всех tn выводов, таким образом, приближенно равно llan + 12tn, где ап < 1.25331414tn. (Если скорость критична, данный алгоритм можно оптимизировать.) 102. Построим список Ln, который начинается с () и заканчивается (n—1 п), начиная с Ьз = (), (1 2), (1 3), (2 3). Если п нечетно, то Ln+i имеет вид L„, K„i, Kn2, , К„п, где Кпк = (к п)~Ln-i(k ...n)(fcn+l). Например, L4 = (), (1 2), (1 3), (2 3), (2 3)(1 4), (1 4), (2 4), (1 3)(2 4), (1 2)(3 4), (3 4). Если п четно, L„+i имеет вид Ln, Кп^п_^, *п(п-2), , (1 n-2)L«_! (1 n—2)(n n+1). Более подробно эта тема рассматривается в статье Уолша (Walsh), упомянутой в от- вете к упр. 94.
800 ОТВЕТЫ К УПРАЖНЕНИЯМ 7.2.1.2 103. Следующее элегантное решение Карлы Сэведж (Carla Savage) требует только п — 2 различных операций pj для 1 < j < п, где pj заменяет aj-iOjOj+i на aj+iOj-iaj при четном j и на ajOj+iaj-i при j нечетном. Можно считать, что п > 4; пусть At = (рзргргрз)3- В общем случае Ап будет начинаться и заканчиваться рп-1, а всего будет содержать 2п — 2 появлений рп-1- Для получения A„+i заменим к-ю операцию рп-1 в Ап на рпА'прп, где к = 1, 2, 4, ..., 2п—2, если п четно, и fc = 1, 3, ..., 2п —3, 2п —2, если п нечетно, и где А'п равно Ап с удаленными первым и последним элементами. Тогда, если начать с ai... ап = 1... п, операции pn-i в Ап приведут к тому, что позиция ап последовательно пройдет значения п —> pi —» п —> рз —>•••—> Рп-1 —> п, где pi.. -Pn-i - (п—1 — [п четно]) .. .4213 ... (п—1 — [пнечетно]); последней перестановкой вновь будет 1... п. 104. (а) У хорошо сбалансированной перестановки сумма 52fc=i &afc = n(n + 1)2/4 пред- ставляет собой целое число. (б) Замените fc на а* при суммировании по fc. (в) Достаточно быстрый способ подсчета при небольших п может быть основан на оптимизированном алгоритме простых изменений из упр. 16, поскольку значение как при каждом смежном обмене изменяется простым образом и поскольку п — 1 из каждых п шагов являются “колебаниями’’ которые могут быть выполнены очень быстро. Половину работы можно сэкономить, рассматривая только те перестановки, в которых 1 предше- ствует 2. Искомыми значениями для 1 < п < 15 являются 0, 0, 0, 2, 6, 0, 184, 936, 6688, 0, 420480, 4298664, 44405142, 0, 6732621476. 105. (а) Для каждой перестановки ai.. ,ап вставьте -< между a-j и aj+i, если aj > a,+i; вставьте между ними либо =, либо если aj < aj+i. (Перестановка с fc “подъемами” таким образом, дает 2к слабых порядков. Слабые порядки иногда называют “предпочтительным упорядочением”; в упр. 5.3.1-4 показано, что их общее количество приблизительно равно п!/(2(1п2)"+1). Код Грея для слабых порядков, в котором на каждом шаге выполняется обмен -< 4-> = и/или aj 4-> о,ч-1, может быть получен путем комбинирования алгоритма Р с бинарным кодом Грея на подъемах. (б) Начнем с ai... OnOn+i = 0... 00 и ао = —1. Будем выполнять алгоритм L до тех пор, пока он не остановится с j = 0. Найдем fc, такое, что ai > • • • > a*, = afc+i, и завершим работу, если к = п. В противном случае установим ai 4— afc+i +1 для 1 < I < к и перейдем к шагу кА. [См. М. Мог and A. S. Fraenkel, Discrete Math. 48 (1984), 101-112. Слабо упорядоченные последовательности характеризуются тем свойством, что если появляется fc и fc > 0, то появляется и fc — 1.] 106. Все слабо упорядоченные последовательности можно получить с помощью после- довательности элементарных операций а» 4-> aj и а* 4— а,-. (Пожалуй, можно было бы ограничить и эти преобразования, допуская только а,- 4-> а,+1 или а,- 4— a,+i для 1 < j < п.) 107. Каждый шаг, как заметил Г. С. Вильф (Н. S. Wilf), увеличивает величину J2fc=i 2* х [a*, =fc], так что в конечном счете игра должна завершиться. К решению поставленной задачи есть как минимум три подхода: плохой, хороший и еще лучше. Плохой состоит в том, чтобы разыграть все 13! перетасовок и записать самую длинную. Этот метод не может не дать верный ответ; проблема только в том, что 13! = 6227020800, а в среднем игра продолжается и 8.728 шагов. Хороший подход [A. Pepperdine, Math. Gazette 73 (1989), 131-133] состоит в розыг- рыше в обратном порядке, начиная с конечной позиции 1*...*, где * означает карту, повернутую рубашкой вверх; такая карта переворачивается только в том случае, когда ее значение становится существенным. Для выполнения хода назад из заданной позиции ai... a„ рассмотрим все fc > 1, такие, что либо аь = к, либо ак = * и к еще не переверну- та. Таким образом, позициями, предшествующими рассматриваемой, могут быть позиции 21* ... *, 3*1*... *, ..., п* ... *1. Некоторые из позиций (наподобие 6**213 для п = 6)
7.2.1.2 ОТВЕТЫ К УПРАЖНЕНИЯМ 801 предшественников не имеют, несмотря на то что перевернуты еще не все карты. Легко систематически исследовать дерево потенциальных предшествующих игр и показать, что количество узлов с t звездочками равно (n — l)!/t!. Следовательно, общее количество рассматриваемых узлов составляет [(п — 1)! е]. При п = 13 оно равно 1302 061345. Лучший способ заключается в игре в прямом направлении, начиная с позиции *...*, переворачивая верхнюю карту, если она лежит рубашкой вверх, проходя по всем (п — 1)! перестановкам множества {2,... ,п} по мере переворачивания карт. Обозначим через /(п) наибольшую возможную длину игры topswops с п картами. Если известно, что нижние п — т карт представляют собой (m+l)(m+2) .. .п в указанном порядке, то возможно не более f(rri) дальнейших шагов; таким образом, нет необходимости продолжать игру, если понятно, что она не сможет быть достаточно длинной, чтобы представлять интерес. Ге- нератор перестановок наподобие алгоритма X позволяет нам совместно использовать вы- числения для всех перестановок с одинаковыми префиксами и отбрасывать префиксы, не представляющие интереса. Карта в позиции j не обязательно должна принимать при пере- вороте значение j. Когда п = 13, этот метод требует рассмотрения только (1,11,940,6 960, 44 745,245 083,1118 216,4112 676,11798 207,26 541611,44 380 227,37 417 359) ветвей соответ- ственно на уровнях (1,2,..., 12) и выполнения в сумме только 482663902 ходов. Хотя некоторые линии игры и повторяются, раннее обрезание заведомо проигрышных ветвей ускоряет вычисления примерно в 11 раз по сравнению с обратным методом при п = 13. Единственный рекордсмен—80-ходовая игра, начинающаяся с расположения карт 2 9 4 5 11 12 10 1 8 13 3 6 7. 108. Этот результат справедлив для любой игры, в которой ai . . ,ап —> ОкОр(к,2) • • • Op(fc,k-l)OlOfc+l • • • о,п для ai = fc, где р(к, 2) ... p(fc, fc — 1) представляет собой произвольную перестановку множе- ства {2,..., fc — 1}. Предположим, что ai в процессе игры принимает ровно т различных значений d(l) < • • • < d(m); докажем, что при этом происходит не более Fm+i перестановок, включая исходное перетасовывание карт. Это утверждение очевидно при т = 1. Пусть d(j) представляет собой начальное значение ацту, где j < т, и предположим, что изменяется на шаге г. Если d(j) = 1, количество перестановок г + 1 < Fm + 1 < Fm+i- В противном случае г < Fm-i, и за шагом г следует не более Fm дальнейших перестановок. [SIAM Review 19 (1977), 739-741.] Значениями f(n) для 1 < п < 16 являются (0, 1, 2, 4, 7, 10, 16, 22, 30, 38, 51, 65, 80, 101, 113, 139), и они достижимы соответственно (1, 1, 2, 2, 1, 5, 2, 1, 1, 1, 1, 1, 1, 4, 6, 1) способами. Единственная приводящая к максимально длинной игре исходная перестановка для п = 16 имеет вид 9 12 6 7 2 14 8 1 11 13 5 4 15 16 10 3. 109. Остроумное построение, приведенное в работе [I. Н. Sudborough and L. Morales, Theoretical Comp. Sci. 411 (2010), 3965-3970], доказывает, что f(n) > -^n2 + 0(1). 110. Для 0 < j < 9 построим битовые векторы Aj = [a,- G Si]... [а,- G Sm] и Bj = [ j G Si]... [j GSm]. Тогда количество j, таких, что Aj = v, должно быть равно количеству fc, таких, что Bk = v, для всех битовых векторов v. А в таком случае значения {а,- | Aj = и} должны быть назначены перестановкам {fc | Вь = v} всеми возможными способами. Например, в приведенной задаче битовыми векторами являются (До,..., Ад) = (9,6,8, Ъ, 5,4,0, а, 2,0), (В0,...,В9) = (5,0,8,6,2, а, 4, Ъ, 9,0), в шестнадцатеричной записи; следовательно, ао ... ад = 8327061549 или 8327069541. 26 Зак. 3331
802 ОТВЕТЫ К УПРАЖНЕНИЯМ 7.2.1.2 В задаче большего размера битовые векторы можно хранить в хеш-таблице. Было бы лучше дать ответ в терминах классов эквавалентности, а не перестановок; и в самом деле, данная задача имеет мало общего с перестановками. 111. В ориентированном графе с п!/2 вершинами <ц ... ап-2 и п! дугами ai... ап~2 —> а2... Оп-i (по одной для каждой перестановки ai... an), входящая и исходящая степень каждой вершины равна 2. Кроме того, из путей наподобие ai...an_2 —> a2...an-i —t аз ... On —> a4 ... ana2 —> as ... Ona2ai —>•••—> 020103 ... an-2 можно видеть, что любая вер- шина достижима из любой другой. Следовательно, согласно теореме 2.3.4.2G имеется цепь Эйлера, и такая цепь, очевидно, эквивалентна универсальному циклу перестановок. Лек- сикографически наименьшим примером для п = 4 является (123124132134214324314234). [Г. Хёльберт (G. Hurlbert) и Г. Исаак (G. Isaak) в Discrete Math. 149 (1996), 123- 129, предложили другой привлекательный подход: назовем модульным универсальным циклом перестановок цикл из п! цифр {0,... ,п}, обладающий тем свойством, что каждая перестановка ai... ап множества {1,..., п} получается из последовательных цифр ui...ип, если положить Oj = (и, —с) mod (п+1), где с—“отсутствующая” в {ui,... ,ип} цифра. На- пример, модульный универсальный цикл (012032), по сути, единственен при п = 3; а лек- сикографически наименьший цикл для п = 4 имеет вид (012301420132014321430243). Если вершины ах... ап_2 и а'х ... а„_2 в ориентированном графе из предыдущего абзаца рассматривать как эквивалентные при ai — a'i = • • • = a„_2 — a^_2 (по модулю п), то мы получим ориентированный граф из (п—1)!/2 вершин, цепи Эйлера которого соответствуют модульным универсальным циклам перестановок для {1,... ,п — 1}.] 112. (а) Если цикл представляет собой aia2..., то на шаге j используйте а, если под- последовательность а^а^4-1.. .Oj+n-i является перестановкой; в противном случае исполь- зуйте р. (б) Это утверждение следует непосредственно из упр. 72. (в) Пусть 1?2 = ст2, и будем получать Qn+i /from Qn путем подстановки ст м- ст2р"-1 и р 1-4 ст2р"-2ст. Например, 1?з = (ст2р)2 и 1?4 = ((ст2р2)2ст2рст)2. Будем генерировать перестановки, начиная с п.,.21 и применяя последовательно элементы Qn\ например, последовательность при п = 4 имеет вид 4321,3214,2143,1423,4213,2134,1342,3412,4132,1324,3241,2431, 4312,3124,1243,2413,4123,1234,2341,3421,4231,2314,3142,1432, а соответствующий универсальный цикл—(432142134132431241234231). Заметим, что п в этой последовательности перестановок перемещается циклически; а перестановки, начи- нающиеся с п, соответствуют последовательности, полученной из f2n-i- [См. F. Ruskey and A. Williams, ACM Trans, on Algorithms в (2010), 45:1-45:12. Аналогичные методы, как говорят, были известны колокольным звонарям. Универсальные циклы можно также строить явно для перестановок произвольного мультимножества с помощью метода, аналогичного 7.2.1.1—(62); см. A. Williams, Ph.D. thesis (Univ, of Victoria, 2009).] 113. Согласно упр. 2.3.4.2-22 достаточно подсчитать ориентированные деревья с корнями в 12 ... (п—2) в ориентированном графе из ответа к предыдущему упражнению; а подсчи- тать их можно на основе упр. 2.3.4.2-19. Для п < 6 числа Un оказываются соблазнительно простыми: U2 = 1, U3 = 3, U4 = 2Т • 3, Ik = 233 • З8 • 53, t/6 = 2190 • З49 • 533. (Здесь (121323) считается тем же циклом, что и (213231), но отличным от (131232).) Марк Кук (Mark Cooke) открыл следующий поучительный способ эффективного вычисления этих значений. Рассмотрим п! х п!-матрицу М = 21 — R — S, где = [тг' = тгр] и = [тг' = тгст]. Существует матрица Н, такая, что и Н~RH, и Н~SH имеют блок диагонального вида, состоящий из копий х /с>-матриц и Sy, для каждого
7.2.1.2 ОТВЕТЫ К УПРАЖНЕНИЯМ 803 разбиения А числа п, где равно п!, деленному на произведение длин уголков формы А (теорема 5.1.4Н), и где Яд и Sx являются матричным представлением р и ст на основе диаграммы Юнга. [Доказательство можно найти в Bruce Sagan, The Symmetric Group (Pacific Grove, Calif.: Wadsworth & Brooks/Cole, 1991).] Например, когда n = 3, мы имеем /0 0 0 1 0 0\ 0 0 0 0 0 1 0 0 0 0 1 0 100000 001000 \о 1 о о о о/ /0 1 0 0 0 0\ 0 0 1 0 0 0 100000 000010 000001 \о о о i о о/ /11 1-11 0\ 11-10 0-1 11 О 1-11 1-1-110 1 1-11 О 1-1 \ 1 — 1 О -1-1 о / /1 0 0 0 0 0\ /1 0 0 0 0 0 \ 0 -1 0 0 0 0 0 1 0 0 0 0 H~RH = 0 0 0 0 0 1 1 0 0 0 0 0 , H~SH = 0 0 0 0 0 -1 1 -1 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 -1 \о 0 0 0 1 о/ \о 0 0 0 1-1/ где строки и столбцы индексируются соответствующими перестановками 1, ст, ст2, р, рст, рст2; здесь кз = fciii = 1 и кз1 = 2. Следовательно, собственные значения М представляют собой объединение по А Лд-кратных повторяющихся собственных значений кх х Ьд-матриц 21 — Rx — Sx- В этом примере собственные значения (0), (2) и двух ( Д °) представляют собой {0}, {2} и два {2,3}. Собственные значения М непосредственно связаны с собственными значениями мат- рицы А в упр. 2.3.4.2-19. Действительно, каждый собственный вектор А дает собственный вектор М, если приравнять компоненты для перестановок тг и тгрст", поскольку строки тг и тгрст" матрицы R + S равны. Например, /2 -1-1 А = I -1 2 -1 \-1 -1 2 имеет собствен- ные векторы \1/ \ О / \-1/ для собственных значений 0, 3, 3, что дает собственные векторы (1,1,1,1,1,1)т, (1,—1,0,0,—1,1)т, (1,0, —1, —1,0,1)т мат- рицы М для тех же собственных значений. Матрица М имеет п!/2 дополнительных собственных векторов со всеми нулевыми компонентами, за исключением тех, которые проиндексированы тг и тгст"р для некоторого тг, поскольку только строки тгр" и тгст" мат- рицы R + S имеют ненулевые элементы в столбцах тг и тгст“р; такие векторы дают п!/2 дополнительных собственных значений, равных 2. Следовательно, значение Un, которое представляет собой 2/п!, умноженное на про- изведение ненулевых собственных значений А, равно 21“",^2/тг!, умноженному на произве- дение ненулевых собственных значений М. К сожалению, закономерность малых простых сомножителей не продолжается, и Ur равно 21217312351197511284335732О792110935, a U9 кратно 59229013196333168.
804 ОТВЕТЫ К УПРАЖНЕНИЯМ 7.2.1.3 РАЗДЕЛ 7.2.1.3 1. Для данного мультисочетания сформируем последовательность е« ... егех путем пе- речисления справа налево сначала несовпадающих элементов, затем—элементов, встре- чающихся дважды, после—трижды и т. д. Установим e-j 4— s — j для 0 < j < s — n — t, так что каждый элемент ej для 1 < j < t равен некоторому элементу справа от него в последовательности е« ... eieo ... e_s. Если первый такой элемент равен eCj-a, мы полу- чаем решение (3). И наоборот, каждое решение (3) дает единственное мультимножество {ei,..., е«}, потому что Cj < s + j для 1 < j < t. [Подобное соответствие было предложено Э. Каталаном (Е. Catalan): если 0 < ei < • • • < et < s, примем {ci,...,c(} = {ei,...,et}U {s + y | 1 < j < t и e, = ey+i}. Cm. Memoires de la Soc. roy. des Sciences de Liege (2) 12 (1885), Melanges Math., 3.] 2. Начнем с нижнего левого угла и для каждого нуля битовой строки будем идти вверх, а для каждой единицы—вправо. В результате получится путь см. рисунок справа. И наоборот, мы можем легко “прочесть” представления а,, bi, с», dt, pt и из (2)—(11) в любом заданном пути от (0,0) до (s, t). 3. В этом алгоритме переменная г представляет собой наименьший положительный индекс, такой, что qr > 0. N1. [Инициализация.] Установить Qj 4— 0 для 1<7<1и®4- s. (Считаем, что st > 0.) N2. [Посещение.] Посетить композицию qt... qo- Перейти к шагу N4, если до = 0. N3. [Простой случай.] Установить qo 4— qo — 1, г 4— 1 и перейти к шагу N5. N4. [Сложный случай.] Завершить работу алгоритма, если г = t. В противном случае установить qo 4— qr — 1, qr 4— 0, г 4— г + 1. N5. [Увеличение дг.] Установить дг 4— дг + 1 и вернуться к шагу N2. | [См. САСМ 11 (1968), 430; 12 (1969), 187. Задача генерации таких композиций в умень- шающемся лексикографическом порядке существенно сложнее.] 4. Можно обратить роли 0 и 1 в (14), так что 0’*10’‘-11... 10’110во = 1г“01Гв_10... 01п 01го. Это дает нам 0110о10210210410о10о10о10о10о10110°10110° = 1°01201о01101о01101о01о01°016012011. Лексикографический порядок an-i..-aiao соответствует лексикографическому порядку Га ... Г1Го- Кстати, имеется также связь мультисочетаний: {dt,..., di} = {rs-s,..., го -0}. Напри- мер, {10,10,8,6,2,2,2,2,2,2,1,1,0} = {Oil, 210,0-9,1-8,0-7,1-6,0-5,0-4,0-3,6-2,2-1,10}. 5. (а) Установить Xj = c-j — {(j — 1)/2J в каждом t-сочетании из п+ [t/2]. (б) Установить Xj = Cj + j; 4-1 в каждом t-сочетании из п — t — 2. (Аналогичный подход позволяет найти все решения (xt,... ,Ж1) неравенств ж>+1 > гсу + Sj для 0 < j < t для заданных значений Tt+i, (St,...,So) и tq.) 6. Считаем, что t > 0. Мы добираемся до шага ТЗ, когда щ > 0; до шага Т5, когда сг = ci + 1 > 1; до шага Т4 для тех 2 < j < t + 1, для которых Cj = ci + у — 1 > j. Таким образом, соответствующие величины равны: Т1, 1; Т2, (?); ТЗ, ("71); Т4, (?-,2) + (?“») + - + ГГх) = (ri); Т5, (Г~Ъ Тб, (ri) + (ri) -1.
7.2.1.3 ОТВЕТЫ К УПРАЖНЕНИЯМ 805 7. Процедура немного проще, чем требуется для алгоритма Т. Примем, что s < п. S1. [Инициализация.] Установить bj 4— j + п — s — 1 для 1 < j < s; затем установить 3 1. S2. [Посещение.] Посетить сочетание ba .. .bibi. Завершить работу алгоритма, если j > s. S3. [Уменьшение 6j.] Установить bj bj — 1. Если bj < j, установить j 4- j + 1 и вернуться к шагу S2. S4. [Сброс bj-i ... bi-] Если j > 1, установить bj-i 4— bj — 1 и j 4— j — 1 и повторять эти действия до тех пор, пока выполняется условие j > 1. Перейти к шагу S2. | (См. S. Dvorak, Comp. J. 33 (1990), 188. Заметим, что если ж* = п — bk при 1 < к < s, то этот алгоритм проходит по всем сочетаниям хд ... Ж2Ж1 из {1,2,..., п} с 1 < хд < • • • < жг < xi < п в возрастающем лексикографическом порядке.) 8. А1. [Инициализация.] Установить ап...ао 4— 0®+11*, q 4— t, г 4- 0. (Считаем, что 0 < t < п.) А2. [Посещение.] Посетить сочетание a„-i... aiao- Перейти к шагу А4, если q = 0. АЗ. [Замена ... 01’ на ... 101’-1.] Установить ад 4- 1, a,_i 4- 0, q 4- q— 1; затем, если q — 0, установить г 4— 1. Вернуться к шагу А2. А4. [Сдвиг блока единиц.] Установить аг 4— 0 и г 4— г + 1. Затем, если ar = 1, установить а, 4— 1, q 4— q + 1, и повторить шаг А4. А5. [Перенос влево.] Завершить работу алгоритма, если г = п; в противном случае установить аг 4— 1. Ав. [Нечетно?] Если q > 0, установить г 4— 0. Вернуться к шагу А2. | На шаге А2 на крайние справа 0 и 1 в an-i.. .ао указывают соответственно q и т. Шаги А1, ..., А6 выполняются с частотой 1, ("), (”Zi), (7) ~ 1, С*?1)’ ("7*) — 1- 9. (а) Первые ("71) строк начинаются с 0 и имеют 2A(s_i)t изменений битов; другие (™~i) строк начинаются с 1 и имеют 2As(t_j) изменений битов. А р(01*0®-1 ф 10®lt-1) = 2min(s,t). (б) Решение 1 (прямое). Пусть Bgt = Aat + min(s, t) + 1. Тогда Bgt = + Bs(t-i) + [s = t] при st > 0; Bat = 1 при st = 0. Следовательно, Bst = У2™='о8’^ (®+!?fc2fc)- Если s < t, то эта величина < J2fc=o Ct-k*) = (8+:+1) = (8п^<2сп- Решение 2 (непрямое). Алгоритм в ответе к упр. 8 выполняет 2(ж + у) изменений битов, если шаги (АЗ, А4) выполняются (х,у) раз. Таким образом, Agt < (”~i) + (7) — 1 < 2(?)- [Следовательно, комментарий в ответе 7.2.1.1-3 применим и к сочетаниям.] 10. Каждый сценарий соответствует (4,4)-сочетанию 64636261 или С4С3С2С1, в котором А побеждает в играх {8 — 64,8 — 63,8 — 62,8 — 61}, а N побеждает в играх {8 — С4,8 — сз, 8 — с2,8 — ci}, поскольку можно считать, что проигравшая команда побеждает в остав- шихся сериях из 8 игр. (Или, что то же самое, можно сгенерировать все перестановки {A, A, A, A, N, N, N, N} и опустить завершающие серии А и N.) Американская лига побеж- дает тогда и только тогда, когда 61 0, что, в свою очередь, выполняется тогда и только тогда, когда ci = 0. Формула (с44) + (с/) + (С2 ) + ) позволяет назначить каждому сценарию уникальный номер от 0 до 69.
806 ОТВЕТЫ К УПРАЖНЕНИЯМ 7.2.1.3 Например, ANANAA <=> at...aiao = 01010011 <=> 64636261 = 7532 <=> С4С3С2С1 = 6410, и этот сценарий имеет ранг (®) + (*) + (2) + (J) = 19 в лексикографическом порядке. (Член (^) равен нулю тогда и только тогда, когда он соответствует завершающему N.) 11. Наиболее часто встречались сценарии АААА (9 раз), NNNN (8 раз) и ANAAA (7 раз). Из 70 возможных серий ни разу не встречались 27, включая все четыре варианта, начи- нающиеся с NNNA. (Игры 1907, 1912 и 1922 годов игнорируются из-за наличия ничьих. Сценарий ANNAAA также следует исключить, так как он встретился только в 1920 году как часть последовательности ANNAAAA. Сценарий NNAAANN впервые осуществился в 2001 году.) 12. (а) Пусть Vj—подпространство {a„-i...ao 6 V | a*, = 0 для 0 < к < у}, так что {0...0} = Vn С Vn_i С ••• С Vo = V. Тогда {ci,...,cf} = {с | Vc / Vc+i}, и ак — единственный элемент an-i... ao из V с aCj = [у = fc] для 1 < j < t. Кстати, матрица размером t х п, соответствующая каноническому базису, называется приведенной к построчно-эшелонному виду. Ее можно получить с помощью стандартного алгоритма “триангуляции” (см. упр. 4.6.1-19 и алгоритм 4.6.2N). (б) Необходимыми свойствами обладает 2-номиальный коэффициент (")2=2* ("~1)2+ ("-1)2 из упр' 1-2-6-58, так как 2*("“1)2 бинарных векторных пространств имеют ct < п — 1, а (”2i )2 имеют ct = п — 1. [Вообще говоря, количество канонических базисов с г звездочками равно количеству разбиений г не более чем на t частей, причем никакая часть не превосходит п — t, и это количество равно [zr] (")2 согласно формуле 7.2.1.4-(51). См. D. Е. Knuth, J. Combinatorial Theory А10 (1971), 178-180.] (в) В приведенном далее алгоритме предполагается, что п > t > 0 и что a(t+1)j = 0 для t < j < п. V I. [Инициализация.] Установить akj 4— [у = к — 1] для l<fc<tH0<y'<n. Установить также q 4— t, г 4— 0. V 2. [Посещение.] (В этот момент мы имеем ak(k-i) = 1 для 1 < к < q, a(g+i)g = 0 и air = 1.) Посетить канонический базис (ai(n_i>... ацаю,...,at<n_i)... ана«о). Если q > 0, перейти к шагу V4. V 3. [Поиск блока единиц.] Устанавливать q 4— 1, 2, ..., пока не выполнится условие а(,+1)(д+г) = 0. Если q + г = п, завершить работу алгоритма. V 4. [Добавление 1 к столбцу q + г.] Установить fc 4— 1. До тех пор, пока справедливо условие a*,(g+r) = 1, устанавливать afc(g+r) 4- 0 и fc 4- fc + 1. Затем, если к < q, установить а*,(д+г) 4— 1; в противном случае установить a,(g+r) 4— 1, ag(,+r_i) 4— 0, q 4- q — 1. V 5. [Сдвиг блока вправо.] Если q = 0, установить г 4— г+1. В противном случае, если г > 0, установить ак(к-1) 4— 1 и afc(r+fc_i) 4— 0 для 1 < к < q, затем установить г 4— 0. Перейти к шагу V2. | Шаг V2 находит q > 0 с вероятностью 1 — (2"-t — 1)/(2" — 1) ~ 1 — 2-t, так что можно сэкономить время, рассматривая этот случай отдельно. (г) Поскольку 999999 = 4C)2+16Q2+5O2+5©2+8O2+0©2+4©2+l(l)2+2(?)2, миллионный вывод дает бинарные столбцы 4, 16/2, 5, 5, 8/2, 0, 4/2, 1, 2/2, а именно oi 02 03 о4 = 00 1 1000 1 1, = 00000010 0, = 10111000 0, = 01000000 0. [Источник: Е. Calabi and Н. S. Wilf, J. Combinatorial Theory А.22 (1977), 107-109.]
7.2.1.3 ОТВЕТЫ К УПРАЖНЕНИЯМ 807 13. Пусть п = в Ч- t. Имеется (г(г11)/2-|) (цг-i)/2j) конфигураций, начинающихся с 0, и ([(r-”i)/2j) (г(г—i)/2i) конфигураций, начинающихся с 1, поскольку конфигурация Изинга, начинающаяся с 0, соответствует композиции в нулей на [(г Ч- 1) /2] частей и композиции t единиц на [(г + 1)/2] частей. Все такие пары композиций могут быть сгенерированы и объединены в конфигурации. [См. Е. Ising, Zeitschrift fur Physik 31 (1925), 253-258; J. M. S. Simoes Pereira, CACM 12 (1969), 562.] 14. Начнем c Z[J] 4— j — 1 и r[J — 1] 4— j для 1 < j < n; /[0] 4— n, r[n] 4— 0. Чтобы получить следующее сочетание в предположении, что t > 0, установим р 4— в, если Z[0] > s, в противном случае р 4— r[n] — 1. Если р < 0, завершаем работу алгоритма; в противном случае устанавливаем q 4— r[p], Z[g] 4- Z[p] и r[Z[p]] 4— q. Затем, если r[g] > в и р < в, устанавливаем г[р] 4— r[n], /[г[п]] 4— р, r[s] 4— f[q], Z[r[g]] 4— s, r[n] 4— 0, Z[0] 4— n; в противном случае устанавливаем r[p] 4— r[g], Z[r[g]] 4— p. И наконец устанавливаем r[g] 4— p и Z[p] 4— q. [Cm. Korsh and Lipschutz, J. Algorithms 25 (1997), 321-335, где эта идея распростра- нена на алгоритм без циклов для перестановок мультимножеств. Предупреждение: это упражнение, как и упр. 7.2.1.1-16, носит в большей степени академический, чем практи- ческий характер, поскольку подпрограмма для обхода связанного списка может потребо- вать применения цикла, что сведет на нет все преимущества генерации без использования цикла.] 15. (Указанный факт верен, поскольку лексикографический порядок Ct... Ci соответ- ствует лексикографическому порядку an_i ...ао, который представляет собой обратный лексикографический порядок комплементарной последовательности 1... 1 ф an-i • • • ао.) Согласно теореме L сочетание с*... ci посещается в точности перед посещением (?) Ч-1- (?) (V) ДРУГИХ сочетаний, так что должно выполняться Это общее тождество может быть записано как где каждое Xj представляет собой 0 или 1 и Xj = 1 — ху, это также следует из уравнения Хп ( п 1ч-*„( п 'j = ( n+1 Kf п Y "\Ж0Ч-----1-XnJ "КХоЧ-------bXnJ \хо Ч--------hxn) \Хо Ч------\-Xn-l) 16. Поскольку 999999 = (14214) + (Т) = (‘Г) + (Т) + СГ) = (?) + (?) + (?) + (?) = (?) + (?) + (?) + (?) + (i)> ответы к упражнению следующие: (а) 1414 1008; (б) 182 153 111; (в) 71 56 36 14; (г) 43 32 21 15 6; (д) 1000000 999999 ... 2 0. 17. По теореме L п« — наибольшее целое, такое, что N > ("‘); остальные члены образуют представление числа N — (?) степени (t — 1). Простой последовательный метод для t > 1 начинается с i = 1, с = i и устанавливает с 4— с Ч- 1, х 4— хс/(с — t) нуль или несколько раз, пока не выполнится условие х > N; после этого первая фаза завершается установкой х 4— х(с — t)/c, с 4— с — 1, и мы получаем ж = (с) < N < (С+Х). Установим nt 4- с, N 4- N — х. Алгоритм завершает работу установкой ni 4— N при t = 2; в противном случае установим х 4— xt/c, t 4— t — 1, с 4— с— 1. Если х > N, устанавливаем х 4— х (с — t) /с, с 4— с — 1 и повторяем это действие, пока х > N. Этот метод требует О(п) арифметических операций при N < ("), так что он вполне подходит для решения поставленной задачи, если только t не слишком малб, а N — не слишком велико.
808 ОТВЕТЫ К УПРАЖНЕНИЯМ 7.2.1.3 При t = 2 упр. 1.2.4-41 говорит нам, что пг = + 2+1J. В общем случае nt равно [жJ, где х — наибольший корень уравнения х- = t! N. Этот корень можно приближенно найти, обратив ряд у = (ж-)1/* = х — |(t — 1) + ^(t2 — 1)ж-1 + • • •, что дает нам х = y+±(t—l)+^(t2 — 1)/у+О(у~3). Если в этой формуле принять у = (tlN)lft, то получается хорошее приближение, после которого можно убедиться, что < (^t+1)> или выполнить заключительное уточнение. [См. A. S. Fraenkel and М. Mor, Comp. J. 26 (1983), 336-343.] 18. Получится полное бинарное дерево с 2" — 1 узлами, с дополнительным узлом наверху наподобие “дерева проигравших” в сортировке выбором с замещением (рис. 63 в разделе 5.4.1). Таким образом, явные связи не являются необходимыми; правый дочерний узел узла fc—это узел 2fc + 1, а левый “братский” узел—узел 2fc для 1 < к < 2"-1. Такое представление биномиального дерева имеет любопытное свойство, заключаю- щееся в том, что узел fc = (0“1а)г соответствует сочетанию, бинарная строка которого 0“1ал. 19. Это 11110100001001000100, бинарное представление post(lOOOOOO), где post(2fc+1—1) = 2fc, a post(n) = 2fc + post(n —2fc + l) при 2* < n < 2fc+1 —1, где к > 0. [Кстати, представление Too с указателями на “левого ребенка” и “правого брата” представляет собой перевернутую пирамиду.] 20. /(z) = (1 +zw"->) ... (1 + zwi)/(l - *), 9И = (1 + zw° )/(*)> Kz) = zw°f(z). 21. Ранг с±.. .C2C1 равен (ct^-1) — 1 минус ранг ct-i.. . C2C1. [С. 40 диссертации Миллер; см. также Н. Liineburg, Abh. Math. Sem. Hamburg 52 (1982), 208-227.] 22. Поскольку 999999 = (14215) - (?6) = (*?) - (?) + (?) = (?) - (?) + (?) - (T) = (?) ~ (?) + (?) ~ (?) + (i)> ответы к упражнению следующие: (а) 1414 405; (б) 182 97 21; (в) 71 56 31 26; (г) 43 39 32 12 3; (д) 1000000 999999 999998 999996 ... 0. 23. Имеется (^Z^) сочетаний с j > г для т = 1, 2,..., t. (Если г = 1, то C2 = Ci+1; если г = 2, то ci = 0, C2 = 1; если т = 3, то Ci = 0, C2 = 1, С4 = сз +1; и т. д.) Таким образом, среднее значение равно (Q) + (7Zj) +• ’ + (”□ *))/(?) = ("t^/C) = (n+l)/(n+l-t). Среднее вре- мя работы одного шага приблизительно пропорционально этой величине; таким образом, алгоритм достаточно быстр при малых t, но становится медленным при t, близком к п. 24. В действительности jk — 2 < jk+i < jk + 1, когда jk = t (по модулю 2), и у*, — 1 < jic+i < jk + 2, когда jk £ t, поскольку R5 выполняется только тогда, когда с, = г — 1 для 1 < г < j- Таким образом, в конце R2 можно добавить “если j > 4, установить j 4— j — 1 — [у нечетно] и перейти к шагу R5’,’ если t нечетно; и “если j > 3, установить ji <— ji — 1 — [у четно] и перейти к шагу R5” если t четно. В этом случае алгоритм не будет содержать циклов, поскольку R4 и R5 будут выполняться не более двух раз на одно посещение. 25. Положим, что N > N', и N — N' минимально; кроме того, пусть t и Ct минимальны при этих же предположениях. Тогда q > <4- Если существует элемент х С U С, такой, что 0 < х < ct, отобразим каждое t- сочетание С U С путем замены j i-> j — 1 для j > ж; или, если имеется элемент ж G С П С, отобразим каждое t-сочетание, которое содержит ж, на (t — 1)-сочетание, опуская ж и заменяя j i-> ж — j для j < ж. В любом случае отображение сохраняет чередующий- ся лексикографический порядок; следовательно, величина N — N' должна превосходить количество сочетаний между образами С я С. Но ct минимально, так что такое ж не существует. Следовательно, t = m и ct = 2m — 1. Теперь, если cm < cm—1, мы можем уменьшить N—N' путем увеличения с'т. Поэтому с'т = 2т — 2, и задача сводится к поиску максимума rank(cm_i... Ci) — rank(c^n_1... c'j), где ранг вычисляется так, как в (30).
7.2.1.3 ОТВЕТЫ К УПРАЖНЕНИЯМ 809 Пусть f(s,t) = max(rank(bs ... bi) — rank(ct.. ,Ci)) по всем {bs,... ,bi,c(,... ,ci} = {0,..., s + t — 1}. Тогда /(s, t) удовлетворяет любопытному рекуррентному соотношению /(s,0) =/(0, Ь) = 0; /(l,t) = t; /(s, 0 = (s+«-1) + max(/(l — 1, s — 1), /(s — 2,0) если st > 0 и s > 1. Когда s + t = 2u + 2, решение принимает вид л.,о - (7.V)+f(2“+; - 20+g(271), г=™<. - V - и, с максимумом в f(t — 1, s — 1) при s < t и в f(s — 2, t) при s > t + 2. Следовательно, минимум N — N' достигается при С = {2т — 1} U {2т — 2 — ж | 1 < х < 2т — 2, х mod 4 < 1}, С' = {2т — 2} U {2m — 2 — ж | 1 < ж < 2m — 2, ж mod 4 > 2} и равен - Е£Г02 (2fc+1) = 1 + (к2Д). [См. A. J. vanZanten, IEEE Trans. IT-37 (1991), 1229-1233.] 26. (а) Да: первый элемент—0”~ г‘/211‘mod 22 L*/2J, последний—2Lt/2J 1* mod 20n~ г‘/21; пе- реходы представляют собой подстроки вида 02“1 4-+ 12“0, 02“2 4-> 12“1, 10“1 4-> 20“0, 10“2 4-> 20“1. (б) Нет: если s = 0, имеется большой переход от 02*0г-1 к 20г2‘-1. 27. Описанная далее процедура выбирает все сочетания ci... с* из Г„, имеющие вес < t. Начнем с к 4— 0 и со 4— п. Посетим ci... с*. Если к четно и с* = 0, установим к 4— к — 1; если к четно и с* > 0, при к = t установим Ск 4— Ск — 1, в противном случае установим k4—k+lncfc4— 0. С другой стороны, если к нечетно и с* + 1 = Ск-1, установим к 4— к — 1 и сь 4— Cfc+i (но если к = 0, завершим работу); если к нечетно и с*, + 1 < сь-i, при к = t установим с* 4- с* + 1, в противном случае установим к 4- к + 1, с*, 4- сь-i, Ck-i 4— Ск + 1. Повторим описанные действия. (Этот алгоритм без циклов приводится к алгоритму из упр. 7.2.1.1-12, (б) при t = п с небольшими изменениями в обозначениях.) 28. Истинно. Битовые строки ап_х ... а0 = а/3 и а„_! ... а(> = а/?' соответствуют индекс- ным последовательностям (bs ...bi = вх, ct...c1 = фф) и (Ъ'в ... bi = вх', .. c'j = фф'), таким, что все строки между а/? и а/?' начинаются с а тогда и только тогда, когда все элементы между вх и вх' начинаются с fl, а все элементы между фф и фф' начинаются с ф. Например, если п = 10, префикс а = 01101 соответствует префиксам в = 96 и ф = 875. (Условие, что в облексном порядке находится только ct... ci, гораздо более слабое. Например, при t = 1 каждая такая последовательность находится в облексном порядке.) 29. (a) -fc0i+1 или -fc0l+14-±’n, или ** для к,1,т > 0. (б) Нет; преемник в уравновешенной троичной системе счисления всегда меньше. (в) Для всех а и всех к, I, т > 0 имеем a0~fc+10,+*m —> a-+fc0l+1-*’n и a+-fc0z+1+±m —> a04-fc+10'-±’n; также a0-fc+10J -> a-4-fc0z+1 и a+-fc0,+1 -> a04-fc+10‘. (г) Пусть j-й знак сч— (—1)а<’ и пусть он находится в позиции bij. Тогда, если положить bio = 0, (—1)“*5+ь"(з-1) = (—1)“(«+1)з+ь(«+1)(з-1) для 0 < t <ки 1 < ) < «. (д) Согласно первым трем ответам а принадлежит некоторой цепочке ао —> • • • —> ак, где а*—конечный элемент (не имеющий последующего), а ао—первый элемент (не имеющий предшествующего). Согласно п. (г), каждая такая цепочка имеет не более (®+4) элементов. Но согласно п. (а) всего имеется 2® конечных строк и 2®(®+*) строк с s знаками и t нулями; так что к ралжао быть равно (®+4) — 1. Источник: SICOMP 2 (1973), 128-133.
810 ОТВЕТЫ К УПРАЖНЕНИЯМ 7.2.1.3 30. Предположим, что t > 0. Начальные строки являются отрицательными конечными строками. Пусть aj—начальная строка О4—для 0 < j < 2®-1, причем fc-й символ Tj для 1 < к < s представляет собой знак (—1)°*, где j—двоичное число (aB-i.. .01)2; таким образом, <то = 0‘-++...+, от -- О4—+...+, ..., «Тг»-1-! — 0*--- Пусть pj — конечная строка, полученная путем вставки -О1 после первой (возможно, пустой) серии минусов в Tj; таким образом, ро = -0*++...+, pi = —0*+...+, ..., P2«-i~i = —...~0‘. Пусть также = сто и Рг»-* = Ро- Тогда по индукции можно доказать, что цепочка, начинающаяся с aj, заканчивается pj, если t четно, и pj-i, если t нечетно, для 1 < j < 2®-1. Следовательно, цепочка, начинающаяся с —pj, заканчивается — aj или — aj+i. Пусть Aj(s,t)—последовательность (в, ^-сочетаний, порожденная отображением це- почки, начинающейся с aj, и пусть Bj(в, t) —аналогичная последовательность, порожден- ная из — pj. Тогда для 1 < j < 2®-1 обратная последовательность Aj{s,t)R представляет собой последовательность Bj(s,t) при четном t и Bj-i(s,t) при нечетном t. Соответству- ющие рекуррентные соотношения при st > 0 имеют вид _ Г lAj(s,t-1), 0j4L(2»—1—1—J)/2J(s - если j + t четно; 1 lAj(s,t — 1), 0A[j/2j(s — l,t), если j +1 нечетно; и, когда st > 0, все 2®-1 этих последовательностей различны. Последовательность Чейза CBt представляет собой А^2«/з] (s, t),а — A^-i/sj (s> t)R- Следует заметить, что однородная последовательность KBt из (31) представляет собой ^2в—1 — [t четно] 0^* 31. (а)2(’Л- 1 является решением рекуррентного соотношения /(s, t) = 2/(s—1, t)/(s, t— 1) при /(s,0) = /(0, t) = 1. (б) Рекуррентное соотношение /(s,t) = (s + l)!/(s, t — 1)... /(0, t — 1) имеет решение (s + l)!‘s!(S)(s-l)!(‘i1)...2!(’+i-S) = Р1(т + 1)!(’+‘‘=2_г)+[г=®]. r=l 32. (а) Простой формулы, похоже, не существует, но для малых з и t можно подсчитать количества последовательностей посредством вычисления количества облексных путей, ко- торые проходят по всем строкам веса t из заданной начальной точки в заданную конечную, выполняя только перемещения со свойством двери-вертушки. Вот общие количества для в + t < 6: 1 1 1 1 2 1 14 4 1 1 8 20 8 1 1 16 160 160 16 1 1 32 2264 17152 2264 32 1 /(4,4) = 95 304112 865 280; /(5,5) ~ 5.92646 х 1048. [Этот класс генераторов сочетаний был впервые изучен Г. Эрлихом (G. Ehrlich), JACM 20 (1973), 500-513, но он не пытался их сосчитать.] (б) Расширяя доказательство теоремы N, можно показать, что все такие последо- вательности или обратные к ним должны проходить от 140® до 0“1<0®~а для некоторого 1 < а < з. Более того, количество возможностей nBta для данных з, t и а при st > 0 удовлетворяет условию Щи = 1 и соотношению {ri«(t-i)i’i(s-i)t(a-i), если а > 1; nB{t-i)2Ti(s-i)ti -<-г ns(t-i)sn(s_i)t(s_i), если a = 1 < s.
7.2.1.3 ОТВЕТЫ К УПРАЖНЕНИЯМ 811 Это рекуррентное соотношение имеет замечательное решение nata = где (я+Г) + (ГГ)+- + (яГ). (я+Г3) + (ГГ) + •+(’)+ s - а - [а < s], если t четно; если t нечетно. 33. Сначала рассмотрим случай t = 1: количество близких к идеальным путей от г до j > i равно f(j — г — [г > 0] — [j < п — 1]), где = 1/(1 — z — z3). (По случайному совпадению, та же последовательность f(j) возникает и в многофазном слиянии Карша (Сагоп) для шести лент, табл. 5.4.2-2.) Сумма по 0 < i < j < п равна 3/(n) + f(n— 1) + f(n— 2) + 2 — n, и мы должны ее удвоить, чтобы охватить случаи j > i. Когда t > 1, можно построить (") х (") матриц, которые подскажут нам, сколько облексных последовательностей начинаются и заканчиваются определенными сочетания- ми. Элементы этих матриц представляют собой суммы произведений матриц для случая t — 1, просуммированные по всем путям типов, рассмотренных для случая t = 1. Вот общие количества для s + t < 6: 1 1 11 11 12 1 12 1 1621 1201 1 12 10 21 12201 1 20 44 10 2 1 12 0 0 01 1 34 238 68 10 2 1 1 2 6 0 0 0 1 Здесь в правом треугольнике показаны количества циклов, g(s,t). Прочие значения вклю- чают /(4,4) = 17736; /(5,5) =9900888879984; <?(4,4) = 96; <?(5,5) = 30961456320. Имеется ровно 10 таких схем при s = 2 и п > 4. Например, когда п = 7 они пробегают от 43210 до 65431 или 65432, или от 54321 до 65420 или 65430, или 65432, или в обратном порядке. 34. Минимум может быть вычислен, как в предыдущем ответе, но с использованием вместо обычного матричного умножения dj = У2ка*к^кз операции dj = mint (flit + bkj). (Когда в = t = 5, облексный путь на рис. 46, (д) с 49 неидеальными переходами, по сути, единственный. Для в = t = 5 имеется облексный цикл, который содержит только 55 “неидеальностей”) 35. Из рекуррентных соотношений (35) мы имеем ast = 5s(t-i) + [s > l][t > 0] + a(a_i)t, bst = следовательно, aat = bat + [s > l][t нечетно] и aat = as(t_ij + a^a-i)t + [s > l][t нечетно]. Решение имеет следующий вид: t/2 ast = 52(s+fs -2 2fc)_ Is> int четн°]; fc=0 эта сумма приблизительно равна (Г) • Зв. Рассмотрим бинарное дерево с корневым узлом (s, t) и с рекурсивно определяемыми поддеревьями с корнями (в — l,t) и (s,t — 1), пока st > 0; при st = 0 узел (s,t) является листом. Тогда дерево с корнем (s,t) имеет (Г) листьев, соответствующих всем (s,t)- сочетаниям an-i ...aiao. Узлы на уровне/соответствуют префиксам an~i.. . an-i, а листья на уровне I представляют собой сочетания с г = п — I. Любой облексный алгоритм для сочетаний an-i ...aiao соответствует прямому по- рядку обхода такого дерева, после того как дочерние узлы (®+*) — 1 узлов с ветвлениями упорядочены в некотором требуемом порядке; вот почему имеется 2^ t)~l таких облексных схем (упр. 31, (а)). Операция j ч— j +1 выполняется в точности один раз для каждого узла с ветвлением, а именно после того, как обработаны оба дочерних узла.
812 ОТВЕТЫ К УПРАЖНЕНИЯМ 7.2.1.3 Кстати, из упр. 7.2.1.2-6, (а) следует, что среднее значение г равно величине s/(t + 1) + t/(s + l)i которая может представлять собой П(п); таким образом, дополнительное время, необходимое для отслеживания г, теряется не зря. 37. (а) В лексикографическом случае нам не нужно поддерживать таблицу Wj, поскольку aj активно для j > г тогда и только тогда, когда а3 = 0. После установки aj<— 1 и aj-х <— 0 имеется два случая, которые следует рассмотреть при j > 1: если г = j, установить г <— j — 1; в противном случае установить а7~2 ... ао ч— 0г1,-1-г и г ч— j — 1 — г (или г <— j, если г было равно j — 1). (б) Теперь переходы, обрабатываемые при j > 1, состоят в изменении aj ... ао сле- дующим образом: 01r -> 1101r-2, 010r -> 10r+1, 010“1г -» 110“+11г-1, 10г -> 010г-1, 110г -» 010г-11, 10°1г -> 0° lr+1; эти шесть случаев легко различимы. Значение г должно изменяться соответствующим образом. (в) Случай j = 1 вновь тривиален. В противном случае 01“0г —> 101“-10г; 0“1г —> 10alr-1; 101a0r —> 01a+10r; 10alr —> 0“lr+1; имеется также один неоднозначный случай, который может произойти, только если an~i... 0^4.1 содержит как минимум один 0: пусть к > j — минимальное, для которого аь = 0. Тогда 10г —> 010г-1, если к нечетно, и 10г —> 0г1, если к четно. 38. Работает тот же алгоритм С с небольшими модификациями, (i) Шаг С1 устанав- ливает an-i ...ао <— 0140®-1, если п нечетно или s = l, an~i ...ао <— 001*0® 2, если п четно и з > 1, и соответствующее значение г; (ii) шаг СЗ меняет роли четных и нечетных значений; (iii) шаг С5 переходит к шагу С4 также и при j = 1. 39. В общем случае работа начинается сг<—Ои у <—s + t — 1,и до тех пор, пока не будет выполнено условие st = 0, повторяются следующие действия: Г <— Г + [Wj =0] ( J ), 8 <— 8 — [aj =0], t <— t — [a, = 1], у <— j — 1. \S — Oj / Тогда г представляет собой ранг a„_i.. .aiao- Так что ранг 11001001000011111101101010 равен С) + (??) + (?) + (?) + (?) + (?) + (?) + (?) + (?) + (?) + © + (?) + (?) + (?) + (J) = 2390131. 40. Начнем с N 4— 999999, v <— 0 и будем повторять следующие шаги до выполнения условия st = 0: если v = 0, то при N < (я+?-1) устанавливаем t <— t — 1 и as+t <— 1, а в противном случае—N N — (®+41), v <— (s + t) mod 2, s <— s — 1, ae+t <— 0. Если же v = 1, то при N < (®+J-1) устанавливаем v <- (s + t) mod 2, s <— s — 1 и as+t <— 0, а в противном случае—N 4— N — (®+?-1), t <— t — 1, as+t <— 1. В конце, если s = 0, устанавливаем at-i...ao <— l4; если t = 0, устанавливаем as~i...ao <— 0®. Ответ для указанных в условии значений—025 ао = 11101001111110101001000001. 41. Пусть с(0), ..., с(2п — 1) = Сп, где Сзп = 0Сгп-1, ICin-i; Сзп+i = ОСгп, 1С2П; Сгп = 1С*2п— 1, ОСгп-i; Csn+i = 1С2П, 0С2П; Со = Со = е- Тогда aj ф bj = bj+i & (b>+2 | (bj+3&(bj+4|- • •))), если у четно, bj+i |(Ьу+2&(Ь>+з|(Ь>+4&- • • ))), если у нечетно. Любопытно, что мы получаем также обратное соотношение с(( ... 0403020100)2) = (... 64^3^261 Ьо)г- 42. Уравнение (40) показывает, что левый контекст an-i 014.1 не влияет на поведение алгоритма для at-i... ао, если ai = 0 и I > г. Следовательно, мы можем проанализировать алгоритм С путем подсчета сочетаний, завершающихся определенным битовым шаблоном, и отсюда следует, что количество выполнений каждой операции может быть представлено как [w°z*]p(w, z)/(l — w2)2(l — z2)2(l — w — z) при подходящем полиноме p(w, z). Например, алгоритм переходит от С5 к С4 по одному разу для каждого сочетания, которое оканчивается на 012a+1012i>+1 или имеет вид ia+1Qi2b+1 для целых а, b > 0; соот- ветствующими производящими функциями являются w2z2/(l — z2)2(l — w — z) и w(z2 + z3)/(l - z2)2.
7.2.1.3 ОТВЕТЫ К УПРАЖНЕНИЯМ 813 Вот как выглядят полиномы p(w,z) для ключевых операций. Здесь W = 1 — w2, Z = 1 - z2. СЗ —> С4: wzW(l+wz)(l—w—z2); СЗ —> С5: wzW(w+z)(l — wz—z2); СЗ -> С6: w2z2W(w+z); СЗ -> С7: w2zW(l+wz); C4(j = 1): wzW2Z(l—w—z2)-, С4(г <— j— 1): w3zWZ(l—w—z2); C4(r <—j): wz2W2(l+z-2wz-z2-z3\, C5 —> C4: wz2W2(l—wz—z2); C5(r <—j—2): wizWZ(l —wz—z2); C5(r <— 1): w2zW2Z(l —wz—z2); C5(r «- j—1): w2z3W2(l-wz-z2); C6(j = 1): w2zW2Z; C6(r<-j-l): w2z3W2; C6(r «— j): w3z2WZ\ C7 -> C6: w2zW2\ C7(r <- j): w*zWZ; C7(r <- j—2): w3z2W2. Асимптотическое значение равно (®+‘)(р(1— х,х)/(2х—х2)2(1— х2)2+О(п-1)) для фиксиро- ванного 0 < х < 1, если t = хп + 0(1) при п —> оо. Таким образом, мы находим, например, что четыре пути ветвления на шаге СЗ имеют относительные частоты х + х2 — х3 : 1 : х : 1 + х — х2. Кстати, количество случаев нечетного, j превосходит количество случаев четного j на (8 £ ^2к %) + 2/ < в + t] + [внечетно][4нечетно] для любой облексной схемы, использующей метод (39). Эта величина имеет интересную производящую функцию wz/(l + w)(l + z)(l — w — z). 43. Тождество истинно для всех неотрицательных целых х, за исключением х = 1. (Кстати, з(х) = f(x) ф 1 и р(т) = f(x ф 1), где f(x) = (х - 1) + ((ж & 1) 1).) 44. В действительности Ct(n) — 1 = Ct(n — 1)я и Ct(n) — 1 = Ct(n — 1)я. (Следовательно, Ct(n) — 2 = Ct(n — 2) и т. д.) 45. В приведенном далее алгоритме ?-наименьший индекс, для которого Сг > г. СС1. [Инициализация.] Установить Cj 4—п — t—l+jnzj ч— О для 1 < j < t + 1. Также установить г <— 1. (Считаем, что 0 < t < п.) СС2. [Посещение.] Посетить сочетание с*... С2С1. Затем установить j «— г. ССЗ. [Ветвление.] Перейти к шагу СС5, если Zj 0. СС4. [Попытка уменьшения cj.] Установить х «— Cj + (cj mod 2) — 2. Если х > j, установить Cj <— х, г ч— 1; в противном случае: если Cj = у, установить Cj <— j — 1, Zj <— Cj+i — ((cj+i + 1) mod 2), r <— j-, если Cj < j, установить Cj <— j, Zj <— Cj+i — ((cj+i + 1) mod 2), r <— max(l, j — 1); иначе установить Cj <— x,r <— j. Вернуться к шагу CC2. CC5. [Попытка увеличения сл-.] Установить х <— Cj + 2. Если х < Zj, установить Cj <— х; в противном случае при х = Zj и Zj+i 0 установить Cj <— х — (c^-i mod 2); иначе установить Zj <— 0, j <— j + 1 и перейти к шагу ССЗ (но если j > t, завершить работу алгоритма). Если ci > 0, установить г <— 1; в противном случае установить г <— j — 1. Вернуться к шагу СС2. | 46. Из уравнения (40) следует, что Uk = (bj + к+1) mod 2, где j — минимальное значение, при котором выполняется условие bj > к. Тогда (37) и (38) дают следующий алгоритм, в котором для удобства полагается, что 3 < в < п. СВ1. [Инициализация.] Установить bj <— j — 1 для 1 < j < в; установить также z <— в + 1, bz <— 1. (Когда последующие шаги проверяют значение z, оно представляет собой наименьший индекс, такой, что bz / z — 1.)
814 ОТВЕТЫ К УПРАЖНЕНИЯМ 7.2.1.3 СВ2. [Посещение.] Посетить дуальное сочетание Ьв ... babi. СВЗ. [Ветвление.] Если bi нечетно: перейти к шагу СВ4, если Ьа 0 bi + 1, иначе— к шагу СВ5, если bi > 0, в противном случае к шагу СВ6, если bz нечетно. Перейти к шагу СВ9, если Ьз четно и bi > 0. В противном случае перейти к шагу СВ8, если b2+i = bz + 1, иначе перейти к шагу СВ7. СВ4. [Увеличение bi.] Установить bi <— bi + 1 и вернуться к шагу СВ2. СВ5. [Смещение bi и Ьа-] Если Ьз нечетно, установить bi <— bi + 1 и ba «— ba + 1; в противном случае установить bi «— bi — 1, ba «— ba — 1, z «— 3. Перейти к шагу СВ2. СВ6. [Смещение влево.] Если z нечетно, установить z <— z — 2, b2+i <— z + 1, bz <— z; в противном случае установить z ч— z — 1, bz ч— z. Перейти к шагу СВ2. СВ7. [Смещение Ь2.] Если b2+i нечетно, установить bz <— bz + 1 и завершить работу алгоритма, если Ь2 > п; в противном случае установить bz <— bz — 1, после этого, если bz < z, установить z <— z + 1. Перейти к шагу СВ2. СВ8. [Смещение Ьг и b2+i.] Если Ь2+г нечетно, установить bz <— b2+i, b2+i <— bz + 1 и завершить работу алгоритма, если b2+i > п. В противном случае установить bz+i <— bz, bz ч— bz — 1, после чего, если bz < z, установить z «— z + 2. Перейти к шагу СВ2. СВ9. [Уменьшение bi.] Установить bi <— bi — 1, z «— 2 и вернуться к шагу СВ2. | Обратите внимание, что это—алгоритм без циклов. Чейз приводит похожую процедуру для последовательности С* в Cong. Num. 69 (1989), 233-237. Удивительно, что этот алго- ритм определяет точное дополнение индексов ct... Ci, полученных с помощью алгоритма из предыдущего упражнения. 47. Мы можем, например, использовать алгоритм С и обратный к нему (упр. 38) с за- меной Wj d-битовым числом, биты которого представляют активность на разных уровнях рекурсии. Для отслеживания г-значений на каждом уровне требуются отдельные указа- тели го, ri, ..., Td-i. (Возможно множество других решений.) 48. Имеются такие перестановки тгх, ..., тгм, что fc-й элемент Aj равен ‘KkCtj'Wk-i, a i^kCtj пробегают все перестановки {sj • 1,..., за • d} при изменении j от 0 до N — 1. Историческая справка. Первая публикация однородной схемы двери-вертушки для (s, ^-сочетаний—[Eva Тбгбк, Matematikai Lapok 19 (1968), 143-146], посвященная генера- ции перестановок мультимножества. Позже многие исследователи опирались на условие однородности при подобных построениях, но данное упражнение показывает, что однород- ность не является необходимой. 49. Мы имеем lim2_»g(z*m+r — l)/(z,m+r — 1) = 1 при 0 < г < т, а при г = 0 предел равен lim2_tg(fcmzfcm-1)/(lmz,’n_1) = k/l. Так что мы можем объединить в пары множители числителя Пи-КаСтЛ2** — 1) и знаменателя По<ь<к(2Ь ~ 1)> когДа а = b (по модулю тп). Примечания. "Эта формула открыта Г. Олив (G. Olive), АММ 72 (1965), 619. В част- ном случае т = 2, q = — 1, второй множитель равен нулю тогда и только тогда, когда п четно, а fc нечетно. Формула (£)д = (п2*)д выполняется для всех п > 0, но ([*/”]) не всегда равно Причина этого в том, что второй множитель равен нулю, если только не выполняется условие nmodm > fcmodm, и в этом случае [fc/mj + |_(n — fc)/mj = [n/mj. 50. Указанный коэффициент равен нулю, когда ni mod т + + nt mod т > т. В про- тивном случае он равен / L(m Н----И \ / (ni Ч----------1- nt) mod т \ \ |ni/mj,..., [nt/mj / \П1 modm,... ,nz modm/g
7.2.1.3 ОТВЕТЫ К УПРАЖНЕНИЯМ 815 согласно формуле 1.2.6-(43); здесь каждый верхний индекс равен сумме нижних. 51. Понятно, что все пути проходят между 000111 и 111000, поскольку эти вершины имеют степень 1. Все четырнадцать путей при указанных условиях эквивалентности сво- дятся к четырем. Путь из (50), эквивалентный самому себе при отражении и обращении, может быть описан дельта-последовательностью А = 3452132523414354123; три других класса—В = 3452541453414512543, С = 3452541453252154123, D = 3452134145341432543. Д. Г. Лемер (D. Н. Lehmer) открыл путь С [АММ 72 (1965), Part II, 36-46]; D, по сути, является путем, построенным Идесом (Eades), Хикки (Hickey) и Ридом (Read). (Кстати, идеальные схемы на самом деле не редкость, хотя, похоже, их трудно строить систематически. Для случая (s,t) = (3,5) имеется 4050046 таких схем.) 52. Можно считать, что каждый элемент Sj не равен нулю и что d > 1. Тогда в соот- ветствии с упр. 50 разница между перестановками с четными и нечетными количествами инверсий равна + [^/2j) — за исключением случая, когда как минимум две из кратностей Sj нечетны. И обратно: если как минимум две кратности нечетны, обобщенное построение Г. Ста- ховяка (G. Stachowiak) [SIAM J. Discrete Math. 5 (1992), 199-206] показывает, что идеальная схема существует. На самом деле его построение применимо к ряду задач топологической сортировки; в частном случае мультимножеств оно дает гамильтонов цикл во всех случаях при d > 1 и нечетном sqSi, за исключением случаев d = 2, So = Si = 1 и четного зг- 53. См. АММ 72 (1965), Part II, 36-46. 54. В предположении, что st / 0, гамильтонов путь существует тогда и только тогда, ко- гда з и t не являются одновременно четными; гамильтонов цикл существует тогда и только тогда, когда дополнительно (з / 2 и t / 2) или п — 5. [Т. С. Enns, Discrete Math. 122 (1993), 153-165.] 55. (а) [Решение Аарона Вильямса (Aaron Williams).] Последовательность 0® 1‘, Wat об- ладает правильными свойствами, если Wst = 0W(s_1)t, IW.g-d, IO*!*”1 для st > 0; Wot = Ws0 = 0. А вот—удивительно эффективная реализация без использования циклов. Считаем, что t > 0. W1. [Инициализация.] Установить п <— s + t, а,- <— 1 для 0<у<1иа^<—0 для t < ji < п. Затем установить j <— k ч— t — 1. (Это хитрый трюк, но он работает.) W2. [Посещение.] Посетить (з, ^-сочетание a„_i... aiao- W3. [Обнуление aj.] Установить aj «— 0 и j <— j + 1. W4. [Простой случай?] Если aj = 1, установить ак <— 1, k <— k+1 и вернуться к шагу W2. W5. [Оборот.] Если j = п, завершить работу. В противном случае установить aj ч— 1. Затем, если к > 0, установить a* <— 1, ао «— 0, j <— 1 и fc <— 0. Вернуться к шагу W2. | После второго посещения j—наименьший индекс, для которого aja-j-i = 10, а fc—наи- меньший индекс, для которого ак = 0. Простой случай встречается ровно (®+‘-1) — 1 раз; условие fc = 0 на шаге W5 выполняется ровно (®+*-2) + &1 раз. Любопытно, что если N имеет комбинаторное представление (57), то сочетание ранга N в алгоритме L имеет ранг N — t + (J^j) + v — 1 в алгоритме W. [Lecture Notes in Comp. Sci. 3595 (2005), 570-576; в работе A. Williams, SODA 20 (2009), 987-996, имеется значительное обобщение, благодаря которому можно сгенерировать перестановки произвольного мультимножества без использования циклов, путем циклических сдвигов префиксов.]
816 ОТВЕТЫ К УПРАЖНЕНИЯМ 7.2.1.3 (б) SET bits,(l«t)-l 1Н PUSHJ $0.Visit ADDU $O,bits,l; AND $O,$O,bits SUBU XOR ADDU $0,11,1; AND $l.$l.bits AND $O,$O.bits; ODIF $0,$0,l SUBU $l,$l,$O; ADDU bits.bits,$1 SRU $O,bits,s+t; PBZ $O,1B (Предполагается, что s > 0 и t > 0.) Посещение bits = (as+t-i... 0100)2- Установить $0 4— bits & (bits + 1). Установить $1 4— $0 Ф ($0 — 1). Установить $0 Ч— $1 + 1, $1 ч- $1 & bits. Установить $0 ч— ($0 & bits) — 1. Установить bits ч— bits + $1 — $0. Повторять до выполнения условия aa^t — 1- I 56. [Discrete Matb. 48 (1984), 163-171.] Эта задача эквивалентна “гипотезе средних уровней” которая утверждает, что существует путь Грея по всем бинарным строкам длиной 2t — 1 и весами {£ — 1,£}. В действительности такие строки могут быть сгенерированы с по- мощью дельта-последовательности специального вида aoai.. .0121-2, в которой элементы ак представляют собой элемент ао, сдвинутый на к позиций по модулю 2t — 1. Например, при t = 3 можно начать с 050403020100 = 000111 и повторно выполнять обмены оо Ч-> а«, где 6 пробегает цикл (4134 5245 1351 2412 3523). Известно, что гипотеза средних уровней справедлива для t < 15 [см. I. Shields and С. D. Savage, Cong. Num. 140 (1999), 161-178]. 57. Да; имеется близкое к идеальному облексное решение для всех т, п и t при п > т > t. Одна такая схема (при применении записи в виде битовых строк) представляет собой 1-A(m-t)(t-1)0”-т, 01A(m_t)(t_i)0n-m-1, ..., 0n-mlA(m_t)(t-i), 0”_m+1iA(m_i_t)(f_i), ..., 0n-tl Ao(t-i) с использованием последовательности Aat из (35). 58. Решите предыдущую задачу с т и п, уменьшенными на t — 1, а затем добавьте j — 1 к каждому с,. (Случай (а), который особенно прост, вероятно, был известен Черны (Czerny).) 59. Производящая функция Gmnt(z) = 9mntkZk для количества аккордов gmntk, дости- жимых за к шагов от 0”-tlf, удовлетворяет уравнениям = (™)z и Gm(n+1jt(z) = Gmnt(z) + поскольку последний член учитывает случаи Ct = п И C1 > п — т. Идеальная схема возможна, только если |Gm„t(—1)| < 1. Но если п > т > t > 2, это условие, согласно (49), выполняется только при т = t +1 или нечетном (n — t)t. Таким образом, идеального решения для i = 4 и m > 5 не существует. (Многие аккорды при п = t + 2 имеют только двух соседей, так что можно легко исключить этот случай. Все случаи сп>тп>5и4 = 3, вероятно, не имеют идеальных путей при четном п.) 60. В приведенном далее решении используется лексикографический порядок и прини- маются меры для того, чтобы среднее количество вычислений на одно посещение было ограниченным. Можно считать, что stma ... то / 0 и t < ma + - - + mi + то. Q1. [Инициализация.] Установить qj Ч— 0 для s>j>1ht4— t. Q2. [Распределение.] Установить j Ч— 0. Затем, если х > mj, установить qj Ч— mj, х 4— х — mj и j ч— j + 1 и повторять эти действия, пока выполняется условие х > mj. В конце установить qj Ч— х. Q3. [Посещение.] Посетить ограниченную композицию qa + • • • + qi + qo. Q4. [Выбор крайних справа единиц.] Если j = 0, установить х Ч— qo — 1, j' Ч— 1. В противном случае, если qo = 0, установить х ч— qj — 1, qj Ч- 0 и j ч— j + 1, а иначе перейти к шагу Q7. Q5. [Завершение?] Завершить работу, если j > s. В противном случае, если qj — mj, установить х ч— х + mj, qj ч— 0, j ч— j + 1 и повторить этот шаг. Q6. [Увеличение qj.] Установить qj ч— qj + 1. Затем, если х = 0, установить qo Ч— 0 и вернуться к шагу Q3. (В этом случае qj-i = • • = qo = 0.) В противном случае перейти к шагу Q2.
7.2.1.3 ОТВЕТЫ К УПРАЖНЕНИЯМ 817 Q7. [Увеличение и уменьшение.] (Сейчас qt = mi для j > г > 0.) Пока qj = mj, установить j ч— j + 1 и повторять эти действия до тех пор, пока не будет выполнено условие qj < rrij (но если j > s, завершить работу алгоритма). Затем установить qj ч— qj + 1, j ч— j — 1, qj ч— qj — 1. Если go = 0, установить j ч— 1. Вернуться к шагу Q3. | Например, если тв = • • • = то = 9, то после композиции 3 + 9 + 9 + 7 + 0 + 0 идут 4 + 0 + 0 + 6 + 9 + 9, 4 + 0 + 0 + 7 + 8 + 9, 4 + 0 + 0 + 7 + 9 + 8, 4 + 0 + 0 + 8 + 7 + 9, .... 61. Пусть Fa(t) = 0, если t < 0 или t > та-1-t-mo; в противном случае пусть Fo(t) = t, а Fa(t) = O+Fs_i(t), 1+Fs_i(t - 1)й, 2+Fs_i(t-2), ..., ma+Fa-i(t - ma)Rm‘ при s > 0. Можно показать, что эта последовательность обладает требуемыми свойствами. Фактически она эквивалентна композициям, определенным однородной последовательно- стью Kat из (31) при использовании соответствия из упр. 4 при наложенных на подпо- следовательность ограничениях, определяемых границами та, ..., то- [См. Т. Walsh, J. Combinatorial Math, and Combinatorial Computing 33 (2000), 323-345, где эта последова- тельность генерируется без применения циклов.] 62. (а) Факторная таблица размером 2хп с суммами строк г и ci+- - -+с„—г эквивалентна решению г = ai + • • • + a„ при 0 < ai < ci, ..., 0 < a„ < Сп- (б) Ее можно вычислить, последовательно устанавливая a,j ч— шш(л — ац — • • — ~ aij — • • • — для j = 1, ..., п и г — 1, ..., т. В качестве другого решения можно, если п < ci, установить ац Ч— и, ац Ч— • • • ч— ain Ч— 0 и работать с остальными строками с Ci, уменьшенным на п; если же n > ci, установить ац Ч— щ, <121 ч— - • - ч— ami Ч— 0 и работать с остальными столбцами с и, уменьшенным на щ. Из второго подхода видно, что ненулевыми являются не более т + п — 1 элементов. Можно указать и явную формулу aij = max(0, min(ri,Cj,ri + • —|-г< — ci — ••• — cy-i,ci + •• + су — п — • • — г<~1)). (в) Получается такая же матрица, как и в п. (б). (г) Поменяйте местами левые и правые части в пп. (б) и (в); в обоих случаях ответ aij = шах(0, min(ri,Cj,n Ч-1- п — cj+i----Сп, с3Н---1- с„ — п------г<-1)). (д) Давайте выберем, скажем, построчный порядок. Сгенерируем первую строку так же, как и для ограниченной композиции п с границами (щ,..., Сп); а для каждой строки (ац,..., ain) сгенерируем оставшиеся строки рекурсивно тем же способом, но с суммами столбцов (ci — ац,...,Сп — ain). Большинство действий этого алгоритма выполняются только с двумя нижними строками; когда же изменения затрагивают более высокие строки, то строки, идущие за ними, должны быть инициализированы заново. 63. Если Oij и ata положительны, мы получаем другую факторную таблицу путем уста- новки а^ ч— а^ — 1, ац ч— ац + 1, a^j Ч— a^j + 1, аы ч— аы — 1. Рассмотрим граф G, вершины которого являются факторными таблицами для (ri,...,rm;ci,...,Cn). Эти вершины смежны, если они могут быть получены одна из другой с помощью указанного преобразования. Мы хотим показать, что этот граф G имеет гамильтонов путь. При т = п = 2 граф G представляет собой простой путь. При т = 2 и п = 3, граф G имеет двумерную структуру, из которой видно, что каждая вершина является начальной по крайней мере для двух гамильтоновых путей с разными конечными точками. При т = 2 и п > 4 можно индуктивно показать, что граф G имеет гамильтоновы пути из каждой вершины в любую другую. При т > 3 и п > 3 задачу можно свести от т к т— 1 так же, как в ответе к упр. 62, (д), если быть достаточно аккуратным, чтобы не загнать себя в угол. В частности, следует
818 ОТВЕТЫ К УПРАЖНЕНИЯМ 7.2.1.3 избегать состояний, когда ненулевые элементы в последних двух строках имеют вид (* “ ° ) для некоторых а, Ь, с > 0 и когда изменения в строке т — 2 приводят к виду (® “ *). Предыдущий цикл изменений в строках т — 1 и т может избежать данной ловушки, если только с не равно 1 и строки не начинаются с ( ° ° ) или ( ° J *). Однако этих ситуаций также можно избежать. (Облексный метод, основанный на упр. 61, существенно проще и почти всегда тре- бует только четырех изменений на каждом шаге. Однако иногда ему требуется обновить одновременно 2min(m,n) элементов.) 64. Пусть xi... х3 — бинарная строка, А—список подкубов и пусть А ф Xi... xa обозна- чает замену цифр (ai,..., as) в каждом подкубе А на (ai ф xi,..., аа ф ха) слева направо. Например, 0+1++10 ф 1010 = 1*1**00. Тогда приведенная далее взаимная рекурсия опре- деляет цикл Грея, поскольку Aat дает путь Грея от О®*4 до 10®-1*е, а Bat дает путь Грея от 0®*‘ до *01®-1*‘-1 при st > 0: Aat = 0B(s~i)t, *As(t-i) Ф001® 2, Bat = 0A(s_!)t, lB(s_1)t ф 010® 2, Ф 1®. Строки 001®-2 и 010®-2 при s < 2 представляют собой просто 0®; Aso—бинарный код Грея; Aot = Bot = **. (Кстати, несколько более простая конструкция Gat = at = t mod 2, определяет симпатичный путь Грея от *‘0® до а«~1*‘0®-1.) 65. Если рассматривать путь Р как эквивалентный путям PR и Р ф xi... ха, то общее количество может быть вычислено систематически, как в упр. 33, со следующими резуль- татами для в +1 < 6. Пути Циклы 1 1 11 11 12 1 111 13 3 1 1111 15 10 41 12111 1 6 36 35 5 1 123111 1 9 310 4630 218 6 1 1 3 46 4 1 1 1 В общем случае имеется t + 1 путей при в = 1 и (^®^^+2) — (в mod 2) путей при t = 1. Циклы при в < 2 единственны. При в = t = 5 имеется приблизительно 6.869 х 1О170 путей и 2.495 х 1О70 циклов. 66. Пусть G(n, 0) = е; G(n, t) = 0 при n < t; пусть также G(n, t) для 1 < t < п представляет собой p(0)G(n-l,t), $(l)G(n-l,t)", ..., р(2* — l)G(n — l,t)fi, р(2* — l)G(n — l,t — 1), где g(k)—t-битовый столбец, содержащий на вершине бинарное число Грея д(к) с наи- меньшим значащим битом. В этой общей формуле мы неявно добавляем строку нулей под базисом G(n — l,t — 1). Это замечательное правило дает обычный бинарный код Грея при t = 1 с пропущен- ным 0... 00. Циклический код Грея невозможен, поскольку (")2 нечетно. 67. Из пути Грея для композиций, соответствующих алгоритму С, вытекает, что суще- ствует путь, в котором все переходы имеют вид 0fcll <-> I'O*, где mm(fc, I) < 2. Возможно, существует цикл, для каждого перехода которого выполняется min(fc, 1) = 1.
7.2.1.3 ОТВЕТЫ К УПРАЖНЕНИЯМ 819 68. (а) {0}; (б) 0. 69. Наименьшее N, для которого KtN < N, равно (2t“1) + C/Zj3) 4-1- (}) +1 = |((2t) + (2/~i2) ---*" (о) + О» поскольку (f2i) < (7) тогда и только тогда, когда п > 2t — 1. 70. Воспользовавшись тем фактом, что из t > 3 вытекает ке((273) + N') - ((V) + т = *((V) + N'} - ((V) + N') = (V) + Kt_lN' _ N' при N' < (2<73)> заключаем, что максимум равен (2<^2) t=T + (Т-/) t=2 4-*" ©Т и что он достигается при 2‘-1 значениях N при t > 1. 71. Пусть Ct — t-клики. Первые (1414) + (<°°^) t-сочетаний, посещенных алгоритмом L, определяют граф из 1415 вершин с 1000000 ребер. Если значение |С«| превышает указанное, то |</-2Ct| должно превосходить 1000000. Таким образом, единственный граф, определяемый P(ioooooo)2> имеет наибольшее количество t-клик для всех t > 2. 72. М = (”') + • • • + (™“) для та > • • • > ти > и > 1, где {тпя,...,mu} = {s + t - 1,... ,n„} \ {nt,... ,n„+i}. (Сравните с упр. 15, которое дает (s+‘) — 1 — N.) Если а = an-i... ао—битовая строка, соответствующая сочетанию nt... ni, то v на 1 больше количества завершающих единиц в а, а и—длина крайней справа последователь- ности нулей. Например, для а = 1010001111 получаем s = 4, t = 6, М = (®) + (2), и = 3, ^=© + (1)^ = 5. 73. А и В перекрестно пересекающиеся <=> а £ U \ Р для всех а 6 А и Р 6 В <=> А П дп~а~*В~ = 0, где В~ = {17 \ Р | Р 6 В] — множество (п — ^-сочетаний. Поскольку Qjvnt = pN(n-t), имеем > |dn-s_‘PN(n_t)| и дп~а~*PN{n-t) = PN,a, где N' = ks+i ... Kn-tN. Таким образом, если А и В перекрестно пересекающиеся, то М + N' < |А| + |д"-8-‘В-| < (") и QMne П PN,a = 0. И наоборот: если QjMns П Pn'b / 0. то (”) < М + N' < |А| + |5”_а~ 1В~ |, так что А и В не могут быть перекрестно пересекающимися. 74. |pQNnt| = Kn-tN (см. упр. 94). Кроме того, применяя те же рассуждения, что и в (58) и (59), в данном частном случае находим qPns = (n— 1)Fns U • • • U IOPns U {543210,...,987654}; в общем случае |pPivt| = (n+ 1 — nt)N + (”‘4^1). 75. Тождество ("jj-1) = (£) + (£Zf) 4-1- ("о*1) 113 1-2-6-(10) дает другое представление, если nv > V. Но (60) при этом не затрагивается, поскольку (£+J) = (fc2i) + (Z—а) + ’ ’ ’ + (n"ofc+1)- 76. Представим N + 1 путем добавления ("_J) к (57); затем воспользуемся предыдущим упражнением для вывода Kt(N + 1) — KtN = (^Zj) = v ~ 1- 77. [D. Е. Daykin, Nanta Matb. 8,2 (1975), 78-83.] Мы работаем с расширенными пред- ставлениями М = (”J‘) + • • • + (™“) и N = (”*) + • • • + (”“), как и в упр. 75, называя их некорректными (improper), если последний индекс и или v равен нулю. Назовем N гибким (flexible), если оно имеет и корректное, и некорректное представления, т. е. если nv > v > 0. (а) Для данного целого числа S найдем М + N, такие, что М + N = S и к*М + KtN минимально; при этом М должно быть велико, насколько это возможно. Если N = 0, задача решена. В противном случае операция максимума-минимума сохраняет как М + N, так и KtМ + KtN, так что можно считать, что в корректных представлениях М и N выполняется условие v > и > 1. Если N не гибко, Kt(M + 1) + Kt(N — 1) — (ntМ + и — 1) + (KtN—v) < KtM+tttN согласно упр. 76. Следовательно, N должно быть гибким. Но тогда можно применить операцию максимума-минимума к М и к некорректному представлению N, увеличивая М. Таким образом, получено противоречие. Это доказательство показывает, что равенство выполняется тогда и только тогда, когда MN = 0 (факт, замеченный в 1927году Ф. С. Маколеем (F. S. Macaulay)).
820 ОТВЕТЫ К УПРАЖНЕНИЯМ 7.2.1.3 (б) Теперь попытаемся минимизировать max(/itTVf, N) + Kt~iN при М + N = S, представляя в этот раз N как + -- + (т^)- Если nt-i < mt, все еще можно использовать операцию максимума-минимума. Оставляя mt неизменным, она сохраняет М + N и KtM + Kt-iN, как и соотношение KtM > N. Если N 0, мы приходим, как и в п. (а), к противоречию, так что можно считать, что nt-i > mt. Если nt-i > mt, то имеем N > KtM, а также XtN > М\ следовательно, М + N < XtN + N= (n‘-t1+1) + • • • + (”*'+/), и мы получаем Kt(M + N) < Kt(XtN + N) = N + Kt-iN. Наконец, если nt-i = mt = а, положим М = (“) + М' и N = (t“j) + N'. Тогда Kt(M + N) = (“^) + Kt-i(M' + N'), KtM = (f“J + Kt-iM' n Kt-iN = (t22) + Kt-2N'. Требуемый результат получается по индукции по t. 78. [J. Eckhoff and G. Wegner, Periodica Math. Hung. 6 (1975), 137-142; A. J. W. Hilton, Periodica Math. Hung. 10 (1979), 25-30.] Пусть M = |Ai| и N = |Ao|; можно считать, что t > 0 и N > 0. Тогда |9А| = |9Ai UAo| + |9Ао| > max(|9Ai|, |Ао|) + 19Ао| > тах(к4М, N) + Kt-iN > Kt(M + N) = |P|A|t| по индукции по т + п + t. И наоборот: пусть Ai = Pmi + 1 и Ао = Р^ц-Г) + 1; эта запись означает, например, что {210,320} + 1 = {321,431}. Тогда Kt(M + N) < |9А| = |9Ai U Ао| + |(9Ао)0| = max(KtM,N) + Kt-iN, поскольку dAi = P(KtM)(t-i) + 1- [Шютценбергер (Schiitzenberger) в 1959году заметил, что Kt(M + N) < KtM + Kt-iN тогда и только тогда, когда KtM > TV.] Перейдем к первому неравенству. Пусть А и В—непересекающиеся множества t- сочетаний, для которых |А| = М, |9А| = KtM, |В| = TV, |9В| = KtN. Тогда Kt(M + TV) = к«|А U В| < |9(А U В)| = |9А U 9В| = |9А| + |ВВ| = KtM + KtN. 79. В действительности р*(М + Xt-tM) = М и ptTV + At-iptTV — N + (712 — ni)[i> = 1], если TV задается формулой (57). 80. Если TV > 0 и t > 1, представим TV в таком виде, как в (57), и пусть TV = No + TVi, где Пусть No = (У) и TVi = (t^)- Тогда по индукции по t и [aj имеем (“) = No + Kt No > (?) + (Л) = СТ); м = С) - (?) > (?) - Г;1) = С-i1);« > (Л) + С-2) = СТ)>С-1)- [Ловас (LovAsz) в действительности доказал более строгий результат; см. упр. 1.2.6- 66. Аналогично (nN > (?Zj); см- Bjorner, Frankl, and Stanley, Combinatorica 7 (1987), 27-28.] 81. Например, если наибольший элемент Pns —66433, то PN5 = {00000,..., 55555} U {60000,..., 65555} U {66000,..., 66333} U {66400,..., 66433} так что TV = C°) + (?) + (I) + (®). Его нижняя тень, dPN6 = {0000,..., 5555} U {6000,..., 6555} U {6600,..., 6633} U {6640,..., 6643}, имеет размер (?) + (|) + (®) + (?). Если наименьший элемент Qnos — 66433, то Qnqs = {99999,..., 70000} U {66666,..., 66500} U {66444,..., 66440} U {66433} так что TV = ((193)+(182)+(171)) + ((«)+©) + © + ©. Его верхняя тень, qQnos = {999999,..., 700000} U {666666,..., 665000} U {664444,..., 664400} U {664333,..., 664330},
7.2.1.3 ОТВЕТЫ К УПРАЖНЕНИЯМ 821 имеет размер ((VJ+CbJ+Ct2)) + ((б)+(в)) + (!) + (з) = N + KgN. Размер t каждого сочетания, по сути, не важен, пока N < (8+‘); например, в рассмотренном нами случае наименьший элемент Qnqs— 99966433. 82. (а) Производная должна быть равна J3fc>0 гк(х), но этот ряд расходится. [Говоря неформально, график т(а:) выглядит как множество “ям” с относительной глубиной 2~к во всех точках, представляющих собой нечетные кратные 2~к. Оригиналь- ная статья Такаги (Takagi) в Proc. Pbysico-Matb. Soc. Japan (2) 1 (1903), 176-177, была переведена на английский язык и опубликована в его Collected Papers (Iwanami Shoten, 1973).] (б) Поскольку rfc(l — t) = (—1)Г2<С*1 ПрИ k > 0, имеем f^~xrk(t) dt = f*rk(l — u)du = — rk(u) du = fx rk(u) du. Второе уравнение следует из того факта, что rk(±t) = rk-i(t). В п. (г) показано, что этих двух уравнений достаточно для определения т(гс) при рацио- нальном х. (в) Поскольку т(2-“а:) = а2~ах + 2-“т(а:) при 0 < х < 1, имеем т(е) = ае + О(е) при 2~a-i < е < 2-а. Следовательно, т(е) = elg + О(е) при 0 < е < 1. (г) Предположим, что 0 < р/д < 1. Если р/д < 1/2, имеем т(р/д) = р/д + т(2р/д)/2; в противном случае т(р/д) = (q—р)/д+т(2(д—р)/д)/2. Следовательно, можно считать, что д нечетно. Пусть в этом случае р' = р/2, если р четно, и р' = (д-р)/2, если р нечетно. Тогда т(р/д) = 2т(р'/д) — 2р‘/д при 0 < р < q; эта система д — 1 уравнений имеет единственное решение. Например, для д = 3, 4, 5, 6, 7 получаем значения 2/3, 2/3; 1/2, 1/2, 1/2; 8/15, 2/3, 2/3, 8/15; 1/2, 2/3, 1/2, 2/3, 1/2; 22/49, 30/49, 32/49, 32/49, 30/49, 22/49. (д) Решения <1:а:=1, ...,1 (е) Значение | достигается при несчетном множестве значений х = | ± | ±—± ±- • •. 83. Для любых данных целых чисел д > р > 0 рассмотрим пути, начинающиеся с 0, в ориентированном графе Оч-1ч—2ч—3ч—4ч—5ч—--- t t t t t Ф 1—>2—>3—>4—>5—>6—>••• Вычислим связанное с путем значение и. Изначально v Ч-р; горизонтальные перемеще- ния удваивают v: v Ч— 2d, вертикальные перемещения из узла а изменяют v следующим образом: v Ч— 2(да — и). Путь завершается, когда дважды достигается узел с одним и тем же значением и. Переход в верхний узел а не разрешен, если в нем v < —д или v > да; в нижний узел а переход запрещен, если в нем v < 0 или v > д(а + 1). Эти ограничения определяют большинство шагов пути. (Узел а в верхней строке означает “Решение уравнения т(х) = ах — v/(f; нижняя строка означает “Решение уравнения т(х) = v/g — ах”) Эмпирические тесты приводят к гипотезе о конечности всех таких путей. Тогда уравнение т(х) = р/д имеет решения х = хо, определяемые последовательностью хо, xi, Х2, ..., где хк = |ajfc+i на горизонтальном шаге и хк = 1 — |rck+i на вертикальном; в конечном итоге хк = Xj для некоторого j < к. Если j > 0 и если д не является степенью 2, то это все решения уравнения т(а:) = р/д при х > 1/2. Например, эта процедура устанавливает, что т(х) = 1/5 и х > 1/2 только при х, равном 83581/87040; единственный путь дает нам rco = 1 — |rci, xi = |а:2, • • , Tie = |rci9 и a; 19 = ®ii. Аналогично можно определить, что имеется только два значения х > 1/2, для которых т(х) = 3/5 (со знаменателем 246(26в — 1)/3). Кроме того, похоже, все циклы ориентированного графа, которые проходят через узел 0, определяют значения р и д, такие, что уравнение т(х) = р/д имеет несчетно много решений. Такими значениями, например, являются 2/3, 8/15, 8/21, соответствующие
822 ОТВЕТЫ К УПРАЖНЕНИЯМ 7.2.1.3 циклам (01), (0121), (012321). Значение 32/63 соответствует как (012121), так и (012101234545454321), а также еще двум другим путям, не возвращающимся в 0. 84. [Frankl, Matsumoto, Ruzsa, and Tokushige, J. Combinatorial Theory A69 (1995), 125-148.] Если а < b, имеем Ь}/т = ts(t - l)^/(2t - 1)- = 2*b(l + f(a,b)t~l + O(b4/t2)), где f(a, b) = a(l + b) — a2 — 6(1 + 6)/4 = f(a + 1,6) — 6 + 2a. Следовательно, если N имеет комбинаторное представление (57) и если положить rij = 2t — 1 — bj, то получим Этими членами можно пренебречь, когда bj превышает 2 lg t. Можно также показать, что T(E2’ej) = Ete-2j)2-e’. \=о ' з=0 85. В соответствии с (63) N — Xt-iN имеет тот же асимптотический вид, что и KtN — N, поскольку т(х) = т(1 — х). То же относится и к 2ytN — N с точностью до О(Т(logt)3/t2), так как = 2(2t~2~b)(l + O(logt)/t) при b < 21gt. 86. х 6 Х°~ <=> х $ Х° <=> х 0 X или х 0 X + ei, или • • •, или х 0 X + е„ <=> х 6 или х € Х~ — ei, или • • •, или х 6 — еп <=> х 6 Х~+. 87. Все три утверждения истинны. Воспользуемся тем фактом, что X С Y° тогда и только тогда, когда Х+ С У: (а) X С У ° <=> Х~ D У°~ = У~+ <=> У~ С Х~°. (б) Х+ С Х+ => X С Х+°; следовательно, Х° С Х°+°. Также Х° С Х° => Х°+ С X; следовательно, Х°+° С Х°. (в) аМ < N <=> S+ С SN <=> SM С S& <=> М < 0N. 88. Если vx < vy, то v(x — е&) < v(y — е^), так что можно считать, что vx = vy и что х > у в лексикографическом порядке. Должно выполняться условие yj > 0; в противном случае v(y — ел) превышало бы v(x — е*). Если х, = у, при 1 < г < j, ясно, что к > j и х — е* -< у — ej. В противном случае Xt > yt для некоторого г < у, и мы вновь получаем х — в* -< у — ej, если только не выполняется равенство х — е* = у — ej. 89. Из таблицы 3 = 0 1 2 3 4 5 6 7 8 9 10 11 ej + ei = ei eo e4 e5 e2 e3 ee eg ee e? en ею ej + e2 = e2 e4 eo ee ei ee e3 ею e3 en e? eg ej + e3 = ез es ee er ee eg eio eo en ei e2 e4 находим (a0, al,..., al2) = (0,4,6,7,8,9,10,11,11,12,12,12,12); (00,01,..., 012) = (0,0,0, 0,1,1,2,3,4,5,6,8,12). 90. Пусть У = Х+ и Z = СкХ и пусть Na = |Xfc(a)| для 0 < а < тп*. Тогда mfc-i mfe—1 |У|= £ |У*(а)|= £ |(Xfc(a-l) + efc)U(Xfc(a) + Efc(0))| а=0 а=0 mfc-l > max(Na-i,oiNa), а=0
7.2.1.3 ОТВЕТЫ К УПРАЖНЕНИЯМ 823 где а— 1 означает (а— 1) mod тпк, а функция а получается из (п— 1)-мерного тора, поскольку по индукции |Хк(а) + Ek(0)| > aNa. Кроме того, TTljg—1 TTljg —1 \Z+\= £ |Hfc+(a)|= £ |(Zfc(a-l)+efc)U(Zfc(a) + Efc(0))| a=0 a=0 mt-l = m.ax.(Na-i,ctNa), a=0 поскольку как Zk(a — 1) + e*, так и Zfc(a) + Ек(0)—стандартные множества в п — 1 измерениях. 91. Пусть в полностью сжатом массиве, где строка 0 находится внизу, имеется Na то- чек; таким образом, I = N-i > Nq > > Nm-i > Nm = 0. Покажем сначала, что существует оптимальное значение X, для которого “плохое” условие Na = Na+i никогда не выполняется, за исключением случаев Na = 0 и Na = I. Если а—наименьший плохой индекс, предположим, что > Na = Na+i = ••• = Na+k > Na+k+i- Тогда мы всегда можем уменьшить Na+k на 1 и добавить 1 к некоторому Nb (b < а) без увеличения |Х+1, за исключением случаев, когда к = 1 и Na+z = ^a+i — 1, и № = Na + а — Ь<1 для 0 < b < а. Исследуя эти случаи далее, при Nc+i < Nc = 7Vc-i для некоторого с > а + 1, можно установить Nc Ч— Nc — 1 и Na Ч— Na + 1, таким образом либо уменьшая а, либо увеличивая No. В противном случае можно найти такой индекс d, что Nc = Na+i + a+ l— с>0 для а < с < d, и либо Nd = 0, либо Na < Nd-i — 1. Тогда можно уменьшить Nc на 1 для а < с < d и после увеличить Nt на 1 для 0 < b < d — а — 1. (Важно заметить, что если Nj = 0, то No > d — 1; следовательно, из d = тп вытекает I = тп.) Повторяя такие преобразования до тех пор, пока не будет выполнено условие Na > Na+i, и при этом Na / Z и Na+i / 0, мы достигнем ситуации (86), и доказательство может быть завершено так, как это сделано в разделе. 92. Пусть х 4- к—лексикографически наименьший элемент T(mi,...,mn-i), который превышает х и имеет вес их + к (если таковой элемент существует). Например, если mi = m2 = тпз = 4 и х = 211, имеем х + 1 = 212, х + 2 = 213, х + 3 = 223, х + 4 = 233, х + 5 = 333, а х + 6 не существует; в общем случае х + к + 1 получается из х + к путем увеличения крайнего справа компонента, который может быть увеличен. Если х + к = (mi — 1,..., mn-i — 1), положим х + к + 1 = х + к. Тогда, если S(k) — множество всех элементов T(mi,... ,mn-i), которые X х + к, получаем S(k + 1) = S(k)+. Кроме того, элементы S, заканчивающиеся компонентом а,—это те элементы, первые п— 1 компонентов которых находятся в S(m — 1 — a). Результат этого упражнения можно сформулировать более интуитивным образом: при генерации n-мерных стандартных множеств Si, S2, ..., (п — 1)-мерные стандартные множества на всех уровнях становятся размахами друг друга после добавления каждой точки к уровню тп — 1. Аналогично они становятся ядрами друг друга перед добавлением каждой точки к уровню 0. 93. (а) Предположим, что параметрами являются корректно отсортированные 2 < rn'i < < • • • < т'п, и пусть к—наименьшее значение, для которого тпк тп'к. Тогда получим N = 1 + гапк(0,..., 0, тп'к ~ 1,0,..., 0). (Мы должны считать, что min(mi,..., mn) > 2, поскольку параметры, равные 1, могут быть расположены где угодно.) (б) Только в доказательстве для п = 2, скрытом в ответе к упр. 91. По индукции это доказательство распространяется и на случаи бблыпих п. 94. Дополнение сохраняет лексикографический порядок и изменяет g на д. 95. Для теоремы К положим d = п — 1 и so = ••• = Sd = 1. Для теоремы М положим d = SHSo = -- - = Sd = t + l.
824 ОТВЕТЫ К УПРАЖНЕНИЯМ 7.2.1.3 96. В таком представлении N является количеством t-мультисочетаний {so • 0, si • 1, S2 • 2,... предшествующих ntnt-i ... п± в лексикографическом порядке, поскольку обоб- щенный коэффициент (s(”)) дает количество мультисочетаний, крайний левый компонент которых < п. Если мы оборвем представление, остановившись на крайнем справа ненулевом члене (S("’,))J то получим красивое обобщение (60): i8«»i=O+(T2,)+ [См. G. F. Clements, J. Combinatorial Theory А37 (1984), 91-97. Неравенства so > Si > • • > Sd необходимы для корректности следствия С, но не для вычисления | ЭР/vt |. Некоторые члены для t > к > v могут быть нулевыми. Например, при N — 1, t = 4, so = 3 и si = 2 получим N = (s(^) + (s(31)) =0 + 1.] 97. (а) Тетраэдр имеет четыре вершины, шесть ребер и четыре грани: (No,..., Nt) = (1,4,6,4,1). Аналогично для октаэдра (№,•••,№) = (1,6,8,8,0,0,0), а для икосаэдра (No,. - -, Nm) = (1,12,30, 20,0,..., 0). Гексаэдр, он же куб, имеет восемь вершин, двена- дцать ребер и шесть квадратных граней; смещение разбивает каждый квадрат на два треугольника и добавляет новые ребра, так что мы получаем (No,..., №) = (1,8,18,12, 0, ...,0). Наконец смещение вершин, образующих пятиугольные грани додекаэдра, дает (No,..., N20) = (1,20,54,36,0,..., 0). (б) {210, 310} U {10, 20, 21,30,31} U {0,1, 2,3} U {е}. (в) 0 < Nt < (") для 0 < t < п и Nt-i > KtNt для 1 < t < п. Второе условие эквивалентно At-iM-i > Nt для 1 < t < п, если мы определим Ао1 = оо. Эти условия необходимы для теоремы К и достаточны, если А = (JF/vft. (г) Дополнения элементов, не входящих в симплициальный комплекс, а именно мно- жества {{0,... ,п — 1} \ а | а 0 С}, образуют симплициальный комплекс. (Можно также убедиться в выполнении необходимого и достаточного условия: Nt-i > KtNt <=> At-1M-1 > Nt <=> Kn-t+lNn-t+l < Nn-l, ПОСКОЛЬКУ Kn-tNn-t+l = (") - At-1M-1 согласно упр. 94.) (д) 00000 •(+ 14641; 10000 о 14640; 11000 о 14630; 12000 о 14620; 13000 о 14610; 14000 +> 14600; 12100 +> 14520; 13100 +> 14510; 14100 о 14500; 13200 о 14410; 14200 о 14400; 13300 +> 14310; самодуальными являются 14300 и 13310. 98. Приведенная далее процедура предложена С. Линуссоном (S. Linusson) [Combinato- rica 19 (1999), 255-266], который рассматривал более общую задачу для мультимножеств, и является существенно более быстрой, чем другие очевидные подходы к решению данной задачи. Пусть L(n, h, I) — количество допустимых векторов с Nt = (”) при 0 < t < I, Nt+i < (t”j) и Nt = 0 при t > h. Тогда L(n, h,l) = 0 для всех значений, за исключением —1 < I < h < п; кроме того, L(n,h,h) — L(n, h, — 1) = 1 и L(n,n,l) = L(n, п — 1,1) для I < п. Когда п > h > I > 0, можно вычислить L(n, h, Г) = L(n — 1, h,j)L(n — 1, j — 1, I — 1); данное рекуррентное соотношение следует из теоремы К. (Каждый вектор размеров соответствует комплексу {J PNtt, причем L(n — 1, h, j) представляет сочетания, которые не содержат максимальный элемент п — 1, a L(n — 1, j — 1,1 — 1)—сочетания, которые его содержат.) Окончательное общее количество равно L(n) = Ь(п, п, I). Вычисления дают L(0), L(l), L(2), ... = 2, 3, 5, 10, 26, 96, 553, 5461, 100709, 3718354, 289725509, ...; L(100) и 3.2299 x 101842. 99. Максимальные элементы симплициального комплекса образуют клаттер; и обратно: сочетания, содержащиеся в элементах клаттера, образуют симплициальный комплекс. Та- ким образом, эти две концепции, по сути, эквивалентны. (а) Если (Mo, Mi,..., Мп)—вектор размеров клаттера, то (No,Ni,..., Nn) представ- ляет собой вектор размеров симплициального комплекса, если Nn — Мп и N, = Mt +
7.2.1.3 ОТВЕТЫ К УПРАЖНЕНИЯМ 825 Kt+iNt+i для 0 < t < п. И обратно: каждый такой вектор (No, , Nn) дает (Мо,..., Мп), если использовать лексикографически первые Nt t-сочетаний. [Д. Ф. Клементс (G. F. Cle- ments) распространил этот результат на мультимножества в своей работе Discrete Matb. 4 (1973), 123-128.] (б) В порядке ответа к упр. 97, (д) это 00000, 00001, 10000, 00040, 01000, 00030, 02000, 00120, 03000, 00310, 04000, 00600, 00100, 00020, 01100, 00210, 02100, 00500, 00200, 00110, 01200, 00400, 00300, 01010, 01300, 00010. Обратите внимание, что (Мо, ,Мп) является допустимым тогда и только тогда, когда допустим (Мп,..., Мо), так что в данной интерпретации мы сталкиваемся с дуальностью другого вида. 100. Представим А в виде подмножества T(mi,..., mn), как в доказательстве следствия С. Тогда максимальное значение и А достигается, когда А состоит из N лексикографически наименьших точек xi... хп. Доказательство начинается с приведения к случаю сжатого А в том смысле, что его t-мультисочетания представляют собой Р| AoTt 1t для каждого t. Тогда, если у—наибольший элемент 6 Л и если х—наименьший элемент 0 А, можно доказать, что из х < у вытекает их > иу, следовательно, и (А \ у U х) > и А. Если их — иу — к, то можно найти элемент дк у, больший х, что приводит к противоречию с предположением о сжатости А. 101. (а) В общем случае F(p) = Nopn + Nipn~1 (1 — р) -t-h Nn(l —p)n, если f(xi,..., xn) равна 1 для Nt бинарных строк xi ..,xn с весом t. Таким образом, G(p) = р* + Зр3(1 — р) + р2(1 - р)2; Н(р) = р4 + р3(1 - р) + р2(1 - р)2. (б) Монотонная формула f при соответствии f(xi,... ,хп) = 1 <=>{/ —1 | ajj = 0} € С эквивалентна симплициальному комплексу С. Следовательно, функции f(p) среди моно- тонных булевых функций те, которые удовлетворяют условию из упр. 97, (в), и мы получа- ем подходящую функцию путем выбора лексикографически последних Nn-t t-сочетаний (которые являются дополнениями первых Ns s-сочетаний): {3210}, {321,320,310}, {32} дают f(w, х, у, z) = wxyz V xyz X/ wyz V wxz V yz = wxz X/ yz. M. П. Шютценбергер (M. P. Schiitzenberger) заметил, что можно легко найти пара- метры Nt из f(p), если обратить внимание на то, что /(1/(1 + и)) = (No + Niu + • • • + Nnun)/(1 + и)п. Можно показать, что Н(р) не эквивалентна монотонной формуле при любом количестве переменных, поскольку из (1 + и + и2)/(1 + и)4 = (TVo + Niu + • • • + Nnun)/(1 + u)n вытекает, что Ni = п — 3, N^ - (n~3) + 1 и «2№ — п — 2. Однако ответить на поставленный вопрос в общем случае не так просто. Например, функция (1+5u+5u2+5u3)/(1+u)5 не соответствует ни одной монотонной формуле с пятью переменными, поскольку кз5 = 7; однако она равна (1 + би + 10u2 + 10u3 + 5u4)/(l + u)6, что дает решение с шестью переменными. 102. (а) Выберем Nt линейно независимых полиномов степени t из /; лексикографически упорядочим их члены и возьмем линейные комбинации так, чтобы лексикографически наименьшие члены были различными одночленами. Составим I' из всех произведений этих одночленов. (б) Каждый одночлен степени t в I', по сути, представляет собой t-мультисочетание; например, xfx2x4 соответствует 55552111. Если Mt— множество независимых одночленов степени t, свойство идеала эквивалентно тому, что Mt+i Э gMt. В данном примере М3 = {х0а:2}; Ма = дМзЩхоХ^}; Ms = gM4U{xlx2}, поскольку x2(xoxi — 2xjX2) — х1(хох1х2) = — 2х1х2; соответственно, Mt+i = gMt. (в) По теореме M можно считать, что M( = QMst- Пусть М = (п'”)ч-•"СгО + С*]1)’ где s + t > nts > > nt2 > nti > 0; в этом случае nts = s + t тогда и только тогда, когда nt(s-i) = s — 2, ..., nti = 0. Кроме того, №+1>№ + KsM=(n(s + [;ts-sl) nt2 + [nt2 > 2]) + (nti + [nti > 1] + —н
826 ОТВЕТЫ К УПРАЖНЕНИЯМ 7.2.1.3 Таким образом, последовательность (п«8 —t — оо[п«8 < в],..., пц — t — oo[n«2 < 2],nti — t — oc[nti < 1]) лексикографически неубывающая при возрастании t, где оо’ вставляется в компоненты, у которых пц = j — 1. Такая последовательность не может увеличиваться бесконечно много раз без того, чтобы не превысить максимальное значение (s, —оо,..., —оо) согласно упр. 1.2.1-15, (г). 103. Пусть Pnsi — первые N элементов последовательности, определяемой следующим образом: для каждой бинарной строки х = xs+t-i .хо (в лексикографическом порядке) записываем (*'“) подкубов путем замены t единиц звездочками всеми возможными спосо- бами в лексикографическом порядке (считая 1 < *). Например, если х = 0101101 и t = 2, мы генерируем подкубы 0101*0*, 010*10*, 010**01, 0*0110*, 0*01*01, 0*0*101. [См. В. Lindstrom, Arkiv for Mat. 8 (1971), 245-257; обобщение, аналогичное след- ствию С, появляется в К. Engel, Sperner Theory (Cambridge Univ. Press, 1997), Theo- rem 8.1.1.] 104. Первые N строк в перекрестном порядке обладают искомым свойством. [Т. N. Danh and D. Е. Daykin, J. London Math. Soc. (2) 55 (1997), 417-426.] Примечание. Начав с наблюдения, что “1-тень” N лексикографически первых строк веса t (т. е. строк, полученных удалением только единичных битов) состоит из первых ptN строк веса t, Р. Альсведе (R. Ahiswede) и Н. Кай (N. Cai) распространили теорему Дана- Дейкина на вставку, удаление и/или перемещение битов [Combinatorica 17 (1997), 11-29; Applied Math. Letters 11,5 (1998), 121-126]. Уве Лек (Uwe Leek) доказал, что не имеет- ся глобального упорядочения тернарных строк с аналогичным свойством минимальных теней [Preprint 98/6 (Univ. Rostock, 1998), 6 р.]. 105. В цикле каждое число должно встречаться одинаковое количество раз, т. е. (”Zi) должно быть кратно t. Это необходимое условие, похоже, является одновременно и до- статочным, если п не слишком малб по сравнению с t. Однако это пока что невозможно доказать. [См. Chung, Graham, and Diaconis, Discrete Math. 110 (1992), 55-57.] В нескольких следующих упражнениях рассматриваются случаи t = 2 и t = 3, для которых известны элегантные решения. Аналогичные, но более сложные результаты были выведены для t = 4 и t = 5; случай t = 6 решен частично. В настоящее время случай (n, t) = (12,6)—минимальный, для которого неизвестно наличие универсального цикла. 106. Пусть разности последовательных элементов по модулю (2тп +1) равны 1, 2, ..., т, 1, 2, ..., т, ..., повторенным 2т + 1 раз; например, цикл для т = 3 представляет собой (013602561450346235124). Этот способ работает потому, что 1 -I-Ьт = (т+1) является взаимно простым с 2тп + 1. [J. Ecole Polytechnique 4, Cahier 10 (1810), 16-48.] 107. Существует З7 способов, которыми семь дублей ..., MW могут быть встав- лены в любой универсальный цикл 2-сочетаний множества {0,1,2,3,4,5,6}. Количество таких универсальных циклов равно количеству цепей Эйлера в полном графе К?, что, как можно показать, составляет 129 976 320, если рассматривать цикл (aoai... аго) как эквивалентный циклу (ai... агоао), но не обратному циклу (аго • • • aiao)- Таким образом, окончательный ответ — 284 258 211840. [Эта задача впервые решена в 1859 году М. Рейссом (М. Reiss), метод которого был так сложен, что полученный им результат вызывал сомнения; см. Nouvelies Annales de Mathematiques 8 (1849), 74; 11 (1852), 115; Annali di Matematica Рига ed Applicata (2) 5 (1871-1873), 63-120. Существенно более простое решение, подтверждающее результат Рейсса, было найдено Ф. Жоливальдом (Р. Jolivald) и Г. Тарри (G. Tarry), которые также подсчитали количество цепей Эйлера в Кд; см. Comptes Rendus Association Francaise pour 1’Avancement des Sciences 15, part 2 (1886), 49-53; E. Lucas, Recreations Mathematiques 4 (1894), 123-151. Брендон Мак-Кей (Brendan McKay) и Роберт Робинсон (Robert Robinson)
7.2.1.3 ОТВЕТЫ К УПРАЖНЕНИЯМ 827 нашли еще лучший подход, позволивший им продолжить подсчет вплоть до К21 с исполь- зованием того факта, что количество путей равно (т - l)!2m+1 (z2mz?m~2 ... z2ZT2] det(ajfc) (z2 + z2k), l<j<k<2m где ajk = —l/(z2 + г*) при j / к; ац = -l/(2zj) + £Zo<k<2m + **); CM- Combinatorics, Probability, and Computing 7 (1998), 437-449.] К. Фли Сан-Мари (C. Flye Sainte-Marie) в L’lntermtidiaire des Mathematiciens 1 (1894), 164-165, заметила, что цепи Эйлера в К? включают 2 х 720 путей с 7-кратной симметрией относительно перестановок{0,1,..., 6} (цикл Пуансо и обратный к нему), 32 х 1680 с 3- кратной симметрией и 25778 х 5040 асимметричных циклов. 108. При п < 7 решение невозможно, за исключением тривиального случая п = 4. При п = 7 имеется 12 255 208 х 7! универсальных циклов, не считая эквивалентными циклы (aofli... 034) и (ai... 03400) и включая случаи 5-кратной симметрии наподобие цикла из упр. 105. При п > 8 к решению задачи можно подойти систематическим путем, предложенным Б. Джексоном (В. Jackson) в Discrete Math. 117 (1993), 141-150; см. также G. Hurlbert, SIAM J. Disc. Math. 7 (1994), 598-604. Поместим каждое 3-сочетание в “стандартном циклическом порядке” С1С2С3, где сг = (ci + б) mod п, сз = (сг + S') mod п, 0 < 5,6' < п/2, и либо 6 — 6', либо тах(б, б1) < п — <5 — 6' / (п — 1)/2, либо (1 < 6 < п/4 и б' = (п — 1)/2), либо (б = (п — 1)/2 и 1 < б' < п/4). Например, при п = 8 допустимыми значениями (б, б') являются (1,1), (1,2), (1,3), (2,1), (2,2), (3,1), (3,3); при п = 11 это (1,1), (1,2), (1,3), (1,4), (2,1), (2,2), (2,3), (2,5), (3,1), (3,2), (3,3), (4,1), (4,4), (5,2), (5,5). Затем строим ориентированный граф с вершинами (с, б) для 0 < с < п и 1 < б < п/2 и с дугами (ci,6) —> (сг,б') для каждого сочетания С1С2С3 в стандартном циклическом порядке. Этот ориентированный граф связный и сбалансированный, так что по теореме 2.3.4.2D он имеет цепь Эйлера. (Наличие в правилах (п — 1)/2 делает ориентированный граф связным при нечетном п. Можно выбрать цепь Эйлера с n-кратной симметрией для п = 8, но не для п = 12.) 109. При п = 1 цикл (000) тривиален; при п = 2 цикла нет; имеется ровно два таких цикла при п — 4, а именно (00011122233302021313) и (00011120203332221313). При рассмотрении п > 5 примем, что мультисочетание djdzds находится в стандартном цикли- ческом порядке, если d% = (di + б — 1) modn, ds = (ds + б' — 1) modn, и (б, б') является допустимым для п + 3 в смысле предыдущего упражнения. Построим ориентированный граф с вершинами (d,6) для 0<d<nul<6< (п + 3)/2 и с дугами (di,6) —> (ds,б') для каждого мультисочетания didsds в стандартном циклическом порядке; затем найдем цепь Эйлера. Вероятно, универсальный цикл t-мультисочетаний существует для {0,1,..., п — 1} тогда и только тогда, когда существует универсальный цикл t-сочетаний для {0,1,..., п + t-1}. 110. Для проверки троп можно воспользоваться хорошим способом, который состоит в вычислении чисел b(S) = J2{2P^C' | с 6 S}, где (р(А),... ,р(К)) = (1,..., 13), с последующей установкой I 4— b(S) & —b(S) и проверкой, что b(S) 4- I = I s, а также что ((/ s) | (i » 1)) & a = 0, где a = 2Р^С1^ | • • • | 2Р^С®\ Значения b(S) и 52{u(c) | с G S} легко поддерживаются при проходе S по всему 31 непустому подмножеству в порядке кода Грея. Ответами к упражнению для х = (0,..., 29) являются (1009008, 99792, 2813796, 505008, 2855676, 697508, 1800268, 751324, 1137236, 361224, 388740, 51680, 317340, 19656, 90100, 9168, 58248, 11196, 2708, 0, 8068, 2496, 444, 356, 3680, 0, 0, 0, 76, 4); таким образом, средний счет « 4.769, а дисперсия ~ 9.768.
828 ОТВЕТЫ К УПРАЖНЕНИЯМ 7.2.1.4 Карты с нулевым счетом иногда в шутку называют “девятнадцать" поскольку такой счет невозможно получить ни при каком наборе карт. — Д. Г. ДЭВИДСОН (G. Н. DAVIDSON), Справочник по игре в Крибедж (Dee's Hand-Book of Cribbage) (1839) Примечание. В ограниченном варианте криббеджа (“crib”) не допускается “масть” из четырех карт. В этом случае распределение вычисляется немного проще и получается следующий ответ: (1022208, 99792, 2839800, 508908, 2868960, 703496, 1787176, 755320, 1118336, 358368, 378240, 43880, 310956, 16548, 88132, 9072, 57288, 11196, 2264, 0, 7828, 2472, 444, 356, 3680, 0, 0, 0, 76, 4); среднее значение и дисперсия при этом приблизительно равны 4.735 и 9.667. 111. дп~2гВ представляет собой множество всех г-подмножеств В; эти подмножества не должны содержаться в А. Если |А| = |В| = (п^г) для некоторого действительного х > п — 1, то согласно упр. 80 должно выполняться (”) > |А| + |Э”-2гВ| > (п“ ) + (*) > (n=r) + С71) = (г)- 1См- Quart‘ J- Matb- Oxford 12 (1961), 313-320.] РАЗДЕЛ 7.2.1.4 тп т- ^Ч-п-1) С) (ГД) [ш>п] ГГ1 [ш>п] 1~1 2. В общем случае для произвольных целых чисел xi > • • - > xm мы получаем все целочисленные m-кортежи <ц ... От, такие, что ai > • • • > am, ai +•••+ am = xi + • •• + Xrn и dm . . . Gl > Xrn . . . Xl, ПуТвМ ИНИЦИЭЛИЗаЦИИ ai . . . Clm <~ Xl . . . Xm и Om+1 4— Xm ~ 2. В частности, если с—произвольная целая константа, мы получим все целочисленные rn- кортежи, такие, что ai > • • • > am > с и di + • • 4- am = п, путем инициализации ai ч— п — тс + с, dj Ч— с для 1 < j < т и dm-t-i Ч— с — 2, в предположении, что п > ст. 3. dj = [(n + т — j)/m\ = [(п + 1 - 3)/т\ для 1 < j < т\ см. CMath §3.4. 4. Пусть 1 < г < п. У нас должно выполняться am > di — 1; следовательно, dj = [(n + т — j)/m\ при 1 < ji < т, где т—наибольшее целое, для которого fn/т] > г, а именно т = [n/rj. 5. [См. Eugene М. Klimko, BIT 13 (1973), 38-49.] Cl. [Инициализация.] Установить со Ч— 1, ci Ч— п, сг ... Сп Ч— 0... 0, /о <— 1, ti <— 0. (Считаем, что п > 0.) С2. [Посещение.] Посетить разбиение, представленное количеством частей ci... Сп и связями loh ... In- СЗ. [Ветвление.] Установить j ч— 1о и к Ч— lj. Если Cj = 1, перейти к шагу С6; в противном случае, если j > 1, перейти к шагу С5. С4. [Замена 1+1 на 2.] Установить ci Ч- ci — 2, сг Ч— сг + 1 и 1[С1 >0] Ч— 2. Если к 2, установить также /г +- к. Вернуться к шагу С2. С5. [Замена j Cj на (j+1) + 1 + • • • + 1.] Установить Ci Ч— j(cj — 1) — 1 и перейти к шагу С7. С6. [Замена к • Ск + j на (fc+1) +1 -I-+1.] Завершить работу алгоритма, если fc = 0. В противном случае установить Cj Ч— 0; затем установить ci ч— к(ск — 1) + j — 1, j Ч— к и к Ч— 1к-
7.2.1.4 ОТВЕТЫ К УПРАЖНЕНИЯМ 829 СТ. [Обновление связей.] Если ci > 0, установить 1о Ч— 1, li Ч— j + 1; в противном случае установить /о Ч— j + 1. Затем установить Cj ч— 0 и cj+i Ч— c^+i 4-1. Если к ф j + 1, установить Ij+i Ч— к. Вернуться к шагу С2. | Заметим, что этот алгоритм — без циклов, но он не быстрее алгоритма Р. Шаги С4, С5 и С6 выполняютсяр(п — 2), 2р(п) — p(n4-1) — р(п — 2) ир(п4-1) — р(п) раз соответственно. Таким образом, шаг С4 оказывается наиболее важным при больших п. (См. упр. 45 и детальный анализ Феннера (Fenner) и Лоизоу (Loizou) в Acta Inf. 16 (1981), 237-252.) 6. Считаем, что за каждым разбиением следует 0. Установить j Ч— 0, к Ч— ai и bk+i Ч— 0. Затем, пока к > 0, устанавливать j Ч— j 4- 1 и, пока к > aj+i, устанавливать Ьк Ч— j и к Ч— к — 1. (Мы использовали (11) в дуальной форме a-j — aj+i = dj, где di ...dn— представление в виде количества частей ЬхЬг - • • Этот алгоритм, по сути, проходит по краю диаграммы Феррерса; таким образом, время работы алгоритма грубо пропорционально oi + bi, сумме количества частей во входных и выходных данных.) 7. Из дуальности (11) имеем bi... bn = n“"(n—I)0"-1-0" ... . 8. Транспонирование диаграммы Феррерса соответствует зеркальному отражению и до- полнению битовой строки (15). Так что можно просто поменять местами и обратить р и q, получив разбиение (aia? ... )т = (qt 4-1- qi)₽1 (qt 4-1- q2)₽2 • • - (qt)₽t. 9. Доказательство по индукции: если ак = I — 1 и bi = к—1, увеличение аь и bi сохраняет равенство. 10. (а) В первом дереве левый дочерний узел каждого узла получается путем добавления Т’. Правый дочерний узел получается путем увеличения крайней справа цифры; этот дочерний узел существует тогда и только тогда, когда родительский узел заканчивается разными цифрами. Все разбиения п на уровне п находятся в лексикографическом порядке. (б) Во втором дереве левый дочерний узел получается путем замены ‘11’ на ‘2’. Этот дочерний узел существует тогда и только тогда, когда родительский узел содержит по крайней мере две единицы. Правый дочерний узел получается путем удаления 1 и увели- чения наименьшей части, превосходящей 1. Этот дочерний узел существует тогда и только тогда, когда в родительском узле имеется по меньшей мере одна единица и наименьшая превосходящая единицу часть ровно одна. Все разбиения п на m частей находятся на уровне п — т в лексикографическом порядке; прямой порядок обхода всего дерева дает лексикографический порядок всех узлов. [Т. I. Fenner and G. Loizou, Comp. J. 23 (1980), 332-337.] 11. [z100] 1/((1 - z)(l - z2)(l - z5)(l - z10)(l - z20)(l - z50)(l - z100)) = 4563 и [z100] (1 4- z 4- z2)(l 4- z2 4- z4) ... (1 4- z100 4- z200) = 7. [Cm. G. Pdlya, AMM 63 (1956), 689-697.] В бесконечном произведении Пк>о IIre{iofc,2 iofc,5 iofc}(l + zr 4- z2r) коэффициент при z10" равен 2"+1 — 1, а коэффициент при z10"-1 равен 2". Примечание переводчика. Для российского набора монет (1, 5, 10, 50 копеек и рубль) соответствующие количества способов —159 и 2, украинского (1, 2, 5, 10, 25, 50 копеек и гривна) — 3954 и 6, советского (1, 2, 3, 5, 10, 15, 20, 50 копеек и рубль)—66949 и 49. 12. Для доказательства того, что (14- z)(l 4- z2)(l 4- z3) ... = 1/((1 — z)(l — z3)(l — z5) ...), запишем левую часть в виде (1-z2) (1-z4) (1-Z6) (1-z) (l-z2)(l-z3) " и сократим общие множители в числителе и знаменателе. Другой способ состоит в замене z на z1, z3, z5, ... в тождестве (14- z)(l 4- z2)(l 4- z4)(l 4- z8) ... = 1/(1 — z) и перемножении получившихся результатов. [TVbvi Comment. Acad. Sci. Pet. 3 (1750), 125-169, §47.]
830 ОТВЕТЫ К УПРАЖНЕНИЯМ 7.2.1.4 13. Отобразим разбиение ci-1 + сг-2 + сз-3 + • • • на n-1 + [ci/2j-2 + гз-3 + |сг/2]-4 + rs-5 + [сз/2]-6 + • • •, где rm = (с™ mod 2) + 2(с2т mod 2) + 4(сдт mod 2) + 8(cgm mod 2) + • • •; 4332222111-> 64421111 ►+ 8332211. [Johns Hopkins Univ. Circular 2 (1882), 72.] 14. Соответствие Сильвестера легче всего понять, если представить его в виде диаграм- мы, в которой точки нечетных частей отцентрованы, а разбиения разделены на непересе- кающиеся “крюки1.’ Например, разбиение 17+15 + 15 + 9 + 9 + 9 + 9 + 5 + 5 + 3 + 3, имеющее пять различных нечетных частей, посредством диаграммы ставится в соответствие разбиению с разными частями 19 + 18+16 + 13 + 12 + 9 + 5 + 4 + 3 с четырьмя просветами. Пусть в общем случае, когда “прямоугольник Дюрфи” (показанный на диаграмме) имеет t строк, справа от него имеется ai,... ,си дополнительных точек, а снизу — bt, , bi, ..., bt точек, где ai > • • • > at > 0 и bi > • • • > bt > 0. Тогда различные части получаются как 2t — 1 + ai + bi, 2t — 2 + ai + b2, ..., 2 + at-i + bt, 1 + at + bt и (если она не равна нулю) 0 + а«. И наоборот, любое разбиение с 2t различными неотрицательными частями может быть записано в этом виде единственным образом. Так, разбиения с нечетными частями для п = 10 представляют собой 9 + 1, 7 + 3, 7 + 1 + 1 +1, 5 + 5, 5 + 3 + 1 +1, 5 + 1 + 1 + 1 + 1 + 1, 3 + 3 + 3+1, 3 + 3+1 + 1 + 1 + 1, 3+1 + --- + 1, 1-1 1-1, а соответствующие разбиения с разными частями—6 + 4, 5+4+1, 7 + 3, 4 + 3 + 2 +1, 6 + 3 + 1, 8 + 2, 5 + 3 + 2, 7 + 2 + 1, 9 + 1, 10. [См. замечательную статью Сильвестера в Amer. J. Math. 5 (1882), 251-330; 6 (1883), 334-336.] 15. Каждое самосопряженное разбиение следа к соответствует разбиению п на к различ- ных нечетных частей (“крюков”). Следовательно, можно записать производящую функ- цию либо как произведение (1 + z)(l + z3)(l + z®)..., либо как сумму 1 + z1/(l—z2) + z4/((l—z2)(l—z4)) + z9/((l—z2)(l—z4)(l—z6)) + • • •. [Johns Hopkins Univ. Circular 3 (1883), 42-43.] 16. Квадрат Дюрфи содержит к2 точек, а остающиеся точки соответствуют двум неза- висимым разбиениям с наибольшей частью < к. Таким образом, обозначая через w коли- чество частей, а через z—количество точек, находим, что 1 п —— 111— WZ' оо к к? EW Z (1 — z)(l — Z2) ... (1 — z*)(l — wz)(l — wz2) ... (1 — wzk) ’ [Эта впечатляюще выглядящая формула оказывается всего лишь частным случаем х = у = 0 еще более впечатляющей формулы из упр. 19.] 17. (а) ((1 + uvz)(l + uvz2)(l + uvz3) ... )/((1 — wz)(l — uz2)(l — uz3) ...). (б) Объединенное разбиение можно представить в виде обобщенной •••••••• + диаграммы Феррерса, в которой мы объединяем все части, помещая а, •••••••• над bj, если си > bj, а затем помечая крайнюю справа точку каждого bj. ••••••+ Например, объединенное разбиение (8,8,5; 9,7,5,2) имеет приведенную J £ * £ здесь диаграмму, на которой помеченные точки имеют вид *♦’. Метки
7.2.1.4 ОТВЕТЫ К УПРАЖНЕНИЯМ 831 появляются только у угловых точек; таким образом, транспонированная диаграмма соот- ветствует другому объединенному разбиению, в данном случае — (7,6,6,4,3; 7,6,4,1). [См. J. Т. Joichi and D. Stanton, Pacific J. Math. 127 (1987), 103-120; S. Corteel and J. Lovejoy, TYans. Amer. Math. Soc. 356 (2004), 1623-1635; Igor Pak, The Ramanujan Journal 12 (2006), 5-75.] Каждое объединенное разбиение c t > 0 частями соответствует, таким образом, “со- пряженному” разбиению с наибольшей частью t. Производящая функция для такого объединенного разбиения—((1 + vz) ... (1 + vzt-1))/((l — z) ... (1 — z*)), умноженное на (vz* + z‘), где vz* соответствует случаю bi = t, a z* соответствует случаю s = 0 или bi < t. (в) Таким образом, мы получили вариант общей z-номиальной теоремы из ответа к упр. 1.2.6-58: (1 + uvz) (1 + uvz2) (1 + uvz3) _ (1 + v) (1 + vz) (1 + vz4-1) i t (1 — uz) (1 — uz2) (1 — uz3) (1 — z) (1 — z2) (1 — z4) U Z ’ 18. Уравнения очевидным образом определяют а и b для заданных с и d, так что нужно показать, что с и d однозначно определяются величинами а и Ь. Приведенный далее алгоритм определяет с и d справа налево. А1. [Инициализация.] Установить г Ч— г, j Ч— з, к Ч— 0 и ао Ч— Ьо <— оо. А2. [Ветвление.] Завершить работу, если г + j = 0. В противном случае перейти к шагу А4, если а< > bj — к. АЗ. [Поглощение а*.] Установить Ci+j Ч— a,, di+j Ч— 0, г Ч— г — 1, fc <- fc + 1 и вернуться к шагу А2. А4. [Поглощение bj.] Установить cj+j ч— bj — fc, di+j ч— 1, j ч— j — 1, к ч— к + 1 и вернуться к шагу А2. | Имеется также метод, работающий слева направо. В1. [Инициализация.] Установить г ч— 1, j Ч— 1, fc Ч— г + з и ar+i Ч— bs+i Ч-оо. В2. [Ветвление.] Завершить работу, если к -- 0. В противном случае установить к Ч— к — 1, затем перейти к шагу В4, если a* < bj — fc. ВЗ. [Поглощение а,.] Установить cj+j-i ч- a*, d,+j-i Ч— 0, * ч— i + 1 и вернуться к шагу В2. В4. [Поглощение bj.] Установить cj+j-i Ч— bj — fc, d,+j-i Ч— 1, j Ч— j + 1 и вернуться к шагу В2. | В обоих случаях ветвление обеспечивает удовлетворение полученной последовательности условию ci > • • • > Сг+в. Заметим, что <++„ = min(ar,bs) и ci = max(ui,bi—>—s+1). Таким образом, мы доказали тождество из упр. 17, (в) другим способом. Расширение этой идеи приводит к комбинаторному доказательству “замечательной формулы с многими параметрами” Рамануджана: V " ТТ 1 ~ Ьгк+П - TT (l-a~1bzfc)(l-a-1w~1z,c+1)(l-awz,c)(l-z,c+1) W „ 1 ~ azfc+n 14 (1— a-1bu>-1zfc)(l— a-1zfc+1)(l— azfc)(l— wzk) n=-oo fc=0 fc=0 ' '' '' '' ’ [Ссылки: G. H. Hardy, Ramanujan (1940), Eq. (12.12.2); D. Zeilberger, Europ. J. Combinatorics 8 (1987), 461-463; A. J. Yee, J. Comb. Theory A105 (2004), 63-77.] 19. [Crelle 34 (1847), 285-328.] Согласно упр. 17, (в), упомянутая в указании сумма по fc равна / г-л i (z — bz) .. .(z — bz1) (1 — uz) ... (1 — uz1) \ тг 1 — auzm V (1 — z) ... (1 — zl) (1 — auz) ... (1 — auz1) / 1 — uzm ’
832 ОТВЕТЫ К УПРАЖНЕНИЯМ 7.2.1.4 суммирование по I аналогично, с заменой и <-> v, а <-> Ь, к <-> I. Дальнейшее суммирование по к и I приводит при Ь = auz к (1 - twzm+1)(l - auzm) (1 — UZm)(l — l)Zm) Положим теперь и = wxy, v = 1/(?/г), а = 1/х и b = wyz. Приравняйте это бесконечное произведение к сумме по I. 20. Для получения р(п) требуется сложить или вычесть примерно ^/8п/3 ранее вычис- ленных значений, большинство из которых имеют длину в(у/п) бит. Следовательно, р(п) можно вычислить за О(п) шагов, т. е. общее время составляет О(п2). (Непосредственное использование (17) приводит к 0(п®/2) шагам.) 21. Поскольку 9(n)z" = (1 + z)(l + z2) • • • равно (1 — z2)(l — z4) ... P(z) = (1 — г2 — z4 + г10 + z14 - z24-)P(z), имеем q(n) = p(n) — p(n — 2) — p(n — 4) + p(n — 10) + p(n — 14) — p(n — 24)- [Имеется также “чисто рекуррентное соотношение”, в котором используются только значе- ния q(n), аналогичные рекуррентному соотношению для <т(п) из следующего упражнения.] 22. Из (21) имеем £“=1 <z(n)z" = Tnz’n" = lnP(z) = (z + 2z2 - 5z® - 7z7 + • • • )/(l — z — z2 + z® + z7 + • • •). [Bibliothique Impartiale 3 (1751), 10-31.] 23. (Решение Марка ванЛеувена (Marc vanLeeuwen).) Разделим (19) на 1 — v, получив n(i-«v-i)(i-wV)(i-«v+i) = f}(-i)"Jn21)^(s)~j(nr)') fc=l n=0 \ V / oo 2n = 52(-1)п«("^) n=0 fc=0 теперь установим и = z и v - 1. [См. §57 статьи Сильвестера, на которую имеется ссылка в ответе к упр. 14. Дока- зательство Якоби содержится в §66 его монографии Fhndamenta Nova Tbeori? Functionum Ellipticarum (1829).] 24. (a) [zn] A(z) = J2(—l)-’+fc(2fc + l)[3j2 +j + k2 + fc = 2n] (где сумма берется по всем целым числам j и всем неотрицательным целым числам к) в соответствии с (18) и упр. 23. Если п mod 5 = 4, ненулевые члены образуются только при j mod 5 = 4 и к mod 5 = 2; но тогда (2к + 1) mod 5 = 0. (б) В соответствии с формулой 4.6.2-(5), если р—простое число, то S(z)₽ = B(zp) (по модулю р). (в) Поскольку A(z) = P(z)~4, примем B(z) = P(z). [Proc. Cambridge Pbilos. Soc. 19 (1919), 207-210. Аналогично доказывается, что p(n) кратно 7 при п mod 7 = 5. Рамануджан дошел до получения красивых формул p(5n + 4)/5 = [zn] P(z)6/P(z®)®; p(7n + 5)/7 = [zn] (P(z)4/P(z7)3 + 7zP(z)8/P(z7)7). Аткин (Atkin) и Свиннертон-Дайр (Swinnerton-Dyer) в работе Proc. London Math. Soc. (3) 4 (1953), 84-106, показали, что разбиения 5n+4 и 7n+5 могут быть разделены на классы равного размера в соответствии со значениями (наиболь- шая часть — число частей) mod 5 или mod 7, как предположил Ф. Дайсон (F. Dyson). Имеется немного более сложное доказательство с применением комбинаторной статистики того, что p(n) mod 11 = 0 при п mod 11 = 6; см. F. G. Garvan, Trans. Amer. Math. Soc. 305 (1988), 47-77.]
7.2.1.4 ОТВЕТЫ К УПРАЖНЕНИЯМ 833 25. [Соотношение из указания можно доказать, дифференцируя обе части приведенного тождества. Оно представляет собой частный случай у = 1—а: красивой формулы, открытой Н. X. Абелем (N. Н. Abel) в 1826 году: Ыг (х) + Ы2 (у) = Ы2 ( ) \1—у/ + Li2(rG) “ l‘2Gi J1F1 "Т1) “ \1—X/ \(1—х)(1—у)/ См. статью Абеля ?uvres Completes 2 (Christiania: Grondahl, 1881), 189-193.] (а) Пусть f(x) = ln(l/(l - e~xt)). Тогда J® f(x) dx = - Li2(e-tI)/t и /(n)(x) = (-t)n x etx ektx/(etx — 1)", так что формула суммирования Эйлера позволяет получить Li2(e-‘)/t + 11п(1/(1 - е-‘)) + 0(1) = «(2) + 11п(1 - е“‘) - Ы2(1 - €“*))/* - | In t + 0(1) = C(2)/t + j Int + 0(1) при t —> 0. (б) Имеем e~mnt/n = Zm,n>i fi^(mnt)~Zr(z) dz/n; суммирование дает 2к? C(z + 1)C(ZX *r(z) dz. Полюс в z = 1 дает £(2)/t; двойной полюс в z = 0 дает —С(0) lnt + £'(O) = | Int— | 1и2тг; полюс в z - — 1 дает — £(—l)C(O)t = BiBit = —1/24. Нули £(z + l)C(z) сокращают другие полюса Г(г), так что результатом является In F(e-t) = C(2)/t + | ln(t/2?r) — t/24 + O(tM) для произвольно большого M. 26. Пусть F(n) = e-fc2/". Можно воспользоваться формулой (25) либо с f(x) = e-l2/"[a; > 0] + |<5хо, либо с f(x) = е~х21п для всех х, поскольку 2F(n) +1 = е~к Выберем второй способ. Тогда правая часть (25) при 0 = 0 представляет собой быстро сходящийся ряд lim M—too 2icmiy—y2/n оо ЛУ = 2 2 „ — 7Г ТП П е если выполнить подстановку и = у+тгтпг, значение интеграла равно у/тт. [Этот результат представляет собой формулу (15) на с. 420 оригинальной статьи Пуассона.] 27. Начнем с подстановки и = у + Ъ — d/а и получим e-a(v+b)2+2c,v dy = е-с2/а-2Ьы joo^ e-““2 du. А с помощью подстановки t = аи2 и результатов упр. 1.2.5-20 и 1.2.6-43 получим е-““2 du = Jo°° е~* dlfyfat = Г(|)/-Уа = ^/тг/а. Теперь (30) вытекает из (29), так как для всех целых чисел та g(3m + 1) + p(-3m) = ^^(-i)”^-6"2*"^®»2/4; p(3m + 2) + p(-3m - 1) = 0. [См. М. I. Knopp, Modular Functions in Analytic Number Theory (1970), Chapter 3.] 28. (a-г) Cm. Trans. Amer. Math. Soc. 43 (1938), 271-295. В действительности Лемер нашел явные формулы для Аре(п) с использованием символов Якоби из упр. 4.5.4-23: AHn)H-ir(^>'2sin^, . . , fm\ 2 „./о . 4тгт А3е(п) = (-1)е+1( 3-)^3е'2sin—, •Аре(п) = < если (Зт)2 = 1 — 24п (по модулю 2е+3); если (8т)2 = 1 — 24п (по модулю Зе+1); если (24т)2 = 1 — 24п (по модулю ре), р > 5, и 24nmodp 1; если 24п mod р = 1 и р > 5. 27 Зак. 3331
834 ОТВЕТЫ К УПРАЖНЕНИЯМ 7.2.1.4 (д) Если к = 2°3l>Pi1 ... р?‘, где 3 < pi < • • • < pt и ei... et / 0, вероятность того, что АЛ(п) / 0, равна 2~‘(1 + (-l)[ei>1]/pi) • • • (1 + (-l)le‘>1]/Pt). 29. Z1Z2 . ..Zm/((1 - Zl)(l - Z1Z2) ... (1 — Z1Z2 • ..Zm)). 30. (а) ЦЧ и (б) |Ч"| согласно (39). 31. Первое решение [Marshall Hall, Jr., Combinatorial Theory (1967), §4.1]: непосредствен- но из рекуррентного соотношения (39) можно показать, что для 0 < г < fc! существует полином Д,г(п) = nfc-1/(fc!(fc—1)!) + О(пк~2), такой, что |”| = /п,Птоан(п). Второе решение: поскольку (1 — z)... (1 — zm) = Пр±в(1 — e2,r,p/«z)lm/«Jj где про- изведение берется по всем сокращенным дробям р]д с 0 < р < д, коэффициент при z" в (41) может быть выражен как сумма корней единицы, умноженных на полином степени п, а именно как 52p±Qe2,r*pn/,’/p,Q(n), где /р.ч(п) — полином степени, меньшей, чем [пг/qj. Таким образом, существуют константы, такие, что |%| = ащ + аг + (—1)"аз; |з| = bin2 + Ьгп + Ьз + (—l)nt>4 + unbs + ш~пЬв, где и = е2™/3; и т. д. Эти константы определяются значениями для малых п, и для первых двух случаев Ini 1 1 1, ,.n I п I 12 7 1. 1„ 1-п 121 2 4 4V ’ ’ 131 12 72 ’ 9 9 Отсюда следует, что |д|—целое число, ближайшее к п2/12. Аналогично |^|—целое число, ближайшее к (п3 + Зп2 — 9п[пнечетно])/144. [Точные формулы для |"|, |”| и |^|, без упрощения с помощью функции “пол” были впервые найдены Д. Ф. Малфатти (G. F. Malfatti), Memorie di Mat. e Fis. Societa Italiana 3 (1786), 571-663. У. Д. А. Колмен (W. J. A. Colman) в Fibonacci Quarterly 21 (1983), 272- 284, показал, что |^| —целое число, ближайшее к (п4 + 10п3 + 10п2 — 75п —45п(—1)")/2880, и привел аналогичные формулы для |”| и |"|.] 32. Поскольку Л"| < р(п), причем равенство выполняется тогда и только тогда, когда т > п, имеем Ц < р(п — т) с равенством тогда и только тогда, когда 2т > п. 33. Разбиение на т частей соответствует не более чем ml композициям; следовательно, (m-i) — т' 1ml’ Соответственно, p(n) > (n — l)!/((n — m)!m! (т — 1)!), и при т = [д/5г] приближение Стирлинга доказывает, что Inр(п) > 2у/п — Inn — | — 1п2тг. 34. ai >аг > • • > а,т > 0 тогда и только тогда, когда ai — т + 1 > аг — т + 2 > • • • > ат > 1. Разбиения на т различных частей соответствуют ml композициям. Таким образом, с учетом ответа к предыдущему упражнению £ 1X1 S jbCH’72)- [См. Н. Gupta, Proc. Indian Acad. Sci. A16 (1942), 101-102. Подробная асимптотическая формула для Ц при п = 0(т3) имеется в упр. 3.3.2-30.] 35. (а) х = £ In £ и -0.194. (б) х = In In In 2 и 0.092; в общем случае х = ^(ln — Inin pfa)- (в) JZxdF(x) = J0oo(Cu)-2(lnu)e-1/<c“)du = -±J0°°(lnC + lnv)e-”dv = (7 - In С)/С и 0.256. (г) Аналогично Л, х2е~Сх ехр(—e~CxfC)dx = (у2 + £(2) — 27In С + (1пС)2)/С2 ~ 1.0656. Таким образом, дисперсия равна £(2)/С2 = 1 (в точности (!)). [Распределение вероятности е-е<о_1)/|> обычно называется распределением Фишера-Типпетта; см. Proc. Cambridge Phil. Soc. 24 (1928), 180-190.]
7.2.1.4 ОТВЕТЫ К УПРАЖНЕНИЯМ 835 36. Сумма по всем jr — (тп + г — 1) > • • • > jz — (гп + 1) > ji — т > 1 дает _ у- 11 - rm -r(r - 1)/2 I p(n - t) r I p(n) 2 r = T~~ T^-2 m(l + O(n-1/2+2£)) + E 1 — ct 1 — or 1 — otr -1/2 «-1/2 „-1/2 = i i 2 1...-^-?exp(-Cra: + O(rn-1/2+2t)) + E, ct~l — la* — 1 a r — 1 где E—член ошибки, учитывающий случаи t > пг^2+с. Старший член гГ1^2/(а~^ — 1) равен -^(l+OCjn-1/2)). Легко убедиться, что Е = О(п1ов"е-С" ), даже при использовании грубой верхней границы |‘-гт-г(г-1)/21 < ПОСКОЛЬКу V tre~t/N = О( Г tre~t/Ndt \ = O(Nr+1xre~x/(l - r/x)), t>*N KJ*N ' где TV = О(-\Дг), x = O(n€), r = O(logn). 37. Такое разбиение учитывается один раз в Ео, q раз в Ei, (’) раз в Ег, ...; т. е. ровно J2J_0(—1)*(’) = (—lfC’;1) раз в частичной сумме, оканчивающейся членом (—1)ГЕГ. Это количество не превышает <5до при нечетном г и не меньше <5до при четном г. [Подобная аргументация показывает, что обобщенный принцип из упр. 1.3.3-26 также обладает ука- занным свойством. Источник-. С. Bonferroni, Pubblicazioni del Reale Istituto Superiore di Scienze Economiche e Commercial! di Firenze 8 (1936), 3-62.] 38. z'4-”1-1 ('+”172h = z'+m-1(l - г')... (1 - z'+m-2)/((l - z)... (1 - z”*-1)). 39. В соответствии с упр. 1.2.6-58 [xm] (1 + zx)(l + z2x) ... (1 + zl-1x) = гт^т+1)/2(,“1)г, что равно (z—zl)(z2—zl) ... (zm—z*)/((l—z)(l—z2) ... (1—zm)). Ответ следует из теоремы С: замена ... ат на (щ — пг) ... (am — 1) дает эквивалентное разбиение п — т(т + 1)/2 на не более чем т частей, не превышающих I — 1 — т. 40. Пусть a = ai... ат — разбиение не более чем на т частей и пусть /(а) = оо, если ai < I, в противном случае /(a) = min{ j | ai > I + а^+1}. Пусть gk— производящая функ- ция для разбиений с /(а) > к. Разбиения с /(а) = к < оо характеризуются неравенствами G1 > 0,2 > • • • > О,к > 0,1 — I > Ок+1 > • • • > От+1 = 0. Таким образом, aia2...am = (bk+l+l)(bi+l)... (bfc_i+l)bfc+i.. .Ьт, где f(bi...bm) > fc; обратное также верно. Отсюда следует, что gk = gk-i — zl+kgk-i- [См. American J. Math. 5 (1882), 254-257.] 41. См. G. Almkvist and G. E. Andrews, J. Number Theory 38 (1991), 135-144. 42. А. Вершик (A. Vershik) [Functional Anal. Applic. 30 (1996), 90-105, Theorem 4.7] привел формулу ____e r-ck/y/n , 1 6 -cak/y/n ~ i 1 _ e-c(e+v) i_c-c(e+v)e ~ ’ где константа с должна быть выбрана как функция от в и <р так, чтобы площадь области была равна п. Эта константа с отрицательна, если в<р < 2, и положительна, если > 2; при = 2 область вырождается в прямую линию ву/п <Ру/п Если <р = оо, получаем с = VLi2(t), где t удовлетворяет соотношению в = (In y7j)/\/Li2(t).
836 ОТВЕТЫ К УПРАЖНЕНИЯМ 7.2.1.4 43. р(п — к(к —1)/2). (Замените aia2 ... на (ai — fc + l)(a2 — fc + 2) .. .ак, чтобы получить эквивалентное разбиение п — к(к — 1)/2.) 44. Считаем, что п > 0. Количество разбиений с разными наименьшими частями (или с одной-единственной частью) равно p(n+1) — р(п) —количеству разбиений п +1, которые не заканчиваются единицей, поскольку мы получаем первые из вторых путем измене- ния наименьшей части. Таким образом, окончательный ответ—2р(п) — р(п + 1). [См. R. J. Boscovich, Giornale de’ Letterati (Rome, 1748), 15. Количество разбиений, в которых равны три наименьшие части, равно 3p(n) — p(n + 1) — 2р(п + 2) + р(п + 3); подобные формулы могут быть выведены и для других ограничений на меньшие части разбиений.] 45. В соответствии с формулой (37) имеем p(n—j)/p(n) = 1—Cjn-1/2 +(C2j2+2j)/(2n) — (8C3j3 + 60Cj2 + Cj + 12C-1j)/(48n3/2) + O(j4n~2). 46. Если n > 1, то T^n) = p(n — 1) — p(n — 2) < p(n) — p(n — 1) = T^n), поскольку p(n) — p(n — 1) — количество разбиений n, не оканчивающихся единицей; каждое такое разбиение п — 1 дает при увеличении наибольшей части разбиение для п. Однако эта разность достаточно мала: (Т^п) — Т2(п))/р(п) = С2In + О(п-3^2). 47. Тождество в указании получается путем дифференцирования (21); см. упр. 22. Ве- роятность получения количества частей щ ... Сп при щ + 2с2 + • • • + псп = п по индукции по п равна " ск Рг(С1 . . .Сп) = ЕЕ *=1j=i кр(п — jk) пр(п) Рг(щ . . . Ck-l(ck~j)Ck+l ...Сп) к _ 1 пр(п) р(п) ’ [Combinatorial Algorithms (Academic Press, 1975), Chapter 10.] 48. Вероятность того, что j имеет определенное фиксированное значение на шаге N5, равна 6/(tt2j2) + О(п-1^2), а среднее значение jk имеет порядок у/п. Среднее время, затрачиваемое на шаге N4, равно 0(п), так что среднее время работы алгоритма имеет порядок п3'2. (Попробуйте самостоятельно провести более точный анализ.) 49. (а) Имеем F(z) = 52£Xi Fk(z), гДе F*(z) — производящая функция для всех разбие- ний, наименьшая часть которых > к, а именно 1/((1 — zfc)(l — zfc+1) ... ) — 1. (б) Пусть fk(n) = \zn]Fk(z)/p(n). Тогда/i(n) = 1; /2(п) = 1-р(п-1)/р(п) = Сп-1/2 + О(п-1); /з(п) = (p(n) - р(п - 1) - р(п - 2) + p(n - 3))/p(n) = 2С2п-1 + О(п~3/2)\ fi(n) = 6C3n-3^2 + О(п~2). (См. упр. 45.) Оказывается, что Д+1(п) = к\Скп~к^2 +O(n“^fc+1^2); в частности, /в(п) = О(п~2). Следовательно /s(n) + ••• + fn(n) = О(п-1), поскольку fk+i(n)< fk(n). Полученные результаты приводят к [zn] F(z) = p(n)(l + С/у/п + О(п-1)). 50. (а) с™(т + к) = Ст-1(тп — 1 + к) + Cm(k) = тп — 1 — к + c(fc) + 1 по индукции при 0 < к < тп. (б) Потому что |m+fc| = р(к) для 0 < к < т. (в) Когда п - 2m, алгоритм Н, по сути, генерирует разбиения т, и j — 1 является второй наименьшей частью в разбиении, сопряженном к только что сгенерированному (исключение составляет случай j — 1 = т сразу после разбиения 1... 1, сопряженное к которому состоит из одной части). (г) Если все части а превышают к, то пусть akq+1j соответствует a (fc+1). (д) Продолжим выполнять предыдущее упражнение. В соответствии с п. (г) про- изводящая функция Gk(z) для всех разбиений, вторая наименьшая часть которых > к, представляет собой Ffc+i(z)/(l —z). Следовательно, C(z) = (F(z)—Fi(z))/(1—z)+z/(l — z)2.
7.2.1.4 ОТВЕТЫ К УПРАЖНЕНИЯМ 837 (е) Как и в предыдущем упражнении, можно показать, что [zn] Gk(n)/p(n)=O(n~k^2) при к < 5; следовательно, c(m)/p(m) = 1Ч-О(пг-1/2). Отношения (с(т)ч-1)/р(т), которые легко вычислить для малых т, достигают максимального значения 2.6 при т = 7, после чего монотонно уменьшаются. Таким образом, внимательное рассмотрение асимптотиче- ских границ ошибки завершает доказательство. Примечание. Б. Фристедт (В. Fristedt) [lYans. Amer. Math. Soc. 337 (1993), 703-735] доказал среди прочего, что количество к в случайном разбиении п больше Сху/п с асимп- тотической вероятностью е~х. 52. В лексикографическом порядке |64^13| разбиений 64 имеют ai < 13; |50^10| из них име- ют ai = 14 и аг < 10; и т. д. Таким образом, с учетом указания, разбиению 14 11 9 6 4 3 2 I15 предшествуют ровно р(64) — 1000000 разбиений в лексикографическом порядке, делая его миллионным в обратном лексикографическом порядке. 53. Как и в предыдущем ответе, |^| разбиений 100 имеют ai = 32 и аг < 12, и т. д.; так что лексикографически миллионное разбиение, в котором ai = 32, представляет собой 321312 87655 I12. Алгоритм Н дает сопряженное к нему, а именно 20 8 8 8 8 6 5 4 3 3 3 3 2 I19. 54. (а) Очевидно, истинно. Этот вопрос—всего лишь разминка. (б) Истинно, но не столь очевидно. Если аТ = ..., то, рассматривая диаграмму Феррерса, получим ах Ч-•—I- ак + a'i + • • • + a'i < n + kl для 1 < к < a't, причем равенство достигается при к = а\. Таким образом, если а Р и а\ + • • • + a't > bi Ч----1-Ь\ для некоторого I, при минимальном I получим n+kl = bi Ч-Fbfc+bi +- -+bz( < ai + • • • + ak + a'i 4- • • • + a'i <n + kl, где к = b'h т. e. приходим к противоречию. (в) Рекуррентное соотношение ск = min(ai Ч- • • • + ак, bi + • - • Ч- bk) — (ci Ч- • - - Ч- Cfe-i), очевидно, определяет наибольшую нижнюю границу, если C1C2... представляет собой разбиение. Это так, поскольку если ci Ч-l-Cfc = ai4-1-а*, то 0<тш(а&+1,Ь&+1)< min(afe+i, bfc+i Ч- bi Ч- • • • Ч- bk — ai — • • • — ак) = с*+1 < а*+1 < ак = ск Ч- (ci Ч- • • Ч- ck-i) — (ai Ч- - • • Ч- afc_i) < ск. (г) а V Р = (ат Л Рт)т (двойное сопряжение необходимо потому, что ориентированное на максимум рекуррентное соотношение, аналогичное соотношению из пункта (в), может не выполняться). (д) а Л Р имеет max(Z,m) частей, a a V Р—min(Z,m) частей. (Рассмотрите первые компоненты их сопряжений.) (е) Истинно для а Л Р в соответствии с выводом в п. (в). Ложно для a V Р\ например, 6321 V 543 = 633 на рис. 52. Источник-. Т. Brylawski, Discrete Mathematics 6 (1973), 201-219. 55. (а) Если где 7 = C1C2 ..., то ai Ч-ha* = ci Ч-----hCfc = bi Ч-l-b* для всех к, за исключением к = I и к = Z4-1; таким образом, а покрывает р. Следовательно, Р? покрывает ат. Обратно, если а > Р и а Р, можно найти 7 > Р, такое, что а t>- 7 или 7Т t>- ат, следующим образом. Найдем наименьшее к, для которого ак > Ьк, наименьшее Z, для которого ак > ai+i, и наименьшее т, для которого ак — 1 > am+i. (Заметим, что Ьк > 0.) Если ат > am+i Ч- 1, определим 7 = схсг... следующим образом: ск = ак — [к = т] + [fc = тЧ-1]. В противном случае положим ск = ак — [fc = Z] 4- [fc = пгч-l]. (б) Пусть а и Р представляют собой строки из п нулей и единиц, как в (15). В этом случае a t>- Р тогда и только тогда, когда а —> Р, а t>- аТ тогда и только тогда, когда а => Р, где »’ означает замену подстроки вида 011’10 подстрокой 101’01, а ‘=>’ означает замену подстроки вида 010’10 подстрокой 100’01 для некоторого q > 0.
838 ОТВЕТЫ К УПРАЖНЕНИЯМ 7.2.1.4 (в) Разбиение покрывает не более [ai > аг] Ч-1- [am~i > am] + [ат > 2] других разби- ений. Разбиение а = (пгЧ-ni — 1)(пг— 2)(пг— 3) ... 21 максимизирует эту величину в случае ат = 1; случаи с ат > 2 не дают никакого улучшения. (Сопряженное разбиение, а именно (пг—1)(пг—2) .. .21"*+1, обеспечивает ту же степень покрытия. Следовательно, и а, и аТ также покрываются максимальным количеством других разбиений.) (г) Что то же самое, последовательные части р отличаются не более чем на 1, и наи- меньшая часть равна 1; краевое представление не содержит единиц, следующих одна за другой. (д) Используем краевое представление и заменим к- отношением —Если a —> ai и a —» a'j, можно легко показать наличие строки 0, такой, что ai —> 0 и a'i —> 0, например: 101’011Г10 oii’ioirio loi’ioiroi. ОИ’ИОГО! Пусть /3 = ft (► >- 0т, где 0т минимально. Тогда по индукции по max(fc, к') получаем к = т и а.к = 0т', также fc' = пг и а'к, = 0т- (е) Установить 0 ч— аТ; затем устанавливать 0 ч— 0' до тех пор, пока 0 не станет минимальным, используя любые подходящие разбиения 0', такие, что 0 t>- 01. Искомое разбиение—0Т. Доказательство. Пусть д(а)—общее значение ак = а'к, из п. (д); мы должны доказать, что из a > 0 вытекает д(а) /г(/?). Существует последовательность а = ао, ..., ак = 0, где aj —> aj+i или aj => aj+i для 0 < j < к. Если ao —> ai, имеем д(а) = p(ai); таким образом, этого достаточно, чтобы доказать, что иза=>/3иа—>а' вытекает а' > р(/3). Однако мы имеем, например, ЮО’ОИГЮ 010’1011г10 100в101Г01, oio’noroi -» 010’_110011г01 поскольку можем считать, что q > 0; прочие случаи аналогичны. (ж) Частями Ап являются а* = пг + [fc < ni] — к для 1 < к < пг; частями А„ являются Ьк = П2 — к + [п2 — fc<ni] для 1 < к < П2. Алгоритм из (е) достигает А„ из п1 после ("2+1) _ ("2“ni) шагов, поскольку каждый шаг увеличивает = 52 (ak2+1) на !• (з) Путь п, (п—1)1, (п—2)2, (п—2)11, (п-3)21, ..., 321"-6, 31"-3, 221"-4, 21"-2, 1п длиной 2п — 4 при п > 3 является кратчайшим. Можно показать, что самый длинный путь имеет т = 2(*J) Ч- ni (пг—1) шагов. Один из таких путей имеет вид ао, ..., ак, ..., at, ..., am, где а0 = n1; ак = An; at = А„; aj t>- aj+1 для 0 < j < I; кроме того, а^+1 t>- aj для к < j < тп. Источник: С. Greene and D. J. Kleitman, Europ. J. Combinatorics 7 (1986), 1-10. 56. Положим A = ui... Um и д = vi.. .vm. В приведенном далее (неоптимизированном) алгоритме применяется теория из упр. 54 для генерации разбиений в солексном порядке, поддерживая а = ajav ат р и аТ = Ь1Ьг - Ь| Ат. Для поиска следующего за а элемента сначала нужно найти наибольшее j, такое, что bj может быть увеличено. Тогда мы имеем 0 = bi... bj-i (b,+l) 1... 1 Ат, следовательно, искомый следующий элемент — 0? hp,. Алгоритм поддерживает вспомогательные таблицы Tj = bj Ч-Fbj, Sj = щ Ч--i-Vj и tj = Wj Ч- Ч- •, где Ат = W1W2 .... Ml. [Инициализация.] Установить q Ч— 0, к Ч— щ. Для j = 1, ..., т, пока wj+i < fc, устанавливать tk 4— q 4— q + j тлк 4- к — 1. Затем вновь установить q Ч— 0 и для j = 1, ..., т установить aj Ч— Vj, Sj 4— q 4— q + aj. Затем еще раз установить
7.2.1.4 ОТВЕТЫ К УПРАЖНЕНИЯМ 839 дч—ОиЛч—/ч— ai. Для j = 1, ..., т, пока a2+i < к, устанавливать bk Ч— j, гь 4- q q + j и к 4- к — 1. И наконец установить ti Ч— 0, Ьо Ч— 0, b~i <-1. М2. [Посещение.] Посетить разбиение ai... ат и/или сопряженное к нему разбиение bi ...bi. М3. [Поиск у.] Пусть j—наибольшее целое число < I, такое, что гл+1 > fj-t-i и Ь3 ф bj~i. Завершить работу алгоритма, если j = 0. М4. [Увеличение bj.] Установить х Ч— rj+i — 1, fc ч— bj, bj Ч— fc + 1 и ak+i Ч— j. (Предыдущее значение a^+i было равно j — 1. Теперь мы переходим к обновле- нию ai. ..ак с использованием, по сути, метода из упр. 54, (в) для распределения х точек по столбцам j + 1, j + 2, ....) М5. [Мажоризация.] Установить z Ч— 0, а затем для г = 1, ..., к выполнить сле- дующее: установить х Ч— х + j, у Ч— min(:c, s*), a, Ч— у — z, z Ч— у, если г = 1, установить /ч—рч— aiHq4— 0; если i > 1, пока р > а,, устанавливать Ьр ч— г — 1, гр Ч— q Ч— q + г — 1, р Ч— р — 1. Наконец, пока р > j, устанавливать Ьр Ч— fc, ГрЧ—g4—q + fc, рч—р — 1. Вернуться к шагу М2. | 57. Если А = рТ, то, очевидно, существует только одна такая матрица, по сути, представ- ляющая собой диаграмму Феррерса А. Условие А является необходимым, поскольку, если рт = bib2 - - -, мы имеем bi + • • • + bk = min(ci, fc) + min(c2, fc) + • • •, и эта величина не должна быть меньше, чем количество единиц в первых fc строках. Наконец, если существует матрица для А и р и если А покрывает а, то можно легко построить матрицу для аир путем перемещения 1 из любой определенной строки в другую, имеющую меньшее количество единиц. Примечания. Этот результат часто называют теоремой Гейла-Райзера по известным статьям Д. Гейла (D. Gale) [Pacific J. Math. 7 (1957), 1073-1082] и Г. Д. Райзера (Н. J. Ryser) [Canadian J. Math. 9 (1957), 371-377]. Но количество 0-1 матриц с суммами строк А и суммами столбцов р представляет собой коэффициент при мономиальной симметричной функции xitxia - • • в произведении элементарных симметричных функций еп еГ2 ..., где er = [zr] (1 +a:iz)(l + X2z)(l + хзг) .... В этом контексте полученный результат известен как минимум с 1930-х годов; см. формулу Д. Э. Литтлвуда (D. Е. Littlewood) для Цт,„>о(1 + а:туп) в Proc. London Matb. Soc. (2) 40 (1936), 49-70. [Гораздо ранее в Philosophical Trans. 147 (1857), 489-499, Кейли (Cayley) показал, что лексикографическое условие А < рт является необходимым.] См. также алгоритм из упр. 7-108. 58. [Р. Ф. Мюрхед (R. F. Muirhead), Proc. Edinburgh Math. Soc. 21 (1903), 144-157.] Условие а > fi является необходимым, поскольку можно установить х\ = = Хк = х и :с&+1 = - - • = хп = 1 и при этом устремить х —> оо. Оно достаточное, поскольку мы должны доказать его, только когда а покрывает fi. Тогда, если, скажем, части (01,02) становятся (ai — 1,02 +1), левая часть равна правой части плюс неотрицательная величина 1 „Д2~Д2 am/_ai-a2-l _ _ai-a2-l\/_ __ \ 2m! ' 1 P1 Р2 ''' Pm ^P1 P2 i\xvi [Историческая справка. Статья Мюрхеда—наиболее раннее упоминание концепции, ныне известной как мажоризация; вскоре после него эквивалентное определение было дано М. О. Лоренцем (М. О. Lorenz), в Quarterly РиЫ. Amer. Stat. Assoc. 9 (1905), 209-219, где он интересовался исследованиями неравномерного распределения богатств. Еще одна эквивалентная концепция была сформулирована И. Шуром (I. Schur) в Sitzungsberichte Berliner Math. Gesellschaft 22 (1923), 9-20. Название “мажоризация” было введено Харди (Hardy), Литтлвудом (Littlewood) и Пойа (Polya), которые описали ее наиболее важные
840 ОТВЕТЫ К УПРАЖНЕНИЯМ 7.2.1.4 свойства в Messenger of Math. 58 (1929), 145-152; см. упр. 2.3.4.5-17. Полностью посвящена данной теме прекрасная книга А. У. Маршалла (A. W. Marshall) и И. Олкина (I. Olkin) Inequalities (Academic Press, 1979).] 59. Данной симметрией должны обладать единственные пути для п = 0, 1, 2, 3, 4 и 6. Имеется один такой путь для п = 5, а именно 11111, 2111, 221, 311, 32, 41, 5. Для п = 7 имеется четыре пути: 1111111, 211111, 22111, 2221, 322, 3211, 31111, 4111, 511, 421, 331, 43, 52, 61, 7; 1111111, 211111, 22111, 2221, 322, 421, 511, 4111, 31111, 3211, 331, 43, 52, 61, 7; 1111111, 211111, 31111, 22111, 2221, 322, 3211, 4111, 421, 331, 43, 52, 511, 61, 7; 1111111, 211111, 31111, 22111, 2221, 322, 421, 4111, 3211, 331, 43, 52, 511, 61, 7. Других путей нет, поскольку для всех п > 8 имеется как минимум два самосопряженных разбиения (см. упр. 15). 60. Вместо £(6,6) используйте (59); в противном случае везде используйте £'(4,6) и £'(3,5). В М(4,18), вставьте 444222, 4442211 между 443322 и 4432221. В Л/(5,11), вставьте 52211, 5222 между 62111 и 6221. В М(5, 20), вставьте 5542211, 554222 между 5552111 и 555221. В М(6,13), вставьте 72211, 7222 между 62221 и 6322. В £(4,14), вставьте 44222, 442211 между 43322 и 432221. В £(5,15), вставьте 542211, 54222 между 552111 и 55221. В £(7,12), вставьте 62211, 6222 между 72111 и 7221. 62. Утверждение выполняется при п = 7, 8 и 9 за исключением двух случаев: п = 8, тп = 3, а = 3221; п = 9, m = 4, а = 432. 64. Если п = 2кд, где q нечетно, обозначим через разбиение (2fc)’, т. е. q частей, равных 2к. Рекурсивное правило В{п) = В(п — 1)л1, 2 х В(п/2) при п > 0, где 2 х В(п/2) означает удвоение всех частей В(п/2) (или пустую последова- тельность, если п нечетно), определяет симпатичный путь Грея, начинающийся с u>n_il и заканчивающийся (в предположении, что В(0)—единственное разбиение 0). Таким образом, В(1) = 1; В(2) = 11,2; В(3) = 21,111; В(4) = 1111, 211,22,4. Среди множества замечательных свойств этой последовательности имеется следующее: при четном п В(п) = (2 х В(0))1п, (2 х В(1))1"-2, (2 х В(2))Г*~4, ..., (2 х В(п/2))1°; например, В(8) = 11111111, 2111111, 221111, 41111,4211, 22211,2222,422,44,8. Приведенный далее алгоритм без использования циклов генерирует В(п) для п > 2. К1. [Инициализация.] Установить со ч— ро ч— 0, р\ ч— 1. Если п четно, установить ci ч— п, t ч— 1; в противном случае пусть п — 1 = 2кд, где д нечетно, и установить ci ч— 1, сг ч— д, р2 Ч— 2к, t Ч— 2. К2. [Четное посещение.] Посетить разбиение .. -р^1- (Сейчас ct + • • • + ci четно.) КЗ. [Изменение наибольшей части.] Если ct = 1, разделить наибольшую часть: если pt 2pt-i, установить ct ч— 2, pt ч— pt/2, в противном случае установить ct-i ч—
7.2.1.4 ОТВЕТЫ К УПРАЖНЕНИЯМ 841 ct-i+2, t ч— t—1. Но если ct > 1, следует объединить две наибольшие части: если Ct = 2, установить Ct ч— 1, pt ч— 2pt, в противном случае установить ct ч— ct — 2, ct+i ч— 1, pt+i ч— 2pt, t ч— t + 1. К4. [Нечетное посещение.] Посетить разбиение р^‘ ... Pj1. (Сейчас ct 4-1- щ нечет- но.) Кб. [Изменение части, следующей за наибольшей.] Сейчас мы намерены применить следующее преобразование: “временно удалить ct — [t четно] наибольших частей, затем применить шаг КЗ, после чего восстановить удаленные части’.’ Говоря более точно, имеется девять ситуаций. (1,а) Если ct нечетно и t = 1, завершить работу алгоритма. (1,61) Если ct нечетно, ct-i = 1 и pt-i = 2pt-z, установить ct-г ч— ct-2 + 2, ct-i ч— ct, pt-i ч— pt, t ч— t — 1. (1,62) Если ct нечетно, ct-i = 1 и pt-i / 2pt-2, установить ct-i 4— 2, pt-i 4— pt-i/2. (1,в1) Если ct нечетно, ct~i = 2 и pt = 2p(-i, установить ct-i ч— ct + 1, pt-i 4— pt, t 4— t — 1. (1,в2) Если ct нечетно, ct-i = 2ир(/ 2pt-i, установить ct-i ч— 1, pt-i 4— 2pt-i- (l,rl) Если ct нечетно, ct-i > 2 и pt = 2pt-i, установить ct-i 4— ct-i — 2, ct 4— ct + 1. (1,г2) Если ct нечетно, ct-i > 2 и pt / 2pt-i, установить ct+i 4— ct, pt+i 4— p(, ct 4— 1, pt 4— 2pt-i, ct-i 4— ct-i — 2, t 4— t + 1. (2, а) Если ct четно и pt = 2pt-i, set ct 4— ct — 1, ct-i 4— ct-i + 2. (2,6) Если ct четно Hpt / 2pt-i, установить ct+i 4— ct — 1, pt+i 4— pt, ct 4— 2, pt 4— pt/2, t 4— t + 1. Вернуться к шагу K2. | [Преобразования на шагах КЗ и Кб аннулируют сами себя при повторном выполнении в строке. Эта конструкция разработана Т. Колтарстом (Т. Colthurst) и М. Клебером (М. Kleber) в “A Gray path on binary partitions” http://arxiv.org/abs/0907.3873. Эйлер рассматривал количество таких разбиений в §50 своей статьи в 1750 году.] 65. Если pj1 ... Ргг — разбиение т на простые множители, количество таких разложе- ний равно p(ei) .. .р(ег), и мы можем положить п = max(ei,... ,ег). В самом деле, для каждого r-кортежа (ri,..., хг), где 0 < Хк < р(е&), можно положить mj = р^1* • Prri, где Ofci.. .йкп представляет собой (rcfc + l)-e разбиение е&. Таким образом, можно использовать рефлексивный код Грея для r-кортежей совместно с кодом Грея для разбиений. 66. Пусть ai... От — m-кортеж, удовлетворяющий указанным неравенствам. Этот кор- теж можно отсортировать в невозрастающем порядке аХ1 > • • • > аХт, где перестановка xi... хт однозначно определяется при условии устойчивой сортировки; см. формулу 5-(2). Если j -< fc, имеем aj > йк, следовательно, j появляется слева от fc в перестановке xi ...хт. Таким образом, xi ...хт представляет собой одну из перестановок, получаю- щихся на выходе алгоритма 7.2.1.2V. Кроме того, j находится слева от fc и тогда, когда aj = ак и j < к, в соответствии со свойством устойчивости. Следовательно, aXi строго больше aa:i+1, когда х, > x,+i является “спуском’.’ Для генерации всех соответствующих разбиений п возьмем каждую из топологиче- ских перестановок xi... хт и сгенерируем разбиения yi... ут числа п — t, где t— индекс xi... хт (см. раздел 5.1.1). Для 1 < j < т установим aXj ч— yj + tj, где tj —количество спусков справа от г, в ...хт. Например, если х, ... хт = 314592687, и мы хотим сгенерировать все случаи, для которых аз > ai > at > аз > ад > аг > ав > as > аз. В этом случае < = 1 + 5 + 8 = 14, так что мы устанавливаем щ ч— уг + 2, аг ч— ув + 1, аз ч— yi + 3, at ч— у3 + 2, аз ч— yt + 2, Об ч— уз + 1, аз ч— уд, ав Ч- ув + 1 и ад ч— уз + 2. Обобщенная производящая функция 2i1 • • • 2д8 в смысле упр. 29 имеет вид 2 3 2 2 2 ________________________Z1Z2Z3Z4Z5Z6Z8Z9________________________ (1 — гз)(1 — Z3Z1)(1 — Z3ZlZt)(l — Z3Z1Z4Z5) ... (1 — Z3Z1 Z4Z5Z9Z2Z6Z8Z7)
842 ОТВЕТЫ К УПРАЖНЕНИЯМ 7.2.1.4 Когда любым данным частичным упорядочением является -<, обычная производящая функция для всех таких разбиений п имеет вид z,nd“/((l — z)(l — z2) ... (1 — zm)), где сумма берется по всем выходам а алгоритма 7.2.1.2V. [См. расширения и приложения этих идей в работе R. Р. Stanley, Memoirs Amer. Matb. Soc. 119 (1972). Информация о “холмистых” разбиениях имеется в L. Carlitz, Studies in Foundations and Combinatorics (New York: Academic Press, 1978), 101-129.] 67. Если n + 1 = qi ...qr, где все множители qi, ..., qr не меньше 2, мы получаем идеальное разбиение {(gi —1) • 1, (qz—1) • gi, (дз—1) • gig2, • • •, (qr—1) • gi • • • gr-i}, которое очевидным образом соответствует смешанной позиционной системе счисления (порядок множителей д, имеет значение). И наоборот, таким образом можно получить все идеальные разбиения. Предположим, что мультимножество М = {ki • pi,... ,кт Pm} является идеальным разбиением, причем pi < • • • < Рт, тогда должно выполняться условие pj = (ki+1) ... (kj-i+l) для 1 < j < т, поскольку pj представляет собой наименьшую сумму подмультимножества М, которое не является подмультимножеством {ki •pi,..., kj-i Pj-i}. Идеальное разбиение п с наименьшим числом элементов получается тогда и только тогда, когда все qj —простые, поскольку pg — 1 > (р— 1) + (g—1) для любых р > 1 и g > 1. Таким образом, например, минимальные идеальные разбиения 11 соответствуют упорядо- ченным разложениям 2-2-3, 2-3-2 и 3-2-2. Источник: Quarterly Journal of Mathematics 21 (1886), 367-373. 68. (а) Если а, +1 < Oj — 1 для некоторых i и j, можно заменить {а*, а,} на {а*+1, а,-—1}, увеличив таким образом произведение на а,- — а, — 1 > 0. Следовательно, оптимум дости- гается только при оптимально сбалансированном разбиении из упр. 3. [L. Oettinger and J. Derbfcs, Nouv. Ann. Math. 18 (1859), 442; 19 (1860), 117-118.] (б) Считаем, что n > 1. Тогда ни одна из частей не равна 1; и если Oj > 4, можно заменить эту часть на 2 + (а, —2) без уменьшения произведения. Таким образом, можно считать, что все части равны 2 или 3. Можно улучшить результат, заменяя 2 + 2 + 2 на 3 + 3, следовательно, в разложении имеется не более двух 2. Оптимум, таким образом, равен З"/3 при nmod3 = 0; 4 • 3<"-4)/3 = 3("-4)/3 • 2 • 2 --- (4/34/3)3"/3 при nmod3 = 1; 3(п-2)/з.2 = (2/32/3)3"/3 при nmod3 = 2. [О. Mei?ner, Mathematisch-naturwissenschaftliche Blatter 4 (1907), 85.] 69. Все п > 2 имеют решение (п, 2,1,..., 1). Можно “отсеять” прочие случаи < N, начиная с sz .. sn +- 1 • - -1 и устанавливая затем заь-ь +- 0 для всех ак — b < N, где а = xi... xt—1, b = xi-i l-xt—t— 1, к > Xi > • • • > xt и а > 1, поскольку k+xi Ч l-xt+(ak—b— t — 1) = kxi ...xt- Последовательность (xi,..., xt) должна рассматриваться, только когда (xi. ..xt — l)xi — (xi -I 1- xt) < N — t; можно также продолжать уменьшать N так, чтобы sn = 1. Таким образом, следует испытать только (32766,1486539, 254887,1511,937,478,4) последовательностей (xi,... ,xt) при начальном значении N, равном 230, и единственными “выжившими” останутся значения 2, 3, 4, 6, 24, 114, 174 и 444. [См. Е. Trost, Elemente der Math. 11 (1956), 135; M. Misiurewicz, Elemente der Math. 21 (1966), 90.] Примечания. Похоже, новых значений при N —> оо не появится, но для их исклю- чения требуется новая идея. Простейшие последовательности (xi,... ,xt) = (3) и (2,2) исключают все п > 5, для которых nmod6 0; этот факт можно использовать для ускорения вычислений в 6 раз. Последовательности (6) и (3,2) исключают 40% оставшихся значений (а именно все п вида 5k — 4 и 5k — 2); последовательности (8), (4,2) и (2,2,2) исключают 3/7 остатка; последовательности с t = 1 требуют, чтобы п — 1 было простым. Последовательности, в которых xi... xt = 2Г, исключают около р(г) вычетов п mod (2Г — 1). Последовательности, в которых xi... Xt представляет собой произведение г различных простых чисел, исключают около вычетов п mod (xi.. .xt — 1).
7.2.1.5 ОТВЕТЫ К УПРАЖНЕНИЯМ 843 70. На каждом шаге одно разбиение п превращается в другое, так что в конечном счете мы должны достичь повторяющегося цикла. У многих разбиений просто выполняется цик- лический сдвиг по диагоналям, идущим сверху справа вниз влево на диаграмме Феррерса, превращая ее из Х1 Х2 Тд Х7 Ill £16 . . . Х1 ХЗ Хв Хю Хю Х21 Хз Хз Хв Х12 £17 Г 23 • Х2 Х7 Хц Х1В Х22 Хв Хд Х13 Х18 Т24 ГС31 • - • х5 Х8 Х12 Х17 Х23 Хзо Х10 *Г14 X1S Х25 ^32 ТДО • - • в Xs Х13 SC18 Х24 Х31 X3S Хц Х20 Х26 хзз Г41 ГС50 • - • Х14 Xis Х25 Х32 Х40 X4S Х21 Х27 Х34 Х42 Т51 ХВ1... Х20 Х26 Хзз Х41 Хзо ХвО Другими словами, к ячейкам применяется перестановка р = (1)(2 3)(456)(78910) .... Ис- ключения возникают только тогда, когда р попадает на пустую ячейку над точкой; напри- мер, тю может быть пустой, а 1ц —нет. Однако в таких случаях можно получить коррект- ную новую диаграмму, перемещая верхнюю строку вниз и вставляя ее путем сортировки в правильное место после применения р. Такое перемещение всегда снижает количество занятых диагоналей, так что оно не может быть частью цикла. Таким образом, каждый цикл состоит только из перестановок р. Если некоторый элемент на диагонали в циклическом разбиении пуст, то и все эле- менты следующей диагонали должны быть пусты. Если, скажем, х$ пуст, повторное применение р сделает х$ соседним с каждой из ячеек х7, хв, xs, хю следующей диагонали. Следовательно, если п = ("2) + ("*) при пг > ni > 0, циклические состояния те же, что и при П2 — 1 полностью заполненных диагоналях и ni точках в следующей. [Этот результат получен Ю. Брандтом (J. Brandt), Proc. Amer. Math. Soc. 85 (1982), 483-486. По утверждениям задача пришла из России через Болгарию и Швецию. См. также Martin Gardner, The Last Recreations (1997), Chapter 2.] 71. Когда n = H---Hn > 1, начальное разбиение (тп—l)(m—l)(m—2) ... 211 находится на расстоянии m(m — 1) от циклического состояния, и это расстояние максимально. [К. Igusa, Math. Magazine 58 (1985), 259-271; G. Etienne, J. Combin. Theory A58 (1991), 181-197.] Григгс (Griggs) и Xo (Ho) [Advances in Appl. Math. 21 (1998), 205-227] предположили, что в общем случае максимальное расстояние до цикла равно max(2n+2 — П1(п2 + 1),п+п2 + 1, П1(п2 + 1)) —2пг для всех п > 1; их гипотеза проверена для п < 100. Кроме того, наихудшее разбиение, похоже, единственное при пг = 2ni + {-1,0,2}. 72. Эквивалентно утверждению ai < т — 1 [В. Hopkins and J. A. Sellers, Integers 7,2 (2007), #А19]. 73. (a) [P. Стенли (R. Stanley), 1972 (неопубликовано).] Обменяем j-e появление к в раз- биении п = j • к + а с к-м появлением j в к - j + а для каждого разбиения а числа п — jk. Например, при п = 6 обмены представляют собой 6, 51, 42, 411, 33, 321, 3111, 222, 2211, 21111, 111111. а Ъ1 fg cig hi jkl dlkh n2i m21n elmjf ledcba (6) p(n-k) + p(n—2k) + p(n—3k) + • • •. [A. H. M. Hoare, AMM 93 (1986), 475-476.] РАЗДЕЛ 7.2.1.5 1. Всякий раз, когда т устанавливается равным г на шаге Н6, следует заменить его значение на г — 1. 2. L1. [Инициализация.] Установить lj Ч— j — 1 и aj ч— 0 для 1 < j < п. Установить также hi ч— п, t ч— 1 и установить Zo равным любому устраивающему ненулевому значению.
844 ОТВЕТЫ К УПРАЖНЕНИЯМ 7.2.1.5 L2. [Посещение.] Посетить t-блочное разбиение, представленное h ... 1п и hi ... ht. (Ограниченно растущая строка, соответствующая этому разбиению, — ai.. .ап.) L3. [Поиск /.] Установить j ч— п; затем, пока lj = 0, устанавливать j ч— j — 1 и t ч— t — 1. L4. [Перемещение j в следующий блок.] Завершить работу алгоритма, если j = 0. В противном случае установить к ч— aj + 1, hk ч— lj, aj ч— к. Если к = t, установить t ч— t +1 и lj ч— 0; в противном случае установить lj ч— hk+i Наконец установить hk+i ч— j. L5. [Перемещение j +1, ..., п в блок 1.] Пока j < п, устанавливать j ч— j +1, lj ч— hi, aj ч— 0 и hi ч— j. Вернуться к шагу L2. | 3. Пусть т(к,п) — количество строк щ ...ап, удовлетворяющих условию 0 < а, < 1 + max(fc—l,ai,...,а>-1) для 1 < j < п; так, r(fc,0) = 1, т(0,п) = wn и т(к,п) = кт(к,п — 1) + т(к + 1,п — 1). [С. Д. Вильямсон (S. G. Williamson) назвал т(к, п) “хвостовым коэф- фициентом” (tail coefficient); см. SICOMP 5 (1976), 602-617.] Количество строк, которые генерируются алгоритмом Н перед заданной ограниченно растущей строкой ai.. .ап, равно 52"=i o,jT(bj,n — j), где bj = 1 + max(ai,... ,aj~i). Выполняя расчеты с помощью предвы- численной таблицы хвостовых коэффициентов, находим, что приведенная формула дает 999999 при ai... ai2 = 010220345041. 4. Ниже приведены наиболее распространенные представители каждого типа (индекс указывает количество таких слов в GraphBase): zzzzzo, ooooho, xxxixo, xxxiio, ooops0, Hullo, llalao, eelero, iittio, xxiiio, ccxxvo, eeriei, llamai, xxviio, oozedg, uhuuuo, mammai, РиРРУ28> апгтао, heheeo, vividis, гагегз, etexti, атаввг, again 137, ahhaao, essesi, teeth2s, yaaay0, ahhhh2, pssst2, seems?, addedg, Ixxiio, books184, swissa, senseio, endeds, checkieo, levelie, tepee4, slyly5, never 154, sellse, mottO2i, иЬооог, trees384, going307, whichisi, there 174, threeioo, their3834. (Cm. S. Golomb, Math. Mag. 53 (1980), 219-221. Сло- ва только с двумя различными буквами, разумеется, редки. Восемнадцать представителей, приведенных здесь с индексом 0, можно найти в больших словарях или на англоязычных страницах в Интернете.) 5. (а) 112 = р(0225). Это последовательность г(0), г(1), г(4), г(9), г(16), ..., где г(п) получается путем записи п в виде десятичного числа (с одним или несколькими ведущими нулями), применения функции р из упр. 4 и последующего удаления ведущих нулей. Обратите внимание, что п/9 < г(п) < п. (б) 1012 = г(452). Последовательность та же, что и в п. (а), но отсортированная и с удаленными дубликатами. (Кто же думал, что 882 = 7744, 2122 = 44944, а 2642 = 69696?) 6. Воспользуемся подходом с применением топологической сортировки из алгоритма 7.2.1.2V с соответствующим частичным упорядочением: включаем Cj цепочек длиной j с упорядоченными наименьшими элементами. Например, если п = 20, сг = 3 и сз = С4 = 2, мы используем упомянутый алгоритм для поиска всех перестановок ai... аго множества {1,..., 20}, таких, что 1-<2, 3 -< 4, 5-<6, 1 -< 3 -< 5, 7 -< 8 -< 9, 10 -< 11 -< 12, 7 -< 10, 13 -< 14 -< 15 -< 16, 17 -< 18 -< 19 -< 20, 13 -< 17, образуя ограниченно растущие строки p(/(ai) ... /(аго)), где функция р определена в упр. 4, а (/(1),..., /(20)) = (1,1,2,2,3,3,4,4,4,5,5,5,6,6,6,6, 7,7, 7,7). Общее количество выходных данных, конечно же, определяется формулой (48). 7. Ровно w„. Это перестановки, которые получаются путем обращения порядка блоков слева направо в (2) и опускания символов 1234, 4123, 3124, 3412, ..., 4321. [См. A. Claesson, European J. Combinatorics 22 (2001), 961-971. С. В. Китаев в своей работе Discrete Math. 298 (2005), 212-229, открыл далеко идущее обобщение. Пусть тг — переста- новка {0,..., г}, дп — количество перестановок щ.. .ап множества {1,..., п}, таких, что из
7.2.1.5 ОТВЕТЫ К УПРАЖНЕНИЯМ 845 flfe-oir > o,k-iir > • > dk-rn > aj вытекает j > к, и пусть fn — количество перестановок ai ...ап, для которых шаблон ak-oir > ot-iir > ••• > ak-m полностью отсутствует при г <к<п. Тогда £„>0 P«zn/n! = ехр(£п>1 А-1 z7n!).] 8. Для каждого разбиения множества {1,..., п} на тп блоков расположим блоки в поряд- ке убывания их наименьших элементов и будем переставлять все элементы блоков, кроме наименьших, всеми возможными способами. Например, при п = 9 и тп = 3 разбиение 126|38|4579 дает нам 457938126 и одиннадцать прочих случаев, полученных из данного путем перестановок множеств {5,7,9} и {2,6} в рамках этих множеств. (По сути, тот же метод генерирует все перестановки, имеющие ровно к циклов; см. подраздел “Замечатель- ное соответствие” в разделе 1.3.3.) 9. Среди перестановок мультимножества {/со • 0, fci • 1,..., fcn-i (n—1)} ограниченным ростом обладают ровно (ко + fci Ч-1- fcn-i)________ко_______________fci______ fcn-i ко, ki, kn-i J (fc0 4- fci 4--1- fcn-i) (fci 4-1- fcn-i) fcn-i из них, поскольку kj/(kj Ч--1- fcn-i) представляет собой вероятность того, что j предше- ствует значениям {j Ч-1, ..., п — 1}. Среднее количество нулей при п > 0 равно 1 Ч- (я — l)wn-i/wn = ©(log ri), поскольку общее количество нулей во всех С7„ случаях равно ^(k-i)Wn-fc ~ Ч- (n — l)wn-i. 10. Для данного разбиения множества {1, ...,п} построим ориентированное дерево на множестве {0,1,..., п} так, чтобы j — 1 являлся родительским узлом по отношению ко всем членам блока, наименьший член которого—j. Затем пометим листья, сохраняя порядок, и удалим остальные метки. Например, 15 разбиений в (2) соответствуют следующим деревьям. 1234 12 123 23 If 123 J I2 12 Л | 2 2 1 1 12 • Чтобы обратить процесс, возьмем полупомеченное дерево и присвоим новые номера его узлам, рассматривая сначала узлы, встречающиеся на пути от корня к наименьшему листу, затем ко второму по величине листу и т. д. Количество листьев равно п Ч- 1 минус количество блоков. [Эта конструкция тесно связана с упр. 2.3.4.4-18 и многими перечислениями в соответствующем разделе. См. Р. L. Erdos and L. A. Szekely, Advances in Applied Math. 10 (1989), 488-496.] 11. Чистые буквометики получаются в 900 из 64 855 разбиений множества не более чем на 10 блоков, для которых p(ai... Ц1з) = р(дб • • • а&ат... аьад О1з), и в 563 527 из 13 788 536 разбиений, для которых р(аг...агз) < p(as .. ,a&ai.. .алад .. .агз). Примерами первого типа являются аааа Ч- аааа = Ъааас, аааа Ч- аааа = ЬЪЬЪс и аааа Ч- aaab = Ьааас; примерами последнего типа— abed Ч- efgd = deeab (goat 4- newt = tango) и abed 4- efgd = deeaf (clad4-nerd = dance). [Идея применения генератора разбиений для решения буквометиков принадлежит Алану Сатклиффу (Alan Sutcliffe).] 12. (а) Строим р((а1а'1) ... (апа{,)), где р определено в упр. 4, поскольку х = у (по модулю П V П') тогда и только тогда, когда х = у (по модулю П) и х = у (по модулю П'). (б) Представим П с помощью связей, как это было сделано в упр. 2; П' представим, как в алгоритме 2.3.3Е, и используем этот алгоритм для того, чтобы сделать j = lj при lj0 (для повышения эффективности можно считать, что П имеет как минимум столько же блоков, сколько и П'.) (в) Когда один блок П разбивается на две части, т. е. когда два блока П' были слиты. (г) (‘); (д) (г’1-1-1)+ - +(2,,‘~1-1).
846 ОТВЕТЫ К УПРАЖНЕНИЯМ 7.2.1.5 (е) Истинно. Пусть П V П' содержит блоки В1|Вг| • • • |Bt, где П = В1Вг|Вз| • • |В«. Тогда П', по сути, является разбиением множества {Bi,...,Bt} таким, что Bi Вг, а П/\П' получается путем слияния блока П', содержащего Bi, с блоком, содержащим Вг. [Конечная решетка, удовлетворяющая этому условию, называется нижней полумодуляр- ной (lower semimodular); см. G. Birkhoff, Lattice Theory (1940), §1.8. Решетка мажоризации из упр. 7.2.1.4-54 этим свойством не обладает; например, а — 4111, а а' = 331.] (ж) Ложно. Пусть, например, П = ООП, П' = 0101. (з) Блоки П и П' представляют собой объединения блоков П V П', так что можно считать, что ПУП' = {1,..., t}. Как и в п. (б), объединим j с lj для получения за г шагов П, имеющего t — г блоков. Будучи примененными к П', каждое из этих объединений снижает количество блоков на 0 или 1. Следовательно, Ь(П') — Ь(П Л П') <г = Ь(П V П') — Ь(П). [В Algebra Universalis 10 (1980), 74-95, П. Пудлак (Р. PudlAk) и И. Тума (J. Tuma) доказали, что каждая конечная решетка является подрешеткой решетки разбиений мно- жества {1,... ,п} для соответствующего большого значения п.] 13. [См. Advances in Math. 26 (1977), 290-305.] Если j наибольших элементов t-блочного разбиения находятся в отдельных блоках, состоящих из одного элемента, а следующие n — j элементов—нет, то будем говорить, что разбиение имеет порядок t — j. Определим “строку Стирлинга” Ent как последовательность порядков t-блочных разбиений П1, П2, ...; например, £43 = 122333. Тогда Utt = 0, и мы получаем £(„+i)< из Unt путем замены каждой цифры d строкой dd(d+l)d+1.. .t* длиной (*^1) — (d); например, £зз = 1223332233322333333333333. Основная идея состоит в рассмотрении процесса лексикографической генерации алго- ритма Н. Предположим, что П = <ц ... ап представляет собой t-блочное разбиение поряд- ка тогда оно является лексикографически наименьшим t-блочным разбиением, ограни- ченно растущая строка которого начинается с ai.. ,an-t+j. Разбиениями, покрываемыми разбиением 77, являются (в лексикографическом порядке) 7712 , 771з, 77гз, 7714 , 77г4, П34, ..., 77(t_i)t, где Пгз означает “объединение блоков г и s разбиения 77” (т. е. “замена всех появлений s—1 на г—1 с последующим применением функции р для получения ограниченно растущей строки”). Если 77' представляет собой одно из последних Q) — (2) из указанных разбиений от 77i(j+i) и далее, то 77—наименьшее t-блочное разбиение, за которым следует 77'. Например, если 77 = 001012034, то п = 9, t = 5, j = 3, а соответствующие разбиения 77' представляют собой р(001012004), р(001012014), р(001012024), р(001012030), р(001012031), р(001012032), р(001012033). Следовательно, fnt(N) = fnt(N - 1) + Q) - (J), где j — N-я цифра Unt. 14. El. [Инициализация.] Установить aj ч— 0 и bj ч— dj ч— 1 для 1 < j < n. Е2. [Посещение.] Посетить ограниченно растущую строку ai... ап. ЕЗ. [Поиск J.] Установить j ч— п; затем, пока aj = dj, устанавливать dj Ч— 1 — dj и j ч- j - 1. Е4. [Выполнено?] Завершить работу алгоритма, если j = 1. В противном случае перейти к шагу Е6, если dj = 0. Е5. [Перемещение вниз.] Если aj = 0, установить aj ч— bj, т ч— aj + 1 и перейти к шагу Е7. В противном случае при aj = bj установить aj ч— bj — 1, т ч— bj и перейти к шагу Е7. В противном случае установить aj ч— aj — 1 и вернуться к шагу Е2. Е6. [Перемещение вверх.] Если aj = bj — 1, установить aj Ч— bj, т Ч— aj + 1, и перейти к шагу Е7. В противном случае при aj = bj установить aj ч— 0, тп ч— bj и перейти к шагу Е7. В противном случае установить aj ч— aj + 1 и вернуться к шагу Е2.
7.2.1.5 ОТВЕТЫ К УПРАЖНЕНИЯМ 847 Е7. [Коррекция bj+i.. - Ьп-] Установить bk ч— т для к = j + 1, ..., п. Вернуться к шагу Е2. | [Этот алгоритм можно существенно оптимизировать, поскольку, как и в алгоритме Н, j почти всегда равно п.] 15. Это разбиение соответствует первым п цифрам бесконечной бинарной строки 01011011011..., поскольку tUn-i четно тогда и только тогда, когда nmod3 = 0 (см. упр. 23). 16. 00012, 01012, 01112, 00112, 00102, 01102, 01002, 01202, 01212, 01222, 01022, 01122, 00122, 00121, 01121, 01021, 01221, 01211, 01201, 01200, 01210, 01220, 01020, 01120, 00120. 17. В приведенном решении используются две взаимно рекурсивные процедуры, /(д, р, ст) и Ь(д, р, ст), для “прямой” и “обратной” генераций при ст = 0 и А'^ при ст = 1. Для начала процесса в предположении 1 < т < п сначала нужно установить aj ч— 0 для 1<)<п-ти an-m+j ч— j — 1 для 1 < j < т, а затем вызвать f(m, п, 0). Процедура /(д, р, ст). Если д = 2, посетить ai...a„; в противном случае вызвать /(д — 1, и — 1, (д+ст) mod 2). Затем, если и = д + 1, выполнить следующее: изменить ам с 0 на д— 1 и посетить ai... ап; затем установить а„ ч— а„ — 1 и посетить ai... ап, выполняя эти действия до тех пор, пока не будет выполнено условие а» = 0. Но если и > д + 1, изменить av-i (если д+ст нечетно) или ам (если д+ст четно) с 0 на д — 1; затем вызвать Ь(д, v—1,0), если а„+ст нечетно, /(д, и—1,0), если а„ +ст четно; и пока а„ > 0, устанавливать аи ч— а„ — 1 и вызывать Ь(д, и—1,0) или /(д, v—1,0), как описано выше, повторяя эти действия до тех пор, пока не будет выполнено условие а» = 0. Процедура Ь(д, м, ст). Если и = д+1, сначала выполнить следующее: посетить ai... ап и установить а„ ч— av + 1, повторяя эти действия до тех пор, пока не будет выполнено условие а„ = д — 1; затем посетить ai.. .ап и изменить ам с д — 1 на 0. Но если и > д + 1, вызвать /(д, и—1,0), если а„ + ст нечетно, или Ь(д, и—1,0), если а„ + ст четно; затем, пока а„ < д — 1, устанавливать а» ч— av + 1 и вызывать /(д, р—1,0) или Ь(д, и—1,0), как описано выше, повторяя эти действия до тех пор, пока не будет выполнено условие а„ = д — 1; наконец изменить av-i (если д+ст нечетно) или ам (если д+ст четно) с д — 1 на 0. В конце в обоих случаях, если д = 2, посетить ai... ап, в противном случае вызвать Ь(д — 1, р — 1, (д+ст) mod 2). Большая часть времени тратится на обработку случая д = 2; в этом случае можно применить более быстрые подпрограммы, основанные на бинарном коде Грея (и отлича- ющиеся от последовательностей Раски). Более эффективная процедура может использо- ваться и при д = р — 1. 18. Соответствующая последовательность должна начинаться (или заканчиваться) эле- ментом 01... (п—1). В соответствии с упр. 32 указанный код Грея не существует, если 0 <5П (i)0+1+'"+<n-1)j т. е. когда п mod 12 равно 4, 6, 7 или 9. Случаи п = 1, 2, 3 легко разрешимы; при п = 5 имеется 1927 683 326 решений. Таким образом, вероятно, имеется несметное количество решений при всех п > 8, за исключением указанных выше значений п. На самом деле, вероятно, можно найти такой путь Грея по всем рассматриваемым в ответе к упр. 28, (д) строкам, за исключением случаев п = 2к + (2,4,5,7) (по модулю 1)2. Примечание. Обобщенное число Стирлинга {^}_х из упр. 30 больше 1 при 2 < т < п, так что такого кода Грея для разбиений множества{1,..., п} на т блоков может не быть. 19. (а) Необходимо заменить (6) шаблоном 0, 2, ..., т, ..., 3, 1 или обратным к нему, как в случае чун-упорядоченной (endo-order) последовательности (7.2.1.3-(45)). (б) Можно обобщить (8) и (9) для получения последовательностей Атпа и А'тпа, кото- рые начинаются с 0n-m01... (т— 1) и заканчиваются 01... (гп—1)а и 0n_m_101... (т—1)а
848 ОТВЕТЫ К УПРАЖНЕНИЯМ 7.2.1.5 соответственно, где 0 < а < т—2, а а—любая строка ai .. .ап-т, такая, что 0 < а,- < т—2. При 2 < т < п новые рекурсивные соотношения выглядят следующим образом: {^(тп—• • • , АтппаХгп, еСЛИ ТП ЧвТНО, .1 л лН л t АтппаЯ'1‘> ^mna^2j ♦ ♦ • , ^mna^tn) ССЛИ 771 НСЧвТНОJ , _ ( А(т-1)тЛ^1 > , Л£П/3ГС2,..., А^п/Зхт, если тп четно; ^m(n+l)a — ] о р I Лт-1)П(ЬД)Ж1> Ann/jZi, Апп/з^г,..., Атп/Зхт, если т нечетно. Здесь b = т — 3, fl = bn т, a (xi,... ,хт) — путь от xi = т — 1 до хт = а. 20. 012323212122; в общем случае (ai ...ап)Т = р(ап ai) при использовании обозначе- ний из упр. 4. 21. Числа (so, si,S2,...) = (1,1,2,3,7,12,31,59,164,339,999,...) удовлетворяют рекур- рентным Соотношениям S2n+1 — (^)s2n-2fc, S2n+2 = C)(2fc + l)S2n-2k из-за связи средних элементов с другими. Поэтому згп = n! [z"] exp((e2z — 1)/2 + е2 — 1) и S2n+i = n! [z"] ехр((е22 — 1)/2 + е2 +z — 1). Рассматривая разбиения множества в первой половине, мы также имеем s2n = и «2п-н = гДе xn = 2xn-i + (n - l)rrn-2 = n! [z"] exp(2z+z2/2). [T. С. Моцкин (T. S. Motzkin) рассматривал последовательность (згп) в Proc. Symp. Pure Matb. 19 (1971), 173.] 22. (a) fc" Pr(X = fc) = e-1 кп/к\ = гпп в соответствии с (16). (б) 52^=0 кпРг(Х = к) = (fc)(-1)J_fc/j'!; внутреннюю сумму можно расширить до j = ос, поскольку (0(-l)fcfcn = 0 при j > п. Таким образом, получаем 52^L0(fc"/fc!) 52^О(~ 1)*/^ = П7"- [См. J. О. Irwin, J. Royal Stat. Soc. A118 (1955), 389-404; J. Pitman, AMM 104 (1997), 201-209.] 23. (а) В соответствии с (14) формула справедлива для f(x) = хп, так что она выполня- ется и в общем случае. (С учетом (16) мы также получаем f(k)/kl = efftu).) (б) Предположим, что мы доказали данное отношение для fc, и пусть h(x) = (х — l)-f(x), д(х) = f(x + 1). Тогда /(гп + fc + 1) = р(гп + fc) = гп-д(гп) = /г(гп + 1) = ги/г(гп) = гг7— [См. J. Touchard, Ann. Soc. Sci. Bruxelles 53 (1933), 21-31. Такое символьное “теневое исчисление” разработанное Джоном Блиссардом (John Blissard) в Quart. J. Риге and Applied Matb. 4 (1861), 279-305, оказывается весьма полезным; однако пользоваться им следует с осторожностью, поскольку из /(гп) = д(гп) не следует, что /(гп)/г(гп) = р(гп)/1(гп).] (в) Указание представляет собой частный случай упр. 4.6.2-16(с). Применение f(x) = хп и к = р в (б) приводит к гпп = гпР+„ — гпц_„. (г) Полином xN — 1 делится на д(х) = хр — х — 1 по модулю р, поскольку хр = х + к и xN = хр = х- = хр — х = 1 (по модулю д(х) и р). Таким образом, если h(x) = (xN — 1)хп/д(х), то мы получаем /г(гп) = Л(гп + р) = гп-/г(гп) = (гпр — гп)/г(гп); и 0 = д(ги)/г(ги) = znN+" — гп" (по модулю р). 24. Указание следует из индукции по е, поскольку х— = — ^Ре 1)Е'—• Можно также доказать по индукции по п, что из хп = гп(х) (по модулю gi(x) и р) вытекает zpe 1" = г„(х)р‘ 1 (по модулю де(х), рде-1(х), ..., pe~1gi(x) и ре). Следовательно, хр* 'N = 1 + ho(x)ge(x) + phi(x)ge-i(x) -I-+ ре~гhe-i(x)gi(x) +pehe(x) для некоторых полиномов hk(x) с целыми коэффициентами. Мы имеем ho(w)rn" = /го(гп+ ре)(гп + ре)п = гп—/го(гп)гп" = (ре(гп) + l)/io(^)^" по модулю ре; следовательно, гпр N+n = гп" +/1о(^)9е(гп)гп"+р/11(гп)де-1(гп)гп" + • • • = гп".
7.2.1.5 ОТВЕТЫ К УПРАЖНЕНИЯМ 849 [Аналогичный вывод применим и тогда, когда р = 2, но при этом следует положить gj+i(x) = gj(x)2+2[j = 2], и мы получим = w„+3.2e (по модулю 2е). Эти результаты по- лучены Маршаллом Холлом (Marshall Hall); см. Bull. Amer. Math. Soc. 40 (1934), 387; Amer. J. Math. 70 (1948), 387-388. Дополнительную информацию можно найти в W. F. Lunnon, Р. А. В. Pleasants, and N. М. Stephens, Acta Arith. 35 (1979), 1-16.] 25. Первое неравенство следует из применения к дереву ограниченно растущих строк бо- лее общего принципа: в любом дереве, для всех некорневых узлов р которого выполняется условие deg(p) > deg (parent (р)), имеем wk/wk_i < Wfc+i/wfc, где wk—общее количество узлов на уровне fc. Если т = wk~i узлов на уровне fc — 1 имеют соответственно ai, ..., ат дочерних узлов, то они имеют как минимум aj Ч— • + а^, “внучатых” узлов; следовательно, wk-iwk+1 > m(al -I---h a„) > (<h -I--1- ат)2 — wk. Рассматривая второе неравенство, заметим, что wn+i — = 52Г=о((л) ~ (Z— i))c*7n fc’ таким образом, поскольку, например, шп-з/ш„ = (ш„-з/ш„-2)(шп-2/шп-1)(ш„_1/ш„) меньше или равно (ГОп-4/ш„-з)(ш„-з/ш„-2)(!и„-2/го„-1) = Wn— 4/Wn— 1- 26. Имеется ("Zj) направленных вправо путей от @) до (tt); можно представить их стро- ками из нулей и единиц, где 0 означает “вправо” 1 — “вверх” а позиции единиц говорят нам, какие п—t элементов находятся в блоке с единицей. Следующий шаг при t > 1 представляет собой дальний переход влево; так что мы можем продолжить путь, который определяет разбиение оставшихся t — 1 элементов. Например, разбиение 14|2|3 соответствует при использовании данных соглашений пути 0010, где соответствующие биты означают, что 1 2, 1 3, 1 = 4, 2 3. [Возможны и многие другие интерпретации. Предложенное здесь соглашение показывает, что тпк подсчитывает разбиения с 1 2, ..., 1 fc— комбинаторное свойство, открытое Г. В. Беккером (Н. W. Becker); см. АММ 51 (1944), 47, и Mathematics Magazine 22 (1948), 23-26.] 27. (а) В общем случае Ло = Ai = Агп-i = Агп = 0. В приведенном далее списке показаны также ограниченно растущие строки, соответствующие каждому циклу при использовании алгоритма из п. (б). 0,0,0,0,0,0,0,0,0 0123 0,0,0,0,0,0,1,0,0 0122 0,0,0,0,1,0,0,0,0 0112 0,0,0,0,1,0,1,0,0 0111 0,0,0,0,1,1,1,0,0 0121 0,0,1,0,0,0,0,0,0 0012 0,0,1,0,0,0,1,0,0 ООП 0,0,1,0,1,0,0,0,0 0001 0,0,1,0,1,0,1,0,0 0000 0,0,1,0,1,1,1,0,0 0010 0,0,1,1,1,0,0,0,0 0102 0,0,1,1,1,0,1,0,0 0100 0,0,1,1,1,1,1,0,0 0120 0,0,1,1,11,1,1,0,0 0101 0,0,1,1,2,1,1,0,0 ОНО (б) Название “диаграмма” вызвано связью с разделом 5.1.4 и разработанной в нем теорией, приводящей к интересному взаимно однозначному соответствию. Можно пред- ставить разбиения множества на треугольной шахматной доске, помещая ладью в столбец lj строки n+1—у, если lj 0 в представ- лении со связанным списком из упр. 2 (см. ответ к упр. 5.1.3-19). Например, на приведенном рисунке показано ладейное представле- ние 135|27|489|6. Ненулевые связи могут также быть эквивалентно определены с помощью двустрочных массивов наподобие (375g!); см. 5.1.4-(11). Рассмотрим путь длиной 2п, который начинается в нижнем левом углу этой треугольной диаграммы и следует по ребрам пра- вой границы, заканчиваясь в верхнем правом углу. Точками этого
850 ОТВЕТЫ К УПРАЖНЕНИЯМ 7.2.1.5 пути являются г*, = ([fc/2], [fc/2]) для 0 < к < 2п. Более того, прямоугольник вверху и слева от zk содержит те ладьи, которые добавляют пары координат ) в двустрочный массив, при этом i < [fc/2j и j > [fc/2]; в нашем примере для 9 < к < 12 имеется ровно две такие ладьи, а именно (yg)- Теорема 5.1.4А гласит, что такие двустрочные массивы эквивалентны диаграмме (Pk,Qk), в которой элементы Рк берутся из нижней строки, а элементы Qk — из верхней, причем и Рк, и Qk имеют одну и ту же форму. В диаграмме Р выгодно использовать элементы в порядке уменьшения, а в Q — в порядке увеличения, так что в нашем примере они представляют собой следующее. fc Рк Qk fc Рк Qk fc Рк Qk 2 Е ш 7 I 05] 1 [2]3] 12 Е а 3 Е ш 8 ГёТб] I щ [2ТЗ] 3J 13 Е и 4 5 0 ffl Е 9 10 S 1 Е 1 14 15 Е и 6 [7]5] [2]3] 111 S 1 16 Е Е Рк и Qk пустые при fc = 0, 1, 17 и 18. Таким способом каждое разбиение множества приводит к циклу колеблющейся диа- граммы Ао, Ai, ..., Агп, если положить, что А* — разбиение целого числа, определяющее общую форму Pk и Qk- (В нашем примере это цикл 0, 0, 1, 1, 11, 1, 2, 2, 21, 11, 11, 11, 11, 1, 1, 0, 1, 0, 0.) Кроме того, tik-i = 0 тогда и только тогда, когда строка п + 1 — к не содержит ни одной ладьи, тогда и только тогда, когда fc—наименьшее значение в своем блоке. И обратно: элементы Рк и Qk могут быть однозначно восстановлены из последо- вательности форм Xk- А именно Qk — Qk-i если tk = 0. В противном случае при fc четном Qk представляет собой Qk-i с числом fc/2, помещенным в новую ячейку справа в строке th', при fc нечетном Qk получается из Qk-i с использованием алгоритма 5.1.4D для удаления крайнего справа элемента строки tk- Аналогичная процедура определяет Pk на основе значений Рк+i и tk+i, так что можно работать в обратном направлении, от Р?п к Ро- Таким образом, последовательности форм А*, достаточно для того, чтобы указать, где именно следует размещать ладьи. Циклы колеблющихся диаграмм были разработаны в статье W. Y. С. Chen, Е. Y. Р. Deng, R. R. X. Du, R. Р. Stanley, and С. H. Yan [Transactions of the Amer. Math. Soc. 359 (2007), 1555-1575], в которой было показано, что эта конструкция приводит к важным (и удивительным) следствиям. Например, если разбиение множества П соответствует циклу колеблющейся диаграммы Ао, Ai, ..., Агп, назовем дуальным к нему разбиение П13, которое соответствует последовательности транспонированных форм Aq , Xf, ..., Xjn- Тогда в соответствии с упр. 5.1.4-7 77 содержит “fc-пересечение в I" т. е. последовательность индексов такую, что ii < • • • < г* < I < ji < •• < jk и zi = ji, ..., г* = jk (по модулю ГГ), тогда и только тогда, когда П° содержит “fc-вложение в Г’ которое представляет собой последовательность индексов, такую, что i'i < < i'k < I < j'k < < ji и i'i = j{, ..., i'k - j'k (по модулю 77°). Заметим также, что инволюция, по сути, представляет собой разбиение множества, в котором все блоки имеют размер 1 или 2; дуальной к инволюции является инволюция, имеющая те же множества с одним элементом. В частности, ду-
7.2.1.5 ОТВЕТЫ К УПРАЖНЕНИЯМ 851 альным совершенному паросочетанию (когда отсутствуют множества с одним элементом) является совершенное паросочетание. Кроме того, аналогичная конструкция применима для размещения ладей в любой диаграмме Феррерса, а не только в диаграмме ступенчатой формы, соответствующей разбиениям множества. Для заданной диаграммы Феррерса, которая имеет не более тп частей, ни одна из которых не превышает п, мы просто рассматриваем путь zq = (0,0), zi, ..., Zm+n = (п, т), который идет по правому ребру диаграммы и обусловливает, что Afc = Afe_i+et)1 при Zk = Zfc~i + (l,0) иА* = Xk-i — etfc при zk = Zk-i + (0,1). Доказательство, приведенное для ступенчатых диаграмм, показывает также, что любое размещение ладей на диаграмме Феррерса, когда в каждой строке и каждом столбце имеется не более одной ладьи, соответствует единственному такого рода циклу диаграммы. [Истинно между тем гораздо большее! См. A. Berele, J. Combinatorial Theory А43 (1986), 320-328; S. Fomin, J. Combinatorial Theory A 72 (1995), 277-292; M. vanLeeuwen, Electronic J. Combinatorics 3,2 (1996), paper #R15.] 28. (а) Определим взаимно однозначное соответствие между расстановкой ладей путем обмена позиций ладей в строках j и j +1 тогда и только тогда, когда в выступающей части более длинной строки имеется ладья: (б) Если выполнить транспонирование всех ладей, это соотношение становится оче- видным из определения полинома. (в) Предположим, что ai > аг > • • • и а* > ац-ц. Тогда T?(ai,a2, • • •) = xR(ai-1,... ,afc_i-l, afc+1,...) + yR(ai,... ,ак-г, ак-1,ак+1,...) поскольку первый член учитывает случаи, когда ладья находится в строке к и столбце ак. Кроме того, исходя из расстановки пустых элементов, i?(0) = 1. Далее из этих рекуррент- ных соотношений находим Д(1) = х + у, 7?(2) = Я(1,1) = х + ху + у2; 7?(3) = Я(1,1,1) = х + ху + ху2 + у3-, R(2,1) = х2 + 2ху + ху2 + у3-, Я(3,1) = Я(2,2) = Я(2,1,1) = х2 + х2 у + ху + 2ху2 + ху3 + у4-, Я(3,1,1) = Я(3,2) = Я(2,2,1) = х2 + 2х2 у + х2у2 + 2ху2 + 2ху3 + ху4 + у5-, Я(3,2,1) = х3 + Зх2у + Зх2у2 + х2у3 + Зху3 + 2xj/4 + ху5 + у6. (г) Например, формула тгз(х,у) = хювз(х,у) + ywj4(x,y) эквивалентна формуле R(5,4,4,3,2,1) = xi?(4,3,3,2,1) + j/i?(5,4,3,3,2,1), частному случаю (в); очевидно, что гипп(х,у) = R(n — 2,... ,0) эквивалентно t*7(n-i)i(^il/) = R(n — 2,..., 1). (д) В действительности ^/с~1тпк(х,у) — указанная сумма по всем ограниченно рас- тущим строкам ai... ап, для которых а2 > 0, ..., ак > 0. 29. (а) Если ладьи находятся в столбцах (ci,..., Сп), то количество свободных ячеек равно количеству инверсий перестановок (п+1—щ) ... (п+1 —Сп)- [Поверните правую часть при- мера на рис. 56 на 180° и сравните результат с иллюстрацией после соотношения 5.1.1—(5).] (б) Каждая конфигурация гхг может быть размещена, скажем, в строках ii < • - - < гГ и столбцах < • • • < уг, что дает (т — г)(п — г) свободных ячеек в невыбранных строках и столбцах; (i2— ii+1) + 2(гз—г2—1) + • • • + (г—1)(гг—ir-i —1) + г(т—гг)—в невыбранных
852 ОТВЕТЫ К УПРАЖНЕНИЯМ 7.2.1.5 строках и выбранных столбцах и аналогичное количество в выбранных строках и невы- бранных столбцах. Кроме того, сумма ^(«2- »1+1)+2(»з-«2-1)4-H(r-l)(ir-»r_1-l)+r(m-ir) 1<«1 <tn может рассматриваться как сумма yai+a2+ '+Om-r по всем разбиениям г > щ > аг > • • • > ат-т > 0, так что согласно теореме С она равна В соответствии с п. (а) полином г!у генерирует свободные ячейки для выбранных строк и столбцов. Следовательно, искомый ответ-j/—г)(п-г)(7)vOv’-’v = y(m-r)(n-r)m!yn!y/((m - r)!y(n - r)!yr!y). (в) Левая часть формулы представляет собой производящую функцию Rm(t + ai,..., t + am) для диаграммы Феррерса с t дополнительными столбцами высотой тп. Поскольку существует t+am способов размещения ладьи в строке тп, это дает нам 1+?/Ч . (1 — yt+°m)/(l — у) свободных ячеек, связанных с этими выборами; тогда в строке тп — 1 имеется t + am-i — 1 доступных ячеек и т. д. Аналогично правая часть равна Rm(t+ai,..., t+am). Если тп—к ладей расставляются в столбцах > t, мы должны поместить к ладей в столбцах < t в к неиспользованных строк; но мы видели, что производящая функция для свободных ячеек при размещении к ладей на доске размером к х t представляет собой t\y/(t — к)\у. Примечания. Доказанная здесь формула может рассматриваться как полиномиаль- ное тождество переменных у и у*~ следовательно, она корректна при произвольном t, хотя наше доказательство и предполагает, что t—неотрицательное целое число. Этот результат был открыт для у = 1 в работе J. Goldman, J. Joichi, and D. White, Proc. Amer. Math. Soc. 52 (1975), 485-492. Справедливость для общего случая установлена в статье А. М. Garsia and J. В. Remmel, J. Combinatorial Theory A41 (1986), 246-275, в которой подобная аргументация использовалась для доказательства дополнительной формулы = ^kiy(-^-}...(-^-}Rm-k(ai,...,am). ы “ 1-У \l-yz/ \l — ykzj (г) Это утверждение, непосредственно следующее из п. (в), влечет за собой также то, что P(ai, .., am) = R(a'j,..., а'т) тогда и только тогда, когда равенство выполняется для всех х и для любого ненулевого значения у. Полином Пирса (х, у) из упр. 28, (г) представляет собой ладейный полином для (£21) различных диаграмм Феррерса; напри- мер, тиез(х, у) перечисляет расстановки ладей для форм 43321, 44221, 44311, 4432, 53221, 53311, 5332, 54211, 5422 и 5431. 30. (а) Имеем wn (*,у) = mnj где Amn = Rn-m(n — 1,..., 1) подчиняется простому закону: если мы не помещаем ладью в строку 1 формы (n— 1,..., 1), то эта строка содержит тп — 1 свободных ячеек, поскольку п — тп ладей находятся в других строках. Но если мы разместим здесь ладью, то оставим 0 или 1, или • • •, или тп— 1 ее ячеек свободными. Следовательно, AmTl = j/”1-1 A(m_1)(n_i) + (1 + у + • • • + 3/’n~1)Am(n_i), и по индукции Л — ,.»n(m-l)/2 Г nl Лтп~У [т)у- (б) Формула Ц7п+1(х,з/) = 52fc (”)xn~kykzuk(x,y) дает An(n+1) =
7.2.1.5 ОТВЕТЫ К УПРАЖНЕНИЯМ 853 (в) Из пп. (а) и (б) получаем (1 — z)(l — (1 + g)z) ... (1 — (1 + g + • • • + gn-1)z) ^{п},2 ’ к к [Вторая формула доказывается по индукции по п, поскольку обе части формулы удовле- творяют дифференциальному уравнению G„+i(z) = (1+q-l-------------Fgn)exGn(gz); в упр. 1.2.6-58 равенство доказывается для z - 0.] Историческая справка. Леонард Карлиц (Leonard Carlitz) ввел g-числа Стирлинга в Transactions of the Amer. Math. Soc. 33 (1933), 127-129. Затем в Dulce Math. J. 15 (1948), 987-1000, он вывел (помимо прочего) соответствующее обобщение формулы 1.2.6-(45): /1 . . . m-i\n (5) т'я (1 + , + ..+, ) jj,-. 31. exp(ew+x + w — 1); таким образом, = (w + l)n-fetufc_1 = tj7n+1-*(ro — l)fe-1 в обозначениях упр. 23. [L. Moser and M. Wyman, Trans. Royal Soc. Canada (3) 43 (1954), Section 3, 31-37.] Фактически число mnk(x, 1) из упр. 28, (г) генерируется с помощью функции exp((exw+xx — 1)/т + хш). 32. Имеем 6п = tPn(l, —1), а в обобщенном треугольнике Пирса (упр. 28, (г)) при х = 1 и у = — 1 легко обнаружить простую схему: |rz7nfc(l, —1)| < 1 ио7п(*.+1)(1, —1) = tunit(l, —1)+ (—1)" (по модулю 3) для 1 < к < п. [В JACM 20 (1973), 512-513, Гидеон Эрлих (Gideon Ehrlich) дал комбинаторное доказательство эквивалентного результата.] 33. Представление разбиения множества с помощью расстановки ладей, как в ответе к упр. 27, приводит к ответу (путем установки х = у = 1 в упр. 28, (г). [Случай к = п был рассмотрен в работе Н. Prodinger, Fibonacci Quarterly 19 (1981), 463-465.] 34. (а) Sonetti Гвиттоне включают 149 сонетов со схемой 01010101232323, 64 сонета со схемой 01010101234234, два—со схемой 01010101234342, семь — со схемами, использован- ными по одному разу (наподобие 01100110234432), и 29 стихов, которые не могут считаться сонетами, так как в них нет 14 строк. (б) Canzoniere Петрарки включает 115 сонетов со схемой 01100110234234, 109—со схемой 01100110232323, 66—со схемой 01100110234324, 7—со схемой 01100110232232 и 20 других со схемами наподобие 01010101232323, причем ни одна из них не повторяется более четырех раз. (в) В Amoretti Спенсера в 88 из 89 сонетов использована схема 01011212232344; в ис- ключении—сонете номер 8 — использована шекспировская схема. (г) Во всех 154 сонетах Шекспира используется очень простая схема 01012323454566, за исключением двух (99 и 126), которые не состоят из 14 строк. (д) Все 44 сонета Браунинг из Sonnets From the Portuguese подчиняются схеме Пет- рарки 01100110232323. Иногда строки рифмуются (случайно?), даже когда они не обязаны рифмоваться; например, последний сонет Браунинг на самом деле имеет схему 01100110121212. Кстати, в длинной песни из Божественной комедии Данте используется замкнутая схема рифм, в которой 1 = 3 и Зп — 1 = 3п+1 = 3п + 3 для п = 1, 2, .... 35. Каждая неполная n-строчная схема П соответствует разбиению {1,... ,п+1} без час- тей с одним элементом, в котором (п+1) группируется со всеми одноэлементными частя- ми П. [Г. В. Беккер (Н. W. Becker) привел алгебраическое доказательство в АММ 48 (1941), 702. Заметим также, что согласно принципу включения и исключения ги'п =
854 ОТВЕТЫ К УПРАЖНЕНИЯМ 7.2.1.5 Efc(:)(-i)n-fc^. a отп = (fc)rofci фактически с использованием обозначений из упр. 23 можно записать от' = w— 1. Д. А. Шаллит (J. О. Shallit) предложил расширение треуголь- ника Пирса путем установки t*7n(n+i) = ти'п; см. упр. 33 и 38, (д). Фактически отп& представ- ляет собой количество разбиений {1,..., п}, обладающих тем свойством, что 1, ..., к — 1 не являются одноэлементными частями; см. Н. W. Becker, Bull. Amer. Math. Soc. 58 (1952), 63.] 36. exp(e2 — 1 — z). (В общем случае, если i?n — количество разбиений {1,...,п} на подмножества допустимых размеров si < зг < • , экспоненциальной производящей функ- цией 52n ^nZn/n\ является exp(z81/si! + ze2/зг! + •••), поскольку (z81/si! + г®2/зг! + • • )fe представляет собой экспоненциальную производящую функцию для разбиения ровно на к частей.) 37. Всего имеется 52it(fc)rofcron-fc возможных вариантов длиной п, так что для п = 14 имеется 784 071966 схем. (Но превзойти схему Пушкина очень трудно.) 38. (а) Представим, что мы начинаем с хia?2 ... хп = 01... (n—1), затем последовательно удаляем некоторый элемент bj и помещаем его слева, выполняя эти действия для j = 1, 2, ... , п. Тогда хь представляет собой k-й перемещенный (считая от последнего) элемент, для 1 < к < |{bi,... ,5П}|; см. упр. 5.2.3-36. Следовательно, массив xi...a;n вернется в первоначальное состояние тогда и только тогда, когда Ьп • 51 является ограниченно растущей строкой. [Robbins and Bolker, ASquat. Math. 22 (1981), 281-282.] Другими словами, пусть ai... ап—ограниченно растущая строка. Установим b-j ч— j и fcj+i ч— an-> для 0 < j < п. Затем для 1 < j < п определим kj с помощью правила, согласно которому bj есть kj-Vt отличный от других элемент последовательности 5>-i, bj-2, •••• Например, строка ai.. . aie = 0123032303456745 соответствует таким способом «-циклу 6688448628232384. (б) Такие пути соответствуют ограниченно растущим строкам с max(ai,... ,an) < тп, так что искомый ответ — {"} + {"} + • —F {^}- (в) Можно считать, что г = 1, поскольку последовательность k2...knki является «-циклом, если таковым является последовательность к±к2 кп. Таким образом, ответ представляет собой количество ограниченно растущих строк с On = j — 1, а именно {"Zi} + {"71}+ {";:}+ •••• (г) Если ответ—fn, то должно выполняться соотношение (7) А : wn, поскольку <71 представляет собой тождественную перестановку. Следовательно, fn = от„, количеству разбиений без одноэлементных частей (упр. 35). (д) Вновь ответ от„, в соответствии с пп. (а) и (г). [Следовательно, OT^modp = 1, когда р простое.] 39. Замена и = tp+1 дает —j-г e_’*i/e-p^^p+1) du = -ттГ(аЛ). p+1 JO p+i '•p+1' 40. Имеем g(z) = cz — n In z, так что седловая точка находится в п/с. Теперь углы прямоугольного пути располагаются в точках ±п/с ± mi/c, а exp д(п/с + it) = (encn/nn) х ехр(—t2c2/(2n)+it3c3/(3n2) + - • • ). Окончательный результат—е"(с/п)п~х/у/2тгп, умножен- ное на 1 + п/12 + О(п~2). (Конечно, этот результат можно получить и быстрее, положив в интеграле w = cz. Но приведенный здесь ответ просто механически применяет метод седловой точки, не пытаясь прояснять суть дела.) 41. Конечный результат опять представляет собой простое умножение (21) на сп-1; од- нако в данном случае более существенно левое ребро прямоугольного пути, а не правое. (Кстати, при с = — 1 мы не можем вывести аналог (22) с использованием контура Ганкеля, когда х действительно и положительно, поскольку интеграл по такому пути расходится. Но при обычном определении zx подходящий путь интегрирования дает при п -- х > 0 формулу —(со8тгх)/Г(а:).)
7.2.1.5 ОТВЕТЫ К УПРАЖНЕНИЯМ 855 42. При четном п мы имеем f ez dzfzn = 0. В противном случае как левое, так и правое ребра прямоугольника с вершинами ±yJn/2 ± in при больших п дают приближенно вклад еп/2 гоо , 2тг(п/2)"/2 (-zt)3 23/2 (zt)4 Мы можем ограничить |t| < п£, чтобы показать, что этот интеграл равен 1о + (Та — ^Тв)/п с относительной ошибкой О(пве~3^2), где I* = e~2*2tk dt. Как и ранее, в действитель- ности относительная ошибка равна О(п-2); и мы выводим окончательный ответ: 1 en/2 / 1 _./ 1 \\ тт----. . . ----------11 + 7-7— + OI I |, где п нечетно. ((п—1)/2)! л/2тг(п/2)п/2 \ 12п \п2// (Аналогом (22) является (sin ^)2/Г((х — 1)/2) при п = х > 0.) 43. Пусть f(z) = ^fzn. Когда z = — п + it, мы имеем |/(z)| < еп-"; когда z = t + 2-irin + гтг/2, мы имеем |/(z)| = |z|-" < (2тгп)-". Так что интегралом можно пренебречь везде, кроме пути z = £ + it; на этом пути |/| уменьшается с возрастанием |t| от 0 до тг. Мы уже имеем |/(z)|//(£) = О(ехр(—n2e/(logn)2)) при t = п£-1^2. Когда же |t| > тг, то 1/М1//Ю < 1/|1 + гтг/еГ = exp(-f 1п(1 + тг2/£2)). 44. Положим в (25) u=na,2t2, чтобы получить 3? J^° e-“exp(n-1^2c3(—u)3^2+n-1C4(—и)2+ п-3/2съ(-и)3/2 + • • • ) du/V^, где ск = (2/(£ + l))fc/2(£fc-1 + (-l)*(fc - l)!)/fc! = ак/ак/2. Это выражение приводит к сумме по всем разбиениям 21 (1 \ *+m z»^1 z»^2 „*=3 --------- Сз_ C4_ Cs_ 2/ fci! fc2! fc3! fcl+2fc2+3fc3+-- = 2J *1+*=2+*:з+"=т *l.fc2,*S,—>0 Например, bi = |c4 — Цсз. 45. Чтобы получить wn/n\, заменим g(z) на e2 — (n+1) In z в выводе (26). Это изменение приводит к умножению подынтегрального выражения в предыдущем ответе на 1/(1 +it/£), которое представляет собой 1/(1 — п-1/2а(—и)1/2), где а - —y/^/(f, + 1). Таким образом, получаем сумму ь; = Е fc+fcl4-2fc2 4-3fc3 + --- = 2i (1 \ l+m . z»fcl г*2 _ 1 \----- fc с3 с4 с5 2/ fcjfoifa!’*’ 4-^2+^3 +=tn fc.fcl »fc2>fcs»—>0 из p(2i) + p(2l — 1) + • • • + p(0) членов; bi = |c4 — + |ac3 — |a2. [Коэффициент bi был получен другим способом в работе L. Moser and М. Wyman, Trans. Royal Soc. Canada (3) 49, Section 3 (1955), 49-54, авторы которой впервые вывели асимптотический ряд для wn. Их приближение немного менее точное, чем (26) с п, замененным нап+1, поскольку оно не проходит через седловую точку. Формула (26) получена в I. J. Good, Iranian J. Science and Tech. 4 (1975), 77-83.] 46. Из (13) и (31) видно, что для фиксированного значения fc при п —> оо выполняется соотношение zz7nfc = (1 — £/n)fctun(l + О(п-1)). Это приближение справедливо и при к = п, но с относительной ошибкой O((logn)2/n). 47. Шаги (Н1,Н2,... ,Н6) выполняются (1, wn,wn — Wn-i,wn-i,Wn-i,wn~i — 1) раз со- ответственно. Общее количество установок j Ч— j — 1 в цикле на шаге Н4 составляет Гоп-2 + етп-3 + • • + mi раз; общее количество установок bj ч— т в цикле на шаге Н6
856 ОТВЕТЫ К УПРАЖНЕНИЯМ 7.2.1.5 составляет (wn~2 —1)+- • -+(tui — 1) раз. Отношение tun-i/tun приближенно равно (lnn)/n, и (tUn-2 Ч--1- Wl)/wn И (Inn)2/™2. 48. Можно легко проверить взаимозамену суммирования и интегрирования в ewx 1 / ее’ J 1 екх J Г(х + 1) 2тгг J г^+i 2тгг J fc! z*+3 °° iif f>kz _ос, i = ^fc!2^i/ ^+Г dz = 12 fci г(х + 1) ’ fc=o J fc=o ' ' 49. Если £ — Inn — In Inn + x, то мы получаем /3 = 1 — e~x — ax. Следовательно, no формуле обращения Лагранжа (упр. 4.7-8) g-*-1 -ggTQ( j я ]/(t) - где f(t) = t/(l — e-f). Так что окончательный результат следует из известного тождества / z \т _ -А Г т 1 ________________zF__________ \ 1 — e~z ) [rn — nJ (m — l)(m — 2)... (т — п) ’ (С интерпретацией этого тождества следует быть осторожным при п > т; коэффициент при zn представляет собой полином от т степени п, как поясняется в уравнении (7.59) в CMath.) Формула из этого упражнения открыта Л. Комте (L. Comtet), Comptes Rendus Acad. Sci. (A) 270 (Paris, 1970), 1085-1088, который распознал коэффициенты, ранее вычислен- ные в работе N. G. deBruijn, Asymptotic Methods in Analysis (1958), 25-28. Сходимость при n > e была показана Джеффри (Jeffrey), Корлессом (Corless), Харе (Hare) и Кнутом (Knuth), Comptes Rendus Acad. Sci. (I) 320 (1995), 1449-1452, которые также вывели несколько более быстро сходящуюся формулу. (Уравнение = п имеет и комплексные корни. Мы можем получить их все, ис- пользуя In п + 2тггт вместо In п в формуле из этого упражнения; при т 0 сумма быстро сходится. См. Corless, Gonnet, Hare, Jeffrey, and Knuth, Advances in Computational Math. 5 (1996), 347-350.) 50. Пусть £ = £(n). Тогда £'(n) = £/((£ + l)n), и можно показать, что ряд Тейлора к2 £(п + к) = £ + к£(п) + у £"(™) + • • • сходится при |fc| < п + 1/е. На самом деле справедливо гораздо большее, поскольку функция £(п) = —Т(—п) получается из функции дерева T(z) путем аналитического продолжения на отрицательные значения действительной оси. (Функция дерева имеет квадратичную сингулярность в z = е-1; после обхода этой сингулярности мы встретимся с логарифмической сингулярностью в z = 0, представляющей собой часть интересной многоуровневой поверхности Рима- на, на которой квадратичная сингулярность появляется только на уровне 0.) Производ- ные функции дерева удовлетворяют соотношению zkT^k\z) = R(z)fcpk(R(z)), где R(z) = 7(z)/(l — 7(z)), a Pk(x) — полином степени fc — 1, определяемый соотношением pfc+i(x) = (1 + x)2p'k(x) + fc(2 + x)pk(x). Например, pi(rr) = 1, pz(x) = 2 + x, рз(х) = 9 + 10x + 3rr2, pt(x) = 64 + 113x + 70x2 + 15x3. (Коэффициенты рн(х), кстати, перечисляют некоторые филогенетические деревья, именуе- мые деревьями Грега: [х3] рк(х) представляет собой количество ориентированных деревьев
7.2.1.5 ОТВЕТЫ К УПРАЖНЕНИЯМ 857 с j непомеченными узлами и к помеченными узлами, причем все листья должны быть помечены, а непомеченные узлы должны иметь не менее двух дочерних. См. J. Felsenstein, Systematic Zoology 27 (1978), 27-33; L. R. Foulds and R. W. Robinson, Lecture Notes in Math. 829 (1980), 110-126; C. Flight, Manuscripta 34 (1990), 122-128.) Если Qk(x) = pk(—x), то по индукции можно доказать, что (—1)*"в*"\я:) > 0 при 0 < х < 1. Таким образом, Qk(x) монотонно убывает от йЛ-1 до (к — 1)! при х, возрастающем от 0 до 1, для всех к,т > 1. Отсюда следует, что где частичные суммы при к > 0 оказываются поочередно больше и меньше точного значе- ния. 51. Имеются две седловые точки, а = ^/п+5/4 — 1/2 и rr = —1 — а. Интегрирование по прямоугольному пути с вершинами а ± im и а' ± im показывает, что при п —> оо можно рассматривать только а (хотя а' вносит относительную ошибку порядка е-'/", которая может оказаться существенной при малых п). Рассуждая почти так же, как и в (25), но с g(z) = z + z2/2 — (n 4-1) In z, мы найдем, что хорошим приближением для tn является П- f „д(ст)-а2«2+а3«3Ч----На1(-«),+О(п(,+1)'_(,_1У2) _ О + 1 , [fc = 2] 2тг /_п.е ак - ка*-1 + 2 • Интеграл раскладывается в ряд, как в упр. 44: п\ е(п+<^)/2 ~ .. ^^=(1 + bl + 5г + • • • + 5m + О(п т )). 2<7n+1 д/тго? " Теперь сь = (a,4-l)<71-fc(14-l/(2o'))_fc72/fc для к > 3, следовательно, (2«т4- 1)зкакЬк является полиномом от а степени 2fc; например: 3 15 2 _ 8ст2 4-717-1 1 “ 4С4 16Сз “ 12<т(2<т 4-1)3 ’ В частности, приближение Стирлинга и член 51 после подстановки а дают t - Л . _ 119 -1 _ 7933 п-з/2 -2Л п~у/2 11+24П 1152П 414720П + СЧ” результат существенно более точный, чем формула 5.1.4-(53), причем полученный ценой значительно меньших усилий. 52. Пусть G(z) — Рг(Х = k)zk, так что J-й кумулянт к,- равен J! [t*] In G(e‘). В случае (а) имеем G(z) = eei*~ei; следовательно, lnG(e‘) = е(е* -е(= -1) = е« - 1)*^, «, = / 0]. Случай (б) представляет собой разновидность дуальной ситуации: здесь к = j = zuj [J 0], поскольку GM=. е---. J j J [Если = 1, в случае (а) мы имеем kj = ew [у 0]. Но если £е( = п, то среднее равно «1 = п, а дисперсия ст2 равна (£4-1)п. Таким образом, формула в упр. 45 гласит, что среднее значение п встречается с вероятностью, приближенно равной 1/\Х2тг<7 с относительной
858 ОТВЕТЫ К УПРАЖНЕНИЯМ 7.2.1.5 ошибкой О(1/п). Данное наблюдение приводит к другому способу доказательства этой формулы.] 53. Можно записать lnG(e‘) = pt + <r2t2/2 + кзД3/3! + •••, как в формуле 1.2.10-(23); и существует такая положительная константа <5, что < о^/б при |t| < 6. Следовательно, если 0 < е < 1/2, можно доказать, что G(eit)ndt е«(/.п+г) exp irt — + О(п3е 1^2)) dt + O(e-m2') при п —> оо для некоторой константы с > 0: подынтегральная функция при пе-1^2 < |t| < <5 ограничена по абсолютному значению величиной ехр(—<т2п2£/3), а при 6 < |t| < ir ее величина не превышает ап, где а = max|G(e**)| меньше 1, поскольку отдельные члены Pkeklt в силу нашего предположения не лежат на прямой линии. Таким образом, [2**n+r]G(z)n = ехр(—irt- + О(п3£-1/2)) dt + О(е-С"2') 2тг /_>р(-^(,+ я;)2- + г2/(2<г2п) y/2im Аналогично, учитывая кз, м, ..., можно улучшить оценку до O(n-m) для произвольно большого тп; таким образом, результат верен также при е = 0. [В действительности такое уточнение приводит к “разложению Эджворта” в соответствии с которым [z**"+r] G(z)n асимптотически стремится к e-r2/(2<r2n) ( —l)s(2Z + m)— r2t+m~2s 1 /K3\fcl /«4\fc2 а41+2т-2в2в3] nl+m-B fcj k2\ . . . \ 3! ) \ 4! J fcj +2fc2 +3fcgH—- — m fcl+fc2+fc3+—=* fcl,fc2,fc3, . >0 0<s<i+m/2 Абсолютная ошибка равна O(n~p^2), где скрытая в О константа зависит только от р и G, но не от г или п, если мы ограничимся случаями т < р — 1. Например, при р = 3 мы получим [zpn+r]G(z)n = e~r2/(2g2n) б _ (п + +о( ау/2^ V 2aAJ 6<Мп2Д+ WV и еще семь членов при р = 4. [См. П. Л. Чебышев, Записки Имп. Ахад. Наук 55 (1887), № 6, 1-16; Acta Math. 14 (1890), 305-315; F. Y. Edgeworth, Trans. Cambridge Phil. Soc. 20 (1905), 36-65, 113-141; H.Cramer, Skandinavisk Aktuarietidsskrift 11 (1928), 13-74, 141-180.] 54. Формулы (40) эквивалентны записи а = s coth s + s, /3 = s coth s — s. 55. Пусть c = ae~a. Итерации метода Ньютона /Зо = c, fik+i — (1 ~ Pk)ctPk/(l — ce.~&k) быстро сходятся к точному значению, за исключением случая, когда а очень близко к 1. Например, при a = In4 величина /Зт отличается от In2 менее чем на 10“7®. y'n (n}e^n~k^z । 56. (а) По индукции по n, g(n+1)(z) = (-!)"(—,-------------------
7.2.1.5 ОТВЕТЫ К УПРАЖНЕНИЯМ 859 (б) ELo G>e*7n! = Jo1 • • • Jo1 ex₽(L«i + • • • + Unja)dU1...dun < fo ... fo exP((ui 4--bun)CT)= (ea-l)n/an. Нижняя граница выводится аналогично, поскольку [гц + • • • + unJ > ui 4-4- tin — 1. (в) Таким образом, тг! (1— (3/а) < (—ст)п</п+1)(ст) < 0, и мы должны только убедиться, что 1 — fi/a < 2(1 — /3), а именно что 2a.fi < а 4- [3. Но в соответствии с упр. 54 а[3 < 1 и а + /3 > 2. 57. (а) п 4- 1 — тп = (п 4- 1)(1 — 1/а) < (п 4- 1)(1 — (З/а) = (п 4- 1)ст/а < 2N, как в ответе к упр. 56, (в), (б) Величина а 4- а/3 возрастает с ростом а, поскольку ее производная по а равна 1 + fi + fi(l — а)/(1 — fi) = (1 — а/3)/(1 — fi) + [3 > 0. Следовательно, 1 — fi < 2(1 — 1/а). 58. (а) Производная |ест+*‘ — 1|2/|«т + it|2 = (ea+tt — l)(eCT-,f — 1)/(ст2 + t2) по t равна (ст2 4- t2)sint — t(2sin|)2 — (2 sinh %)2t, умноженному на положительную функцию. Эта производная всегда отрицательна при 0 < t < 2тг, поскольку она меньше, чем t2sint — t(2 sin |)2 = 8usinucosu(u — tanu), где t = 2u. Пусть s = 2 sinh ?. При ст > тги 2тг < t < 4тг производная остается отрицательной, поскольку t < 4тг < s2 — ст2/(2тг) < s2 — ст2/5. Аналогично, когда ст > 2тг, производная остается отрицательной при 4тг < t < 168тг; доказательство становится все легче и легче. (б) Пусть t = uafi/N. Тогда (41) и (42) доказывают, что уТ e(n+l)s(a+it) dt = где (1 — fi)a,k — полином степени к — 1 от а и fi, причем 0 < а* < 2/к. (Например, баз — (2 — fi(a 4- /3))/(1 — fi) и 24а4 = (6 — fi(o? 4- 4а/3 + fi2))/(l — fi).) Монотонность подынтегральной функции показывает, что интегралом по остальному диапазону можно пренебречь. Теперь применим метод Лапласа и распространим интеграл на — оо < и < оо, а затем воспользуемся формулой из ответа к упр. 44, полагая сь — 2fc^2an для определения 51, Ьз, • • - - (в) Докажем, что \ez — 1|тстп+1/((е‘г — l)m|z|n+1) экспоненциально мало на этих трех путях. Если ст < 1, эта величина меньше, чем 1/(2тг)п+1 (поскольку, например, еа — 1 > ст). Если ст > 1, имеем ст < 2\z\ и \ez — 1| < еа — 1. 59. В этом предельном случае а = 1 4- п-1 и fi = 1 — п-1 4- |п-2 4- О(п-3); следовательно, N - 14-|п-14-О(п-2). Старший член fi~n/\j2irN равен е/х/2тг, умноженному на 1—+ О(п~2) (заметим, что е/х/2тг ~ 1.0844). Значение а* в ответе к упр. 58, (б) оказывается равным 1/к 4- О(п-1). Так что уточняющие члены в первом приближении равны т. е. члены в (расходящемся) ряде соответствуют приближению Стирлинга 1 ~ е / 1 1 139 571 \ 1! ~ х/2^\ 12 + 288 + 51840 2488320 60. (а) Количество m-арных строк длиной п, в которых встречаются все тп цифр, равно тп! {, и принцип включения и исключения приводит к выражению этой величины в виде (™)тпп — (?)(тп — 1)" + • • •. Теперь обратитесь к упр. 7.2.1.4-37. (б) Имеем (тп — 1)п/(тп — 1)! = (тпп/тп\)тпехр(п1п(1 — 1/тп)), а 1п(1 — 1/тп) меньше, чем — пе-1.
860 ОТВЕТЫ К УПРАЖНЕНИЯМ 7.2.1.5 (в) В этом случае а > пе и /3 = ае~ае13 < ае1-“. Таким образом, 1 < (1 — /З/а)”1-" < exp(nO(e-Q)); а также 1 > e_^m = e_(n+1>0/Q > ехр(—пО(е~а)). Так (45) превращается в (mn/m!)(l + О(п-1) + О(пе-П')). 61. Сейчас а = l + ^ + O(n2£-2) к[3 = 1 — %+О(п2*~2). Таким образом, N = г+О(п2£-1), и случай I = 0 в (43) сводится к (Это приближение хорошо соответствует таким тождествам, как {„21} = (2) и {п-2} = 2(4) + (”41)’ на самом деле мы имеем {п-r} = F7i(1 + OQ)) прип^°° где г — константа, в соответствии с формулами (6.42) и (6.43) из CMath.) 62. Утверждение истинно при 1 < п < 10000 (причем тп = [е£ — 1J в 5648 случаях). Э. Р. Канфилд (Е. R. Canfield) и К. Померанц (С. Pomerance) в статье, содержащей прекрасный обзор ранних работ по связанным темам, показали, что указанное утверждение выполняется для всех достаточно больших п, и что максимум достигается в обоих случаях, только если е£ mod 1 очень близко к |. [Integers 2 (2002), Al, 1-13.] 63. (а) Результат выполняется прир1 = • • • = рп = р, поскольку ak-i/uk = (к/(п+1—к)) х ((п — р)/р) < (п — p)/(n + 1 — д) < 1. Он также верен по индукции и при р„ = 0 или 1. В общем случае рассмотрим минимум ак — a^-i по всем вариантам выбора (pi,...,pn), таким, что pi + • + рп = р. Если 0 < pi < рг < 1, пусть pi = pi — <5 и pi = р2 + <5, и заметим, что а'к — oi-i = Ofc — Ofc-i + <5(pi — P2 — 6)a для некоторого а, зависящего только от рз, ..., рп. В точке минимума должно быть a = 0; таким образом, можно выбрать <5 так, чтобы либо pi = 0, либо р2 = 1. Следовательно, минимума можно достичь, когда все Pi имеют одно из трех значений {0,1, р}. Но мы должны доказать, что в таких случаях Чк — ak-i > 0. (б) Изменение каждого pj на 1 — pj изменяет р на п — р, а а к на ап-к- (в) У f(x) нет положительных корней. Следовательно, /(z)//(l) имеет вид, пред- ставленный в пп. (а) и (б). (г) Пусть C(f) — количество изменений знака в последовательности коэффициентов /; мы хотим показать, что С((1 — x)2f) = 2. В действительности С((1 — x)mf) = тп для всех тп > 0. С((1 — а:)”1) = тп и C((a + bx)f) < C(f) при положительных а и Ь; следовательно, С((1 — x)mf) < тп. Если f(x)—любой ненулевой полином, С((1 — x)f) > следовательно, С((1 — x)mf) > тп. (д) Поскольку [”]хк = rr(rr+l) ... (х+п— 1), п. (в) применим непосредственно с р = Нп. Для ПОЛИНОМОВ fn(x) = {fc}1* МОЖНО воспользоваться П. (в) С р = СТп+1/СТп — 1, если fn(x) имеет п действительных корней. Последнее утверждение следует по индукции, поскольку /n+i(a:) = x(fn(x) + /„(а:)): если a > 0 и если f(x) имеет п действительных корней, то столько же их и у функции д(х) = еах f(x). Но д(х) —> 0 при х —> —оо; следовательно, д'(х) = eax(af(x) + f'(x)) также имеет п действительных корней (один далеко слева и п — 1 — между корнями д(х)). [См. Е. Laguerre, J. de Math. (3) 9 (1883), 99-146; W. Hoeffding, Annals Math. Stat. 27 (1956), 713-721; J. N. Darroch, Annals Math. Stat. 35 (1964), 1317-1321; J. Pitman, J. Combinatorial Theory A77 (1997), 297-303.] 64. Нужно применить компьютерную алгебру для вычитания 1пстп из lntun_fc. 65. Она равна умноженному на количество встречающихся fc-блоков плюс коли- чество встречающихся упорядоченных пар fc-блоков в списке всех разбиений множества,
7.2.1.5 ОТВЕТЫ К УПРАЖНЕНИЯМ 861 а именно ((”)tun_fc + (^)(nfcfc)tUn-2fc)/CTn, минус квадрат от (49). Асимптотически это значение представляет собой (£fc/fc!)(l + О(тг4е-1)). вв. (Максимум (48) при п = 100 достигается только для трех разбиений 71625446372614, 71625446382513 и 71625447362613.) 67. Математическое ожидание значения Мк равно Wn+kl^n- Таким образом, согласно (50) среднее значение равно стп+1/ст„ = тг/£ + £/(2(£ + I)2) + О(тг-1), а дисперсия равна Стп+2 _ CTn+1 = (-У(1 +_ 1--------------£-----i-of™—1_он) UM+(e+i)2n (e+i)2n+uU277 e(e+n l J 68. Максимальное количество ненулевых компонентов во всех частях разбиения равно п = ni + + пт; оно встречается тогда и только тогда, когда все части компонентов равны 0 или 1. Тогда значения Z + 1 = п и Ь = тщ + (гп — 1)п2 + • • • + пт достигают максимумов. [Вот почему лучше выбирать имена элементов мультимножества так, чтобы Т71 < 712 < ... < 71,,; .] 69. В начале шага М3, если к>Ьк1 = г — 1, перейти к шагу М5. На шаге М5, если j = а и [yj — 1)(г — Z) < uj, перейти к шагу Мб вместо уменьшения Vj. 70. (a) |"Z}| + |"Zf| + • + IrZib ПОСКОЛЬКУ |r-il включает блок {0,... ,0,1} с к нулями. Общее количество, известное также как р(п — 1,1), равно р(п — 1) Ч-+ р(1) + р(0). (б) Ровно N = + {"-2} из г-блочных разбиений {1, ...,п — 1,тг} останутся теми же при взаимообмене п — 1 п. Таким образом, искомый ответ равен N + |({”} — N) = |({”} + N), что также равно числу ограниченно растущих строк щ... ап, у которых max(ai,... ,an) = г — 1 и an-i < ап. Общее количество равно |(ст„ +tun-i + tUn-2)- 71. [|(t7i + 1) ... (пт + 1) — |J, поскольку имеется (т71 + 1) ... (пт + 1) — 2 композиций из двух частей и половина из них находится не в лексикографическом порядке, если только все nj не являются четными. (См. упр. 7.2.1.4-31. Формулы вплоть до пяти частей были выведены в работе Е. М. Wright, Proc. London Math. Soc. (3) 11 (1961), 499-510.) 72. Да. Описанный далее алгоритм вычисляет ajk = p(j,k) для 0 < j, к < п за 0(тг4) шагов. Начнем с установки ац, <— 1 для всех j и к. Затем для I = 0, 1, ..., п и т = 0, 1, ..., тг (в любом порядке), если I + т > 1, устанавливаем ajk <— Ojfc + a^j-i^-m) Для j = I, ..., n и к = тп, ..., n (в возрастающем порядке). (См. табл. А.1. Аналогичный метод вычисляет р(т,..., тгт) за О(т ... тгт)2 шагов. В упомянутой ранее статье Чима (Cheema) и Моцкин (Motzkin) вывели рекуррентное соотношение ОО mp(m,...,nm) = 52 к1Р(тг1 - fcU,.. .,71m - fcmZ), 1=1 но эта интересная формула облегчает вычисления только в отдельных случаях.) Таблица А.1 Количества мультиразбиений п 0 1 2 3 4 5 6 п 0 1 2 3 4 5 р(0, тг) 1 1 2 3 5 7 11 Р(О,тг) 1 2 9 66 712 10457 р(1,тг) 1 2 4 7 12 19 30 Р(1,п) 1 4 26 249 3274 56135 р(2,тг) 2 4 9 16 29 47 77 Р(2,тг) 2 11 92 1075 16601 325269 р(3, тг) 3 7 16 31 57 97 162 Р(3,тг) 5 36 371 5133 91226 2014321 р(4, тг) 5 12 29 57 109 189 323 Р(4, тг) 15 135 1663 26683 537813 13241402 р(5, тг) 7 19 47 97 189 339 589 Р(5,тг) 52 566 8155 149410 3376696 91914202
862 ОТВЕТЫ К УПРАЖНЕНИЯМ 7.2.1.5 73. Да. Пусть Р(т, п) = р(1,..., 1,2,..., 2), где всего имеется т единиц и п двоек; тогда Р(тп,0) = стт, и можно воспользоваться рекуррентным соотношением 2Р(т, п + 1) = Р(т + 2, п) + Р(т+ 1,п) + У~^^Р(пг, fc). к Это рекуррентное соотношение можно доказать, рассмотрев, что произойдет, если мы за- меним два х в мультимножестве для Р(т, п+1) двумя различными элементами хи х'. Мы получим 2Р(пг,п+1) разбиений, представляющих разбиения Р(пг + 2,п), за исключением Р(пг +1, п) случаев, когда хи х' принадлежат одному и тому же блоку, и в (*)Р(пг,п —fc) случаях, когда блоки, содержащие хих', идентичны и имеют к дополнительных элементов. Примечания. См. табл. А.1. Вот еще одно рекуррентное соотношение, менее удобное для вычислений: P(m + l,n) = 12(fc)(n-* + m)PO’,fc)- i.k J Последовательность P(0, n) была впервые изучена в работах Е. К. Lloyd, Proc. Cambridge Pbilos. Soc. 103 (1988), 277-284, и G. Labelle, Discrete Math. 217 (2000), 237-248, где вычисления выполнялись совершенно иным образом. В упр. 70, (б) показано, что Р(пг, 1) = (стт+стт+1+сттп+г)/2; в общем случае Р(пг, п) можно записать с использованием обозначе- ний из упр. 23 как wmqn(ru), где qn(x)—полином степени 2п, определяемый производящей функцией 9п(ж)гп/п! = exp((ez + (х + x2)z — 1)/2). Таким образом, в соответствии с упр. 31 ОО п ОО fc ГР(т,пА = V CT<2fc-+-+A>(fc+^+1-). ' п\ 2к fc! п—0 к—0 Лабель (Labelle) доказал как частный случай гораздо более общего результата, что коли- чество разбиений {1,1,..., п, п} ровно на г блоков равно ОО fc n! [xrzn] e-*+*2(ez-D/2 e^(fc+D/2^ к^о к- 75. Метод седловой точки дает Сел"2/3+в"1/3/п55^36, где А = 3£(3)1^3, В = тг2^(3)-1?,3/2 и С = <(3)19/зв(2тг)-в''вЗ-1/2 ехр(1/3 + В2/4 + <'(2)/(2тг2) - 7/12). [F. С. Auluck, Proc. Cambridge Philos. Soc. 49 (1953), 72-83; E. M. Wright, American J. Math. 80 (1958), 643-658.] 76. Воспользовавшись тем фактом, что р(т,П2,пз,...) > p(ni +пг,пз,...), а следо- вательно, Р(ш + 2,n) > P(m,n + 1), по индукции можно доказать, что P(m,n + 1) > (ш + п + 1)Р(пг, п). Таким образом, 2P(m,n) < Р(т + 2,п — 1) + Р(т + 1,п — 1) + еР(т,п — 1). Итерируя это неравенство, получаем, что 2"Р(0,п) - (ст2 + ст)" + О(п(ст2 + ст)"-1) = (пстгп-1 + Ст2п)(1 + O((logn)3/n)). (Более точная асимптотическая формула может быть получена из производящей функции в ответе к упр. 73.) 78. 333321000 100022320 (Поскольку все кодированные разбиения 221002102 должны быть (000000000).) 210220013 79. Имеется 432 таких цикла. Однако они дают только 304 различных цикла разбиений множества, поскольку различные циклы могут описывать одну и ту же последовательность разбиений. Например, (000012022332321) и (000012022112123) в этом смысле эквивалентны.
7.2.1.5 ОТВЕТЫ К УПРАЖНЕНИЯМ 863 80. [См. F. Chung, Р. Diaconis and R. Graham, Discrete Mathematics 110 (1992), 52-55.] Построим ориентированный граф c U7n-i вершинами и дугами; каждая ограниченно растущая строка щ ... ап определяет дугу от вершины <ц ... On-i к вершине р(аг ... ап), где р—функция из упр. 4. (Например, дуга 01001213 идет от 0100121 к 0110203.) Каждый универсальный цикл определяет в этом ориентированном графе цепь Эйлера; и обрат- но: каждая цепь Эйлера может использоваться для определения одного или несколь- ких ограниченно растущих универсальных последовательностей на элементах множества {0,1,...,п- 1}. Цепь Эйлера существует согласно методу из раздела 2.3.4.2, если положить, что последний выход из каждой ненулевой вершины ai.. .On-i идет по дуге <ц .. .an-ian-i- Однако последовательность может не быть циклической. Например, не существует уни- версального цикла при п, меньшем 4; при п, равном 4, универсальная последовательность 000012030110100222 определяет цикл разбиений множества, который не соответствует ни одному универсальному циклу. Существование цикла может быть доказано для п > 6, если начать с цепи Эйлера, которая начинается с 0nTyrr”-3ii(iit>)L(’l_2)/2W’lHe'‘eTHOl для некоторых различных элемен- тов {u, v, а:,у}. Такой шаблон возможен, если заменить последний выход из 0fc121n-3~fc с 0fc_1121n-2_fc на 0fc_1121n-3_fc2 для 2 < к < п — 4, а последними выходами из 0121п~4 и 01п-32 будут соответственно 010п-41 и 0п-310. Теперь, если мы будем выбирать числа цикла в обратном порядке, таким образом определяя и и v, то можем положить х и у наименьшими элементами, отличными от {0, и, г>}. Можно найти, что количество универсальных циклов такого специального типа огромно—как минимум П—1 fn —1 (П(*!(п-*))'* ^)/((п-1)!(п-2)332п-522) прип>6. Пока что среди них неизвестен ни один, который был бы легко декодируем. Случай п = 5 рассматривается ниже. 81. Заметив, что тъ = 52, мы используем универсальный цикл для {1,2,3,4,5}, элемен- тами которого являются 13 треф, 13 бубен, 13 червей, 12 пик и джокер. Один такой цикл, найденный методом проб и ошибок с использованием цепи Эйлера, описанной в предыду- щем упражнении, представляет собой (В действительности всего имеется 114056 таких циклов, если прибегать к расстановке an = afc-i в последнюю очередь и вводить джокер в колоду, как только это становится возможным.) Если считать джокер обычной картой пик, фокус получается с вероятно- 47 СТЬЮ gj. 82. Имеется 13644 решения, хотя это количество снижается до 1981, если считать 1 = 1 = Е’ Е = Е> Е = Е Наименьшая сумма равна 5/2, наибольшая — 25/2; замечательное решение IB В в в в в в в в в в в в в +I+I+H+E = H+E+S+S+I= H+I+H+I+I представляет собой один из двух разных способов получить сумму 118/15. [Эта задача была предложена Б. А. Кордемским в его книге Математическая смекалка (1954) (задача 78 как в оригинальном издании, так и в английском переводе The Moscow Puzzles (1972)).]
864 ОТВЕТЫ К УПРАЖНЕНИЯМ 7.2.1.6 РАЗДЕЛ 7.2.1.6 1. Он может “видеть” левую скобку слева от каждого внутреннего узла, а правую— снизу от каждого внутреннего узла. Можно также связать правые скобки со встречающи- мися внешними узлами, кроме последнего □; см. упр. 20. 2. Z1. [Инициализация.] Установить Zk 4— 2к — 1 для 0 < к < п (считаем, что п > 2.) Z2. [Посещение.] Посетить сочетание zizz ... zn. Z3. [Простой случай?] Если zn-i < zn — 1, установить zn 4— zn — 1 и вернуться к шагу Z2. Z4. [Поиск у.] Установить j 4— п — 1 и z„ 4— 2п — 1. Пока Zj-i — Zj — 1, устанавливать Zj <— 2j - 1 и j <— j - 1. Z5. [Уменьшение Zj]. Завершить работу алгоритма, если j = 1. В противном случае установить Zj 4— Zj — 1 и вернуться к шагу Z2. | 3. Пометим узлы леса в прямом порядке обхода. Первые Zk — 1 элементов щ ... агп содержат к — 1 левых скобок и Zk — к правых скобок. Таким образом, имеется избыток 2к— 1 — Zk левых скобок по сравнению с правыми, когда “червяк” впервые достигает узла fc; a 2fc — 1 — г», представляет собой уровень (или глубину) этого узла. Пусть Qi... дп —инверсия pi.. ,рп, так что узел к представляет собой qk-vt узел в об- ратном порядке обхода. Поскольку к находится слева от j в pi.. ,рп тогда и только тогда, когда qk < qj, мы видим, что Ск — количество узлов j, предшествующих к в прямом порядке обхода, но следующих за ним в обратном порядке обхода, т. е. количество истинных предков fc; это вновь дает нам уровень fc. Альтернативное доказательство. Можно также показать, что обе последовательно- сти— zi ... zn и ci... сп —обладают, по сути, одной и той же рекурсивной структурой (5): Zp, = (Zp(,_i) + 1р), l(Z(p_1)Q + l”-1) при 0 < р < q; а Ср, = Cp(q_1}, (q-pjC^^g. (Рассмотрите пары к последней, предпоследней и так далее левым скобкам.) Кстати, формула lCk+i + dk = Ск + 1’ эквивалентна (11). 4. Почти истинно; просто строки di... dn и zi... zn находятся в убывающем порядке, в то время как pi... рп и ci... сп — в возрастающем. (Это лексикографическое свойство для последовательности перестановок pi... рп автоматически из лексикографического по- рядка соответствующих таблиц инверсий ci... сп не наследуется; этот результат выполня- ется для данного конкретного класса pi.. .рп.) 5. di...di5 = 020020010320104; zi...ziB = 12 567101112141519222325 26; pi ... pis = 215481097116131514123; ci ...cis =010121233421223. 6. Скобки связаны одна с другой, как обычно; мы просто искривля- ем строку и замыкаем ее в кольцо так, что агп становится соседним с ai, и замечаем, что разница между левыми и правыми скобками может быть восстановлена из контекста. Если щ соответствует низу окружности, как в табл. 1, то мы получаем приведенную диаграмму. [A. Errera, Memoires de la Classe Sci. 8°, Acad. Royale de Belgique (2) 11,6 (1931), 26 pp.] 7. (a) Она равна ) ) О ... О; установка щ 4— ‘ (’ восстановит начальное состояние строки, (б) Будет восстановлено исходное бинарное дерево (из шага В1), за исключением того, что 1п = п + 1. 8. h .. .Ils = 20450780100013015 0; п . ..ns = 3006012119 00001400; ei ... eis = 10310220100201 0;si... sis = 10 12 105301003010. 9. Узел j является (истинным) предком узла к тогда и только тогда, когда j < к и Sj + j > к. (Как следствие получаем ci Ч-1- сп = si +-1- sn.)
7.2.1.6 ОТВЕТЫ К УПРАЖНЕНИЯМ 865 10. Если j—индекс Zk fc-й левой скобки, то w-j = Ск + 1 и wj> = Ск, где j'—индекс соответствующей правой скобки. 11. Поменяйте местами левые и правые скобки в агп ... ai для получения зеркального образа ai... О2п- 12. Зеркальное отображение (4) соответствует лесу однако суть транспонирования станет более очевидной, если изобразить связи с правым братом и левым потомком горизонтально и вертикально, а затем выполнить транспониро- вание в стиле транспонирования матрицы. 13. (а) По индукции по количеству узлов можно получить* preorder(FK) = postorder(F)fi и postorder(FK) = preorder(F)K. (б) Пусть F соответствует бинарному дереву В; тогда preorder(F) = preorder(B) и postorder(F) = inorder(B), как упоминалось после 2.3.2-(6). А потому preorder(FT) = preorder(BK) = postorder(B)fi не имеет простой связи с preorder(F) или postorder(F). Но postorder(FT) = inorder(BK) = inorder(B)K = postorder(F)K. 14. В соответствии с ответом к упр. 13 postorder(FRT) = preorder(F) = preorder(B), где F естественным путем соответствует В; в свою очередь, postorder(F™) = preorder(FT)K = postorder(B). Таким образом, FRT = FTR тогда и только тогда, когда F имеет не более одного узла. 15. Если Fr естественным образом соответствует бинарному дереву В', то корнем В' является корень крайнего справа дерева в F. Левая связь узла х в В' представляет собой связь с крайним слева дочерним узлом х в FR который является крайним справа дочерним узлом х в F; аналогично правая связь представляет собой связь с левым братом х в F. Примечание: поскольку В естественным образом соответствует FRT, в ответе к упр. 13 говорится о том, что inorder(B) = postorder(FRT) = postorder(FK)K = preorder(F). 16. Лес F | G получается путем размещения деревьев F под первым в обратном порядке узлом G. Ассоциативность оператора следует из того, что F | (G | Н) = (HTGTFT)T = * Напомним, что “preorder” означает “прямой порядок обхода’,’ “postorder” — “обратный” a “in- order”— “симметричный порядок обхода’.’ — Примеч. ред. 28 Зак. 3331
866 ОТВЕТЫ К УПРАЖНЕНИЯМ 7.2.1.6 (F|G)|/7. Заметим, кстати, 4TOpostorder(F|G) = postorder(F)postorder(G) и что F|(G/f) = (F | G)H, если G—непустой лес. 17. Любой непустой лес может быть записан как F = (G | -)Н, где означает одноузловой лес; тогда FR — /7Л(СЛ|-) и FT = (ZfT|-)GT. В частности, равенство FR = FT невозможно, если только Н не является пустым лесом Л, поскольку первое дерево HR не может быть Нт | ; G также должно быть Л. Кроме того, F = FT тогда и только тогда, когда G = Нт. В этом случае невозможно также выполнение FR = FRT, если только не выполняется условие G = Л; в противном случае первое дерево GTR должно иметь больше узлов, чем само G. Похоже на то, что условие FRT = FTR не выполняется, если только не выполняется условие F = Fr. При таком предположении FRT = FTR тогда и только тогда, когда и F, и FT являются самосопряженными. Девид Кэллан (David Callan) открыл два бесконечных семейства таких лесов с параметрами г, j, к > 0: (В этих примерах i = 2, j = 3 и к = 5.) Существуют ли другие возможности? 18. Всего имеется Cis = 9694845 лесов, разбитых на 20982 класса. Наибольший класс, одним из элементов которого является ((()(()))())()((()(())())()) О, представляет со- бой цикл длиной 58968. Самыми короткими являются шесть двухэлементных классов (в соответствии с упр. 17), состоящие из строк ()()()()()()()()()()()()()()(), ()()()(((((()()()())))))()()(), ()((()())((()(())()))(()()))(), О О О О ((ОО ()()()))()()()(), ()()((((((((()()()))))))))()(), ()(((((((((((()())))))))))))() и их транспозиций. Несколько странноватые строки (((((((())))))))()()()()()()(), ()()()()()()()(((((((()))))))) и (((((((()()()()()()()()))))))) имеют клинообраз- ные бинарные деревья и образуют единый класс размером 3. Элемент (2) содержится в пу- ти, проходящем от ()((()(()()))(())((()())()))() до ((()())(()())(())(()())(()())) и содержащем 3120 элементов. В соответствии с гипотезой из ответа к упр. 19 крат- чайший возможный цикл имеет длину 6; при п = 15 имеется 66 таких циклов. (Сле- дующий в порядке возрастания размера цикл имеет длину 10 и включает в себя строку ()(()()())()((((())()))((()))).) 19. Преобразование Fj в Fj+i алгоритмом Р можно перефразировать следующим обра- зом: “найти последний узел в прямом порядке обхода, скажем, х, который имеет левого брата, скажем, у. Удалить х из его семейства и сделать его новым крайним справа дочерним узлом у. И если х < п, заменить всех потомков х (х + 1, ..., п) тривиальными одноузловыми деревьями’.’ Таким образом, преобразование FR в F^.i может быть описано следующим образом, если вспомнить, что fc-й узел Fj в прямом порядке обхода представляет собой к-й с конца
7.2.1.6 ОТВЕТЫ К УПРАЖНЕНИЯМ 867 узел .Fj1 в обратном порядке обхода: “найти первый узел в обратном порядке обхода, скажем, х, который имеет правого брата, скажем, у. Удалить х из его семейства и сделать его новым крайним слева дочерним узлом у. И если х > 1, заменить всех потомков х (х — 1, ..., 1) тривиальными одноузловыми деревьями1.’ Аналогично можно перефразировать преобразование Gj в Gj+i, выполняемое алго- ритмом В: “найти j, корень крайнего слева нетривиального дерева; затем найти к, его крайний справа дочерний узел. Удалить к и его потомки из семейства j и вставить их между j и правым братом j. Наконец, если j > 1, сделать j и его правые братья дочерними по отношению к j — 1, j — 1 —дочерним по отношению к j — 2 и т. д.” Когда это преобразование изменяет представление с левым братом и правым сыном с GfT на (см. упр. 15), оно оказывается идентичным преобразованию Fj1 в в представлении с левым сыном и правым братом. Таким образом, G^T = Fj1, поскольку выполнение этого тождества при j = 1 очевидно. (Отсюда следует, что последовательность таблиц ei.. . en-i для бинарных деревьев, сгенерированных алгоритмом В, совпадает с последовательностью таблиц dn~i ...di для строк скобок, сгенерированных алгоритмом Р; это явление продемонстрировано в табл. 1 и 2.) Ряд симметрий списков лесов был изучен М. Ч. Эром (М. С. Ег) в Comp. J. 32 (1989), 76-85. 20. (а) Это утверждение, обобщающее лемму 2.3.1Р, легко доказать по индукции. (б) Приведенная ниже процедура практически идентична алгоритму Р. Т1. [Инициализация.] Установить Ьзк-2 4— 3 и Ьзк-i 4— Ьзк 4— 0 для 1 < к < п; установить также Ьо 4— bw 4— 0 и m 4— 7V — 3, где N = Зп +1. Т2. [Посещение.] Посетить bi... Ья. (Сейчас bm — 3 и bm+i... Ья — 0... 0.) ТЗ. [Простой случай?] Установить bm 4— 0. Если bm-i - 0, установить bm-i 4— 3, m 4— m — 1 и перейти к шагу Т2. Т4. [Поиск у.] Установить j +- m — 1 и fc «- N — 3. Пока bj = 3, устанавливать bj 4— 0, bk 4— 3, j 4- j — 1 и к 4— к — 3. T5. [Увеличение bj.] Завершить работу алгоритма, если j = 0. В противном случае установить bj 4— 3, m 4— N — 3 и вернуться к шагу Т2. | [См. Ш. Закс (S. Zaks), Theoretical Comp. Sci. 10 (1980), 63-82. В этой статье Закс указывает, что еще проще сгенерировать последовательность zi... zn индексов j, таких, что bj = 3, с использованием алгоритма, почти идентичного алгоритму из ответа к упр. 2, поскольку сочетание zi... zn для корректного тернарного дерева характеризуется неравен- ствами Zfc-i < Zfc < 3fc — 2.] 21. Для решения этой задачи можно, по сути, скомбинировать алгоритм Р с алгоритмом 7.2.1.2L. Для удобства будем считать, что щ > 0 и щ + + nt >1. G1. [Инициализация.] Установить I 4— N. Затем для j = t, ..., 2, 1 (в указанном порядке) выполнить nj раз следующие операции: установить bi-j 4— j, b|_j+i 4— • • 4— Ь/_ i 4— 0 и I 4— I — j. Наконец установить bo 4— Ьн <- co 4- 0 и m 4— N — t. G2. [Посещение.] Посетить bi... bjv. (В этот момент bm > 0 и bm+i = ••• = bw = 0.) G3. [Простой случай?] Если bm-i -- 0, установить bm~i 4— bm, bm 4— 0, тп 4— m — 1 и вернуться к шагу G2. G4. [Поиску.] Установить С1 4 Ьтпч 4— 0, У 4- rn— 1 и к 4- 1. Пока bj > Ск, устанавливать к 4— к + 1, Ск 4- bj, bj 4- 0 и у 4— У — 1. G5. [Увеличение bj.] Если bj > 0, найти наименьшее I > 1, такое, что bj < ci, и выполнить обмен bj 4+ ci. В противном случае при j > 0, установить bj 4— ci и щ <— 0. В противном случае завершить работу алгоритма.
868 ОТВЕТЫ К УПРАЖНЕНИЯМ 7.2.1.6 G6. [Обращение и развертывание.] Установить j 4— к и I 4— N. Пока Cj > 0, устанавливать bi-Cj 4— Cj, I 4- I — Cj и j 4— j — 1. Затем установить т 4— N — Ск и вернуться к шагу G2. | В этом алгоритме предполагается, что N > ni + 2пг + • • • + tnt. [См. SICOMP 8 (1979), 73-81.] 22. Вначале заметим, что значение di может увеличиваться тогда и только тогда, когда в связанном представлении и = 0. В противном случае следующий за di... dn~i элемент получается путем поиска наименьшего j, такого, что dj > 0, и установки dj 4— 0, dj+i 4- dj+i + 1. Можно считать, что п > 2. К1. [Инициализация.] Установить 1к к + 1 п Гк 0 для 1 < к < п; установить также /п fn 0. К2. [Посещение.] Посетить бинарное дерево, представленное связями Z1Z2... 1п и rirz ... гп- КЗ. [Простой случай?] Установить у 4— п. Если у = 0, установить п 4— 2, Zi 4—0 и вернуться к шагу К2. В противном случае при h = 0 установить Zi 4— 2, п 4- гг, гг 4— li, I2 4— 0 и вернуться к шагу К2. В противном случае установить j 4— 2 и к <— 1. К4. [Поиск j и fc.] Если rj > 0, установить к 4— j и у 4— Tj. Затем, если j у — 1, установить j 4— j + 1 и повторить данный шаг. К5. [Перетасовка поддеревьев.] Установить lj 4— у, rj 4— ry, ry t- 1у и ly f- 0. Если j = к, перейти к шагу К2. Кв. [Сдвиг поддеревьев.] Завершить работу алгоритма, если у = п. В противном случае, пока fc > 1, устанавливать к 4— к — 1, j 4— j — 1 и rj 4— Гк- Затем, пока j > 1, устанавливать j 4— j — 1 и rj 4— 0. Вернуться к шагу К2. | (См. анализ алгоритма в упр. 45. Корш [Comp. J. 48 (2005), 488-497; 49 (2006), 351- 357; 54 (2011), 776-785] показал, что данный алгоритм, а также алгоритмы Р и В можно интересным способом расширить для t-арных деревьев.) 23. (а) Поскольку переменная zn начинает со значения 2п — 1 и проходит назад и вперед С„~1 раз, в конце ее значение оказывается равным 2п — 1 — (Cn-i mod 2), где п > 1. Кроме того, последнее значение Zj представляет собой константу для всех п > j. Таким образом, последняя строка Z1Z2 ... имеет вид 1 2 5 6 9 11 13 14 17 19 ... и содержит все нечетные числа < 2п за исключением 3, 7, 15, 31, .... (б) Аналогично перестановка в прямом порядке обхода, характеризующая последнее дерево, представляет собой 2к 2к~1 ... 135679 10..., где к = [lg nJ. В лесу узел 2J является родительским по отношению к 2-7-1 узлам {2-7-1,2J-1+1,..., 2J — 1}, где 1 < j < к, а деревья {2fc + 1,..., п} тривиальны. Примечание. Если алгоритм N после его завершения перезапустить с шага N2, он будет генерировать ту же последовательность, но в обратном порядке. Тем же свойством обладает и алгоритм L. 24. Z0Z1...Z15 = 201030065080012114; n...n5 = 0150107009014130000; fci... fciB = 0022455484101111102; qi...q15 = 211543108576914111312 и ui...uiS = 1231005031001010. (Если узлы леса F пронумерованы в обратном порядке обхода, kj является левым братом у; или, если j —крайний слева дочерний узел узла р, то kj = кр. Иначе говоря, kj—родитель j в лесу FTR. И kj также равно j — 1 — un+i_j, количеству элементов слева от у в строке qi... qn, которые меньше, чем j.) 25. Используя подсказки из алгоритмов N и L, мы хотим расширить каждое (п — 1)- узловое дерево до списка из двух или большего количества n-узловых деревьев. Идея в этом случае заключается в том, чтобы сделать п дочерним узлом п— 1 в бинарном дереве в начале и в конце каждого такого списка. В приведенном далее алгоритме используются
7.2.1.6 ОТВЕТЫ К УПРАЖНЕНИЯМ 869 дополнительные поля связи Pj и Sj, где pj указывает на родителя j в лесу, a Sj указывает на левого брата j или на крайнего правого брата j, если узел j — крайний слева в своем семействе. (Эти указатели pj и Sj, конечно же, не являются перестановками pi...pn из табл. 1 или si... sn из табл. 2. Фактически si... sn представляет собой перестановку А из упр. 33.) Ml. [Инициализация.] Установить lj 4— j + 1, rj 4— 0, Sj 4— j, Pj 4— j — 1 и Oj 4-1 для 1 < J < n, за исключением ln 4— 0. М2. [Посещение.] Посетить h... ln и n ...rn. Затем установить j 4— n. М3. [Поиск у.] Если Oj > 0, установить fc 4— pj и перейти к шагу М5, если fc j — 1. Если Oj < 0, установить к 4— Sj и перейти к шагу М4, если к ф j — 1. Если к — j — 1, в любом случае установить Oj 4------Oj, j 4— j — 1 и повторить этот шаг. М4. [Передача вниз.] (В этот момент к является левым братом j или крайним справа членом семейства j.) Если к > j, завершить работу алгоритма при j = 1, в противном случае установить х 4— pj, 1Х 4— 0, z 4— к и к 4— 0 (тем самым отсоединив узел j от его родителя и выведя его на верхний уровень). Но если к < j, установить х 4— pj + 1, z 4— sx, гь 4— 0 и sx 4— к (тем самым отсоединив узел у от fc и перенеся его на уровень вниз). Затем установить х 4- к + 1, у 4— sx, sx 4— z, Sj 4— у, rv 4— j и x 4— j. Пока x ф 0, устанавливать px 4— к n x 4— rx. Вернуться к шагу М2. M5. [Передача вверх.] (В этот момент к является родителем у.) Установить х 4— к + 1, у 4— Sj, z 4— sx, sx 4— у и гу 4— 0. Если к 0, установить у 4- рк, Гк 4— j, Sj 4- fc, sv+i 4- z и x <— У; в противном случае установить у 4— j — 1, lv 4— j, Sj 4— z и x 4— j. Пока x 0, устанавливать px 4— у и x 4— тх. Вернуться к шагу М2. | Примечания о времени работы алгоритма. Можно доказать, как в упр. 44, что стои- мость шага М3 составляет 2Сп + 3(C„-i + • • + C*i) обращений к памяти и что шаги М4 и М5 вместе стоят 8Сп — 2{Cn-i + •• + C*i) плюс удвоенное количество присваиваний х 4— тх. Последнюю величину трудно точно проанализировать; например, при п = 15 и у = 6 алгоритм устанавливает х 4- тх ровно (1,2,3,4,5,6) раз в (45,23,7,9,2,4) случаях соответственно. Однако эвристически среднее количество присваиваний х 4— тх должно составлять примерно 2 — 2J-n для заданного j, т. е. всего около (2СП — (Сп — Cn-i) — (Cn-i — Сп-?)/2 — (Сп-2 — С'п-з)/4 — • • • )/Сп ~ 8/7. Эмпирические тесты подтверждают предсказанное поведение, показывая, что общая стоимость в пересчете на одно дерево стремится к 265/21 ~ 12.6 обращений к памяти при п —»• оо. 26. (а) Необходимость условия очевидна. А если оно выполняется, можно построить F единственным образом: узел 1 и его братья являются корнями леса, а их потомки индук- тивно определяются пересекающимися разбиениями. (Фактически можно вычислить ко- ординаты глубины ci... Сп непосредственно из ограниченно растущей строки П — <ц ... а„ следующим образом: установить ci 4— 0 и io 4— 0. Для 2 < j < п, если aj > max(ai,..., aj-i), установить Cj 4— Cj-i + 1 и iOj 4— Cj, в противном случае установить Cj 4— iOj..) (б) Если ПнП' удовлетворяют условию непересекаемости, то их наибольшим общим утончением является П V П', так что можно поступить так, как в упр. 7.2.1.5-12, (а). (в) Пусть xi, ..., Хт—дочерние узлы некоторого узла в F и пусть 1 < j < к < т. Образуем F' путем удаления Xj+i, Хк из их семейства и присоединения их в качестве дочерних узлов Xj+i — 1, крайнего правого потомка Xj. (г) Очевидно из ответа к п. (в). Таким образом, леса ранжируются снизу вверх по количеству содержащихся в них внутренних узлов (которое на единицу меньше количества блоков в П). (д) Ровно 52Г=о ek(ek — 1)/2, где во = n — ei-— еп представляет собой количество корней.
870 ОТВЕТЫ К УПРАЖНЕНИЯМ 7.2.1.6 (е) Дуализация подобна операции транспонирования в упр. 12, но вместо левого сына и правого брата мы используем левого брата и правого сына и выполняем транспонирова- ние относительно младшей диагонали. (“Правые” связи теперь указывают вниз. Обратите внимание, что j является крайним справа дочерним узлом к в лесу F тогда и только тогда, когда j является левым братом к в Fd. Прямой порядок обхода FD представляет собой обращение прямого порядка обхо- да F, так же как обратный порядок обхода FT представляет собой обращение обратного порядка обхода F.) (ж) Из (е) видно, что F' покрывает F тогда и только тогда, когда FD покрывает F'D. (Следовательно, FD имеет п + 1 — к листьев, если у F их fc.) (з) F Д F' = (Fd V F'd)d. (и) Нет. Если бы это было так, то в соответствии с дуальностью должно было бы выполняться равенство. Но, например, 0101 Д 0121 = 0000 и 0101 V 0121 = 0123, в то время как leaves(OlOl) + leaves(0121) leaves(OOOO) + leaves(0123)*. [Непересекающиеся разбиения впервые были рассмотрены Г. В. Беккером (Н. W. Bec- ker) в Math. Mag. 22 (1948), 23-26. В 1971 году Г. Креверас (G. Kreweras) доказал, что они образуют решетку; см. ссылки в ответе к упр. 2.3.4.6-3.] 27. (а) Это утверждение эквивалентно упр. 2.3.3-19. (б) Если представить лес с использованием связей с правым сыном и левым братом, прямой порядок обхода будет соответствовать симметричному обходу бинарного дерева (см. упр. 2.3.2-5), a Sj будет равно размеру правого поддерева узла j. Поворот влево вокруг любого внутреннего узла этого бинарного дерева уменьшает ровно одну из коор- динат s, и величина уменьшения мала настолько, насколько это возможно при условии корректности таблицы si... sn. Следовательно, F' покрывает F тогда и только тогда, когда F получается из F' с помощью такого поворота. (Поворот в представлении с левым сыном и правым братом аналогичен, но по отношению к обратному порядку обхода.) (в) Дуализация сохраняет отношение покрытия, но заменяет “лево” на “право” и на- оборот. (г) FT F' = (Fd ± F'D)D. Таким же образом, как указывается в упр. 6.2.3-32, можно независимо минимизировать размеры левых поддеревьев. (д) Покрывающее преобразование в ответе 26, (в) очевидным образом делает Sj < s'j для всех j. (е) Истинно, поскольку FAFkFHFIF'hFAF'kF' -IF± F'. (ж) Ложно; например, 0121 V 0122 = 0123 и 0121 Т 0122 = 0122. (Но, применив дуализацию к выражению из ответа (е), получим FT F' Ч F V F'.) (з) Длиннейший путь (длиной (£)) получается путем многократного уменьшения крайнего справа ненулевого значения Sj на 1. Кратчайший путь длиной п — 1 получается путем многократного присваивания крайнему слева ненулевому Sj значения 0. leaves() означает количество листьев у аргумента этой функции. — Примеч. пер.
7.2.1.6 ОТВЕТЫ К УПРАЖНЕНИЯМ 871 В ответе к упр. 6.2.3-32 содержится много ссылок на литературу о решетках Тамари. 28. (а) Нужно просто вычислить min(c1, c'i) ... min(cn,c„) и max(ci,c'i) ... max(cn,c„), по- скольку ci... Сп является корректной последовательностью глубин тогда и только тогда, когда ci = 0 и Cj < Cj-i + 1 для 1 < j < п. (б) Это очевидно вытекает из ответа (а). Примечание: элементы любой дистрибутив- ной решетки могут быть представлены как порядковые идеалы некоторого частично- Л го упорядочения. Для случая, приведенного на рис. 62, это частичное упорядочение Л X показано справа; аналогичная треугольная сетка со сторонами длиной п — 2 дает • * • решетку Стенли порядка п. (в) Возьмем узел к леса F, у которого имеется левый брат j. Удалим к из его семей- ства и поместим его в качестве нового правого дочернего узла j, за которым разместим его бывшие дочерние узлы в качестве новых дочерних узлов /; бывшие дочерние узлы к сохра- няют своих потомков. (Эта операция соответствует замене “)(’ на ‘О’ в строке вложенных скобок. Таким образом, “идеальный” код Грея для скобок соответствует гамильтонову пути в покрывающем графе решетки Стенли. Для п = 4 имеется 38 таких путей, а именно (8,6,6,8,4,6) путей от 0123 до (0001,0010,0012,0100,0111,0120) соответственно.) (г) Истинно, поскольку отношение покрытия из ответа (в) обладает лево-правой симметрией. (F С F' тогда и только тогда, когда Wj < w' для 0 < j < 2п, где глубины червяка Wj определены в упр. 10. Если wo • • • W2n представляет собой обход червяком леса F, то обратная последовательность W2n ... wo представляет собой обход червяком ле- са Fr. Обратите внимание, что отношение покрытия изменяет только одну координату Wj. Вычислить FdF' и FUF' можно, если искать минимумы и максимумы для w, а не для с.) (д) См. упр. 9. (Таким образом, F ± F' С F Г) F', и т. д., как в упр. 27, (е).) Примечания: Стенли разработал свою решетку в Fibonacci Quarterly 13 (1975), 222- 223. Поскольку на одних и тех же элементах определены три важные решетки, требуются три различные обозначения для соответствующих упорядочений; здесь использованы сим- волы К,Ч и С, напоминающие первые буквы фамилий Креверас, Тамари и Стенли* 29. Если “склеить” шесть правильных пятиугольников, то получатся 14 вершин, коорди- наты которых после соответствующих поворотов и масштабирования будут следующими: Pioio = Роооо = Рзооо = Р2100 = (—1> V3,2/0); Pooio = Рзюо = (0 2, V30,0); Рзохо = Poioo = 0,2); Р3210 = Р0200 = (2,0,2/0); Р0210 = Р3200 = (V5, >/3,0); Рюоо = Р2000 = (—02, V3/0,0); где (х, у, z)* означает (х, —у, z), а (х, у, z)~ означает (х, у, —z). Но тогда три четырехуголь- ные “грани” не являются квадратами; более того, их вершины даже не лежат в одной плоскости. (Можно получить похожее тело с правильными квадратами и неправильными пяти- угольниками, соединив два подходящих тетраэдра и обрезав три склеенных угла. Аль- тернативные множества координат для ассоциаэдра, которые представляют определенный математический интерес, но не обладают внешней привлекательностью, рассматриваются Гюнтером Циглером (Gimter Ziegler) в Lectures on Polytopes (New York: Springer, 1995), пример 9.11.) 30. (a) /n-i ••• /1 0, поскольку внутренний узел j в симметричном порядке обхода имеет непустое правое поддерево тогда и только тогда, когда внутренний узел j +1 в симметрич- ном порядке обхода имеет пустое левое под дерево. (б) В общем случае, если след имеет вид ipi()41+11P2+1092+1 ... lp*+104fc+1, нам нужно подсчитать все бинарные деревья, узлы которых в симметричном порядке обхода имеют * В оригинале указано, что имеется в виду написание фамилии Стенли по-русски. — Примеч. пер.
872 ОТВЕТЫ К УПРАЖНЕНИЯМ 7.2.1.6 спецификацию RP1 NL91 ВНР2 NL92 В... RPk NL9k, где В означает “оба поддерева не пусты” R означает “правое поддерево не пустое, левое—пустое” L означает “левое поддерево не пустое, правое—пустое” a N означает “оба поддерева пусты’.’ Это количество в общем случае равно (Pi + ?i ) (Рз 4- фг) (Рк + qk ) i и в конкретном указанном в условии случае составляет (1+°) (°J°) (1^"°) (5£3) (°о°) (°о°) х (Т)(Т)(Т)С8 = 240240. (в) В соответствии с упр. 3 dj = О тогда и только тогда, когда Cj+i > cj. (г) В соответствии с упр. 27, (а) в общем случае след F ± F' равен /1... fn Л /{... в соответствии с упр. 27, (г) след F Т F' равен /1 • /п V /{ ... /^. [Тот факт, что в решетке Тамари всегда имеется комплементарный элемент, доказан Г. Лаксером (Н. Lakser); см. G. Gratzer, General Lattice Theory (1978), упр. 1.6.30.] 31. (a) 2n-1; см. ynp. 6.2.2-5. (6) ci < • • • < cn; di, ..., dn-i < 1; из е,- > 0 следует ej + • + = n—j; kj+i < kj + 1; Pi _ • • < Pj > • • > Pn для некоторого j; из Sj > 0 следует Sj = n — j; ui > • • - > un; Zj+i < Zj + 2. (Прочие ограничения, применимые в общем случае, снижают количество возможных кортежей с данными свойствами до 2П-1 в каждом из случаев.) (в) Истинно только в п случаях из 2П~1. (Но FT является вырожденным.) (г) Вырожденный лес со следом обладает тем свойством, что Cj+i = Cj 4 fj. Элементы j < к являются братьями тогда и только тогда, когда fj = fj+i = = fk-i = 0. Таким образом, если F" является вырожденным лесом со следом Д ... fn Л /[... то F" К F и F" К следовательно, F" К F Л F' Ч F ± F'. Согласно ответу (б) мы также имеем F ± F' Ч F". Аналогично доказывается и то, что F V F' = F Т F' представляет собой вырожденный лес со следом fi... /п V /[... f„. Таким образом, когда решетки Кравераса и Тамари ограничены вырожденными ле- сами, они становятся идентичными булевой решетке подмножеств множества {1,... ,n—1}. [Этот результат в случае решетки Тамари открыт Джорджем Марковски (George Markow- sky), Order 9 (1992), 265-290, в статье которого содержится также описание многих других свойств решеток Тамари.] 32. Предположим, что e-координатами F и F' являются соответственно зх...з„ и Sj ... s'n. Назовем индекс j замороженным, если Sj < s'j или j = 0. Мы хотим определить значения замороженных координат и максимизировать остальные координаты. Пусть во = п и пусть для 0 < к < п St = Sj — к + j, где j = max{i | 0 < г < к, г заморожено, а г 4- s, > к}. Поскольку sk < Sj — (k—j) при 0 < k—j < Sj, имеем s'fe' > sk, причем равенство достигается, когда к — замороженный индекс. Значения во в" ... в" соответствуют корректному лесу в соответствии с условием из упр. 27, (а). Если k>0H0<l<sk=8j — к + j и s^+i = sjt — к — I 4- j', то мы имеем з'/+( Ч-1 < s'k для 0 < j' — j < Sj, потому что в этом случае ву 4- j' — j < Sj. Поскольку j'4- Sj > k + l> j', не может быть j > j' или j' > j 4- Sj. Пусть F'" представляет собой лес с координатами, удовлетворяющими условию efe < s'k < sfe- Тогда min(e't, s'/') = sk, поскольку sk = s'k при замороженном fc, в противном случае sk = s'k. И наоборот, если F'" —лес, такой, что F' ± F'" = F, должно выполняться sk < s'k < s'k. Условие s'k < sk влечет за собой s'k < s'k. А если к — минимальное значение, для которого s'k > s'k, то мы имеем s'k = Sj — к 4- j для некоторого замороженного j, где 0 < j' < к vij+sj > к. Тогда из s'" > Sj вытекает k—j < s'", следовательно, sk +k—j < s'".
7.2.1.6 ОТВЕТЫ К УПРАЖНЕНИЯМ 873 Если j < к, мы имеем s'" < s" = Sj, т. е. получаем противоречие. Но из j = fc вытекает min(s'fe",s'fe) > sfe. Чтобы получить первый полудистрибутивный закон, применим этот принцип, заме- нив F на F ± G, a F' на F. Тогда из гипотез F Ч G Ч F" и F Ч Н Ч F" следует, что F Ч G Т Н Ч F". Второй полудистрибутивный закон получается путем применения дуальности к первому. (Ральф Фриз (Ralph Freese) предложил называть F" псевдодополнением (pseudo-com- plement) F' над F.) 33. (а) Пусть кХ = LLINK [fc], если LLINK [fc] 0, в противном случае пусть оно принимает значение RLINK[fc — 1], если к / 1, а если это не так, то пусть кХ равно корню бинарного дерева. Это правило определяет перестановку, поскольку кХ = j тогда и только тогда, когда к = parent(j) Ч- [j—правый дочерний узел] или к = 1 и j является корнем. Кроме того, кХ > к, когда LLINK [fc] = 0, и каХ < fc, когда RLINK [fc] = 0. [Обобщение на t-арные деревья можно найти в работе Р. Н. Edelman, Discrete Math. 40 (1982), 171-179.] (б) Используя представление (2) из ответа к упр. 26, (е), мы видим, что в этом случае X(F) равно (31)(2)(12 6 4)(5)(11 7)(1413)(9 8)(15)(10). В общем случае циклы представляют собой семейства лесов, расположенные в уменьшающемся порядке в пределах каждого цикла; узлы пронумерованы в прямом порядке обхода. [См. Dershowitz and Zaks, Discrete Math. 62 (1986), 215-218.] (в) X(Fd) = paX(F)p, где p— “зеркальная” перестановка (1 n)(2 n— 1) ..., поскольку в дуальном лесу выполняются обмен LLINK <-> RLINK и зеркальное отражение нумерации в прямом порядке обхода. (г) Разбиение цикла (xj Xk)(xi... хт) = (xi... XjXk+i xm)(xj+i... Xk) соответству- ет ответу к упр. 26, (в). (д) Согласно ответу к п. (г), каждый покрывающий путь соответствует разложению (п ... 2 1). Пусть qn обозначает количество таких разложений. Тогда мы получаем рекур- рентное соотношение qi = 1 и qn = 52"Ji(n—0("Zi)9i9n-b поскольку имеется п—I выборов, где к—j = I, при которых первая транспозиция разбивает цикл на части размерами I и п— I, после чего имеется (7-1) способов чередования последующих разложений. Решением п— 2 рекуррентного соотношения является qn — п , поскольку х—>0 х \ /tf [См. J. D6nes, Magyar Tudomanyos Akademia Matematikai Kutatd Int£zet£nek Kozleme- nyei 4 (1959), 63-70. Естественным представляется поиск соответствия между факториза- цией и помеченными свободными деревьями, поскольку количество и тех, и других равно пп~2. Вероятно, простейшее из них для данного (12...n) = (rri yi) ... (xn-i Уп-i), где хз < Уз у следующее. Предположим, что цикл, содержащий xj и yj в (xj yj)... (хп-з Уп-i), представляет собой (zi ... zm), где zi < < zm. Если yj = zm, пусть aj = zi, в противном случае пусть aj = min{z, [ z, > Xj}. Можно показать, что ai... an-i —последовательность парковки n — 1 машин, а в упр. 6.4-31 показана ее связь со свободными деревьями.] 34. Каждый покрывающий путь снизу вверх эквивалентен диаграмме Юнга формы (п — 1, п — 2,..., 1), так что можно применить теорему 5.1.4Н (см. упр. 5.3.4-38). [Подсчет таких путей в решетке Тамари остается загадкой: соответствующая после- довательность имеет вид 1, 1, 2, 9, 98, 2981, 340549, ....] 35. Умножьте на п Ч-1 и обратитесь к АММ 97 (1990), 626-630.
874 ОТВЕТЫ К УПРАЖНЕНИЯМ 7.2.1.6 на шаге 3 7 12 12 18 30 25 55 55 33 88 143 36. Путем очевидных поправок к шагам Т1-Т5 можно обобщить результат для t-арных деревьев, t > 1. П^сть Сп^ —количество t-арных деревьев с п внутренними узлами; таким образом, Сп = Сп и С$У = ((t — l)n + Если между посещениями изменяется h степеней bj, то h > х в С„1Х случаях. Так что простой случай осуществляется с вероятно- стью 1 — и 1 — (t — l)t_1/t‘, и среднее количество установок bj <— составляет (С'^*21 + • • + С[*^)/Сп^ ~ (t—l)t-1/(t* — (t—l)t-1), или 4/23 при t = 3. Можно также изучить t-арную рекурсивную струк- 1 туру Apq = 0 Ар?,-!)’ * Л(р-1)«’ 0 - (*“ !)р - 9 °’ обобщающую (5). | 1 Количество таких последовательностей степеней Срд удовлетворяет j 2 рекуррентному соотношению (21) с тем исключением, что Cpq =0 13 при р < 0 или (t — 1)р > q. Общее решение имеет вид 1 4 1 5 = о:? 1 8 и С^) = Cn((t-iyny Треугольник для t = 3 начинается так; как показано справа. [Числа Фусса-Каталана Сп впервые были рассмотрены в работе N. Fuss, Nova acta acad. scient. imp. Pet. 9 (1791), 243-251.] 37. Базовое лексикографическое рекуррентное соотношение для всех таких лесов имеет вид A(no,ni,...,nt) = OA(no —l,m,...,nt), 1 A(no,m — 1,... ,nt), ..., t А(по,щ,... ,nt — 1), где пд > п.2 + 2пз -I-1- (t—l)nt и п±, ..., nt > 0; в противном случае A(no,т,...,nt) — пустые последовательности, за исключением последовательности А(0,..., 0) = е, состоя- щей из одной пустой строки. На шаге G1 вычисляется первый элемент А(по,... ,nt). Мы хотим проанализировать пять величин: С, количество выполнений шага G2 (общее количество лесов); Е, количество переходов от шага G3 к шагу G2 (количество простых случаев); К, количество перемещений некоторых 5, в список с на шаге G4; L, количество сравнений bj с некоторым ct на шаге G5; Z, количество установок ci <— 0 на шаге G5. Тогда всего присваивание bi-Cj <— Cj в цикле на шаге G6 выполняется К — Z — щ-nt раз. Пусть п—вектор (no,ni,... ,nt) и пусть ej—единичнный вектор с 1 в позиции j. Пусть |n| = по + ni + • • • + nt и ||п|| = щ + 2п2 + • • • + tnt. Используя эти обозначения, можно записать приведенное выше базовое рекуррентное соотношение в более удобном виде: А(п) = 0А(п — ео), 1А(п —ei), ..., tA(n — et) при |n| > ||n||. Рассмотрим общее рекуррентное соотношение F(n) = f(n)+ f^F(n-ej)^[|n| > ||n||], 3=0 где F(n) = 0, если вектор п имеет отрицательный компонент. Если f(n) = [|п| =0], то F(n) = С(п)—общее количество лесов. В соответствии с ответом к упр. 2.3.4.4-32 _ (H-DIW-M) _ £ , М-i у по!щ!...п4! \no,...,nj-i,nj — l,nj+i,...,nt/
7.2.1.6 ОТВЕТЫ К УПРАЖНЕНИЯМ 875 что является обобщением формулы для Cpq из ответа к упр. 36 (которая представляет собой случай no = (t — l)g + 1 и щ = р). Аналогично при выборе других функций ядра f(n) мы получаем рекуррентные соотношения для остальных величин Е(п), К(п), L(n) и Z(n), необходимых для нашего анализа: /(п) = [|п| = по Ч-1 и По > ||п||] дает F(n) = F(n); /(п) = [|п| > по] дает F(n) = Е(п) Ч- А'(п); /(п) = [|п| = ||п||Ч-1] дает F(n) = С(п) Ч- К(п) - Z(n); /(п) = 52i<i<k<t njtnfe >0] дает F(n) = L(n). Символьные методы из упр. 2.3.4.4-32, похоже, не в состоянии привести к быстрому решению этих более общих рекуррентных соотношений, но можно легко установить значе- ние С — Е, заметив, что bm + т < N на шаге G2 тогда и только тогда, когда предыдущим шагом был G3. Следовательно, t С(п) - Е(п) = 5?С(п - /,), где f, = е, - (j-l)e0; j=i эта сумма перечисляет все подлеса, в которых щ Ч-1- nt — количество внутренних узлов (не являющихся листьями)—уменьшено на 1. Аналогично через C(l)(n) = 52{C(n - ii/i-----it ft) | «1 Ч-1- it — я} можно обозначить количество подлесов, имеющих ni Ч--1- nt — х внутренних узлов. Тогда мы имеем 1"1 К(п) — Z(n) = £с(*>(п). ®=1 Эта формула аналогична (20), поскольку к — [6, =0] > х > 1 на шаге G5 тогда и только тогда, когда bm-х > 0 и bm-x+i > • • • > Ът. Такие строки степеней в прямом порядке обхода взаимно однозначно соответствуют лесам из (п), если удалить из строки bi... Ьм подстроку bm-x+i Ьт и соответствующее количество завершающих нулей. Из этих формул можно заключить, что алгоритм Закса-Ричардса при щ = пг Ч- • • • Ч- nt Ч- 0(1) требует только 0(1) операций на одно посещение леса, поскольку С(п — Л)/С(п) = ПуПд—/(|п| — 1)^ < 1/4 Ч- О(|п| ) при j > 1. На самом деле значение К достаточно малб почти во всех случаях, представляющих практический интерес. Однако при больших значениях ni алгоритм может оказаться медленным. Например, если 1 = 1, по = т Ч- т Ч-1 и щ = тп, алгоритм, по сути, вычисляет все г-сочетания т Ч- т элементов; тогда С(п) = (т+г) и К\п) — Z(n) = = П(пгС(п)) при фиксированном г. [Чтобы обеспечить эффективность во всех случаях, можно отслеживать завершающие единицы; см. Ruskey and R?lants van Baronaigien, Congressus Numerantium 41 (1984), 53-62.] Точные формулы для К, Z и (в особенности) L, похоже, слишком сложны, но эти ве- личины можно вычислить следующим образом. Назовем “активным блоком” леса крайнюю справа подстроку ненулевых степеней; например, активным блоком 302102021230000000 является 2123. Все перестановки активного блока встречаются одинаково часто. Действи- тельно, обозначим через D(n) сумму величин “завершающие_нули(/3) — 1” взятую по всем строкам степеней в прямом порядке обхода (3 для лесов со спецификацией п. Тогда блок с n'j вхождениями j для 1 < j < t является активным ровно в D(n — n'lfi — • • • — n'tft) Ч- [n'i Ч- • • • Ч- n't = ni Ч- • • • Ч- nt] случаях. Например, для получения леса с активным блоком 2123 можно вставить подстроку 21230000 в три места заданной строки 3021020000. Вклады
876 ОТВЕТЫ К УПРАЖНЕНИЯМ 7.2.1.6 в К и L при выравнивании активного блока влево (когда перед ним нет ни одного нуля) могут быть вычислены, как в упр. 7.2.1.2-6, а именно fc(n) = w(eni(z)...ent(z)), l(n) = wfeni(z) ... e„t(z) (ni ~ zrt(z))rAz)j ' l<i<j<t ' с использованием обозначений из упомянутого упражнения. Аналогичные вклады полу- чаются и в общем случае; следовательно, К(п) = fc(n) 4- У~^Р(п — nf)fc(n'), L(n) = Z(n) + У~^Т>(п — n)l(n), Z(n) = У^Р(п — n), где суммирование выполняется по всем векторам п , таким, что n'j < rij для 1 < j < t и |n'| — ||n'|| = |n| — ||n|| и n'i 4-h n't < ni 4-1- nt — 2. Остается определить D(n). Пусть C(n; j) означает количество лесов co спецификаци- ей n = (no,..., nt), в которых последний внутренний узел в прямом порядке обхода имеет степень j. Тогда t С(п) = C(n! j) и С(п + еИ 1) = С(п + ег;2) = • • = С(п 4- ее, t) = С(п) 4- D(n). 3=1 Из этой бесконечной системы линейных уравнений можно вывести, что С(п) 4- D(n) равно Tbt / _L I \ ... V (_1)‘2++*« ( *2 + • • + г‘ ) С(п 4- (14-J24- • • • 4-it)ei - г2/2-it ft). i2=o V г2,...,г4 ) Разумеется, было бы желательно получить более простое выражение, если, конечно, оно существует. 38. Очевидно, что на шаге L1 выполняется 4п 4- 2 обращений к памяти. Переход от шага L3 к шагу L4 или L5 выполняется ровно Cj — Cj-i раз для конкретного значения j; следовательно, его стоимость составляет 2Сп 4-3 52”=0(n — j)(C3 — Cj-i) = 2Сп 4- 3(Cn-i 4- • • • 4- Ci 4- Со) обращений к памяти. Шаги L4 и L5 имеют суммарную стоимость 6С„ — 6. Таким образом, весь процесс требует 94- О(п-1^2) обращений к памяти на одно посещение. 39. Диаграмма Юнга формы (q,p) и записи ytj соответствуют элементу Apq, который имеет левые скобки в позициях р 4- q 4-1 — p2i, ..., р 4- q 4-1 — yzP, а правые—в позициях р4-д4-1 —уп, ,p+q+l-yig. Длины уголков равны {g4-l,g, ..., 1,р,р-1,..., 1}\{д-р4-1}; так что СРд = (р4- д)!(? — р4- 1)/(р!(<7 4-1)1) согласно теореме 5.1.4Н. 40. (а) Ср, = (РрЧ) —(ptj) = (Pp’) + (p^i) = (Р+р+1) (по модулю 2); теперь воспользуйтесь упр. 1.2.6-11. (б) Из 7.1.3-(36) мы знаем, что i/(n& (п 4-1)) = v(n 4-1) — 1. 41. Она равна C(wz)/(1 — zC(wz)) = 1/(1 — z — wzC(wz)) = (1 — wC(wz))/(l — w — z), где C(z)—производящая функция для чисел Каталана (18). Легко видеть, что первая из этих формул, C(wz) 4- zC(wz)2 4- z2C(wz)3 4- - • •, эквивалентна (24). [См. Р. A. MacMahon, Combinatory Analysis 1 (Cambridge Univ. Press, 1915), 128-130.] 42. (а) Элементы ai.. ,ап определяют полностью самосопряженную строку вложенных скобок <ц ... а.2п, причем имеется C,(„_,j вариантов <ц ... ап с q правыми скобками. Таким образом, окончательный ответ имеет вид (б) Ровно C(„_i)/2 [пнечетно], поскольку самотранспонированное бинарное дерево опре- деляется его левым поддеревом, (в) Ответ тот же, поскольку F является самодуальным тогда и только тогда, когда FR является самотранспонированным. 43. По индукции по д-р получаем Ср, = С, — (’_’’_1)С,_14---- = 52?=о(—1)г(’_р г)^-г-
7.2.1.6 ОТВЕТЫ К УПРАЖНЕНИЯМ 877 44. Количество обращений к памяти между посещениями составляет 3j — 2 на шаге ВЗ, h + 1 на шаге В4 и 4 на шаге В5, где h—количество присваиваний у Ч— гу. Количество бинарных деревьев, у которых h > х, для заданных j и х равно [z”--’-1-1] C(z)l+3 при j < п, поскольку такие деревья получаются путем присоединения х + 3 поддеревьев ниже j + х 4- 1 внутренних узлов. Присваивая х = 0 и используя формулу (24) и упр. 43, мы находим, что данное значение j встречается C(n_j_i)(n_j+i) -- Cn+i-j — Cn-j раз. Таким образом, сумма 223 по всем бинарным деревьям равна п+52”=1(C'„+i-j — Cn-j)j — C„4-Cn-i 4 1-Ci. Аналогично сумма (h4-1) равна ^2=0 ^ Qn-,-z-i)(n-j+i) = 52”=i С(п_л_1)(п_л+2) = 52"=i (Cn-j+2 — 2C„_j+i) = Cn+i — (Cn 4- Cn-i 4- • • • 4- Co). Таким образом, общая стоимость алгоритма составляет Сп-н 4- 4С„ 4- 2(Cn-i 4-1- Ci) 4- O(ri) = (26/3 — 10/(3n) 4- O(n-2))Cn обращений к памяти. 45. Каждый из простых случаев на шаге КЗ встречается Cn-i раз, так что общая стои- мость этого шага составляет 3Cn-i 4-8Cn-i 4-2(Cn — 2Cn-i) обращений к памяти. Выборка ri на шаге К4 выполняется [zn-*-1] C(z)l+2 = C^n-i-i)n раз; суммирование по г > 2 дает общее количество обращений к памяти в этом цикле, равное C(n_3j(n+i) = Cn+i — 3Cn 4- Cn-i. Стоимость шага К5 равна 6С„ — 12Cn-i; шаг Кб немного более сложен, но можно показать, что операция rj ч— гь выполняется Сп — 3Cn-i 4-1 раз при п > 2, в то время как операция rj ч— 0 выполняется Cn-i — п 4-1 раз. Таким образом, общее количество обращений к памяти равно Cn+i 4- 7С„ — 9Cn-i 4- п 4- 3 = (8.75 — 9.375/п 4- О(п-2))С„. Хотя это общее количество асимптотически хуже, чем у алгоритма В в ответе к упр. 44, большой отрицательный коэффициент при п-1 означает, что в действительности алгоритм В выигрывает только при п > 58; а такие большие значения п на практике не встречаются. Однако Скарбек (Skarbek) улучшил алгоритм В до приведенного далее алгоритма В*, который генерирует деревья в обратном порядке с помощью вспомогательной таблицы Ci . . . Сп• В1*. [Инициализация.] Установить Ik ч— ч— 0 и гь ч— к 4-1 для 1 < fc < п; установить также 1п ч— гп ч— 0 и установить rn+i ч— 1 (для удобства работы на шаге ВЗ*). В2*. [Посещение.] Посетить бинарное дерево, представленное массивами связей /1/2 .. -1п И Г1Г2 ...Гп- ВЗ*. [Поиск j.] Установить j Ч— 1. Пока rj = 0, устанавливать lj ч— Cj ч— 0, rj ч— j 4-1 и j ч— j 4-1. Затем завершить работу алгоритма, если j > п. В4*. [Понижение ту] Установить х ч— rj, rj ч— гх, тх ч— 0, z ч— Cj, Cj ч— х. Если z > О, установить rz ч— х; в противном случае установить lj ч— х. Вернуться к шагу В2*. | Если хранить значения п и щ в регистрах, данному алгоритму потребуется только 4Сп 4- Сп-1 4- 4(Сп-1 4- Сп-2 4- • 4- Со) 4- Зп — 6 = (67/12 4- 73/(24п) 4- О(п-2))СП обращений к памяти для генерации всех Сп деревьев. [См. W. Skarbek, Fundamenta Informatic? 75 (2007), 505-536.] 46. (а) Движение влево от (pg) увеличивает площадь на q — р. (б) Шаги влево на пути от @) до (бб) соответствуют левым скобкам в щ ... агп, и на таком fc-м шаге мы имеем q — р = сь. (в) Эквивалентно Cn+i(a:) = 22Г=о хкСк[х)Сп-к(х). Это рекуррентное соотношение выполняется, поскольку (п4- 1)-узловой лес F состоит из корня крайнего слева дерева с fc- узловым лесом Fi (потомками этого корня) и (п— /с)-узлового леса Fr (остальные деревья), и поскольку длина внутреннего пути(Е) = к 4- длина внутреннего пути(Е|) 4- длина внутреннего пути(Ег).
878 ОТВЕТЫ К УПРАЖНЕНИЯМ 7.2.1.6 (г) Строки Ар(р+г) имеют вид ао)ах) ...ar-i)<*r, где каждое gj—подстрока кор- ректно вложенных скобок. Площадь такой строки равна сумме по всем j площадей ал- плюс г — j, умноженное на количество левых скобок в а?. Примечания. Полиномы Cpq(x) введены Л. Карлицем (L. Carlitz) и Д. Риорданом (J. Riordan) в Duke Matb. J. 31 (1964), 371-388; тождество из п. (г) эквивалентно их формуле (10.12). Они также доказали, что что обобщает результат упр. 43. Из п. (в) получается бесконечная цепная дробь С(х, z) = 1/(1 — z/(l — xz/(l — x2z/(l---)))), для которой Д. Н. Ватсон (G. N. Watson) доказал ее равенство F(x, z)/F(x, z/x), где 00 t 1 \П „п2 n F(x И = V__________(-1) x z__________ cm. J. London Matb. Soc. 4 (1929), 39-48. Мы уже встречались с этой производящей функцией в несколько измененном виде в упр. 5.2.1-15. Длина внутреннего пути леса представляет собой “длину левого пути” соответству- ющего бинарного дерева, а именно сумму количества левых ветвлений на пути от корня по всем внутренним узлам. Более общий полином С* (х 7/) д.Длиналевого пути(Т)^длина правого пути(Т) где сумма берется по всем n-узловым бинарным деревьям Т, похоже, не имеет простого аддитивного рекуррентного соотношения наподобие соотношения для Спп(х) — Сп(х, 1), рассмотренного в этом упражнении; однако мы имеем Сп+1(х,у) - ^2кхкСк(х,у)уп~к х Сп-к(х,у). Следовательно, сверхпроизводящая функция C(x,y,z) = ^2nCn(x,y)zn удо- влетворяет функциональному уравнению C(x,y,z) = 1 + zC(x,y, xz)C(x,y, yz). (Случай x = у был рассмотрен в упр. 2.3.4.5-5.) 47. Cn(z) = Е, х^Р)см(х)С(n—q)(n—l—p•)(х) для О < р < п. 48. Пусть, с использованием обозначений из упр. 46, C(z) = С(—1, z) и пусть C(z)C(—z) = F(z2). Тогда C(z) = 1 + zF(z2) и C(—z) = 1 — zF(z2); так что F(z) = 1 — zF(z)2 и F(z) = C(—z). Отсюда следует, что Cpq(-1) = [zp]C'(-z2)r<’-p)/21(l + zC(-z2))[’-p4eTHo], что при четном q равно (—1)(р/2)С(р/2)(,/2-1)[рчетно], а при нечетном q равно (—1)Lp/2JQp/2JL«j/2J- Идеальный код Грея для строк Apq может существовать, только если |СР,(—1)| < 1, поскольку соответствующий граф—двудольный (см. рис. 62); |Cpq(—1)| представляет со- бой разность между размерами частей, поскольку каждый идеальный переход изменяет щ + • • • + Сп на ±1. 49. Алгоритм U при п= 15 и N = 106 дает строку ()(()())(((()())))((((())()))). 50. Внесите следующие изменения в алгоритм U. На шаге U1 добавьте присваивание г ч— 0. На шаге U3 замените проверку N < с' проверкой ат = ‘) ’. На шаге U4 замените присваивание N ч— N—с' присваиванием т ч— г+с'. Кроме того, на шагах U3 и U4 опустите присваивание ат. Строка из (1), оказывается, имеет ранг 3141 592. (Кто бы мог подумать?) 51. По теореме 7.2.1.3L N = (^J) + (n^x) + ••• + (*”); следовательно, KnN = (n2x) + (п-2) ---Co) ’ поскольку zn > 1. Теперь заметим, что N — KnN представляет собой ранг Z1Z2 ... Zn согласно формуле (23) и упр. 50. (Пусть, например, zx ... Z4 = 1256 с рангом 6 в табл. 1. Тогда zx... Z4 = 7632, N = 60 и «4 60 = 54. Заметим, что N достаточно велико, поскольку zi = 2п — 1; из рис. 47 видно, что KnN обычно превышает N, когда N малб.)
7.2.1.6 ОТВЕТЫ К УПРАЖНЕНИЯМ 879 52. Количество завершающих правых скобок имеет то же распределение, что и количе- ство ведущих левых скобок, а последовательность вложенных строк, начинающаяся с ‘ (кУ, представляет собой (fe)A(n_fc)(n_1). Следовательно, вероятность того, что dn = к, равна C^n-k'tin-i'f/Cn. Используя 1.2.6-(25), можно найти, что 2п \ _ / 2п \ _ n + t) ln + t + 17 ~C(n“t)(n+t)’ откуда следует, что среднее значение и дисперсия равны соответственно Зп/(п + 2) = 3 — 6/(п + 2) и 2п(2п2 — п — 1)/((п + 2)2(п + 3)) = 4 + О(п-1). [Моменты этого рас- пределения впервые были вычислены Р. Кемпом (R. Kemp) в Acta Informatica 35 (1998), 17-89, теорема 9. Заметим, что cn = dn — 1 обладает, по сути, тем же поведением.] 53. (а) Зп/(п + 2) в соответствии с упр. 52. (б) Н„ в соответствии с упр. 6.2.2-7. (в) 2 — 2-п (по индукции). (г) Любая (фиксированная) последовательность левых и правых ветвлений имеет одно и то же распределение шагов до того, как встретится лист (другими словами, веро- ятность встретить узел с бинарным обозначением Дьюи 01101 та же, что и вероятность встретить узел 00000). Таким образом, если X = к с вероятностью рк, каждый из 2к потенциальных узлов на уровне к является внешним с вероятностью Рк- Математическое ожидание значения 2крк, таким образом, представляет собой математическое ожидание количества внешних узлов, а именно п + 1 во всех трех случаях. (Этот результат можно проверить непосредственно, с учетом того, что р*, = C'(n_fe)(n_1)/C'n в случае (а), рк = [£] /п\ в случае (б) и рк = 2-fc+'fe=n^ в случае (в).) Примечания. Средняя длина пути в указанных трех случаях равна 0(\/n), 0(logn) и 0(п) соответственно; таким образом, этот путь оказывается более длинным при бо- лее коротком среднем пути к листу. Это поясняется тем, что вездесущие “дыры” вбли- зи корня приводят к удлинению других путей. Случай (а) имеет интересное обобще- ние для t-арных деревьев, для которых (с использованием обозначений из упр. 36) Рк = ^(n-fc)((t-i)n-i)/^"^• Таким образом, среднее расстояние до листа равно (t + l)n/((t — l)n + 2), и очень поучительно доказать с использованием телескопических рядов, что V' _ (tn\ 2_>к 1 v'(n-fc)((t-l)n-l) ~ \ п ) 54. Дифференцируя по х, получаем С’(х, z) = zC'(x,z)C(x,xz) + zC(x,z)(C(x,xz) + гС/(х,хг)), где Ci(x, z) обозначает производную C(x, z) no z. Таким образом, C'(l, z) = 2zC'(l, z)C(z)+ z2C(z)C (z); а поскольку C'(z) = C(z)2 + 2zC'(z)C''(z), можно найти решение для C'(l,z), получив z2C(z)3/(l — 2zC(z))2. Следовательно, 52 (ci + ••• 4-Cn) = [zn]C'(l,z) = 22n-1 — |(3n + 1)C„, что согласуется с упр. 2.3.4.5-5. Аналогично находим £(С1 + - + сп^ = [z"]с"(1,Z) = (5»2 + 19п + 6) + Зп)4„. Таким образом, искомые математическое ожидание и дисперсия равны соответственно + О(п) и (| - f )п3/2 + О(п).
880 ОТВЕТЫ К УПРАЖНЕНИЯМ 7.2.1.6 с;(Р+г)(1) = и((г+1)г21с^73 55. Дифференцируя, как это делалось в ответе к упр. 54, и используя формулы из упр. 46, (г) и 5.2.1-14 вместе с [zn] C(z)r/(1 — 4z) = 22n+r — 2r-J(2r^t-3), получаем r+l\zC(z)r+2\ 2 J y/l-4z J r+l\C(z)r+l—C(z)r\ 2 J y/l-4z J 22р+1—1 56. Используйте упр. 1.2.6-53, (b). [См. BIT 30 (1990), 67-68.] 57. 2So(a, b) = (2„)(2(>) + Сд^26) согласно 1.2.6-(21). Упр. 1.2.6-53 гласит, что Ё ( 2a.)(,2b.)fc = (m+l)(a + b-m)[ 2“ ) ( ™ ); \a-kj\b-k/ \m+U \a + b — mj следовательно, 2Si(a, b) = (2д)(2<>)^5- А поскольку b2Sp(a, b) — Sp+2(a,b) = Sp(a,b — 1), находим, что 2S2(a,b) = (2“+2Ь) 2о+°2ь-1; 25з(а>Ь) = + b)?- Формула (30) по- лучается путем подстановки а = т, Ь = п— ти С(х-к}(х+к) = (х-к) ~ (x-k-iY Аналогично среднее значение w2m-i равно £fc>0(2k - l)C(m_fc)(m+fc_i)C(„_m_fc+i)(n_In+fc), деленному на Сп, или 25з(т,п+1—т) — Si(m,n+1—т) _ т(п+1—т) /2т\/2п+2—2т\ //2п\ т(п+1—т)Сп п \т )\ п+1—т )/ \ п) [R. Kemp, BIT 20 (1980), 157-163; Н. Prodinger, Soochow J. Math. 9 (1983), 193-196.] 58. Суммируя по всем случаям, когда левое поддерево содержит к внутренних узлов, получаем тп—1 п— 1 timn — = 7Т1 — 71 — 0] + 1)(тп—fc— l)(n— fc— 1) 4" Сп— 1 — kt(l— l)mfc- fc=0 к—т Таким образом, тройная производящая функция t(v, w, z) = т п tiTnnvlwrn'zn удовлетво- ряет уравнению t(v,w,z) = 1 + vwzC(wz)t(v, w, z) + vzC(z)t(v,w, z). Аналогичное линейное соотношение получается и для t(w, z) = dt(v, w, z)/dv |v=i, посколь- ку 1(1, w, z) = En=0E^=0CnWmzn = (C(z) - wC(wz))/(l - w) и zC(z)2 = C(z) - 1. Алгебраические преобразования дают . _ C(z) + wC(wz) — (1 + w) 2wC(z)C(wz) C(z) — wC(wz) t(W,Z) ~ (1-w)22 (1 - w)2 и мы получаем формулу tmn = (m+l)Cn+i — 2$2^_0(m—k)CkCn-k~Cn- Теперь доказать, что Е<‘+1)с«Сп-.-. - ilfW2”-2’"'), 2п \ т J \ п — т J fc=0 можно так же легко, как в упр. 56; отсюда следует, что 2т\ /2п — 2т\ (2т + 1)(2п — 2т + 1) т/ \ п — т / (п+1)(п + 2) для 0 < т < п.
7.2.1.6 ОТВЕТЫ К УПРАЖНЕНИЯМ 881 [Р. Kirschenhofer, J. Combinatorics, Information and System Sciences 8 (1983), 44-60. Ин- формация о более высоких моментах и обобщениях представлена в работах W. J. Gutjahr, Random Structures & Algorithms 3 (1992), 361-374; A. Panholzer and H. Prodinger, J. Statis- tical Planning and Inference 101 (2002), 267-279. Обратите внимание, что производящая функция t(y, w, z) дает tlmn ’ тп—1)^(п—m—l+fe)(n—m—1) к Используя тот факт, что (*)C(n_fcj(Tn-i) = C(n_r)(m+r) при m > 1, мы получаем формулу tm„ + Сп = 52fc(fc+ l)C(m_fc)(m_i)<7(n_m)(n_m+fc+i), сумма в которой может быть записана в аналитическом виде.] 59. T(w, z) — w(C(.z) C(wz)) _ wzC(z)C(wz)+zC(z)T(w,z) + wzC(wz)T(wz) (1 - w) _ w((C(z)+C(wz)—2)/z — (l+w)C(z)C(wz) — (1—w)(C(z)—C(wz))) (1 — w)2 Следовательно, Tmn = tmn — CfeCn-fe- [Является ли данное доказательство комби- наторным?] Итак, (2т\/2n+2-2m\ 4m(n+l-m) + n + 1 1„ „ 7mn=l )( L -------Сп+1-С„ при 1 <тп<п. \т/ \ п+1— т } 2(п+1)(п + 2) 2 60. (а) Это количество правых скобок в соатомах. (Следовательно, это также количе- ство к, для которых W2it-i < 0 в соответствующем “обходе червяка’.’) (б) Для удобства положим d(‘(’) = +1 и d(‘)’) = —1. Al. [Инициализация.] Установить г <-j <- 1 и 2п. А2. [Выполнено?] Завершить работу алгоритма, если j > к. В противном случае устано- вить dj Ч— ‘ (’, j Ч— j + 1. АЗ. [Атом?] Если Ь, = *)’, установить s ч-1, г Ч— г +1 и перейти к шагу А4. В противном случае установить s Ч— 1, г Ч— г + 1, и, пока s > 0, устанавливать dj Ч— Ьг, j Ч— j + 1, s ч— s + d(bt), i ч— г + 1. Вернуться к шагу А2. А4. [Соатом.] Установить s ч— s + d(bt). Тогда, если s < 0, установить а* Ч— bi, к Ч— к — 1, i ч— г + 1 и повторить шаг А4. В противном случае установить dk ч— “)’, к ч— к — 1, г Ч— г + 1 и вернуться к шагу А2. | (в) Строка с дефектом 11, отображающаяся на строку (1), выглядит следующим образом: (()))((())))))(()((())(()))(((. В общем случае мы находим такую строку, определяя индекс т непосредственно перед 1-й с конца правой скобкой, и индексы (зд, зд), ..., (us-i,vs~i) соответствующих одна другой скобок, таких, что Uj < т < vj. II. [Инициализация.] Установить с Ч— j Ч— s Ч— 0, к ч— т Ч— 2п и ио Ч— 2n + 1. 12. [Сканирование справа налево.] Если к = 0, перейти к шагу 15; если dk = *)’, перейти к шагу 13; если dk = * (’, перейти к шагу 14. 13. [Обработка “)’.] Установить rj ч— к, j Ч— j + 1, с ч— с + 1. Если с = I, установить тч-/г-1, вч-)ииач-к. Затем уменьшить к на 1 и вернуться к шагу 12. 14. [Обработка *(’.] (В этот момент левая скобка dk соответствует правой скобке drj_f) Установить j ч— j — 1. Если rj > т, установить Uj Ч— к и Vj Ч— rj. Затем уменьшить к на 1 и вернуться к шагу 12. 15. [Подготовка к перестановке.] Установить гч— j4—1,кч— 2писЧ— 0.
882 ОТВЕТЫ К УПРАЖНЕНИЯМ 7.2.1.6 16. [Перестановка.] Пока j ф ис, устанавливать Ь* <— aj, г <— г + 1, j <— j + 1. Затем завершить работу алгоритма, если с = s; в противном случае установить Ь, <— ')’, г <— г + 1, j <— j + 1. Пока к ф vc, устанавливать bi <— ajt, гч—г + 1, к 4— к — 1. Затем установить ‘(’, гч—г + 1, fc4—fc — 1, сч—с+1и повторить шаг 16. | Примечания. Тот факт, что дефект I (0 < I < п) имеют ровно Сп сбалансированных строк длиной 2п, был открыт П. А. Мак-Мэганом (Р. A. MacMahon) [Philosophical Trans- actions 209 (1909), 153-175, §20], а затем повторно открыт К. Л. Чангом (К. L. Chung) и В. Феллером (W. Feller) [Proc. Nat. Acad. Sci. 35 (1949), 605-608] с применением произво- дящих функций. Простое комбинаторное пояснение было найдено позже Д. Л. Ходжесом- мл. (J. L. Hodges, Jr.) [Biometrifca 42 (1955), 261-262], который заметил, что если /31 .../3Г имеет дефект I > 0 и если = ак—ее крайний справа соатом, то сбалансированная строка /?1.../3fc_i (/3fc+1.../?г)а'кд имеет дефект I — 1 (и это преобразование обратимо). Эффективное отображение в данном упражнении похоже на конструкцию М. Д. Аткинсона (М. D. Atkinson) и Й.-Р. Сака (J.-R. Sack) [Information Processing Letters 41 (1992), 21-23]. 61. (а) Пусть Cj = 1 — bj-, тогда Cj < 1, ci + • • • + ex = f, и мы должны доказать, что утверждение ci + сг Ч---1- ск < f тогда и только тогда, когда к < N выполняется ровно для f циклических сдвигов. Можно определить Cj для всех целых чисел j, полагая Cj±N = Cj. Определим также Е-, для всех j, полагая Ео = 0 и Е3 = Ej-i+Cj-; тогда Ej+wt =Ej + /IhEj+i <Ej + 1. Отсюда следует, что для каждого целого я: существует наименьшее целое j = j(x), такое, что Е-, = х. Кроме того, j(x) < j(x + 1) и j(x + f) = j(x) + N. Таким образом, интересующее нас условие выполняется тогда и только тогда, когда мы выполняем сдвиг на j(x) mod N для х = 1, 2, ... или f. (История этой важной леммы рассматривается в ответе к упр. 2.3.4.4-32.) (б) Начнем с!<—тч— s-ч— 0. Затем для к = 1, 2, ..., N (в указанном порядке) выполним следующие действия: установим s ч— s + 1 — bk и, если s > т, установим т ч— s, ji С— к и I с— (I + 1) mod f. В соответствии с доказательством из п. (а) ответами будут jo, (в) Начнем с произвольной строки bjbj -. Ья, содержащей nj значений j, 0 < j < t. Применим к этой строке случайную перестановку, а затем — алгоритм из п. (б). Затем слу- чайным образом выберем значение из (jo, - и используем результат циклического сдвига в качестве определяющей лес последовательности в прямом порядке обхода. [См. L. Alonso, J. L. Remy, and R. Schott, Algorithmica 17 (1997), 162-182, где приведен еще более общий алгоритм.] 62. Битовые строки (h ... 1п, п ... гп) корректны тогда и только тогда, когда строка bi... Ьп, где bj = lj + rj, корректна в упр. 20. Следовательно, можно воспользоваться упр. 61. [См. J. F. Korsh, Information Processing Letters 45 (1993), 291-294.] 64. X = 2fc + b, где (fc, b) = (0,1), (2,1), (0,0), (5,1), (6,0), (1,1); в конце LoLi... L12 — 5 11 3 4 0 7 9 8 1 6 10 12 2. 65. См. A. Panholzer and H. Prodinger, Discrete Mathematics 250 (2002), 181-195; M. Luc- zak and P. Winkler, Random Structures & Algorithms 24 (2004), 420-443. 66. (а) “Сожмем” белые ребра, объединив соединяемые ими узлы. Например, одиннадца- ти изображенным деревьям Шрёдера для п = 3 будут соответствовать обычные деревья
7.2.1.6 ОТВЕТЫ К УПРАЖНЕНИЯМ 883 При таком соответствии левая связь означает “это дочерний узел” белая правая связь озна- чает “здесь есть и другие дочерние узлы” а правая черная связь означает “это последний дочерний узел’.’ (б) Имитируем алгоритм L, но между поворотами используем обычный код Грея для прохода по всем цветовым шаблонам имеющихся правых связей (в этом упражнении проиллюстрирована рассматриваемая последовательность для случая п = 3). Заметим, что деревья Шрёдера также соответствуют последовательно-параллельным графам, как в дереве из (53). Однако при этом налагается определенный порядок на ребра и/или сверхребра, соединенные параллельно; так что более точно говорить о соответствии последовательно-параллельным графам, уложенным на плоскости (с непомеченными реб- рами и вершинами, за исключением в и t). 67. S(z) — 1 + zS(z)(l + 2(S(z) — 1)), поскольку 1 + 2(S(z) — 1) подсчитывает правые поддеревья; следовательно, искомая функция S(z) = (1 + z — л/1 — 6z + z2)/(4z). Примечания. Мы уже встречались с числами Шрёдера в упр. 2.3.4.4-31, где G(z) = zS(z); а также в упр. 2.2.1-11, где bn = 2Sn-i при п > 2 и где было найдено рекуррентное соотношение (n—l)Sn = (6n—3)Sn-i — (п—2)Sn-2- Асимптотический рост чисел Шрёдера исследован в упр. 2.2.1-12. Треугольный массив чисел Spq, аналогичный (22), можно использовать для генерации случайных деревьев Шрёдера. Эти числа удовлетворяют соотношению Spq = Sp(g-i) + S(p_i)g + S(p_2)q + + Sog = Sp(q—1) + 2S(p-i)g — - =£((A)(7) - U-.Xri))2* = [wpz’] S(wz)/(1 — zS(wz)); двойная производящая функция в последней строке открыта Эмериком Дойчем (Emetic Deutsch). Многие другие свойства деревьев Шрёдера рассматриваются в книге Ричарда Стенли (Richard Stanley) Enumerative Combinatorics 2 (1999), упр. 6.39. 68. Единственная строка, содержащая пустую битовую строку е. (Общее правило (36) для перехода от порядка п— 1 к порядку п превращает эту строку в *0 1’, шаблон порядка 1.) 69. Первые (®) = 20 строк представляют собой шаблон рождественской елки порядка 6, если игнорировать ‘10’ в начале каждой строки. Увидеть шаблон порядка 7 немного труднее; но имеется Q) = 35 строк, в которых крайняя слева запись начинается с 0. Игнорируйте во всех таких строках крайнюю справа битовую строку, а также 0 в начале каждой остающейся битовой строки. (Возможны и другие ответы на данный вопрос.) 70. Если ст находится в столбце к шаблона рождественской елки, то о' представляет собой строку, находящуюся в столбце п — к той же строки. (Если вместо битов рассматри- вать скобки, то это правило согласно (39) дает зеркальное отображение свободных скобок в смысле ответа к упр. 11.) 71. Mtn представляет собой сумму t наибольших биномиальных коэффициентов (£), поскольку в каждой строке шаблона рождественской елки может содержаться не более t элементов множества S и поскольку мы получаем такое множество S путем выбора всех строк <т, у которых (n — t)/2 < i/(<t) < (п + t — 1)/2. (Формула = Е С п— t<2k<n+t— 1 проста, насколько это возможно; однако для малых t имеются более простые формулы, наподобие Л/(2)„ = Mn+i, а кроме того, Мщ = 2" для t > п.)
884 ОТВЕТЫ К УПРАЖНЕНИЯМ 7.2.1.6 72. Мы получим Мап, то же число, что и в предыдущем упражнении. В действительности по индукции можно доказать, что существует ровно (п2&) — (k-s) строк длиной в + п — 2к > 0. 73. 011001001000000000100101001100, 111001011011111111101101011100; см. (38). 74. В соответствии с лексикографическим порядком нужно подсчитать количество строк, крайние справа элементы которых имеют вид О*29, 10*28, ПО*27, 111000*24, 11100100*22, 111001010*21, 11100101100*19, 111001011010*18, 1110010110110*17, ..., а именно все 30- битовые строки, предшествующие строке т = 111001011011111111101101011100. Если 0 имеет на р больше единиц, чем нулей, то количество строк шаблона рожде- ственской елки, заканчивающихся битовой строкой в*п, равно количеству строк, заверша- ющихся 1₽*"; и в соответствии с упр. 71 равно M(p+i)n, так как все такие строки являются потомками начальной строки ‘0₽ 0₽-11 ... 1р’ на n-м шаге. Следовательно, ответ на поставленный вопрос Л/щго) + Л^1(2в) + + Мцг^) -I 1- Л^(12)з + Af(i3)2 = Sfelj M(2k-i-zk)(n-zk) = 0 + (28) + (27) + (27) + (2j) -I-1-8 + 4 = 84867708, где (zi,...,Z2i) = (1,2,3,6,... ,27,28) представляет собой последовательность позиций, в которых в т встречаются единицы. 75. Имеем г^") = Мп-2, поскольку строка rj") представляет собой нижний потомок первой строки в (33). Кроме того, r^ - rjn) = Mj{n^j} - Ми_1){п_2-з1 = м(.з+Г)(.п-2-з) в соответствии с формулой из ответа к упр. 74, поскольку соответствующая последователь- ность zi... zn-i для строки rj") представляет собой Р01"-1-Л Следовательно, поскольку Mjn/Mn —> j для фиксированного значения j при п —> оо, получим (п) г = у- Л™ мп 2fc+! 2>+! к=1 Мы также неявно доказали, что У"_9 Мк(п-к) = Mn+i — 1. 76. Первые (2^“) элементов бесконечной последовательности Q = 1313351313351335355713133513133513353557131335133535571335355735575779 ... представляют собой размеры строк в шаблоне порядка 2п; эта последовательность Q = 91Q293 - - - является единственной фиксированной точкой преобразования, отображающего 1н13ипн (п—2)пп(п+2) для нечетных п > 1 и представляющего два шага из (36). Пусть /(ж) = limsup^-,^ в({хМп])/п для 0 < х < 1. Эта функция, по-видимому, почти везде стремится к нулю; однако в соответствии с упр. 72 она равна 1, когда х имеет вид (qi Ч---\-qj)/2n. С другой стороны, если определить д(х) = limn_,oo s([xM„])/\/n, то функция д(х) является измеримой, с д(х) dx = х/тг, хотя д(х) бесконечна, когда /(ж) > 0. (Строгое доказательство или опровержение этих гипотез пока отсутствует.) 77. Указание следует из (39) при рассмотрении обхода червяка; так что можно действо- вать следующим образом. XI. [Инициализация.] Установить aj <— 0 для 0 < j < п; установить также х <— 1. (На последующих шагах х = 1 + 2(ai + • • • + a„).) Х2. [Коррекция хвоста.] Пока х <п, устанавливать ах 1— 1 и и- х + 2. ХЗ. [Посещение.] Посетить битовую строку ai... ап. Х4. [Простой случай?] Если ап = 0, установить ап <- 1, х <- i + 2 и вернуться к шагу ХЗ. Х5. [Поиск и продвижение а3 .] Установить ап <— 0 и j <— п — 1. Затем, пока а} = 1, устанавливать aj <— 0, х <— х—2 и j <— j—1. Завершить работу, если j = 0; в противном случае установить aj <— 1 и вернуться к шагу Х2.
7.2.1.6 ОТВЕТЫ К УПРАЖНЕНИЯМ 885 78. Истинно согласно (39) и упр. 11. 79. (а) Перечислите индексы нулей, затем индексы единиц; например, битовая строка в упр. 73 соответствует перестановке 1 4 5 7 8 10 11 12 13 20 23 25 29 30 2 3 6 9 14 15 16 17 18 19 21 22 24 26 27 28. (б) В верхней строке диаграммы Р содержатся индексы левых скобок и свободных скобок (пользуясь соглашениями из (39)); остальные индексы находятся во второй строке. Таким образом, из (38) получаем 1 2 3 6 8 9 11 12 13 14 15 16 17 18 19 21 22 24 26 27 28 4 5 7 10 20 23 25 29 30 [См. обобщение для цепочек подмультимножеств в К.-Р. Vo, SIAM J. Algebraic and Discrete Methods 2 (1981), 324-332.] 80. Этот любопытный факт является следствием упр. 79 совместно с теоремой 6 из статьи автора о диаграммах; см. Pacific J. Math. 34 (1970), 709-727. 81. Предположим, что а и а' принадлежат соответственно цепочкам длиной s и s' в шаб- лонах рождественской елки порядка пип'. В биклаттере могут находиться не более min(s, s') из ss' возможных пар строк из этих цепочек. Кроме того, с учетом (39) эти ss' пар строк в действительности при конкатенации образуют ровно min(s, s’) цепочек в шаблоне рождественской елки порядка п + п'. Следовательно, сумма min(s, s’) по всем парам цепочек равна Мп+п>, что и дает искомый результат. Кстати, при этом мы доказали неочевидное тождество ^2min(m-|-1 - 2j,n+1 - 2fc)Q(m_3)Cfc(n_fc) = Мт+п. з, fc Примечания. Это расширение теоремы Спернера было доказано независимо Г. Катона (G. Katona) [Studia Sci. Math. Hunger. 1 (1966), 59-63] и Д. Кляйтманом (D. Kleitman) [Math. Zeitschrift 90 (1965), 251-259]. Доказательство из этого упражнения и некоторые дополнительные результаты приведены в Greene and Kleitman, J. Combinatorial Theory A20 (1976), 80-88. 82. (а) Имеется как минимум одно вычисление в каждой строке тп; два их тогда и только тогда, когда s(m) > 1 и первое вычисление дает 0. Таким образом, если f тождествен- но 1, мы получаем минимум, Мп; если f тождественно 0, мы получаем максимум, Мп + 52mls(m)>1] = Мп+1- (б) Пусть /(x(m,n/2)) = 0 в Сп/? случаях, когда s(m) = 1; в противном случае пусть а)) = 1, где а определяется алгоритмом. Когда п нечетно, из этого правила вытекает, что f(cr) всегда равно 1; но когда п четно, /(ст) = 0 тогда и только тогда, когда а — первая битовая строка в своей строке. (Чтобы понять, почему это так, воспользуйтесь тем фактом, что строка, содержащая c'j в (41), всегда имеет размер s — 2.) Эта функция / в действительности монотонна; если а < г и если а имеет свободные левые скобки, то то же справедливо и для т. Например, в случае п = 8 имеем f(xi,..., xg) = ХвУ хехг V 3:42:5(3:6 V 3:7) V 3:23:3(3:4(3:5 V хе V 3:7) V з:5(з:б V 3:7)). (в) В этих обстоятельствах (45) является решением для всех п. 83. На шаге Н4 возможно не более трех исходов; на самом деле при s(m) = 1 —не более двух. [См. более строгие границы в упр. 5.3.4-31; в обозначениях из этого упражнения имеется ровно 6п + 2 монотонных булевых функций от п булевых переменных.] 84. Для решения задачи разобьем 2" битовых строк вместо цепочек на Мп блоков, где строки {«л,... ,<7S} каждого блока удовлетворяют условию ||А<7^ — AcrJ|| > 1 при г 0 j-,
886 ОТВЕТЫ К УПРАЖНЕНИЯМ 7.2.1.6 тогда условию || Аат—Ь|| < | могут удовлетворять не более одной битовой строки в каждом блоке. Пусть А! обозначает первые п — 1 столбцов A, a v — п-й столбец. Предположим, что {од ,..., од}—блок А', при этом количество индексов таково, что vTA!<Ti минимально среди всех vTAaJ. Тогда правило (36) определяет соответствующие блоки для А, поскольку ||А(<7<0)т - А(а,0)т|| = ||А(ааГ - ^Л)т11 = PW - A'aJ\\ и ||А(аЛ)Т - A(aiO)T ||2 = HA'af + v - А'аГ||2 = ||А'(<Ъ - <7i)TH2 + IMI2 + 2vTA'(a; - <71 )T > IMI2 > I- [Справедливо и многое другое; см. Advances in Math. 5 (1970), 155-157. Этот результат является расширением теоремы Д. Э. Литтлвуда (J. Е. Littlewood) и А. С. Оффорда (А. С. Offord), Mat. Sbornik 54 (1943), 277-285, которые рассмотрели случай m = 2.] 85. Если V имеет размерность п — т, можно перенумеровать координаты так, что (1, 0, ..., 0, SC11, ..., Ж1т) (0, 1, ..., 0, Ж21, .., Х2т) (0, 0, .. . , 1, *С(п—т)1, ••• j ^(п—тп)тп) представляет собой базис, в котором ни один вектор-строка Vj = (хц,... ,Xjm) не состоит из нулей. Пусть гм-m+i = (—1,0, ...,0), ..., vn = (0,0,..., —1). Тогда количество 0-1 векторов в V равно количеству 0-1 решений Ах = 0, где А представляет собой матрицу размером т х п со столбцами vi, ..., vn. Но эта величина не превосходит количество решений ||Ат|| < | min(||vi||,..., ||vn||), которое согласно упр. 84 не превосходит Мп. И обратно: базис с т = 1 и хц = (—I)3-1 дает Мп решений. [Этот результат применяется в электронном голосовании; см. диссертацию Голля (Golle) (Stanford, 2004).] 86. Сначала переупорядочим 4-узловые поддеревья так, чтобы их коды уровней пред- ставляли собой 0121 (плюс константа); затем будем сортировать все большие и большие поддеревья, пока все они не станут каноническими. В результате мы получим коды уровней 012343212321201,а соответствующими указателями на родительские узлы будут 012343218981 12 0 14. 87. (а) Условие выполняется тогда и только тогда, когда ci < • • • < с* > cjt+i > • > Сп для некоторого к, так что общее количество случаев равно ("Z*.) = 2"-1. (б) Заметим, что с,.. ,ск = c’i.. ,с'к тогда и только тогда, когда Pi -рк = р\ .. .р'к, в таких случаях cfc+1 < с^+1 тогда и только тогда, когда pfc+1 < Pk+i- 88. Посещается ровно An+i лесов, и у Ак из них рк = • • • = рп = 0. Следовательно, шаг 04 выполняется Ап раз; рк на шаге 05 изменяется Ajt+1 — 1 раз при 1 < к < п. Шаг 05 также изменяет рп всего Ап — 1 раз. Среднее количество обращений к памяти на одно посещение, таким образом, составляет 2 + 3/(а — 1) + О(1/п) и 3.534, если хранить рп в регистре. [См. Е. Kubicka, Combinatorics, Probability and Computing 5 (1996), 403-417.] 89. Если на шаге 05 присваивание рп <— р3 выполняется ровно Qn раз, то присваивание Рк <— Pj выполняется ровно Qk + Ajt+i — Ак раз для 1 < к < п, поскольку каждый префикс канонического pi-..pn является каноническим. Итак, получаем (Qi,Qs, ) = (0,0,1,2,5,9,22,48,118,288,...); и можно показать, что элементы этой последовательности имеют вид Qn = £d>i £2i<c<n/d-i гДе Опк—количество канонических родительских последовательностей pi...pn с рп = к. Однако сами значения апк пока что остаются загадкой. 90. (а) Это свойство эквивалентно 2.3.4.4-(7); вершина 0 является центроидом.
7.2.1.6 ОТВЕТЫ К УПРАЖНЕНИЯМ 887 (б) Пусть т = [п/2]. Требуется внести следующие изменения. В конце шага О1 установить Рт+i Ч— 0, а также Р2т+1 Ч— 0, если п нечетно. В конце шага 04 установить г ч— j и, пока р, 0, устанавливать г Ч— р*. (Тогда г является корнем дерева, содержащего j и к.) В начале шага 05, если k = i + mui<j, установить j Ч— г и d Ч— т. (в) Если п четно, бицентроидных деревьев с п+1 вершинами не существует. В против- ном случае найдем все пары (pi .. .р'т,р" -Рт) канонических лесов из т = [п/2] узлов, где pi ...р'т > pi'...р„; пусть pi = 0, pj+i = р', +1 и Pm+j+i = (р" + т + 1)\р" > 0] для 1 < 3 < т- (Две инкарнации алгоритма О будут генерировать все такие последовательности. Данный алгоритм для свободных деревьев разработан Ф. Раски (F. Ruskey) и Г. Ли (G. Li); см. SODA 10 (1999), S939-S940.) 91. Воспользуйтесь следующей рекурсивной процедурой W(п). Если п < 2, проце- дура возвращает единственное n-узловое ориентированное дерево. В противном случае выбираются положительные целые числа j и d так, что данная пара (у, d) получается с вероятностью dAa An-jd/((n — 1)А„). Вычисляются случайные ориентированные деревья Т' Ч— IV (п — jd) и Т" Ч— IV(d). Возвращается дерево Т, полученное путем связи j клонов Т" с корнем дерева Т'. [Combinatorial Algorithms (Academic Press, 1975), глава 25.] 92. He всегда. [P. Л. Камминс (R. L. Cummins) в IEEE Trans. U’l-13 (1966), 82 90, доказал, что граф S(G) всегда содержит цикл; см. также С. A. Holzmann and F. Harary, SIAM J. Applied Math. 22 (1972), 187-193. Однако их построение непригодно для эффек- тивного вычисления, поскольку требует предварительной информации о четности размеров промежуточных результатов.] 93. Да. Шаг S7 аннулирует шаг S3; шаг S9 отменяет удаление на шаге S8. 94. Например, можно использовать поиск вглубь с использованием вспомогательной таб- лицы bi.. .bn. i) Установить bi... Ьп Ч— 0... О, затем установить п ч— 1, го Ч— 1, bi Ч— 1 и k <- п — 1. ii) Установить е Ч— nv-i. Пока te 0, выполнять следующие подшаги. а) Установить и Ч— te. Если Ъи 0, перейти к подшагу (в). б) Установить bu Ч— w, w Ч— и, аь Ч— е, к Ч— к — 1. Завершить работу алгоритма, если к = 0. в) Установить е ч— пе. iii) Если w 1, установить v ч— w, ш ч— Ьш и вернуться к шагу (ii). В противном случае сообщить об ошибке—данный граф не является связным. В действительности работу алгоритма можно завершать, как только подшаг (б) сделает к равным 1, поскольку алгоритм S никогда не смотрит на начальное значение щ. Однако мы можем продолжить работу и выполнить проверку связности графа. 95. Описанные далее шаги выполняют поиск в ширину от и, выясняя, достижима ли вершина v без использования ребра е. Используется вспомогательный массив bi... bn указателей на дуги, который должен быть инициализирован значениями 0... О в конце шага S1; мы снова сбросим его значения в 0... 0. i) Установить ш ч— и и bw ч— v. ii) Установить f ч— nu-i. Пока t/ ф 0, выполнять следующие подшаги. а) Установить v' Ч— tf. Если bvr 0, перейти к подшагу (г). б) Если v' 0 v, установить Ь„> ч— v, Ьш ч— v', w ч— г/ и перейти к подшагу (г). в) Если f / е ф 1, перейти к шагу (v). г) Установить f ч— п/. iii) Установить и Ч— Ьи. Если и v, вернуться к шагу (ii). iv) Установить и Ч— te. Пока и v, устанавливать w Ч— Ьи, Ъи ч— 0, и ч— ш. Перейти к шагу S9 (е является мостом).
888 ОТВЕТЫ К УПРАЖНЕНИЯМ 7.2.1.6 v) Установить и <— te. Пока и v, устанавливать w <— bu, bu <— 0, и <— w. Затем вновь установить и <— te и продолжить выполнение шага S8 (е—не мост). Перед началом описанных вычислений можно воспользоваться двумя быстрыми эвристи- ками. Если du = 1, то очевидно, что е является мостом, а если 0, то очевидно, что е мостом не является (поскольку существует другое ребро между и и v). Эти частные случаи быстро обнаруживаются при поиске в ширину. Эксперименты автора показывают, что их использование, определенно, стоит затрачиваемых усилий. Например, проверка обычно позволяет сэкономить 3% общего времени работы алгоритма. 96. (а) Пусть еь — дуга к — 1 —> к. Шаги, описанные в упр. 94, устанавливают а* <— вп+i-k для п > к > 1. Тогда на уровне к мы выполняем сжатие еп_&, 1 < к < п — 1. После посещения (единственного) остовного дерева en-i - • егеп мы восстанавливаем еп_* и быстро обнаруживаем, что для п — 1 > к > 1 это мост. Таким образом, время работы линейно зависит от п; в авторской реализации алгоритма выполняется ровно 102п — 226 обращений к памяти при п > 3. Однако этот результат весьма существенно зависит от порядка ребер в начальном остовном дереве. Если на шаге S1 получается “порядок органных труб” наподобие ^n/2+l Сп/2 Сп/2+2 ^п/2—1 ---en-ie2 в позициях аг ... ап-1 при четном п, то время работы должно составлять П(п2), поскольку Q(n) проверок мостов требуют по Q(n) шагов. (б) Здесь ojt изначально представляет собой еп-к для п > к > 1, где ei —дуга п —» 1. Посещенные остовные деревья при п > 4 представляют собой соответственно 671—2 • • • 61671 j Сц— 2 • • • €-п— 1 &п—2 • • • 62671— 16п? 671— 2 • • • 63671— 167161, . . . ? 671—167161 ... 671—3• Вслед за деревом еп-2 - - - ek+2en-ienei... ejt вычисления опускаются на уровень п — к — 3 и вновь поднимаются для 0 < к < п — 4; все проверки мостов эффективны. Таким образом общее время работы квадратично (в авторской версии—35.5п2 + 7.5п — 145 обращений к памяти при п > 5). Кстати, Рп в обозначениях Stanford GraphBase представляет собой board (п, 0,0,0,1, 0,0), а Сп — board(n,0,0,0,1,1,0); вершины в Stanford GraphBase нумеруются от 0 до п—1. 97. Да, когда {s,t} равно {1,2}, {1,3}, {2,3}, {2,4} или {3,4}, ноне {1,4}. f 98. А' = о-2—\ ; это так называемый “дуальный планарный граф” к планар- ному графу А. к е (Близкие деревья А' комплементарны остовным деревьям А, и наоборот.) 99. Указанный метод работает (в чем можно убедиться по индукции по размеру дерева), по сути, по тем же причинам, по которым он работает для n-кортежей в разделе 7.2.1.1, но с дополнительным условием: мы должны последовательно обозначать каждый дочерний узел непростого узла. Листья всегда пассивны, и они не являются ни простыми, ни непростыми; поэтому мы считаем, что внутренние узлы пронумерованы от 1 до т в прямом порядке обхода. Пусть fp = р для всех внутренних узлов, за исключением тех случаев, когда р—пассивный непростой узел, ближайший к которому справа непростой узел является активным; в этом случае fp должен указывать на ближайший активный непростой узел слева. (Для такого определения мы представляем наличие искусственных узлов 0 и т + 1 слева и справа; оба эти узла непростые и активные.) F1. [Инициализация.] Установить fp <— р для 0 < р < т; установить также to <— 1, ио <— О и установить каждое zp так, чтобы rZp = dp.
7.2.1.6 ОТВЕТЫ К УПРАЖНЕНИЯМ 889 F2. [Выбор узла р.] Установить q <— m; затем, пока tg = vq, устанавливать q <— q — 1. Установить р ч— fg и fq <— q; завершить работу алгоритма, если р = 0. F3. [Изменение dp.] Установить в ч— dp, s' <— гв, к <— vp и dp <— s'. (Сейчас к = vB vBi.) F4. [Обновление значений.] Установить q <— в w. vq ч— fc ф 1. Пока dq 0, устанавливать q <— dq и vq <— fc®l. (Сейчас q является листом, который входит в конфигурацию, если fc = 0, и покидает ее, если к = 1.) Аналогично установить q ч— s' и vq <— к. Пока d, 0, устанавливать q <— dq и vq <— к. (Сейчас q является листом, который покидает конфигурацию, если fc = 0, и входит в нее, если к = 1.) F5. [Посещение.] Посещение текущей конфигурации, представленной всеми значениями листьев. F6. [Пассивизация р?] (Все непростые узлы справа от р в настоящий момент активны.) Если dp Zp, вернуться к шагу F2. В противном случае установить zp 4— в, q ч— р — 1; пока tq = vg, устанавливать q <— q — 1. (Сейчас q является первым непростым узлом слева от р; мы сделаем р пассивным.) Установить fp <— fq, fq <— q и вернуться к шагу F2. | Хотя шаг F4 может преобразовывать непростые узлы в простые и обратно, обновлять фокусные указатели не требуется, поскольку они остаются корректно установленными. 100. Завершенную программу под названием GRAYSPSPAN можно найти на веб-сайте автора. Ее асимптотическая эффективность может быть доказана с привлечением резуль- тата, полученного в упр. ПО. 102. Если это так, то обычные остовные деревья могут быть перечислены в строгом порядке двери-вертушки, при котором ребра, на каждом шаге входящие в дерево и поки- дающие его, являются смежными. Интересные алгоритмы для генерации всех ориентированных остовных деревьев с заданным корнем приведены в работах Harold N. Gabow and Eugene W. Myers, SICOMP 7 (1978), 280-287, и S. Kapoor and H. Ramesh, Algorithmica 27 (2000), 120-130. 103. (а) Рассыпание лексикографически увеличивает (xo, xi,..., xn), но не изменяет хо + • - + xn. В каком бы порядке мы ни рассыпали Vi и Vj, результат в любом случае окажется один и тот же. (б) Добавление песчинки изменяет 16 устойчивых состояний следующим образом. Дано: 0000 0001 0010 ООП 0100 0101 ОНО + 0001 0001 0010 ООП 0001 0101 ОНО 0111 + 0010 0010 ООП 0001 0010 ОНО 0111 0101 + 0100 0100 0101 ОНО 0111 1000 1001 1010 +1000 1000 1001 1010 1011 1100 1101 1110 0111 1000 1001 1010 1011 1100 1101 1110 1111 0101 1001 1010 1011 1001 1101 1110 1111 1101 ОНО 1010 1011 1001 1010 1110 1111 1101 1110 1011 1100 1101 1110 1111 0100 0101 ОНО 0111 1111 0100 0101 ОНО 0111 1000 1001 1010 1011 Рекуррентными состояниями являются девять случаев с xi + Х2 > 0 и хз + Х4 > 0. Заме- тим, что многократное добавление 0001 приводит к бесконечному циклу 0000 —> 0001 —> 0010 —> ООП —> 0001 —> 0010 —>•••; однако состояния 0001, 0010 и ООП не являются рекуррентными. (в) Если х = а(х + t), то также х = а(х + kt) для всех к > 0. Все компоненты t положительны; таким образом, х — а(х + max(di,... ,dn)t) — рекуррентное состояние. И наоборот, предположим, что х = o{d + у), где все yi > 0; тогда d + у +1 рассыпается до состояния х + t, а оно рассыпается до <r(d) + jy + t = d + jy. Следовательно, а(х + t) = a(d + у) = х. (г) Имеется N = det(a<j) классов, поскольку элементарные операции со строками (упр. 4.6.1-19) приводят матрицу к треугольному виду при сохранении конгруэнтности.
890 ОТВЕТЫ К УПРАЖНЕНИЯМ 7.2.1.6 (д) Имеются неотрицательные целые числа п»1, ..., т„, m'i, ..., т'п, такие, что х + midi + • • • + тПпОп = х + mid] + • - • + тппап и равно, скажем, у. Для достаточно большого к вектор у + kt рассыпается за mi + - - • + mn шагов до х + kt, а за m'i + • • • + тп'п шагов—до х' + kt. Следовательно, х = а(х + kt) = а(х' + kt) = х'. (е) Приведение к треугольному виду в ответе (г) показывает, что х = х + Ny для произвольных векторов у. Рассыпание сохраняет конгруэнтность; следовательно, каждый класс содержит рекуррентное состояние. (ж) Поскольку в сбалансированном ориентированном графе а = а± + - - - + а„, мы получаем х = х + а. Если х — рекуррентное состояние, мы видим, что фактически каждая вершина при сокращении х + а до х рассыпается ровно один раз, поскольку векторы {ai,..., a„} линейно независимы. И наоборот: если а(х + а) = х, мы должны доказать, что состояние х рекуррентно. Пусть zm = <т(то); должны существовать некоторые положительные /сит, для которых Zm+k = zm- Тогда каждая вершина рассыпается к раз, пока zm + ка сокращается до zm‘, следовательно, существуют векторы yj = (yji,... ,yjn) с уц > dj, такие, что (тп + к)а рассыпается до yj. Отсюда следует, что х + п(тп + к)а рассыпается до х + yi + • • • + уп и <т(х 4- j/i Ч-1- Уп) = <т(х + п(тп + к)а) = х. (з) При циклическом рассмотрении индексов остовные деревья с дугами Vj —> Vo для j = ii, ..., ik имеют n — к других дуг: Vj —> Vj-i для it < j < ii + qi и Vj Vj+i для ii + qi < j < i(+i. Аналогично рекуррентные состояния имеют Xj = 2 для j = ii, ..., ik и Xj = 1 для it < j < ii+i, за исключением Xj = 0 при j = it + qt и. qi > 0. (и) В этом случае состояние х = (x-i,..., хп) является рекуррентным тогда и только тогда, когда (п — xi,... ,п — хп) является решением задачи о парковке, упомянутой в ука- зании, поскольку t = (1,..., 1), а последовательность неприпаркованных машин оставляет “дыру” которая останавливает рассыпание х + t в х. Примечания. Эта модель барханов, разработанная Дипаком Дхаром (Deepak Dhar) [Phys. Review Letters 64 (1990), 1613-1616], привела к появлению массы статей в физиче- ских журналах. Дхар заметил, что если внести случайным образом М песчинок, то при М —> оо все рекуррентные состояния становятся равновероятными. Данное упражнение основано на работе R. Cori and D. Rossin, European J. Combinatorics 21 (2000), 447-459. Теория барханов доказывает, что каждый ориентированный граф D порождает абе- леву группу, элементы которой некоторым образом соответствуют ориентированным остов- ным деревьям графа D с корнем Vo. В частности, это истинно в случае, когда D— обычный граф с дугами и —> v и v —> и для смежных узлов и и и. Таким образом, например, можно “сложить” два остовных дерева, а некоторое остовное дерево может рассматриваться как “нуль’.’ Элегантное соответствие между остовными деревьями и ре- куррентными состояниями в частном случае, когда D представляет собой обычный граф, найдено Р. Кори (R. Cori) и И. Ле Борном (Y. Le Borgne), Advances in Applied Matb. 30 (2003), 44-52. Однако для ориентированного графа D в общем случае простое соответствие неизвестно. Предположим, например, что п = 2 и (ею, 612,620,621) = (p,q,r,s); тогда имеется рг + ps + qr ориентированных деревьев, и рекуррентные состояния соответствуют обобщенным двумерным торам, как в упр. 7—137. Но даже в “сбалансированном” случае, когда p + q>snr + s>q, по-видимому, нет простого отображения остовных деревьев на рекуррентные состояния. 104. (а) Если det(a/ — С) = 0, существует вектор х = (xi,... ,хп)т, такой, что Сх = ах и max(xi,..., хп) = xm = 1 для некоторого т. Тогда а = ахт = Стт — > Стт — = 0- (Кстати, действительная симметричная матрица, собственные зна- чения которой неотрицательны, называется положительно полуопределенной. Наше до- казательство устанавливает хорошо известный факт, что этим свойством обладает любая
7.2.1.6 ОТВЕТЫ К УПРАЖНЕНИЯМ 891 действительная симметричная матрица, у которой Стт > для 1 — т — п-) Таким образом, ао > 0; а так как (7(1,..., 1)т = (0,..., 0)т, то ао = 0. (б) det(aJ—(7(G)) = х(х —ai) ... (х—an-i); согласно теореме о матрице, соответству- ющей дереву, коэффициент при х равен (—1)"-1п, умноженному на количество остовных деревьев. (в) det(al — С(КП)) = det((a — n)I + J) = (а — п)"-1 а в соответствии с упр. 1.2.3-36; здесь J—матрица, все элементы которой равны 1. Таким образом, сторонами полного графа являются 0, п, ..., п. 105. (а) Если = a+be'y, то C(G) = naI—aJ+bC(G'). Если С — произвольная матрица, суммы элементов строк которой равны нулю, то можно доказать тождество det(xl + у J — zC) = X + ny zn det((x/z)I — С), х прибавляя столбцы от 2-го до n-го к первому, вынося за скобки (х + пу)/х, вычитая у/х раз первый столбец из столбцов со 2-го по n-й, а затем вычитая столбцы со 2-го по n-й из первого. Следовательно, принимая х = а — па, у = а, z = b, a=lub = —1, мы находим, что G имеет стороны 0, п — an-i, ..., n — ai. (В частности, этот результат согласуется с упр. 104, (в), если G'—пустой граф Кп.) (б) Отсортируйте {ао,..., а'п,_1,а'о,..., а"»-!}. (Для разнообразия—очень простой случай.) (в) Здесь G = G' ф G", так что в соответствии с (а) и (б) сторонами G являются {0,п' + п",п" + a'i,... ,п" + а'п1_1,п' + а",... ,п' + а"//_!}. (В частности, G представляет собой Кт,п, если С = Кт и G" = Кп, следовательно, сторонами Кт,п являются {0, (п — 1) • т, (т — 1) • п, т + п}.) (г) C(G) = I„'®C(G,,)+C(G')®In"I где 1п обозначает единичную матрицу размером п х п, а символ ®—прямое произведение матриц (произведение Кронекера). Сторонами C(G) являются {aj + a* | 0 < j < п',0 < к < п"}; если А и В — произвольные матрицы, собственными значениями которых являются {Ai,..., Am} и {pi,..., рп} соответственно, то собственные значения А ® 1п + 1т ® В представляют собой тп сумм Xj + р&. Доказательство. Выберем S и Т так, что S~AS и Т~ВТ—треугольные матрицы. Затем воспользуемся матричным тождеством (А®В)(С® £>) = AC&BD, чтобы показать, что (S®T)~ (A<^In+Im®B)(S®T) = (S~AS)®In+Im®(T~BT). (В частности, многократное применение этой формулы показывает, что сторонами n-мерного куба являются { (р) -0, (”) - 2, ..., (”) • 2п}, а формула (57) следует из упр. 104, (б).) (д) Если G—однородный граф степени d, его сторонами являются a3 = d—Ауц, где Ai > • • • > А„—собственные значения матрицы смежности А — (ау). Матрицей смежности графа G' является А' = ВТВ — d'In>, где В = (by) — матрица инциденций размером п х п' с элементами by = [ребро г соединено с вершиной у], а п = п'<£/2 — количество ребер. Матрицей смежности графа G является А = ВВТ — 2/„. Мы имеем хп det(a:In/ -ВТВ) = хп'det(xl„ - ВВТ\, это тождество следует из того факта, что коэффициенты det(xl—А) можно выразить через trace(Afc) для k = 1, 2, ... с использованием тождества Ньютона (упр. 1.2.9-10). Так что сторонами G являются стороны G' плюс п—п' сторон, равных 2d'. [Этот результат получен в работе Е. Б. Баховский, Сибирский Мат. журнал 6 (1965), 44-49; см. также Н. Sachs, Wissenschaftliche Zeitschrift der Technischen Hochschule Ilmenau 13 (1967), 405-412.] (e) A = A' ® А", так что сторонами являются {d"a'j + d'a'J. — | 0 < j < n', 0 < к < n"}. (ж) A(G) = Inr ® A" + A' ® In" + A! ® A" = (/„» + A!) ® (In" + A") -1„ дает стороны {(d" + l)aj + (d' + l)ajf — а^а'/ | 0 < j < n', 0 < к < n"}.
892 ОТВЕТЫ К УПРАЖНЕНИЯМ 7.2.1.6 (з) Если G' — однородный граф, можно сделать S~ A'S диагональной матрицей с эле- ментами d' —a'j, при этом одновременно S~ Jn<S является диагональной матрицей с элемен- тами (п', 0,..., 0), поскольку (1,..., 1)т представляет собой собственный вектор как для А', так и для Jni. Таким образом, в соответствии с формулой из ответа к упр. 7-96, (в), стороны равны {d+ (d' — a'jn'[j = 0])(d" — aj.') + (d' — a'j)(d" — a'£— n"[fc = 0]) | 0 < j < n', 0 < к < n"}, где d = <t(n" — d") + (n' — d')d". (и) Аналогичные рассуждения приводят к масштабированным сторонам {п"а' | 0 < j < п'} графа G', совместно с п' копиями смещенных сторон {d'n" + а* | 1 < к < п"} графа G". 106. (а) Если а—сторона пути Рп, то имеется ненулевое решение (то, ,Тп+i) урав- нений ахк = 2xfc — Xfc-i — Xfc+i для 1 < к < п, причем хо = xi и хп = хп+1- Если положить Хк = cos(2fc —1)0, то мы получим io = a;i и 2хк — Xk-i —Xk+i = 2хк — (2соз2в)хк', следовательно, 2 — 2 cos 20 = 4sin20 будет стороной, если выбрать 0 так, чтобы хп = Xn+i и чтобы все х не были нулями. Таким образом, сторонами Рп являются <топ, . -., <7(n-i)n- Поскольку с(Р„) = 1, из упр. 104, (б) должно получаться оч.. .an-i = п; следова- тельно, ТП— 1 71— 1 с(РтпРп) = пп -Ь о’лсп). 3=1 к=1 (б), (в) Аналогично, если а является стороной цикла Сп, имеется ненулевое решение указанных уравнений, такое, что хп = хо. В этом случае мы испытываем Хк = cos2/c0 и находим решения при 0 = ук/п для 0 < j < |п/2]. В то же время Хк = sin/c0 дает остальные линейно независимые решения для fn/2] < j < п. Следовательно, сторонами Сп являются «топ, <Т2п, ..., <Т(2п-2)п! и мы получаем ТП—1 П—1 т— 171— 1 c(/?m □ Сп) — И ПП (<Tjm+<T(2k)n), c(CmaC„) = mn ПП (CT(2J)тп +rr(2k)n)- J=1 k=l j=l k=l ПуСТЬ fn(x) — (x + <T1„) . . . (x + И gn(x) = (x + <T2n) • • • (x + <T(2n-2)n)- Эти полиномы имеют целые коэффициенты; в самом деле, fn(x) = Un-i(x/2 + 1) и дп(х) = 2(Тп(х/2 + 1) — 1)/х, где Тп(х) и Un(x) представляют собой полиномы Чебышева, опреде- ляемые как T„(cos0) = cosп0 и t/„(cos0) = (sm(n+l)0)/sin0. Вычисление c(PmoPn) можно свести к вычислению детерминанта размером m х тп, поскольку он является результантом fm(x) и /„(—а:); см. упр. 4.6.1-12. Аналогично ^с(РтпСп) и ^c(CmcCn) представляют собой результанты fm(x) и дп(~х), а также дт(х) и дп(—х) соответственно. Пусть Оп(х) = Па\п таким образом, ai(x) = 1, аг(т) = х + 2, аз(х) = (х + 3)(х + 1), a+lx) = х2 + 4х + 2, а&(х) = (х2 + 5х + 5)(х2 + За: + 1), ав(х) = х2 +4х + 1 и т. д. Рассматривая так называемые характеристические полиномы, можно показать, что полином ап(х) является неприводимым над целыми числами при четном п, а в противном случае представляет собой произведение двух неприводимых полиномов одной и той же степени. Аналогично если Рп(х) = IldXnSdC1)^"^’ т0 /Зп(а:) является квадратом непри- водимого полинома при п > 3. Эти факты поясняют наличие достаточно малых простых множителей в результатах. Например, наибольший простой множитель в с(Рт пРп) при т < п < 10 равен 1009; он встречается только в результанте ав(х) с ад(—х), который равен 662 913 = З2 • 73 1009. 107. Для п = (1,...,5) имеется (1,1,2,6,21) неизоморфных графов; однако в силу упр. 105, (а) нам нужно рассмотреть только случаи с < | (”) ребрами. Оставшиеся случаи при п = 4 представляют собой свободные деревья: звезда является дополнением к Ki ф Кз со сторонами 0, 1, 1, 4; а путь Pt согласно упр. 106 имеет стороны 0, 2 — у/2, 2, 2 + у/2. При п = 5 имеется три свободных дерева: звезда со сторонами 0, 1, 1, 1, 5; путь Р&, стороны
7.2.1.6 ОТВЕТЫ К УПРАЖНЕНИЯМ 893 которого—0, 2 — ф, 3 — ф, 1 + ф, 2 + ф; а также ^»-о-о со сторонами 0, n, 1, тг, тз, где (т1,Г2,гз) ~ (0.52,2.31,4.17) являются корнями уравнения х3 — 7х2 + 13а: — 5 = 0. Наконец имеется пять случаев с одним циклом: представляет собой Ki—(Кз ф Кз), так что его сторонами являются 0, 1, 1, 3, 5; Cj имеет стороны 0, 3 — ф, 3 — ф, 2 + ф, 2 + ф; £ж-о-о имеет стороны 0, п, гз, 3, гз; сторонами его дополнения афо-о являются 0, 5 — тз, 2, 5 — г2, 5 — п; а стороны |>ЧД>_О равны 0, (5 — \/13)/2, 3 — ф, 2 + ф, (5 + -х/ТЗ)/2. 108. Пусть дан ориентированный граф D с вершинами {Vi,..., и пусть etj —коли- чество дуг от Vt к Vj. Определим C(D) и его стороны, как и ранее. Поскольку матрица С(С) не обязательно симметрична, действительность сторон больше не гарантирована. Но если а представляет собой сторону, то стороной является и комплексно сопряженное значение а\ и если мы упорядочим стороны в соответствии с их действительными частями, то, как и ранее, получим ао = 0. Формула c(D) — ai... an-i/n остается корректной, если рассматривать c(D) как среднее количество ориентированных остовных деревьев, взятое по всем п возможным корням Vj. Очевидно, что стороны транзитивного турнира К„, дугами которого являются V, —> Vj при 1 < г < j < п, равны 0, 1, ..., п — 1; очевидны также и стороны его подграфов. Выводы в пп. (а)-(г) ответа к упр. 105 остаются без изменений. Например, рас- смотрим Ki —Кз, сторонами которого являются 0, 2, 3, 4; этот ориентированный граф D имеет (2,4,6,12) ориентированных остовных деревьев с четырьмя возможными корнями, и c(D) действительно равно 2-3-4/4. Обратите также внимание, что ориентированный граф о—юрЗо является своим собственным дополнением и имеет те же стороны, что и Кз. Ориентированные графы допускают также другое семейство интересных операций: если 1У и D" являются ориентированными графами на непересекающихся множествах вершин V и V", рассмотрим добавление а дуг v' —> v" и b дуг v" -> v , где v' 6 V1 и и" 6 V". Работая с определителями так же, как и в упр. 105, (а), можно показать, что полученный в результате ориентированный граф имеет стороны {0,an" + bn', ап" + a'j,..., an" + а'п> _ 1, bn' + а",..., bn' + a"„_1}. В частном случае а = 1 и b = 0 можно ввести удобное обозначение для полученного ориентированного графа: D' —> D"-, так, например, Кп = Ki —> Кп-i- Ориентированный граф К„, —> КП2 КПт на ni + пз Ч----1-пт вершинах имеет стороны {0, п™ • вт, ..., Пз вг, (гц —1) • si}, где = п^ -I- - - - + пт. Сторонами ориентированного пути Рп от Vi до Vn, очевидно, являются 0, 1, ..., 1. Ориентированный цикл Сп имеет стороны {0,1 — и>,..., 1 — и>п~1}, где и> = e2nt/n. Имеется также красивый результат для ориентированного графа, в котором ду- ги соответствуют вершинам исходного графа: стороны графа D* получаются из сторон графа D простым добавлением г* — 1 копий числа (1 < к < п), где Tk—входящая степень вершины Vk, а ак —ее исходящая степень. (Если г* = 0, мы удаляем одну сторону, равную <Tfc.) Соответствующее доказательство похоже (хотя и проще) на доказательство из упр. 2.3.4.2-21. Историческая справка. Результаты упр. 104, (б) и 105, (а) основаны на работах А. К. Кельманса, Автоматика и Телемеханика 26 (1965), 2194-2204; 27,2 (февраль 1966), 56-65 (переведена на английский язык в Automation and Remote Controi 26 (1965), 2118-2129; 27 (1966), 233-241). Мирославу Фидлеру (Miroslav Fiedler) [Czech. Math. J. 23 (1973), 298-305] принадлежит авторство упр. 105, (г); им же доказаны интересные результаты о стороне ai, которую он назвал алгебраической связностью графа G. Герман Креверас (Germain Kreweras) в J. Combinatorial Theory В24 (1978), 202-212, пересчитал остовные деревья решеток, цилиндров и торов, а также ориентированные остовные деревья ориентированных торов, таких, как Ст □ Сп- Отличный обзор сторон графов опубликован Бояном Мохаром (Bojan Mohar) в Graph Theory, Combinatorics and Applications (Wiley, 1991), 871-898; Discrete Math. 109 (1992), 171-183. Исчерпывающее обсуждение важных семейств собственных значений графов и их свойств, включая полную библиографию,
894 ОТВЕТЫ К УПРАЖНЕНИЯМ 7.2.1.6 можно найти в книге D. М. Cvetkovic, М. Doob, and Н. Sachs, Spectra of Graphs by third edition (1995). 109. Вероятно, пояснение связано с барханами из упр. 103. 110. Доказательство по индукции. Предположим, что имеется к > 1 параллельных ребер между и и v. Тогда c(G) = fcc(Gi) + с(Сг), где Gi—это граф G с отождествленными вершинами и и v, a G2 — граф G, из которого удалены эти к ребер. Пусть du = к + а и dv = к + Ь. Случай 1. G2—связный граф. Тогда аЬ > 0, так что можно записать а = х + 1 и b = з/+ 1. Мы имеем c(Gi) > ау/х 4- 3/ 4-1 и с(Сг) > ау/ху, где а — произведение по всем остальным п — 2 вершинам; легко убедиться, что ку/х + у+ 1 4- у/ху > \/(х + к)(у + к). Случай 2. Не существует таких вершин и и v, для которых G2—связный граф. Тогда каждое мультиребро графа G представляет собой мост; другими словами, G— свободное дерево, за исключением наличия параллельных ребер. В этом случае результат тривиален, если существует вершина степени 1. В противном случае предположим, что и—конечная точка и ее степень равна du = к ребер и — v. Если dv > к 4- 1, то c(G) = fcc(Gi) > аку/х, где dv = к 4-1 4- х, и легко проверить, что при х > 0 справедливо неравенство ку/х > у/(к — 1)(к 4- х). Если dv = к, мы получаем c(G) = к > у/(к — I)2. Наконец, если d„ = fc 4- 1, примем зд = и, щ = v и рассмотрим единственный путь vi — V2 — — vr, где г > 1 и vT имеет степень, большую 2; каждая пара вершин Vj и г'3+1 (1 < j < г) соединяется только одним ребром. Гипотеза индукции выполняется. [Другие нижние границы количества остовных деревьев получены в работе А. V. Kos- tochka, Random Structures & Algorithms 6 (1995), 269-274.] 111. 2 1 5 4 11 7 9 8 6 10 15 12 14 13 3. 112. Либо p находится на четном уровне и является предком q, либо q находится на нечетном уровне и является предком р. 113. prepostorder(Ffi)=postpreorder(F)fi и postpreorder(Ffi)=prepostorder(F)fi. 114. Наиболее элегантный подход, учитывающий, что лес может быть пустым, заклю- чается в такой инициализации, что CHILD (А) указывает на корень крайнего слева дерева, если таковое имеется. Затем первое посещение обеспечивается установками Q <— A, L <-1 с последующим переходом к шагу Q6. 115. Предположим, что имеется пе узлов на четных уровнях и по узлов на нечетных уровнях и что п'е узлов на четных уровнях не являются листьями. Тогда шаги (Q1,..., Q7) выполняются соответственно (пе 4- по, по, п'е, пе, п'е, по 4-1, пе) раз, включая одно выпол- нение шага Q6 в соответствии с ответом к упр. 114. 116. (а) Этот результат следует из алгоритма Q. (б) В действительности все узлы, не являющиеся обычными, строго чередуются между везучими и невезучими, начиная и заканчивая везучими узлами. Доказательство: рассмотрите лес F', полученный из леса п путем удаления крайнего слева листа, и вос- пользуйтесь индукцией по п. 117. Такие леса—это те, которые в представлении с левым сыном и правым братом дают вырожденное бинарное дерево (упр. 31). Таким образом, окончательный ответ—2"-1. 118. (a) tfc-2 для fc > 1; везение встречается только возле крайних листьев. (б) Получающееся интересное рекуррентное соотношение приводит к решению (Fk 4- 1 — (fc 4-1) mod 3) /2.
7.2.1.6 ОТВЕТЫ К УПРАЖНЕНИЯМ 895 119. Пометим каждый узел х значением v(x) = 2fc I &— метка дуги на пути от корня к rr}. Тогда значения узлов в прямообратном порядке обхода представляют собой бинар- ный код Грея Гп, поскольку в упр. 113 показано, что они удовлетворяют рекуррентному соотношению 7.2.1.1-(5). (Если применить тот же способ назначения меток к обычному биномиальному де- реву Тп и обойти его в прямом порядке, то мы получим просто целые числа 0, 1, ..., 2П - 1.) 120. Ложно. Только четыре из “полых” вершин на приведенной иллюстрации f А могут следовать за двумя “квадратными” вершинами в гамильтоновом цикле; f V } следовательно, одной полой паре не повезло. [См. Н. Fleischner and Н. V. Kronk, Monatshefte fiir Mathematik 76 (1972), 112-117.] \JgJZ 121. Более того, гамильтонов путь от и до v в Т2 существует тогда и только тогда, когда выполняются подобные условия, описанные далее. Мы оставляем и и/или v в Т(,), если они имеют степень 1, и требуем, чтобы путь в условии (i) находился в пути от и к v (исключая сами и и и). Условие (ii) также усиливается посредством замены ‘вершины степени 4’ на ‘опасные вершины’, где вершина Т</) называется опасной, если она либо имеет степень 4, либо имеет степень 2 и равна и или v. Наименьший невозможный случай—Т = Рл, где и и v выбраны так, чтобы они не являлись конечными точками. [Casopis pro Pestovani Matematiky 89 (1964), 323-338.] Следовательно, T2 содержит гамильтонов цикл тогда и только тогда, когда Т явля- ется гусеницей (caterpillar), т. е. свободным деревом, производная которого представляет собой путь. [См. Frank Нагагу and A. J. Schwenk, Mathematika 18 (1971), 138-140.] 122. (а) Можно представить выражение в виде бинарного дерева, в котором операторы представлены внутренними узлами, а цифры—внешними. Если бинарное дерево реали- зовано так, как в алгоритме В, то главное ограничение, налагаемое грамматикой, состоит в том, что если rj = к > 0, то оператором в узле j будет + или — тогда и только тогда, когда оператором в узле к будет х или /. Следовательно, общее количество возможных деревьев с п листьями равно 2nSn-i, где Sn—число Шрёдера; при п = 9 это значение равно 10646016. (См. упр. 66, только замените в нем “лево” на “право” и наоборот.) Можно быстро сгенерировать их все и убедиться, что всего имеется 1641 решение. Без умножения обходится только одно выражение, а именно 1 + 2/((3 — 4)/(5 + 6) — (7 — 8)/9); двадцать выражений требуют пять пар скобок, как в (((1 — 2)/((3/4) х 5 — 6)) х 7 + 8) х 9; совсем без скобок обходятся только пятнадцать выражений. (б) В этом случае существует 1 + 52fc=i(k)2fc+1'Sk = 23463169 возможных деревьев и 3366 решений. Самое короткое, длиной 12, было найдено Дьюдени [The Weekly Dispatch (18 June 1899)] и имеет вид 123 — 45 — 67 + 89; однако сам Дьюдени в то время не был уверен, что оно наилучшее. Самое длинное решение имеет длину 27; таких решений, как упоминалось выше, двадцать. (в) При этом количество возможных случаев резко возрастает до 2+J2®=1 (®) 4k+1Sfc = 8157 017 474, и теперь имеется 97 221 решение. Самое длинное среди них (оно единственное) имеет длину 40: ((((.1/(.2 + ,3))/.4)/.5)/(.6 — .7))/(.8 — .9). Есть пять занимательных примеров наподобие .1 +(2+ 3 + 4 +5) х6 + 7 + 8 + .9с семью плюсами, а также десять решений наподобие (1 — .2 — .3 — 4 — .5 — 6) х (7 — 8 — 9) с семью минусами. Есть только одно небольшое правило и ни одного точного способа показать, что нами получено наилучшее возможное решение. — ГЕНРИ Э. ДЬЮДЕНИ (HENRY Е. DUDENEY) (1899)
896 ОТВЕТЫ К УПРАЖНЕНИЯМ 7.2.1.7 Примечания. В первом издании Elustriertes Spieibuch fur Madchen (1864) Мари Леске (Marie Leske) содержится первое известное упоминание этой задачи; в одиннадцатом издании (1889) приведено решение 100 = 14-2 + 3 + 4 + 5 + 6 + 7 + 8x9. См. также ссылку из упр. 7.2.1.1-111. Ричард Веллман (Richard Bellman) пояснил в АММ 69 (1962), 640-643, как решается частный случай (а), когда операторы ограничены сложением и умножением и нельзя использовать скобки. Его метод динамического программирования можно применять и при решении более общей задачи для снижения количества рассматриваемых случаев. Идея состоит в определении действительных чисел, получаемых для каждого подынтервала цифр {1,..., п} для данного оператора в качестве корня дерева. Можно также сэкономить на вычислениях, отбрасывая случаи, которые для подынтервалов {1, ...,8} и {2, ...,9} не могут привести к целым решениям. Таким образом, количество существенно различ- ных деревьев, которые требуется рассмотреть, уменьшается до (а) 2 735136; (б) 6813760; (в) 739361319. Арифметика с плавающей точкой для решения данной задачи ненадежна, но можно воспользоваться подпрограммами для работы с рациональными числами из раздела 4.5.1; при этом никогда не приходится работать с целыми числами, по абсолютному значению превышающими 109. 123. (а) 2284; но 2284 = (1+2хЗ)х(4+5х67)-89. (б) 6964; но 6964 = (1/.2)х34+ 5+6789. (в) 14786; но 14 786 = —1 + 2 х (.3 + 4 + 5) х (6 + 789). [Если допустить использование знака “минус” слева от выражения, как это делал Дьюдени, то получится 1362, 2759 и 85597 дополнительных решений упр. 122, (а)-(в), включая девятнадцать более длинных выражений в задаче (а), таких как —(1 — 2) х ((3 + 4) х (5 — (6 — 7) х 8) + 9). При та- ком расширении соглашений наименьшими непредставимыми числами являются (а) 3802, (б) 8312 и (в) 17722.] Общее количество представимых целых чисел (положительных, отрицательных и нуля) оказывается равным (а) 27 666; (б) 136 607; (в) 200 765. 124. Числа Хортона-Страхлера впервые возникли при изучении течения рек в работах R. Е. Horton, ВиЕ. Geol. Soc. Amer. 56 (1945), 275-370; A. N. Strahler, Bull. Geol. Soc. Amer. 63 (1952), 1117-1142. Многие идеи по рисованию деревьев можно найти в классической статье Viennot, Eyrolles, Janey, and Arqufes, Computer Graphics 23,3 (July 1989), 31-40. РАЗДЕЛ 7.2.1.7 1. Вероятно, оно связано с гексаграммой 21 (“решение числовых задач большого объе- ма” (“crunching”)), (^); однако древние комментаторы в большей степени связывают эту гексаграмму с обеспечением законности, чем со взаимодействием электронов*. 2. (а) Пусть первый нуклеотид в кодоне (Т, С, A, G) будет представлен соответственно элементами (1=1,11,1д, 11); второй нуклеотид аналогично представлен соответственно эле- ментами (14, 14, 14,1 ?); а третий—элементами (f 4,t4>tt>O)- Наложим одно на другое все три представления. Таким образом, например, гексаграмма 34 представляет собой + гт и, таким образом, является кодоном ТТС, который отображается на ами- нокислоту F. При использовании такого соответствия гексаграммы 34-54 отображаются соответственно на значения (F, G, L, Q, W, D, S, —, Р, Y, К, A, I, Т, N, Н, М, R, V, Е, С). Кроме того, имеется три гексаграммы, отображающиеся на —это гексаграммы с номерами 1, 9 и 41, а именно s, и О, которые в I Ching имеют названия соответственно “созидание” “укрощение” и “устранение излишнего”; все они на удивление подходят для обозначения завершения белка. * По всей видимости, автор подразумевает еще одно значение слова “crunching” — “раздавли- вать с хрустом’.’ — Примеч. пер.
7.2.1.7 ОТВЕТЫ К УПРАЖНЕНИЯМ 897 (б) Рассмотрим (в 66444443 3^2 222222211) ~ Х Ю69 Способов Перестановки элементов массива генетического кода размером 4x4x4. Ровно 2402880402175789790003993681964551328451668718750185553920000000 » 2.4 х 10е3 из них содержат как минимум один отрезок, состоящий из 21 различного последовательно- го элемента. [Использование принципа включения и исключения позволяет показать, что любое мультимножество {(ni+1) - xi,..., (nr+l) • хг} с г различными элементами ипг =0 имеет ровно (п+1)(„ П }г'-^(п+1-к)кЦг-ку.ак („ ИП к„ dj Ч-l~dr=k таких перестановок, где п = ni + • • • + пт, а ак —количество неприводимых перестановок с к элементами (упр. 7.2.1.2-100).] Таким образом, только одна из каждого миллиона перестановок обладает указанным свойством. Однако имеется 4!3(2 ® 2) = 1244160 способов представления кодонов так, как это сде- лано в п. (а), и большинство из них соответствуют различным перестановкам аминокислот (за исключением взаимообмена представлений Т и С в третьей позиции). И действительно, эмпирически около 31% всех перестановок 64 гексаграмм дают соот- ветствующее отображение кодонов. Таким образом, построение в п. (а) не дает оснований подозревать авторов I Ching в каком-либо участии в разработке генетического кода. 3. Поскольку F31 — 106 = Fae + F22 + Fzo + Fi8 + Fie + Fu + Fg, миллионной строфой является Ответ на второй вопрос еще проще: F31 — (F& + Fe + Fio + Fie + Fie + F27 + F30) = 314 159. 4. Одно из двух появлений Т7ЮЗ в строке 4 должно быть "37*333; аналогично одно из зт в строке 8 должно быть ЗТОТ- В шести случаях крайние справа буквы 73 повторяются дважды в строках 3 и 4, в то время как перестановки с крайними справа буквами отсут- ствуют. Эти недочеты, вероятно, вызваны типографскими опечатками и/или ошибками переписчика, но не являются ошибками самого Донноло. 5. Последней перестановкой должна быть , а не . 6. В списке Мерсенна п-е значение тп равно п! только при 1<п<13и15<п< 38. Мерсенн знал, что 14! = 87178291200 ттги = 8778291200, поскольку он вставил отсутствующую единицу в личную копию книги (в настоящее время являющуюся соб- ственностью Bibliothfeque Nationale; ее факсимиле было опубликовано в 1963 году). Однако остальные ошибки в его книге не просто типографские, поскольку они распространяются на последующие значения, за исключением случая 77150, а именно: тзо = 39! + 1026 — 1010; 7П4о = 40тпзд; ТП41 = 41тп4о — 4 • 1025 — 14 • 1011; тп„ — nmn-i для п = 42, 43, 44, 46, 47, 48, 49, 55, 60 и 62; тзо = бОттид + 1066; 77151 = 51 • 50 • 77149. Похоже, при вычислении 77145 = 9 • 45 • ТП44 — 1О40 + 1029 Мерсенн хотел упростить вычисления, поскольку легче выполнить умножение на 5 и на 9, чем на 45. Но он ошибся и выполнил умножение на 9 дважды. Большинство ошибок указывают на ненадежность метода умножения, который может зависеть от того, какие счеты использованы для умножения: 77152 = 52t7isi + 5-1056 — 2 -1047 + 1034 ; 77153 = 53тт152 — 4 • 1029; 77154 = 54тп5з + 1016; 77157 = 57тп56 4- 1033 + 1024; тзз = 5877157 + 1067 -1035 +1032 +11 1026; 77159 = 59t7i58 + io66 +1049 -1028; шв1 = 61т60 — 5 • 10®1 j 77163 = 6377162 + 1082 - 1074; 77164 = 64тп6з + 3 • 1081 + 1067 + 2 1038 - 2 • 1033 - 1023. Оставшийся случай, 77156 » 10.912тп55, непостижим. Это значение = 6677155 (по модулю 1017),| но эти цифры также ничего не говорят ни уму, ни сердцу. Можно ли их как-то правдопо- добно пояснить? 29 Зак. 3331
898 ОТВЕТЫ К УПРАЖНЕНИЯМ 7.2.1.7 Примечания. Анастасиус Кирхер (Athanasius Kircher) явно копировал результаты Мерсенна, когда табулировал п! для 1 < п < 50 на с. 157 своей книги Ars Magna Sciendi (1669), поскольку он воспроизвел все ошибки Мерсенна. Кирхер, впрочем, использовал значения 10mi4, 77145/10 и 10rri49 вместо mi4, ТП45 и 77149; вероятно, он пытался сделать последовательность растущей более равномерно. Неясно, кто первым вычислил точное значение 39!; в упр. 1.2.5-4 описана история числа 1000!. 7. Базовыми перестановками являются 12345, 13254, 14523, 15432, 12453, 14235, 15324, 13542, 12534, 15243, 13425, 14352. Но после этого мы находим, что все 60 четных перестановок одновременно и живы, и мертвы, поскольку (9) отличается от (8) на четную перестановку. (Кроме того, если бы как-то удалось исправить ситуацию при тг = 5, половина живых перестановок при п = 6 стали бы нечетными.) 8. Например, можно заменить (9) на G71G3 • • • Gn— 102^1 j ^4 • • • GnG^G2 j —1®2 • Gn—2®1 Gnj где для перестановок из (8) выполняются обмен местами двух конечных элементов слева и справа и циклический сдвиг последовательности влево на один элемент. Такое изменение работает правильно, поскольку все перестановки имеют корректную четность, а живые и мертвые перестановки содержат ai во всех возможных положениях. (По сути, мы получаем дуальную таблицу Симса для чередующейся группы, как в 7.2.1.2-(32); однако вместо (0,1,..., тг — 1) наши элементы именованы как (тг, тг — 1,..., 1).) Более простой способ генерации перестановок с корректными знаками был опубли- кован Э. Безу (Е. Bezout) [Мёто/гез Acad. Royale des Sciences (Paris, 1764), 292]. Каж- дая перестановка ±ai... fln-i множества {1,..., тг — 1} дает тг других, ±ai... an-ian Т €11 • • • О/п—2^п^,п— 1 i * * ’ • 9. (•, \, Т, Y, i, o,1,V,А, ^); или, пожалуй, мы должны сказать (% A,V,1, о, I, Y, Т, \, •). Примечания. Для порядковых номеров в уравнениях использовалась иная система; например, ‘j’ означало 200. Кроме того, следует заметить, что (11) на самом деле пред- ставляет собой перевод работы аль-Самаваля на современный арабский; Ахмад и Рашед основывались на копии XIV века, в которой использовалось похожее, но более старое начер- тание цифр: (о, \, Y,Y,, ,1,V,A,^). Сам аль-Самаваль мог пользоваться еще более древним начертанием. 10. Если все 56 вариантов равновероятны, ответ равен 567/s6 ~ 258.2, как в задаче о со- бирании купонов (упр. 3.3.2-8). Но (6,30,20) случаев имеют вероятности соответственно (1/216,1/72,1/36); так что верным будет ответ /•ОО / (1 - (1 - e-t/216)6 (1 - e-t/72)30(l - e-t/36)20) dt » 546.6, Jo что составляет около 42% от верхней границы 2167/216- [См. Р. Flajolet, D. Gardy, and L. Thimonier, Discrete Applied Math. 39 (1992), 207-229.] 11. В таблице приведены (|) = 20 сочетаний (b, c, d, В, C, D) по три; кроме того, они находятся в лексикографическом порядке, если считать b<c<d<B<C<D. Буква t ( fr ) означает “переход от нижнего регистра к верхнему’.’ [См. A. Bonner, Selected Works of Ramon Llull (Princeton: 1985), 596-597.] На рисунке есть две опечатки: в начале строки 6 ‘d’ должно быть ‘Ь’; в конце строки 18 ‘с’ должно быть ‘d’. Строка 1 была бы более согласованной с остальными, если бы имела вид ь с ь с но в этой строке переключение регистра, конечно же, не требуется. 12. Умножьте цикл Пуансо на 5 и прибавьте 2 (по модулю 7).
7.2.1.7 ОТВЕТЫ К УПРАЖНЕНИЯМ 899 13. При наличии п различных букв лучше писать только п различных строк. а. аа. ааа Ь. аЬ. ааЬ. аааЬ. ЪЬ. abb. aabb. aaabb Тогда присваивание весов (а, 6) = (1,4) дает числа от 1 до 11, как в (18). (Первая строка (16) также должна быть опущена.) Аналогично для {а, а, а, Ъ, Ь, с} можно неявно присвоить с вес 12 и добавить дополнительную строку с. ас. aac. ааас. be. abc. aabc. aaabc. bbc. abbc. aabbc. aaabbc. [Я. Бернулли (J. Bernoulli) почти сделал это в Ars Conjectandi, часть 2, глава 6.] 14. ABC ABD ABE ACD АСЕ АСВ ADE ADB ADC AEB AEC AED BCD ВСЕ ВСА BDE BDA BDC ВЕА ВЕС BED ВАС BAD BAE CDE CDA CDB CEA CEB CED CAB CAD CAE CBD CBE CBA DEA DEB DEC DAB DAC DAE DBC DBE DBA DCE DCA DCB EAB EAC EAD EBC EBD EBA ECD ЕСА ECB EDA EDB EDC. Это облексное упорядочение (см. алгоритм 7.2.1.3R), циклически проходящее по еще неиспользованным буквам. [Аналогичное упорядочение использовалось при построении всех 120 перестановок пяти букв в каббалистической работе Sba‘ari Tzedeq, приписываемой Натану бен Саадьяху Харару (Natan ben Sa'adyah Наг’аг) из Мессины, Сицилия, жившему в XIII веке; см. Le Porte della Giustizia (Milan: Adelphi, 2001).] 15. После j мы помещаем (n— 1)-сочетания с повторениями множества {j,..., m}, так что ответ— (("»+1-i)+(n-1)-iJ - (m+"J-'-1). [Жан Боррель (Jean Borrel), известный также как Бутеонис (Buteonis), указал этот результат в своей книге Logistica (Lyon: 1560) на с. 305- 309. Он протабулировал все выбрасывания п костей для 1 < п < 4, а затем использовал суммирование по j, чтобы получить, что есть всего 56 +35 + 20+10 + 4+1 = 252 различных результата выпадения п = 5 костей и 462 для п = 6.] 16. N1. [Инициализация.] Установить г <— п, t <— 0 и ао <— 0. N2. [Продвижение.] Пока г > q, устанавливать t +- t + 1, at <— qnrt- г — q. Затем, если г > 0, установить t <— t + 1 и <4 <- г. N3. [Посещение.] Посетить композицию ai... at. N4. [Поиск у.] Устанавливать j +- t, t — 1, ... до тех пор, пока не будет выполнено условие aj ф 1. Завершить работу алгоритма, если j = 0. N5. [Уменьшение а-,.] Установить aj <— aj — 1, г <— t — j + 1, t <— у; вернуться к шагу N2. | Например, композициями для п = 7 и q = 3 являются 331, 322, 3211, 313, 3121, 3112, 31111, 232, 2311, 223, 2221, 2212, 22111, 2131, 2122, 21211, 2113, 21121, 21112, 211111, 133, 1321, 1312, 13111, 1231, 1222, 12211, 1213, 12121, 12112, 121111, 1132, 11311, 1123, 11221, 11212, 112111, 11131, 11122, 111211, 11113, 111121, 111112, 1111111. Сутры 79 и 80 Нараяны (Narayana), по сути, описывают приведенную процедуру, но с обращенными строками (133, 223, 1123, ...), поскольку он предпочитал уменьшаю- щийся солексный порядок. [Ранее Сарнгадева (Sarngadeva) в SangTtaratnakara §5.316-375, детально разработал теорию для множества всех композиций (ритмов), которые могут быть образованы базовыми частями {1,2,4,6}.] 17. Количество V„ посещений равно = 0(о£); см. упр. 5.4.2-7. Количество Хп выполнений проверки aj = 1 на шаге N4 удовлетворяет уравнению Хп = Хп-1 + • • • + Хп-д +1, и мы находим Хп = Vo Ч-----Ь V„ = (qVn + (q - 1)14-1 -I-1- K-9+i - l)/(? - 1) = 0(Vt). Количество Yn установок at <— q на шаге N2 удовлетворяет тому же рекуррентному соотношению, и мы находим, что Yn = Хп_д. И наконец условие г — 0 на шаге N2 выполняется Vn-q раз.
900 ОТВЕТЫ К УПРАЖНЕНИЯМ 7.2.1.7 18. Если воспользоваться римской записью чисел, то этот год записывается как MD- CLXVI, aM>D>C>L>X>V>l. 19. В строках 329 и 1022 (всего среди 1022 строф Путеануса данным свойством обладают 139). 20. Если ‘tria’ предшествует ‘lumina’, то имеется 5! х 2! х (11,12,12,16) способов полу- чить дактиль в (1,2,3,4)-й стопе соответственно; если ‘lumina’ предшествует ‘tria’, таких способов 5! х 2! х (16,12,12,11). Таким образом, общее количество перестановок — 24480. [Лейбниц (Leibniz) рассматривал эту задачу в конце своей Dissertatio de Arte Combinatoria и получил ответ, равный 45870; однако его рассуждения переполнены ошибками.] 21. (а) Ясно, что производящая функция 1/((1 — zu — ?/u2)(l — zv — j/u2)(l — zw — yw2)) равна tp,e,r,.,t>o №> 9>s> (б) Если ‘tibi’ соответствует a ‘Virgo’ соответствует---, то общее количество равно 3! 3!, умноженному на 52^=0(/(2^ + 1> 6 — 2к, 2; 3,3) + f(2k, 6 — 2к, 2; 2,3)), а именно 36((7+7) + (9+5) + (10+5) + (14+7)) = 2304. В противном случае ‘tibi’ соответствует —, ‘Virgo’ представляет собой —а общее количество равно 2! 3!, умноженному на SLo(/(2fc> 5-2*;,2; 3> 2)+/(2*, 6-2*, 1; 3,2)), т. е. общее количество гекзаметров составляет 12((7+6) + (5+4) + (4+4) + (0+6)) = 432. (в) Пятая стопа начинается со второго слога ‘с?1о’, ‘dotes’ или ‘Virgo’. Следовательно, дополнительное количество равно 3! 3! f(2k, 5—2*;, 2; 3,2) = 36(7+5+4) = 576, и общее количество составляет 2304 + 432 + 576 = 3312. 22. Пусть а € {quot, sunt, tot}, fi € {c?lo, dotes, Virgo}, а = sidera и r = tibi. Ана- лиз Преете, по сути, эквивалентен анализу Бернулли, но он забыл включить 36 случаев aaarfifiafi. (В его защиту можно сказать, что эти случаи бесплодны с точки зрения поэзии; Путеанус не нашел им применения.) В издании 1675 года книги Преете опущены также все перестановки, заканчивающиеся на rfi. Уоллис разделил все возможности на 23 типа: Ti U Тг U • U Тгз. Он заявил, что типы 6 и 7 дают по 324 строфы; но в действительности |Тв| = |Тт| = 252, поскольку его переменная г должна быть 7, а не 9. Кроме того, многие решения подсчитаны им дважды: |Тз П Ts| = 72, |Тг П Т?\ = |Ts П Т?| = |Тз Г) Те| = |7е П Тщ| = 36 и |Тц П Т1г| = |Т12 П Т1з| = |Ti4 OTisI = 12. Он пропустил 36 вариантов Cififiaoarfi (19 из которых использовал Путеанус). Он также пропустил все перестановки из упр. 21, (в); Путеанус использовал 250 из их общего количества 576. В латинском издании книги Уоллиса, опубликованном в 1693 году, был исправлен ряд типографских ошибок, но не ошибки математические. Уитворт и Хартли пропустили все случаи, когда ‘tibi’ = — (см. упр. 19), возможно, потому, что количество людей, знающих классический гекзаметр, постоянно уменьшается. [Кстати об ошибках: на самом деле Путеанус опубликовал только 1020 различных перестановок, поскольку строки 592 и 593 в его списке эквивалентны строкам 601 и 602. Однако у него не должно было возникнуть проблем с поиском еще двух гекзаметров—их можно получить, например, заменой ‘tot sunt’ на ‘sunt tot’ в строках 252, 345, 511, 548, 659, 663, 678, 693 и 797.] 23. Читая каждую диаграмму слева направо, так что 1213 4 5 +> ЦЦ], получаем следующее. тп тп тп тп тп тп пт тп тп пт пт тп пт пт тп тп тп тп тп ntn тп тп тп тп тп пт тп пт тп тп imi тп тп тп тп тп тп тп тп пт imi imi imi тп тп пт imi тп inn пт пт пт
7.2.1.7 ОТВЕТЫ К УПРАЖНЕНИЯМ 901 24. Вот его правило: для к = 0, 1, ... ,п—1 и для каждого сочетания 0 < ji < - • • < jk < п из п — 1 элементов по к посещаем все разбиения {1,..., n — 1} \ {ji,..., jk} вместе с блоком {ji,..., jk, п}. Для п = 5 получается следующий порядок. IIIII mu inn mu mu nm nm imi imi nm nm imi imi Dill mn nm mn mn mn mn nm nm nm nm nm imi iffil iimimiinnmninniimniniini nm nm inn mn liill nm inn nm mn mn mn mn nm nm mn mn nm Но, строго говоря, ответ к данному упражнению— “нет” поскольку правило Хонды непол- ное, пока не указан порядок сочетаний. Он генерировал сочетания в солекопом порядке (лексикографическом порядке jt... ji). Лексикографический порядок ji... jt также согла- суется с приведенным списком для п = 4, но при этом lliil ПЙ1 располагается перед птпш Источник-. Т. Hayashi, Tohoku Math. J. 33 (1931), 332-337. 25. Нет; в (28) отсутствует схема 14123 5 (которая представляет собой зеркальное отра- жение второй схемы). 26. Пусть ап — количество неприводимых разбиений {1,..., п} и пусть а'п — количество одновременно неприводимых и полных разбиений. Эти последовательности начинаются следующим образом: (01,02,...) = (1,1,2,6,22,92,426,...), ..) = (0,1,1,3,9,33, 135, - -.); и ответом к данному упражнению является а'п — 1 для п > 2. Также оказывается, что ап— количество симметричных полиномов степени п от некоммутирующих перемен- ных. [См. М. С. Wolf, Duke Math. J. 2 (1936), 626-637; автором данной работы также протабулированы неприводимые разбиения на к частей.] Если A(z) = anzn и если B(z) = zunzn представляет собой неэкспоненциаль- ную производящую функцию для чисел Белла, то A(z)B(z) = B(z) — 1, следовательно, A(z) = 1 — 1/B(z). Из результата упр. 7.2.1.5-35 вытекает, что a^z" = zA(z)/(l + z — A(z)) = z(B(z) — 1)/(1 + zB(z)). К сожалению, B(z) не имеет красивого аналитического вида, хотя и удовлетворяет интересному функциональному соотношению 1 + zB(z) = B(z/(1 + z)). Заметим, что неприводимые разбиения множества с п > 1 соответствуют циклам колеблющейся диаграммы, в которых не имеется трех последовательных А, равных нулю (см. упр. 7.2.1.5-27). 27. Задача поставлена неоднозначно, так как нет точного определения диаграмм генджи- ко. Давайте потребуем, чтобы все вертикальные линии одного блока имели одинаковую длину; при таком ограничении, например, разбиение 1451236 не имеет диаграммы генджи- ко с одним пересечением, так как диаграмма [jjjj] не разрешена. Количество разбиений без пересечений равно Сп (см. упр. 7.2.1.6-26). Для наличия одного пересечения элементы пересекающихся блоков должны находиться в ограниченно растущей строке х1ух:'ук либо x'yj+lxyk, либо хгу^хукх1, где i,j,k,l > 0. Предположим, что мы рассматриваем шаблон х'ух-*ук. Имеется t — г + j + к + 2 “сло- тов” между г +1 + j + к элементами данного шаблона, и количество способов заполнения их непересекающимися разбиениями равно 52il+...+it=n_i_j_fc_1 Сг, ... Ctt. Это число можно выразить как f п-г-з-к-1, \i+j+к+2 _ D(n—i—j—ft—l)n согласно 7.2.1.6-(24). Суммирование no fc дает C(n_,_j_2)(n+i); последующее суммирование no j и г дает С(п_4)(п+з). Аналогично два других шаблона дают вклады С(п_5)(п+3) и С(п_5)(п+4). Общее ко- личество разбиений с одним пересечЪцием, таким образом, равно + С(„_4)(п+4).
902 ОТВЕТЫ К УПРАЖНЕНИЯМ 7.2.1.7 28. Упорядочим делители cbbaaa по количеству их простых сомножителей, а затем — в солексикографическом порядке: l~<a~<b~<c~<aa~<ba-<ca-<bb~<cb~< ааа Ч Ьаа Ч саа Ч ЬЬа Ч cba Ч ebb Ч Ьааа Ч сааа Ч ЬЬаа Ч cbaa Ч cbba Ч bbaaa Ч cbaaa Ч ebbaa Ч cbbaaa. Для каждого такого делителя d в уменьшающемся порядке считаем d первым сомножителем и рекурсивно добавляем все разложения числа cbbaaa/d, первый множитель которых Ч d. Если делители упорядочены лексикографически (1 < а < аа < ааа < b < Ьа < • • - < ebbaa < cbbaaa), алгоритм Уоллиса становится эквивалентным алгоритму 7.2.1.5М с (П1,пг,пз) = (1,2,3). Вероятно, он выбрал этот более сложный порядок делителей в связи с тем, что он более близок к обычному порядку чисел при а к Ь и с; напри- мер, при (а, Ь, с) = (7,11,13) получается точный числовой порядок. Генерируя делители в соответствии с этой более сложной схемой, Уоллис, по сути, генерировал сочетания мультимножества, которые, как отмечалось в разделе 7.2.1.3, эквивалентны ограниченным композициям. [Источник: A Discourse of Combinations (1685), 126-128, с двумя исправ- ленными типографскими ошибками.] 29. Разложения edeba, edeb a, edca • b, ...,e-d-c-b-a соответствуют следующему. mn inn mn nm mn imi nm nm nm nm nm mn nm inn urn irni mn mn mn imi mn mn mn imi mn mn mn mn mn nm nm mn nm urn urn mn nm nm nm mn nm nm mn imi nm imi mn mn imi mn mn nm 30. Коэффициент равен нулю, кроме случаев ii + 2i2 + • • • = п; тогда он равен fc (*i «2 )’ где = й + гг + - (Рассмотрите (aoz)m, умноженное на (1 + (ai/ao)z + (a2/a0)z2 )m.) 31. Порядок, генерируемый этим алгоритмом,—уменьшающийся лексикографический, обратный разбиению (31), если считать, что для разбиений ai.. .а/с выполняется соотно- шение ai > - - > ait; порядок деМуавра—возрастающий солексикографический. 32. 20 1 = 7+13 1 = 2 - 7 + 61 = 10 + 10 1 = 10 + 7 + 31 = 210. В общем случае Бошкович предложил начинать с п • 1 и вычислять следующий элемент a-lO + b- 7 + c- l следующим образом: если с > 7, следующий элемент представляет собой a • 10 + (Ь + 1) • 7 + (с — 7) • 1; в противном случае при с + 7Ь > 10 следующий элемент представляет собой (a + 1) • 10 + (с + 7Ь — 10) • 1; в противном случае завершаем работу. “Я могу,—сказал Пуаро совершенно уверенным тоном,—и ошибаться" — АГАТА КРИСТИ (AGATHA CHRISTIE), После похорон {After the Funeral) (1953)
7.2.1.7 ОТВЕТЫ К УПРАЖНЕНИЯМ 903 — HARPO MARX, The Cocoanuts (1925) — MARCEL MARCEAU, Baptiste (1946)
ПРИЛОЖЕНИЕ А ТАБЛИЦЫ ЗНАЧЕНИЙ НЕКОТОРЫХ КОНСТАНТ Таблица 1 Величины, часто используемые в стандартных подпрограммах и при анализе компьютерных программ (40 десятичных знаков) \/2 = 1.41421 35623 73095 04880 16887 24209 69807 85697- Л = 1.73205 08075 68877 29352 74463 41505 87236 69428+ л/5 = 2.23606 79774 99789 69640 91736 68731 27623 54406+ ViO = 3.16227 76601 68379 33199 88935 44432 71853 37196- л/2 = 1.25992 10498 94873 16476 72106 07278 22835 05703- S/3 = 1.44224 95703 07408 38232 16383 10780 10958 83919- ^2 = 1.18920 71150 02721 06671 74999 70560 47591 52930- 1п2 = 0.69314 71805 59945 30941 72321 21458 17656 80755+ 1пЗ = 1.09861 22886 68109 69139 52452 36922 52570 46475- 1п 10 = 2.30258 50929 94045 68401 79914 54684 36420 76011+ 1/1п2 = 1.44269 50408 88963 40735 99246 81001 89213 74266+ 1/1п 10 = 0.43429 44819 03251 82765 11289 18916 60508 22944- тг = 3.14159 26535 89793 23846 26433 83279 50288 41972- 1° = тг/180 = 0.01745 32925 19943 29576 92369 07684 88612 71344+ 1 /тг = 0.31830 98861 83790 67153 77675 26745 02872 40689+ тг* 1 2 * = 9.86960 44010 89358 61883 44909 99876 15113 53137- х/тг = Г(1/2) = 1.77245 38509 05516 02729 81674 83341 14518 27975+ Г(1/3) = 2.67893 85347 07747 63365 56929 40974 67764 41287- Г(2/3) = 1.35411 79394 26400 41694 52880 28154 51378 55193+ е = 2.71828 18284 59045 23536 02874 71352 66249 77572+ 1/е = 0.36787 94411 71442 32159 55237 70161 46086 74458+ е2 = 7.38905 60989 30650 22723 04274 60575 00781 31803+ 7 = 0.57721 56649 01532 86060 65120 90082 40243 10422- 1птг = 1.14472 98858 49400 17414 34273 51353 05871 16473- ф = 1.61803 39887 49894 84820 45868 34365 63811 77203+ е1 = 1.78107 24179 90197 98523 65041 03107 17954 91696+ е^/4 * * 7 = 2.19328 00507 38015 45655 97696 59278 73822 34616+ sin 1 = 0.84147 09848 07896 50665 25023 21630 29899 96226- cos 1 = 0.54030 23058 68139 71740 09366 07442 97660 37323+ -<'(2) = 0.93754 82543 15843 75370 25740 94567 86497 78979- <(3) = 1.20205 69031 59594 28539 97381 61511 44999 07650- 1п<£ = 0.48121 18250 59603 44749 77589 13424 36842 31352- 1/1п </> = 2.07808 69212 35027 53760 13226 06117 79576 77422- —In In 2 = 0.36651 29205 81664 32701 24391 58232 66946 94543-
ТАБЛИЦЫ ЗНАЧЕНИЙ НЕКОТОРЫХ КОНСТАНТ 905 Таблица 2 Величины, часто используемые в стандартных подпрограммах и при анализе компьютерных программ (40 шестнадцатеричных знаков) Слева от знака равенства используется десятичная запись. 0.1 =0.1999 9999 9999 9999 0.01 = 0.028F 5С28 F5C2 8F5C 0.001 =0.0041 8937 4ВС6 A7EF 0.0001 =0.0006 8DB8 ВАС7 10СВ 0.00001 =0.0000 А7С5 АС47 1В47 0.000001 =0.0000 10С6 F7A0 B5ED 0.0000001 =0.0000 01AD 7F29 АВСА 0.00000001 =0.0000 002А F31D С461 0.000000001 =0.0000 0004 4В82 FA09 0.0000000001 =0.0000 0000 6DF3 7F67 >/2 = 1.6А09 Е667 F3BC С908 = 1.ВВ67 АЕ85 84СА А73В >/5 = 2.3С6Е F372 FE94 F82B Л0 = 3.298В 075В 4В6А 5240 </2 = 1.428А 2F98 D728 АЕ22 >/3 = 1.7137 4491 23EF 65CD V2= 1.306F ЕОАЗ 1В71 52DE 1п2 = 0.В172 17F7 D1CF 79АВ 1пЗ = 1.193Е А7АА D030 А976 lnlO = 2.4D76 3776 ААА2 В05В 1/1п2 = 1.7154 7652 B82F Е177 1/lnlO = 0.6F2D ЕС54 9В94 38СА ?r = 3.243F 6А88 85АЗ 08D3 Г = тг/180 = 0.0477 D1A8 94А7 4Е45 1/тг = 0.517С С1В7 2722 0А94 тг2 = 9.DE9E 64DF 22EF 2D25 г/л = Г(1/2) = 1.C5BF 891В 4EF6 АА79 Г(1/3) = 2.ADCE ЕА72 905Е 2СЕЕ Г(2/3) = 1.5АА7 7928 С367 8САВ е = 2.В7Е1 5162 8AED 2А6А l/e = 0.5E2D 58D8 ВЗВС DF1A е2 =7.6399 2Е35 376В 730С 7 = 0.9304 67ЕЗ 7DB0 С7А4 1птг= 1.250В 048Е 7А1В DOBD <^>=1.9Е37 79В9 7F4A 7С15 е7 = 1.C7F4 5САВ 1356 BF14 е’г/4 = 2.317А CD28 Е395 4F87 sinl = 0.D76A А478 4867 7020 cosl = 0.8A51 407D А834 5С91 -<'(2) =0.F003 2992 В55С 4F28 С(3) = 1.33ВА 004F 0062 1383 ln<£ = 0.7B30 В2ВВ 1458 2652 1/1п^> = 2.13FD 8124 F324 34А2 -InIn2 = 0.5DD3 CA6F 75АЕ 7А83 9999 9999 9999 9999 9999 999А- 28F5 C28F 5С28 F5C2 8F5C 28F6- 9DB2 2D0E 5604 1893 74ВС 6A7F- 295Е 9Е1В 089А 0275 2546 0АА6+ 8423 OFCF 80DC 3372 1D53 CDDD+ 8D36 В4С7 F349 3858 3621 FAFD- F485 787А 6520 ЕС08 D236 9919+ 1873 BF3F 7083 4ACD AE9F 0F4F+ В5А5 2СВ9 8В40 5447 С4А9 8188- 5EF6 EADF 5АВ9 А207 2D44 268Е- B2FB 1366 ЕА95 7D3E 3ADE С175+ 2574 2D70 78В8 ЗВ89 25D8 34СС+ Е739 80С0 B9DB 9068 2104 4ED8- 9457 9061 9В37 FD4A В4Е0 АВВО- 3DDA В715 ВЕ25 ODOC 288F 1029+ DE7F 16С5 6Е32 67С0 А189 4С2В- 8D5A 4630 5С85 EDEC ВС27 3436+ С9ЕЗ В398 03F2 F6AF 40F3 4326+ А419 8D55 053В 7СВ5 ВЕ14 42DA- А95В 58АЕ 0В4С 28АЗ 8A3F ВЗЕ7+ 7D0F FDAO D23A 7D11 D6AE F552- 9AAD D557 D699 ЕЕ19 1F71 А301+ 1319 8А2Е 0370 7344 А409 3822+ 7076 2FB3 74А4 2Е26 С805 BD78- FE13 АВЕ8 FA9A 6ЕЕ0 6DB1 4ACD- 6Е26 CD98 08С1 АС70 8566 A3FE+ СЗВО 520D 5DB9 383F Е392 1547- C8D3 Е92С D580 46D8 4В46 А6ВЗ- 2F4F ЕВ70 2В26 990А 54F7 EDBC+ BF71 5880 9CF4 F3C7 62Е7 160F+ BADE С782 9054 F90D DA98 05АВ- Е8ЕЕ 881A DA2A ЕЕА1 1ЕВ9 EBD9+ D1BE 3F81 0152 СВ56 А1СЕ ССЗВ- 5F95 6С6А 843F 4998 5E6D DBF4- F39C С060 5CED С834 1082 276С- A7EF БАЕВ 6B9F 6С45 60А9 1932+ 6В04 В8АВ ААС8 С708 FICO ЗС4А+ С6Е9 Е909 C50F 3C32 89Е5 1113+ С246 6D97 6871 BD29 А237 ЗА89+ 88Е9 ВА28 1Е4С 405F 8СВЕ 9FEE+ 7171 5С59 Е690 7F1B 180В 7DB1+ F810 812А 5А31 С083 4С9Е В233+ 63С7 5F40 76С7 9883 5224 4685- Е037 67D6 6ЕЗЗ 2DBC 09DF АА82-
906 ПРИЛОЖЕНИЕ А Далее приведено несколько интересных менее распространенных констант, воз- никающих в связи с анализом, выполняемым в данной книге. Эти константы вы- числены с точностью до 40 десятичных цифр в 7.1.4-(90) и 7.2.1.5-(34) и в ответе к упр. 7.1.4-191. Таблица 3 Значения гармонических чисел, чисел Бернулли и чисел Фибоначчи для малых значений п п нп вп Fn п 0 0 1 0 0 1 1 -1/2 1 1 2 3/2 1/6 1 2 3 11/6 0 2 3 4 25/12 -1/30 3 4 5 137/60 0 5 5 6 49/20 1/42 8 6 7 363/140 0 13 7 8 761/280 -1/30 21 8 9 7129/2520 0 34 9 10 7381/2520 5/66 55 10 11 83711/27720 0 89 11 12 86021/27720 -691/2730 144 12 13 1145993/360360 0 233 13 14 1171733/360360 7/6 377 14 15 1195757/360360 0 610 15 16 2436559/720720 -3617/510 987 16 17 42142223/12252240 0 1597 17 18 14274301/4084080 43867/798 2584 18 19 275295799/77597520 0 4181 19 20 55835135/15519504 -174611/330 6765 20 21 18858053/5173168 0 10946 21 22 19093197/5173168 854513/138 17711 22 23 444316699/118982864 0 28657 23 24 1347822955/356948592 -236364091/2730 46368 24 25 34052522467/8923714800 0 75025 25 26 34395742267/8923714800 8553103/6 121393 26 27 312536252003/80313433200 0 196418 27 28 315404588903/80313433200 -23749461029/870 317811 28 29 9227046511387/2329089562800 0 514229 29 30 9304682830147/ 2329089562800 8615841276005/14322 832040 30
ТАБЛИЦЫ ЗНАЧЕНИЙ НЕКОТОРЫХ КОНСТАНТ 907 Положим Нх = (—-------для произвольного х. Тогда ^-^\п п + х/ п>1 — 2 — 2 In 2, Я1/3 = 3-|тгД/3-|1пЗ, Я2/3 = 1 + |тгМ-|1пЗ, Я1/4 =4 - |тг-31п2, Я3/4 = | + |тг - 31п2, Я1/5 = 5 - |тг^>3/25-1/4 - | In5 - I'/JiM, Я2/5 = I - 3/25“1/4 - fin 5 + |-к/51п<£, Яз/5 = | + |тг^-3/25-1/‘‘ - 11п5 + |ч/51п<£, Я4/5 = | + |тг^/25-1/4 - 11п5 - |у/5М, Я1/6 = 6 - |тгл/3 - 21п2 - 11пЗ, Я5/в = f + |тг\/3 — 21п2 — |1пЗ, и в общем случае, когда 0 < р < q (см. упр. 1.2.9-19), rr q тг р , „ 2рп , . п Нп/о —------cot -тг — In 2о + 2 > cos-----ТГ • In sin —тг. р 2 9 « 9 1<п<д/2 Читатель, если тебе когда-нибудь придется заниматься вычислениями, предупреждаю—ни в коем случае не бери на эту работу бухгалтера, каким бы честным и быстро работающим с числами он ни был. Ваш компьютер должен работать с определенным количеством цифр, независимо от того, располагаются ли они до десятичной точки или после. Бухгалтер же работает с центами, и будет работать с центами, пока ад не замерзнет, что бы ни вычислял наш бухгалтер, на всех этапах он сохранял ровно две цифры после запятой... Этого требовала от него его совесть — быть точным до последнего цента; и он был просто не в состоянии понять, что физические величины не измеряются центами, что применяется скользящая шкала значений, в которой центы одной задачи могут быть долларами другой. — НОРБЕРТ ВИНЕР (NORBERT WIENER), Я—математик (/ am a Mathematician) (1956)
ПРИЛОЖЕНИЕ Б ОСНОВНЫЕ ОБОЗНАЧЕНИЯ В приведенных далее формулах не поясняемые буквы имеют следующий смысл. j, к Целочисленное арифметическое выражение т, п Неотрицательное целочисленное арифметическое выражение р, q Бинарное арифметическое выражение (0 или 1) х, у Действительное арифметическое выражение z Комплексное арифметическое выражение f Целочисленная, действительная или комплексная функция G,H Граф S, Т Множество или мультимножество J-, Q Семейство множеств и, v Вершина графа а, (3 Строка символов Место определения обозначения представляет собой либо номер страницы в насто- ящем томе, либо номер раздела в предыдущем томе (указывается символом §). Обозначение Значение Определено V Е Присваивает переменной V значение выражения Е §1-1 U<->V Обмен значениями между переменными U и V §1-1 Ап или Д[п] n-й элемент линейного массива А §1-1 Атп или А[т,п] Элемент в строке m и столбце п прямоугольного массива А §1-1 (R? а: Ь) Условное выражение: обозначает а, если отношение R истинно, Ь, если R ложно 125 [Я] Характеристическая функция отношения R: (R? 1: 0) §1-2.3 6jk Символ Кронекера: [у = /г] §1-2.3 И/(г) Коэффициент при zn в степенном ряду f(z) §1.2.9 Z1 4- Z2 ч ь Zn Сумма п чисел (даже при п, равном 0 или 1) §1-2.3 CL± ... CL^i Произведение или строка или вектор из п элементов , . . . , Жп) Вектор из п элементов (a;ia;2 . ..X2fc-i) Медиана (среднее значение после сортировки) 101
ОСНОВНЫЕ ОБОЗНАЧЕНИЯ 909 Обозначение Пя(к) /(fc) тшд(к) /(fc) maxH(fc) /(fc) Ujt(fc) ^(fc) £Lo/(fc) {a | R(a)} Z{f(k) | «(fc)} (fl!, 02» • • • » fln} [l. . y] (i.. y) fc-.y) (ж.. у] |S| l/l И M Ы H [xl x mod у {x} x = x' (по модулю у) j\k S\T S\t G\v G\e G/e SUt Suit gcd(J, fc) Значение Определено Сумма всех f(k), таких, что отношение R(k) истинно §12.3 Произведение всех /(fc), таких, что отношение R(k) истинно §12.3 Минимум среди всех f(k), таких, что отношение R(k) истинно §1.2.3 Максимум среди всех f(k), таких, что отношение «(fc) истинно §1.2.3 Объединение всех S(fc), таких, что отношение R(k) истинно Сокращение для £o<fc<b /(fc) §1-2.3 Множество всех а, таких, что отношение «(а) истинно Другой способ записи /(fc) Множество или мультимножество {at 11 < к < п} Замкнутый интервал: {a|x<a<j/} §1.2.2 Открытый интервал: {a|x<a<y} §1.2.2 Полуоткрытый интервал: {а | х < а< у] §12-2 Полузамкнутый интервал: {a|x<a<3/} §1-2.2 Число элементов множества S Число решений (когда / — булева функция): f(x) 247 Абсолютная величина х: (х > 0? х: —х) Абсолютная величина z: §1.2.2 Длина ос. тп, если а = ... am Пол х, наибольшее целое число, не превосходящее х: тпах.к<х к §1.2.4 Потолок х, наименьшее целое число, не меньшее х: minfc>a; fc §1-2.4 Функция mod: (у = 0? х: х — у\х/у\) §1.2.4 Дробная часть (в контексте действительного значения, а не множества): a; mod 1 §1.2.11.2 Отношение конгруэнтности: х mod у = х' mod у §1.2.4 j делит fc: fc mod j = 0 и j > 0 §1-2-4 Разность множеств: {s | s в S и s не в Т} Сокращенная запись S \ {t} G с удаленной вершиной v 32 G с удаленным ребром е 32 G с ребром е, сжатым в точку 521 Сокращенная запись S U {t} Сумма мультимножеств; т. е. {а, 6} W {а, с} = {а, а, Ь, с} §4.6.3 Наибольший общий делитель: (j=fc=0? 0: maxd\iid\fc d) §1-1
910 ПРИЛОЖЕНИЕ Б Обозначение Значение Определено j -L к j взаимно простое с к: gcd(j, к) = 1 §1-2-4 Ат Транспонированный прямоугольный массив A: AT[j, fc] = A[fc, j] aR Левоправое обращение строки а ат Разбиение, сопряженное к а 449 ху х в степени у (при х > 0): evlnx §1-2-2 хк х в степени fc: (fc > 0? fjj=o х: 1/х~к) §1-2-2 х~ Обращение х: х~г §1.3.3 хк r(x+fc)/r(fc) = (fc>O?n^(^+j):l/(^+*:)-fe) §1-2-5 X- х!/(х - fc)! = (fc > 0? - j): 1/(х - fc)—) §1.2.5 п! Факториал п: Г (я + 1) = п- §1.2.5 © Биномиальный коэффициент: (fc < 0? 0: x-/fc!) §1-2-6 Мультиномиальный коэффициент (п = ni Ч 1- пт) §1-2-6 га Число Стирлинга первого рода (количество ЦИКЛОВ): Eo<fc1<-<fc„_m<n • • кп-т §1.2.6 Число Стирлинга второго рода (количество подмножеств): Ei<fcl<...<fc„_m<m *1 • • • *n-m §1-2-6 о Число Эйлера: У^_о(—1)*(п^1)(тп + 1 — fc)n §5.1.3 1ml Количество разбиений п на т частей: 52k*:! <—<кт [^1 1" кт = и] 454 .0100-0-1... )ь Представление числа в позиционной системе счисления с основанием b: akbk §4-1 &Z Действительная часть z §1.2.2 Мнимая часть z §1.2.2 Z Комплексно сопряженное: 3tz — i Qz §1.2.2 ~р или р Дополнение: 1 — р 74 ~Х ИЛИ X Побитовое дополнение 167 pf\q Логическая конъюнкция (И): pq 74 х f\y Минимум: тт{т, у} 88 х&у Побитовое И 165 PV9 Логическая дизъюнкция (ИЛИ): pq 74 iV у Максимум: тах{т, у} 88 х | у Побитовое ИЛИ 165 p®q Логическая исключающая дизъюнкция (ЛИБО): (р + q) mod 2 74 х®у Побитовое ЛИБО 165 х-у Вычитание с насыщением, х монус у: тах{0, х — у} §1.3.Г х<£к Побитовый сдвиг влево: |2fea:J 167 х^> к Побитовый сдвиг вправо: х (—к) 167 х^у “Функция застежки” для чередования битов, х zip у 180
ОСНОВНЫЕ ОБОЗНАЧЕНИЯ 911 Обозначение Значение Определено logbX Логарифм числа х по основанию b (определен при х > 0, b > 0 и b 1): у такое, что х = Ьу §1-2-2 Ina? Натуральный логарифм: loge х §1-2-2 Iga; Логарифм по основанию 2: log2 х §1-2-2 Хп Бинарный логарифм (при п > 0): [lg nJ 174 exp х Показательная функция от х: ех - хк/к\ §1.2.9 рп Линеечная функция (при n>0): max2™\nm 172 1/71 Контрольная сумма (при п>0): ((nl>fc)&l) 175 {Хп} Бесконечная последовательность Xq, Х\, Х2, • • • (здесь буква п является частью обозначения) §1.2.9 /'(я) Производная от f по х §1.2.9 т Вторая производная от f по х §1.2.10 Гармоническое число порядка х: 1/кх §1.2.7 Нп Гармоническое число: §1.2.7 Fn Число Фибоначчи: (п < 1? п: Fn_i + Fn~2) §1-2-8 вп Число Бернулли: n! [zn] z/(e2 — 1) §1.2.11.2 det (А) Определитель квадратной матрицы А §1-2-3 sign(x) Знак х: [а: > 0] — [а: < 0] С (я) Дзета-функция: limn-»oo (при х > 1) §1.2.7 Г(х) Гамма-функция: (х — 1)! = у(х, оо) §1-2.5 ч(х,у) Неполная гамма-функция: §1.2.11.3 7 . Константа Эйлера: —Г'(1) = limn-»oo(Hn — Inn) §1.2.7 е Основание натуральных алгоритмов: $2п>0 1/п! §1.2.2 7Г Отношение длины окружности к ее диаметру: 4Е„>о(-1)"/(2п + 1) §1.2.2 ОО Бесконечность: больше любого числа л Нулевая связь (указатель на несуществующий адрес) §2.1 0 Пустое множество (множество без элементов) 6 Пустая строка (строка нулевой длины) 6 Единичное семейство: {0} 320 ф Золотое сечение: (1 + v^5)/2 §1-2.8 у>(п) Функция Эйлера: [fc _1_ п] §1.2.4 х « у х приближенно равно у §1-2-5 G = H G изоморфен Н 33 О(/(п)) О большое от /(п) при п —> оо §1.2.11.1 O(/(z)) О большое от f(z) при z —»0 §1.2.11.1 «(/(")) Омега большое от /(п) при п —> оо §1.2.11.1 ©(/(")) Тэта большое от /(п) при п —»оо §1.2.11.1
912 ПРИЛОЖЕНИЕ Б Обозначение Значение Определено G Дополнение графа (или однородного гиперграфа) G 46 G | U G, ограниченный вершинами множества U 32 и — V и, смежная с v 32 u—f—v и, не смежная с v 32 и—>v Имеется дуга от и до v 38 и »* V Транзитивное замыкание: v достижима из и 193 d(u, v) Расстояние от и до v 35 GUH Объединение G и Н 47 G®H Прямая сумма (соприкосновение) G и Н 47 G—H Соединение G и Н 47 G—>H Ориентированное соединение G и Н 47 GuH Декартово произведение G и Н 48 G®H Прямое произведение (конъюнкция) G и Н 49 GbH Сильное произведение G и Н 49 G&H Нечетное произведение G и Н 49 GoH Лексикографическое произведение (композиция) СиН 49 ej Элементарное семейство: {{у}} 320 FUG Объединение семейств: {5 | S € F или S € G} 320 FC\Q Пересечение семейств: {5 | S G F и S G G} 320 F\G Разность семейств: {5 | S G F и S G} 320 F ®G Симметричная разность семейств: (jr\^)U(0?\JF) 320 FuG Соединение семейств: {5 U Т | S G F, Т € G} 320 FnG Встреча семейств: {5 П Т | S G F, Т € G} 320 FaG Дельта семейств: {5 ф Т | S G F, Т € G} 320 F/G Частное (кофактор) семейств 321 F mod <7 Остаток семейств: (G LJ (F/G)) 321 F^k Симметрированное семейство, если F = ej, U ej2 U • • • U е^п 321 F' Максимальные элементы F. {из S S:F\T GlF ть S QT вытекает S = Т} 324 F' Минимальные элементы F: {из S&F\T&FnS^T вытекает S = Т} 324 FsG Не подмножества: {из S G F | Т G G вытекает S <£Т} 324 F\.G Не надмножества: {из S G F | Т € G вытекает S jbT} 324 FsG Подмножества: {из S^F\T&G вытекает SQT}=F\(F/'G) 745 F^G Надмножества: {из S&F\TtG вытекает S^T}=F\(F\,G) 745 1 Конец алгоритма, программы или доказательства §11
ОСНОВНЫЕ ОБОЗНАЧЕНИЯ 913 Обозначение Значение Определено X Y Скалярное произведение векторов: Х1У1 + Х2у2 + • + xnyn, если X = xix2 ...хп и Y = yyy2 ...yn 31 XQY Содержание векторов: Xk < уь для 1 < k < n, если X -- xix2 ...xnnY = yty2 ...yn 167 ao(3 Смесь таблиц истинности 259 Чтобы избежать утомительно частого повторения слов “равно тому-то" я буду ставить (как я часто делаю в своей работе) пару параллельных линий одинаковой длины (т. е. =), поскольку никакие две вещи в мире не могут быть еще более равными... — РОБЕРТ РЕКОРДЕ (ROBERT RECORDE), The Whetstone Of Witte (1557) Профессор Лежандр в труде, который мы будем часто цитировать, использует один и тот же знак и для равенства, и для конгруэнтности. Чтобы избежать неоднозначности, мы вынуждены обозначать их по-разному. — К. Ф. ГАУСС (С. F. GAUSS), Disquisitiones Arithmetic? (1801) Кое-кто утверждает, что каждое уравнение, включенное мною в книгу, вдвое снижает ее продажи. — СТИВЕН ХОКИНГ (STEPHEN HAWKING), Краткая история времени (A Brief History of Time) (1987)
ПРИЛОЖЕНИЕ В СПИСОК АЛГОРИТМОВ И ТЕОРЕМ Алгоритм 7В, 43. Теорема 7В, 37. Алгоритм 7Н, 51. Следствие 7Н, 52. Лемма 7М, 51. Алгоритм 7.1.1В, 603. Алгоритм 7.1.1С, 84. Следствие 7.1.1С, 94. Теорема 7.1.1 С, 94. Алгоритм 7.1.1Е, 110. Следствие 7.1.1F, 100. Теорема 7.1.1F, 99. Теорема 7.1.1G, 91. Алгоритм 7.1.1Н, 95. Теорема 7.1.1Н, 82. Подпрограмма 7.1.11, 95. Алгоритм 7.1.1К, 619. Теорема 7.1.1К, 87. Лемма 7.1.1М, 91. Алгоритм 7.1.1Р, 603. Теорема 7.1.1Р, 89. Следствие 7.1.1Q, 80. Теорема 7.1.1Q, 80. Теорема 7.1.1S, 98. Теорема 7.1.1Т, 103. Алгоритм 7.1. IX, 108. Алгоритм 7.1.2L, 128. Теорема 7.1.2L, 141. Алгоритм 7.1.2S, 158. Теорема 7.1.2S, 139. Алгоритм 7.1.2Т, 159. Алгоритм 7.1.2U, 628. Лемма 7.1.3А, 190. Алгоритм 7.1.3В, 188. Лемма 7.1.3В, 191. Алгоритм 7.1.3С, 680. Следствие 7.1.31, 190. Алгоритм 7.1.3К, 670. Следствие 7.1.3L, 191. Алгоритм 7.1.ЗМ, 673. Следствие 7.1.3М, 192. Алгоритм 7.1.3N, 690. Теорема 7.1.3PZ, 193. Теорема 7.1.3Р, 191. Алгоритм 7.1.3Q, 673. Теорема 7.1.3R/, 192. Алгоритм 7.1.3R, 193. Программа 7.1.3R, 194. Теорема 7.1.3R, 191. Алгоритм 7.1.3S, 676. Алгоритм 7.1.3Т, 215. Алгоритм 7.1.3V, 202. Следствие 7.1.3W, 190. Алгоритм 7.1.4А, 697. Теорема 7.1.4А, 293. Алгоритм 7.1.4В, 249. Теорема 7.1.4В, 280. Алгоритм 7.1.4С', 697. Алгоритм 7.1.4С, 247. Алгоритм 7.1.4Н, 713. Алгоритм 7.1.41, 694. Теорема 7.1.4J"*", 286. Теорема 7.1.4J-, 286. Алгоритм 7.1.4J, 287. Алгоритм 7.1.4К, 698. Теорема 7.1.4К, 281. Теорема 7.1.4М, 255. Алгоритм 7.1.4N, 709. Алгоритм 7.1.4R, 257. Алгоритм 7.1.4S, 264. Следствие 7.1.4S, 301. Теорема 7.1.4S, 301. Алгоритм 7.1.4U, 269. Теорема 7.1.4U, 277. Теорема 7.1.4W, 291. Теорема 7.1.4Х, 292. Следствие 7.1.4Y, 293. Теорема 7.1.4Y, 293. Алгоритм 7.2.1.1А, 352. Алгоритм 7.2.1.1В, 757. Следствие 7.2.1.1В, 343. Алгоритм 7.2.1.1С, 756. Алгоритм 7.2.1.1D, 353. Теорема 7.2.1.1D, 342. Алгоритм 7.2.1.1Е, 778. Алгоритм 7.2.1.1F, 356. Алгоритм 7.2.1.1G, 334. Алгоритм 7.2.1.1Н, 348. Алгоритм 7.2.1.1J, 757. Алгоритм 7.2.1.1К, 350. Алгоритм 7.2.1.1L, 338. Алгоритм 7.2.1.1М, 330. Алгоритм 7.2.1.1N, 755. Алгоритм 7.2.1.1Р, 760. Определение 7.2.1.1Р, 355. Теорема 7.2.1.1Р, 355. Определение 7.2.1.1Q, 356. Теорема 7.2.1.1Q, 356. Алгоритм 7.2.1.1R, 353. Алгоритм 7.2.1.1S, 351. Алгоритм 7.2.1.1Т, 761. Алгоритм 7.2.1.1U, 773. Алгоритм 7.2.1.IV, 757. Алгоритм 7.2.1.IX, 768. Алгоритм 7.2.1.1Z, 756. Алгоритм 7.2.1.2С, 388. Алгоритм 7.2.1.2Е', 401. Алгоритм 7.2.1.2Е, 389. Алгоритм 7.2.1.2G, 380. Алгоритм 7.2.1.2Н, 386. Алгоритм 7.2.1.2L', 781. Алгоритм 7.2.1.2L, 369. Алгоритм 7.2.1.2М, 781. Алгоритм 7.2.1.2Р', 783.
СПИСОК АЛГОРИТМОВ И ТЕОРЕМ 915 Algorithm 7.2.1.2Р, 372. Алгоритм 7.2.1.2Q, 784. Алгоритм 7.2.1.2R, 783. Теорема 7.2.1.2R, 390. Лемма 7.2.1.2S, 378. Алгоритм 7.2.1.2Т, 374. Алгоритм 7.2.1.2V, 395. Алгоритм 7.2.1.2Х, 385. Алгоритм 7.2.1.2Y, 799. Алгоритм 7.2.1.2Z, 403. Алгоритм 7.2.1.3А, 805. Алгоритм 7.2.1.3С, 420. Следствие 7.2.1.3С, 433. Алгоритм 7.2.1.3СВ, 813. Алгоритм 7.2.1.3СС, 813. Алгоритм 7.2.1.3F, 414. Теорема 7.2.1.3К, 427. Алгоритм 7.2.1.3L, 411. Теорема 7.2.1.3L, 413. Теорема 7.2.1.3М, 427. Алгоритм 7.2.1.3N, 804. Теорема 7.2.1.3N, 418. Теорема 7.2.1.3Р, 423. Алгоритм 7.2.1.3Q, 816. Алгоритм 7.2.1.3R, 416. Алгоритм 7.2.1.3S, 805. Лемма 7.2.1.3S, 431. Алгоритм 7.2.1.3Т, 412. Алгоритм 7.2.1.3V, 806. Алгоритм 7.2.1.3W, 815. Теорема 7.2.1.3W, 431. Алгоритм 7.2.1.4А, 831. Алгоритм 7.2.1.4В, 831. Алгоритм 7.2.1.4С, 828. Теорема 7.2.1.4С, 458. Теорема 7.2.1.4D, 453. Теорема 7.2.1.4Е, 455. Алгоритм 7.2.1.4Н, 447. Теорема 7.2.1.4Н, 459. Алгоритм 7.2.1.4К, 840. Алгоритм 7.2.1.4М, 838. Алгоритм 7.2.1.4N, 467. Алгоритм 7.2.1.4Р, 446. Теорема 7.2.1.4S, 462. Алгоритм 7.2.1.5Е, 846. Алгоритм 7.2.1.5Н, 472. Алгоритм 7.2.1.5L, 843. Алгоритм 7.2.1.5М, 485. Алгоритм 7.2.1.6В, 502. Алгоритм 7.2.1.6Н, 518. Алгоритм 7.2.1.6L, 506. Алгоритм 7.2.1.6N, 504. Алгоритм 7.2.1.60, 520. Алгоритм 7.2.1.6Р, 499. Алгоритм 7.2.1.6Q, 530. Алгоритм 7.2.1.6R, 515. Алгоритм 7.2.1.6S, 523. Теорема 7.2.1.6S, 529. Алгоритм 7.2.1.6U, 510. Алгоритм 7.2.1.6W, 511. Алгоритм 7.2.1.6Z, 864. Алгоритм 7.2.1.7N, 899. [Обратный список] предоставляет дублированную, избыточную информацию, ускоряющую выборку вторичного ключа. — ДОНАЛЬД Э. КНУТ (DONALD Е. KNUTH), Сортировка и поиск (Sorting and Searching) (1973)
ПРИЛОЖЕНИЕ Г УКАЗАТЕЛЬ КОМБИНАТОРНЫХ ЗАДАЧ В данном приложении кратко описаны основные задачи, рассмотренные в данной книге. Одни из них могут быть эффективно решены, в то время как другие представляются очень сложными в общем случае, хотя частные случаи могут оказаться легкими. Никакие указания о сложности задач здесь не приводятся. Комбинаторные задачи подобны хамелеонам и способны принимать множество обличий. Например, некоторые свойства графов и гиперграфов аналогичны другим свойствам 0-1 матриц; а матрица из нулей и единиц размером тхп может рассматриваться как булева функция от тп булевых переменных, где 0 представляет TRUE, а 1 представляет FALSE. Каждая задача также имеет много разновидностей: иногда нас интересует только суще- ствование решения для определенных ограничений, но обычно нам требуется получить по крайней мере одно явное решение или попытаться подсчитать количество решений, или посетить их все. Часто нам требуется решение, оптимальное в том или ином смысле. В приведенном списке—который более полезен, чем сколь-нибудь полон—каждая за- дача представлена в более-менее формализованном виде, как задача “поиска” некоторого целевого объекта. За этой характеристикой следуют неформальный пересказ (в скобках и кавычках) и, возможно, некоторые комментарии. Любая задача, изложенная в терминах ориентированных графов, автоматически приме- нима к неориентированным графам, если только ориентированный граф не обязан быть ациклическим, поскольку неориентированное ребро и — v эквивалентно двум ориентиро- ванным дугам и—>г> и v—>и. • Выполнимость. Для заданной булевой функции f от п булевых переменных найти булевы значения xi, ..., хп, такие, что f(xi,... ,хп) = 1. (“Если возможно, покажите, что f может быть истинна”) • A: SAT. Задача выполнимости, когда f представляет собой конъюнкцию дизъюнктов, где каждый дизъюнкт представляет собой дизъюнкцию не более к литералов xj или Xj. ( “Могут ли все дизъюнкты быть истинными?” ) Наиболее важными являются случаи 2SAT и 3SAT. Другой важный частный случай — когда f является конъюнкцией дизъюнктов Хорна, каждый из которых имеет не более одного инвертированного литерала Xj. • Булева цепочка. Для заданных одной или нескольких булевых функций от п булевых значений xi, ..., хп найти x„+i, , %n, такие, что каждое Xk для п < к < N явля- ется булевой функцией от I, и Xj для некоторых i < к и j < к, и такие, что каждая из данных функций либо представляет собой константу, либо равна xi для некоторого I < N. (“Напишите простую линейную программу для вычисления заданного множества функций с совместным использованием промежуточных значений’.’) (“Разработайте схему для вычисления заданного набора выходов для входов 0, 1, xi, ..., хп, используя логичес- кие элементы с двумя входами и неограниченным ветвлением на выходе’.’) Обычно цель заключается в минимизации N. • Широкословная цепочка. Аналогична булевой цепочке, но с использованием битовых и/или арифметических операций над целыми числами по модулю 2d вместо булевых опе- раций над булевыми значениями; заданное значение d может быть произвольно большим. (“Работа над несколькими связанными задачами одновременно’.’)
УКАЗАТЕЛЬ КОМБИНАТОРНЫХ ЗАДАЧ 917 • Булево программирование. Для заданной булевой функции f от п булевых переменных вместе с заданными весами wi, wn найти булевы значения xi, хп, такие, что f(xi,..., хп) = 1 и wixi Ч-1- шпхп велико, насколько это возможно. (“Как выполнить f с максимальным выигрышем?”) ® Паросочетание. Для заданного графа G найти множество несоприкасающихся ребер. (“Разбить вершины на пары так, чтобы каждая вершина имела не более одного партнера’.’) Обычно цель заключается в поиске наибольшего возможного количества ребер; “идеальное паросочетание” включает все вершины. В двудольном графе с т вершинами в одной части и п вершинами в другой паросочетание эквивалентно выбору множества единиц в матрице размером т х п, состоящей из нулей и единиц, не более чем с одной выбранной в каждой строке и не более чем с одной выбранной в каждом столбце. • Задача назначений. Обобщение двудольного паросочетания с весами, назначенными каждому ребру; общий вес паросочетания должен быть максимизирован. (“Какое на- значение людей на работы наилучшее?”) Эквивалентная постановка задачи заключается в таком выборе элементов матрицы размером т х п не более чем по одному в строке и одному в столбце, чтобы сумма выбранных элементов была наибольшей возможной. • Покрытие. Для заданной матрицы Ajk из нулей и единиц найдите множество строк R, такое, что мы имеем Ajk > 0 для всех fc. (“Отметьте 1 в каждом столбце и выберите все отмеченные строки’.’) Цель обычно заключается в том, чтобы минимизировать |Я|. • Точное покрытие. Для заданной матрицы Ajk из нулей и единиц найдите множество строк R, такое, что ^,j€RAjk = 1 для всех fc. (“Покрытие взаимно ортогональными строками’.’) Задача идеального паросочетания эквивалентна поиску точного покрытия транспонированной матрицы смежности. • Независимое множество. Для заданного графа или гиперграфа G найдите множество вершин U, такое, что порожденный граф GfU не имеет ребер. (“Выберите несвязанные вер- шины’.’) Цель обычно заключается в том, чтобы максимизировать |U|. Классические частные случаи включают задачу 8 ферзей, когда G представляет собой граф ходов ферзя на шахматной доске и задачу размещения точек так, чтобы никакие три не были на одной прямой. • Клика. Для заданного графа G, найдите множество вершин U, такое, что порожденный граф G | U является полным. (“Выберите взаимно смежные вершины?) Эквивалентная постановка задачи — найти независимое множество в ~G. Цель обычно заключается в том, чтобы максимизировать |[7|. • Вершинное покрытие. Для заданного графа или гиперграфа найдите множество вершин U, таких, что каждое ребро включает как минимум одну вершину из U. (“Пометьте некоторые вершины таким образом, чтобы ни одно ребро не осталось непомеченным’.’) Эк- вивалентные формулировки—найти покрытие транспонированной матрицы смежности; найти U, такое, что множество V \ U независимое, где V — множество всех вершин. Цель обычно заключается в том, чтобы минимизировать |[7|. • Доминирующее множество. Для заданного графа найдите множество вершин U, такое, что каждая вершина, не входящая в U, смежна с некоторой вершиной из U. (“Какие вершины находятся в одном шаге от них всех?”) Классическая задача о пяти ферзях является частным случаем, когда G представляет собой граф ходов ферзя на шахматной доске. • Ядро. Для заданного ориентированного графа найдите независимое множество вершин U, такое, что каждая вершина, не входящая в U, является предшественником некоторой вершины из U. (“В каких независимых позициях игры с двумя игроками ваш противник может заставить вас пропустить ход?”) Если граф неориентированный, ядро эквивалентно
918 ПРИЛОЖЕНИЕ Г максимальному независимому множеству и доминирующему множеству, которое является одновременно минимальным и независимым. • Раскрашивание. Для заданного графа найдите способ разделить его вершины на к независимых множеств. (“Раскрасьте вершины к красками так, чтобы никакие две смеж- ные вершины не были окрашены одним цветом”) Цель обычно заключается в том, чтобы минимизировать к. • Кратчайший путь. Для заданных вершин и и v ориентированного графа, в котором каждой дуге назначен вес, найти наименьший общий вес ориентированного пути из и в v. (“Определите наилучший маршрут”) • Длиннейший путь. Для заданных вершин и и v ориентированного графа, в котором каждой дуге назначен вес, найти наибольший общий вес простого ориентированного пути из и в v. (“Какой маршрут отклоняется сильнее всего?”) • Достижимость. Для заданного множества вершин U в ориентированном графе G найди- те все вершины и, такие, что и—>* v для некоторого и 6 U. (“Какие вершины встречаются на путях, начинающихся в U?” ) • Остовное дерево. Для заданного графа G найдите свободное дерево F на тех же вер- шинах, такое, что каждое ребро F является ребром G. (“Выберите достаточно ребер для связывания всех вершин’.’) Если каждому ребру назначен вес, минимальным остовным деревом является остовное дерево с наименьшим общим весом. • Гамильтонов путь. Для заданного графа G найдите путь Р на том же множестве вер- шин, такой, что каждое ребро Р является ребром G. (“Найдите путь, который проходит через каждую вершину ровно один раз’.’) Это классическая задача обхода конем, когда G является графом ходов коня на шахматной доске. Когда вершины G представляют собой комбинаторные объекты (например, кортежи, перестановки, сочетания, разбиения или деревья), являющиеся смежными, если они “близки” друг другу, гамильтонов путь часто называют кодом Грея. • Гамильтонов цикл. Для заданного графа G найдите цикл С на том же множестве вершин, такой, что каждое ребро С является ребром G. (“Найдите путь, который проходит через каждую вершину ровно один раз и возвращается в начальную точку’.’) • Задача коммивояжера. Найдите гамильтонов цикл с наименьшим общим весом, когда каждому ребру заданного графа назначен вес. (“Как дешевле всего посетить всех?”) Если граф не имеет гамильтонова цикла, мы расширяем его до полного графа, назначая очень большой вес W каждому несуществующему ребру. • Топологическая сортировка. Для заданного ориентированного графа найдите способ маркировки каждой вершины х различными числами 1{х) таким образом, чтобы из х— следовало 1(х) < 1(у). (“Разместите все вершины в строку так, чтобы каждая вершина находилась левее своих преемников’.’) Такая маркировка возможна тогда и только тогда, когда заданный ориентированный граф ацикличен. • Оптимальное линейное размещение. Для заданного графа найдите способ маркировки каждой вершины х различными целыми числами Цх) таким образом, чтобы ___v |i(u) — l(v)| имела наименьшее возможное значение. (“Разместите вершины в строку, минимизи- руя суммы длин получающихся ребер’.’) • Задача укладывания рюкзака. Для заданной последовательности весов и>1, ..., wn, порогового значения W и последовательности значений vi, ..., v„ найти К С {1,..., п}, такое, что wt < W и Vk максимальна. (“Насколько большую ценность можно унести?” )
УКАЗАТЕЛЬ КОМБИНАТОРНЫХ ЗАДАЧ 919 • Ортогональный массив. Для заданных положительных целых тип найти массив размером т х п2 с элементами Ajk 6 {0,1,... ,п — 1}, обладающим тем свойством, что из j j' и к ф к' следует (A,k, Aj>k) / (“Построить т различных матриц п х п из n-арных цифр таким образом, что при наложении любых двух матриц встречаются все п2 возможных пар цифр’.’) Случай т = 3 соответствует латинскому квадрату, а случай тп > 3 соответствует тп — 2 взаимно ортогональным латинским квадратам. • Ближайший общий предок. Для заданных узлов леса и и v найти такой узел ш, что каждый включающий предок и и v является также включающим предком и. (“Где крат- чайший путь между и и v меняет направление?”) • Задача поиска минимума на отрезке. Для заданной последовательности чисел ai, ..., an, найти наименьшие элементы каждого подынтервала а,,..., aj для 1 < i < j < п. (“Вы- полните все возможные запросы, касающиеся наименьшего значения в каждом заданном диапазоне?) В упр. 150 и 151 из раздела 7.1.3 показана эквивалентность этой задачи задаче поиска ближайшего общего предка. • Универсальный цикл. Для заданных Ь, к и N найти циклическую последовательность элементов хо, xi, ..., xn-i, хо, ...из 5-арных цифр {0,1,...,5—1}, обладающую тем свойством, что все комбинаторные размещения определенного вида задаются последо- вательными fc-кортежами xoxi .. .Xk~i, X1X2 -Xk, xn-iXo -Xk-2- (“Вывести все возможности циклическим образом?) Результат именуется циклом де Брейна, если N = Ък и встречаются все возможные fc-кортежи; это универсальный цикл сочетаний, если N = (£) и если встречаются все fc-сочетания 5 объектов; и это универсальный цикл перестановок, если N = Ы, к = Ь — 1 и если в виде fc-кортежей встречаются все (5 — 1)-варианты. В большинстве случаев мы были способны привести множественно-теоретическое определение, полностью описывающее задачу, хотя требование краткости зачастую приводило к некоторому ухудшению интуитивного восприятия задачи. — М. Р. ГАРИ (М. R. GAREY) и Д. С. ДЖОНСОН (D. S. JOHNSON), Список NP-полных задач (A List of NP-Complete Problems) (1979)
ПРЕДМЕТНО-ИМЕННОИ УКАЗАТЕЛЬ Когда запись в предметно-индексном указателе ссылается на страницу с упражнением, дополни- тельную информацию можно получить в ответе к этому упражнению. Страницы с упражнениями входят в указатель только в случае ссылки на тему, которая в условии упражнения не упоминается. 2m-way multiplexer, 309. С„, 32 граф цикла, 541. (числа Каталана), 508. СрЧ (баллотировочные числа), 509. е, 535, 579, 854. к-дольный граф, 36. fc-раскрашивание гиперграфа, 54. fc-я степень графа, 529. Кп, 32. Мп (средний биномиальный коэффициент), 517. n-арная булева функция, 76. п-кортеж, 445. последовательность строк длины п, 330. n-мерный куб, 378, 528, 544, 891. п-распределение, 777. pi, 491. Рп, 32. граф пути, 541. г-однородность, 54. г-перестановки, 400. Sn (число Шрёдера), 539. t-арное дерево, 538, 538, 874. t-арные деревья, 879. д, 426. Q, 426. 5-обмен, 177. 5-сдвиг, 181. 3, 272. V, 272. 7, 579. оо, 224. к«, 428. А, 186, 234. Ап, 12, 225. Ах, 174, 231, 699. At, 428. [1g х], 174. pt, 428. v, 429, 658. vn, 225, 12. ф, 577, 579. тг, 77, 102, 106, 126, 148, 156, 159, 182, 245, 291, 368, 397, 400, 406, 409, 421, 435, 436, 443, 517, 539, 547, 579, 628, 715, 725, 758, 841, 878, 897, 904. р, 186, 234, 658. p(fc), 334. рп, 225. рх, 172. ст-цикл, 494. <т(п), 465. т(х), 428. ст„, 474. 0-1 матрица, 54, 241, 281, 295, 313, 316, 717. принцип, 93, 223. 2-адическая цепочка, 189. 2-адические целые числа, 166. 2-адические целые числа как метрическое пространство, 653. 2-адические числа, 360. 2-адические числа рациональные, 231. 2-номиальный коэффициент, 806. 2SAT, 82, 82. 3CNF, 81. 3SAT, 81, 608. 8-мерный куб, 346. BDD, 243. Bitburger Brauerei, 16. С, 42. С1-сеть, 98. CMath, 733. CNF, 78, 126. covering, 517. CRC, 220, 241. DNF, 77, 126. endo-order, 422. GraphBase, 87. hack, 815. HAKMEM, 192, 650, 655. Haralambous, 4. I Ching (Ш1), 547, 574. IBM Type 650, 6. IEEE Transactions, 11. ind a, 487. Ludus Clericalis, 554, 574. max, 88, 230. METBFONT, 4, 31, 686. МЕТЯРО5Т, 4. min, 88, 230. MIP-год, 20. MMIX, 184, 231, 404, 439, 652, 658, 665, 667. MMIXAL, 63. MP3 (MPEG-1 Audio Layer III), 220. MXOR, 405.
ПРЕДМЕТНО-ИМЕННОЙ УКАЗАТЕЛЬ 921 NP-полнота, 9, 57, 283, 311, 603, 785. Р-разбиения, 470. Р = NP(T), 80. PLA, 78. Prolog, 82. Proteus, 575. ^-баллотировочные числа, 536. q-мультиномнальные коэффициенты, 438. q-номиальная теорема, 831, 835. д-номиальные коэффициенты, 806, 852, 878. д-числа Каталана, 536. Стирлинга, 492. QDD, 277. RISC: Reduced Instruction Set Computer, 53. SGB, 28. Stanford GraphBase, 10, 28, 29, 31, 41, 44, 52, 297, 322, 368, 488, 527, 636, 888. полное руководство, 53. SWAC, 24. T£X, 31, 879. TYueType, 686. UCS, 240. Unicode, 240. UNIVAC 1206 Military Computer, 24. UTF-8, 240. UTF-16, 240. Wikipedia, 242. XOR, 74, 103, 795. z-номиальная теорема, 831. Абелева группа, 470, 597, 890. Абель, Нильс Хенрик (Abel, Niels Henrik), 833. Аборги, Сэмюэл Эдмунд Нии Саи (Aborhey, Samuel Edmund Nii Sai), 713. Абстрактная алгебра, 253. Аванн, Шервин Паркер (Avann, Sherwin Parker), 116, 798. Автоматизация вывода, 614. Автоморфизм, 34, 68, 587, 592, 597, 728. Аграваль, Дхарма Пракаш (Agrawal, Dharma Prakash (чй" 9*1*1 ЭПТЧТёГ)), 650. Адам, Андрас (AdAm, AndrAs), 765. Адамар, Жак Соломон (Hadamard, Jacques Salomon), 762. Адачи, Фимие (Adachi, Fumie (з£"ЙЕ5ЙЕ))> 566. Адена, Майкл Энтони (Adena, Michael Anthony), 750. Адресные биты, 715. Айвес, Фредерик Малкольм (Ives, Frederick Malcolm), 401. Айкен, Говард Хатавей (Aiken, Howard Hathaway), 133. Айнли, Стивен (Ainley, Stephen), 750. Айтаи, Миклош (Ajtai, Mikl6s), 119. Акерс, Шелдон Букингем-мл. (Akers, Sheldon Buckingham, Jr.), 114, 302, 303, 754. Аккорд, 417, 439. Акл, Селим Георг (Akl, Selim George GJb eA“))> 798. Активность, 420. Алгебра графов, 65. медиан, 90-116. семейств, 298, 320, 322, 324, 325, 749. Алгебраическая связность, 893. Алгоритм без циклов, 338, 348, 358, 367, 398, 435, 436, 529, 757, 784, 798, 809, 814, 815, 829. двери-вертушки, 415, 460. обработки отношений эквивалентности, 95, 845. Орда-Смита, 570. разложения, 778. Алгоритмы на графах, 193, 233. Алексеев, Валерий Борисович, 626. Аллуш, Жан-Поль (Allouche, Jean-Paul), 658. Алмквист, Герт Эйнар Торстен (Almkvist, Gert Einar Torsten), 835. Алон, Hora (Alon, Noga (уЙЖ пм)), 622, 647, 648. Алонсо, Лорен (Alonso, Laurent), 882. Алфавитный порядок, 60. аль-Самаваль ибн Яхья ибн Яхуда аль-Магриб (al-Samaw’al (= as-Samaw’al), ibn Yahya ibn Yahuda al-Maghribl (Ji.jA*JI й?')), 554, 898. Альберс, Сюзанна (Albers, Susanne), 669. Альду, Девид Джон (Aldous, David John), 513. Альпинизм, 476. Альсведе, Рудольф (Ahiswede, Rudolph), 826. Альфа-канал, 229. Альфрик Грамматик, аббат Эйншамский (jElfric Grammaticus, abbot of Eynsham), 328. Алюк, Факир Чанд (Auluck, Faqir Chand), 862. Амано, Казуюки (Amano, Kazuyuki (5Ж~Ф)), 292, 319. Амарель, Сол (Amarel, Saul), 649. Амир, Яир (Amir, Yair (П’П9 1W)), 621. Анаграмма, 552, 583. Анализ алгоритмов, 63, 162, 224, 276, 321, 396-401, 404, 411, 434, 436, 437, 458, 508, 536, 541, 544, 666, 869. Английский язык, 28. Андерсен, Ларс Довлинг (Andersen, Lars Dovling), 579. Антисимметричный ориентированный граф, 118. Антисимметрия, 87. Антицепочка подмножеств, 517.
922 ПРЕДМЕТНО-ИМЕННОЙ УКАЗАТЕЛЬ Аппель, Кеннет Айра (Appel, Kenneth Ira), 37. Арабские математики, 579. цифры, 574. Аренс, Вильгельм Эрнст Мартин Георг (Ahrens, Wilhelm Ernst Martin Georg), 579, 749. Арийоши, Хирому (Ariyoshi, Hiromu (WB&)), 674. Арима, Ёриюки (Arima, Yoriyuki (WJSVSfiD), 566, 756. Аримура, Хироки (Arimura, Hiroki (WWW)), 750, 752. Арисава, Макото (Arisawa, Makoto (Ш1Й)), 787. Аристоксен (Aristoxenus (’ApiozoEevoc)), 551. Аристотель из Стагира, сын Никомаха (Aristotle of Stagira, son of Nicomachus (’АрютотёХтк Nixo|iaxou ° Етосрркцс)), 557. Арифметика с многократной точностью, 247. с плавающей точкой, 247, 896. Арифметическая прогрессия, 60. Арифметическое среднее, 470, 495. Аркю, Дидье (Arqufcs, Didier), 896. Арндт, Йорг Уве (Arndt, Jorg Uwe), 655, 665, 760. Арнольд, Девид Брайан (Arnold, David Bryan), 511. Архитектура SIMD, 185. Асимптотические методы, 138, 451-458, 475-482, 494. Аспвалл, Бенгт Ингемар (Aspvall, Bengt Ingemar), 114, 610. Ассоциативность, см. Закон ассоциативности, 74. Ассоциаэдр, 535. Аткин, Артут Оливер Лонсдейл (Atkin, Arthur Oliver Lonsdale), 832. Аткинсон, Майкл Дэвид (Atkinson, Michael David), 882. Атомарность, 538. Атрибуты Бога, 556. Ауротор, 369. Аутоморфизм, 378, 398. Аффинная функция, 123, 629. Ахмад, Салах (Ahmad, Salah (а^.1 QiLa)), 554, 898. Ациклический ориентированный граф, 200, 243. Ацикличный граф, 35. Ашар, Пранав Навинчандра (Ashar, Pranav Navinchandra (я«1ч чч1тч-я зоЭДс)), 704. Ашбахер, Майкл Джордж (Aschbacher, Michael George), 587. Ашенхарст, Роберт Ловетт (Ashenhurst, Robert Lovett), 147, 150. Баец, Джон Карлос (Baez, John Carlos), 762. База БДР, 304, 307, 308, 327. Базис векторного пространства, 434. Байт: 8-битовая величина, 240. Байты, проверка относительного порядка, 186. Бак, Маршалл Уилберт (Buck, Marshall Wilbert), 439. Бакли, Майкл Роберт Уоррен (Buckley, Michael Robert Warren), 398. Бакос, Тибор (Bakos, Tibor), 765. Балдерик (Bald£ric), 555. Баллотировочные числа, 509, 536. Баль, Лалит Раи (Bahl, Lalit Rai (nleia ТПГ4^tl)), 754. Банг, Тогер Софус Вильгельм (Bang, Thoger Sophus Vilhelm), 577. Бандельт, Ганс-Юрген (Bandelt, Hans-Jiirgen), 617. Барбара Милла, Даниэль (ВагЬагй MillA, Daniel), 115. Барбур Эндрю Дэвид (Barbour, Andrew David), 597. Барвелл, Брайан Роберт (Barwell, Brian Robert), 399. Барицентрические координаты, 46, 115. Барон, Герд (Baron, Gerd), 579. Бархан, 542. Батлер, Йон Терри (Butler, Jon Terry), 699. Батчер, Кеннет Эдвард (Batcher, Kenneth Edward), 226, 662. Баумгарт, Брюс Гюнтер (Baumgart, Bruce Guenther), 177. Баухуис, Бернард (Bauhuis, Bernard (= Bauhusius, Bernardus)), 562. Бах, Йоганн Себастьян (Bach, Johann Sebastian), 17. БДР, 243. с подавлением нулей, 293-302. Безу, Этьен (B6zout, Etienne), 898. Безье, Пьер Этьен (B£zier, Pierre Etienne), 216, 237, 686. Бейдлер, Джон Энтони (Beidler, John Anthony), 375. Бейер, Уэнделл Терри (Beyer, Wendell Terry), 210, 520. Бейс, Джон Картер (Bays, John Carter), 656. Бекенбах, Эдвин Форд (Beckenbach, Edwin Ford), 413, 572. Беккер, Гарольд Вильям (Becker, Harold William), 849, 853, 854, 870. Беккетт, Сэмюэль Барклай (Beckett, Samuel Barclay), 365. Веллман, Ричард Эрнест (Bellman, Richard Ernest), 13, 427, 896. Беллхаус, Девид Ричард (Bellhouse, David Richard), 556. Белок, 574. Бенеш, Вацлав Эдвард (Bene§, Vaclav Edvard), 178. Беннетт, Грэхем (Bennett, Grahame), 727. Беннетт, Уильям Ральф (Bennett, William Ralph), 333.
ПРЕДМЕТНО-ИМЕННОЙ УКАЗАТЕЛЬ 923 Бентли, Йон Луи (Bentley, Jon Louis), 677. Берг, Клод (Berge, Claude), 55, 695, 747. Береле, Аллан (Berele, Allan), 851. Берлекамп, Элвин Ральф (Berlekamp, Elwyn Ralph), 187, 640, 652, 680. Бермаи, Чарльз Леонард (Berman, Charles Leonard), 700. Берн, Йохен (Bern, Jochen), 713. Бернайс, Пауль Исаак (Bernays, Paul Issak), 77. Бернулли, Якоб (Bernoulli, Jacques (Jakob, James)), 424, 547, 561, 564, 565, 783, 899, 900. Бернштейн, Артур Джай (Bernstein, Arthur Jay), 760. Бернштейн, Бенджамин Абрам (Bernstein, Benjamin Abram), 599. Бернштейн, Сергей Натанович, 686. Берте, Кристиан (Berthet, Christian), 708. Бесконечное множество, 750. Бесконечность, 44. Бесповторная функция, 290, 317. обобщенная, 728. Бесполезная последовательность, 488. Бессинджер, Джанет Симпсон (Beissinger, Janet Simpson), 728. Бёрнер, Андерс (Bjorner, Anders), 820. Биггс, Норман Линстед (Biggs, Norman Linstead), 35. Биграф, 37. Биклаттер, 540. Биллон, Жан-Поль (Billon, Jean-Paul), 754. Билогарифм, 833, 835. Билогарифмическая функция, 465. Бинарная арифметика, 548. Бинарная диаграмма решений, 242-257. Бинарная рекуррентность, 137, 138, 157, 225, 615, 633, 777. Бинарная решетка мажоризации, 121. Бинарная строка, 78. Бинарное векторное пространство, 434. дерево, 112, 125, 127, 243, 323, 499, 502-508, 531-539, 571. дерево поиска, 234, 263, 537, 546. обозначение Дьюи, 879. отношение, 472. сложение, 136, 256, 308. умножение, 310. число Грея, 818. Бинарные деревья поиска, 659. Бинарные деревья, представление, 515. Бинарные операции, 71, 304, 319. таблица, 73. Бинарные разбиения, 470. Бинарный декодер, 634. Бинарный код Грея, 331-346, 358-362, 366, 372, 415, 544, 633, 652, 664, 671, 774, 809, 847, 883. Бинарный логарифм, 174, 191, 231. Бинарный луч, 360. Бинарный луч Грея, 360. оператор, 261. поиск, 519. Бинг, Р. X. (Bing, R. Н.) 577. Биномиальное дерево, 435, 413, 895. Биномиальный коэффициент, 440. обобщенный, 442. Биох, Ян Корстиан (Bioch, Jan Corstiaan), 613. Биразбиения, 485. Биркхофф, Гарретт (Birkhoff, Garrett), 614, 846. Бит переноса, 136, 158. четности, 60, 334. Битнер, Джеймс Ричард (Bitner, James Richard), 338, 416. Битовое дополнение, 258. Битовые операции, 71, 100, 109, 129, 131, 156, 165, 393, 411, 599, 812, 813, 827. Блейк, Арчи (Blake, Archie), 604. Блек, Макс (Black, Мах), 297. Ближайший общий предок, 200, 234. Близкое дерево, 522-527, 888. Близость к идеалу, 418-424, 437, 504. Блиссард, Джон (Blissard, John), 848. Блоки, 471. Блочный код, 327. Блюм, Мануэль (Blum, Manuel), 696. Блюм, Норберт Карл (Blum, Norbert Karl), 153. Бодо, Жан Морис Эмиль (Baudot, Jean Maurice Emile), 333. Бозе, Радж Чандра (Bose, Raj Chandra (ЧТОЕ^чд)), 24. Бойер, Роберт Стефен (Boyer, Robert Stephen), 70. Бойяи, Янош (Bolyai, JAnos), 203. Болгарский пасьянс, 471. Болкер, Этан Девид (Bolker, Ethan David), 854. Болл, Майкл Оуэн (Ball, Michael Owen), 606, 607. Боллиг, Беата Барбара (Bollig, Beate Barbara), 281, 287, 315, 718, 721, 732. Боллобас, Бела (Bollobas, Вё1а), 626. Бонди, Джон Адриан (Bondy, John Adrian), 34, 598. Бонне, Энтони Эдмонд (Bonner, Anthony Edmonde), 898. Бонферрони, Карло Эмилио (Bonferroni, Carlo Emilio), 835. Боппана, Рави Бабу (Boppana, Ravi Babu), 647, 648. Борель, Эмиль Феликс Эдуард Жюстен (Borel, Emile F£lix Edouard Justin), 778. Борковски, Людвик Стефан (Borkowski, Ludwik Stefan), 197. Борос, Эндре (Boros, Endre), 150, 606. Боррель, Жаи (Borrel, Jean (= Buteonis, loannes)), 899. Восвелл, Джеймс (Boswell, James), 16.
924 ПРЕДМЕТНО-ИМЕННОЙ УКАЗАТЕЛЬ Боссен, Дуглас Крейг (Bossen, Douglas Craig), 582. Вотермане, Джекоб (Botermans, Jacobus (= Jack) Petrus Hermana), 772. Боф, Чарльз Ричмонд (Baugh, Charles Richmond), 619, 621, 625. Боченьски, Йозеф Мария (Bocheiiski, J6zef (= Innocenty) Maria), 73. Бошкович, Рудер Иосип (Boskovii, Ruder Josip), 569, 576, 836. Брайант, Рэндал Эверитт (Bryant, Randal Everitt), 278, 280, 299, 300, 303, 311, 703, 709, 752. Брайтвелл, Грэхэм Ричард (Brightwell, Graham Richard), 626, 797. Брандт, Юрген (Brandt, Jorgen), 843. Браун, Джозеф Алексендер (Brown, Joseph Alexander), 785. Браун, Джон Уэсли (Brown, John Wesley), 580. Браун, Дэвид Трент (Brown, David Trent), 220. Браун, Уильям Гордон (Brown, William Gordon), 587. Браун, Чарльз Филип (Brown, Charles Philip), 550. Браунинг, Элизабет Барретт (Browning, Elizabeth Barrett), 493. Брезенхам, Джек Элтон (Bresenham, Jack Elton), 685. Брейн, Николас Говерт де (de Bruijn, Nicolaas Govert), 352, 407, 482, 515, 856. Брейс, Карл Стивен (Brace, Karl Steven), 303. Брейтбарт, Юрий Яковлевич (Breitbart, Yuri), 711, 753. Брейтон, Роберт Кинг (Brayton, Robert King), 152, 736. Брейш, Ричард Льюис (Breisch, Richard Lewis), 786. Брент, Ричард Пирс (Brent, Richard Peirce), 635, 663. Бретт, Жан (Brette, Jean), 578. Бриггс, Генри (Briggs, Henry), 693. Брилавски, Томас Генри (Brylawski, Thomas Henry), 837. Бринкманн, Гуннар (Brinkmann, Gunnar), 594. Бродал, Герт Столтинг (Brodal, Gerth S tolling), 188. Бродник, Андрей (Brodnik, Andrej), 193. Бройер, Мелвин Аллен (Breuer, Melvin Allen), 676. Брон, Конраад (Bron, Coenraad), 674. Броуновское движение, 512. Бруальди, Ричард Энтони (Brualdi, Richard Anthony), 580. Брук, Ричард Хьюберт (Bruck, Richard Hubert), 582. Брукер, Ральф Энтони (Brooker, Ralph Anthony), 165. Брукс, Роуланд Леонард (Brooks, Rowland Leonard), 589. Брюстер, Джордж (Brewster, George), 27. Буквометик, 375, 384, 400. чистый, 376, 398. Булева матрица, 272. Булева разность, 273, 710. Булева решетка, 872. Булева формула, 443. Булева функция, 55, 518. Булева цепочка, 124, 327. Буль, Джордж (Boole, George), 72, 76, 252, 637. Бургер, Алевин Петрус (Burger, Alewyn Petrus), 749. Буркхардт, Иоганн Карл (Burckhardt, Johann Karl (= Jean Charles)), 570. Бурлей, Вальтер (Burley (= Burleigh), Walter), 75. Бусина, 243, 256, 260. Бутеонис, Иоанн (Buteonis, loannes (= Borrel, Jean)), 899. Бутон, Чарльз Леонард (Bouton, Charles Leonard), 650. Бхаскара Акарья (BhSskara II, Асйгуа, son of MaheSvara (ЧИ4>ПМ|4, Ч^ЧC^M)), 552. Бхаттотпала (Bhattotpala (= Utpala, 4 g) did)), 562.’’ Быстрое преобразование Уолша, 362. Фурье, 225, 357. Бью, Ален (Bui, Alain), 20. Бэббидж, Генри Провост (Babbage, Henry Provost), 636. Бэббидж, Чарльз (Babbage, Charles), 145, 636, 641, 642. Бюхи, Юлиус Рихард (Biichi, Julius Richard), 155, 654. Бюхнер, Морган Меллори-мл. (Buchner, Morgan Mallory, Jr.), 760. Вагналлс, Адам Уиллис (Wagnails, Adam Willis), 73. Вагнер, Эрик Герхардт (Wagner, Eric Gerhardt), 605. Вада, Эиити (Wada, Eiiti ($JE03£—)), 655. Вазони, Эндре (Wzsonyi, Endre), 773. Вайз, Дэвид Стефен (Wise, David Stephen), 666. Вайзнер, Луи (Weisner, Louis), 580. Вайнбергер, Арнольд (Weinberger, Arnold), 635. Вайндер, Роберт Оуэн (Winder, Robert Owen), 90, 620, 649. Вайнер, Питер Галлегос (Weiner, Peter Gallegos), 148, 150, 162. Валентность, см. степень, 33. Ванг, Да-Лун (Wang, Da-Lun (Hi^fe)), 428, 431, 592. Ванг, Пинг Янг (Wang, Ping Yang (Hi3?, пёе Ш3?)), 428, 431. Ванг, Терри Мин Их (Wang, Terri Min Yih), 357. Ванг, Шинмин Патрик (Wang, Shinmin Patrick (iEi^rR)), 580.
ПРЕДМЕТНО-ИМЕННОЙ УКАЗАТЕЛЬ 925 Вандерлих, Чарльз Марвин (Wunderlich, Charles Marvin), 675. Варди, Александер (Vardy, Alexander (m> TOTO>n)), 754. Вариация, 397, 400, 786, 796. Варол, Яков Леон (Varol, Yaakov Leon (ini) YlN> apP)), 392, 395. Ватанабе, Масатоси (Watanabe, Masatoshi (»»»&)), 4. Ватанабе, Хитоси (Watanabe, Hitoshi (ЖЙ₽«)), 573. Ватриквант, Симон (Vatriquant, Simon), 375. Ватсон, Джордж Невилл (Watson, George Neville), 878. Баховский, Евгений Борисович, 891. Вебер, Карл (Weber, Karl), 606. Веблен, Освальд (Veblen, Oswald), 212. Вегенер, Инго Вернер (Wegener, Ingo Werner), 155, 257, 281, 287, 291, 304, 315, 319, 598, 633, 699, 703, 708, 711, 713, 715, 716, 718, 721, 723, 727. Вегмаи, Марк Н. (Wegman, Mark N.), 696. Вегнер, Герд (Wegner, Gerd), 820. Вейден, Путтило Леонович (Wegner, Peter (= Weiden, Puttilo Leonovich)), 172, 176. Вейхсель, Пол Моррис (Weichsel, Paul Morris), 591. Вектор, 78, 136. размеров, 442. счетов, 469. Векторное пространство, 434, 540, 690. Велтер, Корнелиус Петрус (Welter, Cornells Petrus), 653, 654. Вергилий (Vergil (= Publius Vergilius Maro)), 563. Вермут, Удо (Wermuth, Udo), 10. Вернике, Август Людвиг Пауль (Wernicke, August Ludwig Paul), 23. Верофф, Роберт Луи (Veroff, Robert Louis), 614. Верхнер, Ральф (Werchner, Ralph), 291, 727. Верхняя граница, 139. Верхняя полуплоскость, 679. Верхняя тень, 426. Верхушка, 38. Вершик, Анатолий Моисеевич (Vershik, Anatoly Moiseevich), 458, 835. Вершинное покрытие, 233, 305. Вес Ли, 359. Вестергомби, Каталин (Vesztergombi, Katalin), 594. Вестон, Эндрю (Weston, Andrew), 390. Ветвление, 217, 232. Вёльфель, Петер Филипп (Wolfel (= Woelfel), Peter Philipp), 292. Взаимная ортогональность, 59. Взаимно несравнимые множества, 310. Взаимоисключение, 115. Вибольд, еписком Камбрайский (Wibold, bishop of Cambrai (= Wiboldus, Cameracensis episcopus)), 554, 556, 567. Видеманн, Дуглас Генри (Wiedemann, Douglas Henry), 99, 439, 627, 774. Видимый узел, 284, 722. Вик, Кристофер Джон ван (Wyk, Christopher John Van), 682. Виккерс, Вирджил Юджин (Vickers, Virgil Eugene), 763, 765. Викли, Виллиам Дуглас (Weakley, William Douglas), 749. Викулин, Анатолий Петрович, 624. Вильсон, Вильфрид Джордж (Wilson, Wilfrid George), 373. Вильсон, Дэвид Уитекер (Wilson, David Whitaker), 675. Вильсон, Ричард Майкл (Wilson, Richard Michael), 580. Вильсон, Робин Джеймс (Wilson, Robin James), 35, 65, 595. Вильф, Герберт Саул (Wilf, Herbert Saul), 390, 415, 467, 541, 573, 800, 806. Вильямс, Аарон Майкл (Williams, Aaron Michael), 407, 802, 815. Вильямсон, Стенли Джилл (Williamson, Stanley Gill), 390, 402, 798, 844. Виман, Макс (Wyman, Max), 481, 853, 855. Винет, Норберт (Wiener, Norbert), 907. Винклер, Питер Манн (Winkler, Peter Mann), 346, 347, 365, 764, 882. Винникомб, Роберт Ян Джеймс (Vinnicombe, Robert Ian James), 398. Винчи, Леонардо ди сер Пьеро да (Vinci, Leonardo di ser Piero da), 28, 44. Виртуальный адрес, 309. Високосный год, 669. Витале, Фабио (Vitale, Fabio), 202. Витерби, Эндрю Джеймс (Viterbi, Andrew (= Andrea) James), 754. Вишкин, Узи Ешуа (Vishkin, Uzi Yehoshua (I’pW’l У\УШ’ ’ПУ)), 200. Вложенность, 326, 499. Вложенные скобки, 223, 510, 514, 530, 538, 571, 572, 573. Внешний узел, 499. Во, Кьем-Фонг (Vo, Kiem-Phong), 885. Военный рапорт, 329. Возможность, 233. Вольф, Маргарет Керолайн (Wolf, Margarete Caroline), 901. Вольфрам, Стивен (Wolfram, Stephen), 690. Вонг, Родерик Су-Чун (Wong, Roderick Sue-Chuen (Ttibfr)), 482. Вонг, Чак-Куен (Wong, Chak-Kuen (ЖЯ1Ж)), 182, 227, 597. Временная метка, 709. Время, 230. By, Ван Ха (Vfi, VS.n НА), 622.
926 ПРЕДМЕТНО-ИМЕННОЙ УКАЗАТЕЛЬ Вуд, Фрэнк Вашингтон (Wood, Frank Washington), 141. Вудкок, Дженнифер Роселинн (Woodcock, Jennifer Roselynn), 739. Вудрам, Лютер Джей (Woodrum, Luther Jay), 174, 657. Вудс, Дональд Рой (Woods, Donald Roy), 666. Вул, Авишаи (Wool, Avishai (i’ll ЦУ’ЗК)), 621. Входящая степень, 38, 39, 63, 298. Выборы, 557. Выделение битов, 172. и сжатие, 181. старшего бита, 231, 670. Выполнимая функция, 80. Выполнимость, 80-112. Выпуклая оболочка, 94. Выпуклая оптимизация, 666. Вырожденность, 535, 537, 894. Вычисление, 245. булевых функций, 124. Вычисляемые таблицы, см. Кэш записей, 268. Вычитание, 229. с насыщением, 12. Вьено, Жерар Мишель Франсуа Ксавье (Viennot, G£rard Michel Francois Xavier), 896. Вэнь-ван (King Wen), 547, 574. Вюллемин, Жан Этьен (Vuillemin, Jean Etienne), 307, 677, 752. Габов, Гарольд Нейл (Gabow, Harold Neil), 677, 889. Гавел, Вацлав (Havel, Vaclav), 50. Гаддам, Джерри Уильям (Gaddum, Jerry William), 594. Гаджиев, Максим Мамаевич, 624. Гай, Ричард Кеннет (Guy, Richard Kenneth), 640, 652, 680, 714. Гален, Клавдий (Galen, Claudius (KXauSio; ГаХщюс)), 73. Галилей, Галилео (Galilei, Galileo), 567. Галлаи, Тибор (Gallai (= Grunwald), Tibor), 591. Галлиан, Джозеф Энтони (Gallian, Joseph Anthony), 794. Галль, Франц Йозеф (Gall, Franz Joseph), 16. Галлье, Жан Генри (Gallier, Jean Henri), 85. Галуа, Эварист (Galois, Evariste), 378. Гамбург, Майкл Александер (Hamburg, Michael Alexander), 654. Гамильтон, Уильям Рован (Hamilton, William Rowan), 35. Гамильтонов граф, 35, 584. путь, 35, 112, 299, 323, 344, 371, 390, 402, 404, 407, 438, 545, 792, 817, 871. цикл, 35, 323, 341, 363, 364, 372, 390, 401, 407, 765, 895. Гамма-функция, 477, 833. Ганкель, Герман (Hankel, Hermann), 478, 854. Гантер, Бернгард (Ganter, Bernhard), 580. Гарван, Фреисис Жерар (Garvan, Francis Gerard), 832. Гарди, Даниэль (Gardy, Danifele), 898. Гарднер, Мартин (Gardner, Martin), 27, 30, 208, 389, 397, 559, 612, 641, 680, 750, 772, 780, 843. Гари, Майкл Рэндольф (Garey, Michael Randolph), 919. Гарихаран, Рамеш (Hariharan, Ramesh (rrGma^, wniflwnrTar)), 889. Гармонические числа, 906-907. Гарсиа, Адриано Марио (Garsia, Adriano Mario), 852. Гарсия-Молина, Гектор (Garcia-Molina, Hector), 115. Гаусс, Иоганн Фридрих Карл (Gaufi (= Gauss), Johann Friderich Carl (= Carl Friedrich)), 23, 36, 203, 913. Гвиттоне д’Ареццо (Guittone d’Arezzo), 493. Гвоздик, Павол (Gvozdjak, Pavol), 364. Гебхардт, Дитер (Gebhardt, Dieter), 689. Гейл, Дэвид (Gale, David), 839. Гейне, Генрих Эдуард (Heine, Heinrich Eduard), 465. Гекзаметр, 562, 575. Гексаграмма, 547. Генерация, 329. всех решений, 246, 305. перестановок, 562. быстрейшая, 391. в лексикографическом порядке, 381. применение, 396. случайных чисел, 124, 368. сочетаний, 408-426, 434-440, 443. Генетический код, 574. Геометрическая сеть, 59, 60, 62. Геометрическое среднее, 470, 495. Геральдика, 566. Герардини, Лиза (Gherardini, Lisa), 44, 45. Гершвин, Джордж (Gershwin, George), 560. Гильберт, Давид (Hilbert, David), 443. Гильберт, Уильям С. (Gilbert, William S.), 329. Гильберт, Эдгар Нельсон (Gilbert, Edgar Nelson), 364. Гильберта основная теорема, 443. Гинденбург, Карл Фридрих (Hindenburg, Carl Friedrich), 370, 447, 475, 569. Гипербола, 212, 237, 654, 685. Гиперболическая плоскость, 202-216, 234. Гиперболические функции, 495. Гиперграф, 53, 67, 297, 746. Гипердуга, 593. Гиперкуб, 78. Гиперлес, 67. Гиперребро, 54. Гипотеза, 84. средних уровней, 816.
ПРЕДМЕТНО-ИМЕННОЙ УКАЗАТЕЛЬ 927 Главная профилограмма, 282, 283, 290, 314, 717. Главный подлее, 349. Глаголев, Валерий Владимирович, 625. Гладвин, Хармон Тимоти (Gladwin, Harmon Timothy), 172. Глобальная переменная, 710. Глубина булевой функции, 128. цепочки, 128, 156. Годдин де ла Вега, Луи Армандо (Goddyn de la Vega, Luis Armando), 364, 766. Годфри, Майкл Джон (Godfrey, Michael John), 58. Голдман, Джей Роберт (Goldman, Jay Robert), 852. Голдштейн, Алан Джей (Goldstein, Alan Jay), 392. Голль, Филипп (Golle, Philippe), 540, 886. Головоломки, 26, 578, 585. Голомб, Соломон Вольф (Golomb, Solomon Wolf), 409, 433, 582, 844. Голосование, 886. Гомер (Homer (“Орпрос)), 28, 563. Гомес, Питер Д. (Gomes, Peter J.), 16. Гомогенность, 417, 418, 424. Гомоморфизм, 100. Гонзалес-Моррис, Герман Антонио (Gonzalez-Morris, German Antonio), 786. Гонне Хаас, Гастон Генри (Gonnet Haas, Gaston Henry), 856. Гордиев узел, 366. Гордон, Бэзил (Gordon, Basil), 487. Гордон, Леонард Джозеф (Gordon, Leonard Joseph), 583. Горный перевал, 476. Госпер, Ральф Вильям-мл. (Gosper, Ralph William, Jr.), 223, 226, 241. ГОСТ, 160. Гото, Эиичи (Goto, Eiichi —)), 619, 620. Грамматика, 83. Гранди, Патрик Майкл (Grundy, Patrick Michael), 650. Грант, Джеффри Ллойдд Джагтон (Grant, Jeffrey Lloydd Jagton), 584. Граф, 30-57, 61-68, 179, 310, 521-529, 542. алгебра, 46. Кейли, 390, 407, 597, 792. нулевой, 46. Петерсена, 33, 35, 46, 6i, 65, 67, 68, 589. пути Рп, 888. Рамануджана, 45. ферзя, 67, 674. цикла Сп, 888. Чватала, 33, 61, 67, 594. Греческая поэзия, 550. Григгс, Джерольд Робинсон (Griggs, Jerrold Robinson), 843. Грини, Кертис (Greene, Curtis), 518, 838, 885. Грис, Дэвид Джозеф (Gries, David Joseph), 598. Грос, Люк Агатон Луи (Gros, Luc Agathon Louis), 333. Грот, Эдвард Джон,-мл. (Groth, Edward John, Jr.), 27. Группа, 222, 378, 390. коммутативная, 470. Группоид, таблицы умножения, 198. Грэхем, Рональд Льюис (Graham, Ronald Lewis «ЙЙ))> 117, 615, 739, 826, 863. Грюнбаум, Бранко (Griinbaum, Branko), 594. Грятцер, Георг (Gratzer, Gyorgy (= George)), 872. Гуд, Ирвинг Джон (Good, Irving John), 855. Гуибас, Леонидас Джон (Guibas, Leonidas John (Гхцхпа;, AecovlSa; Icoavvou)), 687. Гун, Сян Цзун (Kung, Hsiang Tsung (&#«)), 635. Гуо, Зиченг Чарльз (Guo, Zicheng Charles (®ЙЖ)), 209, 236. Гупта, Хаисрай (Gupta, Hansraj «НТГЗГЦЧП-)), 834. Гурвиц, Адольф (Hurwitz, Adolf), 590. Гурвич, Владимир Александрович (Gurvich, Vladimir Alexander), 150, 602. Гутри, Френсис (Guthrie, Francis), 37. Гутьяр, Уолтер Джозеф (Gutjahr, Walter Josef), 881. Гюго, Виктор Мари (Hugo, Victor Marie), 44. Гюнтер, Вольфганг Альбрехт (Gunther, Wolfgang Albrecht), 720. Дайсон, Фриман Джон (Dyson, Freeman John), 832. Дакворт, Ричард (Duckworth, Richard), 373. Дактиль, 550, 563. Далли, Уильям Джеймс (Dally, William James), 759. Даллос, Джозеф (Dallos, Jdzsef), 173, 658. Далхаймер, Торстен (Dahlheimer, Thorsten), 10, 611, 667, 696, 729, 730. Данг, Тран-Нгок (Danh, TYan-Ngoc), 826. Данте Алигьери (Dante Alighieri), 853. Данхэм, Бредфорд (Dunham, Bradford), 122, 624. Дарроч, Джон Ньютон (Darroch, John Newton), 860. Дата, 168, 230. Даулинг, Уильям Френсис (Dowling, William Francis), 85. Дахми, Шаддин Фарис (Dughmi, Shaddin Faris (^*»j!l jU ^,jLJw)), 751. Дважды ограниченные разбиения, 458, 467, 469. Дважды связанный список, 96, 350, 523, 773. Двенадцатизадачие, 444, 462, 561. Дверь-вертушка, 436, 521, 527, 542. Двоичная система счисления, 71, 330, 548, 551, 560.
928 ПРЕДМЕТНО-ИМЕННОЙ УКАЗАТЕЛЬ Дворжак, Станислав (Dvorak, Stanislav), 805. Двудольный гиперграф, 594. Двудольный граф, 37, 44, 45, 54, 57, 62, 64, 66, 67, 150, 180, 297, 586, 593, 679, 739. Двумерное произведение, 366. Двумерные данные, 180. Двустрочная запись перестановки, 377. Двустрочный массив, 849. Двухуровневое представление, 300. Де Брейн, Николас Говерт (de Bruijn, Nicolaas Govert), 352, 407, 482, 515, 856. Дебай, Питер Джозеф Вильям (Debye, Peter Joseph William (= Debije, Petrus Josephus Wilhelmus)), 476. Деген, Карл Фердинанд (Degen, Carl Ferdinand), 762. Дедекинд, Юлиус Вильгельм Рихард (Dedekind, Julius Wilhelm Richard), 453. Дейкстра, Эдсгер Вибе (Dijkstra, Edsger Wybe), 372, 666. Дейставительные числа, 119. Действительные корни, 496. Декартово дерево, 659, 677. произведение, 12, 48, 65, 92, 526, 543. Декартовы координаты, 212. Декомпозиция функций, 315. Декорированные бинарные деревья, 538. Деление, 168. на 10, 190. Делители, сумма, 465. Делитель, 560, 567. Деллак, Ипполит (Dellac, Hippolyte), 318, 730. Дельта-последовательность, 341, 401, 815, 816. Денг, Ева Ю-Пинг (Deng, Eva Yu-Ping (5Щ5Т)), 850. Дене, Жозе (D6nes, Jdzsef), 873. Део, Нарсингх (Deo, Narsingh (ч <.Гец> ^Ч")), 573. Дерамида, 659. Дербе, Йозеф (Derbfcs, Joseph), 842. Дерево, 849. поиска, 25. проигравших, 808. рекурсии, 509. Фибоначчи, 544, 546. Шрёдера, 539. Штайнера, 8, 36. Деревья, 498. без корня, см. Свободные деревья, 521. Грега, 856. Дершовиц, Наум (Dershowitz, Nachum (yznvni Dim)), 873. Десятичная запись, 844. Дьюи, 510. Десятичная система счисления, 330, 347, 369. Детерминант, 553, 891. Дефект, 538. Джайн, Джавахар (Jain, Jawahar (чН1$< «ЬГ)), 703. Джанг, Минг (Jiang, Ming (31ВД)), 390. Джаст, Винфрид (Just, Winfried), 626. Джевонс, Уильям Стенли (Jevons, William Stanley), 72, 75, 600. Джей Rosenkrantz, Daniel Jay, 711. Джейллет, Кристоф Андре Жорж (Jaillet, Christophe Andr6 Georges), 20. Джеймс, Генри (James, Henry), 15. Джексон, Бредли Уоррен (Jackson, Bradley Warren), 407, 827. Джелинек, Фредерик (Jelinek, Frederick), 754. Дженг, Сех-Вунг (Jeong, Seh-Woong es >4]-g-)). 698. Дженкинс, Томас Арнольд (Jenkyns, Thomas Arnold), 418. Дженоччи, Анжело (Genocchi, Angelo), 318, 730, 734. Джеффри, Девид Джон (Jeffrey, David John), 856. Джилл, Стенли (Gill, Stanley), 175. Джиллис, Дональд Брюс (Gillies, Donald Bruce), 176. Джоичи, Джеймс Томеи (Joichi, James Tomei (ЙШЖВД)), 831, 852. Джонсон Аллан Уильям-мл. (Johnson, Allan William, Jr), 785. Джонсон, Дэвид Стифлер (Johnson, David Stifler), 674, 919. Джонсон, Селмер Мартин (Johnson, Selmer Martin), 398. Джонсон, Сэмюэль (Johnson, Samuel), 6. Джордан, Мари Эннемонд Камилла (Jordan, Marie Ennemond Camille), 212. Джха, Пранава Кумар (Jha, Pranava Kumar (я“14 it 5ГТ)), 95. Дзета-функция, 658, 833, 862. Диагонализация, 155. Диагональная матрица, 596. Диагонально доминирующая матрица, 891. Диаграмма, 33, 540, 885. Феррерса, 448, 454, 457, 461, 482, 837, 839, 843, 851. Феррерса, обобщенная, 830. Юнга, 536, 873. Диаконис, Перси Уоррен (Diaconis, Persi Warren), 826, 863. Диаметр, 64, 65, 68, 590. графа, 35, 62. Дизъюнкт, 107. дизъюнкция литералов, 79. Крома, 81, 98, 112, 114, 643. Хорна, 81, 112, 113, 149, 613, 643. Дизъюнктивная нормальная форма, 77, 107. ортогональная, 119. полная, 77. Дизъюнктивная простая форма, 79, 90, 97, 300. Дизъюнкция, 197. Дик, Вальтер Франц Антон фон (Dyck, Walther Franz Anton von), 572. Дикер Юцель, Мелек (Diker Yficel, Melek), 627.
ПРЕДМЕТНО-ИМЕННОЙ УКАЗАТЕЛЬ 929 Дикман, Говард Ллойд (Dyckman, Howard Lloyd), 366, 772. Диллон, Джон Френсис (Dillon, John Francis), 627. Динамическое переупорядочение переменных, 287, 295, 738. Динамическое программирование, 13, 599, 896. Динамическое распределение памяти, 269. Диомед (Diomedes (АюрглВтк)), 551. Дирихле, Иоганн Петер Густав Лежён (Dirichlet, Johann Peter Gustav Lejeune), 658. Дискретное преобразование Фурье, 122, 337, 600, 762. Дискретный тор, 470. Дисперсия, 227, 597. Дистрибутивность, см. Закон дистрибутивности, 75. Дитц, Генри Гордон (Dietz, Henry Gordon), 184, 185, 667. Длина булевой функции, 127. внутреннего пути, 537. периода, 232. серии, 343, 346, 774. формулы, 132. уголков, 803. ДНК, 574. Добиньски, Г. (Dobinski, G.), 475. Добродетель, 555, 556, 562. Додекаэдр, 35. Дойл, Артур Игнатий Конан (Doyle, Arthur Ignatius Conan), 19. Дойч, Эмерик (Deutsch, Emeric), 883. Доказательство теоремы, 614. Доминирующее множество, 325, 680. минимальное, 325. Домино, 296, 321, 322, 444, 497. Донноло, Шаббетаи бен Авраам (Donnolo, Shabbetai ben Avraham (Иллтотзк p ’raw)), 551, 574. Дополнение, 46, 65, 69, 74, 128, 166, 221, 320, 430, 543, 547, 598, 674, 735, 892. простого ориентированного графа, 65. Дополнительный двоичный код, 166. Достижимость, 200. Достоверность, 73. Дрексель, Иеремия (Drexel (= Drechsel = Drexelius), Jeremias (= Hieremias)), 551, 552. Дрешлер, Николь (Drechsler, Nicole), 720. Дрешлер, Рольф (Drechsler, Rolf), 720. Дроби, египетские, 733. Дробная точность, 168. Ду, Розена Ру-Кси (Du, Rosena Ruo-Xia (tt£®)), 850. Дуальная генерация перестановок, 386. Дуальное тождество, 599. Дуальность, 54, 57, 67, 313, 318, 441, 442, 532, 533, 603, 619, 681, 693, 728, 825, 850. Дуальные сочетания, 408, 434, 438. Дуальный лес, 506. планарный граф, 888. Дуб, Майкл (Doob, Michael), 894. Дуброва, Елена Владимировна (Dubrova, Elena Vladimirovna), 694, 720. Дуга, 38-44. Дугвайд, Эндрю Мелвилл (Duguid, Andrew Melville), 178. Дутт, Эдмонд (Doutt£, Edmond), 579. Дуэт: 16-битовая величина, 240. Дхар, Дипак (Dhar, Deepak (£1чч> ЧТ)), 890. Дьюдени, Генри Эрнест (Dudeney, Henry Ernest), 334, 375, 399, 488, 545, 585, 748, 749, 780, 787, 895, 896. Дэвидсон, Джордж Генри (Davidson, George Henry (= Dee, G.), 828. Дэйвис Рой Осборн (Davies, Roy Osborne), 20, 577. Дэйкин, Дэвид Эдвард (Daykin, David Edward), 819, 826. Дюваль, Жан-Пьер (Duval, Jean-Pierre), 778. Дюмон, Доминик (Dumont, Dominique), 318, 730, 734. Евклид (Euclid (EuxXeiSric)), 203. Евклидово расстояние, 29, 31. Египетские дроби, 733. Единичная матрица, 692, 891. Единичный вектор, 430, 540. Естественное соответствие, 499, 531. Ёшида, Мицуёши (Yoshida, Mitsuyoshi (^Е0^Й)), 322. Жадный алгоритм, 143, 549. Жанг, Линбо (Zhang, Linbo (SS^ift)), 4. Жани, Николя (Janey, Nicolas), 896. Жао, Ксишун (Zhao, Xishun (j&^JH)), 611. Жарден, Николя (Jardine, Nicholas), 674. Жегалкин, Иван Иванович, 76, 600. Жизнь, 235, 316, 725. Жоливальд, Филипп (Jolivald, Philippe (= Paul de Hijo)), 826. Завершение квадрата, 452. Зависимость от переменной, 244. Задача булева программирования, 249. выполнимости для дизъюнктов Хорна, 85. двойного покрытия, 249. достижимости, 193. коммивояжера, 9, 299, 396. Лэнгфорда, 27. о восьми ферзях, 674, 748. о парковке, 890. о рюкзаке, 415. поиска минимума на отрезке, 234. точного покрытия, 20, 25, 27, 59, 295, 321, 565, 578, 579, 740. 30 Зак. 3331
930 ПРЕДМЕТНО-ИМЕННОЙ УКАЗАТЕЛЬ Задачи целочисленного программирования, 303. Заем, 667, 668, 755. Зайльбергер, Дорон (Zeilberger, Doron (TJT3>>3 ртп)), 464, 831. Зайтц, Рихард (Seitz, Richard), 388. Закон ассоциативности, 49, 65, 75, 90, 93, 106, 166, 253, 307, 317, 320, 505, 531, 535, 545, 601, 605, 633, 636, 707. больших чисел, 495. дистрибутивности, 66, 72, 75, 90, 106, 114, 117, 120, 156, 166, 253, 307, 320, 534, 590, 601, 602, 614, 651, 707. дополнения, 75. Кирхгофа, 458. коммутативности, 75, 90, 117, 166, 317, 320, 605, 633, 650, 707. мажоритарности, 90, 117. поглощения, 75, 166. полудистрибутивности, 535. разложения, 252. разработки, 77. сокращения, 102, 651. транзитивности, 405, 581. Законы де Моргана, 75, 88, 107, 599. Закс, Шмуль (Zaks, Shmuel (Dpt Pfronw)), 530, 532, 536, 867, 873. Зальцер, Герберт Эллис (Salzer, Herbert Ellis), 760. Замена переменных константами, 259. функциями, 309. Замощение, 216. плоскости, 68. Замощение, см. задача точного покрытия, 295. Замыкание, 325. Зантен, Аренд Ян ван (Zanten, Arend Jan van), 759, 809. Заполнение контура, 212-217. рюкзака, 435. Запоминание, 268. Зауэрхоф, Мартин Поль (Sauerhoff, Martin Paul), 281, 291, 598, 708, 715, 727, 731. Звезда, 403, 892. Звездная транспозипия, 389. Зейдель, Филипп Людвиг фон (Seidel, Philipp Ludwig von), 730. Зейлстра, Эрик (Zijlstra, Erik), 198. Зеркальная пара, 60. Зехфусс, Иоганн Георг (Zehfuss, Johann Georg), 590. Зилинг, Детлер Германн (Sieling, Detlef Hermann), 257, 713, 724. Зито, Дженнифер Снайдер (Zito, Jennifer Snyder), 597. Знак перестановки, 374. Знаковая перестановка, 398. Знаковые биты, представление, 195. Знаковый сдвиг вправо, 218, 657. Знакопеременная комбинаторная система счисления, 417. Знакопеременные сочетания, 436. Зогби, Антуан Шабан (Zoghbi, Antoine Chaiban (^ji г,1^а^1)),44б. Золотое сечение, 904. Зуев, Юрий Анатольевич, 625. Зыков, Александр Александрович, 47. И, 74, 735. Ибараки, Тошихиде (Ibaraki, Toshihide (S^Mfc^)), 150, 606, 612, 613, 711, 728. Ибн аль-Хадж, Мухаммед ибн Мухаммед (Ibn al-Hajj, Muhammad ibn Muhammad (^l^JI «)), 579. Ибн Муним, Ахмад аль-Абдари (Ibn Mun‘im, Ahmad al-‘Abdari(^l. ^»=-1)), 561. Ивани, Антал Миклош (IvAnyi, Antal Miklds), 780. Иврит, 58, 551, 559, 899. Игараши, Ёшихиде (Igarashi, Yoshihide (Е+Ж#3£)), 624. Игра, 144, 208, 221. Игральные карты, 22, 444, 497. кости, 554, 567, 568, 574, 899. Игуса, Кийоши (Igusa, Kiyoshi (4^^‘Ж))5 843. Иде, Микио (Ide, Mikio (~H~-rf,-6$4:)), 674. Идеал, 90, 94, 439, 504, 871. Идеальная хеш-функция, 657. Идеальное разбиение, 471. Идеальное тасование, 61, 180, 219, 225, 227, 241, 660, 669. Идеальные схемы, 423. Идель, Моше (Idel, Moshe (1TPN WO)), 559. Идее, Питер Деннис (Eades, Peter Dennis), 424, 815. Изинг, Эрнст (Ising, Ernst), 807. Изкуэрдо, Себастьян (Izquierdo, Sebastian), 560, 575. Изображение бинарного дерева, 513, 865, 870. расширенного бинарного дерева, 545. Изолированная вершина, 45, 274. Изометрический подграф, 617. Изометрия, 653. сохранение расстояний, 118. Изоморфизм, 38. БДР, 305. Изоморфные графы, 33. Иисус из Назарета, сын Иосифа (Jesus of Nazareth, son of Joseph (JTBJ p *)P1’ p XIW’, ’Irjoouc uldf той ’1омг)ф о ало Na^aptS)), 552. ИЛИ, 74, 735. Импликанта, 78, 107. Импликация, 73, 197. Имрих, Вильфред (Imrich, Wilfried), 50, 95, 615. Инверсия, 372, 374, 450, 492. Инволюция, 313, 406, 495, 705, 792, 798, 850.
ПРЕДМЕТНО-ИМЕННОЙ УКАЗАТЕЛЬ 931 Индекс, 487, 841. Индийская математика, 548, 552, 554, 561. Индийские цифры, 552. Интегрирование по контуру, 475-482. Интернет, 10, 14, 29, 434, 573, 584, 844, 889. Инь и ян, 547. Ирвин, Джозеф Оскар (Irwin, Joseph Oscar), 848. Исаак, Гарт Тимоти (Isaak, Garth Timothy), 780, 802. Исключающая нормальная форма, 76. Исключающее ИЛИ, 74, 795. Искусственный интеллект, 758. Исламские математики, 579. Исозаки, Хидеки (Isozaki, Hideki (»«f^ffi)), 745. Источник, 38, 87. Истрате, Габриэль (Istrate, Gabriel), 609. Исходящая степень, 38, 39, 42, 63, 298. Итерация функций, 361, 760. Йии, Ае Я (Yee, Ае Ja (°] °Ц*})), 831. Йошигахара Нобуюки (Yoshigahara, Nobuyuki (= Nob) (^УЖЖ2.)), 399, 786. Каас, Роберт (Kaas, Robert), 198. Каасила, Сампо Юхани (Kaasila, Sampo Juhani), 686. Каббала, 551, 559, 899. Кавут, Сельчук (Kavut, Seljuk), 627. Кавьер, Стефан Роберт (Cavior, Stephan Robert), 759. Каган, Стивен Джей (Kahan, Steven Jay), 780, 785. Кадр стека, 485. Кай, Нинг (Cai, Ning (J?1?)), 826. Кайл, Генрих (Keil, Heinrich), 551. Кайма, 774. Как, Сабхаш Чандра (Как, Subhash Chandra (дХТТЧ^ГЧПЧГ)), 550. Калаби, Эженио (Calabi, Eugenio), 806. Калдербанк, Артур Роберт (Calderbank, Arthur Robert), 758. Камеда, Тико (Kameda, Tiko (= Tsunehiko) (4Е0Ю)), 612, 621. Камен, Поль Фредерик Роже (Camion, Paul Fr£d6ric Roger), 303. Камерон, Роберт Дуглас (Cameron, Robert Douglas), 692. Каммингс, Ларри Джин (Cummings, Larry Jean), 774. Камминс, Ричард Ли (Cummins, Richard Lee), 887. Кан, Леонард (Cahn, Leonard), 207. Канализирующая функция, 104, 157, 307. Канеда, Такаюки (Kaneda, Takayuki (&Е0ЖЗО), 721. Канонические дельта-последовательности, 765. Канонический базис, 434, 440. лес, 519, 540. Кантор, Георг Фердинанд Людвиг Филипп (Cantor, Georg Ferdinand Ludwig Philipp), 666. Кантор, Мориц Бенедикт (Cantor, Moritz Benedikt), 570. Канфилд, Эрл Родни (Canfield, Earl Rodney), 798, 860. Каплански, Ирвинг (Kaplansky, Irving), 572. Капур, Санджив (Kapoor, Sanjiv («'Лч *ЯГ)), 889. Кардано, Джироламо (Cardano, Girolamo (= Hieronymus Cardanus)), 756. Карлиц, Леонард (Carlitz, Leonard), 842, 853, 878. Карманная сортировка, 258, 263. Карно, Морис (Karnaugh, Maurice), 359. Карон, Жак (Caron, Jacques), 811. Кароньски, Михал (Karoiiski, Michal), 597. Карп, Ричард Маннинг (Karp, Richard Manning), 151. Карпиньски, Марек Мечислав (Karpinski (= Karpinski), Marek Mieczyslaw), 611. Кастаун, Рудольф Уильям (Castown, Rudolph William), 339. Пастеризация, 207, 235. Каталан, Эжен Шарль (Catalan, Eugfene Charles), 508, 573, 804. Катаяйнен, Юрки Юхани (Katajainen, Jyrki Juhani), 202. Категорийное произведение, 49. Катлер, Роберт Брайан (Cutler, Robert Brian), 603. Катона, Гюла (Katona, Gyula), 427, 885. Каттель, Кевин Майкл (Cattell, Kevin Michael), 778. Кауффман, Стюарт (Kauffman, Stuart Alan), 104. Кац, Уильям Холл (Kautz, William Hall), 623. Квадрадерево, 666. Квадрат графа, 529. Дюрфи, 449, 457, 830. из слов, 30, 60. Квадратичная форма, 213. Квантифицированные формулы, 272. Квантор всеобщности, 114. существования, 114. Квартет, или тетрада: 32-битовая величина, 240. Кватернионы, 362. Кедара Бхатта (KedSra Bhatta ($>ч! t 45)), 549, 569. Кейли граф, 401. Кейли, Артур (Cayley, Arthur), 390, 571, 839. Кейстер, Уильям (Keister, William), 145, 758.
932 ПРЕДМЕТНО-ИМЕННОЙ УКАЗАТЕЛЬ Келли, Патрик Артур (Kelly, Patrick Arthur), 750. Келли, Пол Джозеф (Kelly, Paul Joseph), 593. Кельманс, Александр Кольманович, 893. Кемп, Рейнер (Kemp, Rainer), 782, 879, 880. Кемпе, Альфред Брей (Kempe, Alfred Bray), 584. Кербош, Жозе Аугуст Жерар Мари (Kerbosch, Joseph (= Joep) Auguste G6rard Marie), 674. Керниган, Брайан Уилсон (Kernighan, Brian Wilson), 125. Кертис, Герберт Аллен (Curtis, Herbert Allen), 124, 151. Кёниг, Дене (Konig, D6nes), 37. Кимоно, 566. Кинг, Эндрю Дуглас (King, Andrew Douglas), 799. Киркман, Томас Пенингтон (Kirkman, Thomas Penyngton), 35. Кирхер, Анастасиус (Kircher, Athanasius), 551, 552, 559, 574, 898. Кирш, Расселл Эндрю (Kirsch, Russell Andrew), 207, 235. Киршенгофер, Питер (Kirschenhofer, Peter), 881. Кисс, Стефен Энтони (Kiss, Stephen Anthony), 614. Китаев, Сергей Владимирович, 844. Китайская математика, 547. Китайские кольца, 333, 335, 358, 436, 756, 758. Кифер, Джек Карл (Kiefer, Jack Carl), 770. Клавжар, Санди (Klavzar, Sandi), 50, 95. Клавиатура, 418. Клайн, Джон Роберт (Kline, John Robert), 614. Клайн, Питер (Klein, Peter), 158. Классон, Андерс Карл (Claesson, Anders Karl), 844. Классы эквивалентности, 472, 543, 626. Кластеризация, 8. Клаттер, 310, 442, 517, 704, 736, 746. Клаузен, Томас (Clausen, Thomas), 23. Клафам, Кристофер Роберт Джаспер (Clapham, Christopher Robert Jasper), 592. Клебер, Майкт Стивен (Kleber, Michael Steven), 841. Клементс, Джордж Френсис (Clements, George Francis), 433, 442, 824, 825. Клеппис, Грегор (Kleppis, Gregor (= Kleppisius, Gregorius)), 575. Клеточный автомат, 208, 235. Кли, Виктор (Klee, Victor), 11. Клика, 57, 233, 305, 313, 325, 440, 648. максимальная, 324. Кликовое покрытие, 57. Кликовое число, 57. Климко, Юджин Мартин (Klimko, Eugene Martin), 828. Клифт, Нейлл Майкл (Clift, Neill Michael), 692. Клюгель, Георг Симон (Kliigel, Georg Simon), 382, 570. Кляйне Бюнинг, Ганс Герхард (Kleine Biining, Hans Gerhard), 609-611. Кляйтман, Даниэль (Kleitman, Daniel J (Isaiah Solomon)), 518, 540, 592, 616, 838, 885. Кнёдель, Вальтер (Knodel, Walter), 674. Кноблох, Эбернгард Генрих (Knobloch, Eberhard Heinrich), 567, 568. Кнопп, Марвин Исадор (Knopp, Marvin Isadore), 833. Кнотт, Гари Дон (Knott, Gary Don), 573. Кнут, Дональд Эрвин (Knuth, Donald Ervin (ffi®^)), 10, 17, 26, 28, 31, 53, 87, 134, 145, 188, 299, 580, 602, 615, 636, 656, 658, 675, 682, 686, 687, 689, 706, 707, 724, 738, 740, 742, 746, 754, 774, 806, 856, 885, 888, 889, 915. Ко, Чао (Ko, Chao (= Ke Zhao, MH)), 444, 621. Коалесценция, 489. Коалиция, 472. Кобхэм, Алан (Cobham, Alan), 302. Ковалевскн, Арнольд (Kowalewski, Arnold), 589. Ковер, Томас Меррилл (Cover, Thomas Merrill), 32. Коган, Александр Юрьевич, 150, 606. Коген, Филип Майкл (Cohen, Philip Michael), 584. Код ASCII, 229. Грея, 344, 490, 521, 573, 578, 780. Грея двери-вертушки, 424, 526. Грея для тг-кортежей, небинарный, 347. Грея для вложенных скобок, 537. Грея для деревьев Шрёдера, 539. Грея для деревьев, 504-508. Грея для перестановок, 401, 402. Грея для разбиений, 460, 841. Грея для разбиений множеств, 473. Грея для скобок, 871. Грея для слабых порядков, 800. Грея для сочетаний, 415-426. Морзе, 366, 549, 773. Хэмминга, 327. Кода, Ясунори (Koda, Yasunori (ЙЕН{£58)), 349, 350. Кодирование длин серий, 501, 530, 537, 682, 867. тернарных данных, 195. Кодон, 574. Коды с коррекцией ошибок, 60, 327, 359. уровней, 540. Кок, Джон Краул (Cock, John Crowle), 779. Кокейн, Эрнст Джеймс (Cockayne, Ernest James), 749. Колесо, 65, 590. Колибяр, Милан (Kolibiar, Milan), 614.
ПРЕДМЕТНО-ИМЕННОЙ УКАЗАТЕЛЬ 933 Количество мультиразбиений, таблица, 861. переходов, 343, 363. разбиений, 450-457, 465. таблица, 451, 455, 861. Коллизия, 268. Колмен, Уолтер Джон Александер (Colman, Walter John Alexander), 834. Колоколообразная кривая, 480, 495, 496. Колтарст, Томас Уоллес (Colthurst, Thomas Wallace), 841. Комбинаторика, 19-26. Комбинаторная система счисления, 413, 435, 440, 468, 805, 843. обобщенная, 442. Комбинаторное представление, 815. Комбинаторный взрыв, 6, 266. Комбинационная сложность, 126. Комлёш, Янош (Komlds, JAnos), 119. Коммутативная группа, 470. Коммутативность, см. Закон коммутативности, 75. Компельмахер, Владимир Леонтьевич, 403. Компилятор, 83. Комплексно сопряженное значение, 893. Комплементарность, 535, 551. Комплементарный код Грея, 342, 363. Композиция, 358, 409, 418, 445, 466, 554, 575, 807, 861. булевых функций, 309. перестановок, 222. функций, 275, 636. Компонент, 62, 63, 65. Комптон, Роберт Кристофер (Compton, Robert Christopher), 390, 402. Комте, Луи (Comtet, Louis), 474, 799, 856. Кон, Мартин (Cohn, Martin), 765, 767, 770. Конвалина, Джон (Konvalina, John), 626. Конвей, Джон Хортон (Conway, John Horton), 208, 316, 407, 640, 652, 653, 680, 762. Конечное поле, 219, 581, 689. Конечный автомат, 302, 327, 671. Коническое сечение, 212, 237. Конкатенация, 355. Константа Эйлера, 904. Константы с многократной точностью, 904-906. Контекстно-свободная грамматика, 112, 733. Контрольная сумма, 103, 137, 157, 429, 437, 658, 805. Контрольное сложение, 175, 193, 232, 254, 278, 669, 675. Контрольное суммирование, 250. Контур, 511. Ганкеля, 495. Конфигурация, 526. Изинга, 435, 440. Конфуцианство, 547. Концевая рекурсия, 708. Конъюнктивная нормальная форма, 78, 107. полная, 77. Конъюнктивная простая форма, 79. Конъюнкция, 49, 73, 197, 260, 543. Координаты, 341. глубины, 869. уровня, 533, 537. Копперсмит, Дон (Coppersmith, Don), 597. Кордемский, Борис Анастасьевич, 863. Корень, 242, 244, 438, 499, 834. единицы, 454. Кори, Роберт (Cori, Robert), 890. Корлесс, Роберт Малкольм (Corless, Robert Malcolm), 856. Коробков, Виталий Константинович, 519. Корр, Жан Пьер ле (Corre, Jean Pierre Le), 178. Кортежи, 547, 561. Кортил, Сильвия Мари-Клод (Corteel, Sylvie Marie-Claude), 831. Корш, Джеймс Ф. (Korsh, James F.), 502, 532, 807, 868, 882. Коршунов, Алексей Дмитриевич, 625. Косточка, Александр Васильевич, 894. Котани, Ёшиюки (Kotani, Yoshiyuki (J'§#ff)). 739. Коук, Джон (Cocke, John), 754. Кох, Джон Аллен (Koch, John Allen), 37. Коши, Августин Луи (Cauchy, Augustin Louis), 458, 466. Краевое представление, 449, 457, 463, 468. Краецки, Мишель (Krajecki, Michael), 20. Крайние слева биты, 174. справа биты, 171. Крама, Ив Жан-Мари Мэтью Франц (Crama, Yves Jean-Marie Mathieu Franz), 606. Крамер, Карл Гаральд (Сгатёг, Carl Harald), 858. Крамп, Кристиан (Kramp, Christian), 475. Кратохвил, Ян (Kratochvfl, Jan), 69, 597. Кратчайшая дизъюнктивная нормальная форма, 122. Кратчайший путь, 9, 30, 35, 53, 91, 720. Краузе, Карл Христиан Фридрих (Krause, Karl Christian Friedrich), 783. Креверас, Герман (Kreweras, Germain), 870, 893. Кремер, Уильям Генри-мл. (Cremer, William Henry, Jr.), 772. Крестики-нулики, 144. Кретте де Паллюль, Франсуа (Crett6 de Palluel, Francois), 26. Крехер, Дональд Лоусон (Kreher, Donald Lawson), 573. Кривизна, 685. Криптарифм, 375. Крист, Вильгельм фон (Christ, Wilhelm von), 551.
934 ПРЕДМЕТНО-ИМЕННОЙ УКАЗАТЕЛЬ Кристи Маллоуэн, Агата Мэри Кларисса Миллер (Christie Mallowan, Agatha Mary Clarissa Miller), 38, 902. Кричевский, Рафаил Евсеевич, 638. Кром, Мелвен Роберт (Krom, Melven Robert), 87, 611. Кронекер, Леопольд (Kronecker, Leopold), 590, 891. Кронк, Хадсои ван Эттен (Kronk, Hudson Van Etten), 895. Круйсвейк, Дирк (Kruyswijk, Dirk), 515. Крускал, Джозеф Бернард-мл. (Kruskal, Joseph Bernard, Jr.), 427, 428. Ксианг, Лимин (Xiang, Limin (ffi^JR;)), 604. Куайн, Уиллард Ван Орман (Quine, Willard Van Orman), 78, 80, 108, 605. Куб графа, 529. из слов, 30, 61. Кубицка, Ева (Kubicka, Ewa), 886. Кубический граф, 33. Кудер, Оливье Рене Раймонд (Coudert, Olivier Ren£ Raymond), 304, 697, 708, 738, 745, 746, 751. Кук, Джордж Эрскин (Cooke, George Erskine), 649. Кук, Раймонд Марк (Cooke, Raymond Mark), 767, 771, 802. Кук, Стефен Артур (Cook, Stephen Arthur), 608. Кумар, Панганамала Виджай (Kumar, Panganamala Vijay (&яйж> &б)), 758. Кумулянт, 495, 858. Кун, Маркус Гюнтер (Kuhn, Markus Gunther), 690. Кусуба, Таканори (Kusuba, Takanori (ЙЖКЭД), 561. Кшишанг, Франк Роберт (Kschischang, Frank Robert), 754. Кэллан, Колумсиль Девид (Callan, Columcille David), 866. Кэрролл, Льюис (= Доджсон, Чарльз Лютвидж) (Carroll, Lewis (= Dodgson, Charles Lutwidge)), 29-31, 72, 106, 584. Кэш, 218, 656. записей, 268. Кэш-память, 168, 268. Кэширование, 312. Лабель, Жильберт (Labelle, Gilbert), 862. Лаборд, Жан-Мари (Laborde, Jean-Marie), 605. Лавджой, Джереми Кеинет (Lovejoy, Jeremy Kenneth), 831. Лагерр, Эдмон Николя (Laguerre, Edmond Nicolas), 860. Ладейные полиномы, 491. Ладнер, Ричард Эмиль (Ladner, Richard Emil), 157, 159. Ладья, 849. Лаксер, Гарри (Lakser, Harry), 872. Ламберт, Иоганн Генрих (Lambert, Johann Heinrich), 569. Лампорт, Лесли Б. (Lamport, Leslie В.), 115, 184, 185, 230. Лангдон, Глен Джордж-мл. (Langdon, Glen George, Jr.), 388, 393, 405. Ландау, Хайман Гаршин (Landau, Hyman Garshin), 469, 586. Ландер, Леон Джозеф (Lander, Leon Joseph), 656. Ланнон, Вильям Фредерик (Lunnon, William Frederick), 849. Лапко, Ольга Георгиевна, 4. Лаплас (де ла Плас), Пьер Симон, маркиз де (Laplace (= de la Place), Pierre Simon, Marquis de), 477. Ларвала, Самули Кристиан (Larvala, Samuli Kristian), 663. Ларриви, Жюль Альфонс (Larrivee, Jules Alphonse), 335. Латинская поэзия, 562. Латинский квадрат, 22-26, 59, 60, 581, 594. Лафферти, Джон Дэвид (Lafferty, John David), 754. Лахтакия, Ахлеш (Lakhtakia, Akhlesh (^ПдАзд п«с.Гч>ч।)), 654. Ле Борн, Ив Франсуа Андрэ (Le Borgne, Yvan Franccoise Andr6), 890. Леви, Поль (Ldvy, Paul), 513. Левиальди Гирон, Стефано (Levialdi Ghiron, Stefano), 210. Легкая булева функция, 301, 325. Лейбниц, Гроттфрид Вильгельм, Фрайхерр фон (Leibniz, Gottfried Wilhelm, Freiherr von), 548, 564, 567, 568, 575, 900. Лейзерсон, Чарльз Эрик (Leiserson, Charles Eric), 224. Лейтон, Роберт Эрик (Leighton, Robert Eric), 583. Лек, Уве (Leek, Uwe), 826. Лексикографическая генерация, 411, 424, 427, 433, 434, 571. перестановок, 396. Лексикографический порядок, 21, 101, 111, 113, 183, 240, 254, 328, 331, 355, 358, 370, 377, 385, 424, 437, 439, 446, 449, 463, 472, 485, 489, 499, 518, 520, 530, 541, 548, 552, 555, 556, 561, 567, 568, 572, 575, 695, 738, 816, 837, 898. Лексикографическое произведение, 49, 65, 543. Лемер, Деррик Генри (Lehmer, Derrick Henry), 61, 168, 371, 413, 438, 466, 572, 815, 833. Лемма о сжатии, 441. Флойда, 7. Лемпель, Абрам (Lempel, Abraham tyxb □Л"ПЫ)), 354. Ленер, Джозеф (Lehner, Joseph), 455, 466. Ленстра, Хендрик Виллем-мл. (Lenstra, Hendrik Willem, Jr.), 221, 652, 653.
ПРЕДМЕТНО-ИМЕННОЙ УКАЗАТЕЛЬ 935 Ленфант, Жак (Lenfant, Jacques), 660. Лес, 323, 326, 328, 349, 498. Леске, Мари (Leske, Marie), 896. Леттманн, Теодор Август (Lettmann, Theodor August), 609, 610. Леувен, Марк Аврелий Августин ван (Leeuwen, Marcus Aurelius Augustinus van), 832, 851. Лёббинг, Мартин (Lobbing, Martin), 281, 287, 315. Ли, Ганг (Li, Gang (= Kenny) ($4Я)), 774, 887. Ли, Гилберт Цзин Джай (Lee, Gilbert Ching Jye (ЗЗМЙ)), 640. Ли, Руби Беи-Лох (Lee, Ruby Bei-Loh ФМЮ), 185, 227, 664. Ли, Честер Чи Юан (Lee, Chester Chi Yuan ($й5с) = Chi Lee ($Й)), 302, 303, 758. Лианг, Франклин Марк (Liang, Franklin Mark), 134. Лидгейт, Джон (Lydgate, John), 556. Лидер, Имре (Leader, Imre), 626. Лимерик, 493. Лин, Чен-Шанг (Lin, Chen-Shang (Я®#)), 711. Линдон, Роджен Конант (Lyndon, Roger Conant), 355. Линдстрем, Бернт Леннарт Даниэль (Lindstrom, Bernt Lennart Daniel), 433, 442, 620, 826. Линеечная функция, 12, 172, 185, 191, 192, 194, 199, 222, 224, 231, 314, 334, 336, 340, 341, 348, 683, 763. Линейная функция, 738. Линейное булево программирование, 246. Линейное время, 82. Линейное преобразование, 713. Линейное программирование, 8, 119. Линейные неравенства, 618. Линейный блочный код, 327. Линейный подграф, 586. Линн, Ричард Джон (Lynn, Richard John), 548. Линуссон, Ханс Сванте (Linusson, Hans Svante), 824. Линч, Уильям Чарльз (Lynch, William Charles), 175. Линь, Билл Цзи Ba (Lin, Bill Chi Wah (#£Ж = ЖЗ^)), 304. Липски, Витольд-мл. (Lipski, Witold, Jr.), 788. Липшуц, Сеймур Сол (Lipschutz, Seymour Saul), 807. Лисковец, Валерий Анисимович, 403. Лист, 525, 533, 870. Литерал, 78, 253. Литтлвуд, Дадли Эрнест (Littlewood, Dudley Ernest), 839. Литтлвуд, Джон Эденсор (Littlewood, John Edensor), 655, 839, 886. Лихи, Фрэнсис Теодор-мл. (Leahy, Francis Theodore, Jr. (= Ted)), 577. Ллойд, Эдвард Кейт (Lloyd, Edward Keith), 35, 862. Лобачевский, Николай Иванович (Лобачевсюй, Николай Ивановичъ), 203. Ловас, Ласло (LovAsz, LAszld), 441, 820. Ловри, Дункан Хамиш (Lawrie, Duncan Hamish), 661. Логарифм как многозначная функция, 478, 856. Логика, 154. второго порядка, 154. Ложное заключение, 73. Лоизоу, Георгиос (Loizou, Georghios (AoiCou, Гиор-jroc)), 829. Лойд, Сэм (Loyd, Sam), 16. Лойд, Сэмюэл (Loyd, Samuel), 656, 748. Лойд, Уолтер (Loyd, Walter (= “Sam Loyd, Jr.”)), 19. Локальные изменения, 151. Лондон, Джон (London, John), 557. Лоренц, Макс Отто (Lorenz, Max Otto), 839. Лоуренс, Джордж Мелвин (Lawrence, George Melvin), 343, 766. Лукакис, Эммануэль (Loukakis, Emmanuel (АоихАхцс, MavtbXric)), 674. Лукашевич, Ян (Lukasiewicz, Jan), 197, 233. Луллий, Раймунд (Llull, Ramon (= Lullus, Raimundus)), 556, 574. Лупанов, Олег Борисович, 139, 141, 160, 632, 638, 640. Луц, Рюдигер Карл (Lutz, Riidiger Karl), 684. Луч, 417. Лучак, Мальвина Джоанна (Luczak (= Luczak), Malwina Joanna), 882. Лушар, Гай (Louchard, Guy), 513. Льювен, Марк ван (Leeuwen, Marc van), 10. Льюис, Гарри Рой (Lewis, Напу Roy), 610. Лэнгфорд, Чарльз Дадли (Langford, Charles Dudley), 26, 27, 578. Лю, Чао-Нинг (Liu, Chao-Ning (?]^К^)), 416. Лю, Юан (Lu, Yuan (BJ©)), 703. Люка, Джоан Мари (Lucas, Joan Marie), 506. Люка, Франсуа Эдуард Анатоль (Lucas, Francois Edouard Anatole), 826. Люнебург, Хайнц (Liineburg, Heinz), 808. Ляо, Хех-Тян (Liaw, Heh-Tyan (JSrJfES)), 711. Ляхдесмяки, Гарри (Lahdesmaki, Harri), 626. Магическая маска, 173, 180, 224, 655, 658, 660, 662, 664, 665, 678, 687. Магический квадрат, 58, 640. Мадр, Жан Кристоф (Madre, Jean Christophe), 697, 708, 745, 751. Маеда, Ватару (Mayeda, Wataru (Н?[В0ЙО)> 573. Мажоризация, 51, 120, 133, 193, 468, 839. Мажоритарный элемент, 70. Майерс, Юджин Уимберли-мл. (Myers, Eugene Wimberly, Jr.), 889. Майкрофт, Алан (Mycroft, Alan), 185. Майнель, Кристоф (Meinel, Christoph), 713. Майорана, Джеймс Энтони (Majorana, James Anthony), 356, 357.
936 ПРЕДМЕТНО-ИМЕННОЙ УКАЗАТЕЛЬ Майр, Эрнст Вильгельм (Mayr, Ernst Wilhelm), 617. Мак-Дональд, Питер С. (MacDonald, Peter S.), 398. Мак-Каллох, Уоррен Стергис (McCulloch, Warren Sturgis), 101. Мак-Карти, Дэвид (McCarthy, David), 418. Мак-Кей, Брендон Дамьен (McKay, Brendan Damien), 580, 793, 826. Мак-Кей, Джон Кейт Стюарт (McKay, John Keith Stuart), 446. Мак-Келлар, Арчи Чарльз (McKellar, Archie Charles), 148, 150, 162. Мак-Класки, Эдвард Джозеф-мл. (McCluskey, Edward Joseph, Jr.), 79. Мак-Клинток, Уильям Эдвард (McClintock, William Edward), 343. Мак-Крейви, Эдвин Паркер-мл. (McCravy, Edwin Parker, Jr.), 398. Мак-Крейни, Джадсон Шаста (McCranie, Judson Shasta), 675. Мак-Кьюн, Уильям Уолкер-мл. (McCune, William Walker, Jr.), 614. Мак-Манус, Кристофер Декормис (McManus, Christopher DeCormis), 60. Мак-Миллан, Кеннет Лахлин (McMillan, Kenneth Lauchlin), 700. Мак-Мэган, Перси Александер (MacMahon, Percy Alexander), 470, 471, 485, 876, 882. Мак-Мюллен, Кертис Траси (McMullen, Curtis Tracy), 736. Мак-Нейш, Гаррис Франклин (MacNeish, Harris Franklin), 23. Макино, Казухиса (Makino, Kazuhisa (ЭД8Р*ПА)), 621, 728. Маклин, Ян Синклер (McLean, Iain Sinclair), 557. Маколей, Френсис Соверби (Macaulay, Francis Sowerby), 427, 443, 819. Максимальная клика, 324. Максимальная цепочка, 534. Максимальное независимое множество, 56, 67, 674. Максимальное правдоподобие, 328. Максимальные перекрывающиеся семейства, 115. Максимальные элементы, 324. Максимальный планарный граф, 61. подкуб, 79. элемент, 797. Малгойрес, Реми (Malgouyres, R6my), 682. Малдер, Генри Мартин (Mulder, Henry Martyn), 614. Малфатти, Джованни Франческо Джузеппе (Malfatti, Giovanni Francesco Giuseppe), 834. Манди, Питер (Mundy, Peter), 373. Манн, Вильям Фредерик (Mann, William Fredrick), 680. Манн, Генри Бертольд (Mann, Henry Berthold), 579. Мантель, Виллем (Mantel, Willem), 352. Маргенштерн, Морис (Margenstem, Maurice), 204. Мария, Святая (Mary, Saint ("Ayia Mapia ©eotoxoc, navayla, Парвемос)), 562. Маркерт, Жан-Франсуа (Marckert, Jean-Francois), 513. Маркизова, Тамара (MarcisovA, Tamara), 614. Марковски, Джордж (Markowsky, George), 605, 624, 872. Марковский процесс, 548. Маркс, Адольф (Marx, Adolph (= Arthur = Harpo)), 903. Марсо, Марсель (Marceau (= Mangel), Marcel), 903. Мартин, Монро Харниш (Martin, Monroe Harnish), 174, 357. Мартинелли, Андре (Martinelli, Andr6s), 720. Маруока, Акира (Maruoka, Akira (Д.ИЙ:)), 292, 319. Маршалл, Альберт Уолдрон (Marshall, Albert Waldron), 840. Маска, 181, 183, 186, 218, 219, 240. Маска: битовый шаблон с 1 в ключевых позициях, 173. Матон, Рудольф Антон (Mathon, Rudolf Anton), 580. Матрица Адамара, 696. инциденций, 54, 57, 67, 891. перестановки, 40, 219, 281. смежности, 40, 46, 48, 63, 66, 153, 164, 194, 233, 313, 593, 598, 705, 891. Мафут, Халед (Maghout, Khaled (LyL, Jli)), 303. Мацумото, Макото (Matsumoto, Makoto (t£t*R)), 822. Мацунага, Ёшисуке (Matsunaga, Yoshisuke (KAMffi)), 475, 566. Мачаруло, Лука (Macchiarulo, Luca), 694. Машина Тьюринга, 302, 680. Медиана, 12, 88, 130, 156, 186, 242, 253, 309, 361, 668, 668. пяти элементов, 93, 97, 114, 118. семи значений, 165. Медианная цепочка, 164. Медианные метки, 92-101, 615. Медианный граф, 92-101, 616. Медицина, 554, 557. Мезеи, Йорг Эстебан (Mezei, Jorge Esteban (= Gyorgy Istvan)), 119. Мейер, Альберт Рональд да Сильва (Meyer, Albert Ronald da Silva), 154, 155, 647. Мейеровиц, Аарон Давид (Meyerowitz, Aaron David), 116, 616. Мейнерт, Элисон (Meynert, Alison), 580. Мейснер, Отто (MeiBner, Otto), 842.
ПРЕДМЕТНО-ИМЕННОЙ УКАЗАТЕЛЬ 937 Менон, Ваирелил Вишванат (Menon, Vairelil Vishwanath), 589. Мерингер, Маркус Рейнхард (Meringer, Markus Reinhard), 594. Меро, Ласло (Мёгб, Laszl6), 689. Мерсенн, Марен (Mersenne, Marin), 551, 552, 567, 574. Метка, 445. Метод Монте-Карло, 791. Ньютона, 479, 858. с возвратом, 565. седловой точки, 453, 475-482, 494, 862. Метрическая стопа, 550, 563. Метрополис, Николас Константин (Metropolis, Nicholas Constantine (МтртрбтсоХтк, NixoXaoc Kcova-cavctvou)), 624. Миере, Чарльз Роберт (Miers, Charles Robert), 778. Мииллер, Генри Седвик (Miiller, Henry Sedwick), 90. Миками, Ёсио (Mikami, Yoshio (— hj^^-)), 553. Милето, Франко (Mileto, Franco), 606. Миллер, Джеффри Чарльз Перси (Miller, Jeffrey Charles Percy), 176. Миллер, Джоан Элизабет (Miller, Joan Elizabeth), 416, 436. Миллер, Дональд Джон (Miller, Donald John), 591. Миллс, Бартон Э. (Mills, Burton E.), 601, 605. Милн, Стефен Карл (Milne, Stephen Carl), 489. Милнор, Джон Уиллард (Milnor, John Willard), 115, 612. Мильтерсен, Питер Бро (Miltersen, Peter Bro), 193. Минато, Шин-ичи (Minato, Shin-ichi (ЯЁК—'))> 293, 303, 304, 326, 737, 745, 750, 752, 754. Минимальная память, 130-135, 156, 157, 633. Минимальное доминирующее множество, 325. Минимальное покрытие, 56. Минимальное решение, 300. Минимальный элемент, 324, 797. подмассива, 234. Минимум, 56, 468. Минник, Роберт Чарльз (Minnick, Robert Charles), 104, 619. Мински, Марвин Ли (Minsky, Marvin Lee), 236. Минус с точкой, 12. Минхардт, Кристина (Кика) Магдалена (Mynhardt, Christina (Kieka) Magdalena), 749. Мирвольд, Венди Джоанна (Myrvold, Wendy Joanne), 580, 796. Миера, Джаядев (Misra, Jayadev (еобот Яв)), 598, 757. Мисюревич, Михал (Misiurewicz, Michal), 842. Миттаг-Леффлер, Магнус Геста (Mittag-Leffler, Magnus Gosta (= Gustaf)), 570. Митчелл, Кристофер Джон (Mitchell, Christopher John), 354. Мичели, Джованни де (Micheli, Giovanni De), 152. Многобайтная обработка, 184. Многобайтное вычитание, 229. Многобайтное сложение, 184. Многобайтные min и max, 230. Многогбайтное кодирование, 240. Многогранник, 426, 442, 535. Многоканальный вывод, 135. Многосвязная структура данных, 85. Многоуровневый логический синтез, 152. Многофазная сортировка, 549. Множество комбинаций, см. Семейство множеств, 294. Модальная логика, 197. Модули в сети, 308. Модуль инвертора, 98. компаратора, 98. Модульная арифметика, 578. Модульный тп-арный код Грея, 353, 774. Модульный десятичный код Грея, 347. Модульный код Грея, 771, 794. Модульный универсальный цикл, 802. Модулярная арифметика, 247. Мозаика, 203, 234. Мозер, Лео (Moser, Leo), 481, 595, 853, 855. Момент, 490. Моменты распределения, 861. Монадическая логика: логика только с унарными операторами, 154. Монеты, 124, 463. Монмор, Пьер Ремон де (Montmort, Pierre Remond de), 568, 576. Мономиальная симметричная функция, 568, 839. Мономино, 296, 322. Монотонная булева функция, 114, 300, 310, 325, 540. Монотонная булева цепочка, 163. Монотонная самодуальная булева функция, 96, 116. Монотонная самодуальная функция, 104, 115. Монотонная функция, 112, 155, 163, 303. Монотонно убывающая функция, 733. Монотонность, 79, 88, 104, 108, 111, 123, 273, 301, 312, 326, 344, 443, 518, 601, 616. Монус, 12. Мор, Моше (Mor, Moshe (TIB ЛИВ)), 800, 808. Моралес, Линда (Morales, Linda), 801. Морган, Огастес де (Morgan, Augustus de), 75, 107, 408, 466. Моргенштерн, Оскар (Morgenstern, Oskar), 616, 695. Морзе, Гарольд Келвин Марстон (Morse, Harold Calvin Marston), 250, 305, 696. Морреаль, Эженио (Morreale, Eugenio), 604.
938 ПРЕДМЕТНО-ИМЕННОЙ УКАЗАТЕЛЬ Моррис, Скот Андерсон (Morris, Scot Anderson), 61, 786. Моррис, Эрнест (Morris, Ernest), 373. Мортон, Гай Макдональд (Morton, Guy Macdonald), 666. Мост, 523, 541, 544, 894. Моханрам, Картик (Mohanram, Kartik (tsOtf Лих&взь)), 703. Мохар, Боян (Mohar, Bojan), 893. Моцкин, Теодор Сэмюэль (Motzkin, Theodor (= Theodore) Samuel ()’pxm mwjl)), 487, 848, 861. Муавр, Абрахам де (Moivre, Abraham de), 509, 568, 569, 570, 576. Муди, Джон Кеннет Монтегю (Moody, John Kenneth Montague (= Ken)), 233. Музыка, 549, 551, 559, 567. Музыкальный граф, 68. Мультигиперграф, 593. Мультиграф, 32, 39, 42, 62, 64, 67, 597. Мультилинейное представление, 76, 106, 161, 273, 601, 691, 752. Мультимножество, 38, 369, 371, 397, 409, 552, 802, 815. Мультиномиальная теорема, 568. Мультиномиальный коэффициент, 358, 397. Мультиплексор, 138, 254, 278. Мультиразбиения, 485, 496. Мультисемейство, 326. Мультисочетание, 409, 426, 433, 442, 445, 448, 554, 561, 804. Мун, Джон Уэсли (Moon, John Wesley), 595. Мунданос, Константинос (Moundanos, Konstantinos (= Dinos; MouvSAvoc, Kwva-cav-civoc)), 703. Мунро, Джеймс Ян (Munro, James Ian), 193. Мур, Д. Стротер (Moore, J Strother), 70. Мур, Рональд Вильямс (Moore, Ronald Williams), 602. Мур, Эдвард Форрест (Moore, Edward Forrest), 753. Мур, Элиаким Гастингс (Moore, Eliakim Hastings), 581. Мурасаки Сикибу (Murasaki Shikibu (= Lady Murasaki, 3^з£нР)), 565. Мурога, Сабуро (Muroga, Saburo (SWHfiP)), 103, 104, 603, 618, 619, 621, 625. Мусор, 193. Мусульманская математика, 554. Мюллер, Дэвид Юджин (Muller, David Eugene), 176, 628, 634. Мюрхед, Роберт Франклин (Muirhead, Robert Franklin), 839. Надежность, 107. Наибольшая нижняя граница, 120, 533. Наибольшее независимое множество, 57. Наименьшая верхняя граница, 120, 533. Наименьшее вершинное покрытие, 68, 602. Наименьшее остовное дерево, 306. Наименьшие части, 467. Найлан, Майкл (Nylan, Michael), 548. Найсли, Томас Рэй (Nicely, Thomas Ray), 656. Накагава, Нориюки (Nakagawa, Noriyuki), 573. Напарник, 539. Нараяна Пандита, сын Нрсимха (NSrSyana Pandita, son of Nrsimha (•1К1ЧЧ 4fu«d, 3T:)), 370, 549, 553, 561, 569, 575, 781, 899. НДР, 302. в сравнении с БДР, 320, 739, 740. Небески, Ладислав (Nebesky, Ladislav), 614. Негадесятичная система счисления, 205. Неевклидова геометрия, 202. Независимое множество, 55, 57, 233, 251, 273, 294, 733. Независимость, 55. Нейман, Джон фон (Neumann, John von (= Margittai Neumann J&nos)), 616, 695. Нейман, Эржи (Neyman, Jerzy), 770. Нейронная сеть, 101. Немет, Эвелин Холлистер Пратт (Nemeth, Evelyn (= Evi) Hollister Pratt), 766. Немхаузер, Джордж Ланн (Nemhauser, George Lann), 607. Необходимость, 233. Неориентированные циклы, 398. Непересекаемость, 228, 533. Непересекающееся разложение, 147. Непересекающиеся графы, 47. Непересекающиеся хорды, 502, 530. Неполная гамма-функция, 477. Неполный куб, 118. Непомеченные свободные деревья, 521, 541. Неравенство Адамара, 618. треугольника, 35, 39. Неразделительная дизъюнкция, 73. Несмещенное округление, 229, 667. Нетто, Отто Эрвин Иоганн Ойген (Netto, Otto Erwin Johannes Eugen), 570, 571, 572. Нечетная перестановка, 374, 791. Нечетное произведение, 49, 65. Нечипорук, Эдуард Иванович, 640. Нешетржил, Ярослав (NeSetril, Jaroslav), 590. Неявные структуры данных, 198-206. Неявный граф, 275. Ниббл, или полубайт: 4-битовая величина, 240. Нивергельт, Юрг (Nievergelt, Jiirg), 573. Нигматуллин, Рошаль Габдулхаевич, 625. Нидхам, Ноэль Джозеф Теренс Монтгомери (Needham, Noel Joseph Terence Montgomery (^K®)), 548. Нижние границы комбинационной сложности, 152. Нижняя граница, 138. Нийон, Герман (Nijon, Herman), 398. Никольская, Людмила Николаевна (Nikolskaia, Ludmila Nikolaievna), 716.
ПРЕДМЕТНО-ИМЕННОЙ УКАЗАТЕЛЬ 939 Никольская, Мария Николаевна (Nikolskaia, Maria (= Macha) Nikolaievna), 716. Ним, 166, 221. Нип: 2-битовая величина, 240. Новра, Генри (Novra, Henry), 772. Ноде, Филипп-мл. (Naud£, Philippe, junior), 450. Нойман, Франтишек (Neuman, FrantiSek), 545. Ноотен, Баренд Адриан Анске Йоханнес ван (van Nooten, Barend Adrian Anske Johannes), 549. Нордстром, Алан Уэйн (Nordstrom, Alan Wayne), 359. Нордхаус, Эдвард Альфред (Nordhaus, Edward Alfred), 594. Нормализация, 628. булевой функции, 128. Нормальная булева функция, 128, 131, 632. Нормальная форма Смита, 596. Нормальная цепочка, 143. Нормальные числа, 778. Нуклеотид, 574. Нулевой граф, 46, 64. Нулевой случай, 561. Нуль-один принцип, 93, 223. Ньенхьюз, Альберт (Nijenhuis, Albert), 390, 415, 467, 541, 573. Обер, Жак (Aubert, Jacques), 771. Обертывающий ряд, 457, 466, 496, 857. Облексная схема, 813. Облексный метод, 437, 818. Облексный порядок, 417-421, 424, 436, 899. Облексный путь Грея, 439. Обмен, 649. битов, 177. конечных элементов, 438. первого элемента, 388, 424, 439. соседних переменных, 284. соседних уровней, 284. Обменная поразрядная сортировка, 673. Обобщенное число Белла, 491, 495. Стирлинга, 847. Обобщенные числа Каталана, 536. Стирлинга, 492. Обобщенный консенсус, ПО. Обобщенный тор, 68. Обозначения, 11, 908. Обратная импликация, 73. Обратная перестановка, 394, 398. Обратная функция, 332, 360. Обратнопрямой порядок обхода, 528, 544. Обратный порядок обхода, 435, 498, 501, 505, 506, 531, 676, 865, 870. Обратный солексный порядок, 377, 381, 384, 396, 781. Обращение битов, 357, 361, 662, перестановки, 506. порядка битов, 176. ряда, 808. степенного ряда, 808. Обращения к памяти, 20, 459, 528. Обрезка и прививка, 508, 532. Обхват, 63, 68. графа, 35, 62, 584. Обход, 329, 528. дерева, 463, 528. Объединение, 47, 320. мультимножеств, 326. Объединенное разбиение, 464. Ограничение, 707. булевой функции, 259, 308, 702. Ограниченно растущие строки, 327, 472, 488, 849, 854, 861, 869, 901. Ограниченные композиции, 426, 439, 902. Ограничивающая кривая, 212. Одиночный узел, 284, 722. Одлызко, Эндрю Майкл (Odlyzko, Andrew Michael), 454. Однородная последовательность, 810. Однородность, 437, 814, 817. Однородный гиперграф, 426. Однородный граф, 543. Однородный полином, 443. Однородный порядок, 437. Одночлен, 443. Озанам, Жак (Ozanam, Jacques), 22, 26, 27. Оккам, Уильям (Уильям из Оккама) (Ockham, William of (= Guilielmus ab Occam)), 75. Окно, 290. Округление, 165, 199. к четному числу, 667. Окружность, 212. Октакод, 359. Октаэдрическая группа, 785. Октет: 64-битовая величина, 240. Окуно, Хироши (Okuno, Hiroshi “Gitchang” (*JW)), 745. Олив, Глория (Olive, Gloria), 814. Олкин, Ингрем (Olkin, Ingram), 840. Ольвер, Фрэнк Вильям Джон (Olver, Frank William John), 482. Онегин, Евгений, 493. Оптимальное булево вычисление, 131. Оптимальность, 519. Оптимизация порядка переменных, 282. Оптическое распознавание символов, 208. Орд-Смит, Ричард Альберт Джеймс (Ord-Smith, Richard Albert James (= Jimmy)), 382, 387, 400, 782. Ope, Ойстейн (Ore, Oystein), 10, 65. Ориентированное бинарное дерево, 637. Ориентированное дерево, 211, 488, 519, 857. Ориентированное расстояние, 39. Ориентированное соединение, 47.
940 ПРЕДМЕТНО-ИМЕННОЙ УКАЗАТЕЛЬ Ориентированные деревья, количество, 519. Ориентированные остовные деревья, 542, 893. Ориентированный ациклический граф, 53. Ориентированный гиперграф, 67. Ориентированный граф, 31, 38-43, 65, 68, 543, 544. Кейли, 68. случайный, 45. Ориентированный лес, 200, 519, 540. Ориентированный остовный путь, 62. Ориентированный путь, 39, 64, 193, 298. Ориентированный тор, 404, 893. Ориентированный цикл, 39, 63, 64, 305, 324. Ортогональность, 320, 362. Ортогональные веторы, 59. Ортогональные латинские квадраты, 22-26. Ортогональные строки, 59. Ортогональный массив, 59, 60, 582. Основная теорема Гильберта, 443. Остаток, 321. по модулю 2” — 1, 176. Остергард, Патрик Ральф Йохан (Ostergard, Patrie Ralf Johan), 749. Остин, Ричард Брюс (Austin, Richard Bruce), 714. Остовные деревья, 301, 306, 521, 541, 543, 573. перечисление, 543. Остовный подграф, 251. Отели Лас-Вегаса, 85. Относительное дополнение, 518. Отношение промежуточности, 117. эквивалентности, 472, 488, 581. Отображение, 182. трех элементов в двухбитовые коды, 195. Отражение, 531, 679, 870. Отрезок, 91, 92. Отрицание, 221. дизъюнкции, 73. импликации, 73. конъюнкции, 73. Оттингер, Людвиг (Oettinger, Ludwig), 842. Офман, Юрий Петрович, 637, 665. Оффорд, Альберт Сирил (Offord, Albert Cyril), 886. Оцифровка, 212. Очередь, 797. с приоритетами, 202. Ошибки, 573. Пайк, Роберт К. (Pike, Robert С.), 125. Пак, Игорь Маркович (Рак, Igor Markovich), 791, 792, 831. Палиндром, 60, 609. Панхольцер, Алоиз (Panholzer, Alois), 881, 882. Пападимитриу, Христос Харилаос (Papadimitriou, Christos Harilaos (Палабццтусрюи, Xpiatoc XapiXaou)), 11, 674. Парабола, 212, 237, 685. Параллельная обработка подслов, 184. Параллельные вычисления, 118, 137, 405, 637, 784. Параллельные прямые, 59. Паркер, Эрнест Тильден (Parker, Ernest Tilden), 24, 26, 580. Паркин, Томас Рэнделл (Parkin, Thomas Randall), 656. Парковка, 873. Паросочетание, 57, 502, 530. Пары Лэнгфорда, 19, 58, 322. Паскаль, Эрнесто (Pascal, Ernesto), 413. Патент, 333, 663, 692. Патерсон, Кеннет Грехэм (Paterson, Kenneth Graham), 354. Патерсон, Майкл Стюарт (Paterson, Michael Stewart), 156, 158, 188, 671, 672. Паттенхам Георг и/или Ричард (Puttenham, George and/or Richard), 566, 575. Паттерсон, Николас Джеймс (Patterson, Nicholas James), 627. Пейдж, Лоувелл Д. (Paige, Lowell J.), 24, 26. Пейли, Раймонд Эдвард Алан Кристофер (Paley, Raymond Edward Alan Christopher), 223, 361, 655, 761. Пейн, Вильям Гаррис (Payne, William Harris), 416, 436. Пейперт, Сеймур Обри (Papert, Seymour Aubrey), 236. Пелед, Ури Натан (Peled, Uri Natan (7>0 1ГО HW)), 728. Пентагрид, 204, 235. Пеппердайн, Эндрю Говард (Pepperdine, Andrew Howard), 800. Перевернутая пирамида, 808. Переворот, 381. Перекрестно пересекающиеся множества, 440. Перекрестный порядок, 429-433, 441, 826. Перекрывающиеся поддеревья, 125, 303. Перекрывающиеся семейства множеств, 115. Перельман, Григорий Яковлевич, 577. Переменная вершины, 43. дуги, 43. Перенос, 158, 184, 185, 191, 257, 330, 636, 667, 668, 731, 779. Переносимость, 42, 171. Переполнение, 673. Пересечение, 320, 576. границы, 212. Перестановка, 222, 279, 318, 445, 488, 539, 551, 570, 571. ф(к), 381. байтов, 219. битов, 178, 191, 219. Грея, 361. индексных цифр, 225. мультимножества, 422, 569. “на месте”, 357, 361. соседних элементов, 438.
ПРЕДМЕТНО-ИМЕННОЙ УКАЗАТЕЛЬ 941 Перестановки мультимножества, 394, 411, 438, 450, 807, 842. Перестановочная сеть, 178, 226. Перестановочный ориентированный граф, 63. Переупорядочение, 699. Перец, Арам (Perez, Aram), 220. Перечисление, 329. булевых функций, 104. Перманент, 149. Пермутаэдр, 535. Перпендикулярные прямые, 203. Перрин, Франсуа Оливье Рауль (Perrin, Francois Olivier Raoul), 695, 714. Петерсен, Юлиус Питер Кристиан (Petersen, Julius Peter Christian), 23, 33, 589. Петерсон, Уильям Уэсли (Peterson, William Wesley), 220. Петля, 32, 38, 39, 64, 521, 523, 593. Петрарка, Франческо (Petrarca, Francesco (= Petrarch)), 493. Пехушек, Джозеф Дениэль (Pehoushek, Joseph Daniel), 114. Печарски, Марцин Пётр (Peczarski, Marcin Piotr), 797. Пианино, 418, 439. Пиковер, Клиффорд Алан (Pickover, Clifford Alan), 654. Пиксель, 44, 52, 207, 238. Пиксельная алгебра, 208. Пингала, Акарья (Pingala, Асагуа (ЗГгЙтФРпрТ)), 548-550, 574. Пиппенджер, Николас Джон (Pippenger, Nicholas John), 625, 640. Пирамида, 116, 199. Пиррихий, 550. Пирс, Чарльз Сантьяго Сандерс (Peirce, Charles Santiago Sanders), 73, 74, 77, 474, 607. Пистолет Дюмона, 318, 734. Питман, Джеймс Вильям (Pitman, James William), 496, 848, 860. Питтвей, Майкл Ллойд Виктор (Pitteway, Michael Lloyd Victor), 213. Питтель, Борис Гершонович, 484. Питтс, Удлер Гарри (Pitts, Walter Harry), 101. Планарность, 58. Планарный граф, 33, 34, 37, 44, 68, 275, 584, 591. Пласс, Майкл Фредерик (Plass, Michael Frederick), 114. Платон = Аристокл, сын Аристона (Plato = Aristocles, son of Ariston (ПХа-tcov = ’ApiatoxXfjc ’Apiatcovoc)), 498. Плезанте, Питер Артур Барри (Pleasants, Peter Arthur Barry), 849. Плещински, Стефан (Pleszczyiiski, Stefan), 796. Пловер, Кори Майкл (Plover, Corey Michael), 144, 639. Плотная упаковка, 8. Побитовое И, 42. ИЛИ, 74. Поверхность Римана, 856. Поворот, 505. Поглощение, 301. Подбрасывание монет, 496. Подграф, 32, 37. гиперкуба, 117. Подкуб, 79, 109, 160, 234, 302, 439, 443, 624, 638, 736. Подлее, 349, 366. Подмножество, 183, 330. Подстановка констант вместо переменных, 259. функций вместо переменных, 309. Подсчет единиц, 175. решений, 246, 247. Подтаблица, 260, 712. Подфункция, 256. Познер, Эдвард Чарльз (Posner, Edward Charles), 582. Поиск в глубину, 43, 63, 258, 310, 643. в таблице, 666. путем сдвига, 189, 240, 657, 669, 692. в ширину, 95, 310, 673, 679, 887. вглубь, 887. Пойа, Гёрги (Pdlya, Gyorgy (= George)), 15, 37, 655, 829, 839. Показательное множество, 746. Покрытие, 29, 55, 57, 120, 468, 489, 517. в решетке, 533. ребер, 366. Поле, 74, 221, 361. Грея, 361. Полимино, 296, 322. Полином, 107, 227, 252. доступности булевой функции, 252. надежности, 246, 252, 306, 307, 314. Пирса, 852. Полиномиальный идеал, 443. Полиномиальный коэффициент, 567. Полиномы Фибоначчи, 239. Чебышева, 688, 892. Полиньяк, Камилл Арман Жюль Мари де (Polignac, Camille Armand Jules Marie de), 35. Полиэдрическая комбинаторика, 8. Поллак, Гёрги (PollAk, Gyorgy), 765. Полная дизъюнктивная нормальная форма, 77, 107. форма, 624. Полная конъюнктивная нормальная форма, 77. Полное бинарное дерево, 108, 199, 653, 808. Полное иерархическое тернарное дерево, 548. Полное упорядочение, 394.
942 ПРЕДМЕТНО-ИМЕННОЙ УКАЗАТЕЛЬ Полностью детализированная таблица истинности, 253, 306, 307, 321. Полный fc-дольный граф, 37, 62, 67. Полный r-однородный гиперграф, 54. Полный биграф, 164, 586, 648, 891. Полный бинарный луч, 61. Полный граф, 32, 47, 64, 542, 556, 589, 765, 826. Полный двудольный г-однородный гиперграф, 67. Полный двудольный граф, 37, 559. Полный ориентированный граф, 38. Полный сумматор, 136, 157, 234, 632. Полный тернарный луч, 584. Положительная пороговая функция, 101. Положительная функция, 601. Положительно полуопределенная матрица, 890. Полумодулярность, 533. Полуопределенное программирование, 8. Полупомеченное дерево, 488. Полусумматор, 136, 233. Получение по рангу бинарного дерева, 573. кортежа, 357. объекта, 332, 348, 405, 548, 574. перестановки, 552, 562. разбиения, 468. разбиения множества, 488. сочетания, 435, 436, 437. строки вложенных скобок, 510, 537. Поль, Вольфганг Якоб (Paul, Wolfgang Jakob), 163. Поль, Ира Шелдон (Pohl, Ira Sheldon), 21. Польская запись, 88. Померанц, Карл (Pomerance, Carl), 860. Помеченные объекты, 856. Поразрядная сортировка, 486. Пороговая функция, 101, 104, 123, 254, 307, 308, 315, 519, 634, 728, 885. Фибоначчи, 119, 120, 156, 307. Пороговые функции пороговых функций, 103, 119. Порожденный подграф, 65. Порядковый идеал, 442, 620, 871. Порядок, 32, 38, 68, 789, 846. двери-вертушки, 437. доминирования, см. Мажоризация, 120, 468. кода Грея, 827. латинского квадрата, 59. органных труб, 282, 313, 422, 578, 699, 721, 792, 800, 888. Последовательно-параллельные графы, 524, 541, 883. представление в виде дерева, 525. Последовательное представление БДР, 246, 305, 308. Последовательности со сдвигом регистра, 351-357. Последовательность степеней, 50, 66, 69. в прямом порядке обхода, 532. Фибоначчи, 549. обобщенная, 549. Чейза, 121. Последовательные алгоритмы, 9. Последовательные целые числа, 464. Пост, Эмиль Леон (Post, Emil Leon), 89, 94, 611. Пост, Ян Томас (Post, Ian Thomas), 751. Построчно-эшелонный вид, 806. Поток Грея, 364. Поэзия, 493, 548, 556, 584. Прёмель, Ганс Юрген (Promel, Hans Jiirgen), 797. Правило резолюций, 605. Правильный многогранник, 442. Пратт, Воган Рональд (Pratt, Vaughan Ronald), 155, 224, 228, 661, 665, 670, 686. Предок, 864. Предпростая строка, 356, 368. Представление в виде количества частей, 448, 463, 488. графа, 233. дерева в виде бинарного, 435. множества, 233. произвольной перестановки, 227. трех состояний двумя битами, 195. Преобразование Адамара, 337, 600, 761, 762. Меллина, 452, 465. Уолша, 337, 362. Фурье, дискретное, 357. Препарата, Франко Паоло (Preparata, Franco Paolo), 628, 634. Преете, Жан (Prestet, Jean), 564, 575. Префикс, 157, 355. строки, 163. Приближение Стирлинга, 477, 479, 481, 859. Приведение к БДР, 258. Приведенная бинарная диаграмма решений, 243. Приведенное медианное множество, 98. Примитивный полином, 352, 761. по модулю 2, 699. Принс, Джирт Калеб Эрнст (Prins, Geert Caleb Ernst), 571. Принцип включения и исключения, 335, 456, 457, 466, 605, 741, 853, 859, 897. Приоритет, 76. Приоритетная очередь, 202. Притчард, Пол Эндрю (Pritchard, Paul Andrew), 656. Прован, Джон Скотт (Provan, John Scott), 606. Проверка двудольности, 43. достижимости, 887. принадлежности диапазону, 230. связности графа, 887.
ПРЕДМЕТНО-ИМЕННОЙ УКАЗАТЕЛЬ 943 эквивалентности булевых функций, 267, 305. Программа автоматического доказательства теорем Otter, 614. Программируемая логическая матрица, 78. Продингер, Гельмут (Prodinger, Helmut), 657, 853, 880, 881, 882. Проективная плоскость, 581, 594. Проецирующая функция, 74, 320, 321, 616. Произведение, 270. Кронекера, 590, 891. перестановок, 377. Произведения графов, 65. Производная, 252, 306, 441, 545. Производящая функция, 225, 227, 246, 251, 300, 306, 307, 397, 437, 450, 455, 464, 466, 471, 475, 492, 508, 537, 539, 714, 715, 725, 744, 747, 748, 755, 799, 816, 862, 883, 901. Дирихле, 658. на основе НДР, 738. Прокоп, Гаральд (Prokop, Harald), 224. Пропорциональный граф, 69. Пропуск блоков перестановок, 382. Просвет, 464. Просеивание, 287, 295, 715. частичное, 289. Проскуровски, Анджей (Proskurowski, Andrzej), 504, 537. Просодия, 548. Простая импликанта, 78, 89, 97, 109, 116, 119, 122, 123, 160, 234, 300, 303, 645, 649, 704, 728. Просто связный компонент, 211. Простое число, 140, 168, 223, 465. Простой дизъюнкт, 123, 160, 325. Простой ориентированный граф, 38, 66, 589, 590. Простой путь, 298. Пространственно-временной компромисс, 261. Пространство бинарных векторов, 440. Простые изменения, 372, 387, 392, 395, 397, 403, 417. Простые импликанты функции мажоризации, 619. Простые строки, 355, 368. Противоречие, 73. Профиль, 276, 308, 310, 318, 704. Пруссе, Гара (Pruesse, Gara), 798. Прямая сумма графов, 48, 65. двух матриц, 47. Прямое произведение, 543. графов, 49, 65. матриц, 66, 891. Прямой порядок обхода, 200, 381, 383, 414, 435, 498, 501, 502, 507, 508, 531, 573, 676, 811, 870, 888. Прямообратный порядок, 544. обхода, 528. Прямоугольник Дюрфи, 830. Псевдодополнение, 873. Псевдослучайные биты, 368. Птолемей, Клавдий, из Александрии (Ptolemy, Claudius, of Alexandria (ПтоХе|ха1ос KXauhto; 5 ’AXe^av&ptvo;)), 563. Пуанкаре, Жюль Энри (Ротсагё, Jules Henri), 577. Пуансо, Луи (Poinsot, Louis), 443, 574, 827. Пуаро, Эркюль (Poirot, Hercule), 38, 902. Пуассон, Симон Дени (Poisson, Sim6on Denis), 833. Пудлак, Павел (PudlAk, Pavel), 846. Пузырьковая сортировка, 371. Пуркисс, Генри Джон (Purkiss, Henry John), 358. Пурнадер, Рузбен (Pournader, Roozbeh (>Цл> 690- Пустая строка, 883. Пустое множество, 561. Пустой граф, 891. Путеанус, Эрикус (Puteanus, Erycius (= de Putte, Eerrijk)), 562, 564, 575, 900. Путцолу, Жанфранко (Putzolu, Gianfranco), 606. Путь, 32, 64. в решетке, 409. в сети, 450. в сетке, 409, 433. Грея, 344, 470, 840. червяка, 511, 530, 881, 884. Пушкин, Александр Сергеевич, 493. Пфафф, Иоганн Фридрих (Pfaff, Johann Friedrich), 798. Пятибуквенные слова, 28, 65, 297, 322, 324, 325, 339, 362, 368, 399, 488. Пятиугольник, 535. Пятиугольные числа, 451. Рабин, Майкл Озер (Rabin, Michael Oser (узп iny i»O»n)), 665. Равенство байтов, 186. Равив, Джозеф (Raviv, Josef (З’ЗТ *)ОТ»)), 754. Радемахер, Ганс (Rademacher, Hans), 336, 453, 454, 466, 467. Радо, Ричард (Rad6, Richard), 444, 621. Радойчич, Радош (RadoiCid, Rado§), 792. Разбиения, 46, 51, 399, 444-497, 571, 576, 593, 803, 806, 852. векторов, 485, 496. без единиц, 454. без одноэлементных частей, 493, 854. дважды истинные, 399. множества, 327, 446, 471-497, 533, 565, 573, 575, 701. мультимножеств, 484, 496, 567, 576, 863. целых чисел, 446 -471, 484, 491, 567. Разборов, Александр Александрович, 155. Разделительная дизъюнкция, 73. Разделяй и властвуй, 138, 181, 634. Различные части, 464, 465, 466, 468.
944 ПРЕДМЕТНО-ИМЕННОЙ УКАЗАТЕЛЬ Разложение, 162, 567, 576. строк, 368. функций, 147. частично определенных функций, 150. Эджворта, 858. Размах, 430, 441. Размен, 463. Размер, 32, 38, 68. Размерность, 435. Разность, 320. Разреженная функция, 298. Разреженный граф, 41, 44. Райзер, Герберт Джон (Ryser, Herbert John), 59, 580, 839. Райт, Эдвард Метланд (Wright, Edward Maitland), 861, 862. Райтвизнер, Георг Вальтер (Reitwiesner, George Walter), 224. Раман, Раджив (Raman, Rajeev), 666. Рамануджан Иенгар, Сриниваза (Ramanujan Iyengar, Srinivasa (и&ввЯантвтптгимтеыgpeir гпиляагпт)), 453, 454, 465, 466, 467, 831, 832. Рамрас, Марк Бернард (Ramras, Mark Bernard), 766. Ранг, 239, 327, 348, 397, 405, 537, 539, 548, 552, 562, 573, 574, 796, 808, 812. Рандомизация, 148. Рандомизированные структуры данных, 659. Рандрианаривоны, Артур (Randrianarivony, Arthur), 730. Рани, Джордж Нил (Raney, George Neal), 538. Ранкин, Роберт Александер (Rankin, Robert Alexander), 390, 404, 793. Рао, Калямпуди Радхакришна (Rao, Calyampudi Radhakrishna (Й^оЙЬ сгб)), 581. Рапапорт, Эльвира Штрассер (Rapaport, Elvira Strasser), 792. Раски, Фрэнк (Ruskey, Frank), 160, 349, 350, 357, 360, 363, 390, 405, 438, 439, 473, 490, 504, 506, 510, 513, 537, 573, 739, 774, 778, 792, 793, 796, 798, 802, 875, 887. Раскрашивание, 70, 290. графа, 36, 151, 276, 303. Раскрутка, 632, 637. Раскрытие медианы, 114. Распаковка, 168. Распознавание шаблонов, 208. Распределение памяти, 188, 224. Пуассона, 483, 490. Распределенные системы, 115. Распространение битов, 172. Рассеянная разность, 228. Рассеянная сумма, 184. Рассеянный аккумулятор, 228. Рассеянный сдвиг, 228. Расстояние, 35, 66. кода, 60. обобщенное, 36. Хэмминга, 31, 49, 60, 118, 323, 615, 696. Растр, 235. Растровая графика, 207-217. Расходящиеся прямые, 203. Расширение, 356. Расширенная таблица истинности, 285. Расширенное бинарное дерево, 514, 532, 545. Расширенное тернарное дерево, 532. Расширенные действительные числа: действительные числа с —оо и +оо, 88. Рашед, Рошди (Rashed, Roshdi (= Rashid, Rushdi) (a-llj ^i>lj)), 554, 898. Реберный граф, 47, 57, 65, 586, 590, 593. Ребра как пары дуг, 39, 42. Регистр, 130. Регулярная функция, 121, 310. Регулярный граф, 33, 45, 65, 68. Регулярный язык, 231, 327. Редей, Ласло (R£dei, LAszl6), 586. Редькин, Николай Петрович, 137, 162, 644. Резольвента, 605. Результант, 892. Резулярная функция, 123. Рейнгольд, Эдвард Мартин (Reingold, Edward Martin (Y?W>’n, D«n p nwn рПЗ’)), 338, 416, 573. Рейсс, Мишель (Reiss, Michel), 826. Рейтинги упражнений, 15. Рекорде, Роберт (Recorde, Robert), 913. Рекуррентное соотношение Фибоначчи, 451. Рекуррентность, 239, 313, 352, 434, 451, 459, 465, 602, 633, 634, 695, 714, 717, 725, 728, 746, 750, 761, 770, 782, 809, 810, 811, 861, 873, 880, 894. Рекурсивная подпрограмма, 95. Рекурсивная процедура, 628, 847, 887. Рекурсивная структура, 864, 874. Рекурсивная формулировка, 266. Рекурсивные подпрограммы, 424. Рекурсивный алгоритм, 310, 312, 573. Рекурсия, 183, 221, 313, 417, 523, 633, 634, 727, 874. и итерация, 419, 438. Рекхау, Роберт Аллен (Reckhow, Robert Allen), 608. Реми, Жан-Люк (Remy, Jean-Luc), 514, 538, 882. Реммель, Джеффри Брайан (Remmel, Jeffrey Brian), 852. Ретракция, 100, 119. Рефлексивный десятичный код Грея, 347. код Грея, 436, 505, 772, 789, 798, 841. для смешанных оснований, 372.
ПРЕДМЕТНО-ИМЕННОЙ УКАЗАТЕЛЬ 945 Решетка, 120, 251, 298, 306, 468, 489, 544, 893. деревьев, 533. Кревераса, 533. мажоризации, 846. нижняя полумодулярная, 846. разбиений, 489. Стенли, 534. Тамари, 533, 535. Решето, 842. Эратосфена, 169, 224. Решетчатый граф, 297, 528. Ривест, Рональд Линн (Rivest, Ronald Linn), 81, 307. Рид, Рональд Седрик (Read, Ronald Cedric), 424, 815. Римские цифры, 900. Рингель, Герхард (Ringel, Gerhard), 366, 589. Риордан, Джон (Riordan, John), 637, 878. Ритм, 549. Ричардс, Дана Скотт (Richards, Dana Scott), 366, 532, 536. Риччи, Алистер Инглиш (Ritchie, Alistair English), 758. Роббинс, Девид Питер (Robbins, David Peter), 854. Робертсон, Джордж Нейл (Robertson, George Neil), 37. Робинсон, Джон Алан (Robinson, John Alan), 605. Робинсон, Джон Пауль (Robinson, John Paul), 359, 765, 767. Робинсон, Жильберт де Борегард (Robinson, Gilbert de Beauregard), 540. Робинсон, Роберт Вильям (Robinson, Robert William), 827, 857. Роджет, Джон Льюис (Roget, John Lewis), 44. Роджет, Питер Марк (Roget, Peter Mark), 28, 44. Родригес, Бенджамин Олинде (Rodrigues, Benjamin Olinde), 514. Родственные леса, 531. Роза, Александер (Rosa, Alexander), 580. Розенбаум, Джозеф (Rosenbaum, Joseph), 770. Розенкранц, Дэниэл (Джей Rosenkrantz, Daniel Jay), 711. Розенфельд, Азриэль (Rosenfeld, Azriel (fcsom >n>to)), 2io. Рой, Мохит Кумар (Roy, Mohit Kumar (Ofllfe® ?ПЯ)), 784. Ройш, Бернд (Reusch, Bernd), 751. Рокицки, Томас Герхард (Rokicki, Tomas Gerhard), 225, 659. Ролантс ван Баронайген, Доминик (Roelants van Baronaigien, Dominique), 504, 506, 875. России, Доминик Жиль (Rossin, Dominique Gilles), 890. Рот, Джон Пол (Roth, John Paul), 605. Рота, Жан-Карло (Rota, Gian-Carlo), 444, 624. Роте, Генрих Август (Rothe, Heinrich August), 570, 781. Роте, Гюнтер (Rote, Giinter (= Rothe, Giinther Alfred Heinrich)), 237. Ротем, Дорон (Rotem, Doron (Dim ]rm)), 392, 395. Ротхаус, Оскар Сеймур (Rothaus, Oscar Seymour), 627. Рудеану, Серж (Rudeanu, Sergiu), 303. Руделл, Ричард Лайл (Rudell, Richard Lyle), 272, 285, 287, 288, 303, 315, 708, 724. Руза, Имре Золтан (Ruzsa, Imre Zolt&n), 822. Рукопожатие, 502, 530. Рутовиц, Дэнис (Rutovitz, Denis), 208. Руциньски, Анджей (Rucinski, Andrzej), 597. Рфлексивный код Грея, 350. Рэй, Луи Чарльз (Ray, Louis Charles), 207. Рэйнод-Ричард, Пьер (Raynaud-Richard, Pierre), 690. Рэмшоу, Лайл Гарольд (Ramshaw, Lyle Harold), 187. Рэндж, Нико (Range, Niko), 721. Рэндолл, Кейт Гарольд (Randall, Keith Harold), 224. Рюдигер, Христиан Фридрих (Riidiger, Christian Friedrich), 370. Рюкзак, 101, 414. Ряд Тейлора, 32, 481, 856. Фурье, 335, 452. Сабо, Йозеф (Szab6, Jdzsef), 785. Савада, Джозеф Джеймс (Sawada, Joseph James), 778. Савицки, Петр (Savicky, Petr), 723. Саган, Брюс Эли (Sagan, Bruce Eli), 803. Сазерленд, Стюарт (Sutherland, Stuart), 11. Саймон, Имре (Simon, Imre), 697. Сак, Йорг-Рюдигер Вольфганг (Sack, Jorg-Riidiger Wolfgang), 882. Сака, Масанобу (Saka, Masanobu (®1ЕЛс)), 566. Саккери, Джованни Джироламо (Saccheri, Giovanni Girolamo), 203. Сакс, Майкл Эзра (Saks, Michael Ezra), 615. Самет, Ханан (Samet, Hanan (v>K)C рп)), 666. Самодополнительный граф, 64, 65. Самодуализация, 119. Самодуальная пороговая функция, 104, 119. Самодуальная функция, 107. Самодуальность, 88, 104, 123, 315, 536. Самоорганизующиеся структуры данных, 615. Самосопряженность, 464, 490, 866. Самосопряженные разбиения, 840. Самсон, Эдвард Уолтер (Samson, Edward Walter), 601, 605. Сандерс, Даниэль Престон (Sanders, Daniel Preston), 37. Санджованни-Винсентелли, Альберто Луиджи (Sangiovanni-Vincentelli, Alberto Luigi), 152. Санскрит, 548, 552.
946 ПРЕДМЕТНО-ИМЕННОЙ УКАЗАТЕЛЬ Сарнгадева, сын Содхаладева (Sarngadeva, son of Sodhaladeva (ЭД||&, ЗТ:)), 553, 562, 781, 899. Сартена, Кристиан (Sartena, Christian), 598. Сасаки, Фукаши (Sasaki, Fukashi (fc^*^ib)), 104. Cacao, Дутому (Sasao, Tsutomu (®fO®)), 699. Сатклифф, Алан (Sutcliffe, Alan), 845. Сатнер, Клаус (Sutner, Klaus), 689. Сахе, Хорст (Sachs, Horst), 589, 891, 894. Сачков, Владимир Николаевич, 484. Сбалансированность, 463, 538, 740. Сбалансированные тернарные числа, 233. Сборка мусора, 269, 310. Сверхребро, 524. Свиннертон-Дайр, Генри Питер Френсис (Swinnerton-Dyer, Henry Peter Francis), 832. Свифт, Джонатан (Swift, Jonathan), 171, 692. Свободная алгебра медиан, 96, 118. Свободное дерево, 894. Свободные группы, 572. Свободные деревья, 36, 37, 68, 92, 521, 541, 545, 571, 645, 873. Свободные левые скобки, 885. Свойство двери-вертушки, 437. Связанные бинарные деревья, 502-508, 514, 532, 538. Связанные компоненты, 764. Связанный список, 385, 435, 722. Связанный узел, 284, 722. Связи, 488. Связность, 9, 54, 251, 595. вершин, 592. ориентированного графа, 39. Связный гиперграф, 54. Связный граф, 35, 68, 523. Связь, 463. Сдвиг, 185, 232. Сегё, Габор (Szeg6, G«ibor), 15. Седжвик, Роберт (Sedgewick, Robert), 391, 573. Сеймур, Пол Дуглас (Seymour, Paul Douglas), 37. Секанина, Милан (Sekanina, Milan), 529. Секели, Ласло Аладар (Sz6kely, LAszld Alad&r), 845. Секи, Такаказу (Seki, Takakazu (IHJ^ftl)), 553, 566, 574. Секущая, 25. Селаски, Ганс Петтер Вильям Сиревааг (Selasky, Hans Petter William Sirevaag), 241. Селе, Тибор (Szele, Tibor), 586. Семба, Ичиро (Semba, Ichiro ({|1|^—9)), 499, 700, 753. Семейство множеств, 54, 294, 310, 734. подмножеств, 115. Семереди, Эндре (Szemer€di, Endre), 119. Семисегментный дисплей, 141, 143. Семь смертных грехов, 556. Сервисное поле, 588. Серени, Балас (Szdr£nyi, BalAzs), 605. Серии битов, 172. Серра, Микаэла (Serra, Micaela), 778. Сет, Викрам (Seth, Vikram (Гчя>*1 ^3')), 494. Сетевая модель вычислений, 254, 308. Сеть, 52, 680. Сжатие, 825. данных, 244. множества, 431. ребра, 521. Сжатый граф, 521. Сибсон, Робин (Sibson, Robin), 674. Сигель, Карл Людвиг (Siegel, Carl Ludwig), 715. Сигнатура буквометика, 375. Сили, Коломан фон (Szily, Koloman von), 749. Сильвер, Альфред Линдсей Лей (Silver, Alfred Lindsey Leigh), 790. Сильверман, Джерри (Silverman, Jerry), 763, 765. Сильвестер, Джеймс Джозеф (Sylvester, James Joseph), 362, 464, 733, 762, 832. Сильно связанный компонент, 62, 586. Сильное произведение, 49, 65, 543, 596. Символы Якоби, 833. Симметричная булева функция, 319. Симметричная группа, 653. Симметричная пороговая функция, 717. Симметричная разность, 320. Симметричная функция, 163, 253, 260, 274, 715. Симметричное среднее, 470. Симметричные булевы функции, 103, 302, 307, 308, 313. Симметричные полиномы, 901. Симметричные функции, 104, 122, 126-133, 137, 146, 156, 157, 321, 325, 448, 631, 632, 699, 716, 839. Симметричный порядок обхода, 200, 499, 505, 506, 513, 537, 871. Симметрия, 34, 61, 133, 378, 398, 716, 750. Симоэс Перейра, Хосе Мануэль дос Сантос (Simoes Pereira, Зозё Manuel dos Santos), 807. Симплекс, 426. Симплициальный комплекс, 442, 825. Симплициальный мультикомплекс, 442. Симпсон, Джеймс Эдвард (Simpson, James Edward), 577. Симс, Чарльз Коффин (Sims, Charles Coffin), 378. Синглтон, Роберт Ричмонд (Singleton, Robert Richmond), 587. Сингмастер, Дэвид Брейер (Singmaster, David Breyer), 578, 689. Сингх, Пармананд (Singh, Parmanand (Ч<ЧН-4 f^)), 549, 561. Синтаксис, 83, 545.
ПРЕДМЕТНО-ИМЕННОЙ УКАЗАТЕЛЬ 947 Синтез в глубину, 266. Система множеств, см. Гиперграф, 54. счисления Фибоначчи, 204, 235. троек, 54, 67. Скалигер, Юлиус (Scaligero, Giulio (= Scaliger, Julius Caesar)), 563. Скалярное произведение, 31, 55, 59. Скарбек, Владислав Казимеж (Skarbek, Wladyslaw Kazimierz), 502, 877. Сквайр, Мэттью Блейз (Squire, Matthew Blaze), 774. Склянски, Джек (Sklansky, Jack), 635. Скобки, 326, 498-502, 517, 571, 572, 864. Скоинс, Губерт Ян (Scoins, Hubert Ian), 520, 573. Сколем, Альберт Торальф (Skolem, Albert Thoralf), 10, 27, 58, 577, 578. Скошенная пирамида, 234. Скрученное биномиальное дерево, 544. Скрыто взвешенная битовая функция, 278, 308, 313, 316, 753. Скрытый узел, 284, 722. Скютелла, Мария Грация (Scutella, Maria Grazia), 85. Слабая логика второго порядка, 154. Слабое упорядочение, 571. Слабый порядок, 406. Сланина, Маттео (Slanina, Matteo), 653. След, 449, 457, 464, 535, 830, 872. Слепиан, Дэвид (Slepian, David), 178. Слип, Майкл Ронан (Sleep, Michael Ronan), 511. Слитор, Дэниэль Доминик Каплан (Sleator, Daniel Dominic Kaplan), 167, 680. Слияние, 259, 286. Слоан, Нейл Джеймс Александер (Sloane, Neil James Alexander), 581, 758. Слоан, Роберт Хал (Sloan, Robert Hal), 605. Слободова, Анна Миклашова (SlobodovA, Anna Mikl&ov&), 713. Слова Дика, 572. Линдона, 355. Словарь, 28, 71, 268. Сложение по модулю 3 и 5, 160. Сложность булевой функции, см. длина булевой функции, 127. Слокам, Джеральд Кеннет (Slocum, Gerald Kenneth (= Jerry)), 772. Слуцки, Жора (Slutzki, Giora (’pxi^V Юта)), 95. Случайная булева функция, 81. Случайное блуждание, 68. Случайное дерево Каталана, 546. Случайное дерево Шрёдера, 883. Случайное ориентированное дерево, 541. Случайное решение, 246. уравнения f(x) = 1, 248. Случайные бинарные деревья, 514, 538. Случайные разбиения множеств, 482. генерация, 484. Случайные разбиения, генерация, 467. Случайный лес, 538. Смежность, 32. Смежные обмены, 285, 371-376, 406, 800. Смежные подмножества вершин, 274. Смесь НДР и БДР, 302. Смешанная позиционная система счисления, 330, 348. Смит, Генри Джон Стефен (Smith, Henry John Stephen), 596. Смит, Дерек Алан (Smith, Derek Alan), 762. Смит, Джон Линн (Smith, John Lynn), 635. Смит, Малкольм Джеймс (Smith, Malcolm James), 521, 523, 526, 527. Смит, Марк Эндрю (Smith, Mark Andrew), 124. Снир, Марк (Snir, Marc ("raw pin)), 158, 163. Собственное значение, 63, 543, 803. Собственный вектор, 63, 892. Сове, Жозе (Sauveur, Joseph), 579. Совершенное паросочетание, 149, 297. Сограф, 65. Соединение, 47, 320, 595. Сойерс, Дороти Лей (Sayers, Dorothy Leigh), 371. Сократ, сын Софрониска (Socrates, son of Sophroniscus of Alopece (E<oxpa-cr)c S<oq>p<oviaxou ’AXa>7texrj6ev)), 498. Соле, Патрик (Sol6, Patrick), 758. Солексный порядок, 281, 377, 413, 447, 463, 532, 549, 562, 574, 659, 798, 838, 899, 901. Соменци, Фабио (Somenzi, Fabio), 304, 698, 706, 707, 713. Сонет, 493. Соприкосновение, 47. Сопрограмма, 403. Сопряжение, 66, 382, 449, 463, 468, 470, 490, 506, 531, 536, 544, 837. объединенных разбиений, 831. Сопряженное разбиение, 50, 592. Сортировка, 231, 285. выбором с замещением, 808. слиянием, 218. Сортирующая сеть, 119, 158, 633. Соседи, 32. Соул, Стефен Парк (Soule, Stephen Parke), 668. Сочетание, 445, 501, 504, 554-562, 571, 655, 867, 875, 898, 901. мультимножеств, 433, 574. с повторениями, 409, 418, 426, 554, 561, 575. Спектр, 577. графа, 891, 894. Спенсер, Эдмунд (Spenser, Edmund), 493. Спернер, Эмануэль (Spemer, Emanuel), 517, 826. Спитковски, Валентин Ильич (Spitkovsky, Valentin Ilyich), 727. Сплайны Безье, 216, 237. Спондей, 550, 563.
948 ПРЕДМЕТНО-ИМЕННОЙ УКАЗАТЕЛЬ Спруньоли, Ренцо (Sprugnoli, Renzo), 537. Спрэг, Роланд Персиваль (Sprague, Roland Percival), 650. Спуск, 486, 539. Сравнение байтов, 186, 230. бинарных чисел, 120. Среднее, 184, 470. Средний бит, 291. Стам, Аарт Йоханнес (Stam, Aart Johannes), 484, 496. Стандартная последовательность, 355. Стандартное множество, 430, 441. Станке, Уэйн Ли (Stahnke, Wayne Lee), 352. Стантон, Дэннис Уоррен (Stanton, Dennis Warren), 831. Стапперс, Филип Ян Джос (Stappers, Filip Jan Jos), 723. Старший бит, 291. Статистика, 129. Стафкен, Джон (Stufken, John), 581. Стаховяк, Гжегош (Stachowiak, Grzegorz), 815. Стедалл, Жаклин Анна (Stedall, Jacqueline Anne), 567. Стедман, Фабиан (Stedman, Fabian), 373. Стейглиц, Кеннет (Steiglitz, Kenneth), 760. Стек, 43, 84, 603. Стенли, Ричард Питер (Stanley, Richard Peter), 32, 422, 444, 448, 536, 561, 620, 820, 842, 843, 850, 871, 883. Степень, 33, 39, 61, 66, 67, 532, 593. вершины, 544. графа, 523. графа, 529, 544. Стефенс, Нельсон Малкольм (Stephens, Nelson Malcolm), 849. Стибитц, Джордж Роберт (Stibitz, George Robert), 333, 335. Стивенс, Бретт (Stevens, Brett), 365. Стивенсон, Дэвид Ян (Stevenson, David Ian), 143, 631, 640, 641. Стигер, Анжелика (Steger, Angelika), 797. Стил, Гай Льюис-мл. (Steele, Guy Lewis, Jr.), 181, 227, 660, 663. Стинсон, Дуглас Роберт (Stinson, Douglas Robert), 573. Стирлинг, Джеймс (Stirling, James), 566. Стихи, 567. Стихи-хамелеоны, 563. Стойменович, Иван Данча (Stojmenovid, Ivan DanCa), 446. Сток, 38, 87, 285. Стокмейер, Ларри Джозеф (Stockmeyer, Larry Joseph), 9, 154, 155, 163, 632, 647, 661, 665. Стоктон, Фред Грант (Stockton, Fred Grant), 685. Столфи, Йорг (Stolfi, Jorge), 687. Страхлер, Артур Невелл (Strahler, Arthur Newell), 545, 584, 896. Страчи, Кристофер (Strachey, Christopher), 176. Строка, 185. вложенных скобок, 871. Стирлинга, 846. Фибоначчи, 58. Структура связности, 209. Структуры данных для графов, 523. Стюарт, Ян Николас (Stewart, Ian Nicholas), 369. Суби, Карлос Сэмюэль (Subi, Carlos Samuel), 363. Субрамани, Кришнамурти (Subramani, Krishnamurthy лйггсвсгхР)), 611. Субраманиан, Ашок (Subramanian, Ashok), 617. Судборух, Айвен Хал (Sudborough, Ivan Hal), 801. Сумасшедшая петля, 366. Сумма битов, см. Контрольная сумма, 175. Дедекинда, 453. квадратов, 362. по всем разбиениям, 448, 475, 855, 858. Суммы столбцов, 469. строк, 469. Супарта Ай Ненга (Suparta, I Nengah), 759. Суперкорень, 544. Суповит, Кеннет Джей (Supowit, Kenneth Jay), 720. Сусрута (SuSruta (tj^u)), 554. Суффикс, 355. строки, 163. Схема, близкая к идеальной, 424. Схемы рифм, 472, 493, 567, 575. Счетчик команд, 192. ссылок, 270, 310, 315, 710. Съёстранд, Йонас Эрик (Sjostrand, Jonas Erik), 690. Сылов, Петер Людвиг Мейдель (Sylow, Peter Ludvig Mejdell), 653, 661. Сэведж, Джон Эдмунд (Savage, John Edmund), 637. Сэведж, Карла Диана (Savage, Carla Diane), 346, 347, 357, 363, 365, 461, 573, 764, 792, 800, 816. Сэмпсон, Джон Лоуренс (Sampson, John Laurence), 763. Сяо, Бен Му-Юе (Hsiao, Ben Mu-Yue (ЖИЖ = МИ®)), 582. Таблица, 50. инверсий, 372, 405, 501, 781, 797, 798, 864.
ПРЕДМЕТНО-ИМЕННОЙ УКАЗАТЕЛЬ 949 истинности, 72, 73, 75-77, 97, 122, 124, 126, 129, 130, 140, 145, 164, 173, 241, 243, 246, 253, 256, 260, 261, 265, 276-278, 294, 302, 305, 308, 310, 326, 598, 636, 720, 726, 753. количеств булевых функций, 104. Симса, 378-386, 399. уникальности, 268. Юнга, 394. Таблицы чисел, 904-907. Табличное представление, 450. Тавтология, 73, 607, 735. Тайлер, Дуглас Блейн (Tyler, Douglas Blaine), 536. Такаги, Теиджи (Takagi, Teiji (Я^ЙЙз)), 428, 821. Такасу, Сатору (Takasu, Satoru (ЯЖЖ)), 618. Такахаши, Хидетоши (Takahasi, Hidetosi 619. Такенага, Ясухико (Takenaga, Yasuhiko (ЙЛсЖЖ)), 721. Таки, Джон Уильдер (Tukey, John Wilder), 71. Тако, Андрэ (Tacquet, Andre), 560. Танг, Дональд Тао-Нан (Tang, Donald Tao-Nan (ЖЖ#)), 416, 504. Танненбаум, Мейер (Tannenbaum, Meyer), 623. Танцующие связи, 20, 25, 30, 523, 579, 740. Таржан, Роберт Эндре (Tarjan, Robert Endre), 19, 87, 114, 200, 643, 677. Тарри, Гастон (Tarry, Gaston), 23, 826. Тарталья, Никколо Фонтана (Tartaglia, Niccold Fontana), 561. Тейлор, Брук (Taylor, Brook), 481, 856. Тейлор, Ллойд Вильям (Taylor, Lloyd William), 333. Телевидение, 333. Телефон, 333. Темперли, Гарольд Невилл Вазелл (Temperley, Harold Neville Vazeille), 457. Теневое исчисление, 848. Тензорное произведение, 49. Тень, 426-433, 440, 489. бинарной строки, 443. подкуба, 443. Теорема Джордан о кривых, 212. Крускала-Катоны, 427. о вычетах, 475, 478. о матрице дерева, 802. Спернера, 539, 885. Ферма, 368. четырех красок, 37. Теория автоматов, 327. графов, 303. введение, 32-40. Терквем, Олри (Terquem, Olry), 444. Терминология, 601. Тернарная операция, 88, 271, 309, 601, 649. Тернарное дерево, 536. Тернарность, 436. Тернарный вектор, 198. Тернарный код Грея, 348. Тесленко, Максим Васильевич (Teslenko, Maxim Vasilyevich), 720. Тетраэдр, 46. Тимонье, Лойз (Thimonier, Loys), 898. Типпетт, Леонард Генри Кейлеб (Tippett, Leonard Henry Caleb), 834. Тисон, Пьер Луи Джозеф (Tison, Pierre Louis Joseph), 605. Тобальд, Торстен (Theobald, Thorsten), 713. Тода, Ивао (Toda, Iwao (P Е0Ж))> 618. Тодоров, Добромир Тодоров (Todorov, Dobromir Todorov), 580. Тождества биномиальных коэффициентов, 537. Тождественная перестановка, 378. Тождество Ньютона, 891. Токушиге Норихиде (Tokushige, Norihide (ЙЙЖЗ?)), 822. Толстой, Лев Николаевич, 28. Томас, Герберт Кристофер (Thomas, Herbert Christopher (= Ivo)), 73. Томас, Робин (Thomas, Robin), 37. Томпкинс, Чарльз Браун (Tompkins, Charles Brown), 24, 26, 388, 572. Томпсон, Кеннет Лейн (Thompson, Kenneth Lane), 240. Топологическая сортировка, 85, 100, 112, 126, 298, 394, 405, 470, 815, 844. Top, 12, 49, 235, 359, 404, 428-433, 441, 527, 528, 544, 669, 758, 890, 893. де Брейна, 369. Торо, Дэвид Генри (Thoreau, David Henry (= Henry David)), 124. Торуп, Миккель (Thorup, Mikkel), 669, 687. Тот, Золтан (T6th, ZoltAn), 780. Точер, Кейт Дуглас (Tocher, Keith Douglas), 165, 229, 666. Точка сочленения, 300. Точное покрытие, 57. Траляля (Tweedledee), 72, 106. Транзитивное замыкание, 193, 200. Транзитивный турнир, 48, 62, 64. Транспонирование, 225, 241, 531, 536. матрицы, 180. Треугольная решетка, 46, 589. Треугольная сетка, 871. Треугольник, 428. Каталана, 509, 517, 536. t-арный, 874. Пирса, 474, 490, 491, 492, 494, 854, 862. Шрёдера, 883. Трехвалентный граф, 33. Трехзначная логика, 197, 233, 558. Трехрегистровый алгоритм, 213. Триангуляция, 806. Делоне, 44. Тривиальная функция, 74, 88, 89. Тривиальные деревья, 866. Трижды связанный лес, 530, 540, 869.
950 ПРЕДМЕТНО-ИМЕННОЙ УКАЗАТЕЛЬ Тримино, 296, 322. Триразбиения, 485. Троичная система счисления, 548. Тройки Лэнгфорда, 58. Тройное произведение, 451, 465. Трост, Эрнст (Trost, Ernst), 842. Троттер, Уильям Томас (Trotter, William Thomas), 794. Троттер, Хейл Фриман (Trotter, Hale Freeman), 373. Троубридж, Терри Джей (Trowbridge, Terry Jay), 785. Трюки и технологии, 165. Тулиани, Джонатан Р. (Tuliani, Jonathan R.), 777. Тума, Иржи (Тиша, Jiri), 846. Туран, Герги (Turin, Gyorgy), 605. Турнир, 62, 469, 893. Тутилл, Джеффри Колин (Tootill, Geoffrey Colin), 342, 756. Тушар, Жак (Touchard, Jacques), 848. Тью, Аксель (Thue, Axel), 10, 250, 305, 696. Тьюринг, Алан Мэтисон (Turing, Alan Mathison), 165. Уайт, Артур Томас (White, Arthur Thomas), 373. Уайт, Деннис Эдуард (White, Dennis Edward), 852. Удаление битов, 172. Узел графа, 42. Уилкис, Морис Винсент (Wilkes, Maurice Vincent), 175. Уиллард, Дан Эдвард (Willard, Dan Edward), 187, 231. Уиллер, Дэвид Джон (Wheeler, David John), 175. Уиппл, Френсис Джон Велш (Whipple, Francis John Welsh), 431. Уитворт, Вильям Аллен (Whitworth, William Allen), 475, 564, 575. Указатели на родительские узлы, 540. Указатель на родителя, 519, 529. Улам, Станислав Марцин (Ulam, Stanislaw Marcin), 675. Улиг, Дитмар (Uhlig, Dietmar), 162. Умножение, 232, 291, 318. бинарное, 270. знаковых битов, 195. матриц, 40, 219, 226, 649, 811. полиномов, 241. слева, 381. Унгер, Стивен Герберт (Unger, Stephen Herbert), 185. Универсальная алгебра, 599. Универсальное семейство, 322. Универсальное хеширование, 318. Универсальные последовательности разбиений, 497. Универсальный набор символов, 240. Универсальный цикл, 443, 559, 574. перестановок, 407. Унимодальные последовательности, 496. Уножение слева, 383, 799. Уокерли, Джон Френсис (Wakerly, John Francis), 642. Уоллис, Джон (Wallis, John), 334, 553, 561, 564, 567, 575, 576, 756. Уолш, Джозеф Леонард (Walsh, Joseph Leonard), 335, 336, 761. Уолш, Тимоти Роберт Стефен (Walsh, Timothy Robert Stephen), 417, 798, 799, 817. Уоррен, Генри Стенли-мл. (Warren, Henry Stanley, Jr.), 172, 175, 177, 190, 220, 221, 649, 658, 663, 667, 691. Уоррен, Йон (Warren, Jon), 513. Уоткинс, Джон Джегер (Watkins, John Jaeger), 595. Уошбурн, Сет Харвуд (Washburn, Seth Harwood), 758. Упакованные данные, операции над ними, 184. Упаковка, 168, 181, 198, 224, 240. данных, 229. Упорядочение сочетаний, 413, 417, 437. Упорядоченная бинарная диаграмма решений, 243. Упорядоченное разбиение, 575. Упорядоченные деревья, 573. Упорядоченные разбиения, 842. Упорядоченный лес, 571. Управляющая сетка, 133. Упражнения, примечания, 13-15. Уравновешенная троичная система счисления, 809. Урбан, Жанвье Хокинс (Urban, Genevie Hawkins), 207. Ури, Дарио (Uri, Dario), 689, 786. Урны, 444. Уровень, 502. Усреднение, 229. Устойчивая сортировка, 486. Устойчивое состояние, 542. Устойчивость, 55. Утверждение, 73. Утончение, 489. Ушийима, Казуо (Ushijinia, Kazuo №»ft^)), 504. Уэйн, Алан (Wayne, Alan), 399. Уэллс, Марк Бримхолл (Wells, Mark Brimhall), 572, 573, 788. Уэсте, Нейл Гарри Эрл (Weste, Neil Harry Earle), 212. Факториал, 574. Факториальная линеечная функция, 401. система счисления, 781. Факториальное представление, 562. Факторная таблица, 426, 439, 469. Фалкерсон, Делберт Рэй (Fulkerson, Delbert Ray), 592.
ПРЕДМЕТНО-ИМЕННОЙ УКАЗАТЕЛЬ 951 Фалутсос, Христос (Faloutsos, Christos (ФаХоитоос, Хрцатос)), 759. Фанк, Исаак Кауффман (Funk, Isaac Kauffman), 73. Фаче, Дэвид Рэймонд (Fuchs, David Raymond), 682. Федер, Томас (Feder, Tomis), 99, 363, 618. Фейнман, Ричард Филлипс (Feynman, Richard Phillips), 693. Феллер, Виллибальд (Feller, Willibald (= Vilim = Willy = William)), 882. Фельзенштейн, Джозеф (Felsenstein, Joseph), 857. Фенвик, Питер Маколей (Fenwick, Peter McAulay), 636. Феничел, Роберт Росс (Fenichel, Robert Ross), 434. Феннер, Тревор Ян (Fenner, TYevor Ian), 829. Фидлер, Мирослав (Fiedler, Miroslav), 893. Фидуччия, Чарльз Майкл (Fiduccia, Charles Michael), 597. Филлипс, Джон Патрик Норман (Phillips, John Patrick Norman), 781. Филогенетические деревья, 856. Филон из Мегары (= Филон Диалектик) (Philo of Megara (= Philo the Dialectician, Ф1Хоп> 6 Meyapltnc)), 73. Фиников, Борис Иванович, 156. Финк, Ганс-Иоахим (Finck, Hans-Joachim), 594. Финк, Иржи (Fink, Jiri), 765. Финоженок, Дмитрий Николаевич (Finozhenok, Dmitriy Nikolaevich), 749. Фишер, Иоганн Кристиан (Fischer, Johannes Christian), 677. Фишер, Людвиг Йозеф (Fischer, Ludwig Joseph), 783. Фишер, Майкл Джон (Fischer, Michael John), 157, 159. Фишер, Петр (FiSer, Petr), 79. Фишер, Рональд Эйлмер (Fisher, Ronald Aylmer), 834. Фишер, Рэндолл Джеймс (Fisher, Randall James), 185, 667. Фишлер, Мартин Алвин (Fischler, Martin Alvin), 623. Флажоле, Филипп Патрик Мишель (Flajolet, Philippe Patrick Michel), 898. Флайт, Колин (Flight, Colin), 857. Флаудс, Лесли Ричард (Foulds, Leslie Richard), 857. Фли Сан-Мари, Камилла (Flye Sainte-Marie, Camille), 827. Флойд, Роберт В. (Floyd, Robert W.), 228. Флорес, Айвен (Flores, Ivan), 770. Фляйшнер, Герберт (Fleischner, Herbert), 895. Фойсснер, Фридрих Вильгельм (Feussner, Friedrich Wilhelm), 521. Фокс, Ральф Хартцлер (Fox, Ralph Hartzler), 355. Фокус, 497. Фокусные указатели, 338, 349, 350, 526, 542, 773. Фолланд, Джеральд Б. (Folland, Gerald В.), 6. Фомин, Сергей Владимирович, 851. Фон, 211. Форкейд, Родни Уорринг (Forcade, Rodney Warring), 597. Форма разбиения множества, 482. случайного бинарного дерева, 513. случайного леса, 511. случайного разбиения, 457, 467. Формула Арбогаста, 475. обращения Лагранжа, 856. суммирования Пуассона, 452, 465. Эйлера, 452, 465, 787. Форни, Джордж Дэвид-мл. (Forney, George David, Jr.), 754. Форте, Робер Мари (Fortet, Robert Marie), 303. Форчун, Стивен Джонатон (Fortune, Steven Jonathon), 302. Фрагментированные поля, 183. Фраер, Ранан (Fraer, Ranan (1”Ю рут)), 114. Фрактал, 239, 539, 658. Франкл, Петер (Frankl, Piter), 820, 822. Франклин, Фабиан (Franklin, Fabian), 464, 467. Фредман, Майкл Лоуренс (Fredman, Michael Lawrence), 187, 231, 362, 603, 750, 763. Фредриксен, Гарольд Марвин (Fredricksen, Harold Marvin), 356, 357. Фрей, Питер Уильям (Frey, Peter William), 676. Фрейсс, Генри (Fraisse, Henri), 745. Френкель, Авизри С. (Fraenkel, Aviezri S. (ijpjio п»У>ЗК)), 800, 808. Фрид, Эдвин Карл (Freed, Edwin Earl), 225. Фридман, Стивен Джеффри (Friedman, Steven Jeffrey), 720. Фридшал, Ричард (Fridshal, Richard), 122, 624. Фриз, Ральф Стенли (Freese, Ralph Stanley), 873. Фристедт, Берт (Fristedt, Bert), 837. Фрэнк, Грей (Gray, Frank), 333. Функции Крускала-Маколея, 428. от пяти переменных, 134, 156. от четырех переменных, 128, 157. Радемахера, 336, 762. Уолша, 335, 361. Функциональная композиция, 275, 312. Функция v, 314. Бесселя, 453. ветвления, 222, 226. дерева, 480, 856. застежки, 180, 227, 286. Крома, 85, 104, 108, 123, 312. Крускала, 537. Kt, 440.
952 ПРЕДМЕТНО-ИМЕННОЙ УКАЗАТЕЛЬ At, 440. Маколея /х, 820. p.t, 440. монотонной функции, 265, 310. обращения к памяти, 254. ограниченно растущей строки, 488. остовного дерева, 325. от многих переменных, 151. Пейли, 361. перестановки, 281. Радемахера, 441. распределения вероятностей, 455. связности, 325. сравнения, 150, 644. Такаги, 441. Хорна, 82, 104, 112, 123, 312, 318, 736, 750. определенная, 123. переименованная, 114. четности, 104, 122, 133, 193, 232, 631. не дифференцируемая ни в одной точке, 441. Хагауэр, Иоганн (Hagauer, Johann (= Hans)), 95. Хадсон, Ричард Говард (Hudson, Richard Howard), 656. Хайнен, Франц (Heinen, Franz), 36. Хайт, Стюарт Ли (Hight, Stuart Lee), 150. Хак Госпера, 167, 223. Хакен, Армин (Haken, Armin), 608. Хакен, Вольфганг (Haken, Wolfgang), 37. Хакими, Сефолла Луи (Hakimi, Seifollah Louis), 573. Хамли, Уильям, и сыновья (Hamley, William, and sons), 772. Хаммер, Петер Ласло (Hammer, Peter Liiszld (= Peter Leslie = IvAnescu, Petru Ladislav)), 150, 303, 606. Хаммонд, Элеонор Прескотт (Hammond, Eleanor Prescott), 556. Хаммоне, Артур Роджер-мл. (Hammons, Arthur Roger, Jr.), 758. Хансель, Джордж (Hansel, Georges), 518, 540. Хант, Гарри Бовен (Hunt, Harry Bowen, III), 711. Хант, Нейл (Hunt, Neil), 687. Хантер, Джеймс Алстон Хоуп (Hunter, James Alston Hope), 375. Хантингтон, Эдвард Вермайл (Huntington, Edward Vermilye), 614. Характеристический полином, 543, 692, 761, 891. булевой функции, 252. Харари, Фрэнк (Harary, Frank), 16, 37, 571, 586, 887, 895. Харди, Годфри Гарольд (Hardy, Godfrey Harold), 453, 454, 466, 467, 655, 831, 839. Харе, Девид Эрвин Джордж (Hare, David Edwin George), 856. Харел, Дов (Harel, Dov (Зкзп 31)), 200. Харриот, Томас (Harriot, Thomas), 567. Хартли, Вильям Эрнест (Hartley, William Ernest), 564, 575. Хартмут, Хенниг Фридольф (Harmuth, Henning Friedolf), 335. Хастад, Йохан Торкель (Hastad, Johan Torkel), 121, 672. Хатчинсон, Джордж Аллен (Hutchinson, George Allen), 472, 488. Хаффман, Дэвид Альберт (Huffman, David Albert), 122, 753. Хачиян, Леонид Генрихович (Khachiyan, Leonid Genrikhovich), 602, 603, 750. Хачтел, Гери Дин (Hachtel, Gary Deane), 152. Хаяси, Цуруичи (Hayashi, Tsuruichi да®-)), эм. Хвостовой коэффициент, 844. Хедаят, Самад (Hedayat, Samad (= Abdossamad, oJaA а^Лш)), 580, 581. Хедетниеми, Сара Ли Митчелл (Hedetniemi, Sarah Lee Mitchell), 520. Хейгерап, Торбен (Hagerup, Torben), 669. Хеккель, Пол Чарльз (Heckel, Paul Charles), 662. Хелл, Павол (Hell, Pavol), 100. Хеллерман, Лео (Hellerman, Leo), 133. Хенричи, Питер Карл Юджин (Henrici, Peter Karl Eugen), 452. Хенсель, Курт Вильгельм Себастьян (Hensel, Kurt Wilhelm Sebastian), 590. Херрманн, Франсин (Herrmann, Francine), 204. Хеш-таблица, 263. Хеширование, 268. Хёльберт, Гленн Холанд (Hurlbert, Glenn Howland), 780, 802, 827. Хиккерсон, Дин Роберт (Hickerson, Dean Robert), 536, 739. Хикки, Томас Батлер (Hickey, Thomas Butler), 424, 815. Хилевиц, Едидя (Hilewitz, Yedidya), 227. Хилтон, Энтони Джон Вильям (Hilton, Anthony John William), 440, 820. Хиндман, Нейл Брюс (Hindman, Neil Bruce), 616. Хип, Брайан Ричард (Heap, Brian Richard), 382, 384, 391, 400, 404, 784. Хип, Марк Эндрю (Heap, Mark Andrew), 699. Хлавичка, Ян (Hlavicka, Jan), 79. Хо, Чин-Чанг Дэниел (Но, Chih-Chang Daniel (1^1)), 843. Хоар, Артур Говард Мэлорти (Hoare, Arthur Howard Malortie), 843. Хобби, Джон Дуглас (Hobby, John Douglas), 217, 686. Ходжес, Джозеф Лоусон-мл. (Hodges, Joseph Lawson, Jr.), 882. Ходллис, Джеффри Джон (Hollis, Jeffrey John), 233. Хойн, Фолкер (Heun, Volker), 677.
ПРЕДМЕТНО-ИМЕННОЙ УКАЗАТЕЛЬ 953 Хокинг, Стивен Уильям (Hawking, Stephen William), 913. Холл, Маршалл-мл. (Hall, Marshall Jr.), 10, 577, 581, 834, 849. Холл, Ричард Уэсли-мл. (Hall, Richard Wesley, Jr.), 209, 236. Холмс, Томас Шерлок Скотт (Holmes, Thomas Sherlock Scott), 19. Хольтон, Дерек Аллан (Holton, Derek Allan), 596, 750. Хольцман Пуассон, Карлос Альфонсо (Holzmann Poisson, Carlos Alfonso), 887. Хонда, Тошиаки (Honda, Toshiaki (ЖЙЭДВД)), 566, 575. Хопкрофт, Джон Эдвард (Hopcroft, John Edward), 302, 760. Хорей, 550, 563. Хорияма, Такаши (Horiyama, Takashi даШ<£)), 711. Хорн, Альфред (Horn, Alfred), 82, 114. Хорн, Гевин Бернард (Horn, Gavin Bernard), 754. Хортон, Роберт Элмер (Horton, Robert Elmer), 545, 584, 896. Хосака, Казухиса (Hosaka, Kazuhisa (««)), 721. Хоффдинг, Вассили (Hoeffding, Wassily), 860. Хоффман, Алан Джером (Hoffman, Alan Jerome), 587. Храпченко, Валерий Михайлович, 635. Хроматическое число, 57, 68, 70. Хэй, Джон (Haigh, John), 484. Хэмминг, Ричард Уэсли (Hamming, Richard Wesley), 754. Цветкович, Драгош Младен (Cvetkovid, Dragos Mladen), 528, 894. Целочисленное мультилинейное представление, 107, 121, 621. Целочисленное программирование, 8. Центр тяжести, 346. Центроид, 541. Цепочка, 405, 517. Цепочки подмультимножеств, 885. Цепь Эйлера, 559, 802, 826, 827, 863. Цзянь, Роберт Дянь Вень (Chien, Robert Tien Wen (<$ЯЯ)), 582. Циглер, Гюнтер Маттиас (Ziegler, Giinter Matthias), 871. Цикл, 12, 32, 54, 64, 65, 67, 299, 323, 815, 845. Грея, 341. де Брейна, 174, 351-357, 367, 550, 699, 733, 780. колеблющейся диаграммы, 491. универсальный, 443, 559, 574. Циклическая запись перестановки, 377. Циклическая перестановка, 406, 494, 535. Циклические числа Стирлинга, 860. Циклический сдвиг, 355, 388, 390, 393, 538, 662, 667. вправо, 225. Циклический список, 233, 683. Циклы в графе, 180. генерация всех, 299. Цилиндр, 49, 206, 528, 544, 679, 893. Циммерманн, Поль Винсент Мари (Zimmermann, Paul Vincent Marie), 663. Цифры, санскрит, 552. Цубои, Тейичи (Tsuboi, Teiichi (1^41-®—)), 619, 621, 625. Цузе, Конрад (Zuse, Konrad), 637. Цукияма, Шуджи (Tsukiyama, Shuji (a£iW/6)), 674. Чайлдс, Рой Сидней (Childs, Roy Sydney), 785. Чамберс, Эфраим (Chambers, Ephraim), 6. Чанг Грэхем, Фан Ронг Кинг (Chung Graham, Fan Rong King (JS^^jiS)), 615, 826, 863. Чанг, Ангел Ксуан (Chang, Angel Xuan (Ш. 727. Чанг, Каи Лаи (Chung, Kai Lai ($£Пг1Ж))> 882. Чандра, Ашок Кумар (Chandra, Ashok Kumar (ЗГ^ГЧГ^ЧТТЧ^Г)), 605, 624, 696. Частично определенная функция, 143, 162, 163. Частично симметричные булевы функции, 316. Частичное упорядочение, 394, 405. Частное, 321. Чватал, Вацлав (Chveital, Vdclav (- VaSek)), 33. Чебышев, Пафнутий Львович, 688, 858. Чезаре, Джулио (=Цезарь, Юлий) (псевдоним Дани Феррари, Луиджи Рафаиани, Луиджи Морелли и Дарио Ури) (Cesare, Giulio (pen name of Dani Ferrari, Luigi Rafaiani, Luigi Morelli, and Dario Uri)), 786. Чейз, Филлип Джон (Chase, Phillip John), 419, 424, 436, 437, 814. Чен, Вильям Юнг-Чуан (Chen, William Yong-Chuan (Bfcfcjll)), 850. Чен, Йирнг-Ан (Chen, Yirng-An (Ий^)), 752. Чен, Ку-Цай (Chen, Kuo-Tsai (ИЁИ)), 355. Ченг, Мэтью Чао (Cheong, Matthew Chao (5g®)), 704. Ченг, Чинг-Сю (Cheng, Ching-Shui (№)), 770. Червяк, 498, 510, 530, 531, 864, 871. Черны, Карл (Czerny, Carl), 816. Черчение на растре, 217. Четная перестановка, 374. Четность, 127, 162, 163, 250, 358, 652, 659. Чеширский кот, 210, 236, 682. Чжоу, Вэнь-ван, см. Вэнь-ван (Zhou Wenwang, см. King Wen), 547. Чжоу, Чжаю Конг (Chow, Chao Kong (J5HS»), ЮЗ. Чжун, Цзинь-Мань (Chung, Kin-Man (ЙЙЮ), 182, 227. Чима, Махиндр Сингх (Cheema, Mohindar Singh), 487, 861. Чимани, Маркус (Chimani, Markus), 595.
954 ПРЕДМЕТНО-ИМЕННОЙ УКАЗАТЕЛЬ Числа Белла, 474, 490-495, 567, 842, 845, 901. асимптотическое значение, 478. Бернулли, 474, 730, 833, 906. Дженоччи, 730, 734. Евклида, 733. Каталана, 326, 508, 514, 536, 571, 755, 819. таблицы, 508. Люка, 695. Перрина, 602, 695, 714. со смешанным основанием, 349, 781. Стирлинга, 567. асимптотика, 480, 566. Улама, 234. Фибоначчи, 204, 291, 366, 407, 633, 635, 695, 752, 797, 897, 906. с отрицательными индексами, 204. Шрёдера, 539, 895. Эйлера, 495, 539, 833. Число независимости, 57. Чистый буквометик, 376, 488. Чосер, Джеффри (Chaucer, Geoffrey), 583. Чун-порядок, 437, 504. Чуэнте, Морис (Tchuente, Maurice), 792. Шаблон рождественской елки, 515, 539, 624, 883. Шаллит, Джеффри Аутлав (Shallit, Jeffrey Outlaw), 658, 854. Шао Юн (Shao Yung (flljg)), 548. Шапиро, Гарольд Сеймур (Shapiro, Harold Seymour), 363. Шары, 444. Шаффлер, Теодор Генрих Отто (Schaffler, Theodor Heinrich Otto), 333. Шахматы, 35, 46, 198, 234, 323, 325. Швейк, Аллен Джон (Schwenk, Allen John), 895. Швец, Франк Йозеф (Swetz, Frank Joseph), 548. Шекспир, Уильям (Shakespeare (= Shakspere), William), 19, 493. Шен, Винсент Юн-Шен (Shen, Vincent Yun-Shen (ДЛФ)), 148, 150, 162. Шеннон, Клод Элвуд-мл. (Shannon, Claude Elwood, Jr.), 71, 139, 302, 626, 637. Шенстед, Крейг Юджин (Schensted, Craige Eugene), 114, 115, 116, 540, 612. Шестнадцатеричные константы, 12, 905. Шестнадцатеричные цифры, 240, 378. Шефер, Томас Джером (Schaefer, Thomas Jerome), 97. Шеффер, Генри Морис (Sheffer, Henry Maurice), 74, 106. Ши, Жи-Жи Джерри (Shi, Zhi-Jie Jerry (£Й^)), 664. Шнбер, Барух Менахем (Schieber, Baruch Menachem (ЗД’У Огню jnn)), 200. Шилдс, Ян Бомон (Shields, Ian Beaumont), 816. Шиллингер, Иосиф Моисеевич (Schillinger, Joseph Moiseyevich), 559, 574. Ширакава, Исао (Shirakawa, Isao (ЙЛ1Й)), 674. Широкословная инструкция, 304. цепочка, 189, 232, 304, 678. сильная, 231. Шихан, Джон (Sheehan, John), 596. Шлово, 187. Шляфли, Людвиг (Schlafli, Ludwig), 679. Шмидт, Эрик Майнехе (Schmidt, Erik Meineche), 302. Шмитт, Питер Ганс (Schmitt, Peter Hans), 611. Шмулевич, Илья Владимирович (Shmulevich, Ilya Vladimir), 626. Шнайдер, Бернадетт (Schneider, Bernadette), 771. Шнорр, Клаус-Петер (Schnorr, Claus-Peter), 163. Шоландер, Марлоу Кэнон (Sholander, Marlow Canon), 117, 614. Шоломов, Лев Абрамович, 160. Шотт, Рене Пьер (Schott, Rene Pierre), 882. Шрёдер, Фридрих Вильгельм Карл Эрнст (Schroder, Friedrich Wilhelm Karl Ernst), 106, 600. Шрёппель, Ричард Крабтри (Schroeppel, Richard Crabtree), 157, 192, 221, 662. Шрикханде, Шарадчандра Шанкар (Shrikhande, Sharadchandra Shankar (эдсч'Ч'Я flJWi)), 24. Штайн, Шерман Копальд (Stein, Sherman Kopald), 640. Штейнер, Якоб (Steiner, Jacob), 36. Штейнеровская система троек, 27. Штрассен, Фолькер (Strassen, Volker), 649. Шумахер, Генрих Кристиан (Schumacher, Heinrich Christian), 23, 36. Шур, Иссай (Schur, Issai), 839. Шутен, Франс ван (Schooten, Frans van), 560, 574. Шютценбергер, Марсель Пауль (Schiitzenberger, Marcel Paul), 427, 777, 820, 825. Эббенхорст Тенгберген, Корнелия ван (van Ebbenhorst Tengbergen, Cornelia), 515. Эва Тёрёк (Torok, Eva), 814. Эвинг, Энн Кэтрин (Ewing, Ann Catherine), 605. ЭВМ, EDSAC, 165, 176. ILLIAC I, 176. Manchester Mark I, 165. Mark II (Manchester/Ferranti), 165. БЭСМ-6, 663. Эволюционные деревья, 856. Эгиазарян, Карен (Egiazarian, Karen), 626. Эдельман, Поль Генри (Edelman, Paul Henry), 873.
ПРЕДМЕТНО-ИМЕННОЙ УКАЗАТЕЛЬ 955 Эджворт, Френсис Исидро (Edgeworth, Francis Ysidro), 858. Эйлер, Леонард (Ейлеръ, Леонардъ; Euler, Leonhard), 22, 25, 26, 58, 450, 459, 464, 465, 569, 580, 730, 841. Эйроллс, Жорж (Eyrolles, Georges), 896. Эйтер, Томас Роберт (Eiter, Thomas Robert), 728. Эквивалентность, 73, 233, 599. по отношению к перестановкам, 104. по отношению к перестановкам и дополнениям, 104. Экин, Оя (Ekin, Оуа), 606. Экланд, Брайан Дэвид (Ackland, Bryan David), 212. Экспоненциальная производящая функция, 854. Экспоненциальный рост, 267, 279, 282, 451. Экспоненциальный ряд, частичные суммы, 782. Экхофф, Юрген (Eckhoff, Jurgen), 820. Элгот, Келвин Крестон (Elgot, Calvin Creston), 155, 618. Электровакуумная лампа, 133, 157. Элемент, 547. Элементы (земля, воздух, огонь, вода), 558. Элемментарные симметричные функции, 839. Эллипс, 212, 514, 685. Эллиптические функции, 453. Эмде Боас, Петер ван (Emde Boas, Peter van), 198. Энггрен, Вилли (Enggren, Willy), 398, 399. Энгель, Конрад Вольфганг (Engel, Konrad Wolfgang), 826. Эндрюс, Джордж В. Эйр (Andrews, George W. Eyre), 446, 835. Энне, Теодор Кристиан (Enns, Theodore Christian), 815. Эппштейн, Дэвид Артур (Eppstein, David Arthur), 692, 785. Эр, Менг Чу (Er, Meng Chiau (^ВДВЗ)), 385, 867. Эратосфен из Кирена (Eratosthenes of Cyrene (’Epatoo6evTi< 6 Kuprivaio<)), 224. Эрдеш, Пал (Erdos, Рй.1 (= Paul)), 427, 444, 455, 466, 572, 591, 593, 595, 616, 621, 794. Эрдеш, Петер Л. (Erd6s, Peter L.), 845. Эрикссон, Киммо (Eriksson, Kimmo), 690. Эрикссон, Хенрик (Eriksson, Henrik), 690. Эрлих, Гидеон (Ehrlich, Gideon (T^N РУП)), 338, 388, 402, 416, 463, 473, 474, 784, 810, 853. Эррера, Альфред (Errera, Alfred), 864. Эттингсхаузен, Андреас фон (Ettingshausen, Andreas von), 570. Этцион, Туви (Etzion, Tuvi (р’ЗУ ’НТО, born Т2ЙЛЛ »□!»)), 354. Этьен, Гвен (Etienne, Gwihen), 843. Эшер, Джорджио Арнальдо (Escher, Giorgio Arnaldo (= George Arnold)), 204. Эшер, Мауриц Корнелис (Escher, Maurits Cornelis), 204. Юен, Чанг Квонг (Yuen, Chung Kwong (ЙЖЛ)), 759. Яблонский, Сергей Всеволодович, 624. Яджима, Шузо (Yajima, Shuzo (^ftffi^)), 700, 721, 753. Ядро, 83, 113, 273, 294, 305, 430, 441, 608, 611. Язык программирования, 83. Язык, регулярный, 231. Якоби, Карл Густав Якоб (Jacobi, Carl Gustav Jacob), 451, 465. Якубович, Юрий Владимирович, 458, 484. Ян Сюн (Yang Hsiung ((§1Й or Шй)), 548. Ян, Катарина Хуафей (Yan, Catherine Huafei (ШЭД), 850. Яниш, Карл Фридрих Андреевич, де (Jaenisch, Carl Friedrich Andreevitch de (Янишъ Карлъ Андреевичъ)), 748. Яннакакис, Михалис (Yannakakis, Mihalis (riavvaxaxTK, МцухХтк)), 674. Яно, Тамаки (Yano, Tamaki (3^fpfS)), 565, 566. Янсон, Карл Сванте (Janson, Carl Svante), 69, 597. Японская математика, 553, 565, 756. Ятс, Фрэнк (Yates, Frank),- 337.
ИСКУССТВО ПРОГРАММИ- РОВАНИЯ ТОМ 1. ОСНОВНЫЕ АЛГОРИТМЫ, З-Е ИЗДАНИЕ ТОМ 2. ПОЛУЧИСЛЕННЫЕ МЕТОДЫ, З-Е ИЗДАНИЕ томз. СОРТИРОВКА И поиск, 2-Е ИЗДАНИЕ Дональд Э. Кнут в продаже www.williamspublishing.com На мировом рынке компьютерной литературы существует множество книг, предназначенных для обуче- ния основным алгоритмам и ис- пользуемых при программирова- нии. Их довольно много, и они в значительной степени конкури- руют между собой. Однако среди них есть особая книга. Это трехтомник “Искусство программирования” J\. Э. Кнута, который стоит вне всякой конку- ренции, входит в золотой фонд мировой литературы по инфор- матике и является настольной книгой практически для всех, кто связан с программированием. Ценность книги в том, что она предназначена не столько для обучения технике программиро- вания, сколько для обучения, если это возможно, “искусству” программирования, предлагает массу рецептов усовершенствова- ния программ и, что самое главное, учит самостоятельно находить эти рецепты.
АЛГОРИТМЫ ПОСТРОЕНИЕ И АНАЛИЗ ВТОРОЕ ИЗДАНИЕ Томас Кормен Чарльз Лейзерсон Рональд Ривест Клиффорд Штайн АЛГОРИТМЫ ПОСТРОЕНИЕ И АНАЛИЗ www.williamspublishing.com Фундаментальный труд известных специалистов в области кибернетики достоин занять место на полке любого человека, чья деятельность так или иначе связана с информатикой и алгоритмами. Для профессионала эта книга может служить настольным справочником, для преподавателя — пособием для подготовки к лекциям и источником интересных нетривиальных задач, для студентов и аспирантов — отличным учебником. Описание алгоритмов на естественном языке дополняется псевдокодом, который позволяет любому имеющему хотя бы начальные знания и опыт программирования, реализовать алгоритм на используемом им языке программирования. Строгий математический анализ и обилие теорем сопровождаются большим количеством иллюстраций, элементарными рассуждениями и простыми приближенными оценками. Широта охвата материала и степень строгости его изложения дают основания считать эту книгу одной из лучших книг, посвященных разработке и анализу алгоритмов. ISBN 5-8459-0857-4 в продаже
АЛГОРИТМЫ НА C++ АНАЛИЗ, СТРУКТУРЫ ДАННЫХ, СОРТИРОВКА, ПОИСК, АЛГОРИТМЫ НА ГРАФАХ Роберт Седжвик л и Алгоритмы на C++ АНАЛИЗ СТРУКТУРЫ ДАННЫХ СОРТИРОВКА ПОИСК АЛГОРИТМЫ НА ГРАФАХ РОБЕРТ СЕДЖВИК www.williamspublishing.com Эта классическая книга удачно сочетает в себе теорию и практику, что делает ее популярной у программистов на протяжении многих лет. Кристофер Ван Вик и Роберт Седжвик разработали новые лаконичные реализации на C++, которые естественным и наглядным образом описывают методы и могут применяться в реальных приложениях. Каждая часть содержит новые алгоритмы и реализации, усовершенствованные описания и диаграммы, а также множество новых упражнений для лучшего усвоения материала. Акцент на АТД расширяет диапазон применения программ и лучше соотносится с современными средами объектно-ориентированного программирования. Книга предназначена для широкого круга разработчиков и студентов. ISBN 978-5-8459-1650-1 в продаже
АЛГОРИТМЫ НА JAVA 4-Е ИЗДАНИЕ Роберт Седжвик, Кевин Уэйн Л б» iiihil'n' Алгор] на Java kJ - инн РОБЕРТ СЕДЖВИК h инн итмы I 1Г I КЕВИН УЭЙН www.williamspublishing.com Последнее издание из серии бестселлеров Седжвика, содержащее самый важный объем знаний, наработанных за последние несколько десятилетий. Содержит полное описание структур данных и алгоритмов для сортировки,поиска, обработки графов и строк, включая пятьдесят алгоритмов, которые должен знать каждый программист. В книге представлены новые реализации, написанные на языке Java в доступном стиле модульного программирования — весь код доступен пользователю и готов к применению. Алгоритмы изучаются в контексте важных научных, технических и коммерческих приложений. Клиентские программы и алгоритмы записаны в реальном коде, а не на псевдокоде, как во многих других книгах. Дается вывод точных оценок производительности на основе соответствующих математических моделей и эмпирических тестов, подтверждающих эти модели. ISBN 978-5-8459-1781-2 в продаже
КОНКРЕТНАЯ МАТЕМАТИКА 2-е издание Рональд Л. Грэхем, Дональд Э. Кнут, Орен Паташник КОНКРЕТНАЯ МАТЕМАТИКА МАТЕМАТИЧЕСКИЕ ОСНОВЫ ИНФОРМАТИКИ www.williamspublishing.com В основу данной книги положен одноименный курс лекций Станфордского университета. Название “конкретная математика” происходит от слов “КО Нтинуал ьная” и “дисКРЕТНАЯ” математика. Назначение данной книги — обеспечить читателя техникой оперирования с дискретными объектами, что совершенно необходимо для математиков, работающих в области информатики. Книга ориентиро- вана в первую очередь на практиков (хотя и теоретики найдут в ней много полезного), и изобилует массой конкретных примеров и упражнений. Конкретность изложения абстрактного материала — еще одно пояснение названия книги. Широта охвата столь различных тем в одной книге могла бы вызвать подозрения в некоторой легковесности, если бы не имена ее авторов — известных американских математиков. Тем не менее слово “легкий” к книге вполне применимо, так как стиль изложения достаточно далек от сухого академизма. Как признаются сами авторы, они считают математику развлечением, и они сделали все, чтобы читатели книги получили от ее прочтения не только знания, но и удовольствие. Книгу можно рекомендовать всем математикам, но в первую очередь она предназначена для студентов, обучающихся математике и информатике. ISBN 978-5-8459-1588-7 в продаже
ASCII СИМВОЛЫ *0 *1 *2 *3 *4 *5 *6 *7 *8 *9 *a *b *c *d *e *f *2х 1 tl # $ У. к > ( ) ♦ + » - / *2x *3х 0 1 2 3 4 5 6 7 8 9 < = > ? *3x *4х С А В с D Е F G Н I J к L M N 0 *4x *5х Р Q R S т и V W X Y z [ \ ] - - *5x *6х С а ъ с d е f Е h 1 j k 1 m n о *6x *7х р я г S t и V w X У z { 1 - *7x *0 *1 *2 *3 *4 *5 *6 *7 *8 *9 *a *b *c *d *e *f MMIX КОДЫ ОПЕРАЦИЙ (ОПКОДЫ) *0 *1 *2 *3 *4 *5 *6 *7 *0x TRAP 5v FCMPv FUN v FEQLv FADD 4v FIX 4v FSUB 4г> FIXU 4v *0x PLOT [I] 4v FLOTUCI] 4v SFLOTCI] 4v SFLOTUCI] 4v *lx FMUL 4v FCMPE 4v FUNEv FEQLE 4v FDIV 40v FSQRT 40ч FREM 4v FINT 4v *lx MULCT] 10v MULUCI] lOv DIV CI] 60v DIVUCl] 60v *2x ADD [I] v ADDUCT] v SUB CI] v SUBUCI] v *2x 2ADDUCI] v 4ADDUCI] v 8ADDUCI] v 16ADDUCI] v *3x CMP[I] v CMPUCI] v NEG CI] v NEGUCl] v *3x SLCI] v SLUCI] v SRCI] v SRUCI] v *4x BN[B] v+?r BZ [B] v+w BP[B] V4-TT BOD[BJ v+tt *4x BNNCB] v+k bnzcb] v+tt bnpCb] v+k BEVCB] v+k *5x PBN[B] Зк—it pbzCb] 3v-,r pbpCb] 3v-tt PBOD[B] 3t7—7Г *5x PBNNCB] 3v-„ PBNZCB] 3v-k PBNPCB] 3v-n PBEVCB] 3v-,r *6x CSNCI] v csz ci] v cspCI] v CSODCI] v *6x CSNNCI] v csnzCi] v CSNPCI] V CSEVCI] v *7x ZSNCl] V ZSZCI] v zspCi] v ZSODCI] v *7x ZSNNCI] v ZSNZCI] v ZSNPCI] V ZSEVCI] v *8x LDB[I] p+v LDBUCI] f+v LDWCI] m+v LDWUCI] f+v *8x LDTCl] p+v LDTU CI] f+v LDOCl] f+v LDOUCI] f+v *9x LDSFCI] k+v LDHTCl] p+v CSWAPCI] 2K+2V LDUNCCI] k+v *9x LDVTSCI] v PRELDCI] v PREGOCI] v GO Cl] 3v *Ax STB[I] p+v STBU[I] p+v STWCI] f+v STWUCI] f+v *Ax STT[I] m+v STTUCI] f+v STOCI] f+v STOUCI] f+v *Bx STSFCI] k+v STHTCI] F+v STCOCI] f+v STUNCCI] m+v *Bx SYNCDCH v PREST CI] v SYNCIDCI] v PUSHGOCl] 3v *Cx 0R[I] v CRN Cl] v NORCI] v XORCI] v *Cx AND [I] v ANDNCI] v NANDCI] v NXORCI] v *Dx BDIFCI] v WDIFCI] v TDIFCI] v ODIFCI] v *Dx MUX[I] v SADDCI] v MORCI] v MXORCl] V *Ex SETHv SETMH v SETMLv SETLv INCH v INCMH v INCML v INCL v *Ex ORHv ORMHv ORMLv ORLv ANDNHv ANDNMHv ANDNMLv ANDNL v *Fx JMP[B] v PUSHJCB] v GETACB] v PUT CI] v *Fx POP 3v RESUME Sv CUN] SAVE 20m+v SYNCv SWYMv GETv TRIP Sv *8 *9 *A *B *C *D *E *F тг = 2v, если условный переход выполняется; тг = 0, если условный переход не выполняется.
Информатика/Программирование Искусство программирования ДОНАЛЬД э. кнут Дональд Э. Кнут - автор всемирно известной серии книг, посвященной основным алгоритмам и методам вычислительной математики, а также создатель настольных издательских систем ТЕХ и METAFONT, предназначенных для верстки физико- математической литературы. Его перу принадлежат 26 книг и более 160 статей. Дональд Кнут является почетным профессором Стэнфордского университета в области программирования и вычислительной математики. В настоящее время он полностью занят написанием новых книг серии Искусство программирования. Работу над первым томом он начап еще в 1962 году, сразу после окончания Калифорнийского технологического института (California Institute of Technology). Профессор Кнут удостоен многочисленных премий и наград, среди которых можно отметить ACM Turing Award, Medal of Science президента Картера и ASM Steele Prize за серию научно-популярных статей. В ноябре 1996 года Дональд Кнут был удостоен престижной награды Kyoto Prize в области передовых технологий. Он проживает в городке Стэнфордского университета со своей женой Джилл. Если вы хотите узнать больше об этом замечательном ученом и писателе, посетите веб-сайт Addison-Wesley informic.com/knuth. Дополнительная информация об этой книге и будущих томах серии имеется на персональной странице Кнута по адресу www-cs-faculty.stanford.edu/-knuth. Этот многотомный труд широко известен как полное изложение информатики. В течение десятилетий первые три тома служили бесценным источником информации по теории и практике программирования для студентов, теоретиков и практиков. Ученые восхищались красотой и изяществом анализа Кнута, в то время как практикующие программисты успешно применяли его "поваренную книгу" для решения ежедневных задач. Уровень первых трех томов столь высок, и в них проявлено столь широкое и глубокое знакомство с искусством программирования, что вполне достаточным обзором будущих томов будет краткое "Вышел том п Искусства программирования Кнута". - Data Processing Digest Вышел том п Искусства программирования Кнута, где п = 4, А. В этом долгожданном новом томе старый мастер уделяет внимание как ряду своих издавна любимых тем - широкословным вычислениям и комбинаторной генерации (исчерпывающему перечислению фундаментальных комбинаторных объектов, таких как перестановок, разбиений или деревьев), так и более поздним увлечениям, таким как бинарные диаграммы решений. Признаки качества, отличающие его прежние тома, проявились и в новом томе: детальное описание основ, иллюстрация хорошо подобранными примерами, иногда экскурсы в более ззотеричные темы и задачи на острие ведущихся исследований; безупречный стиль изложения, приправленный долей юмора; обширные наборы упражнений - все с решениями или полезными указаниями; должное внимание историческим вопросам; реализация множества алгоритмов в его классическом пошаговом стиле. На каждой странице книги имеется удивительное количество информации. Очевидно, Кнут долго и тщательно размышлял о том, какие результаты являются наиболее центральными и важными, и о том, как наиболее интуитивно понятно и кратко изложить этот материал. Поскольку области, охваченные этим томом, увеличились с момента первых черновых заметок о них просто взрывным образом, это просто удивительно - как он сумел втиснуть столь тщательное рассмотрение в такой небольшой объем. - Фрэнк Раски (Frank Ruskey), факультет информатики университета Виктории (Department of Computer Science, University of Victoria) Эта книга представляет собой том 4, А, поскольку сам том 4 является многотомником. Комбинаторный поиск - богатая и важная тема, и Кнут приводит слишком много нового, интересного и полезного материала, чтобы его можно было разместить в одном или двух (а может быть, даже в трех) томах. Одна эта книга включает около 1500 упражнений с ответами для самостоятельной работы, а также сотни полезных фактов, которые вы не найдете ни в каких других публикациях. Том 4, А определенно должен занять свое место на полке рядом с первыми тремя томами этой классической работы в библиотеке каждого серьезного программиста. ТОМ 1. ОСНОВНЫЕ АЛГОРИТМЫ. Третье издание, ISBN 978-5-8459-0080-7 Первый том серии книг Искусство программирования начинается с описания основных понятий и методов программирования. Затем автор переходит к рассмотрению информационных структур - представлению информации внутри компьютера, структурных связей между элементами данных и способам эффективной работы с ними. Для методов имитации, символьных вычислений, числовых методов, методов разработки программного обеспечения даны примеры элементарных приложений. ТОМ 2. ПОЛУЧИСЛЕННЫЕ АЛГОРИТМЫ Третье издание, ISBN 978-5-8459-0081-4 Во втором томе представлено полное введение в теорию получисленных алгоритмов, причем случайный числам и арифметике посвящены отдельные главы. В книге даны основы теории получисленных алгоритмов, а также их основные примеры. Тем самый установлено прочное связующее звено между компьютерным программированием и численным анализом. ТОМ 3. СОРТИРОВКА И ПОИСК Второе издание, ISBN 978-5-8459-0082-1 Во втором издании третьего тома содержится исчерпывающий обзор классических алгоритмов сортировки и поиска. Представленная в нем информация дополняет приведенное в первом томе обсуждение структур данных. Автор рассматривает принципы построения больших и малых баз данных, а также внутренней и внешней памяти. ТОМ 4, А. КОМБИНАТОРНЫЕ АЛГОРИТМЫ, часть 1 ISBN 978-5-8459-1744-7 В этом томе рассматриваются методы, позволяющие компьютерам эффективно работать с задачами гигантского размера. Рассматриваемый материал начинается с булевых функций и технологий и трюков работы с битами, затем всесторонне рассматривается генерация всех кортежей и перестановок, всех сочетаний и разбиений, и всех деревьев. Addison-Wesley Addison Wesley Corporate & Professional is an imprint of Addison Wesley Longman, Inc. www.aw.com/cseng/authors/knuth Издательский дом "Вильямс" www.williamspublishing.com ISBN 978-S-8459-1744-7