КАТЕГОРИИ: Архитектура-(3434)Астрономия-(809)Биология-(7483)Биотехнологии-(1457)Военное дело-(14632)Высокие технологии-(1363)География-(913)Геология-(1438)Государство-(451)Демография-(1065)Дом-(47672)Журналистика и СМИ-(912)Изобретательство-(14524)Иностранные языки-(4268)Информатика-(17799)Искусство-(1338)История-(13644)Компьютеры-(11121)Косметика-(55)Кулинария-(373)Культура-(8427)Лингвистика-(374)Литература-(1642)Маркетинг-(23702)Математика-(16968)Машиностроение-(1700)Медицина-(12668)Менеджмент-(24684)Механика-(15423)Науковедение-(506)Образование-(11852)Охрана труда-(3308)Педагогика-(5571)Полиграфия-(1312)Политика-(7869)Право-(5454)Приборостроение-(1369)Программирование-(2801)Производство-(97182)Промышленность-(8706)Психология-(18388)Религия-(3217)Связь-(10668)Сельское хозяйство-(299)Социология-(6455)Спорт-(42831)Строительство-(4793)Торговля-(5050)Транспорт-(2929)Туризм-(1568)Физика-(3942)Философия-(17015)Финансы-(26596)Химия-(22929)Экология-(12095)Экономика-(9961)Электроника-(8441)Электротехника-(4623)Энергетика-(12629)Юриспруденция-(1492)Ядерная техника-(1748) |
Основные алгоритмы сортировки и поиска
Задачи Hi Hi И.
г32 h2
Рис. 25. Построение графа GF для вершин, б) проведение ребер. F = xi v *2) л (х2) Л (jq v х2): а) выбор Доказано также, что задача распознавания гамильтоновости графа является NP-полной1. Упомянем еще одну очень известную NP-пол-ную задачу, называемую задачей о рюкзаке. Задано конечное множество U, размер s(u) gN+ и стоимость v (u) gN+ каждого u e U, а также a, b е N+. Существует ли такое подмножество U' с U, что X! s (") ^ а, 2 v (u)^ b? u e U ' u e!7'? Из теоремы Кука следует, что для решения проблемы Р = NP достаточно со всей тщательностью рассмотреть какой-нибудь один NP-пол-ный предикат, например, тот же предикат Sat, и ответить на вопрос о его принадлежности классу Р. Если он принадлежит классу Р, то Р = NP в силу NP-полноты рассматриваемого предиката, если не принадлежит, то Р ф NP, так как найден предикат, принадлежащий NP и не принадлежащий Р. Но этот заманчивый план до сих пор реализовать не удалось, усилия многих исследователей не привели к решению этой проблемы, хотя и устоялось мнение, что, скорее всего, РФ NP. Это предположение влечет за собой рекомендацию: если доказано, что решаемая практическая задача (при надлежащей формализации в виде предиката на словах в алфавите) является NP-полной, то было бы опрометчивостью рассчитывать на нахождение в короткие сроки полиномиального алгоритма ее решения, и лучше попробовать решить эту задачу приближенно. Многие задачи фактического построения некоторого математического объекта вписываются в следующую схему: дано х; если существует у такое, что х вместе с у удовлетворяют фиксированному условию R{x,y), то найти такое у. Соответствующая задача рас- Огромное число примеров NP-полных задач собрано в [13]. Глава 7. Сводимость познавания выглядит так: дано х; требуется определить, существует ли у такое, что х вместе с у удовлетворяют фиксированному условию R{x,у). Мы полагаем, что х и у — это коды некоторых математических объектов, т. е. слова в некотором алфавите Л. Пусть задача распознавания связана указанным образом с задачей построения, пусть R{x, у)еР и полином р таков, что если существует какое-то решение задачи построения, то существует и такое решение у, что |у|^р(|х|). Тогда задача распознавания принадлежит NP в соответствии с определением 30.1, причем в качестве сертификата для х выступает это решение у. В примерах из § 30 по рассмотренным задачам распознавания легко восстанавливаются соответствующие им задачи построения (построить набор логических значений переменных; построить делитель данного числа; построить клику в графе, имеющую определенное количество вершин, и т.д.). Для доказательства принадлежности классу NP задачи распознавания мы брали в качестве сертификата само решение соответствующей вычислительной задачи. Такой выбор сертификатов в ряде доказательств, видимо, и служит причиной довольно распространенного представления, что класс Р образуют вычислительные задачи, решаемые за полиномиально ограниченное время, а класс NP—вычислительные задачи, для каждой из которых за полиномиально ограниченное время можно проверить, является ли данное слово у ее решением. На самом деле, конечно, в классы Р и NP входят только задачи распознавания, но упомянутое представление, будучи, строго говоря, неправильным, в известной мере согласуется с реальным положением вещей. Быстрый алгоритм распознавания наличия какого-то математического объекта, кодируемого словом из Л*, может в некоторых случаях позволить быстро решать и задачу фактического построения этого объекта. Проиллюстрируем это примером. Пример 32.3. Мы знаем, что задача распознавания простоты натурального числа п принадлежит классу Р, — алгоритм Агравала, Кай-ала и Саксены (пример 22.2) имеет битовую сложность 0{т1г), где т — битовая длина п. Вопрос о существовании полиномиального алгоритма факторизации (разложения на простые множители) остается без ответа до сих пор при том, что алгоритмы факторизации имеют огромную важность, например, для криптографии. Вернемся в связи с этим вопросом к принадлежащей NP задаче, рассмотренной в примере 30.2: для заданных п, k е N+, к < п, выяснить, имеется ли у числа п делитель I такой, что 1 < I s= к. Полиномиальный алгоритм реше- Задачи ния этой задачи тоже неизвестен, но можно показать, что открытие такого алгоритма—назовем его A — автоматически дало бы полиномиальный алгоритм факторизации (кстати сказать, существование A автоматически следовало бы из равенства Р = NP, если бы оно вдруг было доказано). Для этого можно воспользоваться бинарным поиском. Пусть уже установлено, что n не имеет делителей, меньших n1, где n1 < n, и пусть n2 таково, что n1 < n2 < n, и мы интересуемся наименьшим принадлежащим отрезку [nг, n2] простым множителем чис- Г n 1+ n 21 ла n. Тогда, применяя Aкn, n 3, где n 3 = — —^ —£, мы сузим диапазон поиска примерно вдвое: в зависимости от результата применения A мы перейдем от отрезка [nъ n2] либо к отрезку [nъ n 3], либо к отрезку [ n 3 + 1, n2]. Первоначально же полагаем nг = 2,n2 = n. Применив алгоритм A не более m = [log2(n + 1)1 раз, мы найдем наименьший простой множитель t числа n. Повторяем те же вычисления для n' = t (32.2) и т.д. Общее число простых множителей числа n с учетом их кратности ограничено сверху величиной log2 n, и, значит, величиной m. Битовые затраты каждого деления (32.2) не превосходят Cm2, где C — некоторая константа. Если битовая сложность алгоритма A есть O{md), то сложность описанного алгоритма факторизации будет допускать оценку O{md+2), т.е. этот алгоритм будет полиномиальным. 145. Задача умножения квадратных булевых матриц линейно сводится к задаче построения транзитивно-рефлексивного замыкания (предполагается, что для сложностей рассматриваемых алгоритмов построения транзитивно-рефлексивного замыкания выполнено T (З n) = O (T (n))). Указание. Пусть Mг и M 2—две булевы матрицы порядка n. Пусть X — булева матрица порядка З n: 0 0 M 2. \0 0 0 / Чему равны X2,X3? Воспользоваться формулой (23.1) для транзитивно-рефлексивного замыкания. Глава 7. Сводимость 146. Здесь речь идет о линейной сводимости P^Q задач, связан Требуется показать, что задача умножения произвольных квадратных матриц линейно сводится к задаче а) умножения симметричных квадратных матриц; б) умножения верхних треугольных матриц; в) обращения невырожденных матриц. Указание. Так же, как в предыдущей задаче, здесь можно прибегнуть к матрицам размера, большего п, используя исходные матрицы как блоки для построения новых матриц. В пункте в) полезно предварительно установить вид матрицы fln М 1 0 V1 0 1п М2, V0 0 1п) где M1,M2 — исходные матрицы, 1п — единичная матрица порядка п. 147. а) Доказать свойство (R2) рациональных функций, сформули Указание. Достаточно доказать, что если полином р(х 1, х2,...,хп) тождественно равен нулю на некотором непустом открытом множестве U аШп, то этот полином нулевой. При п = 1 утверждение очевидно. Пусть п > 1 и точка v = (v 1, v 2,..., vn)eIR n такова, что р(у 1, v 2,..., v) ф 0. Пусть ueU. Множество U — открытое, поэтому у точки и существует окрестность некоторого радиуса г > 0, целиком принадлежащая U. Пусть I — расстояние от и до v, а с1,с2,...,сп —координаты вектора единичной длины, направленного из и в v. Если t пробегает множество Ж, то формулы x1 = u1+c1t, x2 = u2+c2t,..., xn=un+cnt (32.3) задают прямую в Шп, причем при t = 0 получается точка и, а при t = l — точка v. Остается рассмотреть для полинома p (t) одной переменной t, получающегося подстановкой (32.3) в р(х1,х2,...,хп), его значения в точке t = l и на интервале -г <t<r. б) Для каких целых n ^ 1 справедливо утверждение, что если произвольный полином с вещественными коэффициентами от х 1, х2,...,хп обращается в нуль на бесконечном подмножестве множества Ж", то этот полином является нулевым? 148. Функция /(n) = |"log2 n!l является нижней границей сложно Задачи попарно различных рациональных чисел c помощью сравнений и четырех арифметических операций (в предложении 29.1 речь шла о сортировке вещественных чисел). 149. Функция /(n) = [log2(n + 1)1 является нижней границей слож 15 0. Пусть известен алгоритм, который по данным с,т, с > 1, т е N+, строит т значащих двоичных цифр числа - (построить с т значащих цифр некоторого числа х, 0 < х < 1, — это в данном контексте означает отыскать первую ненулевую цифру после запятой в двоичной записи этого числа, а затем отбросить все цифры после т цифр, отсчитанных от найденной), и пусть сложность этого алгоритма есть 0(f(m)), где /(т)—некоторая функция такая, что дополнительно известен алгоритм умножения произвольных a, b е N+, сложность которого тоже есть 0(,f(m)), где m = max{A(a), А(Ь)}. На основе этих двух алгоритмов сконструировать алгоритм построения частного и остатка от деления положительных целых а и Ъ, имеющий сложность 0(f(m)), m = max{A(a), А(Ь)}. Указание. Нужно построить q и г такие, что a = qb + r, 0 sj г < Ъ, или a-=q + s, 0^5 < 1. Возникновение погрешности при вычислении - может привести к тому, что найденное q будет отличаться на 1 от точного значения; несколько добавочных проб помогут найти точные q и г, не изменяя оценки 0(f(m)) для сложности. 15 1. Пусть о 0 и jo удовлетворяет неравенствам у ^ у0 ^ -; пусть yi = 2yi-1-ciyfL - 1 , i = l,2,... Тогда последовательность Уп, y -i, ••• сходится к -. 152. (Продолжение предыдущей задачи.) Пусть c eN+. Справедли 9~ ^ Уо ^ ~~ и последовательность УсъУъУг» ••• получена по рекуррентной формуле Vi, yi=2yi-1-ciyf1, i = l,2,..., (32.4) См. [5, разд. 8.2]. Глава 7. Сводимость где • целое с; таково, что А(сг) = А(с), и если А(с) > 2*, то первые 2г цифр числа С; совпадают с соответствующими цифрами числа с, а последующие цифры суть нули, если же А(с) ^ 21, то q = с; • jo получается из у0 отбрасыванием всех цифр после первой значащей цифры; • после вычисления значения у, i > 0, по рекуррентной формуле (32.4) в нем отбрасываются все цифры, идущие после первых 21 значащих цифр,—это дает значение у. Тогда первые Т - 3 значащие цифры числа у{ совпадают с соответствующими цифрами числа - при i > 1. Считая этот факт установ-ленным и используя решение задачи 150, доказать, что задача деления одного целого числа на другое с остатком линейно сводится к задаче умножения двух целых чисел. (Размером входа считается m = max{A(a), А(Ь)}, где а и Ъ — исходные числа, при этом считаем, что m есть число вида 2к; всюду подразумеваются битовые затраты; если это нужно, можно считать, что сложность /(т) умножения удовлетворяет условиям /(m) sS/(2 m) s= 4/(т)). Указание. Соответствующий алгоритм построения частного и остатка уже описан в этой задаче и задаче 150. Достаточно доказать, что алгоритм приближенного обращения с, описанный в этой задаче, имеет сложность R(2k) такую, что R(2k) Ц yf(2k) для некоторой константы у. Подобрать у так, чтобы доказательство проводилось индукцией, и индуктивный переход был основан на неравенстве R(2k)^R(2k-1) + 2f(2k-1) + 52k-\ где константа 5 определяется, в частности, тем, какой алгоритм сложения чисел используется. 153. Верно ли, что для доказательства того, что Р = NP, достаточно показать, что хотя бы одна задача из NP принадлежит Р? 154. Существуют ли в NP задачи, не являющиеся NP-полными? 155. Если бы оказалось, что полиномиального алгоритма распознавания простоты натурального числа не существует (забудем об алгоритме Агравала, Кайала и Саксены), то из этого бы следовало, что Р ф NP. 156. Дизъюнктивная нормальная форма (ДНФ) определяется как C 1V C 2V...V Cm J q = (ZaAZ;2A...AZ;fc.), i = l,2,..., m, при этом каждое Ц является литералом. Задача выполнимости ДНФ принадлежит Р. Задачи 157. Найти ошибку или пробел в следующем доказательстве того, что Sate Р. Очевидно, что любую КНФ можно преобразовать в эквивалентную ДНФ (см. задачу 156), поэтому задача выполнимости КНФ сводится к задаче выполнимости ДНФ, а эта задача принадлежит Р. 158. Для выполнимой булевой формулы назовем соответствующий набор значений переменных выполняющим. Если Р = NP, то существует полиномиальный алгоритм, который строит выполняющий набор для данной булевой формулы, если эта формула выполнима, и пустое слово, если формула невыполнима. Приложение A А1. Сортировка Для простоты считаем, что требуется упорядочить по возрастанию числовой массив х1, х2,..., хп с попарно различными элементами. Размер входа — число п. Мы называем сегментом массива х 1 ,х2,...,хп любую его часть х, xi+1,..., хк- 1, xk, 1^i^k^n, которая по условию или по построению является упорядоченной. 1. Пузырьковая сортировка. Последовательным просмотром всех что Xi>Xi+1. 2. Сортировка выбором. Выполняется п - 1 шаг. На i -м шаге (i = = 1, 2,..., п - 1) среди элементов х1, х1+1,..., хп отыскивается наименьший и переставляется с xt. 3. Сортировка простыми вставками (два варианта). Пусть после нескольких шагов сортировки элементы х 1, х2,...,Х; уже упорядочены (образуют сегмент): х 1 <х2 <... <xt. Тогда на следующем шаге элемент x t вставляется в этот сегмент таким образом, что элементы х 1, х2,...,xi+1 оказываются упорядоченными (сегмент расширяется). В конечном счете получаем сегмент х 1 ,х2,...,хп. В первом варианте сортировки место вставки определяется последовательными сравнениями xi+1 с X;, х(-1,..., во втором — последовательными сравнениями xi +1 с х1,х2,... Основные алгоритмы сортировки и поиска 4. Сортировка бинарными вставками. Отличается от сортировки простыми вставками тем, что место xt в сегменте x1,x2,...,xi_1 определяется алгоритмом бинарного поиска (см. A2, п. 4). 5. Сортировка слияниями. Разнообразные виды этой сортировки используют слияние сегментов. Сначала мы рассмотрим процедуру слияния, а затем опишем два варианта сортировки, основанной на этой процедуре. Слияние. Пусть для элементов массива е1,е2,...,ет выполнено е1 <е2<... <ек и ек+1 <ек+2<...<ет, к^ГП. Массив /1, /2, ...,fm, который является результатом слияния массивов е 1, е2,..., ек и ек+1, ек+2,......,ет, можно получить за т шагов. После i -го шага элементы f1,f2,...,fi уже имеют нужные значения, целые р и q (p + q = i) показывают, сколько элементов из числа е1,е2,...,ек и ек+1,ек+2,...,ет уже использовано. Рекурсивный вариант сортировки слияниями. При п = 1 массив упорядочен. Пусть п > 1, тогда массив х 1, х2,...,хп разбивается на два примерно равных по длине подмассива х 1, х2,..., x L n/ 2j и x\_n/2\+1,x\n/2\+2,...,хп. Сортировка применяется рекурсивно к этим подмассивам, после чего выполняется слияние. Сортировка фон Неймана. Первоначально элементы массива х 1, х2,...,хп рассматриваются как упорядоченные одноэлементные сегменты. Затем в массиве У 1 ,у2,..., уп образуются упорядоченные сегменты длины 2, получающиеся слиянием х 1 и х2, х3 и х4, х5 и х6,... Последний сегмент будет иметь один или два элемента в зависимости от четности п. Полученные сегменты сливаются в упорядоченные сегменты длины 4 (кроме последнего, который тоже упорядочен, но, возможно, имеет длину 1, 2 или 3), они последовательно попадают в массив х 1, х2,...,хп. Процесс укрупнения сегментов продолжается дальше. В некий момент массив х 1, х2,..., хп или у 1, у2,..., уп содержит только один упорядоченный сегмент. 6. Быстрая сортировка. Эта сортировка основывается на проце Разбиение. Берется первый элемент массива и сравнивается со всеми остальными. Меньшие его элементы помещаются в начальную часть массива, большие — в конечную. Сам первоначально взятый элемент помещается между этими двумя частями, это—то место, которое ему надлежит занимать в упорядоченном массиве. Дополнительный массив для этой процедуры не требуется, достаточно двух переменных р и q, показывающих, сколько элементов в начальной Приложение A и конечной частях уже занято. Элемент, взятый первым, расположен на (р + 1)-м месте и сравнивается со следующим за ним. Равенство р + q = п - 1 означает, что разбиение завершено. Сортировка. Выполняется разбиение; в результате элемент, ранее располагавшийся в массиве первым, занимает нужное место (с некоторым номером к, 1 ^ к ^ п). Затем быстрая сортировка применяется рекурсивно к сегментам хг,х2,...,хк-г и хк+ъ хк+2..., хп. А2. Поиск Числовой массив хъх2,...,хп имеет попарно различные элементы. В п. 4 элементы предполагаются упорядоченными по возрастанию. 1. Поиск наименьшего. Просматриваются последовательно х2, х3,...,хпи каждый новый элемент xt сравнивается с уже найденным наименьшим среди хъ х2,..., х{-х. 2. Поиск m -го наименьшего. Элементы хъх2,...,хп переставляются в соответствии с процедурой разбиения (см. алгоритм быстрой сортировки). Пусть элемент, бывший в исходном массиве первым, после выполнения процедуры стал fc-м, 1 ^ к ^ п. Если т = к, то задача решена. Если т<к, то разыскивается т-e наименьшее среди хг, х2,...,хк-г; если т > к, то разыскивается (m - fc)-е наименьшее среди хк+ъхк+2,...,хп. 3. Одновременный поиск наименьшего и наибольшего. Элементы хг,х2,...,хп просматриваются последовательными парами: хг,х2, затем х3,х4 и т.д. (последний элемент может остаться без пары). При рассмотрении fc-й пары х2к-ъх2к в ней выбираются наименьший и наибольший элементы, которые сравниваются с уже найденными наименьшим и, соответственно, наибольшим среди хг,х2, ■■■,х2к-2. Если п нечетно, то на последнем шаге хп сравнивается с уже найденными наименьшим и наибольшим среди хъх2,... 4. Бинарный поиск места элемента. Кроме упорядоченного массива хг < х2 <... < хп дано число у, для которого априори может осуществляться любая из возможностей у^хг, хг<у ^х2,..., хп-1<у^хп, хп<у. Этим возможностям присваиваются номера 1,2,...,п + 1. Требуется найти номер фактически осуществившейся возможности. Первоначальный диапазон поиска — от 1 до п + 1. Каждый шаг би- Основные алгоритмы сортировки и поиска нарного поиска сужает диапазон примерно вдвое: если перед очередным шагом диапазон был от p до q, то y сравнивается с xr, r =L(p + q) / 2J. При xr<y диапазон дальнейшего поиска —от r + 1 до q (в дальнейшем рассматривается сегмент xr+1,xr+2,...,xq_1), в противном случае — от p до r (в дальнейшем рассматривается сегмент xp,xp+1,...,xr). И так далее до совпадения границ диапазона. Приложение B
Дата добавления: 2014-01-11; Просмотров: 501; Нарушение авторских прав?; Мы поможем в написании вашей работы! Нам важно ваше мнение! Был ли полезен опубликованный материал? Да | Нет |