\input style \chapno=6\subchno=2\chapnotrue \subchap{цИФРОВОЙ ПОИСК} % 6.3 вМЕСТО ТОГО ЧТОБЫ ОСНОВЫВАТЬ МЕТОД ПОИСКА НА СРАВНЕНИИ КЛЮЧЕЙ, МОЖНО ВОСПОЛЬЗОВАТЬСЯ ИХ ПРЕДСТАВЛЕНИЕМ В ВИДЕ ПОСЛЕДОВАТЕЛЬНОСТИ ЦИФР ИЛИ БУКВ. рАССМОТРИМ, НАПРИМЕР, ИМЕЮЩИЕСЯ ВО МНОГИХ СЛОВАРЯХ "ПОБУКВЕННЫЕ ВЫСЕЧКИ"; ПО ПЕРВОЙ БУКВЕ ДАННОГО СЛОВА МЫ МОЖЕМ НЕМЕДЛЕННО НАЩУПАТЬ СТРАНИЦЫ, СОДЕРЖАЩИЕ ВСЕ СЛОВА, НАЧИНАЮЩИЕСЯ С ЭТОЙ БУКВЫ. еСЛИ РАЗВИТЬ ИДЕЮ "ПОБУКВЕННЫХ ВЫСЕЧЕК", МЫ ПРИДЕМ К СХЕМЕ ПОИСКА, ОСНОВАННОЙ НА "ИНДЕКСИРОВАНИИ", КАК ПОКАЗАНО В ТАБЛ.~1. пРЕДПОЛОЖИМ, ТРЕБУЕТСЯ ПРОВЕРИТЬ, ПРИНАДЛЕЖИТ ЛИ ДАННЫЙ АРГУМЕНТ ПОИСКА К 31~НАИБОЛЕЕ УПОТРЕБИТЕЛЬНОМУ АНГЛИЙСКОМУ СЛОВУ (СР.~С~РИС.~12 И~13, П.~6.2.2). в ТАБЛ.~1 ДАННЫЕ ПРЕДСТАВЛЕНЫ В ВИДЕ ТАК НАЗЫВАЕМОЙ СТРУКТУРЫ "БОРА"; ТЕРМИН ВВЕДЕН э.~фРЭДКИНОМ [{\sl CACM,\/} {\bf 3} (1960), 490--500] КАК ЧАСТЬ СЛОВА ВЫ{\it БОР}КА\note{1}% {в ОРИГИНАЛЕ СООТВЕТСТВЕННО trie (ИСКАЖЕННОЕ "tree") И re{\it trie}val---{\sl пРИМ. ПЕРЕВ.\/}} (ИНФОРМАЦИИ). бОР В СУЩНОСТИ ЯВЛЯЕТСЯ $M\hbox{-АРНЫМ}$ ДЕРЕВОМ, УЗЛЫ КОТОРОГО СУТЬ $M\hbox{-МЕСТНЫЕ}$ ВЕКТОРЫ С КОМПОНЕНТАМИ, СООТВЕТСТВУЮЩИМИ ЦИФРАМ ИЛИ БУКВАМ. кАЖДЫЙ УЗЕЛ УРОВНЯ~$l$ ПРЕДСТАВЛЯЕТ МНОЖЕСТВО ВСЕХ КЛЮЧЕЙ, НАЧИНАЮЩИХСЯ С ОПРЕДЕЛЕННОЙ ПОСЛЕДОВАТЕЛЬНОСТИ ИЗ $l$~ЛИТЕР; УЗЕЛ ОПРЕДЕЛЯЕТ $M\hbox{-ПУТЕВОЕ}$ РАЗВЕТВЛЕНИЕ В ЗАВИСИМОСТИ ОТ $(l+1)\hbox{-Й}$ ЛИТЕРЫ. нАПРИМЕР, БОР ТАБЛ.~1 ИМЕЕТ 12~УЗЛОВ; УЗЕЛ~1---КОРЕНЬ, И ПЕРВУЮ БУКВУ СЛЕДУЕТ ИСКАТЬ ЗДЕСЬ. еСЛИ ПЕРВОЙ ОКАЗАЛАСЬ, СКАЖЕМ, БУКВА~|N|, ИЗ ТАБЛИЦЫ ВИДНО, ЧТО НАШИМ СЛОВОМ БУДЕТ |NOT| (ИЛИ ЖЕ, ЧТО ЕГО НЕТ В ТАБЛИЦЕ). с ДРУГОЙ СТОРОНЫ, ЕСЛИ ПЕРВАЯ БУКВА---|W|, УЗЕЛ~(1) НАПРАВИТ НАС К УЗЛУ~(9), ГДЕ МЫ ДОЛЖНЫ АНАЛОГИЧНЫМ ОБРАЗОМ ОТЫСКАТЬ ВТОРУЮ БУКВУ; УЗЕЛ~(9) УКАЖЕТ, ЧТО ЭТОЙ БУКВОЙ ДОЛЖНА БЫТЬ~|A|, |H| ИЛИ~|I|. уЗЛЫ-ВЕКТОРЫ В ТАБЛ.~1 ОРГАНИЗОВАНЫ В СООТВЕТСТВИИ С КОДОМ ЛИТЕР, ПРИНЯТЫМ ДЛЯ \MIX. эТО ОЗНАЧАЕТ, ЧТО ПОИСК ПО БОРУ БУДЕТ ДОВОЛЬНО БЫСТРЫМ, ТАК КАК МЫ ДОЛЖНЫ ПРОСТО ВЫБИРАТЬ СЛОВА ИЗ МАССИВА, ИСПОЛЬЗУЯ В КАЧЕСТВЕ ИНДЕКСОВ ЛИТЕРЫ НАШЕГО КЛЮЧА. мЕТОДЫ БЫСТРОГО МНОГОПУТЕВОГО РАЗВЕТВЛЕНИЯ С ПОМОЩЬЮ ИНДЕКСИРОВАНИЯ НАЗЫВАЮТСЯ "ПРОСМОТРОМ ТАБЛИЦ" ("Table Look-At") В ПРОТИВОПОЛОЖНОСТЬ "ПОИСКУ ПО ТАБЛИЦАМ" ("Table Look-Up") [СМ.~P.~M.~Sherman, {\sl CACM,\/} {\bf 4} (1961), 172--173, 175]. \alg т.(пОИСК ПО БОРУ.) аЛГОРИТМ ПОЗВОЛЯЕТ НАЙТИ ДАННЫЙ АРГУМЕНТ~$K$ В ТАБЛИЦЕ ЗАПИСЕЙ, ОБРАЗУЮЩИХ $M\hbox{-АРНЫЙ}$ БОР. %%573 { \catcode`\!=\active\def!#1.{\boxit{\hbox{\strut\bskip\tt\hbox to 2.5em{#1\hfill}\bskip}}} \def\putpar#1{(#1)} \def\@#1{\strut\hfill$(#1)$} \catcode`\(=\active\def(#1){\boxit{\hbox{\bskip\tt\hbox to 2.5em{\strut$\putpar{#1}$\hfill}\bskip}}} \offinterlineskip\tabskip=0pt\htable{тАБЛИЦА 1}% {"бОР" ДЛЯ 31 НАИБОЛЕЕ УПОТРЕБИТЕЛЬНОГО АНГЛИЙСКОГО СЛОВА}% {\vbox{\hbox{\strut\tt #}\hbox{}}&&#\hfill\cr &\@{1} & \@{2}& \@{3}& \@{4}& \@{5}& \@{6}& \@{7}& \@{8}& \@{9}& \@{10}&\@{11}&\@{12}\cr \] & !---.& !A.& !---.& !---.& !---.& !I.& !---.& !---.& !---.& !---.& !HE.& !---.\cr A & (2)& !---.& !---.& !---.& (10)& !---.& !---.& !---.& !WAS.& !---.& !---.&!THAT.\cr B & (3)& !---.& !---.& !---.& !---.& !---.& !---.& !---.& !---.& !---.& !---.& !---.\cr C & !---.& !---.& !---.& !---.& !---.& !---.& !---.& !---.& !---.& !---.& !---.& !---.\cr D & !---.& !---.& !---.& !---.& !---.& !---.& !---.& !---.& !---.& !HAD.& !---.& !---.\cr E & !---.& !---.& !BE.& !---.& (11)& !---.& !---.& !---.& !---.& !---.& !---.& !THE.\cr F & (4)& !---.& !---.& !---.& !---.& !---.& !OF.& !---.& !---.& !---.& !---.& !---.\cr G & !---.& !---.& !---.& !---.& !---.& !---.& !---.& !---.& !---.& !---.& !---.& !---.\cr H & (5)& !---.& !---.& !---.& !---.& !---.& !---.& (12)&!WHICH.& !---.& !---.& !---.\cr I & (6)& !---.& !---.& !---.& !HIS.& !---.& !---.& !---.& !WITH.& !---.& !---.&!THIS.\cr $\Theta$ & !---.& !---.& !---.& !---.& !---.& !---.& !---.& !---.& !---.& !---.& !---.& !---.\cr J & !---.& !---.& !---.& !---.& !---.& !---.& !---.& !---.& !---.& !---.& !---.& !---.\cr K & !---.& !---.& !---.& !---.& !---.& !---.& !---.& !---.& !---.& !---.& !---.& !---.\cr L & !---.& !---.& !---.& !---.& !---.& !---.& !---.& !---.& !---.& !---.& !---.& !---.\cr M & !---.& !---.& !---.& !---.& !---.& !---.& !---.& !---.& !---.& !---.& !---.& !---.\cr N & !NOT.& !AND.& !---.& !---.& !---.& !IN.& !ON.& !---.& !---.& !---.& !---.& !---.\cr O & (7)& !---.& !---.& !FOR.& !---.& !---.& !---.& !TO.& !---.& !---.& !---.& !---.\cr P & !---.& !---.& !---.& !---.& !---.& !---.& !---.& !---.& !---.& !---.& !---.& !---.\cr Q & !---.& !---.& !---.& !---.& !---.& !---.& !---.& !---.& !---.& !---.& !---.& !---.\cr R & !---.& !ARE.& !---.&!FROM.& !---.& !---.& !OR.& !---.& !---.& !---.& !HER.& !---.\cr $\Phi$ & !---.& !---.& !---.& !---.& !---.& !---.& !---.& !---.& !---.& !---.& !---.& !---.\cr $\Pi$ & !---.& !---.& !---.& !---.& !---.& !---.& !---.& !---.& !---.& !---.& !---.& !---.\cr S & !---.& !AS.& !---.& !---.& !---.& !IS.& !---.& !---.& !---.& !---.& !---.& !---.\cr T & (8)& !AT.& !---.& !---.& !---.& !IT.& !---.& !---.& !---.& !---.& !---.& !---.\cr U & !---.& !---.& !BUT.& !---.& !---.& !---.& !---.& !---.& !---.& !---.& !---.& !---.\cr V & !---.& !---.& !---.& !---.& !---.& !---.& !---.& !---.& !---.& !HAVE.& !---.& !---.\cr W & (9)& !---.& !---.& !---.& !---.& !---.& !---.& !---.& !---.& !---.& !---.& !---.\cr X & !---.& !---.& !---.& !---.& !---.& !---.& !---.& !---.& !---.& !---.& !---.& !---.\cr Y & !YOU.& !---.& !BY.& !---.& !---.& !---.& !---.& !---.& !---.& !---.& !---.& !---.\cr Z & !---.& !---.& !---.& !---.& !---.& !---.& !---.& !---.& !---.& !---.& !---.& !---.\cr } } уЗЛЫ БОРА ПРЕДСТАВЛЯЮТ СОБОЙ ВЕКТОРЫ, ИНДЕКСЫ КОТОРЫХ ИЗМЕНЯЮТСЯ ОТ~$0$ ДО~$M-1$; КАЖДАЯ КОМПОНЕНТА ЭТИХ ВЕКТОРОВ ЕСТЬ ЛИБО КЛЮЧ, ЛИБО ССЫЛКА (ВОЗМОЖНО, ПУСТАЯ). \st[нАЧАЛЬНАЯ УСТАНОВКА.) уСТАНОВИТЬ УКАЗАТЕЛЬ~|P| ТАК, ЧТОБЫ ОН УКАЗЫВАЛ НА КОРЕНЬ БОРА. \st[рАЗВЕТВЛЕНИЕ.] зАНЕСТИ В~$k$ СЛЕДУЮЩУЮ (СТОЯЩУЮ ПРАВЕЕ) ЛИТЕРУ АРГУМЕНТА~$K$. (еСЛИ АРГУМЕНТ ПОЛНОСТЬЮ ОБРАБОТАН, МЫ ЗАСЫЛАЕМ В~$k$ "ПРОБЕЛ" ИЛИ СИМВОЛ КОНЦА СЛОВА. лИТЕРА ДОЛЖНА БЫТЬ ПРЕДСТАВЛЕНА ЦЕЛЫМ ЧИСЛОМ В ДИАПАЗОНЕ~$0\le k<M$.) чЕРЕЗ~$X$ ОБОЗНАЧИМ $k\hbox{-Й}$~ЭЛЕМЕНТ В УЗЛЕ~$|NODE|(|P|)$. %%574 еСЛИ $X$---ССЫЛКА, ПЕРЕЙТИ НА \stp{3}; ЕСЛИ $X$---КЛЮЧ, ТО ПЕРЕЙТИ НА~\stp{4}. \st[пРОДВИЖЕНИЕ.] еСЛИ $X\ne\NULL$, УСТАНОВИТЬ $P\asg X$ И ВЕРНУТЬСЯ НА~\stp{2}; В ПРОТИВНОМ СЛУЧАЕ АЛГОРИТМ ЗАКАНЧИВАЕТСЯ НЕУДАЧНО. \st[сРАВНЕНИЕ.] еСЛИ $K=X$, АЛГОРИТМ ЗАКАНЧИВАЕТСЯ УДАЧНО; В ПРОТИВНОМ СЛУЧАЕ ОН ЗАКАНЧИВАЕТСЯ НЕУДАЧНО. \algend зАМЕТИМ, ЧТО, ЕСЛИ ПОИСК НЕУДАЧЕН, ВСЕ ЖЕ БУДЕТ НАЙДЕН ЭЛЕМЕНТ, ЛУЧШЕ \emph{ВСЕГО СОВПАДАЮЩИЙ} С АРГУМЕНТОМ ПОИСКА. эТО СВОЙСТВО ПОЛЕЗНО ДЛЯ НЕКОТОРЫХ ПРИЛОЖЕНИЙ. чТОБЫ СРАВНИТЬ ВРЕМЯ РАБОТЫ АЛГОРИТМА И ДРУГИХ АЛГОРИТМОВ ДАННОЙ ГЛАВЫ, МОЖНО НАПИСАТЬ КОРОТКУЮ ПРОГРАММУ ДЛЯ \MIX, ПРЕДПОЛАГАЯ, ЧТО ЛИТЕРА ЗАНИМАЕТ ОДИН БАЙТ, А КЛЮЧИ--- НЕ БОЛЕЕ ПЯТИ БАЙТОВ. \prog т.(пОИСК ПО БОРУ.) пРЕДПОЛАГАЕТСЯ, ЧТО ВСЕ КЛЮЧИ ЗАНИМАЮТ ОДНО СЛОВО МАШИНЫ~\MIX; ЕСЛИ КЛЮЧ СОСТОИТ МЕНЕЕ ЧЕМ ИЗ ПЯТИ ЛИТЕР, ОН ДОПОЛНЯЕТСЯ СПРАВА ПРОБЕЛАМИ. тАК КАК МЫ ИСПОЛЬЗУЕМ ДЛЯ ПРЕДСТАВЛЕНИЯ ЛИТЕР КОД~\MIX, КАЖДЫЙ БАЙТ АРГУМЕНТА ПОИСКА ДОЛЖЕН СОДЕРЖАТЬ ЧИСЛО, МЕНЬШЕЕ~30. сСЫЛКИ ПРЕДСТАВЛЕНЫ КАК ОТРИЦАТЕЛЬНЫЕ ЧИСЛА В ПОЛЕ~$0:2$. зНАЧЕНИЯ РЕГИСТРОВ: $|rI1|\equiv|P|$, $|rX|\equiv\hbox{НЕОБРАБОТАННАЯ ЧАСТЬ $K$}$. \code START &LDX &к &1& T1. нАЧАЛЬНАЯ УСТАНОВКА. &ENT1 &ROOT &1& $|P|\asg\hbox{УКАЗАТЕЛЬ НА КОРЕНЬ БОРА}$. 2H &SLAX &1 &C& T2. рАЗВЕТВЛЕНИЕ. &STA &*+1(2:2)&C& вЫДЕЛЕНИЕ СЛЕДУЮЩЕЙ ЛИТЕРЫ~$k$. &ENT2 &0,1 &C& $|Q|\asg|P|+k$. &LD1N &0,2(0:2)&C& $|P|\asg|LINK|(|Q|)$. &J1P &2B &C& Tз. пРОДВИЖЕНИЕ. нА T2, ЕСЛИ |P|---ССЫЛКА $\ne\NULL$. &LDA &0,2 &1& т4. сРАВНЕНИЕ. $|rA|\asg|KEY|(|Q|)$. &CMPA &K &1 &JE &SUCCESS &1& уДАЧНЫЙ ВЫХОД, ЕСЛИ $|rA|=k$. FAILURE&EQU &* &1& вЫХОД, ЕСЛИ $K$ НЕТ В БОРУ. \endcode вРЕМЯ РАБОТЫ ПРОГРАММЫ РАВНО $(8C+8)u$, ГДЕ $C$---ЧИСЛО ПРОВЕРЯЕМЫХ ЛИТЕР. тАК КАК $C\le5$, ПОИСК НЕ ЗАЙМЕТ БОЛЕЕ 48~ЕДИНИЦ ВРЕМЕНИ. еСЛИ ТЕПЕРЬ СРАВНИТЬ ЭФФЕКТИВНОСТЬ ЭТОЙ ПРОГРАММЫ (ИСПОЛЬЗУЮЩЕЙ БОР ТАБЛ.~1) И ПРОГРАММЫ~6.2.2т (ИСПОЛЬЗУЮЩЕЙ \emph{ОПТИМАЛЬНОЕ} БИНАРНОЕ ДЕРЕВО ПОИСКА (РИС.~13)), МОЖНО ЗАМЕТИТЬ СЛЕДУЮЩЕЕ: 1.~бОР ЗАНИМАЕТ ГОРАЗДО БОЛЬШЕ ПАМЯТИ: ДЛЯ ПРЕДСТАВЛЕНИЯ 31~КЛЮЧА ИСПОЛЬЗОВАНО 360~СЛОВ, В ТО ВРЕМЯ КАК БИНАРНОЕ ДЕРЕВО ПОИСКА ЗАНИМАЕТ 62~СЛОВА ПАМЯТИ. (оДНАКО УПР.~4 ПОКАЗЫВАЕТ, ЧТО, ПРОЯВИВ ИЗВЕСТНУЮ ИЗОБРЕТАТЕЛЬНОСТЬ, МОЖНО ВМЕСТИТЬ БОР ТАБЛ.~1 В 49 СЛОВ.) %%575 \picture{рИС. 31. бОР ТАБЛ. 1, ПРЕОБРАЗОВАННЫЙ В "ЛЕС".} %%576 2.~уДАЧНЫЙ ПОИСК В ОБОИХ СЛУЧАЯХ ТРЕБУЕТ ОКОЛО 26~ЕДИНИЦ ВРЕМЕНИ. нО НЕУДАЧНЫЙ ПОИСК ОКАЗЫВАЕТСЯ БОЛЕЕ БЫСТРЫМ ДЛЯ БОРА И БОЛЕЕ МЕДЛЕННЫМ ДЛЯ БИНАРНОГО ДЕРЕВА ПОИСКА. дЛЯ НАШИХ ДАННЫХ ПОИСК ЧАЩЕ БУДЕТ НЕУДАЧНЫМ, НЕЖЕЛИ УДАЧНЫМ, ПОЭТОМУ С ТОЧКИ ЗРЕНИЯ СКОРОСТИ БОР БОЛЕЕ ПРЕДПОЧТИТЕЛЕН. 3.~еСЛИ ВМЕСТО 31~НАИБОЛЕЕ УПОТРЕБИТЕЛЬНОГО АНГЛИЙСКОГО СЛОВА РАССМОТРИМ ПРИМЕНЕНИЕ УКАЗАТЕЛЯ~KWIC (РИС.~15), БОР ТЕРЯЕТ СВОИ ПРЕИМУЩЕСТВА ВСЛЕДСТВИЕ ХАРАКТЕРА ДАННЫХ. нАПРИМЕР, БОР ТРЕБУЕТ 12~ИТЕРАЦИЙ, ЧТОБЫ РАЗЛИЧИТЬ СЛОВА |COMPUTATION| И~|COMPUTATIONS|. (в ЭТОМ СЛУЧАЕ БЫЛО БЫ ЛУЧШЕ ТАК ПОСТРОИТЬ БОР, ЧТОБЫ СЛОВА ОБРАБАТЫВАЛИСЬ СПРАВА НАЛЕВО, А НЕ СЛЕВА НАПРАВО.) пЕРВАЯ ПУБЛИКАЦИЯ О БОРОВОЙ ПАМЯТИ ПРИНАДЛЕЖИТ рЕНЕ ДЕ~ЛА~бРИАНДЕ [Proc.~Western Joint Computer Conf., {\bf 15} (1959), 295--298]. оН УКАЗАЛ, ЧТО МОЖНО СЭКОНОМИТЬ ПАМЯТЬ (ЗА СЧЕТ УВЕЛИЧЕНИЯ ВРЕМЕНИ РАБОТЫ), ЕСЛИ ИСПОЛЬЗОВАТЬ СВЯЗАННЫЙ СПИСОК ДЛЯ КАЖДОГО УЗЛА-ВЕКТОРА, ТАК КАК БОЛЬШИНСТВО ЭЛЕМЕНТОВ ЭТОГО ВЕКТОРА ОБЫЧНО ПУСТО. нА САМОМ ДЕЛЕ ПРЕДЛОЖЕННАЯ ИДЕЯ ВЕДЕТ К ЗАМЕНЕ БОРА ТАБЛ.~1 НА ЛЕС ДЕРЕВЬЕВ, ИЗОБРАЖЕННЫЙ НА РИС.~31. пРИ ПОИСКЕ В ТАКОМ ЛЕСУ МЫ НАХОДИМ КОРЕНЬ, СООТВЕТСТВУЮЩИЙ ПЕРВОЙ ЛИТЕРЕ, ЗАТЕМ СЫНА ЭТОГО КОРНЯ, СООТВЕТСТВУЮЩЕГО ВТОРОЙ ЛИТЕРЕ, И~Т.~Д. фАКТИЧЕСКИ В СВОЕЙ СТАТЬЕ ДЕ ЛА бРИАНДЕ НЕ ПРЕРЫВАЛ РАЗВЕТВЛЕНИЯ ТАК, КАК ПОКАЗАНО В ТАБЛ.~1 ИЛИ НА РИС.~31; ВМЕСТО ЭТОГО ОН ПРЕДСТАВЛЯЛ КАЖДЫЙ КЛЮЧ ЛИТЕРА ЗА ЛИТЕРОЙ ДО ДОСТИЖЕНИЯ ПРИЗНАКА КОНЦА СЛОВА. тАКИМ ОБРАЗОМ, В ДЕЙСТВИТЕЛЬНОСТИ ДЕ~ЛА~бРИАНДЕ ВМЕСТО ДЕРЕНА "|H|" (РИС.~31) ИСПОЛЬЗОВАЛ БЫ \picture{рИС. СТР. 576} тАКОЕ ПРЕДСТАВЛЕНИЕ ТРЕБУЕТ БОЛЬШЕ ПАМЯТИ, НО ДЕЛАЕТ ОБРАБОТКУ ДАННЫХ ПЕРЕМЕННОЙ ДЛИНЫ ОСОБЕННО ЛЕГКОЙ. еСЛИ ИСПОЛЬЗОВАТЬ НА ЛИТЕРУ ДВА ПОЛЯ ССЫЛОК, МОЖНО ЛЕГКО ОРГАНИЗОВАТЬ ДИНАМИЧЕСКИЕ ВСТАВКИ И УДАЛЕНИЯ. бОЛЕЕ ТОГО, ВО МНОГИХ ПРИЛОЖЕНИЯХ АРГУМЕНТ ПОИСКА ПОСТУПАЕТ В "РАСПАКОВАННОЙ" ФОРМЕ, Т.~Е.~КАЖДАЯ ЛИТЕРА ЗАНИМАЕТ ЦЕЛОЕ СЛОВО, И ТАКОЕ ДЕРЕВО ПОЗВОЛЯЕТ ИЗБЕЖАТЬ "УПАКОВКИ" ПЕРЕД ПРОВЕДЕНИЕМ ПОИСКА. %%577 %%577 еСЛИ ИСПОЛЬЗОВАТЬ ОБЫЧНЫЙ СПОСОБ ПРЕДСТАВЛЕНИЯ ДЕРЕВЬЕВ В БИНАРНОМ ВИДЕ, ТО (1) ПРЕОБРАЗУЕТСЯ В БИНАРНОЕ ДЕРЕВО (дЛЯ ПРЕДСТАВЛЕНИЯ ПОЛНОГО ЛЕСА РИС.~31 НЕОБХОДИМО ДОБАВИТЬ УКАЗАТЕЛЬ, ВЕДУЩИЙ ИЗ~|H| НАПРАВО, К СОСЕДНЕМУ КОРНЮ~|I|.) пРИ ПОИСКЕ В ЭТОМ БИНАРНОМ ДЕРЕВЕ ЛИТЕРЫ АРГУМЕНТА СРАВНИВАЮТСЯ С ЛИТЕРАМИ ДЕРЕВА; МЫ СЛЕДУЕМ ПО ССЫЛКАМ~|RLINK|, ПОКА НЕ НАЙДЕМ НУЖНУЮ ЛИТЕРУ; ЗАТЕМ БЕРЕМ ССЫЛКУ~|LLINK| И СЛЕДУЮЩУЮ ЛИТЕРУ АРГУМЕНТА РАССМАТРИВАЕМ АНАЛОГИЧНЫМ ОБРАЗОМ. пОИСК В ТАКОМ БИНАРНОМ ДЕРЕВЕ В БОЛЬШЕЙ ИЛИ МЕНЬШЕЙ СТЕПЕНИ СВОДИТСЯ К СРАВНЕНИЯМ, ПРИЧЕМ РАЗВЕТВЛЕНИЕ ПРОИСХОДИТ НЕ ПО ПРИЗНАКУ "МЕНЬШЕ-БОЛЬШЕ", А ПО "РАВНО-НЕРАВНО". эЛЕМЕНТАРНАЯ ТЕОРИЯ П.~6.2.1 ГЛАСИТ, ЧТО В СРЕДНЕМ НА ТО, ЧТОБЫ РАЗЛИЧИТЬ $N$~КЛЮЧЕЙ, НУЖНО ПО КРАЙНЕЙ МЕРЕ $\log_2 N$~СРАВНЕНИЙ; СРЕДНЕЕ ЧИСЛО СРАВНЕНИЙ, ПРОИЗВОДИМЫХ ПРИ ПОИСКЕ ПО ДЕРЕВУ, ПОДОБНОМУ ИЗОБРАЖЕННОМУ НА РИС.~31, НЕ МЕНЬШЕ ЧИСЛА ПРОВЕРОК ПРИ ИСПОЛЬЗОВАНИИ МЕТОДОВ БИНАРНОГО ПОИСКА, ИЗЛОЖЕННЫХ В \S~6.2. с ДРУГОЙ СТОРОНЫ, БОР ТАБЛ.~1 ПОЗВОЛЯЕТ СРАЗУ ПРОИЗВОДИТЬ $M\hbox{-ПУТЕВОЕ}$ РАЗВЕТВЛЕНИЕ; МЫ УВИДИМ, ЧТО ПРИ БОЛЬШИХ~$N$ ПОИСК В СРЕДНЕМ ВКЛЮЧАЕТ ЛИШЬ ОКОЛО $\log_M N=\log_2 N/\log_2 M$~ИТЕРАЦИЙ, ЕСЛИ ИСХОДНЫЕ ДАННЫЕ---СЛУЧАЙНЫЕ ЧИСЛА. мЫ УВИДИМ ТАКЖЕ, ЧТО ПРИМЕНЕНИЕ СХЕМЫ БОРА В "ЧИСТОМ" ВИДЕ (КАК В АЛГОРИТМЕ~T) ТРЕБУЕТ ПОРЯДКА $N/\ln M$~УЗЛОВ, ЕСЛИ НУЖНО РАЗЛИЧИТЬ $N$~СЛУЧАЙНЫХ КЛЮЧЕЙ; СЛЕДОВАТЕЛЬНО, РАЗМЕР ЗАНИМАЕМОЙ ПАМЯТИ ПРОПОРЦИОНАЛЕН $MN/\ln M$. эТИ РАССУЖДЕНИЯ ПОКАЗЫВАЮТ, ЧТО ИДЕЯ БОРА ХОРОША ЛИШЬ ДЛЯ НЕБОЛЬШОГО ЧИСЛА ВЕРХНИХ УРОВНЕЙ ДЕРЕВА. мОЖНО УЛУЧШИТЬ ХАРАКТЕРИСТИКИ, КОМБИНИРУЯ ДВЕ СТРАТЕГИИ: ДЛЯ НЕСКОЛЬКИХ ПЕРВЫХ ЛИТЕР ИСПОЛЬЗОВАТЬ БОР, А ЗАТЕМ ПЕРЕЙТИ НА ДРУГУЮ МЕТОДИКУ. нАПРИМЕР, э.~г.~сАССЕНГАТ, МЛ.\ [е.~н.~Sassenguth, {\sl CACM,\/} {\bf 6} (1963), 272--279] ПРЕДЛОЖИЛ ИСПОЛЬЗОВАТЬ ЛИТЕРНЫЙ АНАЛИЗ ДО ДОСТИЖЕНИЯ ТОЙ ЧАСТИ ДЕРЕВА, ГДЕ ОСТАЕТСЯ, СКАЖЕМ, НЕ БОЛЕЕ ШЕСТИ КЛЮЧЕЙ, А ЗАТЕМ ПРОИЗВЕСТИ В ЭТОМ КОРОТКОМ СПИСКЕ ПОСЛЕДОВАТЕЛЬНЫЙ ПОИСК. дАЛЕЕ МЫ УВИДИМ, ЧТО ТАКАЯ СМЕШАННАЯ СТРАТЕГИЯ УМЕНЬШАЕТ КОЛИЧЕСТВО УЗЛОВ БОРА ПРИМЕРНО В ШЕСТЬ РАЗ БЕЗ СУЩЕСТВЕННОГО ИЗМЕНЕНИЯ ВРЕМЕНИ РАБОТЫ. %%578 \section пРИЛОЖЕНИЕ К АНГЛИЙСКОМУ ЯЗЫКУ. нАПРАШИВАЕТСЯ МНОГО ИЗМЕНЕНИЙ ОСНОВНЫХ СТРАТЕГИЙ БОРА И ПОЛИТЕРНОГО ПОИСКА. чТОБЫ ПОЛУЧИТЬ ПРЕДСТАВЛЕНИЕ О НЕКОТОРЫХ ИЗ ИМЕЮЩИХСЯ ВОЗМОЖНОСТЕЙ, РАССМОТРИМ ГИПОТЕТИЧЕСКОЕ КРУПНОМАСШТАБНОЕ ПРИЛОЖЕНИЕ: ПРЕДПОЛОЖИМ, ЧТО В ПАМЯТИ эвм НУЖНО ЗАПОМНИТЬ ДОВОЛЬНО ПОЛНЫЙ СЛОВАРЬ АНГЛИЙСКОГО ЯЗЫКА. дЛЯ ЭТОГО ТРЕБУЕТСЯ ДОСТАТОЧНО БОЛЬШАЯ ВНУТРЕННЯЯ ПАМЯТЬ, СКАЖЕМ НА 50000~СЛОВ. нАША ЦЕЛЬ СОСТОИТ В НАХОЖДЕНИИ ЭКОНОМНОГО СПОСОБА ПРЕДСТАВЛЕНИЯ СЛОВАРЯ, ОБЕСПЕЧИВАЮЩЕГО ПРИ ЭТОМ ДОСТАТОЧНО БЫСТРЫЙ ПОИСК. рЕАЛИЗАЦИЯ ТАКОГО ПРОЕКТА---ЗАДАЧА НЕПРОСТАЯ. тРЕБУЕТСЯ КАК ХОРОШЕЕ ЗНАНИЕ СОДЕРЖАНИЯ СЛОВАРЯ, ТАК И ЗНАЧИТЕЛЬНАЯ ПРОГРАММИСТСКАЯ ИЗОБРЕТАТЕЛЬНОСТЬ. дАВАЙТЕ НА НЕКОТОРОЕ ВРЕМЯ ПОСТАВИМ СЕБЯ В ПОЛОЖЕНИЕ ЧЕЛОВЕКА, ПРИСТУПАЮЩЕГО К ТАКОМУ КРУПНОМУ ПРОЕКТУ. оБЫЧНЫЙ УНИВЕРСИТЕТСКИЙ СЛОВАРЬ СОДЕРЖИТ СВЫШЕ 100000~СЛОВ; НАШИ ЗАПРОСЫ НЕ СТОЛЬ ВЕЛИКИ, НО РАССМОТРЕНИЕ ПОДОБНОГО СЛОВАРЯ ПОЗВОЛЯЕТ НАМЕТИТЬ ПУТИ К РЕШЕНИЮ. еСЛИ МЫ ПОПЫТАЕМСЯ ПРИМЕНИТЬ БОРОВУЮ ПАМЯТЬ, ТО ВСКОРЕ ЗАМЕТИМ ВОЗМОЖНОСТЬ ВАЖНЫХ УПРОЩЕНИЙ. пРЕДПОЛОЖИМ, ЧТО СОБСТВЕННЫЕ ИМЕНА И СОКРАЩЕНИЯ В РАСЧЕТ НЕ ПРИНИМАЮТСЯ. тОГДА, ЕСЛИ СЛОВО НАЧИНАЕТСЯ НА БУКВУ~b, ЕГО ВТОРАЯ БУКВА ОБЯЗАТЕЛЬНО ОТЛИЧНА ОТ b, c, d, f, g, j, k, m, n, p, q, s, t, v, w, x, z. [сЛОВО "bdellium" ("БДЕЛЛИЙ"--- РОД АРОМАТИЧЕСКОЙ СМОЛЫ) МОЖНО И НЕ ВКЛЮЧАТЬ В СЛОВАРЬ!] нА САМОМ ДЕЛЕ, ТЕ ЖЕ 17~БУКВ НЕ МОГУТ СТОЯТЬ НА ВТОРОМ МЕСТЕ В СЛОВАХ, НАЧИНАЮЩИХСЯ С c, d, f, g, h, j, k, 1, m, n, p, r, t, v, w, x, z. иСКЛЮЧЕНИЕ СОСТАВЛЯЮТ НЕСКОЛЬКО СЛОВ, НАЧИНАЮЩИХСЯ С ct, cz, dw, fj, gn, mn, nt, pf, pn, pt, tc, tm, ts, tz, zw, И ЗАМЕТНОЕ КОЛИЧЕСТВО СЛОВ, НАЧИНАЮЩИХСЯ С kn, ps, tw. оДИН ИЗ СПОСОБОВ ИСПОЛЬЗОВАТЬ ЭТОТ ФАКТ СОСТОИТ В КОДИРОВАНИИ БУКВ (НАПРИМЕР, МОЖНО ИМЕТЬ ТАБЛИЦУ ИЗ 26~СЛОВ И ВЫПОЛНЯТЬ КОМАНДУ ВРОДЕ "|LD1 TABLE,1|") ТАКИМ ОБРАЗОМ, ЧТОБЫ СОГЛАСНЫЕ b, c, d,~\dots, z ПЕРЕВОДИЛИСЬ В СПЕЦИАЛЬНОЕ ПРЕДСТАВЛЕНИЕ, БОЛЬШЕЕ, ЧЕМ ЧИСЛОВОЙ КОД ОСТАВШИХСЯ БУКВ a, e, h, i, l, o, r, u, y. тЕПЕРЬ МНОГИЕ УЗЛЫ БОРА МОГУТ БЫТЬ УКОРОЧЕНЫ ДО 9-ПУТЕВОГО РАЗВЕТВЛЕНИЯ; СПЕЦИАЛЬНАЯ ЯЧЕЙКА ВЫХОДА ИСПОЛЬЗУЕТСЯ ДЛЯ РЕДКО ВСТРЕЧАЮЩИХСЯ БУКВ. тАКОЙ ПОДХОД ПОЗВОЛЯЕТ СЭКОНОМИТЬ ПАМЯТЬ ВО МНОГИХ ЧАСТЯХ БОРА, ПРЕДНАЗНАЧЕННОГО ДЛЯ АНГЛИЙСКОГО ЯЗЫКА, А НЕ ТОЛЬКО ПРИ ОБРАБОТКЕ ВТОРОЙ БУКВЫ. в ОБЫЧНОМ УНИВЕРСИТЕТСКОМ СЛОВАРЕ СЛОВА НАЧИНАЮТСЯ ЛИШЬ С~309 ИЗ $26^2=676$~ВОЗМОЖНЫХ КОМБИНАЦИЙ ДВУХ БУКВ, А ИЗ ЭТИХ 309~ПАР 88~СЛУЖАТ НАЧАЛОМ 15 ИЛИ МЕНЕЕ СЛОВ. (тИПИЧНЫЕ ПРИМЕРЫ ТАКИХ ПАР: aa, ah, aj, ak, ao, aq, ay, az, bd, bh,~\dots, xr, yc, yi, yp, yt, yu, yw, za, zu, zw; БОЛЬШИНСТВО ЛЮДЕЙ МОЖЕТ НАЗВАТЬ МАКСИМУМ ПО ОДНОМУ СЛОВУ ИЗ БОЛЬШИНСТВА ЭТИХ КАТЕГОРИЙ.) %%579 еСЛИ ВСТРЕЧАЕТСЯ ОДНА ИЗ УКАЗАННЫХ РЕДКИХ КАТЕГОРИЙ, МОЖНО ОТ БОРОВОЙ ПАМЯТИ ПЕРЕЙТИ К НЕКОТОРОЙ ДРУГОЙ СХЕМЕ, НАПРИМЕР К ПОСЛЕДОВАТЕЛЬНОМУ ПОИСКУ. дРУГИМ СПОСОБОМ УМЕНЬШЕНИЯ ТРЕБУЕМОГО ДЛЯ СЛОВАРЯ ОБRЕМА ПАМЯТИ ЯВЛЯЕТСЯ ИСПОЛЬЗОВАНИЕ ПРИСТАВОК. нАПРИМЕР, ЕСЛИ ИЩЕТСЯ СЛОВО, НАЧИНАЮЩЕЕСЯ С re-, pre-, anti-, trans-, dis-, un- И~Т.~Д., МОЖНО ОТДЕЛИТЬ ПРИСТАВКУ И ИСКАТЬ ОСТАТОК СЛОВА. тАКИМ ПУТЕМ МОЖНО УДАЛИТЬ МНОГО СЛОВ ТИПА reapply (ПОВТОРНО ПРИМЕНЯТЬ), recompute (СНОВА ВЫЧИСЛИТЬ), redecorate (ЗАНОВО ДЕКОРИРОВАТЬ), redesign (ПЕРЕПРОЕКТИРОВАТЬ), redeposit (ПЕРЕКЛАДЫВАТЬ) И~Т.~Д.; ОДНАКО НУЖНО ОСТАВИТЬ СЛОВА ВРОДЕ remainder (ОСТАТОК), requirement (ТРЕБОВАНИЕ), retain (СОХРАНЯТЬ), remove (УДАЛЯТЬ), readily (ОХОТНО) И Т.~Д., ТАК КАК ИХ ЗНАЧЕНИЯ БЕЗ ПРИСТАВКИ "re-" ПОКРЫТЫ ТАЙНОЙ. иТАК, СНАЧАЛА СЛЕДУЕТ ИСКАТЬ СЛОВО И ЛИШЬ ЗАТЕМ ПЫТАТЬСЯ УДАЛИТЬ ПРИСТАВКУ, ЕСЛИ ПЕРВЫЙ ПОИСК ОКАЗАЛСЯ НЕУДАЧНЫМ. еЩЕ ВАЖНЕЕ ИСПОЛЬЗОВАТЬ СУФФИКСЫ. нЕ ВЫЗЫВАЕТ СОМНЕНИЙ, ЧТО ДВУКРАТНОЕ ВКЛЮЧЕНИЕ КАЖДОГО СУЩЕСТВИТЕЛЬНОГО И ГЛАГОЛА В ЕДИНСТВЕННОМ И МНОЖЕСТВЕННОМ ЧИСЛЕ БЫЛО БЫ СЛИШКОМ РАСТОЧИТЕЛЬНЫМ; ИМЕЮТСЯ И ДРУГИЕ ТИПЫ СУФФИКСОВ. нАПРИМЕР, СЛЕДУЮЩИЕ ОКОНЧАНИЯ МОЖНО ДОБАВЛЯТЬ КО МНОГИМ ГЛАГОЛЬНЫМ ОСНОВАМ, ПОЛУЧАЯ НАБОР РОДСТВЕННЫХ СЛОВ: \ctable{ -#\bskip\bskip\hfill&-#\bskip\bskip\hfill&-#\bskip\bskip\hfill\cr e & es & ing\cr ed & s & ings\cr edlv & able & ingly\cr er & ible & ion\cr or & ably & ions\cr ers & ibly & ional\cr ors & ability & ionally\cr \omit& abilities & \omit\cr } (мНОГИЕ ИЗ ЭТИХ СУФФИКСОВ САМИ СОСТАВЛЕНЫ ИЗ СУФФИКСОВ.) еСЛИ ПОПЫТАТЬСЯ ДОБАВИТЬ ЭТИ СУФФИКСЫ К ОСНОВАМ \ctable{ #-\hfill\cr comput\cr calculat\cr search\cr suffix\cr translat\cr interpret\cr confus\cr } МЫ УВИДИМ, КАК МНОГО СЛОВ ПОЛУЧАЕТСЯ; ЭТО ЧРЕЗВЫЧАЙНО УВЕЛИЧИВАЕТ ВМЕСТИМОСТЬ НАШЕГО СЛОВАРЯ. бЕЗУСЛОВНО, ПРИ ТАКОЙ %% 580 ПРОЦЕДУРЕ ПОЛУЧАЕТСЯ И МНОГО НЕСУЩЕСТВУЮЩИХ СЛОВ, НАПРИМЕР "compution"; ОСНОВА computat- ОКАЗЫВАЕТСЯ СТОЛЬ ЖЕ НЕОБХОДИМОЙ, КАК И comput-. оДНАКО ВРЕДА В ЭТОМ НЕТ, ПОСКОЛЬКУ ТАКИЕ КОМБИНАЦИИ И НЕ БУДУТ СЛУЖИТЬ АРГУМЕНТАМИ ПОИСКА, А ЕСЛИ БЫ НЕКИЙ АВТОР ПРИДУМАЛ БЫ СЛОВО "computedly", МЫ ИМЕЛИ БЫ ДЛЯ НЕГО ГОТОВЫЙ ПЕРЕВОД. зАМЕТИМ, ЧТО БОЛЬШИНСТВУ ЛЮДЕЙ ПОНЯТНО СЛОВО "confusability" (СМУЩАЕМОСТЬ), ХОТЯ ОНО ВСТРЕЧАЕТСЯ В НЕМНОГИХ СЛОВАРЯХ; НАШ СЛОВАРЬ БУДЕТ ДАВАТЬ ПОДХОДЯЩЕЕ ТОЛКОВАНИЕ. пРИ ПРАВИЛЬНОЙ ОБРАБОТКЕ ПРИСТАВОК И СУФФИКСОВ НАШ СЛОВАРЬ СМОЖЕТ ИЗ ОДНОЙ ЛИШЬ ГЛАГОЛЬНОЙ ОСНОВЫ "establish" ВЫВЕСТИ ЗНАЧЕНИЕ СЛОВА "antidisestablishmentarianism". рАЗУМЕЕТСЯ, НУЖНО ЗАБОТИТЬСЯ О ТОМ, ЧТОБЫ ЗНАЧЕНИЕ СЛОВА ПОЛНОСТЬЮ ОПРЕДЕЛЯЛОСЬ ОСНОВОЙ И СУФФИКСОМ; ИСКЛЮЧЕНИЯ ДОЛЖНЫ БЫТЬ ВНЕСЕНЫ В СЛОВАРЬ ТАКИМ ОБРАЗОМ, ЧТОБЫ ИХ МОЖНО БЫЛО НАЙТИ ДО ОБРАЩЕНИЯ К ПОИСКУ СУФФИКСА. нАПРИМЕР, СХОДСТВО МЕЖДУ СЛОВАМИ "socialism" (СОЦИАЛИЗМ) И "socialist" (СОЦИАЛИСТ) СПОСОБНО ТОЛЬКО СБИТЬ С ТОЛКУ ПРИ АНАЛИЗЕ СЛОВ "organism" (ОРГАНИЗМ) И "organist" (ОРГАНИСТ)! мОЖНО ИСПОЛЬЗОВАТЬ ЦЕЛЫЙ РЯД ПРИЕМОВ ДЛЯ УМЕНЬШЕНИЯ ОБRЕМА ПАМЯТИ. нО КАК В ЕДИНОЙ СИСТЕМЕ КОМПАКТНО ПРЕДСТАВИТЬ РАЗНООБРАЗИЕ МЕТОДОВ? оТВЕТ СОСТОИТ В ТОМ, ЧТОБЫ ТРАКТОВАТЬ СЛОВАРЬ КАК \emph{ПРОГРАММУ}, НАПИСАННУЮ НА СПЕЦИАЛЬНОМ МАШИННОМ ЯЗЫКЕ ДЛЯ СПЕЦИАЛЬНОЙ \emph{ИНТЕРПРЕТИРУЮЩЕЙ СИСТЕМЫ} (СР.~С~П.~1.43); ЗАПИСИ В УЗЛЕ БОРА МОЖНО ТРАКТОВАТЬ КАК \emph{ИНСТРУКЦИИ}. нАПРИМЕР, В ТАБЛ.~1 МЫ ИМЕЕМ ДВА ВИДА "ИНСТРУКЦИЙ", А ПРОГРАММА~T ИСПОЛЬЗУЕТ ЗНАКОВЫЙ БИТ КАК КОД ОПЕРАЦИИ; ЗНАК МИНУС ОЗНАЧАЕТ ОТВЕТВЛЕНИЕ К ДРУГОМУ УЗЛУ И ПЕРЕХОД К СЛЕДУЮЩЕЙ ЛИТЕРЕ ЗА СЛЕДУЮЩЕЙ ИНСТРУКЦИЕЙ, В ТО ВРЕМЯ КАК ЗНАК ПЛЮС ВЫЗЫВАЕТ СРАВНЕНИЕ АРГУМЕНТА С ОПРЕДЕЛЕННЫМ КЛЮЧОМ. в ИНТЕРПРЕТИРУЮЩЕЙ СИСТЕМЕ ДЛЯ НАШЕГО СЛОВАРЯ МЫ МОГЛИ БЫ ИМЕТЬ ОПЕРАЦИИ СЛЕДУЮЩИХ ТИПОВ: \medskip \item{$\bullet$}~пРОВЕРКА $n$, $\alpha$, $\beta$. "еСЛИ СЛЕДУЮЩАЯ ЛИТЕРА АРГУМЕНТА КОДИРУЕТСЯ ЧИСЛОМ~$k\le n$, ПЕРЕЙТИ В ЯЧЕЙКУ~$\alpha+k$ ЗА СЛЕДУЮЩЕЙ ИНСТРУКЦИЕЙ; В ПРОТИВНОМ СЛУЧАЕ ПЕРЕЙТИ В ЯЧЕЙКУ~$\beta$". \item{$\bullet$}~сРАВНЕНИЕ $n$, $\alpha$, $\beta$. "сРАВНИТЬ ОСТАВШИЕСЯ ЛИТЕРЫ АРГУМЕНТА С $n$~СЛОВАМИ, РАСПОЛОЖЕННЫМИ В ЯЧЕЙКАХ~$\alpha$, $\alpha+1$,~\dots, $\alpha+n-1$. еСЛИ ПОДХОДЯЩЕЕ СЛОВО ИМЕЕТ АДРЕС~$\alpha+k$, ПОИСК КОНЧАЕТСЯ УДАЧНО И "ЗНАЧЕНИЕ" ЛЕЖИТ В ЯЧЕЙКЕ~$\beta+k$, НО ЕСЛИ ПОДХОДЯЩЕГО СЛОВА НЕТ, ПОИСК КОНЧАЕТСЯ НЕУДАЧНО". \item{$\bullet$}~рАСЩЕПЛЕНИЕ $\alpha$, $\beta$. "сЛОВО, ОБРАБОТАННОЕ ДО ДАННОГО МЕСТА, ВОЗМОЖНО, ЯВЛЯЕТСЯ ПРИСТАВКОЙ ИЛИ ОСНОВОЙ. в ПРОДОЛЖЕНИЕ ПОИСКА НУЖНО НАПРАВИТЬСЯ В ЯЧЕЙКУ А ЗА СЛЕДУЮЩЕЙ ИНСТРУКЦИЕЙ. еСЛИ ЭТОТ ПОИСК НЕУДАЧЕН, НЕОБХОДИМО ПРОДОЛЖИТЬ %%681 ПОИСК, РАССМАТРИВАЯ ОСТАВШИЕСЯ ЛИТЕРЫ АРГУМЕНТА КАК НОВЫЙ АРГУМЕНТ. еСЛИ ЭТОТ ПОИСК УДАЧЕН, СКОМБИНИРОВАТЬ НАЙДЕННОЕ "ЗНАЧЕНИЕ" СО "ЗНАЧЕНИЕМ"~$\beta$". \noindent оПЕРАЦИЯ ПРОВЕРКИ РЕАЛИЗУЕТ КОНЦЕПЦИЮ ПОИСКА ПО БОРУ, А ОПЕРАЦИЯ СРАВНЕНИЯ ОБОЗНАЧАЕТ ПЕРЕХОД К ПОСЛЕДОВАТЕЛЬНОМУ ПОИСКУ. оПЕРАЦИЯ РАСЩЕПЛЕНИЯ СЛУЖИТ ДЛЯ ОБРАБОТКИ ПРИСТАВОК И СУФФИКСОВ. мОЖНО, ОСНОВЫВАЯСЬ НА БОЛЕЕ ДЕТАЛЬНОМ ИЗУЧЕНИИ СПЕЦИФИЧЕСКИХ ЧЕРТ АНГЛИЙСКОГО ЯЗЫКА, ПРЕДЛОЖИТЬ НЕКОТОРЫЕ ДРУГИЕ ОПЕРАЦИИ. дАЛЬНЕЙШАЯ ЭКОНОМИЯ ПАМЯТИ ДОСТИГАЕТСЯ ЗА СЧЕТ ИСКЛЮЧЕНИЯ ПАРАМЕТРА~$\beta$ ИЗ КАЖДОЙ ИНСТРУКЦИИ, ТАК КАК ПАМЯТЬ МОЖЕТ БЫТЬ ОРГАНИЗОВАНА ТАК, ЧТОБЫ $\beta$~ВЫЧИСЛЯЛОСЬ С ПОМОЩЬЮ~$\alpha$, $n$ ИЛИ АДРЕСА ИНСТРУКЦИИ. бОЛЕЕ ПОЛНАЯ ИНФОРМАЦИЯ ОБ ОРГАНИЗАЦИИ СЛОВАРЯ ИМЕЕТСЯ В ИНТЕРЕСНЫХ СТАТЬЯХ сИДНЕЯ лЭМБА И уИЛЬЯМА яКОБСЕНА,~МЛ.\ [{\sl Mechanical Translation,\/} {\bf 6} (1961), 76--107]; ю.~с.~шВАРЦА [{\sl JACM,\/} {\bf 10} (1963), 413--439]; гАЛЛИ И~яМАДЫ [{\sl IBM Systems J.,\/} {\bf 6} (1967), 192--207]. \section бИНАРНЫЙ СЛУЧАЙ. рАССМОТРИМ ТЕПЕРЬ ЧАСТНЫЙ СЛУЧАЙ~$M=2$, КОГДА В КАЖДЫЙ МОМЕНТ ВРЕМЕНИ ОБРАБАТЫВАЕТСЯ ОДИН БИТ АРГУМЕНТА ПОИСКА. рАЗРАБОТАНЫ ДВА ИНТЕРЕСНЫХ МЕТОДА, ОСОБЕННО ПОДХОДЯЩИЕ ДЛЯ ДАННОГО СЛУЧАЯ. пЕРВЫЙ МЕТОД, КОТОРЫЙ МЫ БУДЕМ НАЗЫВАТЬ \emph{ЦИФРОВЫМ ПОИСКОМ ПО ДЕРЕВУ}, ПРЕДЛОЖЕН кОФФМАНОМ И~иВОМ [{\sl CACM,\/} {\bf 13} (1970), 427--432, 436]. тАК ЖЕ КАК И В АЛГОРИТМАХ ПОИСКА ПО ДЕРЕВУ ИЗ П.~6.2.2, В УЗЛАХ ДЕРЕВА ХРАНЯТСЯ ПОЛНЫЕ КЛЮЧИ, НО ДЛЯ ВЫБОРА ЛЕВОЙ ИЛИ ПРАВОЙ ВЕТВИ ИСПОЛЬЗУЮТСЯ НЕ РЕЗУЛЬТАТ СРАВНЕНИЯ КЛЮЧЕЙ, А БИТЫ АРГУМЕНТА. нА РИС.~32 ИЗОБРАЖЕНО ДЕРЕВО, ПОСТРОЕННОЕ ЭТИМ МЕТОДОМ; ОНО СОСТАВЛЕНО ИЗ 31~НАИБОЛЕЕ УПОТРЕБИТЕЛЬНОГО АНГЛИЙСКОГО СЛОВА, ПРИЧЕМ СЛОВА ВСТАВЛЯЛИСЬ В ПОРЯДКЕ УМЕНЬШЕНИЯ ЧАСТОТ. чТОБЫ ПОЛУЧИТЬ БИНАРНЫЕ ДАННЫЕ ДЛЯ ЭТОЙ ИЛЛЮСТРАЦИИ, СЛОВА ЗАПИСЫВАЛИСЬ В ЛИТЕРНОМ КОДЕ МАШИНЫ~\MIX\ С ПОСЛЕДУЮЩИМ ПРЕОБРАЗОВАНИЕМ В ДВОИЧНЫЕ ЧИСЛА, СОДЕРЖАЩИЕ ПО 5~БИТОВ В БАЙТЕ. тАКИМ ОБРАЗОМ, СЛОВО |WHICH| ПРЕВРАТИТСЯ В "11010\ 01000\ 01001\ 00011\ 01000". чТОБЫ НАЙТИ |WHICH| НА РИС.~32, МЫ СНАЧАЛА СРАВНИВАЕМ ЕГО СО СЛОВОМ~|THE| В КОРНЕ ДЕРЕВА. тАК КАК ОНИ НЕ СОВПАДАЮТ И ПЕРВЫЙ БИТ СЛОВА~|WHICH| РАВЕН~1, НУЖНО ИДТИ ВПРАВО И ПРОИЗВЕСТИ СРАВНЕНИЕ СО СЛОВОМ~|OF|. тАК КАК СОВПАДЕНИЯ НЕ ПРОИЗОШЛО И ВТОРОЙ БИТ |WHICH| РАВЕН~1, МЫ ИДЕМ ВПРАВО И СРАВНИВАЕМ НАШ АРГУМЕНТ СО СЛОВОМ |WITH| И Т.~Д. дЕРЕВО РИС.~32 ПОСТРОЕНО СПОСОБОМ, ПОХОЖИМ НА СПОСОБ ПОСТРОЕНИЯ ДЕРЕВА РИС.~12 ИЗ П.~6.2.2, ЛИШЬ ДЛЯ РАЗВЕТВЛЕНИЯ ВМЕСТО СРАВНЕНИЙ ИСПОЛЬЗОВАЛИСЬ БИТЫ КЛЮЧЕЙ, ПОЭТОМУ ИНТЕРЕСНО ОТМЕТИТЬ РАЗНИЦУ МЕЖДУ НИМИ. еСЛИ РАССМОТРЕТЬ ЗАДАННЫЕ ЧАСТОТЫ, ЦИФРОВОЙ ПОИСК ПО ДЕРЕВУ РИС.~32 ТРЕБУЕТ %%582 В СРЕДНЕМ $3.42$~СРАВНЕНИЯ НА УДАЧНЫЙ ПОИСК; ЭТО НЕСКОЛЬКО ЛУЧШЕ, ЧЕМ $4.04$~СРАВНЕНИЯ, ТРЕБУЮЩЕГОСЯ ДЛЯ РИС.~12, ХОТЯ, РАЗУМЕЕТСЯ, ВРЕМЯ САМОГО СРАВНЕНИЯ БУДЕТ РАЗЛИЧНЫМ В ДВУХ ЭТИХ СЛУЧАЯХ. \picture{рИС. 32. дЕРЕВО ЦИФРОВОГО ПОИСКА ДЛЯ 31 НАИБОЛЕЕ УПОТРЕБИТЕЛЬНОГО АНГЛИЙСКОГО СЛОВА, СЛОВА ВСТАВЛЕНЫ В ПОРЯДКЕ УМЕНЬШЕНИЯ ЧАСТОТ.} \alg D.(цИФРОВОЙ ПОИСК ПО ДЕРЕВУ.) эТОТ АЛГОРИТМ ПОЗВОЛЯЕТ НАЙТИ ДАННЫЙ АРГУМЕНТ~$K$ В ТАБЛИЦЕ ЗАПИСЕЙ, ОБРАЗУЮЩИХ ОПИСАННЫМ ВЫШЕ СПОСОБОМ БИНАРНОЕ ДЕРЕВО. еСЛИ $K$ НЕТ В ТАБЛИЦЕ, В ДЕРЕВО В ПОДХОДЯЩЕМ МЕСТЕ ВСТАВЛЯЕТСЯ НОВЫЙ УЗЕЛ, СОДЕРЖАЩИЙ~$K$. кАК И В АЛГОРИТМЕ~6.2.2т, ЗДЕСЬ ПРЕДПОЛАГАЕТСЯ, ЧТО ДЕРЕВО НЕПУСТО, А ЕГО УЗЛЫ СОДЕРЖАТ ПОЛЯ~|KEY|, |LLINK| И~|RLINK|. чИТАТЕЛЬ УВИДИТ, ЧТО ЭТИ АЛГОРИТМЫ ПОЧТИ ИДЕНТИЧНЫ. \st[нАЧАЛЬНАЯ УСТАНОВКА.] уСТАНОВИТЬ $|P|\asg|ROOT|$, $K1\asg K$. \st[сРАВНЕНИЕ.] еСЛИ $K=|KEY| (|P|)$, ПОИСК ОКАНЧИВАЕТСЯ УДАЧНО; В ПРОТИВНОМ СЛУЧАЕ ЗАНЕСТИ В~$b$ САМЫЙ ЛЕВЫЙ БИТ~$K1$ И СДВИНУТЬ~$K1$ НА ЕДИНИЦУ ВЛЕВО (Т.~Е.\ УДАЛИТЬ ЭТОТ БИТ И ДОБАВИТЬ СПРАВА~0). еСЛИ $b=0$, ПЕРЕЙТИ НА~\stp{3}; В ПРОТИВНОМ СЛУЧАЕ ПЕРЕЙТИ НА~\stp{4}. \st[шАГ ВЛЕВО.] еСЛИ $|LLINK|(|P|)\ne\NULL$, УСТАНОВИТЬ $|P|\asg|LLINK|(|P|)$ И ВЕРНУТЬСЯ НА~\stp{2}; В ПРОТИВНОМ СЛУЧАЕ ПЕРЕЙТИ НА~\stp{5}. \st[шАГ ВПРАВО.] еСЛИ $|RLINK|(|P|)\ne\NULL$, УСТАНОВИТЬ $|P|\asg|RLINK|(|P|)$ И ВЕРНУТЬСЯ НА~\stp{2}. %%583 \st[вСТАВКА В ДЕРЕВО.] вЫПОЛНИТЬ $|Q|\Asg|AVAIL|$, $|KEY|(|Q|)\asg K$, $|LLINK|(|Q|)\asg|RLINK|(|Q|)\asg\NULL$. еСЛИ~$b=0$, УСТАНОВИТЬ $|LLINK|(|P|)\asg |Q|$; В ПРОТИВНОМ СЛУЧАЕ $|RLINK| (|P|)\asg|Q|$. \algend аЛГОРИТМ~6.2.2T ПО СУТИ СВОЕЙ БИНАРНЫЙ, ОДНАКО ПРИВЕДЕННЫЙ АЛГОРИТМ, КАК НЕТРУДНО ЗАМЕТИТЬ, МОЖНО ЛЕГКО РАСПРОСТРАНИТЬ НА $M\hbox{-АРНЫЙ}$ ЦИФРОВОЙ ПОИСК ДЛЯ ЛЮБОГО $M\ge2$ (СМ.~УПР.~13). \picture{рИС. 33. пРИМЕР ТЕКСТА И ДЕРЕВА пАТРИЦИИ.} дОНАЛЬД мОРРИСОН [{\sl JACM,\/} {\bf 15} (1968), 514--534] ПРИДУМАЛ ОЧЕНЬ ПРИВЛЕКАТЕЛЬНЫЙ СПОСОБ ФОРМИРОВАНИЯ $N\hbox{-УЗЛОВЫХ}$ ДЕРЕВЬЕВ ПОИСКА, ОСНОВАННЫЙ НА БИНАРНОМ ПРЕДСТАВЛЕНИИ КЛЮЧЕЙ, БЕЗ ЗАПОМИНАНИЯ КЛЮЧЕЙ В УЗЛАХ. еГО МЕТОД, НАЗВАННЫЙ "пАТРИЦИЯ" (пРАКТИЧЕСКИЙ АЛГОРИТМ ДЛЯ ВЫБОРКИ ИНФОРМАЦИИ, ЗАКОДИРОВАННОЙ БУКВАМИ И ЦИФРАМИ)\note{1}% {в ОРИГИНАЛЕ "Patricia"---Practical Algorithm To Retrieve Information Coded In Alphanumeric.---{\sl пРИМ. ПЕРЕВ.\/}}, ОСОБЕННО ПОДХОДИТ ДЛЯ РАБОТЫ С ОЧЕНЬ ДЛИННЫМИ КЛЮЧАМИ ПЕРЕМЕННОЙ ДЛИНЫ, ТАКИМИ, КАК ЗАГОЛОВКИ ИЛИ ФРАЗЫ, ХРАНЯЩИЕСЯ В ФАЙЛЕ БОЛЬШОГО ОБRЕМА. оСНОВНАЯ ИДЕЯ пАТРИЦИИ СОСТОИТ В ТОМ, ЧТОБЫ СТРОИТЬ БИНАРНОЕ ДЕРЕВО, ИЗБЕГАЯ ОДНОПУТЕВЫХ РАЗВЕТВЛЕНИЙ, ДЛЯ ЧЕГО В КАЖДЫЙ УЗЕЛ ВКЛЮЧАЕТСЯ ЧИСЛО, ПОКАЗЫВАЮЩЕЕ, СКОЛЬКО БИТОВ %%584 НУЖНО ПРОПУСТИТЬ, ПЕРЕД ТЕМ КАК ДЕЛАТЬ СЛЕДУЮЩУЮ ПРОВЕРКУ. сУЩЕСТВУЕТ НЕСКОЛЬКО СПОСОБОВ РЕАЛИЗАЦИИ ЭТОЙ ИДЕИ; ВОЗМОЖНО, ПРОСТЕЙШИЙ С ТОЧКИ ЗРЕНИЯ ОБRЯСНЕНИЯ ИЗОБРАЖЕН НА РИС.~33. иМЕЕТСЯ МАССИВ БИТОВ |TEXT| (ОБЫЧНО ДОВОЛЬНО ДЛИННЫЙ); ОН МОЖЕТ ХРАНИТЬСЯ ВО ВНЕШНЕМ ФАЙЛЕ С ПРЯМЫМ ДОСТУПОМ, ТАК КАК ПРИ КАЖДОМ ПОИСКЕ ОБРАЩЕНИЕ К НЕМУ ПРОИСХОДИТ ЛИШЬ РАЗ. кАЖДЫЙ КЛЮЧ, КОТОРЫЙ ДОЛЖЕН ХРАНИТЬСЯ В НАШЕЙ ТАБЛИЦЕ, ОПРЕДЕЛЯЕТСЯ МЕСТОМ НАЧАЛА В ТЕКСТЕ; МОЖНО СЧИТАТЬ, ЧТО ОН ИДЕТ ОТ МЕСТА НАЧАЛА ДО КОНЦА ТЕКСТА. (пАТРИЦИЯ НЕ ИЩЕТ ТОЧНОГО РАВЕНСТВА МЕЖДУ КЛЮЧОМ И АРГУМЕНТОМ, А ОПРЕДЕЛЯЕТ, СУЩЕСТВУЕТ ЛИ КЛЮЧ, \emph{НАЧИНАЮЩИЙСЯ} С АРГУМЕНТА.) в ПРИМЕРЕ, ИЗОБРАЖЕННОМ НА РИС.~33, ИМЕЕТСЯ СЕМЬ КЛЮЧЕЙ, НАЧИНАЮЩИХСЯ С КАЖДОГО ВХОДЯЩЕГО В ТЕКСТ СЛОВА, А ИМЕННО "|THIS| |IS| |THE| |HOUSE| |THAT| |JACK| |BUILT|.", "|IS| |THE| |HOUSE| |THAT| |JACK| |BUILT|.", ~\dots, "|BUILT|.". нАЛАГАЕТСЯ ВАЖНОЕ ОГРАНИЧЕНИЕ, СОСТОЯЩЕЕ В ТОМ, ЧТО \emph{ОДИН КЛЮЧ НЕ МОЖЕТ СЛУЖИТЬ НАЧАЛОМ ДРУГОГО;} ЭТО УСЛОВИЕ ВЫПОЛНЯЕТСЯ, ЕСЛИ МЫ ОКАНЧИВАЕМ ТЕКСТ СПЕЦИАЛЬНЫМ КОДОМ КОНЦА ТЕКСТА (В ДАННОМ СЛУЧАЕ "|.|"), КОТОРЫЙ НИГДЕ БОЛЬШЕ НЕ ПОЯВЛЯЕТСЯ. тО ЖЕ ОГРАНИЧЕНИЕ ПОДРАЗУМЕВАЕТСЯ В СХЕМЕ БОРА АЛГОРИТМА~T, ГДЕ ПРИЗНАКОМ КОНЦА СЛУЖИЛ "\] ". дЕРЕВО, ИСПОЛЬЗУЕМОЕ пАТРИЦИЕЙ ДЛЯ ПОИСКА, ДОЛЖНО ЦЕЛИКОМ ПОМЕЩАТЬСЯ В ОПЕРАТИВНОЙ ПАМЯТИ, ИЛИ ЕГО НУЖНО ОРГАНИЗОВАТЬ ПО СТРАНИЧНОЙ СХЕМЕ, ОПИСАННОЙ В П.~6.2.4. оНО СОСТОИТ ИЗ ГОЛОВЫ И $N-1$~УЗЛОВ, ПРИЧЕМ УЗЛЫ СОДЕРЖАТ НЕСКОЛЬКО ПОЛЕЙ: \medskip {\narrower \noindent|KEY|---УКАЗАТЕЛЬ НА ТЕКСТ. эТО ПОЛЕ ДОЛЖНО ИМЕТЬ ДЛИНУ НЕ МЕНЕЕ $\log_2 C$~БИТОВ, ГДЕ $C$---ЧИСЛО ЛИТЕР В ТЕКСТЕ. сЛОВА, ИЗОБРАЖЕННЫЕ НА РИС.~33 ВНУТРИ УЗЛОВ, НА САМОМ ДЕЛЕ ДОЛЖНЫ БЫТЬ ПРЕДСТАВЛЕНЫ УКАЗАТЕЛЯМИ НА ТЕКСТ; НАПРИМЕР, ВМЕСТО "|(JACK)|" УЗЕЛ СОДЕРЖИТ ЧИСЛО~24 (НАЧАЛЬНУЮ ТОЧКУ КЛЮЧА "|JACK BUILT|."). \noindent|LLINK| И~|RLINK|---ССЫЛКИ ВНУТРИ ДЕРЕВА. оНИ ДОЛЖНЫ ИМЕТЬ ДЛИНУ НЕ МЕНЕЕ $\log_2 N$~БИТОВ. \noindent|LTAG| И~|RTAG|---ОДНОБИТОВЫЕ ПОЛЯ, ПО КОТОРЫМ МЫ МОЖЕМ СУДИТЬ, ЯВЛЯЮТСЯ ЛИ |LLINK| И~|RLINK| СООТВЕТСТВЕННО ССЫЛКАМИ НА СЫНОВЕЙ ИЛИ НА ПРЕДКОВ. пУНКТИРНЫЕ ЛИНИИ НА РИС.~33 СООТВЕТСТВУЮТ ССЫЛКАМ, ДЛЯ КОТОРЫХ $|TAG|=1$. \noindent|SKIP|---ЧИСЛО БИТОВ, КОТОРЫЕ НУЖНО ПРОПУСТИТЬ ПРИ ПОИСКЕ, КАК ОБRЯСНЯЛОСЬ ВЫШЕ. эТО ПОЛЕ ДОЛЖНО БЫТЬ ДОСТАТОЧНО БОЛЬШИМ ДЛЯ ТОГО, ЧТОБЫ ВМЕСТИТЬ НАИБОЛЬШЕЕ ЧИСЛО~$k$, ДЛЯ КОТОРОГО В ДВУХ РАЗЛИЧНЫХ КЛЮЧАХ НАЙДУТСЯ СОВПАДАЮЩИЕ ПОДЦЕПОЧКИ ИЗ $k$~БИТОВ; ОБЫЧНО ДЛЯ ПРАКТИЧЕСКИХ ЦЕЛЕЙ ДОСТАТОЧНО СЧИТАТЬ, ЧТО $k$ НЕ СЛИШКОМ ВЕЛИКО, И ПРИ ПРЕВЫШЕНИИ РАЗМЕРОВ ПОЛЯ |SKIP| ВЫДАВАТЬ СООБЩЕНИЕ ОБ %%585 ОШИБКЕ. нА РИС.~33 ПОЛЯ |SKIP| ИЗОБРАЖЕНЫ ВНУТРИ КАЖДОГО УЗЛА ЧИСЛАМИ. \par} гОЛОВА СОДЕРЖИТ ЛИШЬ ПОЛЯ KEY, LLINK И LTAG.\medskip пОИСК В ДЕРЕВЕ пАТРИЦИИ ВЫПОЛНЯЕТСЯ СЛЕДУЮЩИМ ОБРАЗОМ: ПРЕДПОЛОЖИМ, МЫ ИЩЕМ СЛОВО~|THAT| (БИНАРНОЕ ПРЕДСТАВЛЕНИЕ $10111\ 01000\ 00001\ 10111$). пО СОДЕРЖИМОМУ ПОЛЯ |SKIP| В КОРНЕВОМ УЗЛЕ~$\alpha$ МЫ ЗАКЛЮЧАЕМ, ЧТО СНАЧАЛА НУЖНО ПРОВЕРИТЬ ПЕРВЫЙ БИТ АРГУМЕНТА. оН РАВЕН~1, ПОЭТОМУ НАДО ДВИГАТЬСЯ ВПРАВО. пОЛЕ |SKIP| СЛЕДУЮЩЕГО УЗЛА ПОБУЖДАЕТ НАС ПРОВЕРИТЬ $1+11=12\hbox{-Й}$~БИТ АРГУМЕНТА. оН РАВЕН~0, И МЫ ИДЕМ ВЛЕВО. иЗУЧИВ ПОЛЕ |SKIP| СЛЕДУЮЩЕГО УЗЛА, ВИДИМ, ЧТО НУЖНО ПРОВЕРИТЬ $12+1=13\hbox{-Й}$~БИТ, КОТОРЫЙ РАВЕН~0. тАК КАК $|LTAG|=1$, МЫ ИДЕМ НА УЗЕЛ~$\gamma$, КОТОРЫЙ ОТСЫЛАЕТ НАС К МАССИВУ |TEXT|. пО ТОМУ ЖЕ ПУТИ ПОЙДЕТ ПОИСК ДЛЯ ЛЮБОГО АРГУМЕНТА, ИМЕЮЩЕГО БИНАРНОЕ ПРЕДСТАВЛЕНИЕ $1xxxx\ xxxxx\ x00~\ldots$, ПОЭТОМУ НУЖНО СРАВНИТЬ АРГУМЕНТ С НАЙДЕННЫМ КЛЮЧОМ. пРЕДПОЛОЖИМ, С ДРУГОЙ СТОРОНЫ, ЧТО МЫ ИЩЕМ НЕКОТОРЫЙ КЛЮЧ, НАЧИНАЮЩИЙСЯ С~|TH|, ИЛИ ВСЕ ТАКИЕ КЛЮЧИ. пОИСК НАЧИНАЕТСЯ, КАК И РАНЬШЕ, НО В КОНЦЕ КОНЦОВ МЫ ОБРАТИМСЯ К (НЕСУЩЕСТВУЮЩЕМУ) 12-МУ~БИТУ ДЕСЯТИБИТОВОГО АРГУМЕНТА. тЕПЕРЬ НУЖНО СРАВНИТЬ АРГУМЕНТ С ФРАГМЕНТОМ МАССИВА |TEXT|, КОТОРЫЙ СПЕЦИФИЦИРУЕТСЯ В ТЕКУЩЕМ УЗЛЕ (В ДАННОМ СЛУЧАЕ~$\gamma$); ЕСЛИ СОВПАДЕНИЯ НЕ ПРОИЗОШЛО, ТО НЕ СУЩЕСТВУЕТ КЛЮЧА, НАЧАЛОМ КОТОРОГО СЛУЖИТ АРГУМЕНТ ПОИСКА; ЕСЛИ СОВПАДЕНИЕ ИМЕЛО МЕСТО, АРГУМЕНТ ЯВЛЯЕТСЯ НАЧАЛОМ ЛЮБОГО КЛЮЧА, НА КОТОРЫЙ УКАЗЫВАЮТ ПУНКТИРНЫЕ ЛИНИИ, ВЫХОДЯЩИЕ ИЗ УЗЛА~$\gamma$ И ЕГО ПОТОМКОВ. бОЛЕЕ ТОЧНО ЭТОТ ПРОЦЕСС ОПИСЫВАЕТСЯ СЛЕДУЮЩИМ ОБРАЗОМ. \alg P.(пАТРИЦИЯ.) аЛГОРИТМ, ИСПОЛЬЗУЯ МАССИВ |TEXT| И ДЕРЕВО С ОПИСАННЫМИ ВЫШЕ ПОЛЯМИ |KEY|, |LLINK|, |RLINK|, |LTAG|, |RTAG| И~|SKIP| В УЗЛАХ, ПОЗВОЛЯЕТ ОПРЕДЕЛИТЬ, СУЩЕСТВУЕТ ЛИ В МАССИВЕ |TEXT| КЛЮЧ, НАЧИНАЮЩИЙСЯ С АРГУМЕНТА~$K$. (еСЛИ ИМЕЕТСЯ $r\ge1$ ТАКИХ КЛЮЧЕЙ, МОЖНО ЗА $O(r)$~ШАГОВ ОПРЕДЕЛИТЬ РАСПОЛОЖЕНИЕ КАЖДОГО ИЗ НИХ; СМ.~УПР.~14.) пРЕДПОЛАГАЕТСЯ, ЧТО ЕСТЬ ПО КРАЙНЕЙ МЕРЕ ОДИН КЛЮЧ. \st[нАЧАЛЬНАЯ УСТАНОВКА.] уСТАНОВИТЬ $|P|\asg|HEAD|$ И~$j\asg0$ (пЕРЕМЕННАЯ~|P| ЯВЛЯЕТСЯ УКАЗАТЕЛЕМ, КОТОРЫЙ БУДЕТ ДВИГАТЬСЯ ВНИЗ ПО ДЕРЕВУ, А $j$---ЭТО СЧЕТЧИК, ОПРЕДЕЛЯЮЩИЙ ПОЗИЦИИ БИТОВ АРГУМЕНТА.) зАНЕСТИ В $n$ КОЛИЧЕСТВО БИТОВ АРГУМЕНТА~$K$. \st[шАГ ВЛЕВО.] уСТАНОВИТЬ $|Q|\asg|P|$ И~$|P|\asg|LLINK| (|Q|)$. еСЛИ $|LTAG|(|Q|)=1$, ПЕРЕЙТИ НА~\stp{6}. \st[пРОПУСК БИТОВ.] (в ЭТОТ МОМЕНТ МЫ ЗНАЕМ, ЧТО, ЕСЛИ ПЕРВЫЕ $j$~БИТОВ АРГУМЕНТА СООТВЕТСТВУЮТ НЕКОТОРОМУ КЛЮЧУ, ОНИ СООТВЕТСТВУЮТ КЛЮЧУ, НАЧИНАЮЩЕМУСЯ В~$|KEY|(|P|)$.) уСТАНОВИТЬ $j\asg j+|SKIP|(|P|)$. еСЛИ~$j>n$, ПЕРЕЙТИ НА~\stp{6}. %%586 \st[пРОВЕРКА БИТА.] в ЭТОТ МОМЕНТ МЫ ЗНАЕМ, ЧТО, ЕСЛИ ПЕРВЫЕ $(j-1)$~БИТОВ СООТВЕТСТВУЮТ НЕКОТОРОМУ КЛЮЧУ, ОНИ СООТВЕТСТВУЮТ КЛЮЧУ, НАЧИНАЮЩЕМУСЯ В~$|KEY|(|P|)$. еСЛИ $j\hbox{-Й}$~БИТ~$K$ РАВЕН~0, ПЕРЕЙТИ НА~\stp{2}; В ПРОТИВНОМ СЛУЧАЕ ПЕРЕЙТИ НА~\stp{5}. \st[шАГ ВПРАВО.] уСТАНОВИТЬ $|Q|\asg|P|$ И~$|P|\asg|RLINK|(|Q|)$. еСЛИ~$|RTAG|(|Q|)=0$, ПЕРЕЙТИ НА~\stp{3}. \st[сРАВНЕНИЕ.] (в ЭТОТ МОМЕНТ МЫ ЗНАЕМ, ЧТО, ЕСЛИ~$K$ СООТВЕТСТВУЕТ НЕКОТОРОМУ КЛЮЧУ, ОН СООТВЕТСТВУЕТ КЛЮЧУ, НАЧИНАЮЩЕМУСЯ В~$|KEY|(|P|)$.) сРАВНИТЬ~$K$ С КЛЮЧОМ, НАЧИНАЮЩИМСЯ В ПОЗИЦИИ~$|KEY|(|P|)$ МАССИВА~|TEXT|. еСЛИ ПРОИЗОШЛО СОВПАДЕНИЕ $n$~ПЕРВЫХ БИТОВ, АЛГОРИТМ ЗАКАНЧИВАЕТСЯ УДАЧНО; В СЛУЧАЕ НЕСОВПАДЕНИЯ ОН ЗАКАНЧИВАЕТСЯ НЕУДАЧНО. \algend в УПР.~15 ПРЕЖДЕ ВСЕГО ПОКАЗАНО, КАК МОЖНО ОСУЩЕСТВИТЬ ПОСТРОЕНИЕ ДЕРЕВА пАТРИЦИИ. иМЕЕТСЯ ТАКЖЕ ВОЗМОЖНОСТЬ ДОБАВЛЯТЬ К ТЕКСТУ И ВСТАВЛЯТЬ НОВЫЕ КЛЮЧИ ПРИ УСЛОВИИ, ЧТО НОВЫЙ ТЕКСТОВОЙ МАТЕРИАЛ ОКАНЧИВАЕТСЯ ОПРЕДЕЛЕННЫМ РАЗДЕЛИТЕЛЕМ (НАПРИМЕР, СИМВОЛОМ КОНЦА ТЕКСТА, ЗА КОТОРЫМ СЛЕДУЕТ ПОРЯДКОВЫЙ НОМЕР). хАРАКТЕР пАТРИЦИИ СЛЕГКА ПРИЧУДЛИВ, И ВСЕ ЕЕ ДОСТОИНСТВА ЗАМЕТНЫ ЛИШЬ ВНИМАТЕЛЬНОМУ НАБЛЮДАТЕЛЮ. \section аНАЛИЗ АЛГОРИТМОВ. зАВЕРШИМ ЭТОТ РАЗДЕЛ МАТЕМАТИЧЕСКИМ ИЗУЧЕНИЕМ БОРОВ, ДЕРЕВЬЕВ ЦИФРОВОГО ПОИСКА И пАТРИЦИИ. вАЖНЕЙШИЕ ВЫВОДЫ ИЗ ЭТОГО АНАЛИЗА ПРИВЕДЕНЫ В САМОМ КОНЦЕ. \picture{рИС. 34. пРИМЕР СЛУЧАЙНОГО БИНАРНОГО БОРА.} рАССМОТРИМ СНАЧАЛА БИНАРНЫЕ БОРЫ, Т.~Е.~БОРЫ С~$M=2$. нА РИС.~34 ИЗОБРАЖЕН БИНАРНЫЙ БОР, ОБРАЗУЮЩИЙСЯ, ЕСЛИ 16~КЛЮЧЕЙ ИЗ ПРИМЕРОВ СОРТИРОВКИ ГЛ.~5 РАССМАТРИВАТЬ КАК ДЕСЯТИБИТОВЫЕ ДВОИЧНЫЕ ЧИСЛА. (кЛЮЧИ ПРИВЕДЕНЫ В ВОСЬМЕРИЧНОЙ %%587 ЗАПИСИ, ТАК ЧТО, НАПРИМЕР, $1144$ ПРЕДСТАВЛЯЕТ ДЕСЯТИБИТОВОЕ ЧИСЛО $(1001100100)_2$.) кАК И В АЛГОРИТМЕ~T, МЫ ИСПОЛЬЗУЕМ БОР ДЛЯ ХРАНЕНИЯ ИНФОРМАЦИИ О ЛЕВЫХ БИТАХ КЛЮЧЕЙ ДО ТЕХ ПОР, ПОКА ВПЕРВЫЕ ДОСТИГАЕТСЯ ТОЧКА, ГДЕ КЛЮЧ ОПРЕДЕЛЯЕТСЯ ОДНОЗНАЧНО; ТАМ ОН ЗАПИСЫВАЕТСЯ ПОЛНОСТЬЮ. еСЛИ СРАВНИТЬ РИС.~34 С ТАБЛ.~5.2.2-3, ОБНАРУЖИТСЯ УДИВИТЕЛЬНАЯ ВЗАИМОСВЯЗЬ МЕЖДУ БОРОВОЙ ПАМЯТЬЮ И ОБМЕННОЙ ПОРАЗРЯДНОЙ СОРТИРОВКОЙ. (вОЗМОЖНО, ЭТА ВЗАИМОСВЯЗЬ ЯВЛЯЕТСЯ ОЧЕВИДНОЙ.) 22~УЗЛА РИС.~34 В ТОЧНОСТИ СООТВЕТСТВУЮТ 22~СТАДИЯМ РАСЧЛЕНЕНИЯ В ТАБЛ.~5.2.2-3 (УЗЛЫ СЛЕДУЕТ НУМЕРОВАТЬ В ПРЯМОМ ПОРЯДКЕ). чИСЛО ПРОВЕРЯЕМЫХ БИТОВ В СТАДИИ РАСЧЛЕНЕНИЯ РАВНО ЧИСЛУ КЛЮЧЕЙ В СООТВЕТСТВУЮЩЕМ УЗЛЕ-И ЕГО ПОДБОРАХ; ТАКИМ ОБРАЗОМ, МОЖНО СФОРМУЛИРОВАТЬ СЛЕДУЮЩИЙ РЕЗУЛЬТАТ. \proclaim тЕОРЕМА T. еСЛИ $N$ РАЗЛИЧНЫХ ДВОИЧНЫХ ЧИСЕЛ ПОМЕЩЕНЫ В БИНАРНЫЙ БОР, КАК ОПИСАНО ВЫШЕ, ТО (i)~ЧИСЛО УЗЛОВ БОРА РАВНО ЧИСЛУ СТАДИЙ РАСЧЛЕНЕНИЯ, НУЖНЫХ ПРИ ОБМЕННОЙ ПОРАЗРЯДНОЙ СОРТИРОВКЕ ЭТИХ ЧИСЕЛ; (ii)~СРЕДНЕЕ ЧИСЛО ПРОВЕРОК БИТОВ, ТРЕБУЕМЫХ ДЛЯ ВЫБОРКИ КЛЮЧА С ПОМОЩЬЮ АЛГОРИТМА~T, РАВНО~$1/N$, УМНОЖЕННОМУ НА ЧИСЛО ПРОВЕРОК БИТОВ ПРИ. ОБМЕННОЙ ПОРАЗРЯДНОЙ СОРТИРОВКЕ.\endmark бЛАГОДАРЯ ТЕОРЕМЕ МЫ МОЖЕМ ИСПОЛЬЗОВАТЬ ВЕСЬ МАТЕМАТИЧЕСКИЙ АППАРАТ, РАЗВИТЫЙ В П.~5.2.2 ДЛЯ ОБМЕННОЙ ПОРАЗРЯДНОЙ СОРТИРОВКИ. пРЕДПОЛОЖИМ, НАПРИМЕР, ЧТО КЛЮЧАМИ ЯВЛЯЮТСЯ СЛУЧАЙНЫЕ, РАВНОМЕРНО РАСПРЕДЕЛЕННЫЕ МЕЖДУ~0 И~1 ВЕЩЕСТВЕННЫЕ ЧИСЛА, ПРЕДСТАВЛЕННЫЕ С БЕСКОНЕЧНОЙ ТОЧНОСТЬЮ. тОГДА КОЛИЧЕСТВО ПРОВЕРОК БИТОВ, НЕОБХОДИМЫХ ДЛЯ ВЫБОРКИ ИНФОРМАЦИИ, БУДЕТ РАВНО~$\log_2 N+\gamma/(\ln2)+1/2+f(N)+O(N^{-1})$, А ЧИСЛО УЗЛОВ БОРА СОСТАВИТ~$N/(\ln2)+Ng(N)+O(1)$. зДЕСЬ~$f(N)$ И~$g(N)$---СЛОЖНЫЕ ФУНКЦИИ, КОТОРЫМИ МОЖНО ПРЕНЕБРЕЧЬ, ТАК КАК ИХ ЗНАЧЕНИЯ ВСЕГДА МЕНЬШЕ~$10^{-6}$ (СМ.~УПР.~5.2.2-38,48). рАЗУМЕЕТСЯ, ПЕРЕД НАМИ СТОИТ БОЛЕЕ ТРУДНАЯ ЗАДАЧА: ОБОБЩИТЬ ПОЛУЧЕННЫЕ РЕЗУЛЬТАТЫ НА СЛУЧАЙ $M\hbox{-АРНЫХ}$ БОРОВ. мЫ ОПИШЕМ ЛИШЬ ОТПРАВНУЮ ТОЧКУ ИССЛЕДОВАНИЙ, ОСТАВЛЯЯ ПОУЧИТЕЛЬНЫЕ ДЕТАЛИ В КАЧЕСТВЕ УПРАЖНЕНИЙ. пУСТЬ $A_N$---СРЕДНЕЕ ЧИСЛО УЗЛОВ В СЛУЧАЙНОМ $M\hbox{-АРНОМ}$ БОРУ ПОИСКА, СОДЕРЖАЩЕМ $N$~КЛЮЧЕЙ. тОГДА $A_0=A_1=0$, А ДЛЯ $N\ge2$ МЫ ИМЕЕМ $$ A_N=1+\sum_{k_1+\cdots+k_M=N}\left({N!\over k_1!\ldots k_M!} M^{-N}\right)(A_{k_1}+\cdots+A_{k_M}), \eqno(3) $$ ТАК КАК $N!M^{-N}/k_1!\ldots k_M!$~ЕСТЬ ВЕРОЯТНОСТЬ ТОГО, ЧТО $k_1$~КЛЮЧЕЙ СОДЕРЖИТСЯ В ПЕРВОМ ПОДБОРУ,~\dots, $k_M$---В~$M\hbox{-М}$. вОСПОЛЬЗОВАВШИСЬ СООБРАЖЕНИЯМИ СИММЕТРИИ И ПРОВЕДЯ СУММИРОВАНИЕ ПО %%588 $k_2$,~\dots, $k_M$, ПЕРЕПИШЕМ ЭТО СООТНОШЕНИЕ ТАК: $$ \eqalignno{ A_N&=1+M^{1-N}\sum_{k_1+\cdots+k_M=N} \left({N!\over k_1!\ldots k_M!}\right) A_{k_1}=\cr &=1+M^{1-N}\sum_k\perm{N}{k}(M-1)^{N-k}A_k, \qquad N\ge2.&(4)\cr } $$ аНАЛОГИЧНО, ЕСЛИ ЧЕРЕЗ $C_N$~ОБОЗНАЧИТЬ СРЕДНЕЕ СУММАРНОЕ КОЛИЧЕСТВО ПРОВЕРОК БИТОВ, НУЖНЫХ ДЛЯ ПОИСКА В БОРУ ВСЕХ $N$~КЛЮЧЕЙ, ТО $C_0=C_1=0$, А $$ C_N=N+M^{1-N}\sum_k\perm{N}{k}(M-1)^{N-k} C_k,\qquad N\ge 2. \eqno (5) $$ в УПР.~17 ПОКАЗАНО, КАК РАБОТАТЬ С РЕКУРРЕНТНЫМИ СООТНОШЕНИЯМИ ТАКОГО ВИДА, А В УПР.~18--25 РАЗРАБАТЫВАЕТСЯ СООТВЕТСТВУЮЩАЯ ТЕОРИЯ СЛУЧАЙНЫХ БОРОВ. [с ДРУГОЙ ТОЧКИ ЗРЕНИЯ К АНАЛИЗУ~$A_N$ ВПЕРВЫЕ ПОДОШЛИ л.~р.~дЖОНСОН И м.~мАК-эНДРЮ [{\sl IBM J.~Res.~and~Devel.,\/} {\bf 8} (1964), 189--193] В СВЯЗИ С ЭКВИВАЛЕНТНЫМ АППАРАТНО-ОРИЕНТИРОВАННЫМ АЛГОРИТМОМ СОРТИРОВКИ.] пЕРЕХОДЯ ТЕПЕРЬ К ИЗУЧЕНИЮ ДЕРЕВЬЕВ ЦИФРОВОГО ПОИСКА, МЫ ОБНАРУЖИВАЕМ, ЧТО, С ОДНОЙ СТОРОНЫ, ФОРМУЛЫ ПОХОЖИ, А С ДРУГОЙ---ДОСТАТОЧНО РАЗЛИЧНЫ, И СРАЗУ НЕ ЯСНО, КАК ИССЛЕДОВАТЬ АСИМПТОТИЧЕСКОЕ ПОВЕДЕНИЕ. нАПРИМЕР, ЕСЛИ $\bar C_N$~ОБОЗНАЧАЕТ СРЕДНЕЕ СУММАРНОЕ КОЛИЧЕСТВО ПРОВЕРОК БИТОВ, ПРОИЗВОДИМЫХ ПРИ ПОИСКЕ ВСЕХ $N$~КЛЮЧЕЙ В БИНАРНОМ ДЕРЕВЕ ЦИФРОВОГО ПОИСКА, НЕТРУДНО ВЫВЕСТИ, КАК И РАНЬШЕ, ЧТО $\bar C_0=\bar C_1=0$ И $$ \bar C_{N+1}=N+M^{1-N}\sum_k\perm{N}{k}(M-1)^{N-k}\bar C_k, \qquad N\ge0. \eqno(6) $$ эТО ПОЧТИ ИДЕНТИЧНО ВЫРАЖЕНИЮ~(5), НО ПОЯВЛЕНИЯ $N+1$ ВМЕСТО~$N$ В ЛЕВОЙ, ЧАСТИ УРАВНЕНИЯ ДОСТАТОЧНО ДЛЯ ТОГО, ЧТОБЫ ИЗМЕНИТЬ ОБЩИЙ ХАРАКТЕР РЕКУРРЕНТНОСТИ, ТАК ЧТО МЕТОДЫ, ИСПОЛЬЗУЕМЫЕ ДЛЯ ИЗУЧЕНИЯ~(5), В ДАННОМ СЛУЧАЕ НЕПРИГОДНЫ. рАССМОТРИМ СНАЧАЛА БИНАРНЫЙ СЛУЧАЙ. нА РИС.~35 ИЗОБРАЖЕНО ДЕРЕВО ЦИФРОВОГО ПОИСКА, СООТВЕТСТВУЮЩЕЕ 16~КЛЮЧАМ РИС.~34, ВСТАВЛЕННЫМ В ПОРЯДКЕ, ИСПОЛЬЗОВАННОМ В ПРИМЕРАХ ИЗ ГЛ.~5. сРЕДНЕЕ ЧИСЛО ПРОВЕРОК БИТОВ ПРИ СЛУЧАЙНОМ УДАЧНОМ ПОИСКЕ НАЙТИ ЛЕГКО---ОНО РАВНО ДЛИНЕ ВНУТРЕННЕГО ПУТИ ДЕРЕВА, ДЕЛЕННОЙ НА~$N$, ТАК КАК НУЖНО $l$~ПРОВЕРОК, ЧТОБЫ НАЙТИ УЗЕЛ, РАСПОЛОЖЕННЫЙ НА УРОВНЕ~$l$. зАМЕТИМ, ОДНАКО, ЧТО СРЕДНЕЕ ЧИСЛО ПРОВЕРОК БИТОВ ПРИ СЛУЧАЙНОМ \emph{НЕУДАЧНОМ} ПОИСКЕ \emph{НЕ ТАК} ПРОСТО СВЯЗАНО С ДЛИНОЙ ВНЕШНЕГО ПУТИ ДЕРЕВА, ИБО НЕУДАЧНЫЙ ПОИСК С БОЛЬШЕЙ ВЕРОЯТНОСТЬЮ ОКАНЧИВАЕТСЯ ВБЛИЗИ КОРНЯ; НАПРИМЕР, ВЕРОЯТНОСТЬ ДОСТИЖЕНИЯ ЛЕВОЙ ВЕТВИ УЗЛА~$0075$ (РИС.~35) РАВНА~$1/8$ (РАССМАТРИВАЮТСЯ БЕСКОНЕЧНО ТОЧНЫЕ КЛЮЧИ), А В ЛЕВУЮ ВЕТВЬ %%589 УЗЛА~$0232$ МЫ ПОПАДАЕМ С ВЕРОЯТНОСТЬЮ, РАВНОЙ ЛИШЬ~$1/32$. (пО ЭТОЙ ПРИЧИНЕ ПРИ РАВНОМЕРНОМ РАСПРЕДЕЛЕНИИ КЛЮЧЕЙ ДЕРЕВЬЯ ЦИФРОВОГО ПОИСКА, КАК ПРАВИЛО, ЛУЧШЕ СБАЛАНСИРОВАНЫ, ЧЕМ БИНАРНЫЕ ДЕРЕВЬЯ ПОИСКА, ИСПОЛЬЗОВАВШИЕСЯ В АЛГОРИТМЕ~6.2.2T.) дЛЯ ОПИСАНИЯ СООТВЕТСТВУЮЩИХ ХАРАКТЕРИСТИК ДЕРЕВЬЕВ ЦИФРОВОГО ПОИСКА МОЖНО ИСПОЛЬЗОВАТЬ ПРОИЗВОДЯЩУЮ ФУНКЦИЮ. пУСТЬ НА УРОВНЕ~$l$ РАСПОЛОЖЕНО $a_l$~УЗЛОВ; РАССМОТРИМ ПРОИЗВОДЯЩУЮ ФУНКЦИЮ~$a(z)=\sum a_l z^l$. нАПРИМЕР, РИС.~35 СООТВЕТСТВУЕТ \picture{рИС. 35 сЛУЧАЙНОЕ ДЕРЕВО ЦИФРОВОГО ПОИСКА, ПОСТРОЕННОЕ С ПОМОЩЬЮ АЛГОРИТМА D.} ФУНКЦИЯ~$a(z)=1+2z+4z^2+5z^3+4z^4$. еСЛИ $b_l$~УЗЛОВ УРОВНЯ~$l$ ЯВЛЯЮТСЯ ВНЕШНИМИ И~$b(z)=\sum b_l z^l$, ТО В СИЛУ УПР.~6.2.1-25 ИМЕЕМ $$ b(z)=1+(2z-1)a(z). \eqno(7) $$ нАПРИМЕР, $1+(2z-1)(1+2z+4z^2+5z^3+4z^4)=3z^3+6z^4+8z^5$. сРЕДНЕЕ ЧИСЛО ПРОВЕРОК БИТОВ ПРИ СЛУЧАЙНОМ УДАЧНОМ ПОИСКЕ РАВНО~$a'(1)/a(l)$, ТАК КАК $a'(1)$~ЕСТЬ ДЛИНА ВНУТРЕННЕГО ПУТИ ДЕРЕВА, А $a(1)$---КОЛИЧЕСТВО ВНУТРЕННИХ УЗЛОВ. сРЕДНЕЕ ЧИСЛО ПРОВЕРОК БИТОВ ДЛЯ СЛУЧАЙНОГО \emph{НЕУДАЧНОГО} ПОИСКА РАВНО~$\sum l b_l 2^{-l}={1\over2}b'\left({1\over2}\right)= a\left({1\over2}\right)$, ТАК КАК МЫ ДОСТИГАЕМ ДАННОГО ВНЕШНЕГО УЗЛА УРОВНЯ~$l$ С ВЕРОЯТНОСТЬЮ~$2^{-l}$. пРИ НЕУДАЧНОМ ПОИСКЕ ЧИСЛО СРАВНЕНИЙ СОВПАДАЕТ С ЧИСЛОМ ПРОВЕРОК БИТОВ, А ПРИ "УДАЧНОМ"---НА ЕДИНИЦУ БОЛЬШЕ ЭТОГО ЧИСЛА. дЛЯ ДЕРЕВА РИС.~35 УДАЧНЫЙ ПОИСК В СРЕДНЕМ ТРЕБУЕТ $2{9\over16}$~ПРОВЕРОК БИТОВ И~$3{9\over16}$~СРАВНЕНИЙ; В ПРОЦЕССЕ НЕУДАЧНОГО ПОИСКА ПРОИЗВОДИТСЯ $3{7\over8}$~СРАВНЕНИЙ И ПРОВЕРОК (В СРЕДНЕМ). %%590 вВЕДЕМ ТЕПЕРЬ "УСРЕДНЕННУЮ" ПО ВСЕМ ДЕРЕВЬЯМ С $N$~УЗЛАМИ ФУНКЦИЮ~$a(z)$ И ОБОЗНАЧИМ ЕЕ ЧЕРЕЗ~$g_N(z)$. иНЫМИ СЛОВАМИ, $g_N(z)=\sum p_T a_T(z)$, ГДЕ СУММА БЕРЕТСЯ ПО ВСЕМ БИНАРНЫМ ДЕРЕВЬЯМ ЦИФРОВОГО ПОИСКА~$T$ С $N$~ВНУТРЕННИМИ УЗЛАМИ; $a_T(z)$ ЕСТЬ ПРОИЗВОДЯЩАЯ ФУНКЦИЯ ДЛЯ ВНУТРЕННИХ УЗЛОВ~$T$, А $p_T$~ЕСТЬ ВЕРОЯТНОСТЬ ТОГО, ЧТО ПРИ ВСТАВКЕ $N$~СЛУЧАЙНЫХ ЧИСЕЛ С ПОМОЩЬЮ АЛГОРИТМА~D ПОЛУЧАЕТСЯ ДЕРЕВО~$T$. тАКИМ ОБРАЗОМ, ДЛЯ УДАЧНОГО ПОИСКА СРЕДНЕЕ ЧИСЛО ПРОВЕРОК БИТОВ РАВНО~$g'_N(1)/N$, А ДЛЯ НЕУДАЧНОГО---$g_N\left({1\over2}\right)$. иМИТИРУЯ ПРОЦЕСС ПОСТРОЕНИЯ ДЕРЕВА, $g_N(z)$ МОЖНО ВЫЧИСЛИТЬ СЛЕДУЮЩИМ ОБРАЗОМ. еСЛИ $a(z)$ ЕСТЬ ПРОИЗВОДЯЩАЯ ФУНКЦИЯ ДЛЯ ДЕРЕВА С $N$~УЗЛАМИ, МОЖНО ОБРАЗОВАТЬ $N+1$~ДЕРЕВЬЕВ, ДЕЛАЯ ВСТАВКУ В ПОЗИЦИЮ ЛЮБОГО ВНЕШНЕГО УЗЛА. эТА ВСТАВКА ПРОИЗВОДИТСЯ В ДАННЫЙ ВНЕШНИЙ УЗЕЛ УРОВНЯ~$l$ С ВЕРОЯТНОСТЬЮ~$2^{-l}$; СЛЕДОВАТЕЛЬНО, СУММА ПРОИЗВОДЯЩИХ ФУНКЦИЙ ДЛЯ $N+1$~НОВЫХ ДЕРЕВЬЕВ, УМНОЖЕННЫХ НА ВЕРОЯТНОСТЬ ИХ ПОЯВЛЕНИЯ, РАВНА $a(z)+b\left({1\over2}z\right)=a(z)+1 +(z-1)a\left({1\over2}z\right)$. уСРЕДНЯЯ ПО ВСЕМ ДЕРЕВЬЯМ С $N$~УЗЛАМИ, ПОЛУЧАЕМ $$ g_{N+1}(z)=g_N(z)+1+(z-1)g_N\left({1\over2}z\right);\qquad g_0(z)=0. \eqno(8) $$ с СООТВЕТСТВУЮЩЕЙ ПРОИЗВОДЯЩЕЙ ФУНКЦИЕЙ ДЛЯ ВНЕШНИХ УЗЛОВ $h_N(z)=1+(2z-1)g_N(z)$ РАБОТАТЬ НЕСКОЛЬКО ЛЕГЧЕ, ТАК КАК (8)~ЭКВИВАЛЕНТНО ФОРМУЛЕ $$ h_{N+1}(z)=h_N(z)+(2z-1)h_N\left({1\over2}z\right); h_0(z)=1. \eqno(9) $$ мНОГОКРАТНО ПРИМЕНЯЯ ЭТО ПРАВИЛО, НАХОДИМ, ЧТО $$ \eqalign{ & h_{N+1}(z)=\cr &=h_{N-1}(z)+2(2z-1)h_{N-1}\left({1\over2}\right)+(2z-1(z-1)h_{N-1} \left({1\over4}z\right)=\cr &=h_{N-2}(z)+3(2z-1)h_{N-2}\left({1\over2}\right)+3(2z-l)(z-l)h_{N-2} \left({1\over4}z\right)+\cr &\phantom{=}+(2z-1)(z-1) \left({1\over2}-1\right)h_{N-2} \left({1\over8}z\right)\cr } $$ И Т.~Д.; ОКОНЧАТЕЛЬНО ИМЕЕМ $$ \eqalignno{ h_N(z)&=\sum_k\perm{N}{k}\prod_{0\le j<k} (2^{1-j}z-1); & (10)\cr g_N(z)&=\sum_{k\ge0}\perm{N}{k+1} \prod_{0\le j<k}(2^{-j}z-1). & (11)\cr } $$ нАПРИМЕР, $g_4(z)=4+6(z-l)+4(z-l)\left({1\over2}z-l\right)+(z-1)\times %%591 \left({1\over2}z-1\right)\left({1\over4}z-1\right)$. эТИ ФОРМУЛЫ ПОЗВОЛЯЮТ ВЫРАЗИТЬ ИСКОМЫЕ ВЕЛИЧИНЫ В ВИДЕ СУММ ПРОИЗВЕДЕНИЙ: $$ \eqalignno{ \overline{C}_N&=g'_N(1)=\sum_{k\ge0}\perm{N}{k+2} \prod_{1\le j\le k} (2^{-j}-1); & (12) \cr g_N\left({1\over2}\right)&=\sum_{k\ge 0}\perm{N}{k+1} \prod_{1\le j\le k}(2^{-j}-1)=\overline{C}_{N+1}-\overline{C}_N.&(13)\cr } $$ сОВСЕМ НЕ ОЧЕВИДНО, ЧТО ЭТИ ФОРМУЛЫ ДЛЯ $\overline{C}_N$ УДОВЛЕТВОРЯЮТ~(Б)! к СОЖАЛЕНИЮ, НАЙДЕННЫЕ ВЫРАЖЕНИЯ НЕПРИГОДНЫ ДЛЯ ВЫЧИСЛЕНИЙ ИЛИ ПОЛУЧЕНИЯ АСИМПТОТИЧЕСКИХ ОЦЕНОК, ТАК КАК $2^{-j}-1<0$; ПОЛУЧИТСЯ БОЛЬШОЕ КОЛИЧЕСТВО ЧЛЕНОВ, МНОГИЕ ИЗ КОТОРЫХ СОКРАТЯТСЯ. бОЛЕЕ ПОЛЕЗНЫЕ ФОРМУЛЫ ДЛЯ $\overline{C}_N$ МОЖНО ВЫВЕСТИ, ПРИМЕНЯЯ ТОЖДЕСТВА УПР.~5.1.1-16. иМЕЕМ $$ \eqalign{ \overline{C}_N&=\left(\prod_{j\ge1}(1-2^{-j})\right) \sum_{k\ge0}\perm{N}{k+2}(-1)^k\prod_{l\ge0}(1-2^{-l-k-1})^{-1}=\cr &=\left(\prod_{j\ge1}(1-2^{-j})\right) \sum_{k\ge0}\perm{N}{k+2}(-1)^k\sum_{m\ge0}(2^{-k-1})^m \times\prod_{1\le r\le m}(1-2^{-r})^{-1}=\cr &=\sum_{m\ge0}2^m\left(\sum_k\perm{N}{k}(-2^{-m})^k-1+2^{-m}N\right) \prod_{j\ge0}(1-2^{-j-m-1})=\cr &=\sum_{m\ge0}2^m((1-2^{-m})^N-1+2^{-m}N)\sum_{n\ge0}(-2^{-m-1})^n 2^{-n(n-1)/2}\times\prod_{1\le r\le n}(1-2^{-r})^{-1}.\cr } \eqno(14) $$ сРАЗУ НЕ ЯСНО, ЧЕМ ЭТО ЛУЧШЕ ВЫРАЖЕНИЯ~(12), НО ВЫВЕДЕННАЯ ФОРМУЛА ИМЕЕТ ТО ВАЖНОЕ ПРЕИМУЩЕСТВО, ЧТО ОНА БЫСТРО СХОДИТСЯ ДЛЯ ЛЮБОГО ФИКСИРОВАННОГО~$n$. в ТОЧНОСТИ АНАЛОГИЧНАЯ СИТУАЦИЯ ВОЗНИКАЕТ И В СЛУЧАЕ БОРА [ФОРМУЛА (5.2.2-38)]; В САМОМ ДЕЛЕ, ЕСЛИ РАССМОТРЕТЬ В~(14) ЛИШЬ ЧЛЕНЫ С~$n=0$, ПОЛУЧАЕТСЯ РОВНО $N-1$~ПЛЮС ЧИСЛО ПРОВЕРОК В БИНАРНОМ БОРУ. дАЛЬНЕЙШИЙ ВЫВОД АСИМПТОТИЧЕСКОЙ ОЦЕНКИ МОЖНО ПРОВЕСТИ УЖЕ ИЗВЕСТНЫМ НАМ СПОСОБОМ; СМ.~УПР.~27. пРИВЕДЕННЫЙ ВЫВОД В БОЛЬШОЙ СТЕПЕНИ ОСНОВАН НА ПОДХОДЕ, ПРЕДЛОЖЕННОМ э.~г.~кОНХЕЙМОМ И~д.~дЖ.~нЬЮМЭНОМ [{\sl Discrete Mathematics,\/} {\bf 4} (1973), 56--63]. и НАКОНЕЦ, ВЗГЛЯНЕМ НА пАТРИЦИЮ С ТОЧКИ ЗРЕНИЯ МАТЕМАТИКА. еЕ БИНАРНОЕ ДЕРЕВО ПОХОЖЕ НА СООТВЕТСТВУЮЩИЙ БИНАРНЫЙ БОР С ТЕМИ ЖЕ КЛЮЧАМИ, НО СЖАТЫМИ ВМЕСТЕ (ИБО ПОЛЯ~|SKIP| УСТРАНЯЮТ ОДНОПУТЕВЫЕ РАЗВЕТВЛЕНИЯ), ТАК ЧТО ИМЕЕТСЯ $N-1$~ВНУТРЕННИХ %%592 И $N$~ВНЕШНИХ УЗЛОВ. нА РИС.~36 ИЗОБРАЖЕНО ДЕРЕВО пАТРИЦИИ, СООТВЕТСТВУЮЩЕЕ ШЕСТНАДЦАТИ КЛЮЧАМ В БОРУ РИС.~34. чИСЛА, ЗАКЛЮЧЕННЫЕ ВО ВНУТРЕННИХ УЗЛАХ, ОБОЗНАЧАЮТ СОДЕРЖИМОЕ ПОЛЕЙ |SKIP|; КЛЮЧИ УКАЗАНЫ ВМЕСТЕ С ВНЕШНИМИ УЗЛАМИ, ХОТЯ ПОСЛЕДНИЕ НЕ ПРИСУТСТВУЮТ ЯВНО (В ДЕЙСТВИТЕЛЬНОСТИ ВМЕСТО ВНЕШНИХ УЗЛОВ СУЩЕСТВУЮТ ПОМЕЧЕННЫЕ ССЫЛКИ НА ВНУТРЕННИЕ УЗЛЫ, КОТОРЫЕ В СВОЮ ОЧЕРЕДЬ ССЫЛАЮТСЯ НА МАССИВ |TEXT|). оДНАКО ДЛЯ ЦЕЛЕЙ АНАЛИЗА МОЖНО СЧИТАТЬ, ЧТО ВНЕШНИЕ УЗЛЫ СУЩЕСТВУЮТ В ТОМ ВИДЕ, КАК ОНИ ИЗОБРАЖЕНЫ НА РИС.~36. тАК КАК УДАЧНЫЙ ПОИСК С ИСПОЛЬЗОВАНИЕМ пАТРИЦИИ ОКАНЧИВАЕТСЯ ВО ВНЕШНИХ УЗЛАХ, СРЕДНЕЕ ЧИСЛО ПРОВЕРОК БИТОВ, ПРОИЗВОДИМЫХ ПРИ СЛУЧАЙНОМ УДАЧНОМ ПОИСКЕ, РАВНО ДЛИНЕ \picture{рИС. 36. пАТРИЦИЯ СТРОИТ ЭТО ДЕРЕВО ВМЕСТО РИС. 34.} ВНЕШНЕГО ПУТИ, ДЕЛЕННОЙ НА~$N$. еСЛИ, КАК И ВЫШЕ, ВВЕСТИ ПРОИЗВОДЯЩУЮ ФУНКЦИЮ~$b(z)$ ДЛЯ ВНЕШНИХ УЗЛОВ, ЭТО ЧИСЛО БУДЕТ РАВНО~$b'(1)/b(1)$. \emph{нЕУДАЧНЫЙ} ПОИСК ТАКЖЕ КОНЧАЕТСЯ ВО ВНЕШНЕМ УЗЛЕ, НО С ВЕРОЯТНОСТЬЮ~$2^{-l}$ ($l$---НОМЕР УРОВНЯ, НА КОТОРОМ РАСПОЛОЖЕН УЗЕЛ), ТАК ЧТО СРЕДНЕЕ ЧИСЛО ПРОВЕРОК БИТОВ СОСТАВЛЯЕТ~${1\over2}b'\left({1\over2}\right)$. нАПРИМЕР, ДЛЯ РИС.~36 $b(z)=3z^3+8z^4-3z^5+2z^6$; В СРЕДНЕМ УДАЧНЫЙ ПОИСК ТРЕБУЕТ $4{1\over4}$~ПРОВЕРОК БИТОВ, А НЕУДАЧНЫЙ---$3{25\over32}$. пРОИЗВОДЯЩУЮ ФУНКЦИЮ~$b(z)$, УСРЕДНЕННУЮ ПО ВСЕМ ДЕРЕВЬЯМ пАТРИЦИИ, ПОСТРОЕННЫМ С $N$~ВНЕШНИМИ УЗЛАМИ С ИСПОЛЬЗОВАНИЕМ РАВНОМЕРНО РАСПРЕДЕЛЕННЫХ КЛЮЧЕЙ, ОБОЗНАЧИМ ЧЕРЕЗ~$h_N(z)$. %%593 рЕКУРРЕНТНОЕ СООТНОШЕНИЕ $$ h_n(z)=2^{1-N}\sum_k\perm{n}{k}h_k(z)(z+\delta_{kn}(1-z)), \qquad h_0(z)=0, \qquad h_1(z)=1, \eqno(15) $$ ПО-ВИДИМОМУ, НЕ ИМЕЕТ ПРОСТОГО РЕШЕНИЯ. нО, К СЧАСТЬЮ, СУЩЕСТВУЕТ ПРОСТОЕ РЕКУРРЕНТНОЕ СООТНОШЕНИЕ ДЛЯ СРЕДНЕЙ ДЛИНЫ ВНЕШНЕГО ПУТИ~$h'_n(1)$, ПОСКОЛЬКУ $$ \eqalignno{ h'_n(1)&=2^{1-n}\sum_k\perm{n}{k}h'_k(1)+2^{1-n} \sum_k\perm{n}{k}(1-\delta_{kn})=&\cr &=n-2^{n-1}n+2^{1-n}\sum_k\perm{n}{k}h'_k(1).&(16)\cr } $$ тАК КАК ОНО ИМЕЕТ ВИД~(6), ДЛЯ НАХОЖДЕНИЯ~$h'_n(1)$ МОЖНО ИСПОЛЬЗОВАТЬ УЖЕ РАЗВИТЫЕ МЕТОДЫ; ОКАЗЫВАЕТСЯ, ЧТО $h'_n(1)$ РОВНО НА~$n$ МЕНЬШЕ СООТВЕТСТВУЮЩЕГО ЧИСЛА ПРОВЕРОК БИТОВ В СЛУЧАЙНОМ БИНАРНОМ БОРУ. тАКИМ ОБРАЗОМ, ПОЛЕ |SKIP| ПОЗВОЛЯЕТ СЭКОНОМИТЬ ПРИМЕРНО ОДНУ ПРОВЕРКУ БИТА ДЛЯ УДАЧНОГО ПОИСКА ПРИ СЛУЧАЙНЫХ ДАННЫХ. (сМ.~УПР.~31.) нА САМОМ ЖЕ ДЕЛЕ ИЗБЫТОЧНОСТЬ ТИПИЧНЫХ ДАННЫХ ПРИВЕДЕТ К БОЛЬШЕЙ ЭКОНОМИИ. еСЛИ МЫ ПОПЫТАЕМСЯ НАЙТИ СРЕДНЕЕ ЧИСЛО ПРОВЕРОК БИТОВ ДЛЯ СЛУЧАЙНОГО НЕУДАЧНОГО ПОИСКА, ПРОИЗВОДИМОГО пАТРИЦИЕЙ, ТО ПОЛУЧИМ СООТНОШЕНИЕ $$ a_n=1+{1\over 2^n-2}\sum_{k<n}\perm{n}{k}a_k, \qquad n\ge2; \qquad a_0=a_1=0. \eqno(17) $$ (зДЕСЬ $a_n={1\over2}h'_n\left({1\over2}\right)$.) оНО \emph{НЕ} ПОХОЖЕ НИ НА ОДНО ИЗ ИЗУЧЕННЫХ СООТНОШЕНИЙ, И СВЕСТИ ЕГО К НИМ НЕ ПРОСТО. нА САМОМ ДЕЛЕ ОКАЗЫВАЕТСЯ, ЧТО РЕШЕНИЕ СОДЕРЖИТ ЧИСЛА бЕРНУЛЛИ: $$ {na_{n-1}\over2}-n+2=\sum_{2\le k<n}\perm{n}{k}{B_k\over 2^{k-1}-1}. \eqno(18) $$ эТА ФОРМУЛА ЯВЛЯЕТСЯ, ВЕРОЯТНО, НАИБОЛЕЕ СЛОЖНОЙ АСИМПТОТИЧЕСКОЙ ОЦЕНКОЙ ИЗ ВСЕХ, КОТОРЫЕ НАМ НУЖНО БЫЛО ПОЛУЧИТЬ; РЕШЕНИЕ В УПР.~34 ДАЕТ ПОУЧИТЕЛЬНЫЙ ОБЗОР МНОГИХ РАНЕЕ ИЗУЧЕННЫХ ВЕЩЕЙ С НЕКОТОРЫМИ НЮАНСАМИ. \section вЫВОДЫ ИЗ АНАЛИЗА. сЛЕДУЮЩИЕ РЕЗУЛЬТАТЫ ЗАСЛУЖИВАЮТ НАИБОЛЬШЕГО ВНИМАНИЯ: \item{(a)}~чИСЛО УЗЛОВ, НЕОБХОДИМЫХ ДЛЯ ХРАНЕНИЯ $N$~СЛУЧАЙНЫХ КЛЮЧЕЙ В $M\hbox{-АРНОМ}$ БОРУ, РАЗВЕТВЛЕНИЯ В КОТОРОМ ПРОИСХОДЯТ ДО ТЕХ.ПОР, ПОКА НЕ ОСТАНЕТСЯ ПОДФАЙЛ ИЗ $\le s$~КЛЮЧЕЙ, ПРИМЕРНО РАВНО~$N/(s\ln M)$. (эТО ПРИБЛИЖЕНИЕ СПРАВЕДЛИВО ДЛЯ БОЛЬШИХ~$N$ %%594 И МАЛЫХ~$s$ И~$M$.) тАК КАК УЗЕЛ БОРА СОДЕРЖИТ $M$~ПОЛЕЙ ССЫЛОК, ТО, ЕСЛИ ВЫБРАТЬ $s=M$, ВСЕГО ПОТРЕБУЕТСЯ ЛИШЬ ОКОЛО $N/(\ln M)$~ПОЛЕЙ ССЫЛОК. \item{(b)}~дЛЯ ВСЕХ РАССМОТРЕННЫХ МЕТОДОВ КОЛИЧЕСТВО ЦИФР ИЛИ ЛИТЕР, ПРОВЕРЯЕМЫХ В ПРОЦЕССЕ СЛУЧАЙНОГО ПОИСКА, ПРИМЕРНО РАВНО~$\log_M N$. пРИ $M=2$ РАЗЛИЧНЫМИ МЕТОДАМИ МОЖНО ПОЛУЧИТЬ СЛЕДУЮЩИЕ БОЛЕЕ ТОЧНЫЕ ПРИБЛИЖЕНИЯ ДЛЯ ЧИСЛА ПРОВЕРОК БИТОВ: \ctable{ #\hfill\bskip &&\bskip \hfill$#$\hfill \cr & \hbox{уДАЧНЫЙ} &\hbox{нЕУДАЧНЫЙ} \cr пОИСК ПО БОРУ &\log_2N+1.33275 &\log_2N-0.10995\cr цИФРОВОЙ ПОИСК ПО ДЕРЕВУ &\log_2N-1.71665 &\log_2N-0.27395\cr пАТРИЦИЯ &\log_2N+0.33275 &\log_2N-0.31875\cr } [вСЕ ЭТИ ПРИБЛИЖЕННЫЕ ЗНАЧЕНИЯ МОЖНО ВЫРАЗИТЬ ЧЕРЕЗ ФУНДАМЕНТАЛЬНЫЕ МАТЕМАТИЧЕСКИЕ ПОСТОЯННЫЕ; НАПРИМЕР, ЧИСЛО~$0.31875$ ПОЛУЧИЛОСЬ ИЗ~$(\ln \pi-\gamma)/(\ln2)-1/2$.] \item{(c)}~"сЛУЧАЙНОСТЬ" ДАННЫХ ЗДЕСЬ ОЗНАЧАЕТ ТО, ЧТО $M\hbox{-ИЧНЫЕ}$ ЦИФРЫ ЯВЛЯЮТСЯ РАВНОМЕРНО РАСПРЕДЕЛЕННЫМИ, КАК ЕСЛИ БЫ КЛЮЧАМИ БЫЛИ ДЕЙСТВИТЕЛЬНЫЕ ЧИСЛА МЕЖДУ~0 И~1, ЗАПИСАННЫЕ В $M\hbox{-ИЧНОЙ}$ СИСТЕМЕ СЧИСЛЕНИЯ. мЕТОДЫ ЦИФРОВОГО ПОИСКА НЕ ЧУВСТВИТЕЛЬНЫ К ПОРЯДКУ, В КОТОРОМ КЛЮЧИ ПОМЕЩЕНЫ В ФАЙЛ (ИСКЛЮЧЕНИЕМ ЯВЛЯЕТСЯ АЛГОРИТМ~D, ЛИШЬ В МАЛОЙ СТЕПЕНИ ЧУВСТВИТЕЛЬНЫЙ К ПОРЯДКУ); НО ОНИ ОЧЕНЬ ЧУВСТВИТЕЛЬНЫ К РАСПРЕДЕЛЕНИЮ ЦИФР. нАПРИМЕР, ЕСЛИ НУЛЕВЫЕ БИТЫ ВСТРЕЧАЮТСЯ ГОРАЗДО ЧАЩЕ ЕДИНИЧНЫХ, ДЕРЕВЬЯ БУДУТ ГОРАЗДО БОЛЕЕ АСИММЕТРИЧНЫМИ ПО СРАВНЕНИЮ С ДЕРЕВЬЯМИ, ПОЛУЧЕННЫМИ ДЛЯ СЛУЧАЙНЫХ ДАННЫХ. (в УПР.~5.2.2-53 РАЗОБРАН ПРИМЕР ТОГО, ЧТО ПРОИСХОДИТ ПРИ ТАКОМ ВОЗДЕЙСТВИИ НА ДАННЫЕ.) \excercises \ex[00] еСЛИ ДЕРЕВО ИМЕЕТ ЛИСТЬЯ, ТО ЧТО ИМЕЕТ БОР? \ex[20] пОСТРОЙТЕ АЛГОРИТМ ВСТАВКИ НОВОГО КЛЮЧА В $M\hbox{-АРНЫЙ}$ БОР, ПРИДЕРЖИВАЯСЬ СОГЛАШЕНИЙ АЛГОРИТМА~T. \ex[21] пОСТРОЙТЕ АЛГОРИТМ УДАЛЕНИЯ КЛЮЧА ИЗ $M\hbox{-АРНОГО}$ БОРА, ПРИДЕРЖИВАЯСЬ СОГЛАШЕНИЙ АЛГОРИТМА~T. \rex[21] бОЛЬШИНСТВО ИЗ 360~ЭЛЕМЕНТОВ ТАБЛ.~1---ПРОБЕЛЫ (ПУСТЫЕ ССЫЛКИ). оДНАКО МОЖНО СЖАТЬ ТАБЛИЦУ ДО 49~ЭЛЕМЕНТОВ, ДОПУСКАЯ ПЕРЕКРЫТИЕ НЕПУСТЫЕ И ПУСТЫХ ЭЛЕМЕНТОВ: \picture{рИС. НА СТР. 594} %% 595 [уЗЛЫ (1), (2),~\dots, (12) ТАБЛ.~1 НАЧИНАЮТСЯ СООТВЕТСТВЕННО С ПОЗИЦИЙ 20, 19, 3, 14, 1, 17, 1, 7, 3, 20, 18, 4 СЖАТОЙ ТАБЛИЦЫ.] пОКАЖИТЕ, ЧТО, ЕСЛИ ЗАМЕНИТЬ ТАКОЙ СЖАТОЙ ТАБЛИЦЕЙ ТАБЛ.~1, ПРОГРАММА~T БУДЕТ РАБОТАТЬ И В ЭТОМ СЛУЧАЕ, ПРАВДА, НЕ СТОЛЬ БЫСТРО. \rex[м26] (й.~н.~пЭТТ.) в ДЕРЕВЬЯХ РИС.~31 БУКВЫ УПОРЯДОЧЕНЫ ПО АЛФАВИТУ ВНУТРИ КАЖДОГО СЕМЕЙСТВА. эТО НЕ ЯВЛЯЕТСЯ НЕОБХОДИМЫМ, И ЕСЛИ МЫ, ПРЕЖДЕ ЧЕМ СТРОИТЬ БИНАРНОЕ ДЕРЕВО ТИПА~(2), ИЗМЕНИМ ПОРЯДОК УЗЛОВ ВНУТРИ КАЖДОГО СЕМЕЙСТВА, ПОИСК МОЖЕТ УСКОРИТЬСЯ. кАКОЕ ПЕРЕУПОРЯДОЧЕНИЕ РИС.~31 БУДЕТ ОПТИМАЛЬНЫМ С ЭТОЙ ТОЧКИ ЗРЕНИЯ? (иСПОЛЬЗУЙТЕ ЧАСТОТЫ, ДАННЫЕ НА РИС.~32, И НАЙДИТЕ ЛЕС, КОТОРЫЙ, БУДУЧИ ПРЕДСТАВЛЕН В ВИДЕ БИНАРНОГО ДЕРЕВА, МИНИМИЗИРУЕТ ВРЕМЯ УДАЧНОГО ПОИСКА.) \ex[15] кАКОЕ ДЕРЕВО ЦИФРОВОГО ПОИСКА ПОЛУЧИТСЯ, ЕСЛИ ПЯТНАДЦАТЬ ЧЕТЫРЕХБИТОВЫХ БИНАРНЫХ КЛЮЧЕЙ 0001, 0010, 0011,~\dots, 1111 ВСТАВИТЬ В ВОЗРАСТАЮЩЕМ ПОРЯДКЕ С ПОМОЩЬЮ АЛГОРИТМА~D? (нАЧНИТЕ С КЛЮЧА~0001 В КОРНЕВОМ УЗЛЕ И ЗАТЕМ ПРОИЗВЕДИТЕ ЧЕТЫРНАДЦАТЬ ВСТАВОК.) \rex[M26] еСЛИ ПЯТНАДЦАТЬ КЛЮЧЕЙ ИЗ УПР.~6 ВСТАВЛЯЮТСЯ В ДРУГОМ ПОРЯДКЕ, МОЖЕТ ПОЛУЧИТЬСЯ ДРУГОЕ ДЕРЕВО. кАКОВА НАИХУДШАЯ СРЕДИ ВСЕХ $15!$~ВОЗМОЖНЫХ ПЕРЕСТАНОВОК ЭТИХ КЛЮЧЕЙ В ТОМ СМЫСЛЕ, ЧТО ОНА ПОРОЖДАЕТ ДЕРЕВО С НАИБОЛЬШЕЙ ДЛИНОЙ ВНУТРЕННЕГО ПУТИ? \ex[20] рАССМОТРИМ СЛЕДУЮЩИЕ ИЗМЕНЕНИЯ АЛГОРИТМА~D, ВЕДУЩИЕ К ИСКЛЮЧЕНИЮ ПЕРЕМЕННОЙ~$K1$: ЗАМЕНИТЬ "$K1$" НА "$K$" В ШАГЕ~D2 И УСТРАНИТЬ ОПЕРАЦИЮ~"$K1\asg K$" ИЗ ШАГА~D1. гОДИТСЯ ЛИ ПОЛУЧЕННЫЙ АЛГОРИТМ ДЛЯ ПОИСКА И ВСТАВКИ? \ex[21] нАПИШИТЕ \MIX-ПРОГРАММУ ДЛЯ АЛГОРИТМА~D И СРАВНИТЕ ЕЕ С ПРОГРАММОЙ~6.2.2T. вЫ МОЖЕТЕ ИСПОЛЬЗОВАТЬ БИНАРНЫЕ ОПЕРАЦИИ ВРОДЕ |SLB| (БИНАРНЫЙ СДВИГ ВЛЕВО |AX|), |JAE| (ПЕРЕХОД, ЕСЛИ |A|~ЧЕТНО) И Т.~Д., ЕСЛИ СОЧТЕТЕ НУЖНЫМ. вЫ МОЖЕТЕ ТАКЖЕ ИСПОЛЬЗОВАТЬ ИДЕЮ УПР.~8. \ex[23] иМЕЕТСЯ ФАЙЛ, ВСЕ КЛЮЧИ КОТОРОГО СУТЬ $n\hbox{-БИТОВЫЕ}$ ДВОИЧНЫЕ ЧИСЛА, И АРГУМЕНТ ПОИСКА $K=b_1\ b_2\ \ldots\ b_n$. пРЕДПОЛОЖИМ, ЧТО МЫ ХОТИМ НАЙТИ МАКСИМАЛЬНОЕ ЧИСЛО~$k$, ТАКОЕ, ЧТО В ФАЙЛЕ СУЩЕСТВУЕТ КЛЮЧ, НАЧИНАЮЩИЙСЯ С $b_1b_2\ldots b_k$. кАК СДЕЛАТЬ ЭТИ ЭФФЕКТИВНО, ЕСЛИ ФАЙЛ ПРЕДСТАВЛЕН В ВИДЕ: (a)~БИНАРНОГО ДЕРЕВА ПОИСКА (СР.~С~АЛГОРИТМОМ 6.2.2T); (b)~БИНАРНОГО БОРА (СР.~С АЛГОРИТМОМ~T); (c)~БИНАРНОГО ДЕРЕВА ЦИФРОВОГО ПОИСКА (СР. С АЛГОРИТМОМ~D)? \ex[21] мОЖНО ЛИ ИСПОЛЬЗОВАТЬ АЛГОРИТМ~6.2.2D БЕЗ ИЗМЕНЕНИЙ ДЛЯ УДАЛЕНИЯ УЗЛА ИЗ ДЕРЕВА ЦИФРОВОГО ПОИСКА? \ex[25] бУДЕТ ЛИ СЛУЧАЙНЫМ ДЕРЕВО, ПОЛУЧЕННОЕ В РЕЗУЛЬТАТЕ УДАЛЕНИЯ СЛУЧАЙНОГО ЭЛЕМЕНТА ИЗ СЛУЧАЙНОГО ДЕРЕВА ЦИФРОВОГО ПОИСКА, ПОСТРОЕННОГО С ПОМОЩЬЮ АЛГОРИТМА~D? (сР.~С~УПР.~11 И С ТЕОРЕМОЙ~6.2.2H.) \ex[20] ($M\hbox{-АРНЫЙ}$ ЦИФРОВОЙ ПОИСК). оБRЯСНИТЕ, КАК ИЗ АЛГОРИТМОВ~T И~D СОСТАВИТЬ СООБЩЕННЫЙ АЛГОРИТМ, СВОДЯЩИЙСЯ К АЛГОРИТМУ~D ПРИ~$M=2$. кАК СЛЕДУЕТ ИЗМЕНИТЬ ТАБЛ.~1, ЕСЛИ ИСПОЛЬЗОВАТЬ ВАШ АЛГОРИТМ ПРИ~$M=30?$ \rex[25] пОСТРОЙТЕ ЭФФЕКТИВНЫЙ АЛГОРИТМ, С ПОМОЩЬЮ КОТОРОГО СРАЗУ ПОСЛЕ УДАЧНОГО ЗАВЕРШЕНИЯ АЛГОРИТМА~P МОЖНО БЫЛО БЫ НАЙТИ ВСЕ МЕСТА В МАССИВЕ |TEXT|, ГДЕ ВСТРЕЧАЕТСЯ~$K$. \ex[28] пРИДУМАЙТЕ, ЭФФЕКТИВНЫЙ АЛГОРИТМ, КОТОРЫЙ МОЖНО ИСПОЛЬЗОВАТЬ ДЛЯ ПОСТРОЕНИЯ ДЕРЕВА пАТРИЦИИ ИЛИ ДЛЯ ВСТАВКИ НОВОЙ ССЫЛКИ НА |TEXT| В УЖЕ СУЩЕСТВУЮЩЕЕ ДЕРЕВО. вАШ АЛГОРИТМ ВСТАВКИ ДОЛЖЕН ОБРАЩАТЬСЯ К МАССИВУ |TEXT| НЕ БОЛЕЕ ДВУХ РАЗ. \ex[22] пОЧЕМУ ДЛЯ пАТРИЦИИ ХОТЕЛОСЬ БЫ ИМЕТЬ ТАКОЕ ОГРАНИЧЕНИЕ, ЧТО НИ ОДИН КЛЮЧ НЕ ДОЛЖЕН СЛУЖИТЬ НАЧАЛОМ ДРУГОГО? \ex[м25] нАЙДИТЕ СПОСОБ ВЫРАЗИТЬ РЕШЕНИЕ РЕКУРРЕНТНОГО СООТНОШЕНИЯ $$ x_0=x_1=0; \qquad x_n=a_n+m^{1-n}\sum_k\perm{n}{k}(m-1)^{n-k}x_k, \qquad n\ge2, $$ С ПОМОЩЬЮ БИНОМИАЛЬНЫХ ПРЕОБРАЗОВАНИЙ, ОБОБЩАЯ МЕТОД УПР.~5.2.2-36. \ex[M21] иСПОЛЬЗУЯ РЕЗУЛЬТАТ УПР.~17, ВЫРАЗИТЕ РЕШЕНИЯ УРАВНЕНИЙ~(4) И~(5) ЧЕРЕЗ ФУНКЦИИ~$U_n$ И~$V_n$, АНАЛОГИЧНЫЕ ВВЕДЕННЫМ В УПР.~5.2.2-38. %%596 \ex[вм23] нАЙДИТЕ АСИМПТОТИЧЕСКОЕ ЗНАЧЕНИЕ ФУНКЦИИ $$ K(n,s,m)=\sum_{k\ge2}\perm{n}{k}\perm{k}{s}{(-1)^k\over m^{k-1}-1} $$ С ТОЧНОСТЬЮ ДО~$O(1)$ ПРИ~$n\to\infty$ ДЛЯ ФИКСИРОВАННЫХ ЗНАЧЕНИЙ~$s\ge0$ И~$m>1$. [сЛУЧАЙ~$s=0$ РАССМОТРЕН В УПР.~5.2.2-50, А СЛУЧАЙ~$s=l$, $m=2$---В УПР.~5.2.2-48.] \rex[M30] рАССМОТРИМ $M\hbox{-АРНУЮ}$ БОРОВУЮ ПАМЯТЬ, В КОТОРОЙ, ДОСТИГНУВ ПОДФАЙЛА, СОДЕРЖАЩЕГО НЕ БОЛЕЕ $s$~КЛЮЧЕЙ, МЫ ИСПОЛЬЗУЕМ ПОСЛЕДОВАТЕЛЬНЫЙ ПОИСК. (сЛУЧАЮ~$s=1$ СООТВЕТСТВУЕТ АЛГОРИТМ~T.) пРИМЕНИТЕ РЕЗУЛЬТАТЫ ПРЕДЫДУЩИХ УПРАЖНЕНИЙ, ЧТОБЫ ПРОАНАЛИЗИРОВАТЬ: (a)~СРЕДНЕЕ ЧИСЛО УЗЛОВ БОРА; (b)~СРЕДНЕЕ ЧИСЛО ПРОВЕРЯЕМЫХ ЦИФР ИЛИ ЛИТЕР ПРИ УДАЧНОМ ПОИСКЕ; (c)~СРЕДНЕЕ ЧИСЛО СРАВНЕНИЙ, ПРОИЗВОДИМЫХ ПРИ УДАЧНОМ ПОИСКЕ. сФОРМУЛИРУЙТЕ ОТВЕТЫ В ВИДЕ АСИМПТОТИЧЕСКИХ ФОРМУЛ~($N\to\infty$) ДЛЯ ФИКСИРОВАННЫХ~$M$ И~$s$, ОТВЕТ ДЛЯ~(a) ДОЛЖЕН БЫТЬ ДАН С ТОЧНОСТЬЮ ДО~$O(1)$, ОТВЕТЫ ДЛЯ~(b) И~(c)---С ТОЧНОСТЬЮ ДО~$O(N^{-1})$. [еСЛИ~$M=2$, ЭТОТ АНАЛИЗ ПРИМЕНИМ ТАКЖЕ К МОДИФИЦИРОВАННОЙ ОБМЕННОЙ ПОРАЗРЯДНОЙ СОРТИРОВКЕ, КОГДА ПОДФАЙЛЫ РАЗМЕРА~$<s$ СОРТИРУЮТСЯ ПОСРЕДСТВОМ ВСТАВОК]. \ex[м25] сКОЛЬКО УЗЛОВ В СЛУЧАЙНОМ $M\hbox{-АРНОМ}$ БОРУ, СОДЕРЖАЩЕМ $N$~КЛЮЧЕЙ, ИМЕЮТ ПУСТУЮ ССЫЛКУ В КАЧЕСТВЕ НУЛЕВОЙ КОМПОНЕНТЫ? (нАПРИМЕР, 9 ИЗ 12~УЗЛОВ ТАБЛ.~1 В ПОЗИЦИИ "\]" ИМЕЮТ ПУСТУЮ ССЫЛКУ. "сЛУЧАЙНЫЙ" В ЭТОМ УПРАЖНЕНИИ, КАК И ОБЫЧНО, ОЗНАЧАЕТ, ЧТО ЛИТЕРЫ КЛЮЧЕЙ РАВНОМЕРНО РАСПРЕДЕЛЕНЫ МЕЖДУ~$0$ И~$M-1$.) \ex[м25] сКОЛЬКО УЗЛОВ РАСПОЛОЖЕНО НА 1-М УРОВНЕ СЛУЧАЙНОГО $M\hbox{-apНoro}$ БОРА, СОДЕРЖАЩЕГО $N$~КЛЮЧЕЙ, ПРИ $l=0$, 1, 2,~\dots? \ex[м26] сКОЛЬКО ПРОВЕРОК ЦИФР ПРОИЗВОДИТСЯ В СРЕДНЕМ ПРИ НЕУДАЧНОМ ПОИСКЕ В $M\hbox{-АРНОМ}$ БОРУ, СОДЕРЖАЩЕМ $N$~СЛУЧАЙНЫХ КЛЮЧЕЙ? \ex[M30] рАССМОТРИМ $M\hbox{-АРНЫЙ}$ БОР, ПРЕДСТАВЛЕННЫЙ В ВИДЕ ЛЕСА (СР.~С~РИС.~31). нАЙДИТЕ ТОЧНЫЕ И АСИМПТОТИЧЕСКИЕ ВЫРАЖЕНИЯ ДЛЯ: (a)~СРЕДНЕГО ЧИСЛА УЗЛОВ В ЛЕСУ; (b)~СРЕДНЕГО КОЛИЧЕСТВА ВЫПОЛНЕНИИ ПРИСВАИВАНИЯ~$|P|\asg|RLINK|(|P|)$ В ПРОЦЕССЕ СЛУЧАЙНОГО УДАЧНОГО ПОИСКА. \rex[м24] мАТЕМАТИЧЕСКИЙ ВЫВОД АСИМПТОТИЧЕСКИХ ЗНАЧЕНИЙ, СДЕЛАННЫЙ В ДАННОМ ПУНКТЕ, ВЕСЬМА ТРУДЕН; ИСПОЛЬЗОВАЛАСЬ ДАЖЕ ТЕОРИЯ КОМПЛЕКСНОГО ПЕРЕМЕННОГО. дЕЛО В ТОМ, ЧТО МЫ НЕ ХОТЕЛИ ОГРАНИЧИВАТЬСЯ ГЛАВНЫМ ЧЛЕНОМ АСИМПТОТИКИ, А ВТОРОЙ ЧЛЕН ДЕЙСТВИТЕЛЬНО СЛОЖЕН. цЕЛЬ ЭТОГО УПРАЖНЕНИЯ СОСТОИТ В ТОМ, ЧТОБЫ ЭЛЕМЕНТАРНЫМИ МЕТОДАМИ ПОЛУЧИТЬ НЕКОТОРЫЕ РЕЗУЛЬТАТЫ В ОСЛАБЛЕННОЙ ФОРМЕ, (a)~дОКАЖИТЕ ПО ИНДУКЦИИ, ЧТО РЕШЕНИЕ УРАВНЕНИЯ~(4) ПРИ~$N\ge1$ УДОВЛЕТВОРЯЕТ НЕРАВЕНСТВУ~$A_N\le M(N-1)/(M-1)$. (b)~пУСТЬ~$D_N=C_N-NH_{N-1}/(\ln M)$, ГДЕ $C_N$~НАХОДИТСЯ ИЗ~(5). дОКАЖИТЕ, ЧТО~$D_N=O(N)$, СЛЕДОВАТЕЛЬНО, $C_N=N\log_MN+O(N)$. [\emph{уКАЗАНИЕ:} ИСПОЛЬЗУЙТЕ~(a) И ТЕОРЕМУ~1.2.7A.] \ex[23] оПРЕДЕЛИТЕ ВРУЧНУЮ ЗНАЧЕНИЕ БЕСКОНЕЧНОГО ПРОИЗВЕДЕНИЯ $$ \left(1-{1\over2}\right)\left(1-{1\over4}\right) \left(1-{1\over8}\right)\left(1-{1\over16}\right)\cdots $$ С ТОЧНОСТЬЮ ДО~$10^{-5}$. [\emph{уКАЗАНИЕ:} СР.~С~УПР.~5.1.1-16.] \ex[вм31] с ПОМОЩЬЮ СООТНОШЕНИЯ~(14) НАЙДИТЕ АСИМПТОТИЧЕСКОЕ ЗНАЧЕНИЕ~$\overline{C}_N$ С ТОЧНОСТЬЮ ДО~$O(1)$. \ex[вм26] нАЙДИТЕ АСИМПТОТИЧЕСКОЕ ПОВЕДЕНИЕ СРЕДНЕГО ЧИСЛА ПРОВЕРОК ЦИФР ПРИ ПОИСКЕ В СЛУЧАЙНОМ ДЕРЕВЕ ЦИФРОВОГО ПОИСКА, $M\ge2$. рАССМОТРИТЕ КАК УДАЧНЫЙ, ТАК И НЕУДАЧНЫЙ ПОИСК. дАЙТЕ ОТВЕТ С ТОЧНОСТЬЮ ДО~$O(N^{-1})$. \ex[м46] нАЙДИТЕ АСИМПТОТИКУ СРЕДНЕГО ЧИСЛА УЗЛОВ В $M\hbox{-АРНОМ}$ ДЕРЕВЕ ЦИФРОВОГО ПОИСКА, ВСЕ $M$~ССЫЛОК КОТОРЫХ ПУСТЫ. (иСКЛЮЧИВ ТАКИЕ УЗЛЫ, МЫ МОГЛИ БЫ СЭКОНОМИТЬ ПАМЯТЬ; СР.~С~УПР.~13.) %% 597 \ex[M24] пОКАЖИТЕ, ЧТО ПРОИЗВОДЯЩУЮ ФУНКЦИЮ пАТРИЦИИ~$h_n(z)$, ОПРЕДЕЛЕННУЮ В~(15), МОЖНО ВЫРАЗИТЬ В ТАКОМ ДОСТАТОЧНО "УЖАСНОМ" ВИДЕ: $$ n\sum_{m\ge1} z^m \left( \sum_{\scriptstyle a_1+\cdots+a_m=n-1\atop\scriptstyle a_1, \ldots, a_m\ge1} \perm{n-1}{a_1,\ldots, a_m}\times {1\over (2^{a_1}-1)(2^{a_1+a_2}-1)\ldots(2^{a_1+\cdots+a_m}-1)}\right). $$ [тАКИМ ОБРАЗОМ, ЕСЛИ БЫ СУЩЕСТВОВАЛА ПРОСТАЯ ФОРМУЛА ДЛЯ~$h_n(z)$, МЫ МОГЛИ БЫ УПРОСТИТЬ ЭТО ДОВОЛЬНО ГРОМОЗДКОЕ ВЫРАЖЕНИЕ.] \ex[M21] нАЙДИТЕ~$h'_n(1)$ ИЗ СООТНОШЕНИЯ~(16). \ex[M21] чЕМУ РАВНО СРЕДНЕЕ ЗНАЧЕНИЕ СУММЫ ВСЕХ ПОЛЕЙ |SKIP| В СЛУЧАЙНОМ ДЕРЕВЕ пАТРИЦИИ С $N-1$ ВНУТРЕННИМИ УЗЛАМИ? \ex[M30] дОКАЖИТЕ, ЧТО~[18] УДОВЛЕТВОРЯЕТ РЕКУРРЕНТНОМУ СООТНОШЕНИЮ~(17). [\emph{уКАЗАНИЕ:} РАССМОТРИТЕ ПРОИЗВОДЯЩУЮ ФУНКЦИЮ~$A(z)=\sum_{n\ge0} a_nz^n/n!$.] \ex[вм40] цЕЛЬЮ ЭТОГО УПРАЖНЕНИЯ ЯВЛЯЕТСЯ НАХОЖДЕНИЕ АСИМПТОТИЧЕСКОГО ПОВЕДЕНИЯ ФУНКЦИИ~(18). \item{(a)}~дОКАЖИТЕ, ЧТО ПРИ $n\ge2$ $$ {1\over n}\sum_{2\le k<n}\perm{n}{k}{B_k\over 2^{k-1}-1}= \sum_{j\ge1}\left({1^{n-1}+2^{n-1}+\cdots+(2^j-1)^{n-1}\over 2^{j(n-1)}} -{2^j\over n}+{1\over 2}\right). $$ \item{(b)}~пОКАЖИТЕ, ЧТО СЛАГАЕМЫЕ В ПРАВОЙ ЧАСТИ~(a) МОЖНО ПРИБЛИЗИТЬ ФУНКЦИЯМИ~$1/(e^x-1)-1/x+1/2$, ГДЕ~$x=n/2^j$; ПОЛУЧАЮЩАЯСЯ ПРИ ЭТОМ СУММА ОТЛИЧАЕТСЯ ОТ ПЕРВОНАЧАЛЬНОЙ НА~$O(n^{-1})$. \item{(c)}~пОКАЖИТЕ, ЧТО ДЛЯ ДЕЙСТВИТЕЛЬНОГО~$x>0$ $$ {1\over e^x-1}-{1\over x}+{1\over2}= {1\over 2\pi i}\int_{-{1\over2}-i\infty}^{-{1\over2}+i\infty}\zeta(z)\Gamma(z)x^{-z}\,dx. $$ \item{(d)}~сЛЕДОВАТЕЛЬНО, РАССМАТРИВАЕМАЯ СУММА РАВНА $$ {1\over 2\pi i}\int_{-{1\over2}-i\infty}^{-{1\over2}+i\infty} {\zeta(z)\Gamma(z)n^{-z}\over 2^{-z}-1}\,dx+O(n^{-1}); $$ ОЦЕНИТЕ ЭТОТ ИНТЕГРАЛ. \rex[м20] кАКОВА ВЕРОЯТНОСТЬ ТОГО, ЧТО ДЕРЕВО пАТРИЦИИ, СОДЕРЖАЩЕЕ ПЯТЬ КЛЮЧЕЙ, ИМЕЕТ ВИД \picture{рИС. СТР. 597} %%598 ПРИЧЕМ ПОЛЯ |SKIP| СОДЕРЖАТ $a$, $b$, $c$, $d$, КАК ПОКАЗАНО НА РИСУНКЕ? (пРЕДПОЛАГАЕТСЯ, ЧТО КЛЮЧИ ИМЕЮТ НЕЗАВИСИМЫЕ СЛУЧАЙНЫЕ БИТЫ; ОТВЕТ НУЖНО ПРЕДСТАВИТЬ В ВИДЕ ФУНКЦИИ ОТ $a$, $b$, $c$ И~$d$.) \ex[M25] иМЕЕТСЯ ПЯТЬ БИНАРНЫХ ДЕРЕВЬЕВ С ТРЕМЯ ВНУТРЕННИМИ УЗЛАМИ. еСЛИ МЫ РАССМОТРИМ, КАК ЧАСТО КАЖДОЕ ИЗ НИХ СЛУЖИТ ДЕРЕВОМ, ПОИСКА В РАЗЛИЧНЫХ АЛГОРИТМАХ (ДАННЫЕ ПРЕДПОЛАГАЮТСЯ СЛУЧАЙНЫМИ), ТО ПОЛУЧИМ СЛЕДУЮЩИЕ РАЗЛИЧНЫЕ ВЕРОЯТНОСТИ: \picture{рИС. СТР. 598 --- В ТАБЛИЦУ ПО ЧАСТЯМ:} \ctable{ # &$#$&$#$&$#$&$#$&$#$\cr &&&&&\cr пОИСК ПО ДЕРЕВУ (АЛГОРИТМ 6.2.2.T) & 1\over 6 & 1\over6 & 1\over3 & 1\over6 & 1\over6\cr цИФРОВОЙ ПОИСК ПО ДЕРЕВУ (АЛГОРИТМ D)&1\over8 & 1\over8 & 1\over2 & 1\over8 & 1\over8\cr пАТРИЦИЯ (АЛГОРИТМ р) & 1\over7 & 1\over7 & 3\over7 & 1\over7 & 1\over7\cr } (зАМЕТИМ, ЧТО ДЕРЕВО ЦИФРОВОГО ПОИСКА ИМЕЕТ НАИБОЛЬШУЮ ТЕНДЕНЦИЮ К СБАЛАНСИРОВАННОСТИ.) в УПР.~6.2.2-5 МЫ НАШЛИ ФОРМУЛУ ДЛЯ ВЕРОЯТНОСТИ В СЛУЧАЕ ПОИСКА ПО ДЕРЕВУ: $\prod(1/s(x))$, ГДЕ ПРОИЗВЕДЕНИЕ БЕРЕТСЯ ПО ВСЕМ ВНУТРЕННИМ УЗЛАМ~$x$, a~$s(x)$---ЧИСЛО ВНУТРЕННИХ УЗЛОВ В ПОДДЕРЕВЕ, КОРНЕМ КОТОРОГО СЛУЖИТ~$x$. нАЙДИТЕ АНАЛОГИЧНЫЕ ФОРМУЛЫ ДЛЯ ВЕРОЯТНОСТИ В СЛУЧАЕ: (a)~АЛГОРИТМА~D; (b)~АЛГОРИТМА~р. \rex[м22] рАССМОТРИМ БИНАРНОЕ ДЕРЕВО, НА $l\hbox{-М}$ УРОВНЕ КОТОРОГО РАСПОЛОЖЕНО $b_l$~ВНЕШНИХ УЗЛОВ. в ТЕКСТЕ УКАЗЫВАЛОСЬ, ЧТО ВРЕМЯ НЕУДАЧНОГО ПОИСКА В ДЕРЕВЬЯХ ЦИФРОВОГО ПОИСКА НЕ СВЯЗАНО НЕПОСРЕДСТВЕННО С ДЛИНОЙ ВНЕШНЕГО ПУТИ~$\sum lb_l$, А, ПО СУЩЕСТВУ, ПРОПОРЦИОНАЛЬНО \emph{МОДИФИЦИРОВАННОЙ ДЛИНЕ ВНЕШНЕГО ПУТИ}~$\sum l b_l 2^{-l}$. дОКАЖИТЕ ИЛИ ОПРОВЕРГНИТЕ СЛЕДУЮЩЕЕ УТВЕРЖДЕНИЕ: СРЕДИ ВСЕХ ДЕРЕВЬЕВ С $N$~ВНЕШНИМИ УЗЛАМИ НАИМЕНЬШУЮ МОДИФИЦИРОВАННУЮ ДЛИНУ ВНЕШНЕГО ПУТИ ИМЕЕТ ТО ДЕРЕВО, ВСЕ ВНЕШНИЕ УЗЛЫ КОТОРОГО РАСПОЛОЖЕНЫ НЕ БОЛЕЕ ЧЕМ НА ДВУХ СМЕЖНЫХ УРОВНЯХ (СР.~С УПР.~5.3.1-20). \ex[м40] рАЗРАБОТАЙТЕ АЛГОРИТМ ДЛЯ НАХОЖДЕНИЯ $n\hbox{-УЗЛОВОГО}$ ДЕРЕВА, ИМЕЮЩЕГО МИНИМАЛЬНОЕ ЗНАЧЕНИЕ ВЕЛИЧИНЫ $\alpha\times\hbox{(ДЛИНА ВНУТРЕННЕГО ПУТИ)}+ \beta\times\hbox{(МОДИФИЦИРОВАННАЯ ДЛИНА ВНЕШНЕГО ПУТИ)}$, $\alpha$ И~$\beta$---ДАННЫЕ ЧИСЛА (СР.~С~УПР.~37). \ex[м43] пРИДУМАЙТЕ АЛГОРИТМ НАХОЖДЕНИЯ ОПТИМАЛЬНЫХ ДЕРЕВЬЕВ ЦИФРОВОГО ПОИСКА, АНАЛОГИЧНЫХ ОПТИМАЛЬНЫМ БИНАРНЫМ ДЕРЕВЬЯМ ПОИСКА, РАССМОТРЕННЫМ В П.~6.2.2. \ex[25] пУСТЬ $a_0a_1a_2\ldots$---ПЕРИОДИЧЕСКАЯ БИНАРНАЯ ПОСЛЕДОВАТЕЛЬНОСТЬ; $a_{N+k}=a_k$ ПРИ ВСЕХ~$k\ge0$. пОКАЖИТЕ, ЧТО ЛЮБУЮ ФИКСИРОВАННУЮ ЦЕПОЧКУ ЭТОГО ТИПА МОЖНО ПРЕДСТАВИТЬ В $O(N)$~ЯЧЕЙКАХ ПАМЯТИ ТАКИМ ОБРАЗОМ, ЧТО СЛЕДУЮЩАЯ ОПЕРАЦИЯ ТРЕБУЕТ ЛИШЬ $O(n)$~ШАГОВ: ИМЕЯ БИНАРНУЮ ЦЕПОЧКУ $b_0b_1\ldots b_{n-1}$, НУЖНО ОПРЕДЕЛИТЬ, СКОЛЬКО РАЗ ОНА ВСТРЕЧАЕТСЯ В ПЕРИОДЕ (Т.~Е.~НАЙТИ КОЛИЧЕСТВО ЗНАЧЕНИЙ~$p$, $0\le p<N$, ТАКИХ, ЧТО~$b_k=a_{p+k}$ ПРИ~$0\le k<n$). (дЛИНА ЦЕПОЧКИ~$n$, КАК И САМА ЦЕПОЧКА, ЯВЛЯЕТСЯ ПЕРЕМЕННОЙ. пРЕДПОЛАГАЕТСЯ, ЧТО КАЖДАЯ ЯЧЕЙКА ПАМЯТИ ДОСТАТОЧНО ВЕЛИКА, ЧТОБЫ ВМЕСТИТЬ ПРОИЗВОЛЬНОЕ ЦЕЛОЕ ЧИСЛО ОТ~$0$ ДО~$N$.) %%599 \ex[вм28] \exhead(пРИЛОЖЕНИЕ К ТЕОРИИ ГРУПП.) пУСТЬ $G$---СВОБОДНАЯ ГРУППА НАД СИМВОЛАМИ~$\set{a_1,~\ldots, a_n}$, Т.~Е.~МНОЖЕСТВО ВСЕХ ЦЕПОЧЕК $\alpha=b_1\ldots{}b_r$, ГДЕ $b_i$~ЕСТЬ ЛИБО~$a_j$, ЛИБО~$a_j^{-1}$, И НЕТ СМЕЖНЫХ ПАР~$a_ja_j^{-1}$ ИЛИ~$a_j^{-1}a_j$. оБРАТНЫМ К~$\alpha$ ЭЛЕМЕНТОМ ЯВЛЯЕТСЯ~$b_r^{-1}\ldots{}b_1^{-1}$; МЫ ПЕРЕМНОЖАЕМ ДВЕ ТАКИЕ ЦЕПОЧКИ ПУТЕМ КОНКАТЕНАЦИИ И СОКРАЩЕНИЯ СМЕЖНЫХ ВЗАИМНООБРАТНЫХ ЭЛЕМЕНТОВ. пУСТЬ $H$---ПОДГРУППА ГРУППЫ~$G$, ПОРОЖДЕННАЯ ЦЕПОЧКАМИ~$\set{\beta_1,~\ldots, \beta_p}$, Т.~Е.~МНОЖЕСТВО ВСЕХ ЭЛЕМЕНТОВ ИЗ~$G$, КОТОРЫЕ МОЖНО ЗАПИСАТЬ В ВИДЕ ПРОИЗВЕДЕНИЙ~$\beta_i$ И~$\beta_j^{-1}$. мОЖНО ПОКАЗАТЬ (СМ.~а.~г.~кУРОШ, тЕОРИЯ ГРУПП (м., "нАУКА", 1967), ГЛ.~9], ЧТО ВСЕГДА СУЩЕСТВУЕТ СИСТЕМА ОБРАЗУЮЩИХ~$\theta_1$,~\dots,$\theta_m$ ДЛЯ~$H$, $m\le p$, УДОВЛЕТВОРЯЮЩАЯ "СВОЙСТВУ нИЛЬСЕНА", КОТОРОЕ ГЛАСИТ, ЧТО СРЕДНИЙ СИМВОЛ В~$\theta_i$ (ИЛИ НЕ МЕНЕЕ ЧЕМ ОДИН ИЗ ДВУХ ЦЕНТРАЛЬНЫХ СИМВОЛОВ, ЕСЛИ $\theta_i$~ИМЕЕТ ЧЕТНУЮ ДЛИНУ) НИКОГДА НЕ СОКРАЩАЕТСЯ В ВЫРАЖЕНИЯХ~$\theta_i\theta^e_j$ ИЛИ~$\theta^e_j\theta_i$, $e=\pm1$ (КРОМЕ ОЧЕВИДНОГО ИСКЛЮЧЕНИЯ~$i=j$, $e=-1$). иЗ ЭТОГО СВОЙСТВА, ВЫТЕКАЕТ, ЧТО СУЩЕСТВУЕТ ПРОСТОЙ АЛГОРИТМ ПРОВЕРКИ ПРИНАДЛЕЖНОСТИ ПРОИЗВОЛЬНОГО ЭЛЕМЕНТА~$G$ ПОДГРУППЕ~$H$: ИСПОЛЬЗУЯ $2n$~СИМВОЛОВ $a_1$,~\dots, $a_n$, $a^{-1}_1$,~\dots, $a^{-1}_n$, ЗАПИШЕМ $2m$~КЛЮЧЕЙ $\theta_1$,~\dots, $\theta_m$, $\theta^{-1}_1$,~\dots, $\theta^{-1}_m$ В ДЕРЕВО, ОРИЕНТИРОВАННОЕ НА ПОИСК ПО СИМВОЛАМ. пУСТЬ $\alpha=b_1\ldots{}b_r$---ДАННЫЙ ЭЛЕМЕНТ ИЗ~$G$; ЕСЛИ~$r=0$, ТО ЭЛЕМЕНТ~$\alpha$, РАЗУМЕЕТСЯ, ПРИНАДЛЕЖИТ~$H$. в ПРОТИВНОМ СЛУЧАЕ ИЩЕМ~$\alpha$, НАХОДЯ САМУЮ ДЛИННУЮ ПРИСТАВКУ~$b_1\ldots{}b_k$, СООТВЕТСТВУЮЩУЮ КЛЮЧУ. еСЛИ БОЛЕЕ ЧЕМ ОДИН КЛЮЧ НАЧИНАЕТСЯ С~$b_1\ldots{}b_k$, ТО ЭЛЕМЕНТ~$\alpha$ НЕ ПРИНАДЛЕЖИТ~$H$; В ПРОТИВНОМ СЛУЧАЕ ОБОЗНАЧИМ ЭТОТ ЕДИНСТВЕННЫЙ КЛЮЧ ЧЕРЕЗ~$b_1\ldots{}b_kc_1\ldots{}c_l=\theta^e_l$ И ЗАМЕНИМ~$\alpha$ НА~$\theta^{-e}_l\alpha=c^{-1}_l\ldots{}c^{-1}_1b_{k+1}\ldots{}b_r$. еСЛИ ЭТО НОВОЕ ЗНАЧЕНИЕ~$\alpha$ ДЛИННЕЕ СТАРОГО (Т.~Е.\ ЕСЛИ~$l>k$), $\alpha$~НЕ ПРИНАДЛЕЖИТ~$H$; В ПРОТИВНОМ СЛУЧАЕ ПОВТОРЯЕМ ПРОЦЕСС С НОВЫМ ЗНАЧЕНИЕМ~$\alpha$. сВОЙСТВО нИЛЬСЕНА ГАРАНТИРУЕТ КОНЕЧНОСТЬ ЭТОГО АЛГОРИТМА. еСЛИ УДАЛОСЬ СВЕСТИ~$\alpha$ К ПУСТОЙ ЦЕПОЧКЕ, МЫ МОЖЕМ ВОССТАНОВИТЬ ИСХОДНОЕ ПРЕДСТАВЛЕНИЕ~$\alpha$ В ВИДЕ ПРОИЗВЕДЕНИЙ~$\theta_i$. нАПРИМЕР, ПУСТЬ $\set{\theta_1, \theta_2, \theta_3}=\set{bbb, b^{-1}a^{-1}b^{-1}, ba^{-1}b}$ И~$\alpha=bbabaab$. лЕС \picture{рИС. СТР. 599} ВМЕСТЕ С ОПИСАННЫМ АЛГОРИТМОМ ПОЗВОЛЯЕТ ПОЛУЧИТЬ~$\alpha=\theta_1\theta_3^{-1}\theta_1\theta_3^{-1}\theta_2^{-1}$. рЕАЛИЗУЙТЕ ЭТОТ АЛГОРИТМ, ИСПОЛЬЗУЯ В КАЧЕСТВЕ ВХОДНЫХ ДАННЫХ ДЛЯ ВАШЕЙ ПРОГРАММЫ~$\theta_i$. \ex[23] \exhead(сЖАТИЕ СПЕРЕДИ И СЗАДИ.) еСЛИ НАБОР БИНАРНЫХ КЛЮЧЕЙ ИСПОЛЬЗУЕТСЯ В КАЧЕСТВЕ УКАЗАТЕЛЯ ДЛЯ РАСЧЛЕНЕНИЯ БОЛЕЕ КРУПНОГО ФАЙЛА, ТО НЕТ НУЖДЫ ХРАНИТЬ ПОЛНЫЕ КЛЮЧИ. нАПРИМЕР, ШЕСТНАДЦАТЬ КЛЮЧЕЙ РИС.~34 МОЖНО УРЕЗАТЬ СПРАВА ТАК, ЧТОБЫ ОСТАВАЛОСЬ ДОСТАТОЧНО ЦИФР ДЛЯ ИХ ОДНОЗНАЧНОГО ОПРЕДЕЛЕНИЯ: $0000$, $0001$, $00100$, $00101$, $010$,~\dots, $1110001$. тАКИЕ УРЕЗАННЫЕ КЛЮЧИ МОЖНО ИСПОЛЬЗОВАТЬ ДЛЯ РАСЧЛЕНЕНИЯ ФАЙЛА НА СЕМНАДЦАТЬ ЧАСТЕЙ; НАПРИМЕР, ПЯТАЯ ЧАСТЬ СОСТОИТ ИЗ ВСЕХ КЛЮЧЕЙ, НАЧИНАЮЩИХСЯ С~$0011$ ИЛИ~$010$, А ПОСЛЕДНЯЯ ЧАСТЬ СОДЕРЖИТ ВСЕ КЛЮЧИ, НАЧИНАЮЩИЕСЯ С~$111001$, $11101$ ИЛИ~$1111$. уРЕЗАННЫЕ КЛЮЧИ МОЖНО ПРЕДСТАВИТЬ БОЛЕЕ КОМПАКТНО, ЕСЛИ ОПУСТИТЬ ЛЕВЫЕ ЦИФРЫ, ОБЩИЕ С ПРЕДЫДУЩИМ КЛЮЧОМ: $0000$, $***1$, $**100$, $****1$, $*10$,~\dots, $******1$. зА ЗВЕЗДОЧКАМИ ВСЕГДА СЛЕДУЕТ ЕДИНИЦА, ПОЭТОМУ ЕЕ МОЖНО ОПУСТИТЬ в БОЛЬШОМ ФАЙЛЕ БУДЕТ МНОГО ЗВЕЗДОЧЕК, И МЫ ДОЛЖНЫ ХРАНИТЬ ЛИШЬ ИХ ЧИСЛО И ЗНАЧЕНИЯ СЛЕДУЮЩИХ БИТОВ. (нА ЭТОТ СПОСОБ СЖАТИЯ АВТОРУ УКАЗАЛИ р.~э.~гЕЛЛЕР И~р.~л.~йОНСЕН.) %%600 пОКАЖИТЕ, ЧТО СУММАРНОЕ ЧИСЛО БИТОВ В СЖАТОМ ФАЙЛЕ, ИСКЛЮЧАЯ ЗВЕЗДОЧКИ И СЛЕДУЮЩУЮ ЗА НИМИ ЕДИНИЦУ, РАВНО ЧИСЛУ УЗЛОВ В БИНАРНОМ БОРУ, СОДЕРЖАЩЕМ ЭТИ КЛЮЧИ. (сЛЕДОВАТЕЛЬНО, СРЕДНЕЕ СУММАРНОЕ ЧИСЛО ТАКИХ БИТОВ ВО ВСЕМ УКАЗАТЕЛЕ ПРИМЕРНО РАВНО~$N/(\ln 2)$, ЧТО СОСТАВЛЯЕТ ЛИШЬ ОКОЛО $1.44$~БИТА НА КЛЮЧ. вОЗМОЖНО И ЕЩЕ БОЛЬШЕЕ СЖАТИЕ, ТАК КАК НАМ НУЖНО ПРЕДСТАВИТЬ ЛИШЬ СТРУКТУРУ БОРА, СР.~С~ТЕОРЕМОЙ 2.3.1A). \bye