Главная » Просмотр файлов » Д. Кнут - Искусство программирования том 2 (3-е издание) - 2001 (Часть 1)

Д. Кнут - Искусство программирования том 2 (3-е издание) - 2001 (Часть 1) (1119452), страница 91

Файл №1119452 Д. Кнут - Искусство программирования том 2 (3-е издание) - 2001 (Часть 1) (Д. Кнут - Искусство программирования том 2 (3-е издание) - 2001 (Часть 1)) 91 страницаД. Кнут - Искусство программирования том 2 (3-е издание) - 2001 (Часть 1) (1119452) страница 912019-05-09СтудИзба
Просмтор этого файла доступен только зарегистрированным пользователям. Но у нас супер быстрая регистрация: достаточно только электронной почты!

Текст из файла (страница 91)

с) Пусть известно, что сх ш 1 (по модулю 9). Найдите простую формулу для числа с', являющегося функцией с и х, но яе в, которая (формула) имеет вид с'х ш 1 (по модул«о р ). ь 14. [МЗО[ (Мерзкое рммаз«савве.) По определению циклическая свертка (ха, хн..., х -«) и (ра,щ,,.,,р«, ~) есть (за,х«,..., з««)«гле А. Цифровые методы. Ответ на поставленный вопрос звучит довольно неожиданно — "Нет". И в самом деле, нетрудно понять, почему. Для удобства будем далее полагать, что мы оперируем числами, выраженными в двоичной системе счисления. Два 2и-битовых числа и = (из„» ...и1 ио)о и е = (е»„»...

е»ео)э можно записать в виде и = 2" С1 + Уо, е = 2" ~'» + 1о где С» = (иэ„»... и„)т — "наиболее значимая половина" числа и и Уо= (иь» ио)э— "наименее значимая половина" числа и. Аналогично $"» = (еэ„-» ...е„)э и Ро (е -»...ео)э. Тогда "= (2 " + 2")У11'1 + 2" (у1 — Уо)(ц — р~) + (2" + 1)уо$0. (2) Эта формула сводит задачу умножения 2и-битовых чисел к трем операциям умножения и-битовых чисел У11ы (У» — Уо)(го — $») и Уо1о и выполнению некоторых простых операций сдвига и сложения.

Формула (2) пригодна и для умножения чисел с удвоенной точностью, когда требуется получить результат с учетверенной точностью. На многих компьютерах это реализуется немного быстрее, чем умножение традиционными методами. Но главное преимущество формулы (2) заключается в том, что ее можно использовать для определения рекурсивного процесса умножения, который значительно быстрее при больших и уже знакомого метода, имеющего время выполнения порядка пз. Если Т(п) — время, затрачиваемое на выполнение умножения и-битовых чисел, то для некоторой константы с имеем Т(2п) < ЗТ(п) + с~, (3) так как в правой части формулы (2) требуется выполнить только три операции умножения плюс некоторые операции сдвига и сложения. Из соотношения (3) по индукции следует, что Т(2 ) < с(3» — 2"), я > 1, (4) если выбрать константу с достаточно большой, чтобы данное неравенство выполня- лось при А = 1; поэтому имеем Т(п) < Т(2роп1) < с(Зрощ 29$п)) < Зс'Зфэо Зспээ (5) Из соотношения (5) вцаио, что время порядка пт, затрачиваемое на выполнение операции умножения, можно сократить до величины порядка и'о в и'оэ», так что рекурсивный метод при больших п обеспечивает гораздо более высокую скорость, чем традиционный.

В упр. 18 рассмотрено применение этого метода. (Похожий, но немного более сложный метод умножения со временем выполнения порядка и'аз был впервые предложен А. Карапубой в ДАН СССР 146 (1962), 293-294. Любопытно, что зта идея, по-видимому, до 1962 года не была известна; нет сведений о том, чтобы кто-нибудь из "вундеркиндов-счетчиков", прославившихся своими способностями умножать в уме большие числа, применял когда-либо подобный метод, хотя аналог формулы (2) для десятичной системы счисления, казалось бы, дает довольно легкий способ умножения в уме восьмизначных чисел.) В пределе при и, стремящемся к бесконечности, время выполнения можно сократить еще больше, если учесть, что рассмотренный только что метод является частным случаем г = 1 более общего метода, который для произвольного фиксированного г дает Т((г+ цп) < (2г+ цТ(п) + оп.

(6) Этот более общий метод можно получить следующим образом. Разобьем (е(а+Ив-1 .. гчее)2 и = (в(„+И„1... и1 во)з на г + 1 частей и = У„2""+. +012" +СЪ, е =)г„2""+" + $'~2" + Це, (7) где каждое Уу и каждое ру является и-битовым числом. Рассмотрим полиномы (~(х) = (~„х + ° ° ° +(~1х+(~о, )г(х) = Р~ + ° + Р'я+Р~ И(х) =У(х)г(х) = И „х + +И1х+Ие. (О) Так как н = Ц2") и е = И(2"), получаем иь = Иг(2"), поэтому при известных коэффициентах И"ь в И'(х) можно легко вычислить ие.

Задачи заключается в поиске хорошего способа вычисления этих коэффициентов в И'(х), требующем только 2г+ 1 умножений и-битовых чисел и несколько последующих операций, время выполнения которых пропорционально п. Это может быть достигнуто посредством вычисления Теорема А. Для любого с ) О существуют такая постоянная с(с) и такой алгоритм умноження, что число элементарных операций Т(п), которые необхсдпмо выпол- нить, чтобы перемножить два и-битовых числа, удовлетворяет оценке Т(п) < с(с)п1+', З (1Ц Данная теорема — это еще не тот результат, который нам нужен.

Для практических целей он неудовлетворителен, так как метод резко усложняется, когда с -+ О (т. е. г -+ оо). Это приводит к столь быстрому росту с(с), что приходится иметь дело с очень большими значениями и прежде, чем будут внесены какие- либо существенные улучшения в ссютношение (5). Теорема неудовлетворительна и с и(О)З (О) = И'(О), и(Цт (Ц = И'(Ц, ..., (У(2 ))г(2 ) = И (2 ), (1О) Коэффициенты полинома степени 2г могут быть выражены в виде линейной комбинации значений этого полинома в 2г+ 1 различных точках. Время, необходимое для выполнения этой операции, пропорционально п или меньше. (В действительности произведения У(у)У(~) не являются в строгом смысле произведениями и-битовых чисел, но являются произведениями (и+ 1)-битовых чисел, где г есть фиксированное значение, зависящее от г. Программа умножения (о+Ф)-битовых чисел строится легко.

Для ее выполнения требуется лишь Т(п) + с1п операций, где Т(п) — количество операций, необходимых для умножения и разрядов, так как при фиксированном с два произведения г- и и-битовых чисел можно получить за стп операций.) Таким образом, получаем метод умножения, для которого выполняется неравенство (6). Рассуждая так же, как при выводе неравенства (5), и учитывая неравенство (6), приходим к неравенству Т(п) < сап"з э Он+И < сзп'+"'е"+ з. Итак, доказана следующая теорем».

теоретической точки зрения, так как в ней не в полной мере используется лежащий в ее основе полиномиальный метод. Если предположить, что г варьирреп«сл вместе с и, то, выбирая по мере увеличения и все ббльшие и ббльшие значения г, можно получить лучший результат. Эта идея предложена А. Л. Тоомом (ДАН СССР 150 (1963), 496-498).

Тоом использовал ее для доказательства того факта, что при возрастающем и можно построить автомат для умножения и-разрядных чисел, состоящий из довольно малого числа компонентов. Позднее С. А. Кук (Б. А. Соо1«) в работе Оп «Ье М«п«шиш Сотри«а««оп Типе оГ Гипс««опэ (ТЬ«в«э, Наггагд 1)п«тегэ1«у, 1966), 51-77, показал, как применить идею Таама для ускорения работы компьютерных программ. Прежде чем продолжить обсуждение алгоритма Тсюма-Кука, рассмотрим простой пример перехода от Н(х) и %г(х) к коэффициентам функции Иг(х).

На этом примере нельзя ощутить эффективность метода, поскольку используемые в нем числа слишком малы. Но пример демонстрирует полезные упрощения, которые можно применять и в общем случае, Предположим, что нужно умножить и ы 1234 на и = 2341 или в двоичной системе счисления число и = (0100 1101 0010)э на число и = (1001 0010 0101)з. (12) Пусть г = 2.

Полиномы У(х) и И(х) в (8) имеют вид У(х) = 4хз + 13х + 2, И(х) = Ох~ + 2х + 5. Отсюда находим для Иг(х) = ЕУ(х)У(х): У(1) = 19, У(2) = 44, У(3) = 77, У(4) = 118; И(1) = 16, И(2) = 45, И(3) = 92, 1'(4) = 157; И'(1) = 304, И'(2) = 1980, И'(3) = 7084, Иг(4) = 18526. (13) У(0) = 2, 1 (О) = 5, И'(0) = 10„ И'(х) = а,-«х= + а„,-гхоз+ ° ° + а«х1 + ао (14) где хй = х(х — 1)... (х-9+1), а коэффициенты а, неизвестны.

Полиномы вида (14) обладают важным свойством: И (я+ 1) — Иг(х) = (и« вЂ” 1)а «х=~+ (и« -2)а эх=~+ ° -+а«', отсюда по индукции получаем, что для всех 1«> 0 — ~Иг(х+)г) — ~ )И'(х+А — 1)+ ~ )Иг(х+А-2) -" + (-Ц И'(х) 1 / М~ гЙ'1 Ф Н~ Ы Ы )а,х ' ~+( )а эх~ — ' — + - +( )аь. Теперь нужно найти пять коэффициентов полинома И'(х),используя пять последних величин.

Чтобы найти коэффициенты полинома И'(х) = И' «х ' + ° + И'«т + И"о при заданных значениях И'(О), И'(1), ..., И (т — 1), можно воспользоват ся одним интересным алгоритмом. Сначала запишем Обозиачив левую часть (15) через (1/Щ йь Рг'(х), замечаем, что — Ь И'(х) = — ( —;6 И"(х + 1) — — Ь' И'(х) 1/ 1 й) й (,(5-1). (й — 1)) и (1г'»!) 0ь И"(О) = оы Таким образом, коэффициенты а можно вычислить при помощи очень простого метода, который иллюстрируется здесь на примере полинома И'(х), определепного соотношениями (13).

10 304 1382/2 = 691 294 1980 3428/2 = 1714 144/4 = 36 (16) 7084 5104 6338/2 = 3 69 1455/3 = 485 11442 Крайняя слева колонка этой таблицы состоит из заданных значений И~(0), И'(Ц,... ..., И (4). Чтобы вычислить элементы в й-й колонке, иужно найти разность между соседними элементами предыдущей колонки и разделить эти разности на й.

Коэффициенты а — это верхние числа в колоннах, так что ае = 10„а~ = 294,..., аэ = 36: отсюда имеем И'(х) 36хз+ 341хз + 691хй+ 294т1 + 10 = (((36(х — 3) + 341) (х — 2) + 691) (х — 1) + 294) х + 10. (17) В общем случае можно записать И(х)=(...((а э(х — го+2)+а э)(х — ~и+3)+а»-з)(х — то+4)+- ° +а~)х+ое. Данная формула показывает, каким образом с помощью коэффициентов а„, можно вычислить коэффициенты И;» и.",И~ И"о.

Характеристики

Список файлов книги

Свежие статьи
Популярно сейчас
Как Вы думаете, сколько людей до Вас делали точно такое же задание? 99% студентов выполняют точно такие же задания, как и их предшественники год назад. Найдите нужный учебный материал на СтудИзбе!
Ответы на популярные вопросы
Да! Наши авторы собирают и выкладывают те работы, которые сдаются в Вашем учебном заведении ежегодно и уже проверены преподавателями.
Да! У нас любой человек может выложить любую учебную работу и зарабатывать на её продажах! Но каждый учебный материал публикуется только после тщательной проверки администрацией.
Вернём деньги! А если быть более точными, то автору даётся немного времени на исправление, а если не исправит или выйдет время, то вернём деньги в полном объёме!
Да! На равне с готовыми студенческими работами у нас продаются услуги. Цены на услуги видны сразу, то есть Вам нужно только указать параметры и сразу можно оплачивать.
Отзывы студентов
Ставлю 10/10
Все нравится, очень удобный сайт, помогает в учебе. Кроме этого, можно заработать самому, выставляя готовые учебные материалы на продажу здесь. Рейтинги и отзывы на преподавателей очень помогают сориентироваться в начале нового семестра. Спасибо за такую функцию. Ставлю максимальную оценку.
Лучшая платформа для успешной сдачи сессии
Познакомился со СтудИзбой благодаря своему другу, очень нравится интерфейс, количество доступных файлов, цена, в общем, все прекрасно. Даже сам продаю какие-то свои работы.
Студизба ван лав ❤
Очень офигенный сайт для студентов. Много полезных учебных материалов. Пользуюсь студизбой с октября 2021 года. Серьёзных нареканий нет. Хотелось бы, что бы ввели подписочную модель и сделали материалы дешевле 300 рублей в рамках подписки бесплатными.
Отличный сайт
Лично меня всё устраивает - и покупка, и продажа; и цены, и возможность предпросмотра куска файла, и обилие бесплатных файлов (в подборках по авторам, читай, ВУЗам и факультетам). Есть определённые баги, но всё решаемо, да и администраторы реагируют в течение суток.
Маленький отзыв о большом помощнике!
Студизба спасает в те моменты, когда сроки горят, а работ накопилось достаточно. Довольно удобный сайт с простой навигацией и огромным количеством материалов.
Студ. Изба как крупнейший сборник работ для студентов
Тут дофига бывает всего полезного. Печально, что бывают предметы по которым даже одного бесплатного решения нет, но это скорее вопрос к студентам. В остальном всё здорово.
Спасательный островок
Если уже не успеваешь разобраться или застрял на каком-то задание поможет тебе быстро и недорого решить твою проблему.
Всё и так отлично
Всё очень удобно. Особенно круто, что есть система бонусов и можно выводить остатки денег. Очень много качественных бесплатных файлов.
Отзыв о системе "Студизба"
Отличная платформа для распространения работ, востребованных студентами. Хорошо налаженная и качественная работа сайта, огромная база заданий и аудитория.
Отличный помощник
Отличный сайт с кучей полезных файлов, позволяющий найти много методичек / учебников / отзывов о вузах и преподователях.
Отлично помогает студентам в любой момент для решения трудных и незамедлительных задач
Хотелось бы больше конкретной информации о преподавателях. А так в принципе хороший сайт, всегда им пользуюсь и ни разу не было желания прекратить. Хороший сайт для помощи студентам, удобный и приятный интерфейс. Из недостатков можно выделить только отсутствия небольшого количества файлов.
Спасибо за шикарный сайт
Великолепный сайт на котором студент за не большие деньги может найти помощь с дз, проектами курсовыми, лабораторными, а также узнать отзывы на преподавателей и бесплатно скачать пособия.
Популярные преподаватели
Добавляйте материалы
и зарабатывайте!
Продажи идут автоматически
6381
Авторов
на СтудИзбе
308
Средний доход
с одного платного файла
Обучение Подробнее